@burdenoff/microfe-mybodyshield 2026.705.2 → 2026.706.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +5 -5
- package/dist/mybodyshield/pages/DashboardPage.js +422 -323
- package/dist/mybodyshield/pages/DashboardPage.js.map +1 -1
- package/dist/mybodyshield/pages/_shared/visuals.js +16 -16
- package/dist/mybodyshield/pages/_shared/visuals.js.map +1 -1
- package/dist/mybodyshield/pages/coaching/CoachingPage.js +235 -166
- package/dist/mybodyshield/pages/coaching/CoachingPage.js.map +1 -1
- package/dist/mybodyshield/pages/goals/GoalsPage.js +304 -249
- package/dist/mybodyshield/pages/goals/GoalsPage.js.map +1 -1
- package/dist/mybodyshield/pages/nutrition/NutritionPage.js +700 -533
- package/dist/mybodyshield/pages/nutrition/NutritionPage.js.map +1 -1
- package/dist/mybodyshield/pages/programs/ProgramDetailPage.js +518 -454
- package/dist/mybodyshield/pages/programs/ProgramDetailPage.js.map +1 -1
- package/dist/mybodyshield/pages/programs/ProgramsPage.js +282 -234
- package/dist/mybodyshield/pages/programs/ProgramsPage.js.map +1 -1
- package/dist/mybodyshield/pages/progress/ProgressPage.js +422 -311
- package/dist/mybodyshield/pages/progress/ProgressPage.js.map +1 -1
- package/dist/mybodyshield/pages/recovery/RecoveryPage.js +335 -246
- package/dist/mybodyshield/pages/recovery/RecoveryPage.js.map +1 -1
- package/dist/mybodyshield/pages/train/SessionDetailPage.js +395 -302
- package/dist/mybodyshield/pages/train/SessionDetailPage.js.map +1 -1
- package/dist/mybodyshield/pages/train/SessionsPage.js +111 -75
- package/dist/mybodyshield/pages/train/SessionsPage.js.map +1 -1
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +13 -0
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +14 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js +63 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js +55 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js +62 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js +22 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js +12 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js +19 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js +17 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/events/event-info.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/events/event-info.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js +260 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js +24 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js +61 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.js +29 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.js +22 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js +140 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js +44 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/press.js +28 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/press.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js +41 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js +27 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js +53 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js +17 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js +63 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js +48 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js +26 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/index.js +72 -0
- package/dist/node_modules/framer-motion/dist/es/motion/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js +6 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js +23 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js +60 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js +52 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js +12 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js +23 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js +21 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js +28 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js +32 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js +28 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/distance.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/utils/distance.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js +6 -0
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js +6 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.js +27 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js +109 -0
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js +131 -0
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js +86 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js +34 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js +168 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js +47 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js +59 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js +28 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js +63 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js +69 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js +38 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js +27 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js +29 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js +7 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js +37 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js +26 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js +19 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js +32 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js +7 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/order.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/order.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js +34 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.js +38 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js +38 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js +27 -0
- package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js +41 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js +45 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js +32 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js +31 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js +586 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/state.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js +53 -0
- package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js +19 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/Feature.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/render/Feature.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js +206 -0
- package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js +58 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js +37 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js +38 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/store.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/store.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js +42 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js +16 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js +137 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js +22 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js +22 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js +39 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/index.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/resize/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/stats/buffer.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/stats/buffer.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/border-radius.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/utils/border-radius.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/delay.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/utils/delay.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js +35 -0
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js +32 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js +54 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js +16 -0
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js +7 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/index.js +94 -0
- package/dist/node_modules/motion-dom/dist/es/value/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/auto.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/auto.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js +28 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js +54 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js +16 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/int.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/int.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js +26 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js +66 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js +34 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/test.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/test.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/array.js +12 -0
- package/dist/node_modules/motion-utils/dist/es/array.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/clamp.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/clamp.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js +7 -0
- package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/back.js +9 -0
- package/dist/node_modules/motion-utils/dist/es/easing/back.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/circ.js +8 -0
- package/dist/node_modules/motion-utils/dist/es/easing/circ.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js +20 -0
- package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/ease.js +7 -0
- package/dist/node_modules/motion-utils/dist/es/easing/ease.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js +33 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/errors.js +12 -0
- package/dist/node_modules/motion-utils/dist/es/errors.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/format-error-message.js +8 -0
- package/dist/node_modules/motion-utils/dist/es/format-error-message.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/global-config.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/global-config.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-object.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/is-object.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/memo.js +10 -0
- package/dist/node_modules/motion-utils/dist/es/memo.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/noop.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/noop.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/pipe.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/pipe.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/progress.js +9 -0
- package/dist/node_modules/motion-utils/dist/es/progress.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/subscription-manager.js +28 -0
- package/dist/node_modules/motion-utils/dist/es/subscription-manager.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/time-conversion.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/time-conversion.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/warn-once.js +10 -0
- package/dist/node_modules/motion-utils/dist/es/warn-once.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Area.js +435 -0
- package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/{LineChart.js → AreaChart.js} +5 -5
- package/dist/node_modules/recharts/es6/chart/{LineChart.js.map → AreaChart.js.map} +1 -1
- package/package.json +5 -4
- package/dist/node_modules/recharts/es6/cartesian/Line.js +0 -473
- package/dist/node_modules/recharts/es6/cartesian/Line.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgramDetailPage.js","names":[],"sources":["../../../../src/mybodyshield/pages/programs/ProgramDetailPage.tsx"],"sourcesContent":["/**\n * Program detail — a single training block with its workouts & exercises.\n * @module mybodyshield/pages/programs\n *\n * Renders one `mybProgram` (with its nested `workouts[].exercises[]`), lifecycle\n * transition controls (activate / complete / archive) and dialogs to add\n * workouts and exercises. All data & mutations hit the real `myb*` contract.\n */\n\nimport { useMemo, useState, type FC, type ReactNode } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Plus,\n CheckCircle2,\n Archive,\n Play,\n Dumbbell,\n Pencil,\n Flame,\n Lock,\n} from 'lucide-react';\nimport {\n Button,\n Input,\n Label,\n Textarea,\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n GlassCard,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n StatusBadge,\n EmptyState,\n LoadingView,\n ErrorView,\n Section,\n EvidenceUpload,\n FileLink,\n MybDiscussion,\n MybTags,\n} from '../../components';\nimport { IconChip, WORKOUT_TYPE_META, MUSCLE_META } from '../_shared/visuals';\nimport { useMyBodyShield } from '../../context';\nimport {\n useMybProgram,\n useMybUpdateProgram,\n useMybAddWorkout,\n useMybAddExercise,\n useMybTransitionProgram,\n useMybArchiveProgram,\n type UploadedMybFile,\n} from '../../hooks';\nimport {\n formatEnumLabel,\n formatDate,\n formatNumber,\n formatWeight,\n formatDuration,\n formatMinutes,\n} from '../../utils/formatters';\nimport type {\n MybWorkout,\n MybExercise,\n MybWorkoutType,\n MybMuscleGroup,\n MybProgramStatus,\n MybGoalType,\n MybFitnessLevel,\n MybProgramPhase,\n MybCreateWorkoutInput,\n MybCreateExerciseInput,\n MybUpdateProgramInput,\n} from '../../types';\n\nconst WORKOUT_TYPES: readonly MybWorkoutType[] = [\n 'STRENGTH',\n 'CARDIO',\n 'HIIT',\n 'MOBILITY',\n 'YOGA',\n 'RECOVERY',\n];\nconst MUSCLE_GROUPS: readonly MybMuscleGroup[] = [\n 'CHEST',\n 'BACK',\n 'LEGS',\n 'SHOULDERS',\n 'ARMS',\n 'CORE',\n 'FULL_BODY',\n];\n\n/** Parse a numeric text field → number | null (null when blank / invalid). */\nconst toNum = (raw: string): number | null => {\n const t = raw.trim();\n if (t === '') return null;\n const n = Number(t);\n return Number.isFinite(n) ? n : null;\n};\n\nconst Chip: FC<{ children: ReactNode }> = ({ children }) => (\n <span className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {children}\n </span>\n);\n\nconst MuscleChip: FC<{ group: MybMuscleGroup }> = ({ group }) => {\n const tint = MUSCLE_META[group].tint;\n return (\n <span\n className=\"inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium\"\n style={{ backgroundColor: `color-mix(in srgb, ${tint} 16%, transparent)`, color: tint }}\n >\n {formatEnumLabel(group)}\n </span>\n );\n};\n\n/** Token-safe generic enum <Select>. */\nfunction EnumSelect<T extends string>({\n id,\n value,\n onChange,\n options,\n}: {\n id?: string;\n value: T;\n onChange: (value: T) => void;\n options: readonly T[];\n}) {\n return (\n <Select value={value} onValueChange={(v) => onChange(v as T)}>\n <SelectTrigger id={id}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((opt) => (\n <SelectItem key={opt} value={opt}>\n {formatEnumLabel(opt)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n\ninterface WorkoutForm {\n name: string;\n type: MybWorkoutType;\n weekNumber: string;\n dayOfWeek: string;\n durationMin: string;\n}\n\nconst EMPTY_WORKOUT: WorkoutForm = {\n name: '',\n type: 'STRENGTH',\n weekNumber: '1',\n dayOfWeek: '1',\n durationMin: '',\n};\n\ninterface ExerciseForm {\n name: string;\n muscleGroup: MybMuscleGroup;\n sets: string;\n reps: string;\n targetWeight: string;\n restSeconds: string;\n instructions: string;\n}\n\nconst EMPTY_EXERCISE: ExerciseForm = {\n name: '',\n muscleGroup: 'FULL_BODY',\n sets: '',\n reps: '',\n targetWeight: '',\n restSeconds: '',\n instructions: '',\n};\n\nconst GOAL_TYPES: readonly MybGoalType[] = [\n 'WEIGHT_LOSS',\n 'MUSCLE_GAIN',\n 'STRENGTH',\n 'ENDURANCE',\n 'MOBILITY',\n 'GENERAL_FITNESS',\n];\nconst LEVELS: readonly MybFitnessLevel[] = ['BEGINNER', 'INTERMEDIATE', 'ADVANCED', 'ELITE'];\nconst PHASES: readonly MybProgramPhase[] = ['BUILD', 'PEAK', 'DELOAD', 'MAINTENANCE'];\n\ninterface ProgramEditForm {\n name: string;\n description: string;\n goalType: MybGoalType;\n level: MybFitnessLevel;\n phase: MybProgramPhase;\n weeks: string;\n daysPerWeek: string;\n startDate: string;\n endDate: string;\n}\n\nconst EMPTY_EDIT: ProgramEditForm = {\n name: '',\n description: '',\n goalType: 'GENERAL_FITNESS',\n level: 'BEGINNER',\n phase: 'BUILD',\n weeks: '',\n daysPerWeek: '',\n startDate: '',\n endDate: '',\n};\n\n/** ISO datetime → `YYYY-MM-DD` for a native `<input type=\"date\">`. */\nconst toDateInput = (iso: string | null | undefined): string => {\n if (!iso) return '';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '';\n return d.toISOString().slice(0, 10);\n};\n\nfunction ExerciseRow({ exercise }: { exercise: MybExercise }) {\n return (\n <div className=\"flex flex-col gap-2 py-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"font-medium text-text-primary\">{exercise.name}</p>\n <MuscleChip group={exercise.muscleGroup} />\n </div>\n {exercise.instructions && (\n <p className=\"mt-1 text-xs text-text-tertiary\">{exercise.instructions}</p>\n )}\n {exercise.demo?.id && (\n <div className=\"mt-1.5\">\n <FileLink fileId={exercise.demo.id} />\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-4 text-sm tabular-nums text-text-secondary\">\n <span>\n {formatNumber(exercise.sets)}×{formatNumber(exercise.reps)} @{' '}\n {formatWeight(exercise.targetWeight)}\n </span>\n <span className=\"text-text-tertiary\">Rest {formatDuration(exercise.restSeconds)}</span>\n </div>\n </div>\n );\n}\n\nfunction WorkoutCard({\n workout,\n canEdit,\n onAddExercise,\n}: {\n workout: MybWorkout;\n canEdit: boolean;\n onAddExercise: (workoutId: string) => void;\n}) {\n const meta = WORKOUT_TYPE_META[workout.type];\n const TypeIcon = meta.icon;\n const exercises = useMemo(\n () => [...(workout.exercises ?? [])].sort((a, b) => a.orderIndex - b.orderIndex),\n [workout.exercises]\n );\n\n return (\n <GlassCard treatment=\"glass\" className=\"p-5\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-start gap-3\">\n <IconChip icon={<TypeIcon className=\"h-4 w-4\" />} tint={meta.tint} />\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"font-semibold text-text-primary\">{workout.name}</h3>\n <StatusBadge status={workout.type} />\n </div>\n <p className=\"mt-0.5 text-xs text-text-tertiary\">\n Week {formatNumber(workout.weekNumber)} · Day {formatNumber(workout.dayOfWeek)} ·{' '}\n {formatMinutes(workout.durationMin)}\n </p>\n </div>\n </div>\n {canEdit && (\n <Button variant=\"outline\" size=\"sm\" onClick={() => onAddExercise(workout.id)}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add exercise\n </Button>\n )}\n </div>\n\n {exercises.length === 0 ? (\n <p className=\"mt-4 rounded-lg border border-dashed border-border-seam px-3 py-4 text-center text-sm text-text-tertiary\">\n No exercises yet — add the first movement to this workout.\n </p>\n ) : (\n <div className=\"mt-4 divide-y divide-border-seam/60\">\n {exercises.map((exercise) => (\n <ExerciseRow key={exercise.id} exercise={exercise} />\n ))}\n </div>\n )}\n </GlassCard>\n );\n}\n\nexport function ProgramDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { navigateTo } = useMyBodyShield();\n\n const { data: program, isLoading, isError, refetch } = useMybProgram(id);\n\n const transition = useMybTransitionProgram();\n const archiveM = useMybArchiveProgram();\n const updateProgram = useMybUpdateProgram();\n const addWorkout = useMybAddWorkout();\n const addExercise = useMybAddExercise();\n\n const [actionErr, setActionErr] = useState<string | null>(null);\n\n // Add-workout dialog\n const [workoutOpen, setWorkoutOpen] = useState(false);\n const [workoutForm, setWorkoutForm] = useState<WorkoutForm>(EMPTY_WORKOUT);\n const [workoutErr, setWorkoutErr] = useState<string | null>(null);\n\n // Add-exercise dialog (targets a specific workout)\n const [exerciseTarget, setExerciseTarget] = useState<string | null>(null);\n const [exerciseForm, setExerciseForm] = useState<ExerciseForm>(EMPTY_EXERCISE);\n const [exerciseDemo, setExerciseDemo] = useState<UploadedMybFile | null>(null);\n const [exerciseErr, setExerciseErr] = useState<string | null>(null);\n\n // Edit-program dialog\n const [editOpen, setEditOpen] = useState(false);\n const [editForm, setEditForm] = useState<ProgramEditForm>(EMPTY_EDIT);\n const [editErr, setEditErr] = useState<string | null>(null);\n\n const workouts = useMemo(\n () =>\n [...(program?.workouts ?? [])].sort(\n (a, b) =>\n a.weekNumber - b.weekNumber || a.dayOfWeek - b.dayOfWeek || a.orderIndex - b.orderIndex\n ),\n [program?.workouts]\n );\n\n if (isLoading) {\n return (\n <PageLayout title=\"Program\">\n <LoadingView label=\"Loading program…\" />\n </PageLayout>\n );\n }\n\n if (isError) {\n return (\n <PageLayout title=\"Program\">\n <ErrorView message=\"We couldn't load this program.\" onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n if (!program) {\n return (\n <PageLayout title=\"Program\">\n <EmptyState\n illustration=\"empty-data\"\n icon={<Dumbbell className=\"h-10 w-10\" />}\n title=\"Program not found\"\n description=\"This program may have been deleted or you don't have access to it.\"\n action={\n <Button variant=\"outline\" onClick={() => navigateTo('programs')}>\n <ArrowLeft className=\"mr-1 h-4 w-4\" /> Back to programs\n </Button>\n }\n />\n </PageLayout>\n );\n }\n\n const programId = program.id;\n // You only structure DRAFT/ACTIVE programs — COMPLETED/ARCHIVED are locked.\n const canStructure = program.status === 'DRAFT' || program.status === 'ACTIVE';\n\n const openEdit = () => {\n setEditForm({\n name: program.name,\n description: program.description ?? '',\n goalType: program.goalType,\n level: program.level,\n phase: program.phase,\n weeks: program.weeks ? String(program.weeks) : '',\n daysPerWeek: program.daysPerWeek ? String(program.daysPerWeek) : '',\n startDate: toDateInput(program.startDate),\n endDate: toDateInput(program.endDate),\n });\n setEditErr(null);\n setEditOpen(true);\n };\n\n const submitEdit = async () => {\n if (!editForm.name.trim()) {\n setEditErr('Program name is required.');\n return;\n }\n const input: MybUpdateProgramInput = {\n name: editForm.name.trim(),\n description: editForm.description.trim() || null,\n goalType: editForm.goalType,\n level: editForm.level,\n phase: editForm.phase,\n weeks: toNum(editForm.weeks),\n daysPerWeek: toNum(editForm.daysPerWeek),\n startDate: editForm.startDate ? new Date(editForm.startDate).toISOString() : null,\n endDate: editForm.endDate ? new Date(editForm.endDate).toISOString() : null,\n };\n setEditErr(null);\n try {\n await updateProgram.mutateAsync({ id: programId, input });\n setEditOpen(false);\n } catch (e) {\n setEditErr(e instanceof Error ? e.message : 'Failed to update program.');\n }\n };\n\n const doTransition = async (status: MybProgramStatus) => {\n setActionErr(null);\n try {\n await transition.mutateAsync({ id: programId, status });\n } catch (e) {\n setActionErr(e instanceof Error ? e.message : 'Failed to update program status.');\n }\n };\n\n const doArchive = async () => {\n if (!window.confirm('Archive this program? It will be moved out of your active library.')) {\n return;\n }\n setActionErr(null);\n try {\n await archiveM.mutateAsync(programId);\n await refetch();\n } catch (e) {\n setActionErr(e instanceof Error ? e.message : 'Failed to archive program.');\n }\n };\n\n const openAddWorkout = () => {\n setWorkoutForm(EMPTY_WORKOUT);\n setWorkoutErr(null);\n setWorkoutOpen(true);\n };\n\n const submitWorkout = async () => {\n if (!workoutForm.name.trim()) {\n setWorkoutErr('Workout name is required.');\n return;\n }\n const input: MybCreateWorkoutInput = {\n programId,\n name: workoutForm.name.trim(),\n type: workoutForm.type,\n weekNumber: toNum(workoutForm.weekNumber),\n dayOfWeek: toNum(workoutForm.dayOfWeek),\n durationMin: toNum(workoutForm.durationMin),\n };\n try {\n await addWorkout.mutateAsync(input);\n setWorkoutOpen(false);\n } catch (e) {\n setWorkoutErr(e instanceof Error ? e.message : 'Failed to add workout.');\n }\n };\n\n const openAddExercise = (workoutId: string) => {\n setExerciseForm(EMPTY_EXERCISE);\n setExerciseDemo(null);\n setExerciseErr(null);\n setExerciseTarget(workoutId);\n };\n\n const submitExercise = async () => {\n if (!exerciseTarget) return;\n if (!exerciseForm.name.trim()) {\n setExerciseErr('Exercise name is required.');\n return;\n }\n const input: MybCreateExerciseInput = {\n workoutId: exerciseTarget,\n name: exerciseForm.name.trim(),\n muscleGroup: exerciseForm.muscleGroup,\n sets: toNum(exerciseForm.sets),\n reps: toNum(exerciseForm.reps),\n targetWeight: toNum(exerciseForm.targetWeight),\n restSeconds: toNum(exerciseForm.restSeconds),\n instructions: exerciseForm.instructions.trim() || null,\n demoFileId: exerciseDemo?.fileId ?? null,\n };\n try {\n await addExercise.mutateAsync(input);\n setExerciseTarget(null);\n } catch (e) {\n setExerciseErr(e instanceof Error ? e.message : 'Failed to add exercise.');\n }\n };\n\n return (\n <PageLayout\n title={program.name}\n actions={\n <>\n {program.status === 'DRAFT' && (\n <Button onClick={() => void doTransition('ACTIVE')} disabled={transition.isPending}>\n <Play className=\"mr-1 h-4 w-4\" /> Activate\n </Button>\n )}\n {program.status === 'ACTIVE' && (\n <>\n <Button\n onClick={() => void doTransition('COMPLETED')}\n disabled={transition.isPending}\n >\n <CheckCircle2 className=\"mr-1 h-4 w-4\" /> Complete\n </Button>\n <Button variant=\"outline\" onClick={() => navigateTo('train')}>\n <Flame className=\"mr-1 h-4 w-4\" /> Start a session\n </Button>\n </>\n )}\n {program.status !== 'ARCHIVED' && (\n <Button variant=\"outline\" onClick={openEdit} disabled={updateProgram.isPending}>\n <Pencil className=\"mr-1 h-4 w-4\" /> Edit\n </Button>\n )}\n {program.status !== 'ARCHIVED' && (\n <Button\n variant=\"outline\"\n onClick={() => void doArchive()}\n disabled={archiveM.isPending}\n >\n <Archive className=\"mr-1 h-4 w-4\" /> Archive\n </Button>\n )}\n {canStructure && (\n <Button onClick={openAddWorkout}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add workout\n </Button>\n )}\n </>\n }\n >\n <button\n type=\"button\"\n onClick={() => navigateTo('programs')}\n className=\"mb-4 inline-flex items-center gap-1 text-sm font-medium text-accent hover:underline\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> All programs\n </button>\n\n {/* Header card */}\n <GlassCard treatment=\"glass\" className=\"p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h2 className=\"text-xl font-semibold text-text-primary\">{program.name}</h2>\n <StatusBadge status={program.status} />\n </div>\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n <Chip>{formatEnumLabel(program.phase)}</Chip>\n <Chip>{formatEnumLabel(program.level)}</Chip>\n <Chip>{formatEnumLabel(program.goalType)}</Chip>\n <Chip>\n {formatNumber(program.weeks)} wk × {formatNumber(program.daysPerWeek)} days\n </Chip>\n </div>\n <p className=\"mt-3 text-sm text-text-secondary\">\n {formatDate(program.startDate)} – {formatDate(program.endDate)}\n </p>\n {(program.tags ?? []).length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {(program.tags ?? []).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center rounded-full bg-[var(--color-accent-soft)] px-2 py-0.5 text-xs font-medium text-text-secondary\"\n >\n #{tag}\n </span>\n ))}\n </div>\n )}\n {program.description && (\n <p className=\"mt-3 max-w-2xl text-sm text-text-secondary\">{program.description}</p>\n )}\n </div>\n </div>\n\n {/* Editable platform tags (the inline #tags above are a read-only supplement). */}\n <div className=\"mt-5 border-t border-border-seam pt-4\">\n <MybTags entityType=\"mybodyshield-program\" entityId={program.id} label=\"Platform tags\" />\n </div>\n\n {actionErr && (\n <p className=\"mt-4 rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {actionErr}\n </p>\n )}\n </GlassCard>\n\n {/* Workouts */}\n <Section\n title=\"Workouts\"\n description=\"Sessions in this block, ordered by week, day & sequence.\"\n >\n {!canStructure && (\n <p className=\"mb-4 inline-flex items-center gap-1.5 rounded-lg border border-border-seam bg-bg-sunken/60 px-3 py-2 text-xs text-text-tertiary\">\n <Lock className=\"h-3.5 w-3.5 shrink-0\" />\n This program is {formatEnumLabel(program.status).toLowerCase()} — its structure is\n locked and can no longer be edited.\n </p>\n )}\n {workouts.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Dumbbell className=\"h-10 w-10\" />}\n title=\"No workouts yet\"\n description={\n canStructure\n ? 'Add workouts to lay out the training week, then attach exercises to each one.'\n : 'This program has no workouts, and its structure is locked in its current status.'\n }\n action={\n canStructure ? (\n <Button onClick={openAddWorkout}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add workout\n </Button>\n ) : undefined\n }\n />\n ) : (\n <div className=\"space-y-4\">\n {workouts.map((workout) => (\n <WorkoutCard\n key={workout.id}\n workout={workout}\n canEdit={canStructure}\n onAddExercise={openAddExercise}\n />\n ))}\n </div>\n )}\n </Section>\n\n {/* Coach & member notes */}\n <MybDiscussion\n entityType=\"mybodyshield-program\"\n entityId={program.id}\n title=\"Program notes\"\n description=\"Coach and member notes for this training block.\"\n />\n\n {/* Add-workout dialog */}\n <ResponsiveDialog open={workoutOpen} onOpenChange={setWorkoutOpen}>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Add workout</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Add a training session to this program. Attach exercises once it's created.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {workoutErr && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {workoutErr}\n </p>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-name\">Name</Label>\n <Input\n id=\"myb-wk-name\"\n value={workoutForm.name}\n onChange={(e) => setWorkoutForm({ ...workoutForm, name: e.target.value })}\n placeholder=\"e.g. Upper Body — Push\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-type\">Type</Label>\n <EnumSelect\n id=\"myb-wk-type\"\n value={workoutForm.type}\n onChange={(v) => setWorkoutForm({ ...workoutForm, type: v })}\n options={WORKOUT_TYPES}\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-week\">Week</Label>\n <Input\n id=\"myb-wk-week\"\n type=\"number\"\n min={1}\n value={workoutForm.weekNumber}\n onChange={(e) => setWorkoutForm({ ...workoutForm, weekNumber: e.target.value })}\n placeholder=\"1\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-day\">Day</Label>\n <Input\n id=\"myb-wk-day\"\n type=\"number\"\n min={1}\n max={7}\n value={workoutForm.dayOfWeek}\n onChange={(e) => setWorkoutForm({ ...workoutForm, dayOfWeek: e.target.value })}\n placeholder=\"1\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-dur\">Duration (min)</Label>\n <Input\n id=\"myb-wk-dur\"\n type=\"number\"\n min={0}\n value={workoutForm.durationMin}\n onChange={(e) => setWorkoutForm({ ...workoutForm, durationMin: e.target.value })}\n placeholder=\"60\"\n />\n </div>\n </div>\n </div>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setWorkoutOpen(false)}\n disabled={addWorkout.isPending}\n >\n Cancel\n </Button>\n <Button onClick={() => void submitWorkout()} disabled={addWorkout.isPending}>\n {addWorkout.isPending ? 'Adding…' : 'Add workout'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Add-exercise dialog */}\n <ResponsiveDialog\n open={exerciseTarget !== null}\n onOpenChange={(open) => {\n if (!open) setExerciseTarget(null);\n }}\n >\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Add exercise</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Add a movement with its target sets, reps, load & rest.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {exerciseErr && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {exerciseErr}\n </p>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-name\">Name</Label>\n <Input\n id=\"myb-ex-name\"\n value={exerciseForm.name}\n onChange={(e) => setExerciseForm({ ...exerciseForm, name: e.target.value })}\n placeholder=\"e.g. Barbell Bench Press\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-muscle\">Muscle group</Label>\n <EnumSelect\n id=\"myb-ex-muscle\"\n value={exerciseForm.muscleGroup}\n onChange={(v) => setExerciseForm({ ...exerciseForm, muscleGroup: v })}\n options={MUSCLE_GROUPS}\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-sets\">Sets</Label>\n <Input\n id=\"myb-ex-sets\"\n type=\"number\"\n min={0}\n value={exerciseForm.sets}\n onChange={(e) => setExerciseForm({ ...exerciseForm, sets: e.target.value })}\n placeholder=\"3\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-reps\">Reps</Label>\n <Input\n id=\"myb-ex-reps\"\n type=\"number\"\n min={0}\n value={exerciseForm.reps}\n onChange={(e) => setExerciseForm({ ...exerciseForm, reps: e.target.value })}\n placeholder=\"10\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-weight\">Weight (kg)</Label>\n <Input\n id=\"myb-ex-weight\"\n type=\"number\"\n min={0}\n step=\"0.5\"\n value={exerciseForm.targetWeight}\n onChange={(e) =>\n setExerciseForm({ ...exerciseForm, targetWeight: e.target.value })\n }\n placeholder=\"60\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-rest\">Rest (sec)</Label>\n <Input\n id=\"myb-ex-rest\"\n type=\"number\"\n min={0}\n value={exerciseForm.restSeconds}\n onChange={(e) =>\n setExerciseForm({ ...exerciseForm, restSeconds: e.target.value })\n }\n placeholder=\"90\"\n />\n </div>\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-instructions\">Instructions</Label>\n <Textarea\n id=\"myb-ex-instructions\"\n rows={3}\n value={exerciseForm.instructions}\n onChange={(e) => setExerciseForm({ ...exerciseForm, instructions: e.target.value })}\n placeholder=\"Cues, tempo, form notes…\"\n />\n </div>\n\n <EvidenceUpload\n id=\"myb-ex-demo\"\n label=\"Demo media (optional)\"\n value={exerciseDemo}\n onChange={setExerciseDemo}\n accept=\"video/*,image/*\"\n disabled={addExercise.isPending}\n hint=\"Attach a short demo clip or image to show how the movement is performed.\"\n />\n </div>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setExerciseTarget(null)}\n disabled={addExercise.isPending}\n >\n Cancel\n </Button>\n <Button onClick={() => void submitExercise()} disabled={addExercise.isPending}>\n {addExercise.isPending ? 'Adding…' : 'Add exercise'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Edit-program dialog */}\n <ResponsiveDialog open={editOpen} onOpenChange={setEditOpen}>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit program</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Update this program's plan, goal & schedule. Workouts stay untouched.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {editErr && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {editErr}\n </p>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-name\">Name</Label>\n <Input\n id=\"myb-edit-name\"\n value={editForm.name}\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\n placeholder=\"e.g. Hypertrophy Block A\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-desc\">Description</Label>\n <Textarea\n id=\"myb-edit-desc\"\n rows={3}\n value={editForm.description}\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\n placeholder=\"Focus, progression scheme, notes…\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-goal\">Goal type</Label>\n <EnumSelect\n id=\"myb-edit-goal\"\n value={editForm.goalType}\n onChange={(v) => setEditForm({ ...editForm, goalType: v })}\n options={GOAL_TYPES}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-level\">Level</Label>\n <EnumSelect\n id=\"myb-edit-level\"\n value={editForm.level}\n onChange={(v) => setEditForm({ ...editForm, level: v })}\n options={LEVELS}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-phase\">Phase</Label>\n <EnumSelect\n id=\"myb-edit-phase\"\n value={editForm.phase}\n onChange={(v) => setEditForm({ ...editForm, phase: v })}\n options={PHASES}\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-weeks\">Weeks</Label>\n <Input\n id=\"myb-edit-weeks\"\n type=\"number\"\n min={1}\n value={editForm.weeks}\n onChange={(e) => setEditForm({ ...editForm, weeks: e.target.value })}\n placeholder=\"8\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-days\">Days / week</Label>\n <Input\n id=\"myb-edit-days\"\n type=\"number\"\n min={1}\n max={7}\n value={editForm.daysPerWeek}\n onChange={(e) => setEditForm({ ...editForm, daysPerWeek: e.target.value })}\n placeholder=\"4\"\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-start\">Start date</Label>\n <Input\n id=\"myb-edit-start\"\n type=\"date\"\n value={editForm.startDate}\n onChange={(e) => setEditForm({ ...editForm, startDate: e.target.value })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-end\">End date</Label>\n <Input\n id=\"myb-edit-end\"\n type=\"date\"\n value={editForm.endDate}\n onChange={(e) => setEditForm({ ...editForm, endDate: e.target.value })}\n />\n </div>\n </div>\n </div>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setEditOpen(false)}\n disabled={updateProgram.isPending}\n >\n Cancel\n </Button>\n <Button onClick={() => void submitEdit()} disabled={updateProgram.isPending}>\n {updateProgram.isPending ? 'Saving…' : 'Save changes'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProgramDetailPage.js","names":[],"sources":["../../../../src/mybodyshield/pages/programs/ProgramDetailPage.tsx"],"sourcesContent":["/**\n * Program detail — a single training block with its workouts & exercises.\n * @module mybodyshield/pages/programs\n *\n * Renders one `mybProgram` (with its nested `workouts[].exercises[]`), lifecycle\n * transition controls (activate / complete / archive) and dialogs to add\n * workouts and exercises. All data & mutations hit the real `myb*` contract.\n */\n\nimport { useMemo, useState, type FC, type ReactNode } from 'react';\nimport { motion, useReducedMotion } from 'framer-motion';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Plus,\n CheckCircle2,\n Archive,\n Play,\n Dumbbell,\n Pencil,\n Flame,\n Lock,\n Clock,\n CalendarDays,\n} from 'lucide-react';\nimport {\n Button,\n Input,\n Label,\n Textarea,\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n GlassCard,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n StatusBadge,\n EmptyState,\n LoadingView,\n ErrorView,\n Section,\n EvidenceUpload,\n FileLink,\n MybDiscussion,\n MybTags,\n} from '../../components';\nimport { IconChip, WORKOUT_TYPE_META, MUSCLE_META, GOAL_TYPE_META } from '../_shared/visuals';\nimport { useMyBodyShield } from '../../context';\nimport {\n useMybProgram,\n useMybUpdateProgram,\n useMybAddWorkout,\n useMybAddExercise,\n useMybTransitionProgram,\n useMybArchiveProgram,\n type UploadedMybFile,\n} from '../../hooks';\nimport {\n formatEnumLabel,\n formatDate,\n formatNumber,\n formatWeight,\n formatDuration,\n formatMinutes,\n} from '../../utils/formatters';\nimport type {\n MybWorkout,\n MybExercise,\n MybWorkoutType,\n MybMuscleGroup,\n MybProgramStatus,\n MybGoalType,\n MybFitnessLevel,\n MybProgramPhase,\n MybCreateWorkoutInput,\n MybCreateExerciseInput,\n MybUpdateProgramInput,\n} from '../../types';\n\nconst WORKOUT_TYPES: readonly MybWorkoutType[] = [\n 'STRENGTH',\n 'CARDIO',\n 'HIIT',\n 'MOBILITY',\n 'YOGA',\n 'RECOVERY',\n];\nconst MUSCLE_GROUPS: readonly MybMuscleGroup[] = [\n 'CHEST',\n 'BACK',\n 'LEGS',\n 'SHOULDERS',\n 'ARMS',\n 'CORE',\n 'FULL_BODY',\n];\n\n/** Parse a numeric text field → number | null (null when blank / invalid). */\nconst toNum = (raw: string): number | null => {\n const t = raw.trim();\n if (t === '') return null;\n const n = Number(t);\n return Number.isFinite(n) ? n : null;\n};\n\n/** Shared entrance easing — a soft, decelerating cubic-bezier. */\nconst MOTION_EASE: [number, number, number, number] = [0.16, 1, 0.3, 1];\n\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\nconst Chip: FC<{ children: ReactNode; icon?: ReactNode; tint?: string }> = ({\n children,\n icon,\n tint,\n}) => (\n <span\n className=\"inline-flex items-center gap-1.5 rounded-full bg-bg-sunken px-2.5 py-1 text-xs font-medium text-text-secondary\"\n style={tint ? { color: tint } : undefined}\n >\n {icon}\n {children}\n </span>\n);\n\nconst MuscleChip: FC<{ group: MybMuscleGroup }> = ({ group }) => {\n const tint = MUSCLE_META[group].tint;\n return (\n <span\n className=\"inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium\"\n style={{ backgroundColor: `color-mix(in srgb, ${tint} 16%, transparent)`, color: tint }}\n >\n {formatEnumLabel(group)}\n </span>\n );\n};\n\n/** Token-safe generic enum <Select>. */\nfunction EnumSelect<T extends string>({\n id,\n value,\n onChange,\n options,\n}: {\n id?: string;\n value: T;\n onChange: (value: T) => void;\n options: readonly T[];\n}) {\n return (\n <Select value={value} onValueChange={(v) => onChange(v as T)}>\n <SelectTrigger id={id}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((opt) => (\n <SelectItem key={opt} value={opt}>\n {formatEnumLabel(opt)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n\ninterface WorkoutForm {\n name: string;\n type: MybWorkoutType;\n weekNumber: string;\n dayOfWeek: string;\n durationMin: string;\n}\n\nconst EMPTY_WORKOUT: WorkoutForm = {\n name: '',\n type: 'STRENGTH',\n weekNumber: '1',\n dayOfWeek: '1',\n durationMin: '',\n};\n\ninterface ExerciseForm {\n name: string;\n muscleGroup: MybMuscleGroup;\n sets: string;\n reps: string;\n targetWeight: string;\n restSeconds: string;\n instructions: string;\n}\n\nconst EMPTY_EXERCISE: ExerciseForm = {\n name: '',\n muscleGroup: 'FULL_BODY',\n sets: '',\n reps: '',\n targetWeight: '',\n restSeconds: '',\n instructions: '',\n};\n\nconst GOAL_TYPES: readonly MybGoalType[] = [\n 'WEIGHT_LOSS',\n 'MUSCLE_GAIN',\n 'STRENGTH',\n 'ENDURANCE',\n 'MOBILITY',\n 'GENERAL_FITNESS',\n];\nconst LEVELS: readonly MybFitnessLevel[] = ['BEGINNER', 'INTERMEDIATE', 'ADVANCED', 'ELITE'];\nconst PHASES: readonly MybProgramPhase[] = ['BUILD', 'PEAK', 'DELOAD', 'MAINTENANCE'];\n\ninterface ProgramEditForm {\n name: string;\n description: string;\n goalType: MybGoalType;\n level: MybFitnessLevel;\n phase: MybProgramPhase;\n weeks: string;\n daysPerWeek: string;\n startDate: string;\n endDate: string;\n}\n\nconst EMPTY_EDIT: ProgramEditForm = {\n name: '',\n description: '',\n goalType: 'GENERAL_FITNESS',\n level: 'BEGINNER',\n phase: 'BUILD',\n weeks: '',\n daysPerWeek: '',\n startDate: '',\n endDate: '',\n};\n\n/** ISO datetime → `YYYY-MM-DD` for a native `<input type=\"date\">`. */\nconst toDateInput = (iso: string | null | undefined): string => {\n if (!iso) return '';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '';\n return d.toISOString().slice(0, 10);\n};\n\nfunction ExerciseRow({ exercise }: { exercise: MybExercise }) {\n const tint = MUSCLE_META[exercise.muscleGroup].tint;\n return (\n <div\n className=\"flex flex-col gap-2 rounded-lg border-l-2 py-3 pl-3 pr-1 transition-colors hover:bg-bg-sunken/40 sm:flex-row sm:items-start sm:justify-between\"\n style={{ borderColor: `color-mix(in srgb, ${tint} 55%, transparent)` }}\n >\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"font-medium text-text-primary\">{exercise.name}</p>\n <MuscleChip group={exercise.muscleGroup} />\n </div>\n {exercise.instructions && (\n <p className=\"mt-1 text-xs text-text-tertiary\">{exercise.instructions}</p>\n )}\n {exercise.demo?.id && (\n <div className=\"mt-1.5\">\n <FileLink fileId={exercise.demo.id} />\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-4 text-sm tabular-nums text-text-secondary\">\n <span>\n {formatNumber(exercise.sets)}×{formatNumber(exercise.reps)} @{' '}\n {formatWeight(exercise.targetWeight)}\n </span>\n <span className=\"text-text-tertiary\">Rest {formatDuration(exercise.restSeconds)}</span>\n </div>\n </div>\n );\n}\n\nfunction WorkoutCard({\n workout,\n canEdit,\n onAddExercise,\n}: {\n workout: MybWorkout;\n canEdit: boolean;\n onAddExercise: (workoutId: string) => void;\n}) {\n const meta = WORKOUT_TYPE_META[workout.type];\n const TypeIcon = meta.icon;\n const exercises = useMemo(\n () => [...(workout.exercises ?? [])].sort((a, b) => a.orderIndex - b.orderIndex),\n [workout.exercises]\n );\n\n return (\n <GlassCard treatment=\"glass\" className=\"h-full p-5 transition-shadow hover:shadow-float\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-start gap-3\">\n <IconChip icon={<TypeIcon className=\"h-4 w-4\" />} tint={meta.tint} />\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"font-semibold text-text-primary\">{workout.name}</h3>\n <StatusBadge status={workout.type} />\n </div>\n <div className=\"mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-text-tertiary\">\n <span>\n Week {formatNumber(workout.weekNumber)} · Day {formatNumber(workout.dayOfWeek)}\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n {formatMinutes(workout.durationMin)}\n </span>\n </div>\n </div>\n </div>\n {canEdit && (\n <Button variant=\"outline\" size=\"sm\" onClick={() => onAddExercise(workout.id)}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add exercise\n </Button>\n )}\n </div>\n\n {exercises.length === 0 ? (\n <p className=\"mt-4 rounded-lg border border-dashed border-border-seam px-3 py-4 text-center text-sm text-text-tertiary\">\n No exercises yet — add the first movement to this workout.\n </p>\n ) : (\n <div className=\"mt-4 divide-y divide-border-seam/60\">\n {exercises.map((exercise) => (\n <ExerciseRow key={exercise.id} exercise={exercise} />\n ))}\n </div>\n )}\n </GlassCard>\n );\n}\n\nexport function ProgramDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { navigateTo } = useMyBodyShield();\n const reduce = useReducedMotion();\n\n const { data: program, isLoading, isError, refetch } = useMybProgram(id);\n\n const transition = useMybTransitionProgram();\n const archiveM = useMybArchiveProgram();\n const updateProgram = useMybUpdateProgram();\n const addWorkout = useMybAddWorkout();\n const addExercise = useMybAddExercise();\n\n const [actionErr, setActionErr] = useState<string | null>(null);\n\n // Add-workout dialog\n const [workoutOpen, setWorkoutOpen] = useState(false);\n const [workoutForm, setWorkoutForm] = useState<WorkoutForm>(EMPTY_WORKOUT);\n const [workoutErr, setWorkoutErr] = useState<string | null>(null);\n\n // Add-exercise dialog (targets a specific workout)\n const [exerciseTarget, setExerciseTarget] = useState<string | null>(null);\n const [exerciseForm, setExerciseForm] = useState<ExerciseForm>(EMPTY_EXERCISE);\n const [exerciseDemo, setExerciseDemo] = useState<UploadedMybFile | null>(null);\n const [exerciseErr, setExerciseErr] = useState<string | null>(null);\n\n // Edit-program dialog\n const [editOpen, setEditOpen] = useState(false);\n const [editForm, setEditForm] = useState<ProgramEditForm>(EMPTY_EDIT);\n const [editErr, setEditErr] = useState<string | null>(null);\n\n const workouts = useMemo(\n () =>\n [...(program?.workouts ?? [])].sort(\n (a, b) =>\n a.weekNumber - b.weekNumber || a.dayOfWeek - b.dayOfWeek || a.orderIndex - b.orderIndex\n ),\n [program?.workouts]\n );\n\n if (isLoading) {\n return (\n <PageLayout title=\"Program\">\n <LoadingView label=\"Loading program…\" />\n </PageLayout>\n );\n }\n\n if (isError) {\n return (\n <PageLayout title=\"Program\">\n <ErrorView message=\"We couldn't load this program.\" onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n if (!program) {\n return (\n <PageLayout title=\"Program\">\n <EmptyState\n illustration=\"empty-data\"\n icon={<Dumbbell className=\"h-10 w-10\" />}\n title=\"Program not found\"\n description=\"This program may have been deleted or you don't have access to it.\"\n action={\n <Button variant=\"outline\" onClick={() => navigateTo('programs')}>\n <ArrowLeft className=\"mr-1 h-4 w-4\" /> Back to programs\n </Button>\n }\n />\n </PageLayout>\n );\n }\n\n const programId = program.id;\n // You only structure DRAFT/ACTIVE programs — COMPLETED/ARCHIVED are locked.\n const canStructure = program.status === 'DRAFT' || program.status === 'ACTIVE';\n const isActive = program.status === 'ACTIVE';\n const goalMeta = GOAL_TYPE_META[program.goalType];\n const GoalIcon = goalMeta.icon;\n\n const openEdit = () => {\n setEditForm({\n name: program.name,\n description: program.description ?? '',\n goalType: program.goalType,\n level: program.level,\n phase: program.phase,\n weeks: program.weeks ? String(program.weeks) : '',\n daysPerWeek: program.daysPerWeek ? String(program.daysPerWeek) : '',\n startDate: toDateInput(program.startDate),\n endDate: toDateInput(program.endDate),\n });\n setEditErr(null);\n setEditOpen(true);\n };\n\n const submitEdit = async () => {\n if (!editForm.name.trim()) {\n setEditErr('Program name is required.');\n return;\n }\n const input: MybUpdateProgramInput = {\n name: editForm.name.trim(),\n description: editForm.description.trim() || null,\n goalType: editForm.goalType,\n level: editForm.level,\n phase: editForm.phase,\n weeks: toNum(editForm.weeks),\n daysPerWeek: toNum(editForm.daysPerWeek),\n startDate: editForm.startDate ? new Date(editForm.startDate).toISOString() : null,\n endDate: editForm.endDate ? new Date(editForm.endDate).toISOString() : null,\n };\n setEditErr(null);\n try {\n await updateProgram.mutateAsync({ id: programId, input });\n setEditOpen(false);\n } catch (e) {\n setEditErr(e instanceof Error ? e.message : 'Failed to update program.');\n }\n };\n\n const doTransition = async (status: MybProgramStatus) => {\n setActionErr(null);\n try {\n await transition.mutateAsync({ id: programId, status });\n } catch (e) {\n setActionErr(e instanceof Error ? e.message : 'Failed to update program status.');\n }\n };\n\n const doArchive = async () => {\n if (!window.confirm('Archive this program? It will be moved out of your active library.')) {\n return;\n }\n setActionErr(null);\n try {\n await archiveM.mutateAsync(programId);\n await refetch();\n } catch (e) {\n setActionErr(e instanceof Error ? e.message : 'Failed to archive program.');\n }\n };\n\n const openAddWorkout = () => {\n setWorkoutForm(EMPTY_WORKOUT);\n setWorkoutErr(null);\n setWorkoutOpen(true);\n };\n\n const submitWorkout = async () => {\n if (!workoutForm.name.trim()) {\n setWorkoutErr('Workout name is required.');\n return;\n }\n const input: MybCreateWorkoutInput = {\n programId,\n name: workoutForm.name.trim(),\n type: workoutForm.type,\n weekNumber: toNum(workoutForm.weekNumber),\n dayOfWeek: toNum(workoutForm.dayOfWeek),\n durationMin: toNum(workoutForm.durationMin),\n };\n try {\n await addWorkout.mutateAsync(input);\n setWorkoutOpen(false);\n } catch (e) {\n setWorkoutErr(e instanceof Error ? e.message : 'Failed to add workout.');\n }\n };\n\n const openAddExercise = (workoutId: string) => {\n setExerciseForm(EMPTY_EXERCISE);\n setExerciseDemo(null);\n setExerciseErr(null);\n setExerciseTarget(workoutId);\n };\n\n const submitExercise = async () => {\n if (!exerciseTarget) return;\n if (!exerciseForm.name.trim()) {\n setExerciseErr('Exercise name is required.');\n return;\n }\n const input: MybCreateExerciseInput = {\n workoutId: exerciseTarget,\n name: exerciseForm.name.trim(),\n muscleGroup: exerciseForm.muscleGroup,\n sets: toNum(exerciseForm.sets),\n reps: toNum(exerciseForm.reps),\n targetWeight: toNum(exerciseForm.targetWeight),\n restSeconds: toNum(exerciseForm.restSeconds),\n instructions: exerciseForm.instructions.trim() || null,\n demoFileId: exerciseDemo?.fileId ?? null,\n };\n try {\n await addExercise.mutateAsync(input);\n setExerciseTarget(null);\n } catch (e) {\n setExerciseErr(e instanceof Error ? e.message : 'Failed to add exercise.');\n }\n };\n\n return (\n <PageLayout\n title={program.name}\n actions={\n <>\n {program.status === 'DRAFT' && (\n <Button onClick={() => void doTransition('ACTIVE')} disabled={transition.isPending}>\n <Play className=\"mr-1 h-4 w-4\" /> Activate\n </Button>\n )}\n {program.status === 'ACTIVE' && (\n <>\n <Button\n onClick={() => void doTransition('COMPLETED')}\n disabled={transition.isPending}\n >\n <CheckCircle2 className=\"mr-1 h-4 w-4\" /> Complete\n </Button>\n <Button variant=\"outline\" onClick={() => navigateTo('train')}>\n <Flame className=\"mr-1 h-4 w-4\" /> Start a session\n </Button>\n </>\n )}\n {program.status !== 'ARCHIVED' && (\n <Button variant=\"outline\" onClick={openEdit} disabled={updateProgram.isPending}>\n <Pencil className=\"mr-1 h-4 w-4\" /> Edit\n </Button>\n )}\n {program.status !== 'ARCHIVED' && (\n <Button\n variant=\"outline\"\n onClick={() => void doArchive()}\n disabled={archiveM.isPending}\n >\n <Archive className=\"mr-1 h-4 w-4\" /> Archive\n </Button>\n )}\n {canStructure && (\n <Button onClick={openAddWorkout}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add workout\n </Button>\n )}\n </>\n }\n >\n <button\n type=\"button\"\n onClick={() => navigateTo('programs')}\n className=\"mb-4 inline-flex items-center gap-1 text-sm font-medium text-accent hover:underline\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> All programs\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={isActive} className=\"p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <IconChip\n icon={<GoalIcon className=\"h-5 w-5\" />}\n tint={goalMeta.tint}\n className=\"size-10\"\n />\n <h2 className=\"text-xl font-semibold text-text-primary\">{program.name}</h2>\n <StatusBadge status={program.status} />\n </div>\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n <Chip>Phase · {formatEnumLabel(program.phase)}</Chip>\n <Chip>Level · {formatEnumLabel(program.level)}</Chip>\n <Chip icon={<GoalIcon className=\"h-3.5 w-3.5\" />} tint={goalMeta.tint}>\n {formatEnumLabel(program.goalType)}\n </Chip>\n <Chip icon={<CalendarDays className=\"h-3.5 w-3.5\" />}>\n {formatNumber(program.weeks)} wk × {formatNumber(program.daysPerWeek)} days\n </Chip>\n </div>\n <p className=\"mt-3 inline-flex items-center gap-1.5 text-sm text-text-secondary\">\n <CalendarDays className=\"h-4 w-4 text-text-tertiary\" />\n {formatDate(program.startDate)} – {formatDate(program.endDate)}\n </p>\n {(program.tags ?? []).length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {(program.tags ?? []).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center rounded-full bg-[var(--color-accent-soft)] px-2 py-0.5 text-xs font-medium text-text-secondary\"\n >\n #{tag}\n </span>\n ))}\n </div>\n )}\n {program.description && (\n <p className=\"mt-3 max-w-2xl text-sm text-text-secondary\">{program.description}</p>\n )}\n </div>\n </div>\n\n {/* Editable platform tags (the inline #tags above are a read-only supplement). */}\n <div className=\"mt-5 border-t border-border-seam pt-4\">\n <MybTags\n entityType=\"mybodyshield-program\"\n entityId={program.id}\n label=\"Platform tags\"\n />\n </div>\n\n {actionErr && (\n <p className=\"mt-4 rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {actionErr}\n </p>\n )}\n </GlassCard>\n </motion.div>\n\n {/* Workouts */}\n <Section\n title=\"Workouts\"\n description=\"Sessions in this block, ordered by week, day & sequence.\"\n >\n {!canStructure && (\n <p className=\"mb-4 inline-flex items-center gap-1.5 rounded-lg border border-border-seam bg-bg-sunken/60 px-3 py-2 text-xs text-text-tertiary\">\n <Lock className=\"h-3.5 w-3.5 shrink-0\" />\n This program is {formatEnumLabel(program.status).toLowerCase()} — its structure is\n locked and can no longer be edited.\n </p>\n )}\n {workouts.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Dumbbell className=\"h-10 w-10\" />}\n title=\"No workouts yet\"\n description={\n canStructure\n ? 'Add workouts to lay out the training week, then attach exercises to each one.'\n : 'This program has no workouts, and its structure is locked in its current status.'\n }\n action={\n canStructure ? (\n <Button onClick={openAddWorkout}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add workout\n </Button>\n ) : undefined\n }\n />\n ) : (\n <motion.div\n className=\"grid grid-cols-1 gap-4 xl:grid-cols-2\"\n variants={reduce ? undefined : STAGGER_CONTAINER}\n initial={reduce ? false : 'hidden'}\n animate=\"show\"\n >\n {workouts.map((workout) => (\n <motion.div\n key={workout.id}\n className=\"h-full\"\n variants={reduce ? undefined : RISE_ITEM}\n >\n <WorkoutCard\n workout={workout}\n canEdit={canStructure}\n onAddExercise={openAddExercise}\n />\n </motion.div>\n ))}\n </motion.div>\n )}\n </Section>\n\n {/* Coach & member notes */}\n <MybDiscussion\n entityType=\"mybodyshield-program\"\n entityId={program.id}\n title=\"Program notes\"\n description=\"Coach and member notes for this training block.\"\n />\n\n {/* Add-workout dialog */}\n <ResponsiveDialog open={workoutOpen} onOpenChange={setWorkoutOpen}>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Add workout</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Add a training session to this program. Attach exercises once it's created.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {workoutErr && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {workoutErr}\n </p>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-name\">Name</Label>\n <Input\n id=\"myb-wk-name\"\n value={workoutForm.name}\n onChange={(e) => setWorkoutForm({ ...workoutForm, name: e.target.value })}\n placeholder=\"e.g. Upper Body — Push\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-type\">Type</Label>\n <EnumSelect\n id=\"myb-wk-type\"\n value={workoutForm.type}\n onChange={(v) => setWorkoutForm({ ...workoutForm, type: v })}\n options={WORKOUT_TYPES}\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-week\">Week</Label>\n <Input\n id=\"myb-wk-week\"\n type=\"number\"\n min={1}\n value={workoutForm.weekNumber}\n onChange={(e) => setWorkoutForm({ ...workoutForm, weekNumber: e.target.value })}\n placeholder=\"1\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-day\">Day</Label>\n <Input\n id=\"myb-wk-day\"\n type=\"number\"\n min={1}\n max={7}\n value={workoutForm.dayOfWeek}\n onChange={(e) => setWorkoutForm({ ...workoutForm, dayOfWeek: e.target.value })}\n placeholder=\"1\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-wk-dur\">Duration (min)</Label>\n <Input\n id=\"myb-wk-dur\"\n type=\"number\"\n min={0}\n value={workoutForm.durationMin}\n onChange={(e) => setWorkoutForm({ ...workoutForm, durationMin: e.target.value })}\n placeholder=\"60\"\n />\n </div>\n </div>\n </div>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setWorkoutOpen(false)}\n disabled={addWorkout.isPending}\n >\n Cancel\n </Button>\n <Button onClick={() => void submitWorkout()} disabled={addWorkout.isPending}>\n {addWorkout.isPending ? 'Adding…' : 'Add workout'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Add-exercise dialog */}\n <ResponsiveDialog\n open={exerciseTarget !== null}\n onOpenChange={(open) => {\n if (!open) setExerciseTarget(null);\n }}\n >\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Add exercise</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Add a movement with its target sets, reps, load & rest.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {exerciseErr && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {exerciseErr}\n </p>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-name\">Name</Label>\n <Input\n id=\"myb-ex-name\"\n value={exerciseForm.name}\n onChange={(e) => setExerciseForm({ ...exerciseForm, name: e.target.value })}\n placeholder=\"e.g. Barbell Bench Press\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-muscle\">Muscle group</Label>\n <EnumSelect\n id=\"myb-ex-muscle\"\n value={exerciseForm.muscleGroup}\n onChange={(v) => setExerciseForm({ ...exerciseForm, muscleGroup: v })}\n options={MUSCLE_GROUPS}\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-sets\">Sets</Label>\n <Input\n id=\"myb-ex-sets\"\n type=\"number\"\n min={0}\n value={exerciseForm.sets}\n onChange={(e) => setExerciseForm({ ...exerciseForm, sets: e.target.value })}\n placeholder=\"3\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-reps\">Reps</Label>\n <Input\n id=\"myb-ex-reps\"\n type=\"number\"\n min={0}\n value={exerciseForm.reps}\n onChange={(e) => setExerciseForm({ ...exerciseForm, reps: e.target.value })}\n placeholder=\"10\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-weight\">Weight (kg)</Label>\n <Input\n id=\"myb-ex-weight\"\n type=\"number\"\n min={0}\n step=\"0.5\"\n value={exerciseForm.targetWeight}\n onChange={(e) =>\n setExerciseForm({ ...exerciseForm, targetWeight: e.target.value })\n }\n placeholder=\"60\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-rest\">Rest (sec)</Label>\n <Input\n id=\"myb-ex-rest\"\n type=\"number\"\n min={0}\n value={exerciseForm.restSeconds}\n onChange={(e) =>\n setExerciseForm({ ...exerciseForm, restSeconds: e.target.value })\n }\n placeholder=\"90\"\n />\n </div>\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-ex-instructions\">Instructions</Label>\n <Textarea\n id=\"myb-ex-instructions\"\n rows={3}\n value={exerciseForm.instructions}\n onChange={(e) => setExerciseForm({ ...exerciseForm, instructions: e.target.value })}\n placeholder=\"Cues, tempo, form notes…\"\n />\n </div>\n\n <EvidenceUpload\n id=\"myb-ex-demo\"\n label=\"Demo media (optional)\"\n value={exerciseDemo}\n onChange={setExerciseDemo}\n accept=\"video/*,image/*\"\n disabled={addExercise.isPending}\n hint=\"Attach a short demo clip or image to show how the movement is performed.\"\n />\n </div>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setExerciseTarget(null)}\n disabled={addExercise.isPending}\n >\n Cancel\n </Button>\n <Button onClick={() => void submitExercise()} disabled={addExercise.isPending}>\n {addExercise.isPending ? 'Adding…' : 'Add exercise'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Edit-program dialog */}\n <ResponsiveDialog open={editOpen} onOpenChange={setEditOpen}>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit program</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Update this program's plan, goal & schedule. Workouts stay untouched.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {editErr && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {editErr}\n </p>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-name\">Name</Label>\n <Input\n id=\"myb-edit-name\"\n value={editForm.name}\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\n placeholder=\"e.g. Hypertrophy Block A\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-desc\">Description</Label>\n <Textarea\n id=\"myb-edit-desc\"\n rows={3}\n value={editForm.description}\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\n placeholder=\"Focus, progression scheme, notes…\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-goal\">Goal type</Label>\n <EnumSelect\n id=\"myb-edit-goal\"\n value={editForm.goalType}\n onChange={(v) => setEditForm({ ...editForm, goalType: v })}\n options={GOAL_TYPES}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-level\">Level</Label>\n <EnumSelect\n id=\"myb-edit-level\"\n value={editForm.level}\n onChange={(v) => setEditForm({ ...editForm, level: v })}\n options={LEVELS}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-phase\">Phase</Label>\n <EnumSelect\n id=\"myb-edit-phase\"\n value={editForm.phase}\n onChange={(v) => setEditForm({ ...editForm, phase: v })}\n options={PHASES}\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-weeks\">Weeks</Label>\n <Input\n id=\"myb-edit-weeks\"\n type=\"number\"\n min={1}\n value={editForm.weeks}\n onChange={(e) => setEditForm({ ...editForm, weeks: e.target.value })}\n placeholder=\"8\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-days\">Days / week</Label>\n <Input\n id=\"myb-edit-days\"\n type=\"number\"\n min={1}\n max={7}\n value={editForm.daysPerWeek}\n onChange={(e) => setEditForm({ ...editForm, daysPerWeek: e.target.value })}\n placeholder=\"4\"\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-start\">Start date</Label>\n <Input\n id=\"myb-edit-start\"\n type=\"date\"\n value={editForm.startDate}\n onChange={(e) => setEditForm({ ...editForm, startDate: e.target.value })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"myb-edit-end\">End date</Label>\n <Input\n id=\"myb-edit-end\"\n type=\"date\"\n value={editForm.endDate}\n onChange={(e) => setEditForm({ ...editForm, endDate: e.target.value })}\n />\n </div>\n </div>\n </div>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setEditOpen(false)}\n disabled={updateProgram.isPending}\n >\n Cancel\n </Button>\n <Button onClick={() => void submitEdit()} disabled={updateProgram.isPending}>\n {updateProgram.isPending ? 'Saving…' : 'Save changes'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|