@burdenoff/microfe-mybodyshield 2026.705.2 → 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 (566) 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/pages/DashboardPage.js +422 -323
  5. package/dist/mybodyshield/pages/DashboardPage.js.map +1 -1
  6. package/dist/mybodyshield/pages/_shared/visuals.js +16 -16
  7. package/dist/mybodyshield/pages/_shared/visuals.js.map +1 -1
  8. package/dist/mybodyshield/pages/coaching/CoachingPage.js +235 -166
  9. package/dist/mybodyshield/pages/coaching/CoachingPage.js.map +1 -1
  10. package/dist/mybodyshield/pages/goals/GoalsPage.js +304 -249
  11. package/dist/mybodyshield/pages/goals/GoalsPage.js.map +1 -1
  12. package/dist/mybodyshield/pages/nutrition/NutritionPage.js +700 -533
  13. package/dist/mybodyshield/pages/nutrition/NutritionPage.js.map +1 -1
  14. package/dist/mybodyshield/pages/programs/ProgramDetailPage.js +518 -454
  15. package/dist/mybodyshield/pages/programs/ProgramDetailPage.js.map +1 -1
  16. package/dist/mybodyshield/pages/programs/ProgramsPage.js +282 -234
  17. package/dist/mybodyshield/pages/programs/ProgramsPage.js.map +1 -1
  18. package/dist/mybodyshield/pages/progress/ProgressPage.js +422 -311
  19. package/dist/mybodyshield/pages/progress/ProgressPage.js.map +1 -1
  20. package/dist/mybodyshield/pages/recovery/RecoveryPage.js +335 -246
  21. package/dist/mybodyshield/pages/recovery/RecoveryPage.js.map +1 -1
  22. package/dist/mybodyshield/pages/train/SessionDetailPage.js +395 -302
  23. package/dist/mybodyshield/pages/train/SessionDetailPage.js.map +1 -1
  24. package/dist/mybodyshield/pages/train/SessionsPage.js +111 -75
  25. package/dist/mybodyshield/pages/train/SessionsPage.js.map +1 -1
  26. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js +63 -0
  27. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js.map +1 -0
  28. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js +55 -0
  29. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js.map +1 -0
  30. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js +62 -0
  31. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js.map +1 -0
  32. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js +22 -0
  33. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js.map +1 -0
  34. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js +13 -0
  35. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js.map +1 -0
  36. package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js +8 -0
  37. package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js.map +1 -0
  38. package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js +8 -0
  39. package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js.map +1 -0
  40. package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js +12 -0
  41. package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js.map +1 -0
  42. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js +19 -0
  43. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js.map +1 -0
  44. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js +8 -0
  45. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js.map +1 -0
  46. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js +17 -0
  47. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js.map +1 -0
  48. package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js +8 -0
  49. package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js.map +1 -0
  50. package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js +8 -0
  51. package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js.map +1 -0
  52. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js +10 -0
  53. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js.map +1 -0
  54. package/dist/node_modules/framer-motion/dist/es/events/event-info.js +13 -0
  55. package/dist/node_modules/framer-motion/dist/es/events/event-info.js.map +1 -0
  56. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js +260 -0
  57. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js.map +1 -0
  58. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js +24 -0
  59. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js.map +1 -0
  60. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js +61 -0
  61. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js.map +1 -0
  62. package/dist/node_modules/framer-motion/dist/es/gestures/focus.js +29 -0
  63. package/dist/node_modules/framer-motion/dist/es/gestures/focus.js.map +1 -0
  64. package/dist/node_modules/framer-motion/dist/es/gestures/hover.js +22 -0
  65. package/dist/node_modules/framer-motion/dist/es/gestures/hover.js.map +1 -0
  66. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js +140 -0
  67. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js.map +1 -0
  68. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js +44 -0
  69. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js.map +1 -0
  70. package/dist/node_modules/framer-motion/dist/es/gestures/press.js +28 -0
  71. package/dist/node_modules/framer-motion/dist/es/gestures/press.js.map +1 -0
  72. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js +41 -0
  73. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js.map +1 -0
  74. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js +27 -0
  75. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js.map +1 -0
  76. package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js +11 -0
  77. package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js.map +1 -0
  78. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js +53 -0
  79. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js.map +1 -0
  80. package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js +17 -0
  81. package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js.map +1 -0
  82. package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js +15 -0
  83. package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js.map +1 -0
  84. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js +63 -0
  85. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js.map +1 -0
  86. package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js +11 -0
  87. package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js.map +1 -0
  88. package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js +15 -0
  89. package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js.map +1 -0
  90. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js +48 -0
  91. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js.map +1 -0
  92. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js +26 -0
  93. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js.map +1 -0
  94. package/dist/node_modules/framer-motion/dist/es/motion/index.js +72 -0
  95. package/dist/node_modules/framer-motion/dist/es/motion/index.js.map +1 -0
  96. package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js +6 -0
  97. package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js.map +1 -0
  98. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js +23 -0
  99. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js.map +1 -0
  100. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js +60 -0
  101. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js.map +1 -0
  102. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js +52 -0
  103. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js.map +1 -0
  104. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js +9 -0
  105. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js.map +1 -0
  106. package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js +12 -0
  107. package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js.map +1 -0
  108. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js +15 -0
  109. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js.map +1 -0
  110. package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js +9 -0
  111. package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js.map +1 -0
  112. package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js +10 -0
  113. package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js.map +1 -0
  114. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js +23 -0
  115. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js.map +1 -0
  116. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js +21 -0
  117. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js.map +1 -0
  118. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js +9 -0
  119. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js.map +1 -0
  120. package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js +13 -0
  121. package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js.map +1 -0
  122. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js +28 -0
  123. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js.map +1 -0
  124. package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js +11 -0
  125. package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js.map +1 -0
  126. package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js +32 -0
  127. package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js.map +1 -0
  128. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js +28 -0
  129. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js.map +1 -0
  130. package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js +13 -0
  131. package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js.map +1 -0
  132. package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js +10 -0
  133. package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js.map +1 -0
  134. package/dist/node_modules/framer-motion/dist/es/utils/distance.js +10 -0
  135. package/dist/node_modules/framer-motion/dist/es/utils/distance.js.map +1 -0
  136. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js +6 -0
  137. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js.map +1 -0
  138. package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js +6 -0
  139. package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js.map +1 -0
  140. package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js +8 -0
  141. package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js.map +1 -0
  142. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
  143. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
  144. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.js +27 -0
  145. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.js.map +1 -0
  146. package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js +11 -0
  147. package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js.map +1 -0
  148. package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js +9 -0
  149. package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js.map +1 -0
  150. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js +109 -0
  151. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js.map +1 -0
  152. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js +131 -0
  153. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js.map +1 -0
  154. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js +86 -0
  155. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js.map +1 -0
  156. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js +30 -0
  157. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js.map +1 -0
  158. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js +12 -0
  159. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js.map +1 -0
  160. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js +15 -0
  161. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js.map +1 -0
  162. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js +34 -0
  163. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js.map +1 -0
  164. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js +24 -0
  165. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js.map +1 -0
  166. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js +168 -0
  167. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js.map +1 -0
  168. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js +11 -0
  169. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js.map +1 -0
  170. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js +18 -0
  171. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js.map +1 -0
  172. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js +8 -0
  173. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js.map +1 -0
  174. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js +11 -0
  175. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js.map +1 -0
  176. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js +47 -0
  177. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js.map +1 -0
  178. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js +59 -0
  179. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js.map +1 -0
  180. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js +28 -0
  181. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js.map +1 -0
  182. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js +23 -0
  183. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js.map +1 -0
  184. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js +63 -0
  185. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js.map +1 -0
  186. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js +69 -0
  187. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js.map +1 -0
  188. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js +10 -0
  189. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js.map +1 -0
  190. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js +10 -0
  191. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js.map +1 -0
  192. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js +14 -0
  193. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js.map +1 -0
  194. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js +8 -0
  195. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js.map +1 -0
  196. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js +8 -0
  197. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js.map +1 -0
  198. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js +9 -0
  199. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js.map +1 -0
  200. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js +20 -0
  201. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js.map +1 -0
  202. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js +38 -0
  203. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js.map +1 -0
  204. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js +6 -0
  205. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js.map +1 -0
  206. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js +9 -0
  207. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js.map +1 -0
  208. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js +24 -0
  209. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js.map +1 -0
  210. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js +9 -0
  211. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js.map +1 -0
  212. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js +20 -0
  213. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js.map +1 -0
  214. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js +27 -0
  215. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js.map +1 -0
  216. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js +29 -0
  217. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js.map +1 -0
  218. package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js +10 -0
  219. package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js.map +1 -0
  220. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js +7 -0
  221. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js.map +1 -0
  222. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js +9 -0
  223. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js.map +1 -0
  224. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js +21 -0
  225. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js.map +1 -0
  226. package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js +8 -0
  227. package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js.map +1 -0
  228. package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js +18 -0
  229. package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js.map +1 -0
  230. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js +15 -0
  231. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js.map +1 -0
  232. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js +6 -0
  233. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js.map +1 -0
  234. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js +13 -0
  235. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js.map +1 -0
  236. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js +37 -0
  237. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js.map +1 -0
  238. package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js +21 -0
  239. package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js.map +1 -0
  240. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js +26 -0
  241. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js.map +1 -0
  242. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js +11 -0
  243. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js.map +1 -0
  244. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js +10 -0
  245. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js.map +1 -0
  246. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js +10 -0
  247. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js.map +1 -0
  248. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js +10 -0
  249. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js.map +1 -0
  250. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js +19 -0
  251. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js.map +1 -0
  252. package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js +8 -0
  253. package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js.map +1 -0
  254. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js +32 -0
  255. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js.map +1 -0
  256. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js +8 -0
  257. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js.map +1 -0
  258. package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js +7 -0
  259. package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js.map +1 -0
  260. package/dist/node_modules/motion-dom/dist/es/frameloop/order.js +15 -0
  261. package/dist/node_modules/motion-dom/dist/es/frameloop/order.js.map +1 -0
  262. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js +34 -0
  263. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js.map +1 -0
  264. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js +17 -0
  265. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js.map +1 -0
  266. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js +12 -0
  267. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js.map +1 -0
  268. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js +13 -0
  269. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js.map +1 -0
  270. package/dist/node_modules/motion-dom/dist/es/gestures/hover.js +38 -0
  271. package/dist/node_modules/motion-dom/dist/es/gestures/hover.js.map +1 -0
  272. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js +38 -0
  273. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js.map +1 -0
  274. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js +23 -0
  275. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js.map +1 -0
  276. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js +30 -0
  277. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js.map +1 -0
  278. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js +6 -0
  279. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js.map +1 -0
  280. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js +6 -0
  281. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js.map +1 -0
  282. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js +6 -0
  283. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js.map +1 -0
  284. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js +18 -0
  285. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js.map +1 -0
  286. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js +27 -0
  287. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js.map +1 -0
  288. package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js +41 -0
  289. package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js.map +1 -0
  290. package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js +14 -0
  291. package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js.map +1 -0
  292. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js +45 -0
  293. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js.map +1 -0
  294. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js +32 -0
  295. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js.map +1 -0
  296. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js +31 -0
  297. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js.map +1 -0
  298. package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js +20 -0
  299. package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js.map +1 -0
  300. package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js +30 -0
  301. package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js.map +1 -0
  302. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js +15 -0
  303. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js.map +1 -0
  304. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js +24 -0
  305. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js.map +1 -0
  306. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js +586 -0
  307. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js.map +1 -0
  308. package/dist/node_modules/motion-dom/dist/es/projection/node/state.js +9 -0
  309. package/dist/node_modules/motion-dom/dist/es/projection/node/state.js.map +1 -0
  310. package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js +53 -0
  311. package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js.map +1 -0
  312. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js +15 -0
  313. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js.map +1 -0
  314. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js +15 -0
  315. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js.map +1 -0
  316. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js +19 -0
  317. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js.map +1 -0
  318. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js +14 -0
  319. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js.map +1 -0
  320. package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js +6 -0
  321. package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js.map +1 -0
  322. package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js +8 -0
  323. package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js.map +1 -0
  324. package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js +21 -0
  325. package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js.map +1 -0
  326. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js +20 -0
  327. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js.map +1 -0
  328. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js +14 -0
  329. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js.map +1 -0
  330. package/dist/node_modules/motion-dom/dist/es/render/Feature.js +11 -0
  331. package/dist/node_modules/motion-dom/dist/es/render/Feature.js.map +1 -0
  332. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js +206 -0
  333. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js.map +1 -0
  334. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js +30 -0
  335. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js.map +1 -0
  336. package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js +6 -0
  337. package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js.map +1 -0
  338. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js +58 -0
  339. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js.map +1 -0
  340. package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js +9 -0
  341. package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js.map +1 -0
  342. package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js +8 -0
  343. package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js.map +1 -0
  344. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js +37 -0
  345. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js.map +1 -0
  346. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js +30 -0
  347. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js.map +1 -0
  348. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js +38 -0
  349. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js.map +1 -0
  350. package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js +10 -0
  351. package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js.map +1 -0
  352. package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js +13 -0
  353. package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js.map +1 -0
  354. package/dist/node_modules/motion-dom/dist/es/render/store.js +6 -0
  355. package/dist/node_modules/motion-dom/dist/es/render/store.js.map +1 -0
  356. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js +42 -0
  357. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js.map +1 -0
  358. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js +24 -0
  359. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js.map +1 -0
  360. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js +30 -0
  361. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js.map +1 -0
  362. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js +6 -0
  363. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js.map +1 -0
  364. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js +17 -0
  365. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js.map +1 -0
  366. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js +12 -0
  367. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js.map +1 -0
  368. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js +16 -0
  369. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js.map +1 -0
  370. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js +137 -0
  371. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js.map +1 -0
  372. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js +21 -0
  373. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js.map +1 -0
  374. package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js +8 -0
  375. package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js.map +1 -0
  376. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js +14 -0
  377. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js.map +1 -0
  378. package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js +10 -0
  379. package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js.map +1 -0
  380. package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js +6 -0
  381. package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js.map +1 -0
  382. package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js +8 -0
  383. package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js.map +1 -0
  384. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js +15 -0
  385. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js.map +1 -0
  386. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js +24 -0
  387. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js.map +1 -0
  388. package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js +23 -0
  389. package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js.map +1 -0
  390. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js +13 -0
  391. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js.map +1 -0
  392. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js +6 -0
  393. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js.map +1 -0
  394. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js +10 -0
  395. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js.map +1 -0
  396. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js +22 -0
  397. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js.map +1 -0
  398. package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js +22 -0
  399. package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js.map +1 -0
  400. package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js +12 -0
  401. package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js.map +1 -0
  402. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js +14 -0
  403. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js.map +1 -0
  404. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js +39 -0
  405. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js.map +1 -0
  406. package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js +24 -0
  407. package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js.map +1 -0
  408. package/dist/node_modules/motion-dom/dist/es/resize/index.js +10 -0
  409. package/dist/node_modules/motion-dom/dist/es/resize/index.js.map +1 -0
  410. package/dist/node_modules/motion-dom/dist/es/stats/buffer.js +9 -0
  411. package/dist/node_modules/motion-dom/dist/es/stats/buffer.js.map +1 -0
  412. package/dist/node_modules/motion-dom/dist/es/utils/border-radius.js +11 -0
  413. package/dist/node_modules/motion-dom/dist/es/utils/border-radius.js.map +1 -0
  414. package/dist/node_modules/motion-dom/dist/es/utils/delay.js +14 -0
  415. package/dist/node_modules/motion-dom/dist/es/utils/delay.js.map +1 -0
  416. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js +35 -0
  417. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js.map +1 -0
  418. package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js +9 -0
  419. package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js.map +1 -0
  420. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js +9 -0
  421. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js.map +1 -0
  422. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js +9 -0
  423. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js.map +1 -0
  424. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js +32 -0
  425. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js.map +1 -0
  426. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js +54 -0
  427. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js.map +1 -0
  428. package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js +8 -0
  429. package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js.map +1 -0
  430. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js +10 -0
  431. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js.map +1 -0
  432. package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js +6 -0
  433. package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js.map +1 -0
  434. package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js +9 -0
  435. package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js.map +1 -0
  436. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js +16 -0
  437. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js.map +1 -0
  438. package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js +6 -0
  439. package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js.map +1 -0
  440. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js +14 -0
  441. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js.map +1 -0
  442. package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js +11 -0
  443. package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js.map +1 -0
  444. package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js +7 -0
  445. package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js.map +1 -0
  446. package/dist/node_modules/motion-dom/dist/es/value/index.js +94 -0
  447. package/dist/node_modules/motion-dom/dist/es/value/index.js.map +1 -0
  448. package/dist/node_modules/motion-dom/dist/es/value/types/auto.js +9 -0
  449. package/dist/node_modules/motion-dom/dist/es/value/types/auto.js.map +1 -0
  450. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js +21 -0
  451. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js.map +1 -0
  452. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js +23 -0
  453. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js.map +1 -0
  454. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js +14 -0
  455. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js.map +1 -0
  456. package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js +17 -0
  457. package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js.map +1 -0
  458. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js +17 -0
  459. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js.map +1 -0
  460. package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js +18 -0
  461. package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js.map +1 -0
  462. package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js +28 -0
  463. package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js.map +1 -0
  464. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js +54 -0
  465. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js.map +1 -0
  466. package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js +16 -0
  467. package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js.map +1 -0
  468. package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js +18 -0
  469. package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js.map +1 -0
  470. package/dist/node_modules/motion-dom/dist/es/value/types/int.js +10 -0
  471. package/dist/node_modules/motion-dom/dist/es/value/types/int.js.map +1 -0
  472. package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js +26 -0
  473. package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js.map +1 -0
  474. package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js +66 -0
  475. package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js.map +1 -0
  476. package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js +34 -0
  477. package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js.map +1 -0
  478. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js +17 -0
  479. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js.map +1 -0
  480. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js +14 -0
  481. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js.map +1 -0
  482. package/dist/node_modules/motion-dom/dist/es/value/types/test.js +6 -0
  483. package/dist/node_modules/motion-dom/dist/es/value/types/test.js.map +1 -0
  484. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js +14 -0
  485. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js.map +1 -0
  486. package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js +6 -0
  487. package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js.map +1 -0
  488. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js +14 -0
  489. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js.map +1 -0
  490. package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js +6 -0
  491. package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js.map +1 -0
  492. package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js +6 -0
  493. package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js.map +1 -0
  494. package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js +8 -0
  495. package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js.map +1 -0
  496. package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js +6 -0
  497. package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js.map +1 -0
  498. package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js +6 -0
  499. package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js.map +1 -0
  500. package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js +6 -0
  501. package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js.map +1 -0
  502. package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js +9 -0
  503. package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js.map +1 -0
  504. package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js +15 -0
  505. package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js.map +1 -0
  506. package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js +9 -0
  507. package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js.map +1 -0
  508. package/dist/node_modules/motion-utils/dist/es/array.js +12 -0
  509. package/dist/node_modules/motion-utils/dist/es/array.js.map +1 -0
  510. package/dist/node_modules/motion-utils/dist/es/clamp.js +6 -0
  511. package/dist/node_modules/motion-utils/dist/es/clamp.js.map +1 -0
  512. package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js +7 -0
  513. package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js.map +1 -0
  514. package/dist/node_modules/motion-utils/dist/es/easing/back.js +9 -0
  515. package/dist/node_modules/motion-utils/dist/es/easing/back.js.map +1 -0
  516. package/dist/node_modules/motion-utils/dist/es/easing/circ.js +8 -0
  517. package/dist/node_modules/motion-utils/dist/es/easing/circ.js.map +1 -0
  518. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js +20 -0
  519. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js.map +1 -0
  520. package/dist/node_modules/motion-utils/dist/es/easing/ease.js +7 -0
  521. package/dist/node_modules/motion-utils/dist/es/easing/ease.js.map +1 -0
  522. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js +6 -0
  523. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js.map +1 -0
  524. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js +6 -0
  525. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js.map +1 -0
  526. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js +6 -0
  527. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js.map +1 -0
  528. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js +6 -0
  529. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js.map +1 -0
  530. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js +33 -0
  531. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js.map +1 -0
  532. package/dist/node_modules/motion-utils/dist/es/errors.js +12 -0
  533. package/dist/node_modules/motion-utils/dist/es/errors.js.map +1 -0
  534. package/dist/node_modules/motion-utils/dist/es/format-error-message.js +8 -0
  535. package/dist/node_modules/motion-utils/dist/es/format-error-message.js.map +1 -0
  536. package/dist/node_modules/motion-utils/dist/es/global-config.js +6 -0
  537. package/dist/node_modules/motion-utils/dist/es/global-config.js.map +1 -0
  538. package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js +6 -0
  539. package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js.map +1 -0
  540. package/dist/node_modules/motion-utils/dist/es/is-object.js +6 -0
  541. package/dist/node_modules/motion-utils/dist/es/is-object.js.map +1 -0
  542. package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js +6 -0
  543. package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js.map +1 -0
  544. package/dist/node_modules/motion-utils/dist/es/memo.js +10 -0
  545. package/dist/node_modules/motion-utils/dist/es/memo.js.map +1 -0
  546. package/dist/node_modules/motion-utils/dist/es/noop.js +6 -0
  547. package/dist/node_modules/motion-utils/dist/es/noop.js.map +1 -0
  548. package/dist/node_modules/motion-utils/dist/es/pipe.js +6 -0
  549. package/dist/node_modules/motion-utils/dist/es/pipe.js.map +1 -0
  550. package/dist/node_modules/motion-utils/dist/es/progress.js +9 -0
  551. package/dist/node_modules/motion-utils/dist/es/progress.js.map +1 -0
  552. package/dist/node_modules/motion-utils/dist/es/subscription-manager.js +28 -0
  553. package/dist/node_modules/motion-utils/dist/es/subscription-manager.js.map +1 -0
  554. package/dist/node_modules/motion-utils/dist/es/time-conversion.js +6 -0
  555. package/dist/node_modules/motion-utils/dist/es/time-conversion.js.map +1 -0
  556. package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js +6 -0
  557. package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js.map +1 -0
  558. package/dist/node_modules/motion-utils/dist/es/warn-once.js +10 -0
  559. package/dist/node_modules/motion-utils/dist/es/warn-once.js.map +1 -0
  560. package/dist/node_modules/recharts/es6/cartesian/Area.js +435 -0
  561. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -0
  562. package/dist/node_modules/recharts/es6/chart/{LineChart.js → AreaChart.js} +5 -5
  563. package/dist/node_modules/recharts/es6/chart/{LineChart.js.map → AreaChart.js.map} +1 -1
  564. package/package.json +1 -1
  565. package/dist/node_modules/recharts/es6/cartesian/Line.js +0 -473
  566. package/dist/node_modules/recharts/es6/cartesian/Line.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SessionDetailPage.js","names":[],"sources":["../../../../src/mybodyshield/pages/train/SessionDetailPage.tsx"],"sourcesContent":["/**\n * Train — workout session detail & live logging.\n * @module mybodyshield/pages/train\n *\n * Renders a single workout session (real `mybSession`, including its `sets`).\n * While a session is IN_PROGRESS you can log sets and complete it; completed /\n * scheduled sessions render read-only. Sets are grouped by exercise. No mock\n * data — everything comes from the myb* hooks.\n */\n\nimport { useMemo, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Plus,\n CheckCircle2,\n Dumbbell,\n Weight,\n Timer,\n Flame,\n Ruler,\n Gauge,\n AlertTriangle,\n} from 'lucide-react';\nimport {\n Button,\n GlassCard,\n Label,\n Input,\n Textarea,\n Switch,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n MetricsCard,\n StatusBadge,\n EmptyState,\n LoadingView,\n ErrorView,\n MybDiscussion,\n} from '../../components';\nimport { IconChip } from '../_shared/visuals';\nimport { useMyBodyShield } from '../../context';\nimport { useMybSession, useMybLogSet, useMybCompleteSession } from '../../hooks';\nimport {\n formatDateTime,\n formatRelativeTime,\n formatNumber,\n formatWeight,\n formatKcal,\n formatDuration,\n} from '../../utils/formatters';\nimport type { MybSessionSet } from '../../types';\n\n/** Parse an optional numeric string into a number, or undefined when blank. */\nfunction numOrUndef(value: string): number | undefined {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n const n = Number(trimmed);\n return Number.isFinite(n) ? n : undefined;\n}\n\ninterface LogSetForm {\n exerciseName: string;\n setNumber: string;\n reps: string;\n weight: string;\n distanceM: string;\n durationSec: string;\n isPersonalRecord: boolean;\n}\n\nconst EMPTY_LOG_FORM: LogSetForm = {\n exerciseName: '',\n setNumber: '',\n reps: '',\n weight: '',\n distanceM: '',\n durationSec: '',\n isPersonalRecord: false,\n};\n\ninterface CompleteForm {\n caloriesBurned: string;\n perceivedExertion: string;\n notes: string;\n}\n\nconst EMPTY_COMPLETE_FORM: CompleteForm = { caloriesBurned: '', perceivedExertion: '', notes: '' };\n\nexport function SessionDetailPage() {\n const { navigateTo } = useMyBodyShield();\n const { id } = useParams<{ id: string }>();\n\n const session = useMybSession(id);\n const logSet = useMybLogSet();\n const completeSession = useMybCompleteSession();\n\n const [logOpen, setLogOpen] = useState(false);\n const [logForm, setLogForm] = useState<LogSetForm>(EMPTY_LOG_FORM);\n const [logError, setLogError] = useState<string | null>(null);\n\n const [completeOpen, setCompleteOpen] = useState(false);\n const [completeForm, setCompleteForm] = useState<CompleteForm>(EMPTY_COMPLETE_FORM);\n const [completeError, setCompleteError] = useState<string | null>(null);\n\n const data = session.data;\n const sets = useMemo<MybSessionSet[]>(() => data?.sets ?? [], [data?.sets]);\n\n const groups = useMemo(() => {\n const map = new Map<string, MybSessionSet[]>();\n for (const st of sets) {\n const arr = map.get(st.exerciseName) ?? [];\n arr.push(st);\n map.set(st.exerciseName, arr);\n }\n return Array.from(map.entries()).map(([name, list]) => ({\n name,\n sets: list.slice().sort((a, b) => a.setNumber - b.setNumber),\n }));\n }, [sets]);\n\n const totalVolume = useMemo(() => sets.reduce((acc, st) => acc + st.reps * st.weight, 0), [sets]);\n\n const startedAt = data?.startedAt;\n const completedAt = data?.completedAt;\n const durationSec = useMemo(() => {\n if (!startedAt || !completedAt) return undefined;\n const start = new Date(startedAt).getTime();\n const end = new Date(completedAt).getTime();\n if (!Number.isFinite(start) || !Number.isFinite(end) || end < start) return undefined;\n return (end - start) / 1000;\n }, [startedAt, completedAt]);\n\n if (!id) {\n return (\n <PageLayout title=\"Workout session\">\n <ErrorView message=\"No session was specified.\" onRetry={() => navigateTo('train')} />\n </PageLayout>\n );\n }\n\n if (session.isLoading) {\n return (\n <PageLayout title=\"Workout session\">\n <LoadingView label=\"Loading session…\" />\n </PageLayout>\n );\n }\n\n if (session.isError || !data) {\n return (\n <PageLayout title=\"Workout session\">\n <ErrorView\n title=\"Session not found\"\n message=\"This workout session may have been removed, or you don't have access to it.\"\n onRetry={() => session.refetch()}\n />\n </PageLayout>\n );\n }\n\n const isLive = data.status === 'IN_PROGRESS';\n\n const summary = data.completedAt\n ? `Completed ${formatRelativeTime(data.completedAt)}`\n : data.startedAt\n ? `Started ${formatRelativeTime(data.startedAt)}`\n : data.scheduledFor\n ? `Scheduled ${formatRelativeTime(data.scheduledFor)}`\n : `Created ${formatRelativeTime(data.createdAt)}`;\n\n const openLog = () => {\n setLogForm(EMPTY_LOG_FORM);\n setLogError(null);\n setLogOpen(true);\n };\n\n const submitLog = async () => {\n setLogError(null);\n const exerciseName = logForm.exerciseName.trim();\n if (!exerciseName) {\n setLogError('Exercise name is required.');\n return;\n }\n try {\n const created = await logSet.mutateAsync({\n sessionId: id,\n exerciseName,\n setNumber: numOrUndef(logForm.setNumber),\n reps: numOrUndef(logForm.reps),\n weight: numOrUndef(logForm.weight),\n distanceM: numOrUndef(logForm.distanceM),\n durationSec: numOrUndef(logForm.durationSec),\n isPersonalRecord: logForm.isPersonalRecord,\n });\n // Keep the dialog open for rapid multi-set entry: preserve the exercise and\n // pre-fill the next set number, clearing the per-set measurements.\n setLogForm({\n ...EMPTY_LOG_FORM,\n exerciseName,\n setNumber: String(created.setNumber + 1),\n });\n } catch (e) {\n setLogError(e instanceof Error ? e.message : 'Failed to log the set.');\n }\n };\n\n const openComplete = () => {\n setCompleteForm(EMPTY_COMPLETE_FORM);\n setCompleteError(null);\n setCompleteOpen(true);\n };\n\n const submitComplete = async () => {\n setCompleteError(null);\n try {\n await completeSession.mutateAsync({\n id,\n input: {\n caloriesBurned: numOrUndef(completeForm.caloriesBurned),\n perceivedExertion: numOrUndef(completeForm.perceivedExertion),\n notes: completeForm.notes.trim() ? completeForm.notes.trim() : undefined,\n },\n });\n setCompleteOpen(false);\n } catch (e) {\n setCompleteError(e instanceof Error ? e.message : 'Failed to complete the session.');\n }\n };\n\n const actions = isLive ? (\n <>\n <Button variant=\"outline\" onClick={openLog}>\n <Plus className=\"h-4 w-4\" /> Log set\n </Button>\n <Button onClick={openComplete}>\n <CheckCircle2 className=\"h-4 w-4\" /> Complete\n </Button>\n </>\n ) : undefined;\n\n return (\n <PageLayout title=\"Workout session\" description={summary} actions={actions}>\n <button\n type=\"button\"\n onClick={() => navigateTo('train')}\n className=\"mb-4 inline-flex items-center gap-1.5 text-sm font-medium text-text-secondary hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back to sessions\n </button>\n\n {/* Header card */}\n <GlassCard treatment=\"glass\" className=\"p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <IconChip\n icon={isLive ? <Flame className=\"h-5 w-5\" /> : <Dumbbell className=\"h-5 w-5\" />}\n tint={isLive ? 'var(--color-accent-teal)' : 'var(--color-accent-primary)'}\n />\n <div>\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={data.status} />\n </div>\n <p className=\"mt-1 text-sm text-text-secondary\">{summary}</p>\n </div>\n </div>\n </div>\n\n <div className=\"mt-5 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {data.scheduledFor && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Scheduled for</p>\n <p className=\"mt-0.5 text-sm font-medium text-text-primary\">\n {formatDateTime(data.scheduledFor)}\n </p>\n </div>\n )}\n {data.startedAt && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Started</p>\n <p className=\"mt-0.5 text-sm font-medium text-text-primary\">\n {formatDateTime(data.startedAt)}\n </p>\n </div>\n )}\n {data.completedAt && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Completed</p>\n <p className=\"mt-0.5 text-sm font-medium text-text-primary\">\n {formatDateTime(data.completedAt)}\n </p>\n </div>\n )}\n {data.perceivedExertion != null && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Perceived exertion</p>\n <p className=\"mt-0.5 text-sm font-medium tabular-nums text-text-primary\">\n {data.perceivedExertion}/10 RPE\n </p>\n </div>\n )}\n {data.caloriesBurned > 0 && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Calories burned</p>\n <p className=\"mt-0.5 text-sm font-medium tabular-nums text-text-primary\">\n {formatKcal(data.caloriesBurned)}\n </p>\n </div>\n )}\n </div>\n\n {data.notes && (\n <div className=\"mt-5 rounded-xl bg-bg-sunken/60 p-4\">\n <p className=\"text-xs text-text-tertiary\">Notes</p>\n <p className=\"mt-1 whitespace-pre-wrap text-sm text-text-secondary\">{data.notes}</p>\n </div>\n )}\n </GlassCard>\n\n {/* Stat cards */}\n <div className=\"mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <MetricsCard\n icon={<Dumbbell className=\"h-5 w-5\" />}\n value={formatNumber(sets.length)}\n label=\"Total sets\"\n />\n <MetricsCard\n icon={<Weight className=\"h-5 w-5\" />}\n value={`${formatNumber(totalVolume)} kg`}\n label=\"Total volume\"\n />\n <MetricsCard\n icon={<Timer className=\"h-5 w-5\" />}\n value={durationSec != null ? formatDuration(durationSec) : '—'}\n label=\"Duration\"\n />\n <MetricsCard\n icon={<Flame className=\"h-5 w-5\" />}\n value={data.caloriesBurned > 0 ? formatKcal(data.caloriesBurned) : '—'}\n label=\"Calories burned\"\n />\n </div>\n\n {/* Logged sets */}\n <div className=\"mt-8\">\n <div className=\"mb-3 flex items-end justify-between gap-3\">\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">Logged sets</h2>\n <p className=\"mt-0.5 text-sm text-text-secondary\">\n Every set recorded during this session, grouped by exercise.\n </p>\n </div>\n {isLive && (\n <Button variant=\"outline\" size=\"sm\" onClick={openLog} className=\"shrink-0\">\n <Plus className=\"h-4 w-4\" /> Log set\n </Button>\n )}\n </div>\n\n {groups.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Dumbbell className=\"h-10 w-10\" />}\n title=\"No sets logged yet\"\n description={\n isLive\n ? 'Log your first set to start tracking this workout.'\n : 'No sets were recorded for this session.'\n }\n action={\n isLive ? (\n <Button onClick={openLog}>\n <Plus className=\"h-4 w-4\" /> Log set\n </Button>\n ) : undefined\n }\n />\n ) : (\n <div className=\"space-y-4\">\n {groups.map((group) => (\n <GlassCard key={group.name} treatment=\"plain\" className=\"p-4\">\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <h3 className=\"text-sm font-semibold text-text-primary\">{group.name}</h3>\n <span className=\"text-xs tabular-nums text-text-tertiary\">\n {formatNumber(group.sets.length)} {group.sets.length === 1 ? 'set' : 'sets'}\n </span>\n </div>\n <ul className=\"divide-y divide-border-seam\">\n {group.sets.map((st) => {\n const isCardio = st.durationSec > 0 || st.distanceM > 0;\n return (\n <li\n key={st.id}\n className=\"flex flex-wrap items-center justify-between gap-2 py-2\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-text-primary tabular-nums\">\n Set {st.setNumber}: {formatNumber(st.reps)} × {formatWeight(st.weight)}\n </span>\n {st.isPersonalRecord && <StatusBadge status=\"PR\" />}\n </div>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-text-secondary\">\n {isCardio && st.durationSec > 0 && (\n <span className=\"inline-flex items-center gap-1 tabular-nums\">\n <Timer className=\"h-3.5 w-3.5 text-accent\" />\n {formatDuration(st.durationSec)}\n </span>\n )}\n {isCardio && st.distanceM > 0 && (\n <span className=\"inline-flex items-center gap-1 tabular-nums\">\n <Ruler className=\"h-3.5 w-3.5 text-accent\" />\n {formatNumber(st.distanceM)} m\n </span>\n )}\n </div>\n </li>\n );\n })}\n </ul>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n\n {/* Coach feedback / discussion — available for any session */}\n <div className=\"mt-8\">\n <MybDiscussion\n entityType=\"mybodyshield-session\"\n entityId={data.id}\n title=\"Coach feedback\"\n description=\"Discuss form, cues and this session's results with your coach and team.\"\n />\n </div>\n\n {/* Log set dialog */}\n <ResponsiveDialog open={logOpen} onOpenChange={setLogOpen}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Log a set</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Record reps and load for strength work, or duration and distance for cardio. The\n dialog stays open so you can log sets back-to-back.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 px-1\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-exercise\">Exercise</Label>\n <Input\n id=\"myb-set-exercise\"\n value={logForm.exerciseName}\n onChange={(e) => setLogForm((f) => ({ ...f, exerciseName: e.target.value }))}\n placeholder=\"e.g. Back Squat\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-number\">Set number</Label>\n <Input\n id=\"myb-set-number\"\n type=\"number\"\n inputMode=\"numeric\"\n min={1}\n value={logForm.setNumber}\n onChange={(e) => setLogForm((f) => ({ ...f, setNumber: e.target.value }))}\n placeholder=\"1\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-reps\">Reps</Label>\n <Input\n id=\"myb-set-reps\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={logForm.reps}\n onChange={(e) => setLogForm((f) => ({ ...f, reps: e.target.value }))}\n placeholder=\"8\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-weight\">Weight (kg)</Label>\n <Input\n id=\"myb-set-weight\"\n type=\"number\"\n inputMode=\"decimal\"\n min={0}\n step=\"0.5\"\n value={logForm.weight}\n onChange={(e) => setLogForm((f) => ({ ...f, weight: e.target.value }))}\n placeholder=\"60\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-distance\">Distance (m)</Label>\n <Input\n id=\"myb-set-distance\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={logForm.distanceM}\n onChange={(e) => setLogForm((f) => ({ ...f, distanceM: e.target.value }))}\n placeholder=\"Optional\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-duration\">Duration (sec)</Label>\n <Input\n id=\"myb-set-duration\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={logForm.durationSec}\n onChange={(e) => setLogForm((f) => ({ ...f, durationSec: e.target.value }))}\n placeholder=\"Optional\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 rounded-xl bg-bg-sunken/60 p-3\">\n <div className=\"flex items-center gap-2\">\n <Gauge className=\"h-4 w-4 text-accent\" />\n <div>\n <Label htmlFor=\"myb-set-pr\" className=\"cursor-pointer\">\n Personal record\n </Label>\n <p className=\"text-xs text-text-tertiary\">Flag this set as a new PR.</p>\n </div>\n </div>\n <Switch\n id=\"myb-set-pr\"\n checked={logForm.isPersonalRecord}\n onCheckedChange={(v) => setLogForm((f) => ({ ...f, isPersonalRecord: v }))}\n />\n </div>\n\n {logError && <p className=\"text-sm text-status-error-text\">{logError}</p>}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setLogOpen(false)}>\n Done\n </Button>\n <Button onClick={submitLog} disabled={logSet.isPending}>\n {logSet.isPending ? 'Logging…' : 'Log set'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Complete session dialog */}\n <ResponsiveDialog open={completeOpen} onOpenChange={setCompleteOpen}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Complete session</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Wrap up this workout and record how it went.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 px-1\">\n {sets.length === 0 && (\n <div className=\"flex items-start gap-2.5 rounded-xl border border-status-warning-text/40 bg-status-warning-bg-subtle p-3\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-status-warning-text\" />\n <p className=\"text-sm text-text-secondary\">\n <span className=\"font-medium text-text-primary\">No sets logged.</span> You can\n still complete this session, but nothing was recorded for it.\n </p>\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-complete-calories\">Calories burned</Label>\n <Input\n id=\"myb-complete-calories\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={completeForm.caloriesBurned}\n onChange={(e) =>\n setCompleteForm((f) => ({ ...f, caloriesBurned: e.target.value }))\n }\n placeholder=\"Optional\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-complete-rpe\">Perceived exertion (1–10)</Label>\n <Input\n id=\"myb-complete-rpe\"\n type=\"number\"\n inputMode=\"numeric\"\n min={1}\n max={10}\n value={completeForm.perceivedExertion}\n onChange={(e) =>\n setCompleteForm((f) => ({ ...f, perceivedExertion: e.target.value }))\n }\n placeholder=\"Optional\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-complete-notes\">Notes</Label>\n <Textarea\n id=\"myb-complete-notes\"\n rows={3}\n value={completeForm.notes}\n onChange={(e) => setCompleteForm((f) => ({ ...f, notes: e.target.value }))}\n placeholder=\"How did the session feel?\"\n />\n </div>\n\n {completeError && <p className=\"text-sm text-status-error-text\">{completeError}</p>}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setCompleteOpen(false)}>\n Cancel\n </Button>\n <Button onClick={submitComplete} disabled={completeSession.isPending}>\n {completeSession.isPending ? 'Completing…' : 'Complete session'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SessionDetailPage.js","names":[],"sources":["../../../../src/mybodyshield/pages/train/SessionDetailPage.tsx"],"sourcesContent":["/**\n * Train — workout session detail & live logging.\n * @module mybodyshield/pages/train\n *\n * Renders a single workout session (real `mybSession`, including its `sets`).\n * While a session is IN_PROGRESS you can log sets and complete it; completed /\n * scheduled sessions render read-only. Sets are grouped by exercise. No mock\n * data — everything comes from the myb* hooks.\n */\n\nimport { useMemo, useState } from 'react';\nimport { motion, useReducedMotion } from 'framer-motion';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Plus,\n CheckCircle2,\n Dumbbell,\n Weight,\n Timer,\n Flame,\n Ruler,\n Gauge,\n AlertTriangle,\n} from 'lucide-react';\nimport {\n Button,\n GlassCard,\n Label,\n Input,\n Textarea,\n Switch,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n MetricsCard,\n StatusBadge,\n EmptyState,\n LoadingView,\n ErrorView,\n MybDiscussion,\n} from '../../components';\nimport { IconChip } from '../_shared/visuals';\nimport { useMyBodyShield } from '../../context';\nimport { useMybSession, useMybLogSet, useMybCompleteSession } from '../../hooks';\nimport {\n formatDateTime,\n formatRelativeTime,\n formatNumber,\n formatWeight,\n formatKcal,\n formatDuration,\n} from '../../utils/formatters';\nimport type { MybSessionSet } from '../../types';\n\n/** Shared entrance easing — a soft, decelerating cubic-bezier. */\nconst MOTION_EASE: [number, number, number, number] = [0.16, 1, 0.3, 1];\n\n/** Stagger container + rise-in child variants for grouped card entrances. */\nconst STAGGER_CONTAINER = {\n hidden: {},\n show: { transition: { staggerChildren: 0.06 } },\n};\nconst RISE_ITEM = {\n hidden: { opacity: 0, y: 12 },\n show: { opacity: 1, y: 0, transition: { duration: 0.35, ease: MOTION_EASE } },\n};\n\n/** Parse an optional numeric string into a number, or undefined when blank. */\nfunction numOrUndef(value: string): number | undefined {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n const n = Number(trimmed);\n return Number.isFinite(n) ? n : undefined;\n}\n\ninterface LogSetForm {\n exerciseName: string;\n setNumber: string;\n reps: string;\n weight: string;\n distanceM: string;\n durationSec: string;\n isPersonalRecord: boolean;\n}\n\nconst EMPTY_LOG_FORM: LogSetForm = {\n exerciseName: '',\n setNumber: '',\n reps: '',\n weight: '',\n distanceM: '',\n durationSec: '',\n isPersonalRecord: false,\n};\n\ninterface CompleteForm {\n caloriesBurned: string;\n perceivedExertion: string;\n notes: string;\n}\n\nconst EMPTY_COMPLETE_FORM: CompleteForm = { caloriesBurned: '', perceivedExertion: '', notes: '' };\n\nexport function SessionDetailPage() {\n const { navigateTo } = useMyBodyShield();\n const reduce = useReducedMotion();\n const { id } = useParams<{ id: string }>();\n\n const session = useMybSession(id);\n const logSet = useMybLogSet();\n const completeSession = useMybCompleteSession();\n\n const [logOpen, setLogOpen] = useState(false);\n const [logForm, setLogForm] = useState<LogSetForm>(EMPTY_LOG_FORM);\n const [logError, setLogError] = useState<string | null>(null);\n\n const [completeOpen, setCompleteOpen] = useState(false);\n const [completeForm, setCompleteForm] = useState<CompleteForm>(EMPTY_COMPLETE_FORM);\n const [completeError, setCompleteError] = useState<string | null>(null);\n\n const data = session.data;\n const sets = useMemo<MybSessionSet[]>(() => data?.sets ?? [], [data?.sets]);\n\n const groups = useMemo(() => {\n const map = new Map<string, MybSessionSet[]>();\n for (const st of sets) {\n const arr = map.get(st.exerciseName) ?? [];\n arr.push(st);\n map.set(st.exerciseName, arr);\n }\n return Array.from(map.entries()).map(([name, list]) => ({\n name,\n sets: list.slice().sort((a, b) => a.setNumber - b.setNumber),\n }));\n }, [sets]);\n\n const totalVolume = useMemo(() => sets.reduce((acc, st) => acc + st.reps * st.weight, 0), [sets]);\n\n const startedAt = data?.startedAt;\n const completedAt = data?.completedAt;\n const durationSec = useMemo(() => {\n if (!startedAt || !completedAt) return undefined;\n const start = new Date(startedAt).getTime();\n const end = new Date(completedAt).getTime();\n if (!Number.isFinite(start) || !Number.isFinite(end) || end < start) return undefined;\n return (end - start) / 1000;\n }, [startedAt, completedAt]);\n\n if (!id) {\n return (\n <PageLayout title=\"Workout session\">\n <ErrorView message=\"No session was specified.\" onRetry={() => navigateTo('train')} />\n </PageLayout>\n );\n }\n\n if (session.isLoading) {\n return (\n <PageLayout title=\"Workout session\">\n <LoadingView label=\"Loading session…\" />\n </PageLayout>\n );\n }\n\n if (session.isError || !data) {\n return (\n <PageLayout title=\"Workout session\">\n <ErrorView\n title=\"Session not found\"\n message=\"This workout session may have been removed, or you don't have access to it.\"\n onRetry={() => session.refetch()}\n />\n </PageLayout>\n );\n }\n\n const isLive = data.status === 'IN_PROGRESS';\n\n const summary = data.completedAt\n ? `Completed ${formatRelativeTime(data.completedAt)}`\n : data.startedAt\n ? `Started ${formatRelativeTime(data.startedAt)}`\n : data.scheduledFor\n ? `Scheduled ${formatRelativeTime(data.scheduledFor)}`\n : `Created ${formatRelativeTime(data.createdAt)}`;\n\n const openLog = () => {\n setLogForm(EMPTY_LOG_FORM);\n setLogError(null);\n setLogOpen(true);\n };\n\n const submitLog = async () => {\n setLogError(null);\n const exerciseName = logForm.exerciseName.trim();\n if (!exerciseName) {\n setLogError('Exercise name is required.');\n return;\n }\n try {\n const created = await logSet.mutateAsync({\n sessionId: id,\n exerciseName,\n setNumber: numOrUndef(logForm.setNumber),\n reps: numOrUndef(logForm.reps),\n weight: numOrUndef(logForm.weight),\n distanceM: numOrUndef(logForm.distanceM),\n durationSec: numOrUndef(logForm.durationSec),\n isPersonalRecord: logForm.isPersonalRecord,\n });\n // Keep the dialog open for rapid multi-set entry: preserve the exercise and\n // pre-fill the next set number, clearing the per-set measurements.\n setLogForm({\n ...EMPTY_LOG_FORM,\n exerciseName,\n setNumber: String(created.setNumber + 1),\n });\n } catch (e) {\n setLogError(e instanceof Error ? e.message : 'Failed to log the set.');\n }\n };\n\n const openComplete = () => {\n setCompleteForm(EMPTY_COMPLETE_FORM);\n setCompleteError(null);\n setCompleteOpen(true);\n };\n\n const submitComplete = async () => {\n setCompleteError(null);\n try {\n await completeSession.mutateAsync({\n id,\n input: {\n caloriesBurned: numOrUndef(completeForm.caloriesBurned),\n perceivedExertion: numOrUndef(completeForm.perceivedExertion),\n notes: completeForm.notes.trim() ? completeForm.notes.trim() : undefined,\n },\n });\n setCompleteOpen(false);\n } catch (e) {\n setCompleteError(e instanceof Error ? e.message : 'Failed to complete the session.');\n }\n };\n\n const actions = isLive ? (\n <>\n <Button variant=\"outline\" onClick={openLog}>\n <Plus className=\"h-4 w-4\" /> Log set\n </Button>\n <Button onClick={openComplete}>\n <CheckCircle2 className=\"h-4 w-4\" /> Complete\n </Button>\n </>\n ) : undefined;\n\n return (\n <PageLayout title=\"Workout session\" description={summary} actions={actions}>\n <button\n type=\"button\"\n onClick={() => navigateTo('train')}\n className=\"mb-4 inline-flex items-center gap-1.5 text-sm font-medium text-text-secondary hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back to sessions\n </button>\n\n {/* Header card */}\n <motion.div\n initial={reduce ? false : { opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={reduce ? { duration: 0 } : { duration: 0.35, ease: MOTION_EASE }}\n >\n <GlassCard treatment=\"glass\" glow={isLive} className=\"p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <IconChip\n icon={isLive ? <Flame className=\"h-5 w-5\" /> : <Dumbbell className=\"h-5 w-5\" />}\n tint={isLive ? 'var(--color-accent-teal)' : 'var(--color-accent-primary)'}\n />\n <div>\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={data.status} />\n </div>\n <p className=\"mt-1 text-sm text-text-secondary\">{summary}</p>\n </div>\n </div>\n </div>\n\n <div className=\"mt-5 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {data.scheduledFor && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Scheduled for</p>\n <p className=\"mt-0.5 text-sm font-medium text-text-primary\">\n {formatDateTime(data.scheduledFor)}\n </p>\n </div>\n )}\n {data.startedAt && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Started</p>\n <p className=\"mt-0.5 text-sm font-medium text-text-primary\">\n {formatDateTime(data.startedAt)}\n </p>\n </div>\n )}\n {data.completedAt && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Completed</p>\n <p className=\"mt-0.5 text-sm font-medium text-text-primary\">\n {formatDateTime(data.completedAt)}\n </p>\n </div>\n )}\n {data.perceivedExertion != null && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Perceived exertion</p>\n <p className=\"mt-0.5 text-sm font-medium tabular-nums text-text-primary\">\n {data.perceivedExertion}/10 RPE\n </p>\n </div>\n )}\n {data.caloriesBurned > 0 && (\n <div>\n <p className=\"text-xs text-text-tertiary\">Calories burned</p>\n <p className=\"mt-0.5 text-sm font-medium tabular-nums text-text-primary\">\n {formatKcal(data.caloriesBurned)}\n </p>\n </div>\n )}\n </div>\n\n {data.notes && (\n <div className=\"mt-5 rounded-xl bg-bg-sunken/60 p-4\">\n <p className=\"text-xs text-text-tertiary\">Notes</p>\n <p className=\"mt-1 whitespace-pre-wrap text-sm text-text-secondary\">{data.notes}</p>\n </div>\n )}\n </GlassCard>\n </motion.div>\n\n {/* Stat cards */}\n <motion.div\n className=\"mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\"\n variants={reduce ? undefined : STAGGER_CONTAINER}\n initial={reduce ? false : 'hidden'}\n animate=\"show\"\n >\n <motion.div variants={reduce ? undefined : RISE_ITEM}>\n <MetricsCard\n icon={\n <span className=\"text-action-primary-bg\">\n <Dumbbell className=\"h-5 w-5\" />\n </span>\n }\n value={formatNumber(sets.length)}\n label=\"Total sets\"\n />\n </motion.div>\n <motion.div variants={reduce ? undefined : RISE_ITEM}>\n <MetricsCard\n icon={\n <span className=\"text-action-primary-bg\">\n <Weight className=\"h-5 w-5\" />\n </span>\n }\n value={`${formatNumber(totalVolume)} kg`}\n label=\"Total volume\"\n />\n </motion.div>\n <motion.div variants={reduce ? undefined : RISE_ITEM}>\n <MetricsCard\n icon={\n <span className=\"text-action-primary-bg\">\n <Timer className=\"h-5 w-5\" />\n </span>\n }\n value={durationSec != null ? formatDuration(durationSec) : '—'}\n label=\"Duration\"\n />\n </motion.div>\n <motion.div variants={reduce ? undefined : RISE_ITEM}>\n <MetricsCard\n icon={\n <span className=\"text-action-primary-bg\">\n <Flame className=\"h-5 w-5\" />\n </span>\n }\n value={data.caloriesBurned > 0 ? formatKcal(data.caloriesBurned) : '—'}\n label=\"Calories burned\"\n />\n </motion.div>\n </motion.div>\n\n {/* Logged sets */}\n <div className=\"mt-8\">\n <div className=\"mb-3 flex items-end justify-between gap-3\">\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">Logged sets</h2>\n <p className=\"mt-0.5 text-sm text-text-secondary\">\n Every set recorded during this session, grouped by exercise.\n </p>\n </div>\n {isLive && (\n <Button variant=\"outline\" size=\"sm\" onClick={openLog} className=\"shrink-0\">\n <Plus className=\"h-4 w-4\" /> Log set\n </Button>\n )}\n </div>\n\n {groups.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Dumbbell className=\"h-10 w-10\" />}\n title=\"No sets logged yet\"\n description={\n isLive\n ? 'Log your first set to start tracking this workout.'\n : 'No sets were recorded for this session.'\n }\n action={\n isLive ? (\n <Button onClick={openLog}>\n <Plus className=\"h-4 w-4\" /> Log set\n </Button>\n ) : undefined\n }\n />\n ) : (\n <motion.div\n className=\"space-y-4\"\n variants={reduce ? undefined : STAGGER_CONTAINER}\n initial={reduce ? false : 'hidden'}\n animate=\"show\"\n >\n {groups.map((group) => {\n const prCount = group.sets.filter((st) => st.isPersonalRecord).length;\n return (\n <motion.div key={group.name} variants={reduce ? undefined : RISE_ITEM}>\n <GlassCard treatment=\"plain\" className=\"p-4 transition-shadow hover:shadow-float\">\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <IconChip icon={<Dumbbell className=\"h-4 w-4\" />} />\n <h3 className=\"truncate text-sm font-semibold text-text-primary\">\n {group.name}\n </h3>\n {prCount > 0 && (\n <span className=\"inline-flex items-center rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-[11px] font-semibold text-status-success-text shadow-[0_0_0_3px_color-mix(in_oklab,var(--color-status-success-text)_14%,transparent)]\">\n {prCount} PR{prCount === 1 ? '' : 's'}\n </span>\n )}\n </div>\n <span className=\"shrink-0 text-xs tabular-nums text-text-tertiary\">\n {formatNumber(group.sets.length)} {group.sets.length === 1 ? 'set' : 'sets'}\n </span>\n </div>\n <ul className=\"divide-y divide-border-seam\">\n {group.sets.map((st) => {\n const isCardio = st.durationSec > 0 || st.distanceM > 0;\n return (\n <li\n key={st.id}\n className={\n 'flex flex-wrap items-center justify-between gap-2 rounded-lg px-2 py-2 transition-colors' +\n (st.isPersonalRecord\n ? ' bg-[color-mix(in_oklab,var(--color-status-success-text)_9%,transparent)]'\n : ' hover:bg-bg-sunken/40')\n }\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-text-primary tabular-nums\">\n Set {st.setNumber}: {formatNumber(st.reps)} ×{' '}\n {formatWeight(st.weight)}\n </span>\n {st.isPersonalRecord && (\n <span className=\"inline-flex rounded-full shadow-[0_0_0_3px_color-mix(in_oklab,var(--color-status-success-text)_16%,transparent)]\">\n <StatusBadge status=\"PR\" />\n </span>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-text-secondary\">\n {isCardio && st.durationSec > 0 && (\n <span className=\"inline-flex items-center gap-1 tabular-nums\">\n <Timer className=\"h-3.5 w-3.5 text-accent\" />\n {formatDuration(st.durationSec)}\n </span>\n )}\n {isCardio && st.distanceM > 0 && (\n <span className=\"inline-flex items-center gap-1 tabular-nums\">\n <Ruler className=\"h-3.5 w-3.5 text-accent\" />\n {formatNumber(st.distanceM)} m\n </span>\n )}\n </div>\n </li>\n );\n })}\n </ul>\n </GlassCard>\n </motion.div>\n );\n })}\n </motion.div>\n )}\n </div>\n\n {/* Coach feedback / discussion — available for any session */}\n <div className=\"mt-8\">\n <MybDiscussion\n entityType=\"mybodyshield-session\"\n entityId={data.id}\n title=\"Coach feedback\"\n description=\"Discuss form, cues and this session's results with your coach and team.\"\n />\n </div>\n\n {/* Log set dialog */}\n <ResponsiveDialog open={logOpen} onOpenChange={setLogOpen}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Log a set</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Record reps and load for strength work, or duration and distance for cardio. The\n dialog stays open so you can log sets back-to-back.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 px-1\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-exercise\">Exercise</Label>\n <Input\n id=\"myb-set-exercise\"\n value={logForm.exerciseName}\n onChange={(e) => setLogForm((f) => ({ ...f, exerciseName: e.target.value }))}\n placeholder=\"e.g. Back Squat\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-number\">Set number</Label>\n <Input\n id=\"myb-set-number\"\n type=\"number\"\n inputMode=\"numeric\"\n min={1}\n value={logForm.setNumber}\n onChange={(e) => setLogForm((f) => ({ ...f, setNumber: e.target.value }))}\n placeholder=\"1\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-reps\">Reps</Label>\n <Input\n id=\"myb-set-reps\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={logForm.reps}\n onChange={(e) => setLogForm((f) => ({ ...f, reps: e.target.value }))}\n placeholder=\"8\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-weight\">Weight (kg)</Label>\n <Input\n id=\"myb-set-weight\"\n type=\"number\"\n inputMode=\"decimal\"\n min={0}\n step=\"0.5\"\n value={logForm.weight}\n onChange={(e) => setLogForm((f) => ({ ...f, weight: e.target.value }))}\n placeholder=\"60\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-distance\">Distance (m)</Label>\n <Input\n id=\"myb-set-distance\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={logForm.distanceM}\n onChange={(e) => setLogForm((f) => ({ ...f, distanceM: e.target.value }))}\n placeholder=\"Optional\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-set-duration\">Duration (sec)</Label>\n <Input\n id=\"myb-set-duration\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={logForm.durationSec}\n onChange={(e) => setLogForm((f) => ({ ...f, durationSec: e.target.value }))}\n placeholder=\"Optional\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 rounded-xl bg-bg-sunken/60 p-3\">\n <div className=\"flex items-center gap-2\">\n <Gauge className=\"h-4 w-4 text-accent\" />\n <div>\n <Label htmlFor=\"myb-set-pr\" className=\"cursor-pointer\">\n Personal record\n </Label>\n <p className=\"text-xs text-text-tertiary\">Flag this set as a new PR.</p>\n </div>\n </div>\n <Switch\n id=\"myb-set-pr\"\n checked={logForm.isPersonalRecord}\n onCheckedChange={(v) => setLogForm((f) => ({ ...f, isPersonalRecord: v }))}\n />\n </div>\n\n {logError && <p className=\"text-sm text-status-error-text\">{logError}</p>}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setLogOpen(false)}>\n Done\n </Button>\n <Button onClick={submitLog} disabled={logSet.isPending}>\n {logSet.isPending ? 'Logging…' : 'Log set'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Complete session dialog */}\n <ResponsiveDialog open={completeOpen} onOpenChange={setCompleteOpen}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Complete session</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Wrap up this workout and record how it went.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 px-1\">\n {sets.length === 0 && (\n <div className=\"flex items-start gap-2.5 rounded-xl border border-status-warning-text/40 bg-status-warning-bg-subtle p-3\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-status-warning-text\" />\n <p className=\"text-sm text-text-secondary\">\n <span className=\"font-medium text-text-primary\">No sets logged.</span> You can\n still complete this session, but nothing was recorded for it.\n </p>\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-complete-calories\">Calories burned</Label>\n <Input\n id=\"myb-complete-calories\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n value={completeForm.caloriesBurned}\n onChange={(e) =>\n setCompleteForm((f) => ({ ...f, caloriesBurned: e.target.value }))\n }\n placeholder=\"Optional\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-complete-rpe\">Perceived exertion (1–10)</Label>\n <Input\n id=\"myb-complete-rpe\"\n type=\"number\"\n inputMode=\"numeric\"\n min={1}\n max={10}\n value={completeForm.perceivedExertion}\n onChange={(e) =>\n setCompleteForm((f) => ({ ...f, perceivedExertion: e.target.value }))\n }\n placeholder=\"Optional\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-complete-notes\">Notes</Label>\n <Textarea\n id=\"myb-complete-notes\"\n rows={3}\n value={completeForm.notes}\n onChange={(e) => setCompleteForm((f) => ({ ...f, notes: e.target.value }))}\n placeholder=\"How did the session feel?\"\n />\n </div>\n\n {completeError && <p className=\"text-sm text-status-error-text\">{completeError}</p>}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setCompleteOpen(false)}>\n Cancel\n </Button>\n <Button onClick={submitComplete} disabled={completeSession.isPending}>\n {completeSession.isPending ? 'Completing…' : 'Complete session'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -1,21 +1,23 @@
1
1
  import { useMyBodyShield as e } from "../../context/MyBodyShieldContext.js";
2
- import { PageLayout as t } from "../../components/PageLayout.js";
3
- import { formatKcal as n, formatNumber as ee, formatRelativeTime as r } from "../../utils/formatters.js";
2
+ import { motion as t } from "../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";
3
+ import { useReducedMotion as n } from "../../../node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js";
4
+ import { PageLayout as r } from "../../components/PageLayout.js";
5
+ import { formatKcal as i, formatNumber as a, formatRelativeTime as ee } from "../../utils/formatters.js";
4
6
  import { StatusBadge as te } from "../../components/StatusBadge.js";
5
- import { ErrorView as i, LoadingView as a } from "../../components/StateViews.js";
6
- import { EmptyState as o } from "../../components/EmptyState.js";
7
- import { IconChip as s } from "../_shared/visuals.js";
7
+ import { ErrorView as o, LoadingView as s } from "../../components/StateViews.js";
8
+ import { EmptyState as c } from "../../components/EmptyState.js";
9
+ import { IconChip as l, Meter as ne } from "../_shared/visuals.js";
8
10
  import "../../context/index.js";
9
- import { useMybPrograms as c, useMybSessions as l, useMybStartSession as u } from "../../hooks/useMyBodyShieldApi.js";
10
- import { useOffsetPager as ne } from "../../hooks/usePager.js";
11
+ import { useMybPrograms as u, useMybSessions as re, useMybStartSession as d } from "../../hooks/useMyBodyShieldApi.js";
12
+ import { useOffsetPager as f } from "../../hooks/usePager.js";
11
13
  import "../../hooks/index.js";
12
- import { FilterTabs as d } from "../../components/FilterTabs.js";
13
- import { Pagination as f } from "../../components/Pagination.js";
14
+ import { FilterTabs as p } from "../../components/FilterTabs.js";
15
+ import { Pagination as ie } from "../../components/Pagination.js";
14
16
  import "../../components/index.js";
15
- import { useState as p } from "react";
16
- import { CalendarClock as m, CheckCircle2 as h, Flame as g, Gauge as _, ListChecks as re, PlayCircle as v, Plus as y, SkipForward as b } from "lucide-react";
17
+ import { useState as m } from "react";
18
+ import { CalendarClock as h, CheckCircle2 as g, Flame as _, Gauge as ae, ListChecks as oe, PlayCircle as v, Plus as y, SkipForward as b } from "lucide-react";
17
19
  import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
18
- import { Button as w, GlassCard as ie, Input as ae, Label as T, ResponsiveDialog as E, ResponsiveDialogContent as D, ResponsiveDialogDescription as O, ResponsiveDialogFooter as k, ResponsiveDialogHeader as A, ResponsiveDialogTitle as j, Select as M, SelectContent as N, SelectItem as P, SelectTrigger as F, SelectValue as I, Textarea as L } from "@burdenoff/fe-libs/ui";
20
+ import { Button as w, GlassCard as se, Input as ce, Label as T, ResponsiveDialog as E, ResponsiveDialogContent as D, ResponsiveDialogDescription as O, ResponsiveDialogFooter as k, ResponsiveDialogHeader as A, ResponsiveDialogTitle as j, Select as M, SelectContent as N, SelectItem as P, SelectTrigger as F, SelectValue as I, Textarea as L } from "@burdenoff/fe-libs/ui";
19
21
  //#region src/mybodyshield/pages/train/SessionsPage.tsx
20
22
  var R = [
21
23
  {
@@ -34,12 +36,17 @@ var R = [
34
36
  value: "COMPLETED",
35
37
  label: "Completed"
36
38
  }
37
- ], z = 24, B = "__none__", V = {
38
- programId: B,
39
+ ], z = 24, B = [
40
+ .16,
41
+ 1,
42
+ .3,
43
+ 1
44
+ ], V = "__none__", H = {
45
+ programId: V,
39
46
  scheduledFor: "",
40
47
  notes: ""
41
48
  };
42
- function H(e) {
49
+ function U(e) {
43
50
  switch (e.status) {
44
51
  case "IN_PROGRESS": return {
45
52
  icon: v,
@@ -49,9 +56,9 @@ function H(e) {
49
56
  stamp: e.startedAt ?? e.createdAt
50
57
  };
51
58
  case "COMPLETED": return {
52
- icon: h,
59
+ icon: g,
53
60
  tint: "var(--color-status-success-text)",
54
- title: e.caloriesBurned > 0 ? `${n(e.caloriesBurned)} burned` : "Workout completed",
61
+ title: e.caloriesBurned > 0 ? `${i(e.caloriesBurned)} burned` : "Workout completed",
55
62
  stampLabel: "Completed",
56
63
  stamp: e.completedAt ?? e.startedAt ?? e.createdAt
57
64
  };
@@ -63,7 +70,7 @@ function H(e) {
63
70
  stamp: e.scheduledFor ?? e.createdAt
64
71
  };
65
72
  default: return {
66
- icon: m,
73
+ icon: h,
67
74
  tint: "var(--color-accent-primary)",
68
75
  title: "Scheduled session",
69
76
  stampLabel: "Scheduled",
@@ -71,22 +78,22 @@ function H(e) {
71
78
  };
72
79
  }
73
80
  }
74
- function U() {
75
- let { navigateTo: m } = e(), [h, v] = p("ALL"), b = ne(z), U = l({
76
- status: h === "ALL" ? void 0 : h,
81
+ function W() {
82
+ let { navigateTo: h } = e(), g = n(), [v, b] = m("ALL"), W = f(z), G = re({
83
+ status: v === "ALL" ? void 0 : v,
77
84
  pagination: {
78
85
  limit: z,
79
- offset: b.offset
86
+ offset: W.offset
80
87
  }
81
- }), W = c({
88
+ }), le = u({
82
89
  status: "ACTIVE",
83
90
  pagination: { limit: 50 }
84
- }).data?.items ?? [], G = u(), [K, q] = p(!1), [J, Y] = p(V), [X, Z] = p(null), Q = U.data?.items ?? [], oe = U.data?.pageInfo?.hasMore ?? !1, se = (e) => {
85
- v(e), b.reset();
91
+ }).data?.items ?? [], K = d(), [ue, q] = m(!1), [J, Y] = m(H), [X, Z] = m(null), Q = G.data?.items ?? [], de = G.data?.pageInfo?.hasMore ?? !1, fe = (e) => {
92
+ b(e), W.reset();
86
93
  }, $ = () => {
87
- Y(V), Z(null), q(!0);
94
+ Y(H), Z(null), q(!0);
88
95
  };
89
- return /* @__PURE__ */ C(t, {
96
+ return /* @__PURE__ */ C(r, {
90
97
  title: "Train",
91
98
  description: "Live workout sessions — start, log sets, and complete.",
92
99
  actions: /* @__PURE__ */ C(w, {
@@ -96,53 +103,69 @@ function U() {
96
103
  children: [
97
104
  /* @__PURE__ */ S("div", {
98
105
  className: "mb-6",
99
- children: /* @__PURE__ */ S(d, {
106
+ children: /* @__PURE__ */ S(p, {
100
107
  options: R,
101
- value: h,
102
- onChange: se
108
+ value: v,
109
+ onChange: fe
103
110
  })
104
111
  }),
105
- U.isLoading ? /* @__PURE__ */ S(a, { label: "Loading your sessions…" }) : U.isError ? /* @__PURE__ */ S(i, {
112
+ G.isLoading ? /* @__PURE__ */ S(s, { label: "Loading your sessions…" }) : G.isError ? /* @__PURE__ */ S(o, {
106
113
  message: "We couldn't load your workout sessions.",
107
- onRetry: () => U.refetch()
108
- }) : Q.length === 0 ? /* @__PURE__ */ S(o, {
114
+ onRetry: () => G.refetch()
115
+ }) : Q.length === 0 ? /* @__PURE__ */ S(c, {
109
116
  illustration: "empty-data",
110
- icon: /* @__PURE__ */ S(g, { className: "h-10 w-10" }),
111
- title: h === "ALL" ? "No sessions yet" : "No sessions in this state",
112
- description: h === "ALL" ? "Start a workout session to begin logging sets and tracking your training." : "Try a different filter, or start a new workout session.",
117
+ icon: /* @__PURE__ */ S(_, { className: "h-10 w-10" }),
118
+ title: v === "ALL" ? "No sessions yet" : "No sessions in this state",
119
+ description: v === "ALL" ? "Start a workout session to begin logging sets and tracking your training." : "Try a different filter, or start a new workout session.",
113
120
  action: /* @__PURE__ */ C(w, {
114
121
  onClick: $,
115
122
  children: [/* @__PURE__ */ S(y, { className: "h-4 w-4" }), " Start session"]
116
123
  })
117
124
  }) : /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("div", {
118
125
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
119
- children: Q.map((e) => {
120
- let t = H(e), i = t.icon, a = e.status === "IN_PROGRESS", o = e.sets?.length;
121
- return /* @__PURE__ */ S("button", {
126
+ children: Q.map((e, n) => {
127
+ let r = U(e), o = r.icon, s = e.status === "IN_PROGRESS", c = e.sets?.length, u = e.perceivedExertion;
128
+ return /* @__PURE__ */ S(t.button, {
122
129
  type: "button",
123
- onClick: () => m(`train/${e.id}`),
124
- className: "text-left",
125
- children: /* @__PURE__ */ C(ie, {
130
+ onClick: () => h(`train/${e.id}`),
131
+ className: "block w-full text-left",
132
+ initial: g ? !1 : {
133
+ opacity: 0,
134
+ y: 12
135
+ },
136
+ animate: {
137
+ opacity: 1,
138
+ y: 0
139
+ },
140
+ transition: g ? { duration: 0 } : {
141
+ duration: .35,
142
+ delay: Math.min(n, 8) * .05,
143
+ ease: B
144
+ },
145
+ whileHover: g ? void 0 : { y: -3 },
146
+ whileTap: g ? void 0 : { scale: .995 },
147
+ children: /* @__PURE__ */ C(se, {
126
148
  treatment: "plain",
127
- className: "h-full p-4 transition-shadow hover:shadow-float" + (a ? " ring-2 ring-inset ring-accent-teal" : ""),
149
+ glow: s,
150
+ className: "h-full p-4 transition-shadow hover:shadow-float" + (s ? " ring-1 ring-inset ring-[color-mix(in_oklab,var(--color-action-primary-bg)_45%,transparent)]" : ""),
128
151
  children: [
129
152
  /* @__PURE__ */ C("div", {
130
153
  className: "flex items-center justify-between gap-2",
131
- children: [/* @__PURE__ */ S(s, {
132
- icon: /* @__PURE__ */ S(i, { className: "h-4 w-4" }),
133
- tint: t.tint
154
+ children: [/* @__PURE__ */ S(l, {
155
+ icon: /* @__PURE__ */ S(o, { className: "h-4 w-4" }),
156
+ tint: r.tint
134
157
  }), /* @__PURE__ */ S(te, { status: e.status })]
135
158
  }),
136
159
  /* @__PURE__ */ S("p", {
137
- className: "mt-3 text-sm font-medium text-text-primary",
138
- children: t.title
160
+ className: "mt-3 text-base font-semibold text-text-primary",
161
+ children: r.title
139
162
  }),
140
163
  /* @__PURE__ */ C("p", {
141
164
  className: "mt-0.5 text-xs text-text-tertiary",
142
165
  children: [
143
- t.stampLabel,
166
+ r.stampLabel,
144
167
  " ",
145
- r(t.stamp)
168
+ ee(r.stamp)
146
169
  ]
147
170
  }),
148
171
  /* @__PURE__ */ C("div", {
@@ -150,44 +173,57 @@ function U() {
150
173
  children: [
151
174
  e.caloriesBurned > 0 && /* @__PURE__ */ C("span", {
152
175
  className: "inline-flex items-center gap-1 tabular-nums",
153
- children: [/* @__PURE__ */ S(g, { className: "h-3.5 w-3.5 text-status-warning-text" }), n(e.caloriesBurned)]
176
+ children: [/* @__PURE__ */ S(_, { className: "h-3.5 w-3.5 text-status-warning-text" }), i(e.caloriesBurned)]
154
177
  }),
155
- e.perceivedExertion != null && /* @__PURE__ */ C("span", {
178
+ u != null && /* @__PURE__ */ C("span", {
156
179
  className: "inline-flex items-center gap-1 tabular-nums",
157
180
  children: [
158
- /* @__PURE__ */ S(_, { className: "h-3.5 w-3.5 text-accent" }),
181
+ /* @__PURE__ */ S(ae, { className: "h-3.5 w-3.5 text-accent" }),
159
182
  "RPE ",
160
- e.perceivedExertion,
183
+ u,
161
184
  "/10"
162
185
  ]
163
186
  }),
164
- o != null && o > 0 && /* @__PURE__ */ C("span", {
187
+ c != null && c > 0 && /* @__PURE__ */ C("span", {
165
188
  className: "inline-flex items-center gap-1 tabular-nums",
166
189
  children: [
167
- /* @__PURE__ */ S(re, { className: "h-3.5 w-3.5 text-accent" }),
168
- ee(o),
190
+ /* @__PURE__ */ S(oe, { className: "h-3.5 w-3.5 text-accent" }),
191
+ a(c),
169
192
  " sets"
170
193
  ]
171
194
  })
172
195
  ]
173
196
  }),
174
- a && /* @__PURE__ */ S("p", {
175
- className: "mt-3 inline-flex items-center gap-1 text-xs font-medium text-accent",
176
- children: "Resume session →"
197
+ u != null && /* @__PURE__ */ C("div", {
198
+ className: "mt-3",
199
+ children: [/* @__PURE__ */ C("div", {
200
+ className: "mb-1 flex items-center justify-between text-[11px] text-text-tertiary",
201
+ children: [/* @__PURE__ */ S("span", { children: "RPE intensity" }), /* @__PURE__ */ C("span", {
202
+ className: "tabular-nums",
203
+ children: [u, "/10"]
204
+ })]
205
+ }), /* @__PURE__ */ S(ne, {
206
+ value: u * 10,
207
+ height: 6
208
+ })]
209
+ }),
210
+ s && /* @__PURE__ */ S("p", {
211
+ className: "mt-3 inline-flex items-center gap-1 text-xs font-semibold text-action-primary-bg",
212
+ children: "In progress — Resume →"
177
213
  })
178
214
  ]
179
215
  })
180
216
  }, e.id);
181
217
  })
182
- }), /* @__PURE__ */ S(f, {
183
- page: b.page,
218
+ }), /* @__PURE__ */ S(ie, {
219
+ page: W.page,
184
220
  pageSize: z,
185
221
  itemCount: Q.length,
186
- hasMore: oe,
187
- onPageChange: (e) => b.onPageChange(e)
222
+ hasMore: de,
223
+ onPageChange: (e) => W.onPageChange(e)
188
224
  })] }),
189
225
  /* @__PURE__ */ S(E, {
190
- open: K,
226
+ open: ue,
191
227
  onOpenChange: q,
192
228
  children: /* @__PURE__ */ C(D, { children: [
193
229
  /* @__PURE__ */ C(A, { children: [/* @__PURE__ */ S(j, { children: "Start a workout session" }), /* @__PURE__ */ S(O, { children: "Begin a live session now, or schedule one for later. Attach an active program to keep your training organised." })] }),
@@ -209,9 +245,9 @@ function U() {
209
245
  id: "myb-start-program",
210
246
  children: /* @__PURE__ */ S(I, { placeholder: "No program" })
211
247
  }), /* @__PURE__ */ C(N, { children: [/* @__PURE__ */ S(P, {
212
- value: B,
248
+ value: V,
213
249
  children: "No program"
214
- }), W.map((e) => /* @__PURE__ */ S(P, {
250
+ }), le.map((e) => /* @__PURE__ */ S(P, {
215
251
  value: e.id,
216
252
  children: e.name
217
253
  }, e.id))] })]
@@ -224,7 +260,7 @@ function U() {
224
260
  htmlFor: "myb-start-scheduled",
225
261
  children: "Scheduled for (optional)"
226
262
  }),
227
- /* @__PURE__ */ S(ae, {
263
+ /* @__PURE__ */ S(ce, {
228
264
  id: "myb-start-scheduled",
229
265
  type: "datetime-local",
230
266
  value: J.scheduledFor,
@@ -264,24 +300,24 @@ function U() {
264
300
  /* @__PURE__ */ C(k, { children: [/* @__PURE__ */ S(w, {
265
301
  variant: "outline",
266
302
  onClick: () => q(!1),
267
- disabled: G.isPending,
303
+ disabled: K.isPending,
268
304
  children: "Cancel"
269
305
  }), /* @__PURE__ */ S(w, {
270
306
  onClick: async () => {
271
307
  Z(null);
272
308
  try {
273
- let e = await G.mutateAsync({
274
- programId: J.programId === B ? void 0 : J.programId,
309
+ let e = await K.mutateAsync({
310
+ programId: J.programId === V ? void 0 : J.programId,
275
311
  scheduledFor: J.scheduledFor ? new Date(J.scheduledFor).toISOString() : void 0,
276
312
  notes: J.notes.trim() ? J.notes.trim() : void 0
277
313
  });
278
- q(!1), m(`train/${e.id}`);
314
+ q(!1), h(`train/${e.id}`);
279
315
  } catch (e) {
280
316
  Z(e instanceof Error ? e.message : "Failed to start the session.");
281
317
  }
282
318
  },
283
- disabled: G.isPending,
284
- children: G.isPending ? "Starting…" : "Start session"
319
+ disabled: K.isPending,
320
+ children: K.isPending ? "Starting…" : "Start session"
285
321
  })] })
286
322
  ] })
287
323
  })
@@ -289,6 +325,6 @@ function U() {
289
325
  });
290
326
  }
291
327
  //#endregion
292
- export { U as SessionsPage };
328
+ export { W as SessionsPage };
293
329
 
294
330
  //# sourceMappingURL=SessionsPage.js.map