@bitcobblers/wod-wiki-tools 0.44.2156 → 0.44.2159
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/bin/wod.cjs +1 -1
- package/dist/bin/wod.cjs.map +1 -1
- package/dist/bin/wod.mjs +2 -2
- package/dist/{chunk-UZVDK77V.mjs → chunk-LGEZVB44.mjs} +4 -4
- package/dist/{chunk-UZVDK77V.mjs.map → chunk-LGEZVB44.mjs.map} +1 -1
- package/dist/{chunk-B65DTONU.mjs → chunk-SOGZC3TL.mjs} +3 -3
- package/dist/chunk-SOGZC3TL.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{scaffoldCatalog-OTL363Q5.mjs → scaffoldCatalog-WNAHHEL2.mjs} +3 -3
- package/dist/{scaffoldCatalog-OTL363Q5.mjs.map → scaffoldCatalog-WNAHHEL2.mjs.map} +1 -1
- package/dist/web/playground/assets/{main-Dl9EAcbF.js → main-Ba8fwabQ.js} +66 -66
- package/dist/web/playground/assets/main-bpDz6cBb.css +2 -0
- package/dist/web/playground/assets/{seedSync.worker-CNP45WoU.js → seedSync.worker-CXyhCqQv.js} +2 -2
- package/dist/web/playground/assets/{statementBuilderFlow-Dqy6Fw1s.js → statementBuilderFlow-CFMsgRLA.js} +2 -2
- package/dist/web/playground/index.html +2 -2
- package/dist/web/playground/seed/core/apps/playground/app/templates/new-playground.json +1 -1
- package/dist/web/{server/seed/core/chunks/canvas.2ee3822a.json → playground/seed/core/chunks/canvas.4ae0f2d2.json} +1 -1
- package/dist/web/playground/seed/core/chunks/dashboards.302c4388.json +1 -0
- package/dist/web/playground/seed/core/chunks/{efforts.dde85a86.json → efforts.835c18aa.json} +1 -1
- package/dist/web/playground/seed/core/chunks/{equipment.7bf7b54a.json → equipment.5091d784.json} +1 -1
- package/dist/web/playground/seed/core/chunks/{template.b93cbdf1.json → template.2d38f4df.json} +1 -1
- package/dist/web/playground/seed/core/indexes/notebooks/canvas.json +175 -175
- package/dist/web/playground/seed/core/indexes/notebooks/dashboards.json +63 -0
- package/dist/web/playground/seed/core/indexes/notebooks/efforts.json +323 -323
- package/dist/web/playground/seed/core/indexes/notebooks/equipment.json +47 -47
- package/dist/web/playground/seed/core/indexes/notebooks/template.json +3 -3
- package/dist/web/playground/seed/core/manifest.json +629 -559
- package/dist/web/playground/seed/core/markdown/canvas/ai-first/README.json +1 -1
- package/dist/web/playground/seed/core/markdown/canvas/guide/README.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/guide/clock.json +1 -1
- package/dist/web/playground/seed/core/markdown/canvas/guide/dashboards.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/guide/metrics.json +12 -12
- package/dist/web/playground/seed/core/markdown/canvas/guide/protocols.json +20 -20
- package/dist/web/playground/seed/core/markdown/canvas/guide/sessions.json +30 -30
- package/dist/web/playground/seed/core/markdown/canvas/guide/start.json +10 -10
- package/dist/web/playground/seed/core/markdown/canvas/guide/structure.json +24 -24
- package/dist/web/playground/seed/core/markdown/canvas/guide/wql.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/home/README.json +1 -1
- package/dist/web/playground/seed/core/markdown/canvas/home/sample-script.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/home/welcome-1.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-full-session.json +9 -9
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-swimming.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-3.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-1.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-2.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-3.json +10 -10
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/effort-notes.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/measurements.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-4.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-sections.json +8 -8
- package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/named-groups.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-3.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
- package/dist/web/playground/seed/core/markdown/dashboards/benchmark-pr-board.json +138 -0
- package/dist/web/playground/seed/core/markdown/dashboards/finger-strength-v8.json +113 -0
- package/dist/web/playground/seed/core/markdown/dashboards/polarized-base-marathon.json +213 -0
- package/dist/web/playground/seed/core/markdown/dashboards/recovery-readiness.json +163 -0
- package/dist/web/playground/seed/core/markdown/dashboards/road-to-560-total.json +213 -0
- package/dist/web/playground/seed/core/markdown/dashboards/training-block-review.json +263 -0
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/recovery/rest.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/recovery/stretching.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/backward-running.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/running-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/snatch.json +2 -2
- package/dist/web/playground/seed/core/markdown/efforts/strength/back-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/bench-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/carioca.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/cluster.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/devils-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/front-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/good-morning.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/l-sit.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/man-maker.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/power-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/push-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/sled-push.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/thruster.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/air-bike.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/barbell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/bench.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/bike-erg.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/climbing-rope.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/clubs.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/dumbbell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/ghd.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/jump-rope.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/kettlebell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/macebell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/medicine-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/parallettes.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/plyo-box.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/pull-up-bar.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/rower.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/sandbag.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/ski-erg.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/slam-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/sled.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/sledgehammer.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/weight-vest.json +1 -1
- package/dist/web/playground/seed/core/report.html +15 -14
- package/dist/web/server/assets/{main-B6pqUCmr.js → main-CESv8JYf.js} +65 -65
- package/dist/web/server/assets/main-bpDz6cBb.css +2 -0
- package/dist/web/server/assets/{seedSync.worker-CNP45WoU.js → seedSync.worker-CXyhCqQv.js} +2 -2
- package/dist/web/server/assets/{statementBuilderFlow-DKx-1xHP.js → statementBuilderFlow-CQ3x0D5F.js} +2 -2
- package/dist/web/server/index.html +2 -2
- package/dist/web/server/seed/core/apps/playground/app/templates/new-playground.json +1 -1
- package/dist/web/{playground/seed/core/chunks/canvas.2ee3822a.json → server/seed/core/chunks/canvas.4ae0f2d2.json} +1 -1
- package/dist/web/server/seed/core/chunks/dashboards.302c4388.json +1 -0
- package/dist/web/server/seed/core/chunks/{efforts.dde85a86.json → efforts.835c18aa.json} +1 -1
- package/dist/web/server/seed/core/chunks/{equipment.7bf7b54a.json → equipment.5091d784.json} +1 -1
- package/dist/web/server/seed/core/chunks/{template.b93cbdf1.json → template.2d38f4df.json} +1 -1
- package/dist/web/server/seed/core/indexes/notebooks/canvas.json +175 -175
- package/dist/web/server/seed/core/indexes/notebooks/dashboards.json +63 -0
- package/dist/web/server/seed/core/indexes/notebooks/efforts.json +323 -323
- package/dist/web/server/seed/core/indexes/notebooks/equipment.json +47 -47
- package/dist/web/server/seed/core/indexes/notebooks/template.json +3 -3
- package/dist/web/server/seed/core/manifest.json +629 -559
- package/dist/web/server/seed/core/markdown/canvas/ai-first/README.json +1 -1
- package/dist/web/server/seed/core/markdown/canvas/guide/README.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/guide/clock.json +1 -1
- package/dist/web/server/seed/core/markdown/canvas/guide/dashboards.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/guide/metrics.json +12 -12
- package/dist/web/server/seed/core/markdown/canvas/guide/protocols.json +20 -20
- package/dist/web/server/seed/core/markdown/canvas/guide/sessions.json +30 -30
- package/dist/web/server/seed/core/markdown/canvas/guide/start.json +10 -10
- package/dist/web/server/seed/core/markdown/canvas/guide/structure.json +24 -24
- package/dist/web/server/seed/core/markdown/canvas/guide/wql.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/home/README.json +1 -1
- package/dist/web/server/seed/core/markdown/canvas/home/sample-script.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/home/welcome-1.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-full-session.json +9 -9
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-swimming.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-3.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-1.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-2.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-3.json +10 -10
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/effort-notes.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/measurements.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-4.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-sections.json +8 -8
- package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/named-groups.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-3.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
- package/dist/web/server/seed/core/markdown/dashboards/benchmark-pr-board.json +138 -0
- package/dist/web/server/seed/core/markdown/dashboards/finger-strength-v8.json +113 -0
- package/dist/web/server/seed/core/markdown/dashboards/polarized-base-marathon.json +213 -0
- package/dist/web/server/seed/core/markdown/dashboards/recovery-readiness.json +163 -0
- package/dist/web/server/seed/core/markdown/dashboards/road-to-560-total.json +213 -0
- package/dist/web/server/seed/core/markdown/dashboards/training-block-review.json +263 -0
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/recovery/rest.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/recovery/stretching.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/rowing/rowing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/backward-running.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/running-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/snatch.json +2 -2
- package/dist/web/server/seed/core/markdown/efforts/strength/back-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/bench-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/carioca.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/cluster.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/devils-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/front-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/good-morning.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/l-sit.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/man-maker.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/power-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/push-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/sled-push.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/thruster.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/air-bike.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/barbell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/bench.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/bike-erg.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/climbing-rope.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/clubs.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/dumbbell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/ghd.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/jump-rope.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/kettlebell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/macebell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/medicine-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/parallettes.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/plyo-box.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/pull-up-bar.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/rower.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/sandbag.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/ski-erg.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/slam-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/sled.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/sledgehammer.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/weight-vest.json +1 -1
- package/dist/web/server/seed/core/report.html +15 -14
- package/package.json +6 -6
- package/dist/chunk-B65DTONU.mjs.map +0 -1
- package/dist/web/playground/assets/main-CViawVZw.css +0 -2
- package/dist/web/server/assets/main-CViawVZw.css +0 -2
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
`))};if((V.mac||V.android)&&u.from==a-1&&/^\. ?$/.test(n.text)&&e.contentDOM.getAttribute(`autocorrect`)==`off`&&(u={from:o,to:s,insert:j.of([n.text.replace(`.`,` `)])}),this.pendingContextChange=u,!e.state.readOnly){let t=this.to-this.from+(u.to-u.from+u.insert.length);vs(e,u,P.single(this.toEditorPos(n.selectionStart,t),this.toEditorPos(n.selectionEnd,t)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),u.from<u.to&&!u.insert.length&&e.inputState.composing>=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,n.updateRangeStart-1),Math.min(t.text.length,n.updateRangeStart+1)))&&this.handlers.compositionend(n)},this.handlers.characterboundsupdate=n=>{let r=[],i=null;for(let t=this.toEditorPos(n.rangeStart),a=this.toEditorPos(n.rangeEnd);t<a;t++){let n=e.coordsForChar(t);i=n&&new DOMRect(n.left,n.top,n.right-n.left,n.bottom-n.top)||i||new DOMRect,r.push(i)}t.updateCharacterBounds(n.rangeStart,r)},this.handlers.textformatupdate=t=>{let n=[];for(let e of t.getTextFormats()){let t=e.underlineStyle,r=e.underlineThickness;if(!/none/i.test(t)&&!/none/i.test(r)){let i=this.toEditorPos(e.rangeStart),a=this.toEditorPos(e.rangeEnd);if(i<a){let e=`text-decoration: underline ${/^[a-z]/.test(t)?t+` `:t==`Dashed`?`dashed `:t==`Squiggle`?`wavy `:``}${/thin/i.test(r)?1:2}px`;n.push(H.mark({attributes:{style:e}}).range(i,a))}}}e.dispatch({effects:Ga.of(H.set(n))})},this.handlers.compositionstart=()=>{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:t}=this.composing;this.composing=null,t&&this.reset(e.state)}};for(let e in this.handlers)t.addEventListener(e,this.handlers[e]);this.measureReq={read:e=>{let t=Ii(e.root);t&&t.rangeCount&&this.editContext.updateSelectionBounds(t.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,n=!1,r=this.pendingContextChange;return e.changes.iterChanges((i,a,o,s,c)=>{if(n)return;let l=c.length-(a-i);if(r&&a>=r.to){if(r.from==i&&r.to==a&&r.insert.eq(c)){r=this.pendingContextChange=null,t+=l,this.to+=l;return}r=null,this.revertPending(e.state)}if(i+=t,a+=t,a<=this.from)this.from+=l,this.to+=l;else if(i<this.to){if(i<this.from||a>this.to||this.to-this.from+c.length>3e4){n=!0;return}this.editContext.updateText(this.toContextPos(i),this.toContextPos(a),c.toString()),this.to+=l}t+=l}),r&&!n&&this.revertPending(e.state),!n}update(e){let t=this.pendingContextChange,n=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(n.from,n.to)&&e.transactions.some(e=>!e.isUserEvent(`input.type`)&&e.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,n=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),r=this.toContextPos(t.head);(this.editContext.selectionStart!=n||this.editContext.selectionEnd!=r)&&this.editContext.updateSelection(n,r)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to<e.doc.length&&this.to-t<500||this.to-this.from>3e4)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let n=this.composing;return n&&n.drifted?n.editorBase+(e-n.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},J=class e{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement(`div`),this.scrollDOM=document.createElement(`div`),this.scrollDOM.tabIndex=-1,this.scrollDOM.className=`cm-scroller`,this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement(`div`),this.announceDOM.className=`cm-announced`,this.announceDOM.setAttribute(`aria-live`,`polite`),this.dom=document.createElement(`div`),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:t}=e;this.dispatchTransactions=e.dispatchTransactions||t&&(e=>e.forEach(e=>t(e,this)))||(e=>this.update(e)),this.dispatch=this.dispatch.bind(this),this._root=e.root||ia(e.parent)||document,this.viewState=new kc(this,e.state||L.create(e)),e.scrollTo&&e.scrollTo.is(Wa)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ya).map(e=>new Za(e));for(let e of this.plugins)e.update(this);this.observer=new Yc(this),this.inputState=new ws(this),this.inputState.ensureHandlers(this.plugins),this.docView=new zo(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),document.fonts?.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=`refresh`,this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof wr?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(t){if(this.updateState!=0)throw Error(`Calls to EditorView.update are not allowed while an update is in progress`);let n=!1,r=!1,i,a=this.state;for(let e of t){if(e.startState!=a)throw RangeError(`Trying to update state with a transaction that doesn't start from the previous state.`);a=e.state}if(this.destroyed){this.viewState.state=a;return}let o=this.hasFocus,s=0,c=null;t.some(e=>e.annotation(tc))?(this.inputState.notifiedFocused=o,s=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,c=nc(a,o),c||(s=1));let l=this.observer.delayedAndroidKey,u=null;if(l?(this.observer.clearDelayedAndroidKey(),u=this.observer.readChange(),(u&&!this.state.doc.eq(a.doc)||!this.state.selection.eq(a.selection))&&(u=null)):this.observer.clear(),a.facet(L.phrases)!=this.state.facet(L.phrases))return this.setState(a);i=uo.create(this,a,t),i.flags|=s;let d=this.viewState.scrollTarget;try{this.updateState=2;for(let n of t){if(d&&=d.map(n.changes),n.scrollIntoView){let{main:t}=n.state.selection,{x:r,y:i}=this.state.facet(e.cursorScrollMargin);d=new Ua(t.empty?t:P.cursor(t.head,t.head>t.anchor?-1:1),`nearest`,`nearest`,i,r)}for(let e of n.effects)e.is(Wa)&&(d=e.value.clip(this.state))}this.viewState.update(i,d),this.bidiCache=nl.update(this.bidiCache,i.changes),i.empty||(this.updatePlugins(i),this.inputState.update(i)),n=this.docView.update(i),this.state.facet(co)!=this.styleModules&&this.mountStyles(),r=this.updateAttrs(),this.showAnnouncements(t),this.docView.updateSelection(n,t.some(e=>e.isUserEvent(`select.pointer`)))}finally{this.updateState=0}if(i.startState.facet(zc)!=i.state.facet(zc)&&(this.viewState.mustMeasureContent=!0),(n||r||d||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),n&&this.docViewUpdate(),!i.empty)for(let e of this.state.facet(Fa))try{e(i)}catch(e){Ka(this.state,e,`update listener`)}(c||u)&&Promise.resolve().then(()=>{c&&this.state==c.startState&&this.dispatch(c),u&&!_s(this,u)&&l.force&&ra(this.contentDOM,l.key,l.keyCode)})}setState(e){if(this.updateState!=0)throw Error(`Calls to EditorView.setState are not allowed while an update is in progress`);if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let e of this.plugins)e.destroy(this);this.viewState=new kc(this,e),this.plugins=e.facet(Ya).map(e=>new Za(e)),this.pluginMap.clear();for(let e of this.plugins)e.update(this);this.docView.destroy(),this.docView=new zo(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ya),n=e.state.facet(Ya);if(t!=n){let r=[];for(let i of n){let n=t.indexOf(i);if(n<0)r.push(new Za(i));else{let t=this.plugins[n];t.mustUpdate=e,r.push(t)}}for(let t of this.plugins)t.mustUpdate!=e&&t.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let t of this.plugins)t.mustUpdate=e;for(let e=0;e<this.plugins.length;e++)this.plugins[e].update(this);t!=n&&this.inputState.ensureHandlers(this.plugins)}docViewUpdate(){for(let e of this.plugins){let t=e.value;if(t&&t.docViewUpdate)try{t.docViewUpdate(this)}catch(e){Ka(this.state,e,`doc view update listener`)}}}measure(e=!0){if(this.destroyed)return;if(this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.viewState.scrollParent,r=this.viewState.getScrollOffset(),{scrollAnchorPos:i,scrollAnchorHeight:a}=this.viewState;Math.abs(r-this.viewState.scrollOffset)>1&&(a=-1),this.viewState.scrollAnchorHeight=-1;try{for(let e=0;;e++){if(a<0){if(oa(n||this.win))i=-1,a=this.viewState.heightMap.height;else{let e=this.viewState.scrollAnchorAt(r);i=e.from,a=e.top}}this.updateState=1;let o=this.viewState.measure();if(!o&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(e>5){console.warn(this.measureRequests.length?`Measure loop restarted more than 5 times`:`Viewport failed to stabilize`);break}let s=[];o&4||([this.measureRequests,s]=[s,this.measureRequests]);let c=s.map(e=>{try{return e.read(this)}catch(e){return Ka(this.state,e),tl}}),l=uo.create(this,this.state,[]),u=!1;l.flags|=o,t?t.flags|=o:t=l,this.updateState=2,l.empty||(this.updatePlugins(l),this.inputState.update(l),this.updateAttrs(),u=this.docView.update(l),u&&this.docViewUpdate());for(let e=0;e<s.length;e++)if(c[e]!=tl)try{let t=s[e];t.write&&t.write(c[e],this)}catch(e){Ka(this.state,e)}if(u&&this.docView.updateSelection(!0),!l.viewportChanged&&this.measureRequests.length==0){if(this.viewState.editorHeight){if(this.viewState.scrollTarget){this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,a=-1;continue}{let e=((i<0?this.viewState.heightMap.height:this.viewState.lineBlockAt(i).top)-a)/this.scaleY;if((e>1||e<-1)&&!(V.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(n==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){r+=e,n?i<0?n.scrollTop=n.scrollHeight:n.scrollTop+=e:this.win.scrollBy(0,e),a=-1;continue}}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let e of this.state.facet(Fa))e(t)}get themeClasses(){return Vc+` `+(this.state.facet(Bc)?Uc:Hc)+` `+this.state.facet(zc)}updateAttrs(){let e=rl(this,Qa,{class:`cm-editor`+(this.hasFocus?` cm-focused `:` `)+this.themeClasses}),t={spellcheck:`false`,autocorrect:`off`,autocapitalize:`off`,writingsuggestions:`false`,translate:`no`,contenteditable:this.state.facet(qa)?`true`:`false`,class:`cm-content`,style:`${V.tabSize}: ${this.state.tabSize}`,role:`textbox`,"aria-multiline":`true`};this.state.readOnly&&(t[`aria-readonly`]=`true`),rl(this,$a,t);let n=this.observer.ignore(()=>{let n=Ti(this.contentDOM,this.contentAttrs,t),r=Ti(this.dom,this.editorAttrs,e);return n||r});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(t){let n=!0;for(let r of t)for(let t of r.effects)if(t.is(e.announce)){n&&(this.announceDOM.textContent=``),n=!1;let e=this.announceDOM.appendChild(document.createElement(`div`));e.textContent=t.value}}mountStyles(){this.styleModules=this.state.facet(co);let t=this.state.facet(e.cspNonce);ai.mount(this.root,this.styleModules.concat(Kc).reverse(),t?{nonce:t}:void 0)}readMeasured(){if(this.updateState==2)throw Error(`Reading the editor layout isn't allowed during an update`);this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;t<this.measureRequests.length;t++)if(this.measureRequests[t].key===e.key){this.measureRequests[t]=e;return}}this.measureRequests.push(e)}}plugin(e){let t=this.pluginMap.get(e);return(t===void 0||t&&t.plugin!=e)&&this.pluginMap.set(e,t=this.plugins.find(t=>t.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return ss(this,e,ns(this,e,t,n))}moveByGroup(e,t){return ss(this,e,ns(this,e,t,t=>rs(this,e.head,t)))}visualLineSide(e,t){let n=this.bidiSpans(e),r=this.textDirectionAt(e.from),i=n[t?n.length-1:0];return P.cursor(i.side(t,r)+e.from,i.forward(!t,r)?1:-1)}moveToLineBoundary(e,t,n=!0){return ts(this,e,t,n)}moveVertically(e,t,n){return ss(this,e,is(this,e,t,n))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let n=ls(this,e,t);return n&&n.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),ls(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.state.doc.lineAt(e),r=this.bidiSpans(n),i=r[ya.find(r,e-n.from,-1,t)];return this.docView.coordsAt(e,t,i.dir==U.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Ba)||e<this.viewport.from||e>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>el)return Da(e.length);let t=this.textDirectionAt(e.from),n;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||ba(r.isolates,n=ao(this,e))))return r.order;n||=ao(this,e);let r=Ea(e.text,t,n);return this.bidiCache.push(new nl(e.from,e.to,t,n,!0,r)),r}get hasFocus(){return(this.dom.ownerDocument.hasFocus()||V.safari&&this.inputState?.lastContextMenu>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{ea(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return Wa.of(new Ua(typeof e==`number`?P.cursor(e):e,t.y??`nearest`,t.x??`nearest`,t.yMargin??5,t.xMargin??5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,n=this.viewState.scrollAnchorAt(e);return Wa.of(new Ua(P.cursor(n.from),`start`,`start`,n.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e==`boolean`?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Xa.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Xa.define(()=>({}),{eventObservers:e})}static theme(e,t){let n=ai.newName(),r=[zc.of(n),co.of(Gc(`.${n}`,e))];return t&&t.dark&&r.push(Bc.of(!0)),r}static baseTheme(e){return or.lowest(co.of(Gc(`.`+Vc,e,Wc)))}static findFromDOM(e){let t=e.querySelector(`.cm-content`);return(t&&G.get(t)||G.get(e))?.root?.view||null}};J.styleModule=co,J.inputHandler=Ia,J.clipboardInputFilter=Ra,J.clipboardOutputFilter=za,J.scrollHandler=Ha,J.focusChangeEffect=La,J.perLineTextDirection=Ba,J.exceptionSink=Pa,J.updateListener=Fa,J.editable=qa,J.mouseSelectionStyle=Na,J.dragMovesSelection=Ma,J.clickAddsSelectionRange=ja,J.decorations=eo,J.blockWrappers=to,J.outerDecorations=no,J.atomicRanges=ro,J.bidiIsolatedRanges=io,J.cursorScrollMargin=F.define({combine:e=>{let t=5,n=5;for(let r of e)typeof r==`number`?t=n=r:{x:t,y:n}=r;return{x:t,y:n}}}),J.scrollMargins=oo,J.darkTheme=Bc,J.cspNonce=F.define({combine:e=>e.length?e[0]:``}),J.contentAttributes=$a,J.editorAttributes=Qa,J.lineWrapping=J.contentAttributes.of({class:`cm-lineWrapping`}),J.announce=I.define();let el=4096,tl={};var nl=class e{constructor(e,t,n,r,i,a){this.from=e,this.to=t,this.dir=n,this.isolates=r,this.fresh=i,this.order=a}static update(t,n){if(n.empty&&!t.some(e=>e.fresh))return t;let r=[],i=t.length?t[t.length-1].dir:U.LTR;for(let a=Math.max(0,t.length-10);a<t.length;a++){let o=t[a];o.dir==i&&!n.touchesRange(o.from,o.to)&&r.push(new e(n.mapPos(o.from,1),n.mapPos(o.to,-1),o.dir,o.isolates,!1,o.order))}return r}};function rl(e,t,n){for(let r=e.state.facet(t),i=r.length-1;i>=0;i--){let t=r[i],a=typeof t==`function`?t(e):t;a&&xi(a,n)}return n}V.mac||V.windows||V.linux,V.gecko&&V.gecko_version,/x/.unicode;var il=class extends Rr{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};il.prototype.elementClass=``,il.prototype.toDOM=void 0,il.prototype.mapMode=M.TrackBefore,il.prototype.startSide=il.prototype.endSide=-1,il.prototype.point=!0;let al=0;var ol=class e{constructor(e,t,n,r){this.name=e,this.set=t,this.base=n,this.modified=r,this.id=al++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(t,n){let r=typeof t==`string`?t:`?`;if(t instanceof e&&(n=t),n?.base)throw Error(`Can not derive from a modified tag`);let i=new e(r,[],null,[]);if(i.set.push(i),n)for(let e of n.set)i.set.push(e);return i}static defineModifier(e){let t=new cl(e);return e=>e.modified.indexOf(t)>-1?e:cl.get(e.base||e,e.modified.concat(t).sort((e,t)=>e.id-t.id))}};let sl=0;var cl=class e{constructor(e){this.name=e,this.instances=[],this.id=sl++}static get(t,n){if(!n.length)return t;let r=n[0].instances.find(e=>e.base==t&&ll(n,e.modified));if(r)return r;let i=[],a=new ol(t.name,i,t,n);for(let e of n)e.instances.push(a);let o=ul(n);for(let n of t.set)if(!n.modified.length)for(let t of o)i.push(e.get(n,t));return a}};function ll(e,t){return e.length==t.length&&e.every((e,n)=>e==t[n])}function ul(e){let t=[[]];for(let n=0;n<e.length;n++)for(let r=0,i=t.length;r<i;r++)t.push(t[r].concat(e[n]));return t.sort((e,t)=>t.length-e.length)}function dl(e){let t=Object.create(null);for(let n in e){let r=e[n];Array.isArray(r)||(r=[r]);for(let e of n.split(` `))if(e){let n=[],i=2,a=e;for(let t=0;;){if(a==`...`&&t>0&&t+3==e.length){i=1;break}let r=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(a);if(!r)throw RangeError(`Invalid path: `+e);if(n.push(r[0]==`*`?``:r[0][0]==`"`?JSON.parse(r[0]):r[0]),t+=r[0].length,t==e.length)break;let o=e[t++];if(t==e.length&&o==`!`){i=0;break}if(o!=`/`)throw RangeError(`Invalid path: `+e);a=e.slice(t)}let o=n.length-1,s=n[o];if(!s)throw RangeError(`Invalid path: `+e);t[s]=new pl(r,i,o>0?n.slice(0,o):null).sort(t[s])}}return fl.add(t)}let fl=new D({combine(e,t){let n,r,i;for(;e||t;){if(!e||t&&e.depth>=t.depth?(i=t,t=t.next):(i=e,e=e.next),n&&n.mode==i.mode&&!i.context&&!n.context)continue;let a=new pl(i.tags,i.mode,i.context);n?n.next=a:r=a,n=a}return r}});var pl=class{constructor(e,t,n,r){this.tags=e,this.mode=t,this.context=n,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth<this.depth?(this.next=e,this):(e.next=this.sort(e.next),e)}get depth(){return this.context?this.context.length:0}};pl.empty=new pl([],2,null);function ml(e,t){let n=Object.create(null);for(let t of e)if(!Array.isArray(t.tag))n[t.tag.id]=t.class;else for(let e of t.tag)n[e.id]=t.class;let{scope:r,all:i=null}=t||{};return{style:e=>{let t=i;for(let r of e)for(let e of r.set){let r=n[e.id];if(r){t=t?t+` `+r:r;break}}return t},scope:r}}let Y=ol.define,hl=Y(),gl=Y(),_l=Y(gl),vl=Y(gl),yl=Y(),bl=Y(yl),xl=Y(yl),Sl=Y(),Cl=Y(Sl),wl=Y(),Tl=Y(),El=Y(),Dl=Y(El),Ol=Y(),X={comment:hl,lineComment:Y(hl),blockComment:Y(hl),docComment:Y(hl),name:gl,variableName:Y(gl),typeName:_l,tagName:Y(_l),propertyName:vl,attributeName:Y(vl),className:Y(gl),labelName:Y(gl),namespace:Y(gl),macroName:Y(gl),literal:yl,string:bl,docString:Y(bl),character:Y(bl),attributeValue:Y(bl),number:xl,integer:Y(xl),float:Y(xl),bool:Y(yl),regexp:Y(yl),escape:Y(yl),color:Y(yl),url:Y(yl),keyword:wl,self:Y(wl),null:Y(wl),atom:Y(wl),unit:Y(wl),modifier:Y(wl),operatorKeyword:Y(wl),controlKeyword:Y(wl),definitionKeyword:Y(wl),moduleKeyword:Y(wl),operator:Tl,derefOperator:Y(Tl),arithmeticOperator:Y(Tl),logicOperator:Y(Tl),bitwiseOperator:Y(Tl),compareOperator:Y(Tl),updateOperator:Y(Tl),definitionOperator:Y(Tl),typeOperator:Y(Tl),controlOperator:Y(Tl),punctuation:El,separator:Y(El),bracket:Dl,angleBracket:Y(Dl),squareBracket:Y(Dl),paren:Y(Dl),brace:Y(Dl),content:Sl,heading:Cl,heading1:Y(Cl),heading2:Y(Cl),heading3:Y(Cl),heading4:Y(Cl),heading5:Y(Cl),heading6:Y(Cl),contentSeparator:Y(Sl),list:Y(Sl),quote:Y(Sl),emphasis:Y(Sl),strong:Y(Sl),link:Y(Sl),monospace:Y(Sl),strikethrough:Y(Sl),inserted:Y(),deleted:Y(),changed:Y(),invalid:Y(),meta:Ol,documentMeta:Y(Ol),annotation:Y(Ol),processingInstruction:Y(Ol),definition:ol.defineModifier(`definition`),constant:ol.defineModifier(`constant`),function:ol.defineModifier(`function`),standard:ol.defineModifier(`standard`),local:ol.defineModifier(`local`),special:ol.defineModifier(`special`)};for(let e in X){let t=X[e];t instanceof ol&&(t.name=e)}ml([{tag:X.link,class:`tok-link`},{tag:X.heading,class:`tok-heading`},{tag:X.emphasis,class:`tok-emphasis`},{tag:X.strong,class:`tok-strong`},{tag:X.keyword,class:`tok-keyword`},{tag:X.atom,class:`tok-atom`},{tag:X.bool,class:`tok-bool`},{tag:X.url,class:`tok-url`},{tag:X.labelName,class:`tok-labelName`},{tag:X.inserted,class:`tok-inserted`},{tag:X.deleted,class:`tok-deleted`},{tag:X.literal,class:`tok-literal`},{tag:X.string,class:`tok-string`},{tag:X.number,class:`tok-number`},{tag:[X.regexp,X.escape,X.special(X.string)],class:`tok-string2`},{tag:X.variableName,class:`tok-variableName`},{tag:X.local(X.variableName),class:`tok-variableName tok-local`},{tag:X.definition(X.variableName),class:`tok-variableName tok-definition`},{tag:X.special(X.variableName),class:`tok-variableName2`},{tag:X.definition(X.propertyName),class:`tok-propertyName tok-definition`},{tag:X.typeName,class:`tok-typeName`},{tag:X.namespace,class:`tok-namespace`},{tag:X.className,class:`tok-className`},{tag:X.macroName,class:`tok-macroName`},{tag:X.propertyName,class:`tok-propertyName`},{tag:X.operator,class:`tok-operator`},{tag:X.comment,class:`tok-comment`},{tag:X.meta,class:`tok-meta`},{tag:X.invalid,class:`tok-invalid`},{tag:X.punctuation,class:`tok-punctuation`}]);let kl=new D;function Al(e){return F.define({combine:e?t=>t.concat(e):void 0})}let jl=new D;var Ml=class{constructor(e,t,n=[],r=``){this.data=e,this.name=r,L.prototype.hasOwnProperty(`tree`)||Object.defineProperty(L.prototype,"tree",{get(){return Fl(this)}}),this.parser=t,this.extension=[Wl.of(this),L.languageData.of((e,t,n)=>{let r=Nl(e,t,n),i=r.type.prop(kl);if(!i)return[];let a=e.facet(i),o=r.type.prop(jl);if(o){let i=r.resolve(t-r.from,n);for(let t of o)if(t.test(i,e)){let n=e.facet(t.facet);return t.type==`replace`?n:n.concat(a)}}return a})].concat(n)}isActiveAt(e,t,n=-1){return Nl(e,t,n).type.prop(kl)==this.data}findRegions(e){let t=e.facet(Wl);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],r=(e,t)=>{if(e.prop(kl)==this.data){n.push({from:t,to:t+e.length});return}let i=e.prop(D.mounted);if(i){if(i.tree.prop(kl)==this.data){if(i.overlay)for(let e of i.overlay)n.push({from:e.from+t,to:e.to+t});else n.push({from:t,to:t+e.length});return}if(i.overlay){let e=n.length;if(r(i.tree,i.overlay[0].from+t),n.length>e)return}}for(let n=0;n<e.children.length;n++){let i=e.children[n];i instanceof k&&r(i,e.positions[n]+t)}};return r(Fl(e),0),n}get allowsNesting(){return!0}};Ml.setState=I.define();function Nl(e,t,n){let r=e.facet(Wl),i=Fl(e).topNode;if(!r||r.allowsNesting)for(let e=i;e;e=e.enter(t,n,O.ExcludeBuffers|O.EnterBracketed))e.type.isTop&&(i=e);return i}var Pl=class e extends Ml{constructor(e,t,n){super(e,t,[],n),this.parser=t}static define(t){let n=Al(t.languageData);return new e(n,t.parser.configure({props:[kl.add(e=>e.isTop?n:void 0)]}),t.name)}configure(t,n){return new e(this.data,this.parser.configure(t),n||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function Fl(e){let t=e.field(Ml.state,!1);return t?t.tree:k.empty}var Il=class{constructor(e){this.doc=e,this.cursorPos=0,this.string=``,this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e<n||t>=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}};let Ll=null;var Rl=class e{constructor(e,t,n=[],r,i,a,o,s){this.parser=e,this.state=t,this.fragments=n,this.tree=r,this.treeLen=i,this.viewport=a,this.skipped=o,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}static create(t,n,r){return new e(t,n,[],k.empty,0,r,[],null)}startParse(){return this.parser.startParse(new Il(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=k.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{if(typeof e==`number`){let t=Date.now()+e;e=()=>Date.now()>t}for(this.parse||=this.startParse(),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t<this.state.doc.length&&this.parse.stopAt(t);;){let n=this.parse.advance();if(n){if(this.fragments=this.withoutTempSkipped(Ht.addTree(n,this.fragments,this.parse.stoppedAt!=null)),this.treeLen=this.parse.stoppedAt??this.state.doc.length,this.tree=n,this.parse=null,this.treeLen<(t??this.state.doc.length))this.parse=this.startParse();else return!0}if(e())return!1}})}takeTree(){let e,t;this.parse&&(e=this.parse.parsedPos)>=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Ht.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Ll;Ll=this;try{return e()}finally{Ll=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=zl(e,t.from,t.to);return e}changes(t,n){let{fragments:r,tree:i,treeLen:a,viewport:o,skipped:s}=this;if(this.takeTree(),!t.empty){let e=[];if(t.iterChangedRanges((t,n,r,i)=>e.push({fromA:t,toA:n,fromB:r,toB:i})),r=Ht.applyChanges(r,e),i=k.empty,a=0,o={from:t.mapPos(o.from,-1),to:t.mapPos(o.to,1)},this.skipped.length){s=[];for(let e of this.skipped){let n=t.mapPos(e.from,1),r=t.mapPos(e.to,-1);n<r&&s.push({from:n,to:r})}}}return new e(this.parser,n,r,i,a,o,s,this.scheduleOn)}updateViewport(e){if(this.viewport.from==e.from&&this.viewport.to==e.to)return!1;this.viewport=e;let t=this.skipped.length;for(let t=0;t<this.skipped.length;t++){let{from:n,to:r}=this.skipped[t];n<e.to&&r>e.from&&(this.fragments=zl(this.fragments,n,r),this.skipped.splice(t--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&=(this.takeTree(),null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Ut{createParse(t,n,r){let i=r[0].from,a=r[r.length-1].to;return{parsedPos:i,advance(){let t=Ll;if(t){for(let e of r)t.tempSkipped.push(e);e&&(t.scheduleOn=t.scheduleOn?Promise.all([t.scheduleOn,e]):e)}return this.parsedPos=a,new k(yt.none,[],[],a-i)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Ll}};function zl(e,t,n){return Ht.applyChanges(e,[{fromA:t,toA:n,fromB:t,toB:n}])}var Bl=class e{constructor(e){this.context=e,this.tree=e.tree}apply(t){if(!t.docChanged&&this.tree==this.context.tree)return this;let n=this.context.changes(t.changes,t.state),r=this.context.treeLen==t.startState.doc.length?void 0:Math.max(t.changes.mapPos(this.context.treeLen),n.viewport.to);return n.work(20,r)||n.takeTree(),new e(n)}static init(t){let n=Math.min(3e3,t.doc.length),r=Rl.create(t.facet(Wl).parser,t,{from:0,to:n});return r.work(20,n)||r.takeTree(),new e(r)}};Ml.state=rr.define({create:Bl.init,update(e,t){for(let e of t.effects)if(e.is(Ml.setState))return e.value;return t.startState.facet(Wl)==t.state.facet(Wl)?e.apply(t):Bl.init(t.state)}});let Vl=e=>{let t=setTimeout(()=>e(),500);return()=>clearTimeout(t)};typeof requestIdleCallback<`u`&&(Vl=e=>{let t=-1,n=setTimeout(()=>{t=requestIdleCallback(e,{timeout:400})},100);return()=>t<0?clearTimeout(n):cancelIdleCallback(t)});let Hl=typeof navigator<`u`&&navigator.scheduling?.isInputPending?()=>navigator.scheduling.isInputPending():null,Ul=Xa.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ml.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ml.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Vl(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnd<t&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=t+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:n,viewport:{to:r}}=this.view,i=n.field(Ml.state);if(i.tree==i.context.tree&&i.context.isDone(r+1e5))return;let a=Date.now()+Math.min(this.chunkBudget,100,e&&!Hl?Math.max(25,e.timeRemaining()-5):1e9),o=i.context.treeLen<r&&n.doc.length>r+1e3,s=i.context.work(()=>Hl&&Hl()||Date.now()>a,r+(o?0:1e5));this.chunkBudget-=Date.now()-t,(s||this.chunkBudget<=0)&&(i.context.takeTree(),this.view.dispatch({effects:Ml.setState.of(new Bl(i.context))})),this.chunkBudget>0&&!(s&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(i.context)}checkAsyncSchedule(e){e.scheduleOn&&=(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(e=>Ka(this.view.state,e)).then(()=>this.workScheduled--),null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Wl=F.define({combine(e){return e.length?e[0]:null},enables:e=>[Ml.state,Ul,J.contentAttributes.compute([e],t=>{let n=t.facet(e);return n&&n.name?{"data-language":n.name}:{}})]});var Gl=class e{constructor(e,t){this.specs=e;let n;function r(e){let t=ai.newName();return(n||=Object.create(null))[`.`+t]=e,t}let i=typeof t.all==`string`?t.all:t.all?r(t.all):void 0,a=t.scope;this.scope=a instanceof Ml?e=>e.prop(kl)==a.data:a?e=>e==a:void 0,this.style=ml(e.map(e=>({tag:e.tag,class:e.class||r(Object.assign({},e,{tag:null}))})),{all:i}).style,this.module=n?new ai(n):null,this.themeType=t.themeType}static define(t,n){return new e(t,n||{})}};X.meta,X.link,X.heading,X.emphasis,X.strong,X.strikethrough,X.keyword,X.atom,X.bool,X.url,X.contentSeparator,X.labelName,X.literal,X.inserted,X.string,X.deleted,X.regexp,X.escape,X.string,X.variableName,X.variableName,X.typeName,X.namespace,X.className,X.variableName,X.macroName,X.propertyName,X.comment,X.invalid;let Kl=Object.create(null),ql=[yt.none],Jl=[],Yl=Object.create(null),Xl=Object.create(null);for(let[e,t]of[[`variable`,`variableName`],[`variable-2`,`variableName.special`],[`string-2`,`string.special`],[`def`,`variableName.definition`],[`tag`,`tagName`],[`attribute`,`attributeName`],[`type`,`typeName`],[`builtin`,`variableName.standard`],[`qualifier`,`modifier`],[`error`,`invalid`],[`header`,`heading`],[`property`,`propertyName`]])Xl[e]=Ql(Kl,t);function Zl(e,t){Jl.indexOf(e)>-1||(Jl.push(e),console.warn(t))}function Ql(e,t){let n=[];for(let r of t.split(` `)){let t=[];for(let n of r.split(`.`)){let r=e[n]||X[n];r?typeof r==`function`?t.length?t=t.map(r):Zl(n,`Modifier ${n} used at start of tag`):t.length?Zl(n,`Tag ${n} used as modifier`):t=Array.isArray(r)?r:[r]:Zl(n,`Unknown highlighting tag ${n}`)}for(let e of t)n.push(e)}if(!n.length)return 0;let r=t.replace(/ /g,`_`),i=r+` `+n.map(e=>e.id),a=Yl[i];if(a)return a.id;let o=Yl[i]=yt.define({id:ql.length,name:r,props:[dl({[r]:n})]});return ql.push(o),o.id}U.RTL,U.LTR,Pl.define({parser:gn.configure({props:[dl({"Aggregator/Word":X.keyword,"Metric/Word":X.variableName,"Head/Word":X.keyword,DatasetReference:X.keyword,"DatasetReference/Word":X.keyword,At:X.punctuation,TagKey:X.propertyName,"TagKey/Word":X.propertyName,TagValue:X.string,"TagValue/Value/Word":X.string,"TagValue/Word":X.string,Negate:X.operator,Star:X.operator,Dimension:X.attributeName,"Dimension/Word":X.attributeName,By:X.keyword,RollupDot:X.keyword,Int:X.number,"Rollup/Word":X.unit,braceOpen:X.bracket,braceClose:X.bracket,parenOpen:X.bracket,parenClose:X.bracket,colon:X.punctuation,comma:X.punctuation,pipe:X.punctuation,dot:X.punctuation})]}),languageData:{closeBrackets:{brackets:[`{`,`(`]}}}),[...rt.map(e=>({label:e,detail:`function head`,type:`keyword`})),...nt.map(e=>({label:e,detail:`source head`,type:`keyword`})),...it.map(e=>({label:e,detail:`chart head`,type:`class`})),...at.map(e=>({label:e,detail:`page dataset`,type:`class`}))],Xe.map(e=>({label:e,type:`keyword`})),[...Je,...Ye],ot.map(e=>({label:e,detail:`display unit`,type:`constant`})),[...new Set(tt.flatMap(e=>[...pt(e,`find`)]))],Gl.define([{tag:X.keyword,color:`hsl(var(--primary))`},{tag:X.variableName,color:`hsl(var(--accent-foreground))`,fontWeight:`600`},{tag:X.propertyName,color:`hsl(var(--secondary-foreground))`},{tag:X.string,color:`hsl(var(--success))`},{tag:X.attributeName,color:`hsl(var(--warning))`},{tag:X.number,color:`hsl(var(--primary))`},{tag:X.unit,color:`hsl(var(--muted-foreground))`},{tag:X.operator,color:`hsl(var(--destructive))`},{tag:[X.bracket,X.punctuation],color:`hsl(var(--muted-foreground))`}]);function $l(e){return e.trim().split(/[^a-zA-Z0-9]+/).filter(Boolean).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function eu(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function tu(e){let t=e?.fieldRef;if(!t||typeof t!=`object`)return;let{path:n,kind:r,dimension:i}=t;if(typeof n==`string`&&n.length!==0&&typeof r==`string`)return{path:n,kind:r,...typeof i==`string`?{dimension:i}:{}}}function nu(e){let t=e?.groupTags;if(!t||typeof t!=`object`)return;let n=Object.entries(t).filter(e=>typeof e[1]==`string`&&e[1].length>0).sort(([e],[t])=>e<t?-1:1);return n.length>0?Object.fromEntries(n):void 0}function ru(e){let t=new Map;for(let n of e){if(n.outputType!==`analytics`)continue;let e=n.metrics.find(e=>e.type===T.Label),r=n.metrics.find(e=>e.type!==T.Label&&typeof e.value==`number`);if(!e||!r)continue;let i=String(e.value??e.image??``);if(!i)continue;let a=tu(r.metadata),o=eu(r.metadata,`canonicalKey`)??a?.path??$l(i),s=eu(r.metadata,`effortSlug`),c=eu(r.metadata,`effortDiscipline`),l=eu(r.metadata,`effortIntensityTier`),u=eu(r.metadata,`grade`),d=nu(r.metadata)??(s?{effort:s}:void 0),f=a?`${we(a)}${d?`:`+Object.entries(d).map(([e,t])=>`${e}=${t}`).join(`:`):``}`:d?`${o}:${Object.entries(d).map(([e,t])=>`${e}=${t}`).join(`:`)}`:o;t.set(f,{projectionName:i,metricKey:o,value:r.value,unit:r.unit,effortSlug:s,discipline:c,intensityTier:l,grade:u,groupTags:d,rowKey:f,...a?{fieldRef:a}:{},started:n.timeSpan?.started})}return t}function iu(e){let t=e;for(let e of t){let t=eu(e.metadata,`effortSlug`);if(t)return t;if((e.type===`effort`||e.type===T.Effort)&&typeof e.value==`string`&&e.value)return e.value}}function au(e,t){return e.map((e,n)=>({id:`${t.resultId}:${n}`,resultId:t.resultId,noteId:t.noteId,blockContentId:t.blockContentId,pageId:t.pageId,origin:t.origin,timestamp:e.timeSpan?.started??t.workoutTimestamp??Date.now(),grain:`event`,outputType:e.outputType??`segment`,effortSlug:iu(e.metrics),metrics:e.metrics,timeSpan:e.timeSpan?.started===void 0?void 0:{started:e.timeSpan.started,ended:e.timeSpan.ended},metricTemporal:e.timeSpan?.started===void 0?void 0:e.metrics.map(()=>({temporalKind:`instant`,instant:e.timeSpan.started})),sourceBlockKey:e.sourceBlockKey,stackLevel:e.stackLevel,line:e.line,sourceStatementId:e.sourceStatementId,text:e.text,dialect:e.dialect,completionReason:e.completionReason,blockId:t.blockId,blockVersion:t.blockVersion}))}function ou(e,t){let n=Date.now();return Array.from(ru(e).values(),e=>({id:`${t.resultId}:summary:${e.rowKey}`,resultId:t.resultId,noteId:t.noteId,blockContentId:t.blockContentId,pageId:t.pageId,origin:t.origin,timestamp:t.workoutTimestamp??e.started??n,grain:`summary`,outputType:`analytics`,representationKind:`calculated`,summaryCoverage:{scope:e.effortSlug?`effort`:e.groupTags?`partition`:`workout`,...e.effortSlug?{effortSlug:e.effortSlug}:{},...e.groupTags?{groupTags:e.groupTags}:{}},effortSlug:e.effortSlug,metrics:[{type:e.metricKey,value:e.value,...e.unit?{unit:e.unit}:{},metadata:{canonicalKey:e.metricKey,...e.fieldRef?{fieldRef:e.fieldRef,originalKey:e.projectionName}:{},...e.effortSlug?{effortSlug:e.effortSlug}:{},...e.discipline?{effortDiscipline:e.discipline}:{},...e.intensityTier?{effortIntensityTier:e.intensityTier}:{},...e.groupTags?{groupTags:e.groupTags}:{},...e.grade?{grade:e.grade}:{}}}],blockId:t.blockId,blockVersion:t.blockVersion}))}new Set(et);let Z=`sync_outbox`,su=`sync_state`,cu=[{name:Z,keyPath:`seq`,autoIncrement:!0},{name:su,keyPath:`key`}],lu=C.filter(e=>!e.system).map(e=>e.name),uu={attachments:`data`},du=[{name:`segments`,keyPath:[`id`,`version`]},{name:`results`,keyPath:`id`}];var fu=class{ops=[];ctx};let pu=new Set;function mu(){for(let e of pu)e()}function hu(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&(`lower`in e||`upper`in e||`lowerOpen`in e||`upperOpen`in e)}function gu(e){if(e.op!==`put`)return 32;let t=32,n=uu[e.store],r=e.value,i=n&&typeof r==`object`&&r&&!Array.isArray(r)&&n in r?Reflect.get(r,n):void 0;return t+=typeof i==`string`?i.length:i instanceof ArrayBuffer?Math.ceil(i.byteLength/3)*4+64:JSON.stringify(e.value)?.length??0,t}let _u=[`block_revisions`,`notes`,`sessions`,...lu.filter(e=>e!==`block_revisions`&&e!==`notes`&&e!==`sessions`)];async function vu(e){let t=Ke(await e(`notes`)),n=[];for(let r of _u){let i=C.find(e=>e.name===r);for(let a of await e(r))qe(r,a,t)&&n.push({op:`put`,store:r,key:ce(i,a),value:a})}return n}var yu=class e{owner;name;tx;mutable;touched;journal;constructor(e,t,n,r=!1,i,a){this.owner=e,this.name=t,this.tx=n,this.mutable=r,this.touched=i,this.journal=a}async get(e){return this.tx?this.tx.objectStore(this.name).get(e):(await this.owner.open()).get(this.name,e)}async getMany(e){return this.tx?Promise.all(e.map(e=>this.tx.objectStore(this.name).get(e))):this.owner.transaction([this.name],`readonly`,t=>t.readonly(this.name).getMany(e))}async getAll(e,t){return this.tx?this.tx.objectStore(this.name).getAll(e,t):(await this.owner.open()).getAll(this.name,e,t)}async getAllFromIndex(e,t,n){return this.tx?this.tx.objectStore(this.name).index(e).getAll(t,n):(await this.owner.open()).getAllFromIndex(this.name,e,t,n)}async getAllFromIndexMany(e,t){return this.tx?Promise.all(t.map(t=>this.tx.objectStore(this.name).index(e).getAll(t))):this.owner.transaction([this.name],`readonly`,n=>n.readonly(this.name).getAllFromIndexMany(e,t))}async count(e){return this.tx?this.tx.objectStore(this.name).count(e):(await this.owner.open()).count(this.name,e)}async countFromIndex(e,t){return this.tx?this.tx.objectStore(this.name).index(e).count(t):(await this.owner.open()).countFromIndex(this.name,e,t)}async put(e,t){if(!this.mutable)throw Error(`read-only store`);if(!this.tx){let t=this.name===`notes`?[this.name,`block_revisions`]:[this.name,`block_revisions`,`notes`];return this.owner.transaction([...t],`readwrite`,t=>t.readwrite(this.name).put(e))}let n=this.owner.stamp(this.name,e);Be(this.name,n);let r=C.find(e=>e.name===this.name),i=ce(r,n),a=this.tx.objectStore(this.name),o=await a.get(i);if(this.name===`block_revisions`&&o!==void 0&&!Re(o,n))throw Error(`immutable block revision collision`);if(this.name===`notes`&&Ve(o,n),this.name===`sessions`&&He(o,n),Re(o,n))return i;let s=await a.put(n);if(!r.system&&this.journal){let e=this.name===`notes`?void 0:await(this.journal.ctx??=this.owner.policyContext(this.tx)),t=o!==void 0&&qe(this.name,o,e??Ke([]));if(qe(this.name,n,e??Ke([]))){if(this.name===`notes`&&typeof n==`object`&&n&&`id`in n)for(let e of await this.tx.objectStore(`block_revisions`).index(`by-note`).getAll(String(n.id)))this.journal.ops.push({op:`put`,store:`block_revisions`,key:[e.noteId,e.blockId,e.version],value:e});else if(this.name===`sessions`&&typeof n==`object`&&n&&`noteId`in n&&`blockId`in n&&`blockVersion`in n){let e=[n.noteId,n.blockId,n.blockVersion],t=await this.tx.objectStore(`block_revisions`).get(e);t&&this.journal.ops.push({op:`put`,store:`block_revisions`,key:e,value:t})}this.journal.ops.push({op:`put`,store:this.name,key:i,value:n})}else t&&this.journal.ops.push({op:`delete`,store:this.name,key:i});this.name===`notes`&&(this.journal.ctx=void 0)}return this.name===`notes`&&this.touched?.notes.add(String(i)),this.name===`sessions`&&this.touched?.sessions.add(String(i)),s}async putMany(e,t){if(t&&t.length!==e.length)throw Error(`putMany key count mismatch`);if(!this.tx){let n=this.name===`notes`?[this.name,`block_revisions`]:[this.name,`block_revisions`,`notes`];return this.owner.transaction([...n],`readwrite`,n=>n.readwrite(this.name).putMany(e,t))}let n=[];for(let r=0;r<e.length;r++)n.push(await this.put(e[r],t?.[r]));return n}async delete(t){if(!this.mutable)throw Error(`read-only store`);if(this.name===`block_revisions`)throw Error(`block history requires explicit wipe`);if(!this.tx){let e=this.name===`notes`?[this.name]:[this.name,`notes`];return this.owner.transaction([...e],`readwrite`,e=>e.readwrite(this.name).delete(t))}if(this.name===`notes`)for(let n of await this.tx.objectStore(`notes`).getAll(t))for(let t of[`block_index`,`block_efforts`,`block_equipment`]){let r=this.tx.objectStore(t);for(let i of await r.index(`by-note`).getAllKeys(n.id))await new e(this.owner,t,this.tx,!0,this.touched,this.journal).delete(i)}await this.recordDelete(t),await this.tx.objectStore(this.name).delete(t)}async recordDelete(e){if(!this.journal)return;let t=this.tx.objectStore(this.name),n=hu(e)?await t.getAllKeys(e):[e],r=this.name===`notes`?void 0:await(this.journal.ctx??=this.owner.policyContext(this.tx));for(let e of n){let n=await t.get(e);n!==void 0&&!qe(this.name,n,r??Ke([]))||this.journal.ops.push({op:`delete`,store:this.name,key:e})}}async clear(){if(!this.mutable)throw Error(`read-only store`);if(this.name===`block_revisions`)throw Error(`block history requires explicit wipe`);if(!this.tx){let e=this.name===`notes`?[`notes`,`block_index`,`block_efforts`]:[this.name,`notes`];return this.owner.transaction([...e],`readwrite`,e=>e.readwrite(this.name).clear())}let e=this.tx.objectStore(this.name),t=await e.getAll(),n=Ke(this.name===`notes`?t:await this.tx.objectStore(`notes`).getAll());for(let r of t){let t=ce(C.find(e=>e.name===this.name),r);if(qe(this.name,r,n)&&!(this.name===`meta`&&typeof t==`string`&&t.startsWith(`user-deleted-seed:`))){if(this.name===`notes`&&typeof t==`string`)for(let e of[`block_index`,`block_efforts`,`block_equipment`]){let n=this.tx.objectStore(e);for(let r of await n.index(`by-note`).getAllKeys(t))this.journal?.ops.push({op:`delete`,store:e,key:r}),await n.delete(r)}await this.recordDelete(t),await e.delete(t)}}}};let bu={script:`wod`,wod:`wod`};function xu(e){return ke(e.slice(0,e.indexOf(`
|
|
13
13
|
`)).trim())??{}}var Su=class{options;opening;constructor(e={}){this.options=e}open(){if(typeof indexedDB>`u`)return Promise.reject(Error(`IndexedDB is unavailable in this environment`));if(!this.opening){let e=!1,t=0,n;this.opening=g(this.options.dbName??`wodwiki-db`,32,{upgrade:async(r,i,a,o)=>{if(o.done.catch(()=>{}),i>32){e=!0,o.abort();return}if(i!==0&&i<20){t=i,o.abort();return}try{wu(r,o),i!==0&&i<32&&this.options.onUpgradeStart?.(i),await Tu(r,i,o)}catch(e){n=e instanceof Error?e:Error(String(e));try{o.abort()}catch{}}},blocking:()=>{this.close()}}).catch(r=>{throw this.opening=void 0,n||(t===0?e||r instanceof DOMException&&r.name===`VersionError`?Error(`database schema is newer than this client supports (v32); refusing to downgrade`):r:Error(`local database schema v${t} predates the supported migration chain (v20+). Open this browser profile in an intermediate app version to export your data, or clear site data to start fresh — the old database was left untouched.`))})}return this.opening}stamp(e,t){let n=this.options.getUserId?.();return n?oe(e,t,n):t}async policyContext(e){return Ke(e?await e.objectStore(`notes`).getAll():await(await this.open()).getAll(`notes`))}readonly(e){return new yu(this,e)}readwrite(e){return new yu(this,e,void 0,!0)}async transaction(e,t,n){let r=await this.open(),i=t===`readwrite`?new fu:void 0,a=new Set(e);t===`readwrite`&&(a.add(`block_revisions`),a.add(Z),a.add(`notes`),a.has(`notes`)&&(a.add(`block_index`),a.add(`block_efforts`),a.add(`block_equipment`)));let o=r.transaction([...a],t),s=o.done;s.catch(()=>{});let c={notes:new Set,sessions:new Set},l={readonly:e=>{if(!a.has(e))throw Error(`store outside transaction scope`);return new yu(this,e,o)},readwrite:e=>{if(t!==`readwrite`)throw Error(`read-only transaction`);if(!a.has(e))throw Error(`store outside transaction scope`);return new yu(this,e,o,!0,c,i)}};try{let e=await n(l);return await Ue((await Promise.all([...c.notes].map(e=>o.objectStore(`notes`).get(e)))).filter(Boolean),(await Promise.all([...c.sessions].map(e=>o.objectStore(`sessions`).get(e)))).filter(Boolean),e=>Promise.all(e.map(e=>o.objectStore(`block_revisions`).get(e)))),i&&i.ops.length>0&&await o.objectStore(Z).put({id:crypto.randomUUID(),at:Date.now(),ops:i.ops}),await s,i&&i.ops.length>0&&mu(),e}catch(e){try{o.abort()}catch{}throw await s.catch(()=>{}),e}}async wipeUserData(){let e=C.filter(e=>!e.system&&e.name!==`block_revisions`).map(e=>e.name);await this.transaction(e,`readwrite`,async t=>{for(let n of e)await t.readwrite(n).clear()})}async wipe(){let e=await this.open(),t=C.filter(e=>!e.system).map(e=>e.name),n=e.transaction([...t,Z],`readwrite`);await Promise.all(t.map(e=>n.objectStore(e).clear())),await n.objectStore(Z).put({id:crypto.randomUUID(),at:Date.now(),ops:[{op:`wipe`}]}),await n.done,mu()}async readOutbox(e,t){let n=await this.open(),r=IDBKeyRange.lowerBound(e,!0);return await n.getAll(Z,r,Math.min(t,4294967295))}async ackOutbox(e){let t=await this.open(),n=await t.getAllKeys(Z,IDBKeyRange.upperBound(e)),r=t.transaction(Z,`readwrite`);await Promise.all(n.map(e=>r.store.delete(e))),await r.done}async getSyncState(e){return(await(await this.open()).get(su,e))?.value}async setSyncState(e,t){await(await this.open()).put(su,{key:e,value:t})}async captureSyncBootstrap(e){let t=(await this.open()).transaction([...lu,Z,su],`readwrite`),n=t.objectStore(su),r=await n.get(e);if(r!==void 0&&Array.isArray(r.value))return await t.done,r.value;let i=new Set,a=new Set,o=!1;for(let e of await t.objectStore(Z).getAll())for(let t of e.ops)t.op===`put`||t.op===`delete`?i.add(`${t.store}:${JSON.stringify(t.key)}`):t.op===`clear`?a.add(t.store):o=!0;let s=crypto.randomUUID(),c=[];if(!o){let e=[],n=0,r=()=>{e.length!==0&&(c.push({id:`bootstrap:${s}:${c.length}`,at:Date.now(),ops:e}),e=[],n=0)};for(let o of await vu(e=>t.objectStore(e).getAll())){if(a.has(o.store)||o.store!==`block_revisions`&&i.has(`${o.store}:${JSON.stringify(o.key)}`))continue;let t=gu(o);e.length>0&&(e.length>=500||n+t>1e6)&&r(),e.push(o),n+=t}r()}return await n.put({key:e,value:c}),await t.done,c}async validateSyncState(){let e=(await this.open()).transaction([`notes`,`sessions`,`block_revisions`],`readonly`),t=await e.objectStore(`notes`).getAll(),n=await e.objectStore(`sessions`).getAll(),r=e.objectStore(`block_revisions`);await Ue(t,n,e=>Promise.all(e.map(e=>r.get(e)))),await e.done}async applySyncMutations(e,t,n=`cursor`){let r=new Map(C.map(e=>[e.name,e]));for(let t of e){if(t.op===`clear`||t.op===`wipe`)continue;let e=r.get(t.store);if(!e)throw Error(`unknown store in sync mutation: ${String(t.store)}`);if(t.op===`put`||t.op===`delete`){let n=Array.isArray(t.key)?t.key:[t.key];if(n.length!==e.keyPath.length||!n.every(e=>typeof e==`string`||typeof e==`number`))throw Error(`sync ${t.op} key arity/shape mismatch for ${t.store}`)}t.op===`put`&&Be(t.store,t.value)}let i=await this.open(),a=lu,o=i.transaction([...a,Z,su],`readwrite`),s=e=>e===`notes`||e===`efforts`,c=new Map;for(let t of e){if(t.op===`clear`||t.op===`wipe`||!s(t.store))continue;let e=`${t.store}:${JSON.stringify(t.key)}`;if(c.has(e))continue;let n=t.key,r=await o.objectStore(t.store).get(n);c.set(e,{store:t.store,key:n,before:r,beforeExists:r!==void 0})}let l=async(e,t)=>{if(e.op===`wipe`){for(let e of a)await o.objectStore(e).clear();return}if(e.store===`memberships`)return;if(e.op===`clear`){if(e.store===`block_revisions`)return;let n=o.objectStore(e.store),i=Ke(await o.objectStore(`notes`).getAll());for(let a of await n.getAll()){if(!qe(e.store,a,i))continue;let n=ce(r.get(e.store),a);e.store===`meta`&&typeof n==`string`&&n.startsWith(`user-deleted-seed:`)||await l({op:`delete`,store:e.store,key:n},t)}return}if(e.op===`delete`){if(e.store===`notes`){let t=String(Array.isArray(e.key)?e.key[0]:e.key);for(let e of[`block_index`,`block_efforts`,`block_equipment`]){let n=o.objectStore(e);for(let e of await n.index(`by-note`).getAllKeys(t))await n.delete(e)}}e.store!==`block_revisions`&&await o.objectStore(e.store).delete(e.key);return}let n=o.objectStore(e.store);if(e.store===`block_revisions`){let r=await n.get(e.key);if(r!==void 0&&!Re(r,e.value)&&!t){let t=e.value,i=r.version+1;for(;await n.get([t.noteId,t.blockId,i])!==void 0;)i+=1;await n.put({...t,version:i});return}(r===void 0||!Re(r,e.value))&&await n.put(e.value);return}if(e.store===`notes`&&!t){let t=await n.get(e.key);if(t!==void 0){let n=t,r=e.value;if(n.sourceRevision>r.sourceRevision)return}}await n.put(e.value)};for(let t of e)await l(t,!1);let u=(await o.objectStore(Z).getAll()).sort((e,t)=>e.seq-t.seq);for(let e of u)for(let t of e.ops)await l(t,!0);let d=0,f=0;for(let e of c.values()){let t=await o.objectStore(e.store).get(e.key);t!==void 0&&(e.beforeExists?Re(e.before,t)||(f+=1):d+=1)}return t!==null&&await o.objectStore(su).put({key:n,value:{rev:t}}),await o.done,{added:d,updated:f}}async snapshotRows(){let e=await this.open(),t=C.filter(e=>!e.system),n=e.transaction(t.map(e=>e.name),`readonly`),r=Ke(await n.objectStore(`notes`).getAll()),i=await Promise.all(t.map(async e=>({store:e.name,rows:(await n.objectStore(e.name).getAll()).filter(t=>qe(e.name,t,r))})));return await n.done,i}async snapshotAllRows(){let e=await this.open(),t=C.filter(e=>!e.system),n=e.transaction(t.map(e=>e.name),`readonly`),r=await Promise.all(t.map(async e=>({store:e.name,rows:await n.objectStore(e.name).getAll()})));return await n.done,r}async close(){let e=this.opening;this.opening=void 0,(await e?.catch(()=>void 0))?.close()}};let Cu=[...C.map(e=>({name:e.name,keyPath:e.keyPath})),...du.map(e=>({name:e.name,keyPath:Array.isArray(e.keyPath)?e.keyPath:[e.keyPath]}))];Object.fromEntries(Cu.map(e=>[e.name,e.keyPath]));function wu(e,t){for(let n of C){if(e.objectStoreNames.contains(n.name)){let e=t.objectStore(n.name);for(let t of n.indexes)e.indexNames.contains(t.name)||e.createIndex(t.name,t.keyPath.length===1?t.keyPath[0]:t.keyPath,{unique:t.unique,multiEntry:t.multiEntry});continue}let r=e.createObjectStore(n.name,{keyPath:n.keyPath.length===1?n.keyPath[0]:n.keyPath});for(let e of n.indexes)r.createIndex(e.name,e.keyPath.length===1?e.keyPath[0]:e.keyPath,{unique:e.unique,multiEntry:e.multiEntry})}for(let t of cu)e.objectStoreNames.contains(t.name)||e.createObjectStore(t.name,{keyPath:t.keyPath,autoIncrement:`autoIncrement`in t&&t.autoIncrement})}async function Tu(e,t,n){let r=e=>n.objectStore(e);if(t===20&&e.objectStoreNames.contains(`sessions`)){let e=r(`sessions`),t=r(`events`);for await(let n of e){let e=n.value,r=e.data?.logs??[],i=!1;for await(let n of t.index(`by-result-grain`).iterate(IDBKeyRange.bound([e.id,``],[e.id,[]]))){i=!0;break}if(!i&&r.length>0){let n={noteId:e.noteId,resultId:e.id,segmentId:e.segmentId,segmentVersion:e.segmentVersion,blockContentId:e.blockContentId,origin:e.origin,pageId:e.pageId,workoutTimestamp:e.data?.endTime??e.createdAt};for(let e of au(r,n))await t.put(e);for(let e of ou(r,n))await t.put(e)}let a={...e,startTime:e.data?.startTime??e.createdAt,endTime:e.data?.endTime??e.createdAt,duration:e.data?.duration??0,completed:e.data?.completed??!0,roundsCompleted:e.data?.roundsCompleted,totalRounds:e.data?.totalRounds,repsCompleted:e.data?.repsCompleted};delete a.data,await n.update(a)}}if(t===21&&e.objectStoreNames.contains(`meta`)&&await r(`meta`).delete(`seed`),t<25)for(let t of w){if(!e.objectStoreNames.contains(t))continue;let n=r(t);n.indexNames.contains(`by-user`)||n.createIndex(`by-user`,`userId`)}if(e.objectStoreNames.contains(`results`)){let t=r(`sessions`),n=r(`results`),i=r(`events`);for await(let e of n){let{data:n,...r}=e.value,a=n?.logs??[];if(a.length>0){let e={noteId:r.noteId,resultId:r.id,segmentId:r.segmentId,segmentVersion:r.segmentVersion,blockContentId:r.blockContentId,origin:r.origin,pageId:r.pageId,workoutTimestamp:n?.endTime??r.createdAt};for(let t of au(a,e))await i.get(t.id)===void 0&&await i.put(t);for(let t of ou(a,e))await i.get(t.id)===void 0&&await i.put(t)}await t.getKey(r.id)===void 0&&await t.put({...r,startTime:n?.startTime??r.startTime??r.createdAt,endTime:n?.endTime??r.endTime??r.createdAt,duration:n?.duration??r.duration??0,completed:n?.completed??r.completed??!0,roundsCompleted:n?.roundsCompleted??r.roundsCompleted,totalRounds:n?.totalRounds??r.totalRounds,repsCompleted:n?.repsCompleted??r.repsCompleted})}e.deleteObjectStore(`results`)}if(e.objectStoreNames.contains(`block_index`)&&!r(`block_index`).indexNames.contains(`by-source`)&&r(`block_index`).createIndex(`by-source`,`sourceId`),e.objectStoreNames.contains(`notes`)&&!r(`notes`).indexNames.contains(`by-created`)&&r(`notes`).createIndex(`by-created`,`createdAt`),e.objectStoreNames.contains(`efforts`)&&!r(`efforts`).indexNames.contains(`by-source`)&&r(`efforts`).createIndex(`by-source`,`registrySource`),e.objectStoreNames.contains(`note_tags`)&&!r(`note_tags`).indexNames.contains(`by-note-tag`)){let e=r(`note_tags`),t=new Map,n=[];for await(let r of e){let e=r.value,i=`${e.noteId}${e.tagId}`,a=t.get(i);a===void 0||e.id<a?(t.set(i,e.id),a!==void 0&&n.push(a)):n.push(e.id)}for(let t of n)await e.delete(t);e.createIndex(`by-note-tag`,[`noteId`,`tagId`],{unique:!0})}if(e.objectStoreNames.contains(`notes`)&&e.objectStoreNames.contains(`segments`)){let e=r(`segments`),t=r(`notes`),n=new Set;for await(let r of e){let e=r.value;if(e.dataType!==`frontmatter`||n.has(e.noteId)||!/(^|\n)dashboard:\s*["']?true["']?\s*(\n|$)/.test(e.rawContent))continue;n.add(e.noteId);let i=await t.get(e.noteId);!i||i.type===`dashboard`&&i.sourceId===`dashboards`||await t.put({...i,type:`dashboard`,sourceId:i.sourceId??`dashboards`})}}if(e.objectStoreNames.contains(`segments`)&&await Eu(e,n),t>=30&&t<32&&e.objectStoreNames.contains(Z)){let t=r(Z),n=[];for(let e of await t.getAll())for(let t of e.ops)if(t.op===`wipe`)for(let e of lu)e!==`block_revisions`&&n.push({op:`clear`,store:e});else t.op!==`put`&&t.store!==`memberships`&&t.store!==`block_revisions`&&n.push(t);if(n.push(...await vu(e=>r(e).getAll())),await t.clear(),n.length>0&&await t.put({id:crypto.randomUUID(),at:Date.now(),ops:n}),e.objectStoreNames.contains(su)){let e=r(su);for(let t of await e.getAllKeys())typeof t==`string`&&t.startsWith(`bootstrap-run:`)&&await e.delete(t)}}}async function Eu(e,t){let n=e=>t.objectStore(e),r=await n(`segments`).getAll(),i=n(`notes`),a=n(`block_revisions`),o=new Map;for(let e of r){let t=o.get(e.noteId);t?t.push(e):o.set(e.noteId,[e])}let s=new Map,c=new Map;for(let[e,t]of o){let n=new Map;for(let e of t){let t=n.get(e.id);(!t||e.version>t.version)&&n.set(e.id,e)}let r=[...n.values()].sort((e,t)=>(e.position??2**53-1)-(t.position??2**53-1)||e.id.localeCompare(t.id)),o=r.map(e=>e.sourceContent??`${e.rawContent}\n`).join(``),l=await i.get(e);if(!l)continue;let u=Me(o,{registeredWidgets:Oe}).filter(e=>Ne(e)!==null),d=r.filter(e=>e.dataType in bu),f={};u.forEach((t,n)=>{let r=Ne(t),i=d[n],a=i?.id??`migrated-${n}`;for(;Object.hasOwn(f,a);)a=`${a}-${n}`;let o=r===`wod`&&(t.type===`time`||t.type===`log`)?{dialect:t.type,...t.sport?{sport:t.sport}:{}}:{};f[a]={id:a,kind:r,version:i?.version??1,sourceRevision:1,from:t.from,to:t.to,...o},i&&s.set(`${e}${i.id}`,a),c.set(`${e}${a}`,{noteId:e,from:t.from,to:t.to,version:f[a].version})});let p=l;delete p.segments,delete p.segmentIds,await i.put({...p,rawContent:o,sourceRevision:1,blocks:f});let m=new Set(d.map(e=>e.id));for(let n of t){if(!m.has(n.id))continue;let t=xu(n.rawContent);await a.put({noteId:e,blockId:n.id,version:n.version,kind:`wod`,rawContent:n.rawContent,savedAt:n.createdAt,...t})}}let l=n(`sessions`);for(let e of await l.getAll()){if(e.segmentId===void 0&&e.segmentVersion===void 0&&e.version===void 0)continue;let{segmentId:t,segmentVersion:n,version:r,...i}=e;await l.put({...i,blockId:i.blockId??t??``,blockVersion:i.blockVersion??n??r??1})}let u=n(`events`);for(let e of await u.getAll()){if(e.segmentVersion===void 0&&e.segmentId===void 0)continue;let{segmentVersion:t,segmentId:n,...r}=e;await u.put({...r,...r.blockId===void 0&&n!==void 0?{blockId:n}:{},...r.blockVersion===void 0&&t!==void 0?{blockVersion:t}:{}})}let d=n(`block_index`);for(let e of await d.getAll()){let t=s.get(`${e.noteId}${e.segmentId}`)??e.segmentId,n=c.get(`${e.noteId}${t}`),r={...e,id:`${e.noteId}:${t}`,blockId:t,blockVersion:n?.version??e.segmentVersion??1,sourceRevision:1,...n?{from:n.from,to:n.to}:{},dataType:e.dataType===`script`?`wod`:e.dataType};delete r.segmentId,delete r.segmentVersion,r.id!==e.id&&await d.delete(e.id),await d.put(r)}e.deleteObjectStore(`segments`)}var Du=class{items=new Map;constructor(e=[]){for(let t of e)this.items.set(t.id,t)}register(e){this.items.set(e.id,e)}unregister(e){this.items.delete(e)}has(e){return this.items.has(e)}get(e){return this.items.get(e)}list(){return[...this.items.values()].sort((e,t)=>(t.priority??0)-(e.priority??0))}get size(){return this.items.size}};let Ou={REPEATING_INTERVAL:`behavior.repeating_interval`,REQUIRED_TIMER:`behavior.required_timer`,INJECT_REST:`behavior.inject_rest`,LABEL_AMRAP:`workout.amrap`,LABEL_EMOM:`workout.emom`,LABEL_TABATA:`workout.tabata`,LABEL_FOR_TIME:`workout.for_time`};Object.values(Ou);function ku(e){if(!e)return[];if(Array.isArray(e.rawMetrics))return e.rawMetrics;let t=e.metrics;return t?Array.isArray(t)?t:t.rawMetrics??[]:[]}function Au(e,t=`dialect`,n){return{type:T.Hint,value:e,image:e,origin:t,...n?{icon:n}:{}}}function ju(e,t,n=`dialect`){let r=t??E.empty(`dialect`),i=new Set(Mu(r));for(let t of e)i.has(t)||(i.add(t),r.add(Au(t,n)));return r}function Mu(e){return ku(e).filter(e=>e.type===T.Hint&&typeof e.value==`string`).map(e=>e.value)}function Nu(e,t){return ku(e).some(e=>e.type===T.Hint&&e.value===t)}let Pu=/^([a-zA-Z]+)([\s\S]*)$/;var Fu=class e{defs;byToken;constructor(e=[]){this.defs=e,this.byToken=new Map;for(let t of e){this.byToken.set(t.canonical.toLowerCase(),t);for(let e of t.aliases)this.byToken.set(e.toLowerCase(),t)}}get(e){return this.byToken.get(e.trim().toLowerCase())}has(e){return this.byToken.has(e.trim().toLowerCase())}consumeLeading(e){let t=Pu.exec(e.trimStart());if(!t)return null;let n=t[1],r=this.get(n);return r?{unit:r,token:n,rest:t[2].trim()}:null}extend(...t){return new e([...this.defs,...t])}toArray(){return[...this.defs]}};let Iu=[{canonical:`m`,dimension:`length`,aliases:[`meter`,`meters`,`metre`,`metres`]},{canonical:`km`,dimension:`length`,aliases:[`kilometer`,`kilometers`,`kilometre`,`kilometres`]},{canonical:`cm`,dimension:`length`,aliases:[`centimeter`,`centimeters`,`centimetre`,`centimetres`]},{canonical:`mm`,dimension:`length`,aliases:[`millimeter`,`millimeters`,`millimetre`,`millimetres`]},{canonical:`ft`,dimension:`length`,aliases:[`foot`,`feet`]},{canonical:`in`,dimension:`length`,aliases:[`inch`,`inches`]},{canonical:`yd`,dimension:`length`,aliases:[`yard`,`yards`]},{canonical:`mi`,dimension:`length`,aliases:[`mile`,`miles`]},{canonical:`kg`,dimension:`mass`,aliases:[`kilo`,`kilos`,`kilogram`,`kilograms`]},{canonical:`g`,dimension:`mass`,aliases:[`gram`,`grams`]},{canonical:`lb`,dimension:`mass`,aliases:[`lbs`,`pound`,`pounds`]},{canonical:`bw`,dimension:`mass`,aliases:[`bodyweight`]},{canonical:`cal`,dimension:`energy`,aliases:[`cals`,`calorie`,`calories`]},{canonical:`kcal`,dimension:`energy`,aliases:[`kcals`,`kilocalorie`,`kilocalories`]}],Lu={standard(){return new Fu(Iu)},of(e){return new Fu(e)}},Ru=e=>{if(e==null||!Number.isFinite(e))return`--:--`;let t=e<0,n=Math.floor(Math.abs(e)/1e3),r=Math.floor(n/60),i=n%60;return`${t?`-`:``}${r.toString().padStart(2,`0`)}:${i.toString().padStart(2,`0`)}`},zu=e=>{if(e==null||!Number.isFinite(e))return`--:--:--`;let t=e<0,n=Math.floor(Math.abs(e)/1e3),r=Math.floor(n/3600),i=Math.floor(n%3600/60),a=n%60;return`${t?`-`:``}${r.toString().padStart(2,`0`)}:${i.toString().padStart(2,`0`)}:${a.toString().padStart(2,`0`)}`},Bu=e=>e==null||!Number.isFinite(e)?`--:--`:Math.floor(Math.abs(e)/1e3)>=3600?zu(e):Ru(e),Vu=new Set([T.Duration,T.Time,T.Elapsed,T.Total]);function Hu(e){return Vu.has(e)}function Uu(e){if(e.image)return e.image;if(e.value===void 0||e.value===null)return e.type;if(typeof e.value==`object`){let t=e.value;return`text`in t?String(t.text):`current`in t?`Round ${t.current}`:JSON.stringify(e.value)}return String(e.value)}function Wu(e,t){if(Hu(e.type)&&typeof e.value==`number`)return Bu(e.value);let n=Uu(e);if(e.type===T.Rounds||e.type===`rounds`){let e=n.trim();if(/^\d+$/.test(e))return`${n} ${Number(e)===1?`Round`:`Rounds`}`}return n}function Gu(e){let t=[];return t.push(`Type: ${e.type}`),e.value!==void 0&&t.push(`Value: ${e.value}`),e.origin&&t.push(`Origin: ${e.origin}`),e.sourceBlockKey&&t.push(`Block: ${e.sourceBlockKey}`),e.timestamp&&t.push(`Time: ${e.timestamp.toISOString()}`),t.join(`
|
|
14
14
|
`)}let Ku={duration:`Duration`,rep:`Reps`,effort:`Effort`,distance:`Distance`,rounds:`Rounds`,resistance:`Resistance`,action:`Action`,increment:`Increment`,metric:`Metric`,label:`Label`,text:`Text`,custom:`Custom`,calculated:`Calculated`,"current-round":`Current Round`,volume:`Volume`,intensity:`Intensity`,load:`Load`,work:`Work`,lap:`Lap`,group:`Group`,time:`Time`,elapsed:`Elapsed`,total:`Total`,"system-time":`System Time`,spans:`Spans`,system:`System`,rir:`RIR`,"session-rpe":`Session RPE`,"session-load":`Session Load`,"met-score":`MET Score`,tis:`TIS`,sound:`Sound`};function qu(e){let t=e.replace(/[_-]+/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/([A-Z]+)([A-Z][a-z])/g,`$1 $2`).trim();return t.length===0?``:t.split(/\s+/).map(e=>e===e.toUpperCase()||/^[A-Z]{2,}$/.test(e)?e:e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}function Ju(e){let t=String(e).trim(),n=t.toLowerCase();return Ku[n]??qu(t)}function Yu(e){return e.type.toLowerCase()===`effort`&&(e.value??e.image??``).trim().toLowerCase()===`rest`}function Xu(e,t){return t?`rest`:{time:`time`,duration:`time`,elapsed:`time`,total:`time`,spans:`time`,rep:`rep`,effort:`effort`,distance:`distance`,rounds:`rounds`,increment:`rounds`,"current-round":`rounds`,action:`action`,resistance:`resistance`,text:`muted`,label:`muted`,group:`muted`,lap:`muted`,system:`system`,"system-time":`system`,volume:`rep`,intensity:`effort`,load:`resistance`,work:`effort`,rir:`effort`,"session-rpe":`effort`,"session-load":`resistance`,"met-score":`distance`,tis:`action`,sound:`system`,metric:`effort`,custom:`muted`,calculated:`effort`}[e.type.toLowerCase()]??`unknown`}function Zu(){return{isStructural(e){let t=e.type;if(t===T.Group||t===`group`){let t=e.image??``;return t===`+`||t===`-`}return t===T.Lap||t===`lap`},isHidden(e,t){if(this.isStructural(e))return t!==`debug`;let n=e.type;return!!((n===T.Sound||n===`sound`)&&t!==`debug`||n.startsWith(`tag.`)&&t!==`debug`||t===`review-grid-column`&&(n===T.Elapsed||n===`elapsed`||n===T.Total||n===`total`||n===T.System||n===`system`))},present(e,t){let n=this.isStructural(e),r=this.isHidden(e,t),i=Yu(e),a=(e.type===T.Text||e.type===`text`)&&e.origin===`parser`,o=e.origin===`user`,s;return s=r?`hidden`:a?`comment`:t===`timer-subtitle`||t===`history-label`||t===`label-composer`?`plain-text`:t===`review-grid-column`?`column-heading`:`badge`,{metric:e,label:Wu(e,t),tooltip:Gu(e),renderKind:s,tone:Xu(e,i),iconKey:i?`rest`:e.type,visible:!r,structural:n,rest:i,comment:a,userEntered:o,columnLabel:Ju(e.type)}},presentGroup(e,t){return e.map(e=>this.present(e,t))},columnLabel(e){return Ju(e)}}}let Qu=Zu();var $u=class{effort;value;image;origin=`parser`;metadata;constructor(e,t){this.effort=e,this.value=t?.resolvedSlug??e,this.image=e,t?.references&&(this.metadata={references:t.references})}type=T.Effort},ed=class{unit;value;image;origin;constructor(e,t){this.unit=t,this.value={amount:e,unit:t},this.image=e===void 0?`? ${t}`:`${e} ${t}`,this.origin=e===void 0?`hinted`:`parser`}type=T.Distance},td=class{unit;value;image;origin;constructor(e,t){this.unit=t,this.value={amount:e,unit:t},this.image=e===void 0?`? ${t}`:`${e} ${t}`,this.origin=e===void 0?`hinted`:`parser`}type=T.Resistance},nd=class{unit;dimension;value;image;origin;type;constructor(e,t,n){this.unit=t,this.dimension=n,this.value={amount:e,unit:t},this.image=e===void 0?`? ${t}`:`${e} ${t}`,this.origin=e===void 0?`hinted`:`parser`,this.type=n===`energy`?`energy`:T.Custom}};function rd(e,t,n){switch(n){case`length`:return new ed(e,t);case`mass`:return new td(e,t);default:return new nd(e,t,n)}}var id=class{alternatives;type=T.Choice;origin=`parser`;value;image;constructor(e){this.alternatives=e,this.value={alternatives:e},this.image=e.map(e=>e.image??String(e.value??``)).join(` | `)}},ad=class{unit;value;image;origin;constructor(e,t=`%`){this.unit=t,this.value={amount:e,unit:t},this.image=e===void 0?`?${t}`:`${e}${t}`,this.origin=e===void 0?`hinted`:`parser`}type=T.Intensity};function od(e){return e.type===T.Rep&&(typeof e.value==`number`||e.value===void 0)}function sd(e){return e.type===T.Effort&&(typeof e.value==`string`?e.value:e.image)===`/`}function cd(e){return e.type===T.Effort&&(typeof e.value==`string`?e.value:e.image)===`|`}function ld(e){return e.type!==T.Effort&&e.type!==T.Text?null:typeof e.value==`string`?e.value:typeof e.image==`string`?e.image:null}function ud(e){if(e.type!==T.Distance&&e.type!==T.Resistance)return!1;let t=e.value;return!!t&&t.amount!==void 0&&(!t.unit||t.unit===``)}function dd(e,t,n){if(!e||!t)return e??t;let r=e.startOffset,i=(t.startOffset??0)+n.length,a=(t.startOffset??0)-(e.endOffset??0),o=e.raw===void 0?void 0:e.raw+` `.repeat(Math.max(0,a))+n,s=r===void 0?void 0:i-r;return{line:e.line,startOffset:r,endOffset:i,columnStart:e.columnStart,columnEnd:e.columnStart!==void 0&&s!==void 0?e.columnStart+s:e.columnEnd,length:s,raw:o}}function fd(e,t){if(!e||e.raw===void 0)return e&&{...e,raw:t};let n=e.raw.indexOf(t),r=n>=0?n:0,i=(e.startOffset??0)+r;return{line:e.line,startOffset:i,endOffset:e.endOffset,columnStart:(e.columnStart??0)+r,columnEnd:e.columnEnd,length:t.length,raw:t}}function pd(e,t){if(!e||!t)return e??t;let n=e.startOffset,r=t.endOffset,i=n!==void 0&&r!==void 0?r-n:void 0;return{line:e.line,startOffset:n,endOffset:r,columnStart:e.columnStart,columnEnd:t.columnEnd,length:i,raw:e.raw}}function md(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];if(!(sd(i.metric)||cd(i.metric))){if(a){let t=ld(i.metric),o=e[r+2]?ld(e[r+2].metric):null;if(t!==null&&cd(a.metric)&&o!==null){let t=[i.metric],a=r+1;for(;a+1<e.length&&cd(e[a].metric)&&ld(e[a+1].metric)!==null;)t.push(e[a+1].metric),a+=2;n.push({metric:new id(t),meta:pd(i.meta,e[a-1].meta)}),r=a-1;continue}}if(a&&e[r+2]&&e[r+3]){let o=e[r+2],s=e[r+3],c=od(i.metric)||ud(i.metric),l=od(o.metric)||ud(o.metric);if(c&&cd(a.metric)&&l){let e=ld(s.metric),a=e===null?null:t.consumeLeading(e);if(a){let e=od(i.metric)?i.metric.value:i.metric.value.amount,t=od(o.metric)?o.metric.value:o.metric.value.amount,c=rd(e,a.token,a.unit.dimension),l=rd(t,a.token,a.unit.dimension);if(c.type===l.type){let e=dd(i.meta,s.meta,a.token);n.push({metric:new id([c,l]),meta:e}),a.rest&&n.push({metric:new $u(a.rest),meta:fd(s.meta,a.rest)}),r+=3;continue}}}}if(a&&e[r+2]&&e[r+3]){let o=e[r+2],s=e[r+3],c=od(i.metric)||ud(i.metric),l=od(o.metric)||ud(o.metric);if(c&&sd(a.metric)&&l){let e=ld(s.metric),a=e===null?null:t.consumeLeading(e);if(a){let e=od(i.metric)?i.metric.value:i.metric.value.amount,t=od(o.metric)?o.metric.value:o.metric.value.amount;if(e!==void 0&&t!==void 0&&t!==0){let o=rd(e/t,a.token,a.unit.dimension),c=dd(i.meta,s.meta,a.token);n.push({metric:o,meta:c}),a.rest&&n.push({metric:new $u(a.rest),meta:fd(s.meta,a.rest)}),r+=3;continue}}}}if(a&&od(i.metric)){let e=ld(a.metric);if(e!==null&&e.trim()===`%`){n.push({metric:new ad(i.metric.value),meta:dd(i.meta,a.meta,`%`)}),r++;continue}}if(a&&(od(i.metric)||ud(i.metric))){let e=ld(a.metric),o=e===null?null:t.consumeLeading(e);if(o){let e=od(i.metric)?i.metric.value:i.metric.value.amount;n.push({metric:rd(e,o.token,o.unit.dimension),meta:dd(i.meta,a.meta,o.token)}),o.rest&&n.push({metric:new $u(o.rest),meta:fd(a.meta,o.rest)}),r++;continue}}n.push(i)}}return n}function hd(e,t){let n=e.metrics.toArray(),r=md(n.map(t=>({metric:t,meta:e.metricMeta?.get(t)})),t);if((r.length!==n.length||r.some((e,t)=>e.metric!==n[t]))&&(e.metrics.clear().add(...r.map(e=>e.metric)),e.metricMeta)){let t=new Map(e.metricMeta);for(let e of n)r.some(t=>t.metric===e)||t.delete(e);for(let e of r)e.meta&&t.set(e.metric,e.meta);e.metricMeta=t}}var gd=class{id=`units`;name=`Units Dialect`;units;constructor(e=Lu.standard()){this.units=e}transform(e){hd(e,this.units)}analyze(e){return{}}},_d=class{id=`crossfit`;name=`CrossFit Dialect`;hasKeyword(e,t){return e.some(e=>(e.type===T.Action||e.type===T.Effort)&&typeof e.value==`string`&&e.value.toUpperCase().includes(t))}hasChildren(e){return e.children&&e.children.length>0}analyze(e){let t=[],n=E.from(e.metrics),r=this.hasKeyword(n,`AMRAP`);r&&(t.push(`behavior.time_bound`),t.push(`workout.amrap`));let i=this.hasKeyword(n,`EMOM`);if(i&&(t.push(`behavior.repeating_interval`),t.push(`workout.emom`)),!i&&!r){let r=n.some(e=>e.type===T.Rounds),i=n.some(e=>e.type===T.Duration),a=this.hasChildren(e);r&&i&&a&&(t.push(`behavior.repeating_interval`),t.push(`workout.emom`),t.push(`workout.implicit_emom`))}return this.hasKeyword(n,`FOR TIME`)&&(t.push(`behavior.time_bound`),t.push(`workout.for_time`)),this.hasKeyword(n,`TABATA`)&&(t.push(`behavior.repeating_interval`),t.push(`workout.tabata`)),{metrics:ju(t)}}},vd=class{id=`wod`;name=`WOD Dialect`;hasKeyword(e,t){return e.some(e=>(e.type===T.Action||e.type===T.Effort)&&typeof e.value==`string`&&e.value.toUpperCase().includes(t.toUpperCase()))}analyze(e){let t=[],n=E.from(e.metrics);return this.hasKeyword(n,`STRENGTH`)&&(t.push(`domain.wod`),t.push(`workout.strength`),t.push(`behavior.load_bearing`)),(this.hasKeyword(n,`METCON`)||this.hasKeyword(n,`METABOLIC`))&&(t.push(`domain.wod`),t.push(`workout.metcon`)),(this.hasKeyword(n,`SKILL`)||this.hasKeyword(n,`TECHNIQUE`))&&(t.push(`domain.wod`),t.push(`workout.skills`)),this.hasKeyword(n,`WOD`)&&t.push(`domain.wod`),this.hasKeyword(n,`SUPERSET`)&&(t.push(`domain.wod`),t.push(`workout.superset`)),{metrics:ju(t)}}},yd=class{id=`cardio`;name=`Cardio Dialect`;hasKeyword(e,t){return e.some(e=>(e.type===T.Action||e.type===T.Effort)&&typeof e.value==`string`&&e.value.toUpperCase().includes(t.toUpperCase()))}hasDistance(e){return e.some(e=>e.type===T.Distance)}analyze(e){let t=[],n=E.from(e.metrics);return(this.hasKeyword(n,`RUN`)||this.hasKeyword(n,`JOG`)||this.hasKeyword(n,`SPRINT`))&&(t.push(`domain.cardio`),t.push(`workout.run`),t.push(`behavior.aerobic`)),(this.hasKeyword(n,`ROW`)||this.hasKeyword(n,`ROWING`))&&(t.push(`domain.cardio`),t.push(`workout.row`),t.push(`behavior.aerobic`)),(this.hasKeyword(n,`BIKE`)||this.hasKeyword(n,`CYCLE`)||this.hasKeyword(n,`CYCLING`))&&(t.push(`domain.cardio`),t.push(`workout.bike`),t.push(`behavior.aerobic`)),(this.hasKeyword(n,`SWIM`)||this.hasKeyword(n,`SWIMMING`))&&(t.push(`domain.cardio`),t.push(`workout.swim`),t.push(`behavior.aerobic`)),(this.hasKeyword(n,`WALK`)||this.hasKeyword(n,`WALKING`))&&(t.push(`domain.cardio`),t.push(`workout.walk`)),t.length===0&&this.hasDistance(n)&&(t.push(`domain.cardio`),t.push(`behavior.distance_based`)),t.includes(`domain.cardio`)&&this.hasDistance(n)&&(t.push(`behavior.distance_based`),t.push(`behavior.pace_based`)),{metrics:ju(t)}}},bd=class e{id=`yoga`;name=`Yoga Dialect`;static POSE_KEYWORDS=[`WARRIOR`,`DOWNWARD`,`UPWARD`,`CHILD'S POSE`,`COBRA`,`PIGEON`,`TRIANGLE`,`MOUNTAIN`,`TREE POSE`,`LOTUS`,`CORPSE`,`SAVASANA`,`TADASANA`,`VIRABHADRASANA`,`BALASANA`,`ADHO`,`URDHVA`,`UTTANASANA`,`VRKSASANA`];static FLOW_KEYWORDS=[`SUN SALUTATION`,`VINYASA`,`FLOW`,`SEQUENCE`];static BREATHING_KEYWORDS=[`PRANAYAMA`,`BREATH`,`BREATHING`,`NADI SHODHANA`,`KAPALABHATI`,`UJJAYI`,`BOX BREATH`,`WIM HOF`];static MEDITATION_KEYWORDS=[`MEDITATION`,`MEDITATE`,`MINDFULNESS`,`BODY SCAN`,`VISUALIZATION`];hasAnyKeyword(e,t){return e.some(e=>(e.type===T.Action||e.type===T.Effort||e.type===T.Text)&&typeof e.value==`string`&&t.some(t=>e.value.toString().toUpperCase().includes(t)))}analyze(t){let n=[],r=E.from(t.metrics),i=r.some(e=>e.type===T.Duration);return this.hasAnyKeyword(r,e.POSE_KEYWORDS)&&(n.push(`domain.yoga`),n.push(`workout.pose`),i&&n.push(`behavior.hold`)),this.hasAnyKeyword(r,e.FLOW_KEYWORDS)&&(n.push(`domain.yoga`),n.push(`workout.flow`)),this.hasAnyKeyword(r,e.BREATHING_KEYWORDS)&&(n.push(`domain.yoga`),n.push(`workout.breathing`),n.push(`behavior.mindful`)),this.hasAnyKeyword(r,e.MEDITATION_KEYWORDS)&&(n.push(`domain.yoga`),n.push(`workout.meditation`),n.push(`behavior.mindful`)),{metrics:ju(n)}}},xd=class e{id=`habits`;name=`Habits Dialect`;static HABIT_KEYWORDS=[`DAILY`,`HABIT`,`STREAK`,`CHECK`,`LOG`,`MORNING`,`EVENING`,`ROUTINE`];static STREAK_KEYWORDS=[`STREAK`,`CONSECUTIVE`,`IN A ROW`];hasAnyKeyword(e,t){return e.some(e=>(e.type===T.Action||e.type===T.Effort||e.type===T.Text||e.type===T.Label)&&typeof e.value==`string`&&t.some(t=>e.value.toString().toUpperCase().includes(t)))}analyze(t){let n=[],r=E.from(t.metrics),i=r.some(e=>e.type===T.Duration),a=r.some(e=>e.type===T.Rep);return this.hasAnyKeyword(r,e.HABIT_KEYWORDS)&&(n.push(`domain.habits`),n.push(`behavior.completable`),i?n.push(`workout.habit_timed`):a?n.push(`workout.habit_rep`):(n.push(`workout.habit_check`),n.push(`behavior.daily`))),this.hasAnyKeyword(r,e.STREAK_KEYWORDS)&&(n.includes(`domain.habits`)||n.push(`domain.habits`),n.push(`behavior.streak`),n.push(`behavior.recurring`)),{metrics:ju(n)}}};let Sd={Discipline:`climb-discipline`,Grade:`climb-grade`,SendType:`climb-send-type`,AttemptCount:`climb-attempt-count`,RouteName:`climb-route-name`,HighPoint:`climb-high-point`},Cd={onsight:`onsight`,os:`onsight`,flash:`flash`,fl:`flash`,redpoint:`redpoint`,rp:`redpoint`,sent:`redpoint`,send:`redpoint`,repeat:`repeat`,"re-send":`repeat`,resend:`repeat`,dogged:`dogged`,hangdog:`dogged`,a0:`dogged`,tr:`top-rope`,toprope:`top-rope`,"top-rope":`top-rope`,dnf:`did-not-finish`,attempted:`did-not-finish`},wd={boulder:`bouldering`,bouldering:`bouldering`,sport:`sport`,trad:`trad`,"top rope":`top-rope`,toprope:`top-rope`,hangboard:`hangboard`,moonboard:`training-board`,kilter:`training-board`,board:`training-board`};function Td(e){return e?typeof e.value==`string`?e.value:e.value&&typeof e.value==`object`&&`text`in e.value?String(e.value.text??``):typeof e.value==`number`?String(e.value):``:``}function Ed(e){return e.toLowerCase().replace(/[_\s]+/g,`-`).trim()}function Dd(e,t,n,r){e.add({type:t,value:n,origin:`dialect`,unit:r})}function Od(e,t){e.includes(t)||e.push(t)}var kd=class{id=`climb`;name=`Climb Dialect`;analyze(e){let t=[],n=E.empty(`climb-dialect`),r=E.from(e.metrics).toArray(),i=r.map(Td).filter(Boolean).join(` `),a=this.findRouteName(r);a&&Dd(n,Sd.RouteName,a);let o=this.findGrade(r);o&&Dd(n,Sd.Grade,o);let s=this.findSendType(i);s&&Dd(n,Sd.SendType,s);let c=this.findAttemptCount(r);c!==void 0&&Dd(n,Sd.AttemptCount,c);let l=this.findHighPoint(i);l&&Dd(n,Sd.HighPoint,l);let u=this.findDisciplines(i,o);for(let e of u)Dd(n,Sd.Discipline,e);(a||o||s||l||u.length>0)&&(t.push(`domain.climb`),t.push(`behavior.route_based`)),o&&t.push(`behavior.grade_based`),c!==void 0&&t.push(`behavior.attempt_based`),s===`did-not-finish`&&t.push(`climb.project`);for(let e of u)t.push(`climb.${e.replace(`-`,`_`)}`);return{metrics:ju(t,n)}}findRouteName(e){let t=e.find(e=>e.type===T.Action&&typeof e.value==`string`);return t?.value?String(t.value):void 0}findGrade(e){for(let t=0;t<e.length;t+=1){let n=e[t],r=Td(n),i=Td(e[t+1]),a=r.match(/\bV(\d{1,2})(?:[-+])?\b/i);if(a){let e=Number(a[1]);return{raw:a[0].toUpperCase(),system:`v-scale`,normalizedRank:e}}if(typeof n.value==`number`&&n.value>=5&&n.value<6){let e=i.match(/^\s*([abcd])\b/i)?.[1],t=e?`${n.value}${e}`:String(n.value);if(/^5\.\d{1,2}[abcd]?$/i.test(t))return{raw:t,system:`yds`,normalizedRank:this.ydsRank(t)}}let o=r.match(/\b5\.(\d{1,2})([abcd])?\b/i);if(o)return{raw:o[0],system:`yds`,normalizedRank:this.ydsRank(o[0])};let s=r.match(/\b([3-9][ABC](?:\+)?)\b/);if(s)return{raw:s[1],system:`font`};if(typeof n.value==`number`&&n.value>=3&&n.value<=9){let e=i.match(/^\s*([ABC]\+?)\b/)?.[1];if(e)return{raw:`${n.value}${e}`,system:`font`}}let c=r.match(/\b([3-9][abc](?:\+)?)\b/);if(c)return{raw:c[1],system:`french`}}}ydsRank(e){let t=e.match(/^5\.(\d{1,2})([abcd])?$/i);if(!t)return;let n=Number(t[1]),r=t[2]?.toLowerCase();return n+(r?[`a`,`b`,`c`,`d`].indexOf(r)/4:0)}findSendType(e){let t=e.toLowerCase().match(/[a-z0-9-]+/g)??[];for(let e of t){let t=Ed(e);if(t in Cd)return Cd[t]}if(/\bnot\s+sent\b/i.test(e))return`did-not-finish`;if(/\bwith\s+falls\b/i.test(e))return`dogged`}findAttemptCount(e){return e.find(e=>{if(e.type!==T.Resistance)return!1;let t=e.value;return t&&typeof t.amount==`number`&&String(t.unit??e.unit??``)===``})?.value?.amount}findHighPoint(e){let t=e.match(/\b(?:bolt|move|crux|high\s*point)\s*\d+\b/i)?.[0];return t?t.toLowerCase().replace(/\s+/g,` `):void 0}findDisciplines(e,t){let n=[],r=e.toLowerCase();for(let[e,t]of Object.entries(wd))r.includes(e)&&Od(n,t);return(t?.system===`v-scale`||t?.system===`font`)&&Od(n,`bouldering`),(t?.system===`yds`||t?.system===`french`)&&Od(n,`sport`),n}};function Ad(e){console.warn(e)}let jd={climbing:`climb`},Md=new Set;new class{dialects;registry;constructor(e){e instanceof Du?this.registry=e:this.dialects=e}get effectiveDialects(){return this.registry?this.registry.list():this.dialects??[]}dialectsFor(e){let t=this.effectiveDialects;if(!e)return t;let n=jd[e]??e;return t.some(e=>e.id===n)?t.filter(e=>e.id===`units`||e.id===n):(Md.has(e)||(Md.add(e),Ad(`[DialectStack] Unknown :sport suffix "${e}" — falling back to the full dialect stack. Known dialect ids: ${t.map(e=>e.id).join(`, `)}.`)),t)}process(e,t){this.applyDialects(e,this.dialectsFor(t))}processAll(e,t){let n=this.dialectsFor(t);for(let t of e)this.applyDialects(t,n)}applyDialects(e,t){for(let n of t){n.transform?.(e);let t=n.analyze(e);t?.metrics?.length&&e.metrics.add(...t.metrics)}}get list(){return this.effectiveDialects}}(new Du([new gd,new _d,new vd,new yd,new bd,new xd,new kd])),T.SessionRPE,T.RIR,T.Intensity,T.Load,T.Volume,T.Work,T.Sound,Lu.standard();let Nd=fn.deserialize({version:14,states:`(dQVQPOOO!mQPO'#DPO$TQPO'#CdOOQO'#Cd'#CdOOQO'#Cg'#CgOOQO'#Ch'#ChOOQO'#Cf'#CfO%hQPO'#CfO%pQPO'#CjOOQO'#Cl'#ClOOQO'#DP'#DPOOQO'#Cu'#CuO%xQPO'#CmOOQO'#Cn'#CnOOQO'#Co'#CoOOQO'#Cq'#CqOOQO'#Cr'#CrOOQO'#Cp'#CpO%}QPO'#CpOOQO'#Cs'#CsOOQO'#Ct'#CtO&tQPO'#CvOOQO'#Ce'#CeOOQO'#C|'#C|O(]QPO'#CcO&{QPO'#CcOOQO'#Cz'#CzQVQPOOO(dQPO,58xOOQO,59Q,59QO(rQPO'#CkOOQO'#C}'#C}O)QQPO,59UOOQO-E6}-E6}O)]QPO,59XOOQO,59[,59[OOQO'#DQ'#DQO)hQPO,59bOOQO,59b,59bOOQO-E6z-E6zOOQO,58},58}O)oQPO,58}OOQO-E6x-E6xOOQO'#C{'#C{OOQO1G.d1G.dO)vQPO'#DOO){QPO,59VOOQO-E6{-E6{OOQO1G.p1G.pO*ZQPO1G.sOOQO-E7O-E7OOOQO1G.|1G.|OOQO1G.i1G.iPOQO-E6y-E6yOOQO,59j,59jOOQO-E6|-E6|OOQO7+$_7+$_`,stateData:"+V~OwOS~ORPOTaOUfO]UOyQOzRO{SO|VO}TO!OWO!QXO!RXO!S[O!TYO!V]O!W^O!X_O!Y`O!ZcO![dO!]eO!`jO~OxlORsXTsXUsX]sXysX{sX|sX}sX!OsX!QsX!RsX!SsX!TsX!VsX!WsX!XsX!YsX!ZsX![sX!]sX!`sX~ORWXTWXUWX]WXyWX{WX|WX}WX!OWX!QWX!RWX!SWX!TWX!VWX!WWX!XWX!YWX!ZWX![WX!]WX!`sX~O]mO}TO~ORoOTnO~OxrO~OTsO!Y`O~ORtOStOTtOktOltOmtOxtO!TtO!^tO~O!_vO~P&VORYOTaOUfO]UOyYO{SO|VO}TO!OWO!QXO!RXO!S[O!TYO!V]O!W^O!X_O!Y`O!ZcO![dO!]eO~O!`xO~P&{OR|OS|OT|OU{O~Oy}OR_XT_X!P_X~ORoOTnO!P!QO~ORYOyYO!TYO~O!_!TO~P&VO!`!UO~P&{OT!WO~Oy}OR_aT_a!P_a~ORYOyYO!TYO!U!YO~O!VU!W!Q!R}]!X{|x!Z![!T!]!_!^klmRyzT!`w!T~",goto:`$ZuPPvPPPPvz!O!V!^!eP!V!o!V!V!V!V!V!s!z!V!V!V!VPPP#U#[#_#j#p#v$TTjOkTiOkZgOhikyZfOhikyZVOhikyYUOhikyRmVToWpZbOhikyYaOhikyRsbQkORzkR|lShOkSwhyRyiQpWR!PpQ!OnR!X!OYZOhikyQq!RR!RrQueR!Su`,nodeNames:`⚠ Program Property Identifier String Number TagRef Block Lap Fragment Duration Trend CollectibleTimer Timer Rounds Sequence RoundScheme Action Text Heading Quantity AtSign Question Slash Pipe Effort MetricObject True False Null`,maxTerm:62,skippedNodes:[0],repeatNodeCount:7,tokenData:"7o~RvXY#iYZ#z]^$Ppq#iqr$Vrs$}st'dtu$Vuv$Vvw$Vxy)Pyz)Uz{)Z{|*T|}*Y}!O+S!O!P+X!P!Q,[!Q![-R![!]/U!_!`$V!a!b/n!b!c/s!c!}0m!}#O0{#O#P$V#P#Q1Q#Q#R1V#T#Y0m#Y#Z2P#Z#b0m#b#c4Q#c#h0m#h#i5p#i#o0m#o#p7`#p#q7e#q#r7j~#nSw~XY#iYZ#z]^$Ppq#i~$PO!`~~$SPYZ#z~$[Z!T~qr$Vtu$Vuv$Vvw$Vz{$V|}$V!O!P$V!_!`$V!b!c$V#O#P$V#Q#R$V~%QXOY$}Z]$}^r$}rs%ms#O$}#O#P&_#P;'S$};'S;=`'^<%lO$}~%rXS~OY$}Z]$}^r$}rs%ms#O$}#O#P&_#P;'S$};'S;=`'^<%lO$}~&bRO;'S$};'S;=`&k;=`O$}~&nYOY$}Z]$}^r$}rs%ms#O$}#O#P&_#P;'S$};'S;=`'^;=`<%l$}<%lO$}~'aP;=`<%l$}~'gXO!Q(S!QUO!O~~)ZO!P~~)bZ|~!T~qr$Vtu$Vuv$Vvw$Vz{$V|}$V!O!P$V!_!`$V!b!c$V#O#P$V#Q#R$V~*YOz~~*aZ!T~!^~qr$Vtu$Vuv$Vvw$Vz{$V|}$V!O!P$V!_!`$V!b!c$V#O#P$V#Q#R$V~+XOy~~+^[!T~qr$Vtu$Vuv$Vvw$Vz{$V|}$V!O!P$V!Q![,S!_!`$V!b!c$V#O#P$V#Q#R$V~,XPT~!Q![,S~,aP!Z~!P!Q,d~,iU!V~OY,dZ],d^s,dt;'S,d;'S;=`,{<%lO,d~-OP;=`<%l,d~-WUT~pq-j!O!P._!Q![-R![!].e!z!{.v#l#m.v~-mRpq-j!z!{-v#l#m-v~-yPpq-|~.PQpq-|!Q![.V~.[P!R~!Q![.V~.bP!Q![,S~.hP!Q![.k~.pQ]~!Q![.k![!].e~.yP!Q![.|~/RP!Q~!Q![.|~/ZQx~!Q![/a!a!b/i~/fP]~!Q![/a~/nO}~~/sO!Y~~/zZ!X~!T~qr$Vtu$Vuv$Vvw$Vz{$V|}$V!O!P$V!_!`$V!b!c$V#O#P$V#Q#R$V~0rRR~!Q![0m!c!}0m#T#o0m~1QO!S~~1VO!U~~1^Z{~!T~qr$Vtu$Vuv$Vvw$Vz{$V|}$V!O!P$V!_!`$V!b!c$V#O#P$V#Q#R$V~2USR~!Q![0m!c!}0m#T#U2b#U#o0m~2gTR~!Q![0m!c!}0m#T#`0m#`#a2v#a#o0m~2{TR~!Q![0m!c!}0m#T#g0m#g#h3[#h#o0m~3aTR~!Q![0m!c!}0m#T#X0m#X#Y3p#Y#o0m~3wRl~R~!Q![0m!c!}0m#T#o0m~4VTR~!Q![0m!c!}0m#T#i0m#i#j4f#j#o0m~4kTR~!Q![0m!c!}0m#T#`0m#`#a4z#a#o0m~5PTR~!Q![0m!c!}0m#T#`0m#`#a5`#a#o0m~5gRm~R~!Q![0m!c!}0m#T#o0m~5uTR~!Q![0m!c!}0m#T#f0m#f#g6U#g#o0m~6ZTR~!Q![0m!c!}0m#T#i0m#i#j6j#j#o0m~6oTR~!Q![0m!c!}0m#T#X0m#X#Y7O#Y#o0m~7VRk~R~!Q![0m!c!}0m#T#o0m~7eO!]~~7jO![~~7oO!_~",tokenizers:[0],topRules:{Program:[0,1]},tokenPrec:439}),Pd={defaultMet:5,defaultThreshold:2};Pl.define({parser:Nd.configure({props:[dl({Identifier:X.variableName,String:X.string,Number:X.number,"schemeNumber schemeSpaced":X.number,Timer:X.keyword,collectibleTimer:X.keyword,textComment:X.lineComment,heading:X.heading,minus:X.operator,plus:X.operator,trend:X.operator,atSign:X.operator,"Slash/slash":X.operator,question:X.keyword,actionOpen:X.bracket,actionClose:X.bracket,groupOpen:X.bracket,groupClose:X.bracket,colon:X.punctuation,Property:X.propertyName,"Block/Lap":X.keyword})]}),languageData:{commentTokens:{line:`//`},closeBrackets:{brackets:[`(`,`[`,`'`,`"`]}}});let Fd=[`bodyweight`,`cycling`,`gymnastics`,`kettlebell`,`recovery`,`rowing`,`running`,`strength`,`swimming`,`walking`];function Id(e){return typeof e==`string`&&Fd.includes(e.toLowerCase())}let Q=[];for(let e=0;e<256;++e)Q.push((e+256).toString(16).slice(1));function Ld(e,t=0){return(Q[e[t+0]]+Q[e[t+1]]+Q[e[t+2]]+Q[e[t+3]]+`-`+Q[e[t+4]]+Q[e[t+5]]+`-`+Q[e[t+6]]+Q[e[t+7]]+`-`+Q[e[t+8]]+Q[e[t+9]]+`-`+Q[e[t+10]]+Q[e[t+11]]+Q[e[t+12]]+Q[e[t+13]]+Q[e[t+14]]+Q[e[t+15]]).toLowerCase()}let Rd,zd=new Uint8Array(16);function Bd(){if(!Rd){if(typeof crypto>`u`||!crypto.getRandomValues)throw Error(`crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported`);Rd=crypto.getRandomValues.bind(crypto)}return Rd(zd)}let Vd={};function Hd(e,t,n){let r;if(e)r=Wd(e.random??e.rng?.()??Bd(),e.msecs,e.seq,t,n);else{let e=Date.now(),i=Bd();Ud(Vd,e,i),r=Wd(i,Vd.msecs,Vd.seq,t,n)}return t??Ld(r)}function Ud(e,t,n){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=n[6]<<23|n[7]<<16|n[8]<<8|n[9],e.msecs=t):(e.seq=e.seq+1|0,e.seq===0&&e.msecs++),e}function Wd(e,t,n,r,i=0){if(e.length<16)throw Error(`Random bytes length must be >= 16`);if(!r)r=new Uint8Array(16),i=0;else if(i<0||i+16>r.length)throw RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);return t??=Date.now(),n??=e[6]*127<<24|e[7]<<16|e[8]<<8|e[9],r[i++]=t/1099511627776&255,r[i++]=t/4294967296&255,r[i++]=t/16777216&255,r[i++]=t/65536&255,r[i++]=t/256&255,r[i++]=t&255,r[i++]=112|n>>>28&15,r[i++]=n>>>20&255,r[i++]=128|n>>>14&63,r[i++]=n>>>6&255,r[i++]=n<<2&255|e[10]&3,r[i++]=e[11],r[i++]=e[12],r[i++]=e[13],r[i++]=e[14],r[i++]=e[15],r}let Gd=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/,Kd=/^[a-z0-9]+(?:-[a-z0-9]+)*$/;function qd(e){return e.replace(/^(['"])(.*)\1$/,(e,t,n)=>t===`"`?n.replace(/\\(["\\nrt])/g,(e,t)=>t===`n`?`
|
|
15
|
-
`:t===`r`?`\r`:t===`t`?` `:t):n)}function Jd(e){let t=e.match(Gd);if(!t)return{meta:{},body:e};let n=t[1].split(/\r?\n/),r={};for(let e=0;e<n.length;e++){let t=n[e].match(/^([A-Za-z][\w.-]*)\s*:(.*)$/);if(!t)continue;let i=t[1],a=t[2].trim();if(a===``){let t=[];for(;e+1<n.length;){let r=n[e+1].match(/^\s+-\s+(.+)$/);if(!r)break;t.push(qd(r[1].trim())),e++}r[i]=t.length>0?t:``}else{let e=/^(['"])(.*)\1$/.test(a),t=qd(a),n=Number(t);r[i]=!e&&t!==``&&!isNaN(n)?n:t}}return{meta:r,body:e.slice(t[0].length)}}function Yd(e,t){let n=e[t];return typeof n==`string`||typeof n==`number`?n:void 0}function Xd(e,t){let n=e[t];return n===void 0||typeof n==`string`&&n===`[]`?[]:Array.isArray(n)?n:void 0}function Zd(e){return e===`true`?!0:e===`false`?!1:e!==``&&!Number.isNaN(Number(e))?Number(e):qd(e)}function Qd(e,t){let n=e.findIndex(e=>RegExp(`^${t}:\\s*$`).test(e));if(n===-1)return;let r={},i=null;for(let t=n+1;t<e.length;t++){let n=e[t];if(/^\S/.test(n))break;let a=n.trim();if(!a||a.startsWith(`#`))continue;let o=n.length-n.trimStart().length,s=a.match(/^([\w.-]+):\s*(.*)$/);if(!s)continue;let[,c,l]=s;o===2?l===``?(i=c,r[c]={}):(i=null,r[c]=Zd(l)):o>=4&&i!==null&&(r[i][c]=Zd(l))}return Object.keys(r).length>0?r:void 0}function $d(e){if(!e)return;let t=qd(e.trim()).toLowerCase();if(Id(t))return t;console.warn(`[definition-markdown] unknown discipline '${e}' — expected one of the canonical values; treating as unset`)}function ef(e,t){let n=[],r=e===void 0?``:String(e);return r?Kd.test(r)||n.push(`Invalid slug: must be lowercase letters, numbers, and hyphens only`):n.push(`Missing required field: slug`),(t===void 0||!String(t).trim())&&n.push(`Missing required field: label`),n}function tf(e,t){let n=[];for(let r of e)r.trim()?t===`equipment`&&!Kd.test(r)&&n.push(`Invalid ${t}: '${r}' must be a canonical slug (lowercase letters, numbers, hyphens)`):n.push(`Invalid ${t}: blank entries are not allowed`);let r=e.find((t,n)=>e.indexOf(t)!==n);return r!==void 0&&n.push(`Invalid ${t}: duplicate entry '${r}'`),n}function nf(e){return e===void 0?`Missing required field: baseAttributes.met`:typeof e!=`number`||!Number.isFinite(e)||e<=0?`Invalid baseAttributes.met: must be a positive number`:null}function rf(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return null;let n=t[1].split(/\r?\n/),{meta:r,body:i}=Jd(e),a=Yd(r,`type`);if(a!==void 0&&a!==`effort`)return null;let o=Yd(r,`id`),s=Yd(r,`slug`),c=Yd(r,`label`),l=Xd(r,`aliases`),u=Xd(r,`equipment`);if(l===void 0||u===void 0||ef(s,c).length>0||tf(l,`aliases`).length>0||u.length>0&&tf(u,`equipment`).length>0)return null;let d=Qd(n,`baseAttributes`)??{};if(nf(d.met)!==null)return null;let f=d.met,p=$d(typeof d.discipline==`string`?d.discipline:void 0),m=d.intensityTier,h=typeof d.disciplineFactor==`number`&&Number.isFinite(d.disciplineFactor)?d.disciplineFactor:void 0,g=Qd(n,`hints`),_=Qd(n,`derivation`),v=i.trim();return{id:String(o??``),slug:String(s),label:String(c),aliases:l,baseAttributes:{met:f,...p?{discipline:p}:{},...h===void 0?{}:{disciplineFactor:h},...m?{intensityTier:m}:{}},registrySource:`bundled`,...u.length>0?{equipment:u}:{},...v?{body:v}:{},...g?{hints:g}:{},..._?{derivation:_}:{}}}function af(e){let{meta:t,body:n}=Jd(e);if(Yd(t,`type`)!==`equipment`)return null;let r=Yd(t,`id`),i=Yd(t,`slug`),a=Yd(t,`label`),o=Xd(t,`aliases`);if(r===void 0||o===void 0||ef(i,a).length>0||tf(o,`aliases`).length>0)return null;let s=n.trim();return{id:String(r),slug:String(i),label:String(a),aliases:o,registrySource:`bundled`,...s?{body:s}:{}}}let of=[{id:`fixture-running`,slug:`running-6-mph`,label:`Running (6 mph)`,aliases:[`run`,`jogging`,`treadmill`],baseAttributes:{met:9.8,discipline:`running`,intensityTier:`moderate`},registrySource:`bundled`},{id:`fixture-rowing`,slug:`rowing`,label:`Rowing`,aliases:[`row`,`rower`,`erg`],baseAttributes:{met:7,discipline:`rowing`,intensityTier:`high`},registrySource:`bundled`},{id:`fixture-back-squat`,slug:`back-squat`,label:`Back Squat`,aliases:[`squat`,`barbell squat`,`bs`],baseAttributes:{met:6,discipline:`strength`,intensityTier:`moderate`},registrySource:`bundled`},{id:`fixture-burpee`,slug:`burpee`,label:`Burpee`,aliases:[`burpees`],baseAttributes:{met:10,discipline:`bodyweight`,intensityTier:`high`},registrySource:`bundled`},{id:`fixture-plank`,slug:`plank`,label:`Plank`,aliases:[`planks`],baseAttributes:{met:3.5,discipline:`bodyweight`,intensityTier:`low`},registrySource:`bundled`}];[...of],of.length;var sf=class e{started;ended;constructor(e,t){this.started=e,this.ended=t}static fromJSON(t){return new e(t.started,t.ended)}static fromDates(t,n){return new e(t.getTime(),n?.getTime())}get duration(){let e=this.ended??Date.now();return Math.max(0,e-this.started)}get isOpen(){return this.ended===void 0}get startDate(){return new Date(this.started)}get endDate(){return this.ended?new Date(this.ended):void 0}},cf=class e{_underlying;_frozenTime;constructor(e,t){this._underlying=e,this._frozenTime=t}get currentDate(){return this._frozenTime}now(){return this._frozenTime}nowMs(){return this._frozenTime.getTime()}get elapsed(){return this._underlying.elapsed}get isRunning(){return this._underlying.isRunning}get spans(){return this._underlying.spans}start(){return this._underlying.start()}stop(){return this._underlying.stop()}static at(t,n){return new e(t,n)}static now(t){return new e(t,t.currentDate)}};let lf={now:()=>new Date,nowMs:()=>Date.now()};var uf=class{options;now;type=`next`;constructor(e,t=lf){this.options=e,this.now=t}do(e){if(!this.validateRuntimeState(e))return[];let t=e.stack.current;if(!t)return[];try{let n={...e.clock?{clock:cf.now(e.clock)}:void 0,...this.options};return t.next(e,n)}catch(n){return e.errors&&Array.isArray(e.errors)&&e.errors.push({error:n,source:`NextAction`,timestamp:this.now.now(),blockKey:t.key.toString()}),[]}}validateRuntimeState(e){return!!e.stack}};let df=e=>String(e).padStart(2,`0`),ff=e=>String(e).padStart(3,`0`);function pf(e){return`${df(e.getHours())}:${df(e.getMinutes())}:${df(e.getSeconds())}.${ff(e.getMilliseconds())}`}function mf(e){return(e+` `).slice(0,5)}function hf(e){return(e+` `.repeat(24)).slice(0,24)}function gf(e){if(!e)return`─`.repeat(52);let t=` ${e} `,n=Math.max(0,Math.floor((52-t.length)/2)),r=Math.max(0,52-t.length-n);return`${`─`.repeat(n)}${t}${`─`.repeat(r)}`}var _f=class{_console=console;_enabled=!1;_history=[];_maxHistory=500;EVENT_STYLES={BOOT:`color: #3b82f6; font-weight: bold`,PUSH:`color: #a855f7; font-weight: bold`,POP:`color: #64748b`,NEXT:`color: #b45309; font-weight: bold`,EVNT:`color: #a855f7; font-weight: bold`,OUT:`color: #16a34a; font-weight: bold`,MEM:`color: #f59e0b`,TIME:`color: #3b82f6; font-weight: bold`,HALT:`color: #ef4444; font-weight: bold`,WARN:`color: #f59e0b; font-weight: bold`,ERR:`color: #ef4444; font-weight: bold`};constructor(){if(typeof window<`u`){let e=window;this._enabled=!!e.__WOD_DEBUG__}}get enabled(){return this._enabled}enable(){this._enabled=!0,this.writeLine(`BOOT`,`runtime:ready`,`logging enabled`)}disable(){this.writeLine(`HALT`,`runtime:logger`,`logging disabled`),this._enabled=!1}getHistory(){return[...this._history]}clearHistory(){this._history=[]}logBoot(e){this._enabled&&this.writeLine(`BOOT`,`runtime:ready`,e)}logPush(e,t,n){if(!this._enabled)return;let r=this.getBehaviorNames(e),i=[`d${n??`?`} ${e.blockType??`block`}`,r.length>0?`behaviors [${r.join(`, `)}]`:void 0,t?`parent ${t.slice(0,8)}`:void 0].filter(Boolean).join(` · `);this.writeLine(`PUSH`,e.label||e.blockType||`Block`,i),this.addToHistory(`info`,`push`,`PUSH ${e.label}`,{key:e.key.toString(),parentKey:t,behaviors:r,sourceIds:e.sourceIds})}logPop(e,t,n){this._enabled&&(this.writeLine(`POP`,e.label||e.blockType||`Block`,`d${n??`?`}${t?` `+t:``}`),this.addToHistory(`info`,`pop`,`POP ${e.label}`,{key:e.key.toString(),reason:t}))}logNext(e,t){if(!this._enabled||t.length===0)return;let n=t.map(e=>e.type||e.constructor?.name||`Action`);this.writeLine(`NEXT`,e.label||`Block`,`${n.length} action(s): [${n.join(`, `)}]`),this.addToHistory(`info`,`next`,`NEXT ${e.label}`,{key:e.key.toString(),actions:n})}logEvent(e,t){if(!this._enabled||t.length===0)return;let n=t.map(e=>e.type||e.constructor?.name||`Action`);this.writeLine(`EVNT`,e.name,`${n.length} action(s): [${n.join(`, `)}]`),this.addToHistory(`info`,`event`,`EVENT ${e.name}`,{eventName:e.name,eventData:e.data,actions:n})}logOutput(e){if(!this._enabled||e.outputType!==`segment`&&e.outputType!==`milestone`)return;let t=e.text||this.outputSubject(e.metrics);t&&(this.writeLine(`OUT`,t,e.outputType),this.addToHistory(`info`,`output`,`OUT ${t}`,{outputType:e.outputType,label:t}))}outputSubject(e){if(e){for(let t of e)if(t.type===`label`)return t.image||(t.value==null?``:String(t.value))||void 0}}logMemoryUpdate(e,t,n){if(!this._enabled)return;let r=typeof n==`object`&&n?this.summarizeObject(n):n;this.writeLine(`MEM`,t,`[${e.slice(0,8)}] ${vf(r)}`),this.addToHistory(`debug`,`memory`,`MEMORY ${t}`,{blockKey:e,memoryType:t,value:r})}logAction(e,t){if(!this._enabled)return;let n=e.type||e.constructor?.name||`Action`;this.writeLine(`EVNT`,n,`d${t}`)}logMessage(e,t,n,r){this._enabled&&(this.writeLine(e===`error`?`ERR`:e===`warn`?`WARN`:`EVNT`,t,n),this.addToHistory(e,t,n,r))}logAlways(e,t,n,r){this.writeLine(e===`error`?`ERR`:e===`warn`?`WARN`:`EVNT`,t,n),this.addToHistory(e,t,n,r)}logRule(e){this._enabled&&this._console.log(`%c${gf(e)}`,`color: #94a3b8`)}writeLine(e,t,n){let r=pf(new Date);this._console.log(`${r} %c${mf(e)}%c ${hf(t)}${n?` `+n:``}`,this.EVENT_STYLES[e],`color: inherit`)}getBehaviorNames(e){let t=e.behaviors;return!t||!Array.isArray(t)?[]:t.map(e=>e.constructor?.name||`Behavior`)}summarizeObject(e){let t={};for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?`[${r.length} items]`:typeof r==`object`&&r?`{...}`:r;return t}addToHistory(e,t,n,r){this._history.push({timestamp:new Date,level:e,category:t,message:n,data:r}),this._history.length>this._maxHistory&&(this._history=this._history.slice(-this._maxHistory))}};function vf(e){try{return JSON.stringify(e)??``}catch{return String(e)}}let yf=new _f;typeof window<`u`&&(window.RuntimeLogger=yf);var bf=class{options;type=`pop-block`;constructor(e={}){this.options=e}do(e){let t=e.stack.current;if(!t)return[];let n=this.options.createdAt??e.clock.currentDate,r={...this.options,createdAt:n};t.executionTiming&&(t.executionTiming.createdAt=n),!t.isComplete&&typeof t.markComplete==`function`&&(t.markComplete(`forced-pop`),yf.logPop(t,`forced-pop (incomplete block popped without next)`,e.stack.blocks.length));let i=t.unmount(e,r)??[],a=e.stack.pop();return a?(a.dispose(e),a.context?.release?.(),a.completionReason!==`forced-pop`&&yf.logPop(a,a.completionReason,e.stack.blocks.length+1),e.stack.current?[...i,new uf(r,e.nowProvider)]:i):[]}},xf=class{_memory;ownerId;type;visibility;_logger;id=Hd();_subscriptions=[];constructor(e,t,n,r=`private`,i){this._memory=e,this.ownerId=t,this.type=n,this.visibility=r,this._logger=i}value(){return this.get()}get subscriptions(){return this._subscriptions}get(){return this._memory.get(this)}set(e){this._memory.set(this,e)}subscribe(e,t){let n=Hd(),r={id:n,callback:e,memoryId:this.id,createdAt:new Date};return this._subscriptions.push(r),t?.immediate&&e(this.get(),void 0),()=>this.unsubscribe(n)}unsubscribe(e){let t=this._subscriptions.findIndex(t=>t.id===e);t>=0&&this._subscriptions.splice(t,1)}hasSubscribers(){return this._subscriptions.length>0}notifySubscribers(e,t){for(let n of this._subscriptions)try{n.callback(e,t)}catch(e){this._logger?.error?.(`Error in memory subscription callback:`,e)}}},Sf=class{_references=[];allocate(e,t,n,r=`private`){let i=new xf(this,t,e,r);return this._references.push({ref:i,data:n}),i}get(e){return this._references.find(t=>t.ref.id===e.id)?.data??void 0}set(e,t){let n=this._references.find(t=>t.ref.id===e.id);if(!n)throw Error(`Invalid memory reference: ${e.id}`);let r=n.data;n.data=t,e.hasSubscribers()&&e.notifySubscribers(t,r)}search(e){return this._references.map(e=>e.ref).filter(t=>!(e.id!==null&&e.id!==void 0&&e.id!==t.id||e.ownerId!==null&&e.ownerId!==void 0&&e.ownerId!==t.ownerId||e.type!==null&&e.type!==void 0&&e.type!==t.type||e.visibility!==null&&e.visibility!==void 0&&e.visibility!==t.visibility))}release(e){let t=this._references.findIndex(t=>t.ref.id===e.id);if(t>=0){let e=this._references[t],n=e.data,r=e.ref;r instanceof xf&&r.hasSubscribers()&&r.notifySubscribers(void 0,n),this._references.splice(t,1)}}};let Cf=function(e){return e.DISPLAY_STACK_STATE=`displaystack`,e.ACTION_STACK_STATE=`actions`,e.TIMER_PREFIX=`timer:`,e.HANDLER_PREFIX=`handler:`,e.METRIC_REPS=`metric:reps`,e.ANCHOR=`anchor`,e}({});var wf=class{timestamp;constructor(e=lf){this.timestamp=e.now()}},Tf=class extends wf{name=`memory:allocate`;data;constructor(e,t,n=lf){super(n),this.data={ref:e,value:t}}},Ef=class extends wf{name=`memory:set`;data;constructor(e,t,n,r=lf){super(r),this.data={ref:e,value:t,oldValue:n}}},Df=class extends wf{name=`memory:release`;data;constructor(e,t,n=lf){super(n),this.data={ref:e,lastValue:t}}},Of=class{runtime;ownerId;exerciseId;_references=[];_released=!1;_memory;constructor(e,t,n=``,r=[],i){this.runtime=e,this.ownerId=t,this.exerciseId=n,this._references=[...r],this._memory=i??new Sf}get references(){return[...this._references]}allocate(e,t,n=`private`){if(this._released)throw Error(`Cannot allocate on released context (ownerId: ${this.ownerId})`);let r=e,i=this._memory.allocate(r,this.ownerId,t,n);return this._references.push(i),this.runtime.eventBus.dispatch(new Tf(i,t,this.runtime.nowProvider),this.runtime),i}get(e){let t=e;return this._references.find(e=>e.type===t)}getAll(e){let t=e;return this._references.filter(e=>e.type===t)}set(e,t){if(this._released)throw Error(`Cannot set on released context (ownerId: ${this.ownerId})`);let n=e.get();this._memory.set(e,t),this.runtime.eventBus.dispatch(new Ef(e,t,n,this.runtime.nowProvider),this.runtime)}release(){if(!this._released){for(let e of this._references){let t=e.value();this._memory.release(e),this.runtime.eventBus.dispatch(new Df(e,t,this.runtime.nowProvider),this.runtime)}this._references=[],this._released=!0}}isReleased(){return this._released}getOrCreateAnchor(e){if(this._released)throw Error(`Cannot access anchor on released context (ownerId: ${this.ownerId})`);let t;for(let n of this.runtime.stack.blocks){let r=n.context.references.find(t=>t.id===e&&t.type===Cf.ANCHOR);if(r){t=r;break}}if(t)return this._references.find(e=>e.id===t.id)||this._references.push(t),t;let n=this._memory.allocate(Cf.ANCHOR,this.ownerId,void 0,`public`);return n.id=e,this._references.push(n),n}};let kf=`time`;function Af(e){return[new sf(e)]}function jf(e,t){return e.map((n,r)=>r===e.length-1&&n.ended===void 0?new sf(n.started,t):n)}function Mf(e,t){return[...e,new sf(t)]}function Nf(e){return e.getMemoryByTag(kf)[0]?.metrics[0]?.value}function Pf(e,t){let n=e.getMemoryByTag(kf)[0]?.metrics[0],r=n?.value;if(!r||!n)return!1;let i=t(r.spans,e.clock.currentDate.getTime());return e.updateMemory(kf,[{...n,value:{...r,spans:i}}]),!0}var Ff=class{targetBlockKey;type=`clear-children`;constructor(e){this.targetBlockKey=e}do(e){let t=[],n=0;for(;n<20;){let r=e.stack.current;if(!r||r.key.toString()===this.targetBlockKey)break;let i=new bf().do(e);for(let e of i)e.type!==`next`&&t.push(e);n++}return n>=20&&e.options.logger?.error?.(`[ClearChildrenAction] Max iterations reached, possible infinite loop`,Error(`Exceeded 20 pop iterations for target ${this.targetBlockKey}`)),e.stack.current?.key.toString()===this.targetBlockKey&&t.push(new uf(void 0,e.nowProvider)),t}};function If(e,t){let n=0;for(let r of e.spans){let e=r.ended??t;n+=e-r.started}return n}function Lf(e){let t=Math.floor(e/1e3);return`${Math.floor(t/60)}:${(t%60).toString().padStart(2,`0`)}`}var Rf=class{current;total;sourceBlockKey;timestamp;type=T.CurrentRound;origin=`tracked`;value;image;constructor(e,t,n,r,i){this.current=e,this.total=t,this.sourceBlockKey=n,this.timestamp=r,this.value=e,this.image=i??(t===void 0?`Round ${e}`:`Round ${e} of ${t}`)}},zf=class{config;constructor(e){this.config=e}subscriptions=[];isPaused=!1;onMount(e){let t=e.clock.currentDate.getTime(),n=this.config.label??e.block.label,r=this.config.role===`hidden`?`auto`:this.config.role??`primary`,i=this.config.mode??`complete-block`;return e.pushMemory(`time`,[this.createFragment(e,{spans:Af(t),direction:`down`,durationMs:this.config.durationMs,label:n,role:r})]),this.config.durationMs<=0?(this.handleExpiry(e,i),[new Ff(e.block.key.toString())]):(this.subscriptions.push(e.subscribe(`tick`,(e,t)=>{let n=Nf(t);return!n||n.direction!==`down`||n.durationMs===void 0||i===`complete-block`&&t.block.isComplete||If(n,t.clock.currentDate.getTime())<n.durationMs?[]:(this.handleExpiry(t,i),[new Ff(t.block.key.toString())])},{scope:`bubble`})),this.subscriptions.push(e.subscribe(`timer:reset`,(e,t)=>(i===`reset-interval`&&Pf(t,(e,t)=>Af(t)),[]))),this.subscriptions.push(e.subscribe(`timer:pause`,(e,t)=>(this.isPaused||Pf(t,jf)&&(this.isPaused=!0),[]))),this.subscriptions.push(e.subscribe(`timer:resume`,(e,t)=>(this.isPaused&&Pf(t,Mf)&&(this.isPaused=!1),[]))),[])}onNext(e){if(this.config.required&&!e.block.isComplete)return e.emitEvent({name:`timer:skip-attempt`,timestamp:e.clock.currentDate,data:{blockKey:e.block.key.toString()}}),[];if(e.hasCapability(`childSelection`)||!this.config.restBlockFactory)return[];let t=Nf(e);if(!t||t.direction!==`down`||!t.durationMs)return[];let n=this.getRemainingCountdownMs(e);return n>1e3?this.config.restBlockFactory(n,`Rest`):[]}onUnmount(e){return Pf(e,jf),[]}onDispose(e){for(let e of this.subscriptions)try{e()}catch{}this.subscriptions.length=0}handleExpiry(e,t){if(e.emitEvent({name:`timer:complete`,timestamp:e.clock.currentDate,data:{blockKey:e.block.key.toString()}}),t===`complete-block`)e.markComplete(`timer-expired`);else{if(Pf(e,(e,t)=>Af(t)),e.hasCapability(`childSelection`))return;let t=e.getMemoryByTag(`round`)[0]?.metrics[0];if(t){let n=new Rf(t.current+1,t.total,e.block.key.toString(),e.clock.currentDate);e.updateMemory(`round`,[n])}let n=e.getMemoryByTag(`children:status`)[0],r={childIndex:0,totalChildren:n?.metrics[0]?.value?.totalChildren??0,allExecuted:!1,allCompleted:!1};n?.metrics[0]?e.updateMemory(`children:status`,[{...n.metrics[0],value:r}]):e.pushMemory(`children:status`,[{type:`status`,image:``,origin:`runtime`,value:r}])}}getRemainingCountdownMs(e){let t=Nf(e);if(!t||t.direction!==`down`||!t.durationMs)return 0;let n=If(t,e.clock.currentDate.getTime());return Math.max(0,t.durationMs-n)}createFragment(e,t){return{type:T.Time,image:Bf(t.durationMs),origin:`runtime`,value:t,sourceBlockKey:e.block.key.toString(),timestamp:e.clock.currentDate}}};function Bf(e){if(!e||e===0)return`0:00`;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}:${r.toString().padStart(2,`0`)}:${i.toString().padStart(2,`0`)}`:`${r}:${i.toString().padStart(2,`0`)}`}var Vf=class{config;_repScheme;_lastPromotedRound;constructor(e){this.config=e,this._repScheme=[...e.repScheme??[]]}get repScheme(){return this._repScheme}getRepsForRound(e){if(this._repScheme.length===0)return;let t=(e-1)%this._repScheme.length;return this._repScheme[t]}getRepsForCurrentRound(){return this._lastPromotedRound===void 0?this._repScheme[0]:this.getRepsForRound(this._lastPromotedRound)}getPromotedFragments(e,t){let n=E.empty(t.key.toString());if(this._repScheme.length>0){let r=t.getMemoryByTag(`round`)[0]?.metrics[0]?.current??1,i=this.getRepsForRound(r);i!==void 0&&n.add({type:T.Rep,image:i.toString(),origin:`compiler`,value:i,sourceBlockKey:t.key.toString(),timestamp:e.clock.currentDate})}for(let e of this.config.promotions){let r=this.findSourceFragmentInBlock(t,e);r&&n.add({...r,origin:e.origin??`compiler`})}return n}onMount(e){if(this._repScheme.length>0){let t=e.getMemoryByTag(`round`)[0]?.metrics[0]?.current??1;this.promoteRepScheme(e,t)}return this.promoteFragments(e,this.config.promotions),[]}onNext(e){if(this._repScheme.length>0){let t=e.getMemoryByTag(`round`)[0]?.metrics[0];t&&t.current!==this._lastPromotedRound&&this.promoteRepScheme(e,t.current)}let t=this.config.promotions.filter(e=>e.enableDynamicUpdates);return this.promoteFragments(e,t),[]}onUnmount(e){return[]}onDispose(e){}promoteFragments(e,t){for(let n of t){let t=this.findSourceFragment(e,n);if(!t)continue;let r={...t,origin:n.origin??`runtime`};this.upsertPromotedFragment(e,r)}}promoteRepScheme(e,t){let n=this.getRepsForRound(t);if(n===void 0)return;this._lastPromotedRound=t;let r={type:T.Rep,image:n.toString(),origin:`runtime`,value:n,sourceBlockKey:e.block.key.toString(),timestamp:e.clock.currentDate};e.block.getMemoryByTag(`metric:rep-target`).length>0?e.updateMemory(`metric:rep-target`,[r]):e.pushMemory(`metric:rep-target`,[r])}findSourceFragment(e,t){return this.findSourceFragmentInBlock(e.block,t)}findSourceFragmentInBlock(e,t){let n=e.getAllMemory();for(let e of n){if(e.tag===`metric:promote`||e.tag===`metric:rep-target`||t.sourceTag&&e.tag!==t.sourceTag)continue;let n=e.metrics.find(e=>e.type===t.metricType);if(n)return n}}upsertPromotedFragment(e,t){let n=e.block.getMemoryByTag(`metric:promote`);if(n.length===0){e.pushMemory(`metric:promote`,[t]);return}let r=n[0].metrics.filter(e=>e.type!==t.type);e.updateMemory(`metric:promote`,[...r,t])}},Hf=class{config;unsubscribers=[];constructor(e){this.config={mode:e.mode,onNext:e.onNext??e.mode===`immediate`,onEvents:e.onEvents??[]}}onMount(e){if(this.config.mode!==`immediate`)return[];for(let t of this.config.onEvents){let n=e.subscribe(t,(e,t)=>(t.markComplete(`event:${e.name}`),[new bf]));this.unsubscribers.push(n)}return[]}onNext(e){return this.config.mode===`deferred`?e.block.isComplete?[new bf]:[]:this.config.onNext?(e.block.isComplete||e.markComplete(`user-advance`),[new bf]):[]}onUnmount(e){return[]}onDispose(e){for(let e of this.unsubscribers)e();this.unsubscribers=[]}},Uf=class{config;constructor(e={}){this.config=e}onMount(e){let t=this.createStaticLabels(e),n=this.createRoundLabel(e),r=t.clone();return n&&r.add(n),r.length>0&&e.pushMemory(`display`,r.toArray()),[]}onNext(e){let t=this.createRoundLabel(e);if(!t)return[];let n=e.block.getMemoryByTag(`display`);if(n.length===0)return e.pushMemory(`display`,[t]),[];let r=n[0].metrics.filter(e=>!this.isRoundRoleFragment(e));return e.updateMemory(`display`,[...r,t]),[]}onUnmount(e){return[]}onDispose(e){}createStaticLabels(e){let t=this.config.label??e.block.label,n=this.config.subtitle,r=this.config.actionDisplay,i=E.empty(e.block.key.toString());return t&&i.add(this.createTextMetric(e,t,`label`)),n&&i.add(this.createTextMetric(e,n,`subtitle`)),r&&i.add(this.createTextMetric(e,r,`action`)),i}createRoundLabel(e){if(this.config.showRoundDisplay===!1)return;let t=e.block.getMemoryByTag(`round`)[0];if(!t||t.metrics.length===0)return;let n=t.metrics[0];if(!n||typeof n.current!=`number`)return;let r=this.formatRound(n.current,n.total);return this.createTextMetric(e,r,`round`)}createTextMetric(e,t,n){return{type:T.Text,image:t,origin:`runtime`,value:{text:t,role:n},sourceBlockKey:e.block.key.toString(),timestamp:e.clock.currentDate}}formatRound(e,t){return this.config.roundFormat?this.config.roundFormat(e,t):typeof t==`number`?`Round ${e} of ${t}`:`Round ${e}`}isRoundRoleFragment(e){return e.value?.role===`round`}};Pd.defaultMet;var Wf=class{value;sourceBlockKey;timestamp;type=T.Elapsed;origin=`analyzed`;constructor(e,t,n){this.value=e,this.sourceBlockKey=t,this.timestamp=n}get image(){return Lf(this.value)}},Gf=class{value;sourceBlockKey;timestamp;type=T.Total;origin=`analyzed`;constructor(e,t,n){this.value=e,this.sourceBlockKey=t,this.timestamp=n}get image(){return Lf(this.value)}},Kf=class e{spans;sourceBlockKey;timestamp;type=T.Spans;origin=`tracked`;constructor(e,t,n){this.spans=e,this.sourceBlockKey=t,this.timestamp=n}get value(){return this.spans}get image(){if(this.spans.length===0)return`--:--`;if(this.spans.length===1){let t=this.spans[0];return t.started===t.ended?e.formatTimestamp(t.started):`${e.formatTimestamp(t.started)} – ${e.formatTimestamp(t.ended??Date.now())}`}return`${this.spans.length} spans`}get isOpen(){return this.spans.length!==0&&this.spans[this.spans.length-1].isOpen}static formatTimestamp(e){let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}:${t.getSeconds().toString().padStart(2,`0`)}`}},qf=class{value;sourceBlockKey;type=T.SystemTime;origin=`tracked`;constructor(e,t){this.value=e,this.sourceBlockKey=t}get timestamp(){return this.value}get image(){return this.value.toISOString()}},Jf=class{config;_now;lastEmittedRound;constructor(e={},t=lf){this.config=e,this._now=t}onMount(e){if(this.config.emitSegmentOnMount??!1){let t=this.collectDisplayFragments(e),n=this.collectStateFragments(e),r=this.mergeFragments(t,n);e.emitOutput(`segment`,r.toArray(),{label:this.formatLabel(e)})}let t=e.getMemoryByTag(`round`)[0]?.metrics[0];return(this.config.emitMilestones??!!t)&&t&&(t.total===void 0||t.total>1)&&(this.lastEmittedRound=t.current,e.emitOutput(`milestone`,this.buildMilestoneFragments(e,t).toArray(),{label:this.formatRoundLabel(t)})),[]}onNext(e){let t=e.getMemoryByTag(`round`)[0]?.metrics[0];return!(this.config.emitMilestones??!!t)||!t||t.total!==void 0&&t.total<=1||t.total!==void 0&&t.current>t.total||this.lastEmittedRound!==void 0&&t.current===this.lastEmittedRound?[]:(this.lastEmittedRound=t.current,e.emitOutput(`milestone`,this.buildMilestoneFragments(e,t).toArray(),{label:this.formatRoundLabel(t)}),[])}onUnmount(e){let t=Nf(e),n=e.getMemoryByTag(`round`)[0]?.metrics[0],r=this.config.computeTimeResults??!0,i=this.config.label??`Completed`;if(this.config.label||(e.block.blockType===`SessionRoot`?i=`Session Completed`:n&&n.total!==void 0&&n.total>1?i=`Completed ${n.total} Round(s)`:n&&n.current>1&&(i=`Completed ${n.current} Round(s)`)),r){let n=e.block.getMemoryByTag(`metric:display`);if(n.length>1){let r=this.computeSplitTimeResults(e,t,n.map(e=>e.metrics),i);return this.writeResultGroups(e,r),[]}}let a=r?this.computeTimeResults(e,t,i):E.from([new qf(this._now.now(),e.block.key.toString())],e.block.key.toString());return this.writeResultMemory(e,a),[]}onDispose(e){}collectDisplayFragments(e){let t=E.empty(e.block.key.toString());for(let n of e.block.getMemoryByTag(`metric:display`))t.merge(n.metrics);return t}collectStateFragments(e){let t=E.empty(e.block.key.toString());for(let n of e.block.getMemoryByTag(`round`))t.merge(n.metrics);for(let n of e.block.getMemoryByTag(`time`))t.merge(n.metrics);return t}mergeFragments(e,t){let n=new Set(e.map(e=>`${e.type}:${e.type}`)),r=t.filter(e=>!n.has(`${e.type}:${e.type}`));return e.clone().add(...r)}buildMilestoneFragments(e,t){let n=E.empty(e.block.key.toString()).add(new Rf(t.current,t.total,e.block.key.toString(),e.clock.currentDate)),r=Nf(e);if(r){let t=If(r,e.clock.currentDate.getTime());n.add(new Wf(t,e.block.key.toString(),e.clock.currentDate)),r.spans.length>0&&n.add(new Kf([...r.spans],e.block.key.toString(),e.clock.currentDate))}return n}computeTimeResults(e,t,n){let r=e.clock.currentDate,i=r.getTime(),a=e.block.key.toString(),o=e.getMemoryByTag(`round`)[0]?.metrics[0];if(t&&t.spans.length>0){let e=If(t,i),s=t.spans[0].started,c=t.spans[t.spans.length-1].ended??i,l=Math.max(0,c-s),u=E.empty(a).add(new Wf(e,a,r),new Gf(l,a,r),new Kf([...t.spans],a,r),new qf(this._now.now(),a));return o&&u.add(new Rf(o.current,o.total,a,r,n)),u}let s=new sf(i,i),c=E.empty(a).add(new Wf(0,a,r),new Gf(0,a,r),new Kf([s],a,r),new qf(this._now.now(),a));return o&&c.add(new Rf(o.current,o.total,a,r,n)),c}computeSplitTimeResults(e,t,n,r){let i=e.clock.currentDate,a=i.getTime(),o=e.block.key.toString(),s=e.getMemoryByTag(`round`)[0]?.metrics[0];if(!t||t.spans.length===0)return n.map(e=>{let t=e.clone().add(new Wf(0,o,i),new Gf(0,o,i),new Kf([new sf(a,a)],o,i),new qf(this._now.now(),o));return s&&t.add(new Rf(s.current,s.total,o,i,r)),t});let c=If(t,a),l=t.spans[0].started,u=(t.spans[t.spans.length-1].ended??a)-l,d=n.map(e=>{let t=e.filter(e=>e.type===T.Rep&&typeof e.value==`number`).reduce((e,t)=>e+t.value,0);return t>0?t:1}),f=d.reduce((e,t)=>e+t,0),p=0;return n.map((e,t)=>{let n=d[t]/f,a=Math.round(c*n),m=Math.round(u*n),h=l+p,g=h+m;p+=m;let _=e.clone().add(new Wf(a,o,i),new Gf(m,o,i),new Kf([new sf(h,g)],o,i),new qf(this._now.now(),o));return s&&_.add(new Rf(s.current,s.total,o,i,r)),_})}writeResultMemory(e,t){let n=e.block.getMemoryByTag(`metric:result`);if(n.length>0){let r=Yf(n);r.length>0&&(t=t.clone().add(...r)),e.updateMemory(`metric:result`,t.toArray());return}e.pushMemory(`metric:result`,t.toArray())}writeResultGroups(e,t){let n=e.block.getMemoryByTag(`metric:result`);if(n.length===0){for(let n of t)e.pushMemory(`metric:result`,n.toArray());return}let r=Math.max(n.length,t.length);for(let i=0;i<r;i++){let r=t[i]?t[i].clone():n[i].metrics.clone(),a=t[i]&&i<n.length?Yf([n[i]]):[],o=r.add(...a);i<n.length?n[i].update(o):e.pushMemory(`metric:result`,o.toArray())}}formatLabel(e){return this.config.label??e.block.label}formatRoundLabel(e){return e.total===void 0?`Round ${e.current}`:`Round ${e.current} of ${e.total}`}};function Yf(e){let t=[];for(let n of e)for(let e of n.metrics)e.origin===`user`&&t.push(e);return t}var Xf=class{sound;trigger;type=T.Sound;origin;value;image;constructor(e,t,n={}){this.sound=e,this.trigger=t,this.origin=n.origin??`tracked`,this.value={sound:e,trigger:t,atSecond:n.atSecond},this.image=n.atSecond===void 0?e:`${e}@${n.atSecond}s`}};function Zf(e,t){return e.rules.filter(e=>{let{anchor:n,offsetMs:r}=e.trigger;return n===`start`||r===0||t!==void 0&&r<=t})}let Qf={id:`default`,name:`Default`,rules:[{trigger:{anchor:`end`,offsetMs:3e3},sound:`countdown-beep`},{trigger:{anchor:`end`,offsetMs:2e3},sound:`countdown-beep`},{trigger:{anchor:`end`,offsetMs:1e3},sound:`countdown-beep`},{trigger:{anchor:`end`,offsetMs:0},sound:`timer-complete`}]};var $f=class{config;rules=[];fired=new Set;durationMs;constructor(e){this.config=e}onMount(e){let t=Nf(e);return this.durationMs=t?.durationMs,this.rules=Zf(this.config.profile,this.durationMs),this.fireDue(e,0,this.durationMs),e.subscribe(`tick`,(e,t)=>{let n=this.elapsedMs(t);return n===void 0||this.fireDue(t,n,this.durationMs),[]},{scope:`bubble`}),[]}onNext(e){return[]}onUnmount(e){return this.fireDue(e,this.elapsedMs(e)??0,this.durationMs,!0),[]}onDispose(e){this.fired.clear()}elapsedMs(e){let t=Nf(e);if(t)return If(t,e.clock.currentDate.getTime())}fireDue(e,t,n,r=!1){let i=n===void 0?void 0:Math.max(0,n-t);this.rules.forEach((n,a)=>{if(this.fired.has(a))return;let{anchor:o,offsetMs:s}=n.trigger;(o===`start`?t>=s:s===0?r||i!==void 0&&i<=0:i!==void 0&&i<=s)&&(this.fired.add(a),this.play(e,n,o,s))})}play(e,t,n,r){let i=n===`start`?r===0?`mount`:`countdown`:r===0?`complete`:`countdown`;e.emitOutput(`system`,[new Xf(t.sound,i,{atSecond:r/1e3})],{label:`Sound: ${t.sound}`}),e.emitEvent({name:`sound:play`,timestamp:e.clock.currentDate,data:{sound:t.sound,volume:1}})}};let ep=T.Sound;function tp(e,t){let n=np(e);if(n){let e=rp(t?.profiles,n);if(e)return e}if(t?.noteProfileId){let e=rp(t?.profiles,t.noteProfileId);if(e)return e}return Qf}function np(e){for(let t of e){let e=t.metrics.find(e=>e.type===ep);if(!e)continue;let n=e.value;if(typeof n==`string`&&n.trim().length>0)return n.trim()}}function rp(e,t){if(e)return e.find(e=>e.id===t)}let ip=(e,t,n)=>({id:e,kind:`expr`,expression:t,unit:n});ap(),ap(),ap(),op(),op();function ap(){return{sRPE:ip(`sRPE`,`rpeSource.rpe`),durationMinutes:ip(`durationMinutes`,`convert(session.duration, min)`),load:ip(`load`,`round(rpeSource.rpe * convert(session.duration, min))`)}}function op(){return{elapsedMin:ip(`elapsedMin`,`convert(sum(elapsed), min)`),avgMets:ip(`avgMets`,`sum(metMinutes) / elapsedMin`),metMax:ip(`metMax`,`sharedMet.metMax`),metScore:ip(`metScore`,`min(100, avgMets / metMax * 100)`),rpeScore:ip(`rpeScore`,`rpeSource.rpe * 10`),durationScore:ip(`durationScore`,`elapsedMin / 60 * metScore`,`pts`),disciplineFactor:ip(`disciplineFactor`,`lookup("effort", effort, "disciplineFactor")`),tis:ip(`tis`,`round(0.30 * metScore + 0.35 * rpeScore + 0.20 * durationScore + 0.15 * disciplineFactor, 1)`)}}new Du([]),new Du([]);var sp=class{static build(e,t={}){let{includeMetric:n=!0,includeLogic:r=!0,includeIdentity:i=!0,includeAttributes:a=!0,defaultLabel:o=`Block`,format:s=`logic-first`}=t,c=E.from(e.flatMap(e=>E.from(e.metrics).toArray()).filter(e=>e.origin!==`runtime`&&e.type!==T.Hint));if(c.length===0)return o;let l=c.find(e=>e.type===T.Label);if(l)return l.image||l.value?.toString()||o;let u=n?this.getPrimaryMetric(c):void 0,d=r?this.getLogicKeyword(e,c):void 0,f=i?this.getIdentityText(c):void 0,p=a?this.getAttributesText(c):void 0,m=[];return s===`logic-first`?(d&&m.push(d),u&&m.push(u),f&&m.push(f),p&&m.push(p)):s===`metric-first`?(u&&m.push(u),d&&m.push(d),f&&m.push(f),p&&m.push(p)):(f&&m.push(f),u&&m.push(u),d&&m.push(d),p&&m.push(p)),m.length===0?c.filter(e=>!!e.image&&!Qu.isStructural(e)).map(e=>e.image).join(` `)||o:m.join(` `).trim().replace(/\s+/g,` `)}static getPrimaryMetric(e){let t=e.find(e=>e.type===T.Rounds);if(t&&t.image)return t.image;let n=e.find(e=>e.type===T.Duration);if(n&&n.image)return n.image}static getLogicKeyword(e,t){if(e.some(e=>Nu(e,Ou.LABEL_AMRAP)))return`AMRAP`;if(e.some(e=>Nu(e,Ou.LABEL_EMOM)))return`EMOM`;if(e.some(e=>Nu(e,Ou.LABEL_TABATA)))return`TABATA`;if(e.some(e=>Nu(e,Ou.LABEL_FOR_TIME)))return`FOR TIME`;let n=[`AMRAP`,`EMOM`,`TABATA`,`FOR TIME`];for(let e of t){let t=(e.image||e.value?.toString()||``).toUpperCase();if(n.includes(t))return t}}static getIdentityText(e){let t=[`AMRAP`,`EMOM`,`TABATA`,`FOR TIME`],n=e.filter(e=>{if(e.type===T.Duration||e.type===T.Rounds||e.type===T.Resistance||e.type===T.Distance||e.type===T.Lap||e.type===T.Group)return!1;let n=(e.image||e.value?.toString()||``).toUpperCase();return!t.includes(n)});if(n.length!==0)return n.map(e=>e.image).join(` `).trim()}static getAttributesText(e){let t=e.filter(e=>e.type===T.Resistance||e.type===T.Distance);if(t.length!==0)return t.map(e=>e.image).join(` `).trim()}},cp=class{distribute(e,t){return[e.clone()]}};let lp=e=>e[0];function up(e,t){let{statements:n,runtime:r,blockType:i,defaultLabel:a}=t,o=(t.pickStatement??lp)(n),s=t.key??new Ee,c=t.context??new Of(r,s.toString(),o.exerciseId||``),l=sp.build(n,{defaultLabel:a});e.setContext(c).setKey(s).setBlockType(i).setLabel(l).setSourceIds(n.map(e=>e.id));let u=t.metricDistributorType??i,d=new cp,f=t.filterMetrics,p=n.flatMap(e=>{let t=f?E.from(e.metrics.filter(f)):E.from(e.metrics);return d.distribute(t,u)}).filter(e=>e.length>0);if(e.setFragments(p),t.timer){let n=t.timer,r=n.mode===`reset-interval`?{completesBlock:!1}:void 0;e.asTimer({direction:n.direction,durationMs:n.durationMs,label:n.label,role:n.role??`primary`,addCompletion:n.mode!==`reset-interval`,completionConfig:r,injectRest:n.injectRest,required:n.required,...t.countdownTimerConfig??{}})}if(t.repeater){let n=t.repeater;e.asRepeater({totalRounds:n.totalRounds,startRound:n.startRound??1,addCompletion:n.addCompletion})}return l}var dp=class{priority=90;id=`amrap-logic`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.hasMetric(T.Duration)),r=e.some(e=>e.hasMetric(T.Rounds)),i=e.some(e=>e.metrics.some(e=>(e.type===T.Effort||e.type===T.Action)&&typeof e.value==`string`&&(e.value.toLowerCase()===`rounds`||e.value.toLowerCase()===`amrap`)));return n&&(r||i)}apply(e,t,n){let r=(t.find(e=>e.hasMetric(T.Duration))||t[0]).metrics.find(e=>e.type===T.Duration)?.value||0,i=up(e,{blockType:`AMRAP`,defaultLabel:`AMRAP ${Math.round(r/6e4)} min`,statements:t,runtime:n,timer:{direction:`down`,durationMs:r,label:`AMRAP`,role:`primary`,mode:`complete-block`,injectRest:!1},repeater:{totalRounds:void 0,startRound:1,addCompletion:!1},pickStatement:e=>e.find(e=>e.hasMetric(T.Duration))||e[0]});e.addBehavior(new Uf({mode:`countdown`,label:i}))}},fp=class{priority=90;id=`interval-logic`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.metrics.some(e=>e.type===T.Duration)),r=e.some(e=>Nu(e,Ou.REPEATING_INTERVAL)),i=e.some(e=>e.metrics.some(e=>(e.type===T.Action||e.type===T.Effort)&&typeof e.value==`string`&&e.value.toLowerCase()===`emom`));return n&&(r||i)}apply(e,t,n){let r=(t.find(e=>e.metrics.some(e=>e.type===T.Duration))||t[0]).metrics.find(e=>e.type===T.Duration),i=t.flatMap(e=>E.from(e.metrics).toArray()).find(e=>e.type===T.Rounds),a=r?.value||6e4,o=typeof i?.value==`number`?i.value:10,s=up(e,{blockType:`EMOM`,defaultLabel:`EMOM ${o}`,statements:t,runtime:n,timer:{direction:`down`,durationMs:a,label:`Interval`,role:`primary`,mode:`reset-interval`,injectRest:!0},repeater:{totalRounds:o,startRound:1,addCompletion:!0},pickStatement:e=>e.find(e=>e.hasMetric(T.Duration))||e[0],metricDistributorType:`EMOM`});e.addBehavior(new Uf({mode:`countdown`,label:s}));let c=t.some(e=>e.metrics.some(e=>e.type===T.Resistance)),l=t.some(e=>e.metrics.some(e=>e.type===T.Distance)),u=[...c?[{metricType:T.Resistance,origin:`compiler`}]:[],...l?[{metricType:T.Distance,origin:`compiler`}]:[]];u.length>0&&e.addBehavior(new Vf({promotions:u}))}},pp=class{priority=0;id=`effort-fallback`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`)),r=e.some(e=>e.metrics.some(e=>e.type===T.Rounds&&e.origin!==`runtime`)),i=e.some(e=>e.children&&e.children.length>0);return!n&&!r&&!i}apply(e,t,n){up(e,{blockType:`effort`,defaultLabel:`Effort`,statements:t,runtime:n,timer:{direction:`up`,role:`secondary`,mode:`reset-interval`},filterMetrics:e=>e.origin!==`runtime`}),e.addBehavior(new Hf({mode:`immediate`,onNext:!0}))}},mp=class{priority=50;id=`generic-group`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.children&&e.children.length>0),r=e.some(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`)),i=e.some(e=>e.metrics.some(e=>e.type===T.Rounds&&e.origin!==`runtime`));return n&&!r&&!i}apply(e,t,n){if(e.hasTimerBehavior()||e.hasRoundConfig())return;let r=up(e,{blockType:`Group`,defaultLabel:`Group`,statements:t,runtime:n});e.addBehavior(new Uf({mode:`clock`,label:r}));let i=t.some(e=>e.metrics.some(e=>e.type===T.Resistance)),a=t.some(e=>e.metrics.some(e=>e.type===T.Distance)),o=[...i?[{metricType:T.Resistance,origin:`compiler`}]:[],...a?[{metricType:T.Distance,origin:`compiler`}]:[]];o.length>0&&e.addBehavior(new Vf({promotions:o}))}},hp=class{priority=50;id=`generic-loop`;match(e,t){return!e||e.length===0?!1:e.some(e=>e.metrics.some(e=>e.type===T.Rounds))}apply(e,t,n){if(e.hasRoundConfig())return;let r=(t.find(e=>e.metrics.some(e=>e.type===T.Rounds))||t[0]).metrics.find(e=>e.type===T.Rounds);if(!r)return;let i=1,a;typeof r.value==`number`&&(i=r.value);let o=t.flatMap(e=>e.metrics.filter(e=>e.type===T.Rep&&typeof e.value==`number`)).map(e=>e.value);o.length>0&&(a=o,i<=1&&(i=a.length));let s=up(e,{blockType:`Rounds`,defaultLabel:a?a.join(`-`):`${i} Rounds`,statements:t,runtime:n,repeater:{totalRounds:i,startRound:1,addCompletion:!0},pickStatement:e=>e.find(e=>e.metrics.some(e=>e.type===T.Rounds))||e[0],filterMetrics:e=>e.type!==T.Rep});e.addBehavior(new Uf({mode:`clock`,label:s}));let c=t.some(e=>e.metrics.some(e=>e.type===T.Resistance)),l=t.some(e=>e.metrics.some(e=>e.type===T.Distance)),u=[...c?[{metricType:T.Resistance,origin:`compiler`}]:[],...l?[{metricType:T.Distance,origin:`compiler`}]:[]];e.addBehavior(new Vf({repScheme:a,promotions:u})),e.declareExit(`immediate`)}},gp=class{priority=50;id=`generic-timer`;match(e,t){return!e||e.length===0?!1:e.some(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`))}apply(e,t,n){if(e.hasTimerBehavior())return;let r=(t.find(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`))||t[0]).metrics.find(e=>e.type===T.Duration&&e.origin!==`runtime`),i=r?.direction||`up`,a=r?.value||void 0,o=t.some(e=>Nu(e,Ou.REQUIRED_TIMER)),s=t.some(e=>Nu(e,Ou.INJECT_REST)),c=!!(a&&i===`down`),l=up(e,{blockType:`Timer`,defaultLabel:i===`down`?`Countdown`:`For Time`,statements:t,runtime:n,timer:{direction:i,durationMs:a,label:a?`Countdown`:`For Time`,role:`primary`,mode:`complete-block`,injectRest:s,required:o},pickStatement:e=>e.find(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`))||e[0]});o&&c?e.addBehavior(new Hf({mode:`immediate`,onNext:!1,onEvents:[`timer:complete`]})):e.addBehavior(new Hf({mode:`immediate`,onNext:!0})),e.addBehavior(new Uf({mode:a?`countdown`:`clock`,label:l}))}},_p=class{priority=50;id=`children`;match(e,t){return e&&e.length>0&&e[0].children&&e[0].children.length>0}apply(e,t,n){let r=t[0].children.filter(e=>e.length>0),i=e.hasRoundConfig(),a=e.getBehavior(zf),o=!!a;i||(o?e.asRepeater({totalRounds:void 0,startRound:1,addCompletion:!1}):e.asRepeater({totalRounds:1,startRound:1,addCompletion:!0}));let s=o||i,c=i?`rounds-remaining`:`timer-active`,l=o&&a?.config.mode===`reset-interval`;e.asContainer({childGroups:r,addLoop:s,loopConfig:s?{condition:c}:void 0,injectRest:l}),e.declareExit(`deferred`)}},vp=class{priority=15;id=`report-output`;match(e,t){return e&&e.length>0}apply(e,t,n){e.hasBehavior(Jf)||e.addBehavior(new Jf)}},yp=class{priority=20;id=`sound`;match(e,t){return e.length>0}apply(e,t,n){if(e.hasBehavior($f)||!e.hasTimerBehavior())return;let r=tp(t,n.options?.soundOptions);e.addBehavior(new $f({profile:r}))}};new Du([new dp,new fp,new gp,new hp,new mp,new yp,new vp,new _p,new pp]).list();let bp=/^---\r?\n([\s\S]*?)\r?\n---/;function xp(e){let t=bp.exec(e);if(!t)return{};let n={},r=t[1].split(/\r?\n/),i;for(let e of r){let t=e.trimEnd(),r=t.match(/^\s+-\s+(.*)$/);if(r&&i){n[i].push(r[1].trim());continue}let a=t.match(/^([^:]+):\s*(.*)$/);if(!a)continue;let o=a[1].trim().toLowerCase(),s=a[2].trim();s===``?(n[o]=[],i=o):s.startsWith(`[`)&&s.endsWith(`]`)?(n[o]=s.slice(1,-1).split(`,`).map(e=>e.trim().replace(/^['"]|['"]$/g,``)).filter(e=>e.length>0),i=void 0):(n[o]=s,i=void 0)}return n}let Sp=e=>Array.isArray(e)?e:typeof e==`string`?e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):[];function Cp(e,t=Ze){let n=xp(e),r=Sp(n.tags).map(e=>({label:e})),i=Object.keys(n);for(let e of t){if(e===`tags`)continue;let t=i.find(t=>t===e.toLowerCase());if(t)for(let i of Sp(n[t]))r.push({label:i,type:e})}return r.filter(e=>e.label.length>0)}let wp=[`sessionId`,`noteId`,`blockId`,`blockVersion`,`blockContentId`,`origin`,`status`,`startTime`,`endTime`,`duration`,`completed`,`sessionCreatedAt`,`sessionExtraJson`],Tp=`eventId.grain.outputType.timestamp.pageId.effortSlug.eventBlockId.eventBlockVersion.eventBlockContentId.eventOrigin.timeSpan.sourceBlockKey.sourceStatementId.line.text.dialect.stackLevel.completionReason.representationKind.metricType.metricValue.metricUnit.metricImage.metricOrigin.metricMetadata.metricTemporal.metricJson.eventExtraJson`.split(`.`);[...wp,...Tp];let Ep=Oe,Dp={core:0,community:1,imported:2,user:3};function Op(e,t){if(t)return t;if(!e)return`core`;if(e===`user`)return`user`;let n=e.startsWith(`seed:`)?e.slice(5):e;return n===`core`||n===`efforts`||n===`equipment`?`core`:n===`community`||n.startsWith(`community-`)||n===`common`?`community`:`imported`}function kp(e,t){return Dp[Op(e,t)]}let Ap=`canvas`;function jp(e){return`seed:${e}`}function Mp(e){return{key:e,schema:9,seedVersion:0,builtAt:``,importedAt:0,chunks:{},claim:null}}function Np(e){let t=/^(?:collection|feed)\.(.+)$/.exec(e)?.[1];return t&&t!==`_root`?t:void 0}function Pp(e){let t=/^---\r?\n([\s\S]*?)\r?\n---/.exec(e);return t?.[1]&&!/^template:\s*canvas\s*$/m.test(t[1])?null:t?.[1]?.match(/^route:\s*(\S+)\s*$/m)?.[1]?.replace(/^\//,``)||null}function Fp(e,t,n){let r=e.split(`/`),i=(r.at(-1)??``).replace(/\.md$/i,``),a=r.slice(2).map(e=>e.replace(/\.md$/i,``)).join(`/`);if(n===`canvas`)return`guides:${Pp(t)??a}`;if(n===`dashboards`)return`dashboards`;if(n===`efforts`)return`efforts`;if(n===`equipment`)return`equipment`;if(n===`template`)return`playground`;if(n.startsWith(`collection.`)){let e=Np(n);return e?i.toLowerCase()===`readme`?`collection:${e}`:`collection:${e}/${i}`:`collection:_root`}if(n.startsWith(`feed.`))return`feed:feeds/${a}`}function $(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ip(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>0}function Lp(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}function Rp(e){if(!$(e)||e.schema!==9)throw Error(`Incompatible seed schema; rebuild seed artifacts`);if(!Lp(e.version)||typeof e.builtAt!=`string`||!Number.isFinite(Date.parse(e.builtAt))||!Array.isArray(e.chunks))throw Error(`seed manifest failed shape validation`);for(let t of[`versionLabel`,`commit`,`name`,`description`])if(e[t]!==void 0&&typeof e[t]!=`string`)throw Error(`invalid seed manifest metadata`);if(e.repositoryUrl!==void 0&&(typeof e.repositoryUrl!=`string`||!/^https:\/\//.test(e.repositoryUrl)||new URL(e.repositoryUrl).username||new URL(e.repositoryUrl).password))throw Error(`invalid seed repository URL`);if(e.dirty!==void 0&&typeof e.dirty!=`boolean`)throw Error(`invalid seed manifest metadata`);let t=new Set,n=new Set;for(let r of e.chunks){if(!$(r)||typeof r.id!=`string`||!r.id||typeof r.path!=`string`||!/^chunks\/[a-zA-Z0-9._-]+\.json$/.test(r.path)||typeof r.sha256!=`string`||!/^[0-9a-f]{64}$/.test(r.sha256)||!Lp(r.bytes)||!Lp(r.count)||r.kind!==void 0&&r.kind!==`notes`||t.has(r.id)||n.has(r.path))throw Error(`seed manifest failed shape validation`);t.add(r.id),n.add(r.path)}if(e.notebooks!==void 0){if(!Array.isArray(e.notebooks))throw Error(`seed manifest failed shape validation`);for(let t of e.notebooks)if(!$(t)||typeof t.notebookId!=`string`||typeof t.label!=`string`||!Lp(t.count)||!Array.isArray(t.records))throw Error(`seed manifest failed shape validation`)}return e}function zp(e){if(!Array.isArray(e))throw Error(`seed chunk is not an array`);let t=new Set;for(let n of e){if(!$(n)||typeof n.path!=`string`||!n.path||n.path.startsWith(`/`)||n.path.split(`/`).includes(`..`)||t.has(n.path)||typeof n.content!=`string`||!$(n.blocks)||!Array.isArray(n.blockIndex)||!Array.isArray(n.blockEfforts)||!Array.isArray(n.blockEquipment))throw Error(`seed chunk row failed shape validation`);t.add(n.path);for(let[e,t]of Object.entries(n.blocks))if(!$(t)||t.id!==e||!e||t.version!==1||t.sourceRevision!==1||!Lp(t.from)||!Ip(t.to)||t.from>=t.to||t.to>n.content.length||![`wod`,`query`,`widget`,`embed`].includes(String(t.kind))||(t.kind===`wod`?![`time`,`log`].includes(String(t.dialect)):t.dialect!==void 0)||t.sport!==void 0&&typeof t.sport!=`string`)throw Error(`invalid seed block range or revision`);Fe(n.content,n.blocks,1,{registeredWidgets:Ep});let e=new Set,r=Me(n.content,{registeredWidgets:Ep});for(let t of n.blockIndex){if(!$(t)||typeof t.blockId!=`string`)throw Error(`invalid seed projection`);let i=n.blocks[t.blockId];if(!$(i)||e.has(t.blockId)||typeof t.id!=`string`||typeof t.noteId!=`string`||t.id!==`${t.noteId}:${t.blockId}`||t.blockVersion!==1||t.sourceRevision!==1||t.from!==i.from||t.to!==i.to||t.dataType!==i.kind||t.rawContent!==n.content.slice(Number(i.from),Number(i.to))||typeof t.noteTitle!=`string`||typeof t.createdAt!=`number`||!Number.isFinite(t.createdAt)||t.sourcePath!==n.path||t.isStatic!==!0)throw Error(`orphan or incompatible seed projection`);if(`segmentId`in t||`segmentVersion`in t)throw Error(`incompatible seed projection`);for(let e of[`sourceId`,`routeId`,`blockContentId`])if(t[e]!==void 0&&typeof t[e]!=`string`)throw Error(`invalid seed projection metadata`);if(t.position!==void 0&&!Lp(t.position))throw Error(`invalid seed projection position`);if(i.kind===`wod`){let e=r.find(e=>e.from===i.from&&e.to===i.to);if(t.blockContentId!==De(e?.scriptBlock?.content??n.content.slice(Number(i.from),Number(i.to))))throw Error(`invalid seed workout fingerprint`)}else if(t.blockContentId!==void 0)throw Error(`non-workout seed fingerprint`);e.add(t.blockId)}if(e.size!==Object.keys(n.blocks).length)throw Error(`missing actionable seed projection`);let i=new Set;for(let t of n.blockEfforts){if(!$(t)||typeof t.blockId!=`string`||typeof t.noteId!=`string`||typeof t.effortSlug!=`string`||!t.effortSlug)throw Error(`invalid seed effort identity`);let r=n.blocks[t.blockId];if(t.id!==`${t.noteId}:${t.blockId}:${t.effortSlug}`||i.has(String(t.id))||!$(r)||r.kind!==`wod`||!e.has(t.blockId)||t.sourcePath!==n.path||t.isStatic!==!0||typeof t.createdAt!=`number`)throw Error(`orphan or incompatible seed effort link`);let a=n.blockIndex.find(e=>$(e)&&e.blockId===t.blockId);if(!$(a)||t.noteId!==a.noteId||t.blockContentId!==a.blockContentId||!Number.isFinite(t.createdAt))throw Error(`invalid seed effort metadata`);i.add(String(t.id))}let a=new Set;for(let t of n.blockEquipment){if(!$(t)||typeof t.blockId!=`string`||typeof t.noteId!=`string`||typeof t.equipmentSlug!=`string`||!t.equipmentSlug)throw Error(`invalid seed equipment identity`);let r=n.blocks[t.blockId];if(t.id!==`${t.noteId}:${t.blockId}:${t.equipmentSlug}`||a.has(String(t.id))||!$(r)||r.kind!==`wod`||!e.has(t.blockId)||t.sourcePath!==n.path||t.isStatic!==!0||typeof t.createdAt!=`number`)throw Error(`orphan or incompatible seed equipment link`);let i=n.blockIndex.find(e=>$(e)&&e.blockId===t.blockId);if(!$(i)||t.noteId!==i.noteId||t.blockContentId!==i.blockContentId||!Number.isFinite(t.createdAt))throw Error(`invalid seed equipment metadata`);a.add(String(t.id))}}return e}function Bp(e){return zp([e])[0]}async function Vp(e){let t=await crypto.subtle.digest(`SHA-1`,new TextEncoder().encode(`1b671a64-40d5-491e-99b0-da01ff1f3341:${e}`)),n=new Uint8Array(t.slice(0,16));n[6]=n[6]&15|80,n[8]=n[8]&63|128;let r=Array.from(n,e=>e.toString(16).padStart(2,`0`)).join(``);return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function Hp(e,t){if(Object.is(e,t))return!0;if(!e||!t||typeof e!=`object`||typeof t!=`object`)return!1;let n=Object.keys(e).filter(t=>Reflect.get(e,t)!==void 0),r=Object.keys(t).filter(e=>Reflect.get(t,e)!==void 0);return n.length===r.length&&n.every(n=>n in t&&Hp(Reflect.get(e,n),Reflect.get(t,n)))}function Up(e){return(e.split(`/`).at(-1)??e).replace(/\.md$/,``).replace(/[-_]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function Wp(e,t,n){let r=e.rawContent,i=0,a=r.length,o=t.length;for(;i<a&&i<o&&r[i]===t[i];)i++;for(;a>i&&o>i&&r[a-1]===t[o-1];)a--,o--;let s=Object.values(e.blocks).filter(e=>i<e.to&&a>e.from),c=Ie(s.length<=1?e.blocks:Object.fromEntries(Object.entries(e.blocks).filter(([,e])=>!s.includes(e))),[{from:i,to:a,insert:t.slice(i,o)}]),l=0;return Pe(t,{sourceRevision:n,blocks:c,registeredWidgets:Ep,createId:()=>`seed:${e.id}:r${n}:${l++}`})}async function Gp(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=new Set(s),m=e=>{let t=-1;for(let n of o)n.noteIds.has(e)&&n.rank>t&&(t=n.rank);return t},h=[];for(let[e,t]of c.entries()){if(!u.has(l[e]))continue;let r=n(t.content);r&&h.push({...r,registrySource:`bundled`,ownerNoteId:l[e],sourceId:i,sourcePath:t.path})}let g=await e.getMany(h.map(e=>e.slug)),_=h.filter((e,t)=>{let n=g[t];if(!n)return!0;if(n.registrySource!==`bundled`)return!1;let r;if(n.ownerNoteId===e.ownerNoteId||n.ownerNoteId&&p.has(n.ownerNoteId)&&m(n.ownerNoteId)<a)r=a;else{let e=n.ownerNoteId?m(n.ownerNoteId):-1;r=e>=0?e:kp(n.sourceId)}return a>=r&&!Hp(e,n)});_.length&&await e.putMany(_);let v=new Set(h.map(e=>e.slug)),y=new Map;for(let e of f){let t=d.get(e);if(!t||t.seedOrigin!==`seed`)continue;let r=n(t.rawContent)?.slug;r&&!v.has(r)&&y.set(r,e)}let b=[...y.keys()];if(b.length){let a=await e.getMany(b);for(let[s,c]of a.entries()){let a=b[s];if(!c||c.registrySource!==`bundled`)continue;let l=y.get(a);if(!(c.ownerNoteId===l&&(!c.sourceId||c.sourceId===i||c.sourceId===r)))continue;let u=!1;for(let i of o){let o=i.meta.chunks?.[r]?.noteIds??[];if(!o.length)continue;let s=await t.getMany(o);for(let t of s){if(!t||t.seedOrigin!==`seed`)continue;let r=n(t.rawContent);if(r&&r.slug===a){await e.put({...r,registrySource:`bundled`,ownerNoteId:t.id,sourceId:i.sourceId,sourcePath:t.sourcePath??``}),u=!0;break}}if(u)break}u||await e.delete(a)}}return _.length}async function Kp(e,t,n){if(!t.length)return;let r=await e.getMany(n),i=t.filter((e,t)=>!Hp(e,r[t]));i.length&&await e.putMany(i)}async function qp(e,t){Rp(t.manifest),zp(t.rows);let n={totalNotes:0,totalEfforts:0,totalEquipment:0,totalBlocks:0,skippedUserOwned:0,deleted:0,addedNotes:0,updatedNotes:0},r=await Promise.all(t.rows.map(e=>Vp(e.path))),i=new Map,a=new Map,o=new Map;for(let[e,n]of t.rows.entries()){let t=xp(n.content).slug;typeof t==`string`&&t.trim()&&(i.set(t,await Vp(`page:${t}`)),a.set(r[e],await Vp(`pagenote:${t}:${n.path}`)));for(let{label:e}of Cp(n.content))o.has(e)||o.set(e,await Vp(`tag:${e}`))}return e.transaction([`notes`,`block_revisions`,`block_index`,`block_efforts`,`block_equipment`,`page`,`page_notes`,`tags`,`note_tags`,`efforts`,`equipment`,`meta`],`readwrite`,async e=>{let s=e.readwrite(`meta`),c=new Set;for(let e of await s.getAll()){let t=We(e?.key);t!==void 0&&c.add(t)}if(!Hp(await s.get(t.meta.key),t.expectedMeta))throw Error(`Seed checkpoint changed during import`);if(t.meta.schema!==9||t.manifest.schema!==9)throw Error(`Incompatible seed schema; recreate artifacts`);let l=e.readwrite(`notes`),u=t.chunkId?t.expectedMeta?.chunks[t.chunkId]?.noteIds??[]:[],d=new Set(r),f=u.filter(e=>!d.has(e)),p=[...new Set([...r,...f])],m=await l.getMany(p),h=new Map(p.map((e,t)=>[e,m[t]])),g=t.meta.key.startsWith(`seed:`)?t.meta.key.slice(5):t.meta.key,_=kp(t.meta.key,t.meta.tier),v=[];for(let e of await s.getAll()){let n=e;if(!n||typeof n.key!=`string`||!n.key.startsWith(`seed:`)||n.key===t.meta.key)continue;let r=new Set;for(let e of Object.values(n.chunks??{}))for(let t of e.noteIds??[])r.add(t);v.push({key:n.key,sourceId:n.key.slice(5),rank:kp(n.key,n.tier),meta:n,noteIds:r})}v.sort((e,t)=>t.rank-e.rank);let y=e=>{let t=-1;for(let n of v)n.noteIds.has(e)&&n.rank>t&&(t=n.rank);return t},b=p.filter(e=>{if(c.has(e))return!1;let n=h.get(e);if(!n)return d.has(e);if(n.seedOrigin!==`seed`)return!1;let r=y(e);return d.has(e)?_>=r:r<0&&n.seedChunkId===t.chunkId}),x=new Set(b),S=e.readwrite(`block_revisions`),ee=r.filter((e,n)=>x.has(e)&&h.get(e)?.rawContent!==t.rows[n].content),te=await S.getAllFromIndexMany(`by-note`,ee),ne=new Map(ee.map((e,t)=>[e,te[t]])),re=e.readwrite(`block_index`),ie=e.readwrite(`block_efforts`),C=e.readwrite(`block_equipment`),w=e.readwrite(`note_tags`),ae=e.readwrite(`page_notes`),oe=await re.getAllFromIndexMany(`by-note`,b),se=await ie.getAllFromIndexMany(`by-note`,b),ce=await C.getAllFromIndexMany(`by-note`,b),le=await w.getAllFromIndexMany(`by-note`,b),ue=await ae.getAllFromIndexMany(`by-note`,b),de=new Map(b.map((e,t)=>[e,t])),T=e.readwrite(`tags`),fe=[...o.keys()],pe=await T.getAllFromIndexMany(`by-label`,fe),me=new Map(fe.map((e,t)=>[e,pe[t][0]])),he=[],ge=[],_e=[],ve=[],ye=[],be=[],xe=[],Se=[],Ce=[];for(let[e,s]of t.rows.entries()){let c=r[e],l=h.get(c);if(!x.has(c)){l&&l.seedOrigin!==`seed`&&n.skippedUserOwned++;continue}l?l.rawContent!==s.content&&n.updatedNotes++:n.addedNotes++,Fe(s.content,s.blocks,1,{registeredWidgets:Ep});let u=l?l.sourceRevision+(l.rawContent===s.content?0:1):1,d=0,f=ne.get(c)??[],p=l?l.rawContent===s.content?structuredClone(l.blocks):Wp(l,s.content,u):f.length?Pe(s.content,{sourceRevision:u,registeredWidgets:Ep,createId:()=>`seed:${c}:new${f.length}:${d++}`}):structuredClone(s.blocks);for(let e of Object.values(p)){let n=(ne.get(c)??[]).filter(t=>t.blockId===e.id).sort((e,t)=>t.version-e.version)[0],r=s.content.slice(e.from,e.to);if(l?.rawContent===s.content)continue;let i=n&&n.kind===e.kind&&n.rawContent===r&&n.dialect===e.dialect&&n.sport===e.sport;e.version=l?i?n.version:(n?.version??0)+1:1,(!l||!i)&&_e.push({noteId:c,blockId:e.id,version:e.version,kind:e.kind,rawContent:r,savedAt:t.meta.importedAt,...e.dialect?{dialect:e.dialect}:{},...e.sport?{sport:e.sport}:{}})}Fe(s.content,p,u,{registeredWidgets:Ep});let m=xp(s.content),g=typeof m.title==`string`&&m.title.trim()?m.title.trim():Up(s.path),_=t.chunkId?Fp(s.path,s.content,t.chunkId):void 0;if(!_)throw Error(`Unknown seed source family ${t.chunkId}`);let v=typeof m.date==`string`?m.date.match(/^(\d{4})-(\d{2})-(\d{2})$/):null,y;if(v){let e=Date.parse(`${m.date}T12:00:00Z`);if(!(Number.isFinite(e)&&new Date(e).getUTCMonth()===Number(v[2])-1&&new Date(e).getUTCDate()===Number(v[3])))throw Error(`invalid frontmatter date '${m.date}' in '${s.path}' — expected a real calendar day (YYYY-MM-DD)`);y=e}let b=s.commit??t.manifest.commit,S={...l,id:c,title:g,rawContent:s.content,sourceRevision:u,blocks:p,createdAt:t.manifest.version,...y===void 0?{}:{date:y},type:t.chunkId===`dashboards`?`dashboard`:`note`,sourceId:_,catalog:Np(t.chunkId??``),seedOrigin:`seed`,seedVersion:t.manifest.version,seedChunkId:t.chunkId??void 0,sourcePath:s.path,...b?{seedCommit:b}:{}};y===void 0&&delete S.date,Hp(S,l)||ge.push(S);let ee=new Map(Object.values(p).map(e=>[`${e.from}:${e.to}`,e])),te=new Map(s.blockIndex.map(e=>[e.blockId,e])),re=new Map;for(let e of s.blockIndex){let t=ee.get(`${e.from}:${e.to}`);if(!t||t.kind!==e.dataType)throw Error(`Orphan seed projection`);re.set(e.blockId,t.id);let n={...e,id:`${c}:${t.id}`,noteId:c,blockId:t.id,blockVersion:t.version,sourceRevision:u,noteTitle:g,sourceId:_,sourcePath:s.path,rawContent:s.content.slice(t.from,t.to)},r=oe[de.get(c)].find(e=>e.id===n.id);(!r||r.isStatic===!0)&&xe.push(n)}for(let e of s.blockEfforts){let t=re.get(e.blockId);if(!t||te.get(e.blockId)?.dataType!==`wod`)throw Error(`Orphan seed effort link`);let n={...e,id:`${c}:${t}:${e.effortSlug}`,noteId:c,blockId:t,sourcePath:s.path},r=se[de.get(c)].find(e=>e.id===n.id);(!r||r.isStatic===!0)&&Se.push(r?{...n,createdAt:r.createdAt}:n)}for(let e of s.blockEquipment){let t=re.get(e.blockId);if(!t||te.get(e.blockId)?.dataType!==`wod`)throw Error(`Orphan seed equipment link`);let n={...e,id:`${c}:${t}:${e.equipmentSlug}`,noteId:c,blockId:t,sourcePath:s.path},r=ce[de.get(c)].find(e=>e.id===n.id);(!r||r.isStatic===!0)&&Ce.push(r?{...n,createdAt:r.createdAt}:n)}let ie=de.get(c),C=new Set;for(let e of Cp(s.content)){let n=me.get(e.label);n?e.type&&!n.type&&(n={...n,type:e.type},he.push(n),me.set(e.label,n)):(n={id:o.get(e.label),label:e.label,type:e.type,createdAt:t.meta.importedAt},he.push(n),me.set(e.label,n)),!C.has(n.id)&&(C.add(n.id),le[ie].find(e=>e.tagId===n.id)||be.push({id:`${c}:${n.id}`,noteId:c,tagId:n.id}))}for(let e of le[ie])C.has(e.tagId)||await w.delete(e.id);let ae=m.slug;if(typeof ae==`string`&&i.has(ae)){let e=i.get(ae);ve.push({id:e,slug:ae,title:Up(s.path),createdAt:t.manifest.version}),ye.push({id:a.get(c),pageId:e,noteId:c,createdAt:t.manifest.version})}n.totalNotes++,n.totalBlocks+=Object.keys(p).length}let we=new Set(xe.map(e=>e.id)),Te=new Set(Se.map(e=>e.id)),E=new Set(Ce.map(e=>e.id));for(let e of oe)for(let t of e)t.isStatic===!0&&!we.has(t.id)&&await re.delete(t.id);for(let e of se)for(let t of e)t.isStatic===!0&&!Te.has(t.id)&&await ie.delete(t.id);for(let e of ce)for(let t of e)t.isStatic===!0&&!E.has(t.id)&&await C.delete(t.id);for(let e of f){if(!x.has(e)||!h.get(e))continue;let t=de.get(e);await l.delete(e);for(let e of le[t])await w.delete(e.id);for(let e of ue[t])await ae.delete(e.id);n.deleted++}return t.chunkId===`efforts`&&(n.totalEfforts=await Gp(e.readwrite(`efforts`),l,rf,`efforts`,g,_,v,u,t.rows,r,x,h,p)),t.chunkId===`equipment`&&(n.totalEquipment=await Gp(e.readwrite(`equipment`),l,af,`equipment`,g,_,v,u,t.rows,r,x,h,p)),ge.length&&await l.putMany(ge),_e.length&&await S.putMany(_e),await Kp(re,xe,xe.map(e=>e.id)),await Kp(ie,Se,Se.map(e=>e.id)),await Kp(C,Ce,Ce.map(e=>e.id)),he.length&&await T.putMany([...new Map(he.map(e=>[e.id,e])).values()]),be.length&&await w.putMany(be),await Kp(e.readwrite(`page`),ve,ve.map(e=>e.id)),await Kp(ae,ye,ye.map(e=>e.id)),await s.put(t.meta),n})}var Jp=class extends Error{status;constructor(e,t){super(e),this.status=t,this.name=`SeedSourceError`}},Yp=class{baseUrl;fetchImpl;constructor(e,t=fetch.bind(globalThis)){this.baseUrl=e,this.fetchImpl=t}async fetchManifest(){let e=await this.fetchImpl(`${this.baseUrl}manifest.json`,{cache:`no-cache`});if(!e.ok)throw new Jp(`seed manifest fetch failed: HTTP ${e.status}`,e.status);return Rp(await e.json())}async fetchChunk(e){let t=await this.fetchImpl(`${this.baseUrl}${e}`);if(!t.ok)throw new Jp(`seed chunk fetch failed: HTTP ${t.status} for ${e}`,t.status);return await t.json()}},Xp=class{storageInstance;constructor(e){this.storageInstance=e}async getSeedMeta(e){return await this.storageInstance.readonly(`meta`).get(e)}async getNoteCommits(e){let t=await this.storageInstance.readonly(`notes`).getMany(e),n=new Map;for(let r=0;r<e.length;r++){let i=t[r];n.set(e[r],i?.seedCommit)}return n}async putSeedMeta(e,t){await this.storageInstance.transaction([`meta`],`readwrite`,async n=>{let r=n.readwrite(`meta`),i=await r.get(e.key);if(t!==void 0&&JSON.stringify(i??null)!==JSON.stringify(t))throw Error(`Seed checkpoint changed during claim`);await r.put(e)})}applyChunk(e){return qp(this.storageInstance,e)}async removeSourceContent(e){return await this.storageInstance.transaction([`notes`,`attachments`,`note_tags`,`block_index`,`block_efforts`,`block_equipment`,`page_notes`,`efforts`,`equipment`,`meta`],`readwrite`,async t=>{let n=new Set,r=[];for(let[t,i]of Object.entries(e.chunks))if(i.noteIds?.length)for(let e of i.noteIds)n.add(e);else r.push(t);if(r.length)for(let e of await t.readwrite(`notes`).getAll())e.seedOrigin===`seed`&&e.seedChunkId&&r.includes(e.seedChunkId)&&n.add(e.id);let i=t.readwrite(`meta`),a=[];for(let t of await i.getAll()){let n=t;if(!n||typeof n.key!=`string`||!n.key.startsWith(`seed:`)||n.key===e.key)continue;let r=new Set;for(let e of Object.values(n.chunks??{}))for(let t of e.noteIds??[])r.add(t);a.push({key:n.key,sourceId:n.key.slice(5),rank:kp(n.key,n.tier),meta:n,noteIds:r})}a.sort((e,t)=>t.rank-e.rank);let o=e=>a.some(t=>t.noteIds.has(e)),s=e.key.startsWith(`seed:`)?e.key.slice(5):e.key,c=t.readwrite(`notes`),l=0,u=new Set;for(let r of n){if(o(r))continue;let n=await c.get(r);if(!n||n.seedOrigin!==`seed`||n.seedChunkId&&!e.chunks[n.seedChunkId])continue;n.sourcePath&&u.add(n.sourcePath),await c.delete(r);let i=t.readwrite(`attachments`);for(let e of await i.getAllFromIndex(`by-note`,r))await i.delete(e.id);let a=t.readwrite(`note_tags`);for(let e of await a.getAllFromIndex(`by-note`,r))await a.delete(e.id);let s=t.readwrite(`block_index`);for(let e of await s.getAllFromIndex(`by-note`,r))await s.delete(e.id);let d=t.readwrite(`block_efforts`);for(let e of await d.getAllFromIndex(`by-note`,r))await d.delete(e.id);let f=t.readwrite(`block_equipment`);for(let e of await f.getAllFromIndex(`by-note`,r))await f.delete(e.id);let p=t.readwrite(`page_notes`);for(let e of await p.getAllFromIndex(`by-note`,r))await p.delete(e.id);l++}let d=[{storeName:`efforts`,familyPathPrefix:`markdown/efforts/`,parse:rf},{storeName:`equipment`,familyPathPrefix:`markdown/equipment/`,parse:af}];for(let{storeName:e,familyPathPrefix:r,parse:i}of d){let o=t.readwrite(e);for(let t of await o.getAll()){if(t.registrySource!==`bundled`||!(t.sourceId===s||t.ownerNoteId!==void 0&&n.has(t.ownerNoteId)&&(!t.sourceId||t.sourceId===e)||t.sourcePath!==void 0&&t.sourcePath.startsWith(r)&&u.has(t.sourcePath)))continue;let l=!1;for(let n of a){let r=n.meta.chunks?.[e]?.noteIds??[];for(let e of r){let r=await c.get(e);if(!r||r.seedOrigin!==`seed`)continue;let a=i(r.rawContent);if(a&&a.slug===t.slug){await o.put({...a,registrySource:`bundled`,ownerNoteId:r.id,sourceId:n.sourceId,sourcePath:r.sourcePath??``}),l=!0;break}}if(l)break}l||await o.delete(t.slug)}}return await i.delete(e.key),l})}},Zp=class{storage;source;sourceId;now;constructor(e,t,n,r=Date.now){this.storage=e,this.source=t,this.sourceId=n,this.now=r}async applyAll(e={}){let t=Rp(await this.source.fetchManifest()),n=jp(this.sourceId),r=await this.storage.getSeedMeta(n),i=r?.schema===9?r:void 0,a=i??Mp(n);if(t.version<a.seedVersion)throw Error(`Seed manifest is older than the stored checkpoint`);let o=t.version!==a.seedVersion||t.builtAt!==a.builtAt,s=t.chunks.filter(t=>e.notebookIds&&!e.notebookIds.includes(t.id)?!1:e.forceAll||o||a.chunks[t.id]?.sha256!==t.sha256);s.sort((e,t)=>Number(t.id===Ap)-Number(e.id===Ap));let c=Object.keys(a.chunks).filter(e=>!t.chunks.some(t=>t.id===e)),l={status:`current`,appliedChunks:0,totalNotes:0,totalEfforts:0,totalEquipment:0,totalBlocks:0,skippedUserOwned:0,deleted:0,addedNotes:0,updatedNotes:0};if(!s.length&&!c.length&&!o)return l;l.status=`imported`;let u=(t,n,r,i,a)=>e.onProgress?.({phase:t,chunkId:n,completedChunks:l.appliedChunks,totalChunks:s.length,totalNotes:l.totalNotes,totalEfforts:l.totalEfforts,totalEquipment:l.totalEquipment,totalBlocks:l.totalBlocks,skippedUserOwned:l.skippedUserOwned,deleted:l.deleted,addedNotes:l.addedNotes,updatedNotes:l.updatedNotes,...r===void 0?{}:{recordId:r},...i===void 0?{}:{completedRecords:i},...a===void 0?{}:{totalRecords:a}});for(let n=0;n<s.length;){let r=s.slice(n,n+(s[n]?.id===`canvas`?1:4));for(let n of r){let r,o=t.notebooks?.find(e=>e.notebookId===n.id)?.records??n.records;if(e.granularRecords&&o&&o.length>0){let t=!e.forceAll&&this.storage.getNoteCommits?await this.storage.getNoteCommits(o.map(e=>e.uuid)):void 0,i=t?o.filter(e=>t.get(e.uuid)!==e.commit):o;if(i.length===0&&!e.forceAll){l.appliedChunks++;continue}let a=[],s=0;for(let e of i){u(`fetching`,n.id,e.uuid,s,i.length);let t=await this.source.fetchChunk(e.recordPath),r=Array.isArray(t)?zp(t):[Bp(t)];a.push(...r),s++}r=a}else if(u(`fetching`,n.id),r=zp(await this.source.fetchChunk(n.path)),r.length!==n.count)throw Error(`Seed chunk count mismatch`);let s=await Promise.all(r.map(e=>Vp(e.path))),c={...a,chunks:{...a.chunks,[n.id]:{sha256:n.sha256,noteIds:s}},importedAt:this.now()};u(`applying`,n.id);let d=await this.storage.applyChunk({chunkId:n.id,rows:r,manifest:t,expectedMeta:i,meta:c});l.totalNotes+=d.totalNotes,l.totalEfforts+=d.totalEfforts,l.totalEquipment+=d.totalEquipment,l.totalBlocks+=d.totalBlocks,l.skippedUserOwned+=d.skippedUserOwned,l.deleted+=d.deleted,l.addedNotes+=d.addedNotes,l.updatedNotes+=d.updatedNotes,l.appliedChunks++,a=c,i=c,u(`committed`,n.id),n.id===`canvas`&&e.onFirstPaintApplied?.()}n+=r.length}for(let e of c){let n={...a.chunks};delete n[e];let r={...a,chunks:n,importedAt:this.now()},o=await this.storage.applyChunk({chunkId:e,rows:[],manifest:t,expectedMeta:i,meta:r});l.deleted+=o.deleted,a=r,i=r}let d={...a,schema:9,seedVersion:t.version,builtAt:t.builtAt,importedAt:this.now()};return await this.storage.applyChunk({chunkId:null,rows:[],manifest:t,expectedMeta:i,meta:d}),u(`finalizing`,null),l}};function Qp(e,t){return e===void 0||e<=0||t>e?`import`:t===e?`current`:`server-stale`}function $p(e,t){return e?.schema!==void 0&&e.schema!==9?!1:e?.seedVersion!=null&&e.seedVersion>0&&e.seedVersion===t}function em(e){return(e instanceof Error?e.message:String(e)).replace(/(authToken["'=:\s]+)[^&\s,"']+/gi,`$1…`).replace(/(Bearer\s+)[\w.-]+/gi,`$1…`).replace(/https?:\/\/[^\s]+/gi,e=>{try{let t=new URL(e);return`${t.protocol}//${t.host}/…`}catch{return`…`}}).slice(0,300)}function tm(e,t,n){let r=e?.claim;return!!r&&r.owner!==t&&n-r.at<45e3}async function nm(e,t,n={}){let{storage:r,owner:i}=t,a=t.now,o=jp(e.id),s={outcome:`current`,error:null,manifestChecked:!1,hadCheckpoint:!1};try{let c=await r.getSeedMeta(o);if(s.hadCheckpoint=(c?.seedVersion??0)>0,!t.force&&!t.probeManifests&&$p(c,e.embeddedVersion))return s.outcome=`current`,s;if(tm(c,i,a()))return s.outcome=`busy`,s;let l=Rp(await e.source.fetchManifest());s.manifestChecked=!0;let u=t.force?`import`:Qp(c?.seedVersion,l.version);if(u===`server-stale`)return s.outcome=`server-stale`,s;if(c&&c.schema!==9)throw Error(`Incompatible seed checkpoint; recreate storage`);if(t.background&&!e.autoSyncOn)return s.outcome=u===`import`?`update-pending`:`current`,s;if(!t.force&&u===`current`&&c?.schema===9&&c.builtAt===l.builtAt)return s.outcome=`current`,s;let d={...c??Mp(o),...e.tier?{tier:e.tier}:{},claim:{owner:i,at:a()}};await r.putSeedMeta(d,c??null);try{let i=await new Zp(r,e.source,e.id,a).applyAll({forceAll:t.force===!0,onFirstPaintApplied:()=>n.onFirstPaint?.(),onProgress:n.onProgress,notebookIds:e.notebookIds,granularRecords:e.granularRecords});s.outcome=`imported`,i.status===`imported`&&(s.applied=!0,s.importedVersion=l.version,s.added=i.addedNotes,s.updated=i.updatedNotes)}finally{let e=await r.getSeedMeta(o);e?.claim?.owner===i&&await r.putSeedMeta({...e,claim:null},e)}return s}catch(t){return console.warn(`[seedSync] ${e.id} seed sync failed`,t),s.outcome=`error`,s.error=em(t),s}}let rm=self;rm.onmessage=e=>{if(e.data.type!==`run`)return;let t=e.data;(async()=>{let e=new Xp(new Su({dbName:t.dbName,...t.userId?{getUserId:()=>t.userId}:{}})),n=[];for(let r of t.sources){let i=await nm({id:r.id,label:r.label,source:new Yp(r.url),embeddedVersion:r.embeddedVersion,autoSyncOn:r.autoSyncOn,...r.tier?{tier:r.tier}:{},notebookIds:r.notebookIds,granularRecords:r.granularRecords??!0},{storage:e,owner:t.owner,now:Date.now,force:t.force,probeManifests:t.probeManifests,background:t.background},{onProgress:e=>rm.postMessage({type:`progress`,sourceId:r.id,progress:e}),onFirstPaint:()=>rm.postMessage({type:`first-paint`,sourceId:r.id})});rm.postMessage({type:`source-result`,sourceId:r.id,result:i}),n.push(i.outcome)}rm.postMessage({type:`done`,outcomes:n})})()}})();
|
|
16
|
-
//# sourceMappingURL=seedSync.worker-
|
|
15
|
+
`:t===`r`?`\r`:t===`t`?` `:t):n)}function Jd(e){let t=e.match(Gd);if(!t)return{meta:{},body:e};let n=t[1].split(/\r?\n/),r={};for(let e=0;e<n.length;e++){let t=n[e].match(/^([A-Za-z][\w.-]*)\s*:(.*)$/);if(!t)continue;let i=t[1],a=t[2].trim();if(a===``){let t=[];for(;e+1<n.length;){let r=n[e+1].match(/^\s+-\s+(.+)$/);if(!r)break;t.push(qd(r[1].trim())),e++}r[i]=t.length>0?t:``}else{let e=/^(['"])(.*)\1$/.test(a),t=qd(a),n=Number(t);r[i]=!e&&t!==``&&!isNaN(n)?n:t}}return{meta:r,body:e.slice(t[0].length)}}function Yd(e,t){let n=e[t];return typeof n==`string`||typeof n==`number`?n:void 0}function Xd(e,t){let n=e[t];return n===void 0||typeof n==`string`&&n===`[]`?[]:Array.isArray(n)?n:void 0}function Zd(e){return e===`true`?!0:e===`false`?!1:e!==``&&!Number.isNaN(Number(e))?Number(e):qd(e)}function Qd(e,t){let n=e.findIndex(e=>RegExp(`^${t}:\\s*$`).test(e));if(n===-1)return;let r={},i=null;for(let t=n+1;t<e.length;t++){let n=e[t];if(/^\S/.test(n))break;let a=n.trim();if(!a||a.startsWith(`#`))continue;let o=n.length-n.trimStart().length,s=a.match(/^([\w.-]+):\s*(.*)$/);if(!s)continue;let[,c,l]=s;o===2?l===``?(i=c,r[c]={}):(i=null,r[c]=Zd(l)):o>=4&&i!==null&&(r[i][c]=Zd(l))}return Object.keys(r).length>0?r:void 0}function $d(e){if(!e)return;let t=qd(e.trim()).toLowerCase();if(Id(t))return t;console.warn(`[definition-markdown] unknown discipline '${e}' — expected one of the canonical values; treating as unset`)}function ef(e,t){let n=[],r=e===void 0?``:String(e);return r?Kd.test(r)||n.push(`Invalid slug: must be lowercase letters, numbers, and hyphens only`):n.push(`Missing required field: slug`),(t===void 0||!String(t).trim())&&n.push(`Missing required field: label`),n}function tf(e,t){let n=[];for(let r of e)r.trim()?t===`equipment`&&!Kd.test(r)&&n.push(`Invalid ${t}: '${r}' must be a canonical slug (lowercase letters, numbers, hyphens)`):n.push(`Invalid ${t}: blank entries are not allowed`);let r=e.find((t,n)=>e.indexOf(t)!==n);return r!==void 0&&n.push(`Invalid ${t}: duplicate entry '${r}'`),n}function nf(e){return e===void 0?`Missing required field: baseAttributes.met`:typeof e!=`number`||!Number.isFinite(e)||e<=0?`Invalid baseAttributes.met: must be a positive number`:null}function rf(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return null;let n=t[1].split(/\r?\n/),{meta:r,body:i}=Jd(e),a=Yd(r,`type`);if(a!==void 0&&a!==`effort`)return null;let o=Yd(r,`id`),s=Yd(r,`slug`),c=Yd(r,`label`),l=Xd(r,`aliases`),u=Xd(r,`equipment`);if(l===void 0||u===void 0||ef(s,c).length>0||tf(l,`aliases`).length>0||u.length>0&&tf(u,`equipment`).length>0)return null;let d=Qd(n,`baseAttributes`)??{};if(nf(d.met)!==null)return null;let f=d.met,p=$d(typeof d.discipline==`string`?d.discipline:void 0),m=d.intensityTier,h=typeof d.disciplineFactor==`number`&&Number.isFinite(d.disciplineFactor)?d.disciplineFactor:void 0,g=Qd(n,`hints`),_=Qd(n,`derivation`),v=i.trim();return{id:String(o??``),slug:String(s),label:String(c),aliases:l,baseAttributes:{met:f,...p?{discipline:p}:{},...h===void 0?{}:{disciplineFactor:h},...m?{intensityTier:m}:{}},registrySource:`bundled`,...u.length>0?{equipment:u}:{},...v?{body:v}:{},...g?{hints:g}:{},..._?{derivation:_}:{}}}function af(e){let{meta:t,body:n}=Jd(e);if(Yd(t,`type`)!==`equipment`)return null;let r=Yd(t,`id`),i=Yd(t,`slug`),a=Yd(t,`label`),o=Xd(t,`aliases`);if(r===void 0||o===void 0||ef(i,a).length>0||tf(o,`aliases`).length>0)return null;let s=n.trim();return{id:String(r),slug:String(i),label:String(a),aliases:o,registrySource:`bundled`,...s?{body:s}:{}}}let of=[{id:`fixture-running`,slug:`running-6-mph`,label:`Running (6 mph)`,aliases:[`run`,`jogging`,`treadmill`],baseAttributes:{met:9.8,discipline:`running`,intensityTier:`moderate`},registrySource:`bundled`},{id:`fixture-rowing`,slug:`rowing`,label:`Rowing`,aliases:[`row`,`rower`,`erg`],baseAttributes:{met:7,discipline:`rowing`,intensityTier:`high`},registrySource:`bundled`},{id:`fixture-back-squat`,slug:`back-squat`,label:`Back Squat`,aliases:[`squat`,`barbell squat`,`bs`],baseAttributes:{met:6,discipline:`strength`,intensityTier:`moderate`},registrySource:`bundled`},{id:`fixture-burpee`,slug:`burpee`,label:`Burpee`,aliases:[`burpees`],baseAttributes:{met:10,discipline:`bodyweight`,intensityTier:`high`},registrySource:`bundled`},{id:`fixture-plank`,slug:`plank`,label:`Plank`,aliases:[`planks`],baseAttributes:{met:3.5,discipline:`bodyweight`,intensityTier:`low`},registrySource:`bundled`}];[...of],of.length;var sf=class e{started;ended;constructor(e,t){this.started=e,this.ended=t}static fromJSON(t){return new e(t.started,t.ended)}static fromDates(t,n){return new e(t.getTime(),n?.getTime())}get duration(){let e=this.ended??Date.now();return Math.max(0,e-this.started)}get isOpen(){return this.ended===void 0}get startDate(){return new Date(this.started)}get endDate(){return this.ended?new Date(this.ended):void 0}},cf=class e{_underlying;_frozenTime;constructor(e,t){this._underlying=e,this._frozenTime=t}get currentDate(){return this._frozenTime}now(){return this._frozenTime}nowMs(){return this._frozenTime.getTime()}get elapsed(){return this._underlying.elapsed}get isRunning(){return this._underlying.isRunning}get spans(){return this._underlying.spans}start(){return this._underlying.start()}stop(){return this._underlying.stop()}static at(t,n){return new e(t,n)}static now(t){return new e(t,t.currentDate)}};let lf={now:()=>new Date,nowMs:()=>Date.now()};var uf=class{options;now;type=`next`;constructor(e,t=lf){this.options=e,this.now=t}do(e){if(!this.validateRuntimeState(e))return[];let t=e.stack.current;if(!t)return[];try{let n={...e.clock?{clock:cf.now(e.clock)}:void 0,...this.options};return t.next(e,n)}catch(n){return e.errors&&Array.isArray(e.errors)&&e.errors.push({error:n,source:`NextAction`,timestamp:this.now.now(),blockKey:t.key.toString()}),[]}}validateRuntimeState(e){return!!e.stack}};let df=e=>String(e).padStart(2,`0`),ff=e=>String(e).padStart(3,`0`);function pf(e){return`${df(e.getHours())}:${df(e.getMinutes())}:${df(e.getSeconds())}.${ff(e.getMilliseconds())}`}function mf(e){return(e+` `).slice(0,5)}function hf(e){return(e+` `.repeat(24)).slice(0,24)}function gf(e){if(!e)return`─`.repeat(52);let t=` ${e} `,n=Math.max(0,Math.floor((52-t.length)/2)),r=Math.max(0,52-t.length-n);return`${`─`.repeat(n)}${t}${`─`.repeat(r)}`}var _f=class{_console=console;_enabled=!1;_history=[];_maxHistory=500;EVENT_STYLES={BOOT:`color: #3b82f6; font-weight: bold`,PUSH:`color: #a855f7; font-weight: bold`,POP:`color: #64748b`,NEXT:`color: #b45309; font-weight: bold`,EVNT:`color: #a855f7; font-weight: bold`,OUT:`color: #16a34a; font-weight: bold`,MEM:`color: #f59e0b`,TIME:`color: #3b82f6; font-weight: bold`,HALT:`color: #ef4444; font-weight: bold`,WARN:`color: #f59e0b; font-weight: bold`,ERR:`color: #ef4444; font-weight: bold`};constructor(){if(typeof window<`u`){let e=window;this._enabled=!!e.__WOD_DEBUG__}}get enabled(){return this._enabled}enable(){this._enabled=!0,this.writeLine(`BOOT`,`runtime:ready`,`logging enabled`)}disable(){this.writeLine(`HALT`,`runtime:logger`,`logging disabled`),this._enabled=!1}getHistory(){return[...this._history]}clearHistory(){this._history=[]}logBoot(e){this._enabled&&this.writeLine(`BOOT`,`runtime:ready`,e)}logPush(e,t,n){if(!this._enabled)return;let r=this.getBehaviorNames(e),i=[`d${n??`?`} ${e.blockType??`block`}`,r.length>0?`behaviors [${r.join(`, `)}]`:void 0,t?`parent ${t.slice(0,8)}`:void 0].filter(Boolean).join(` · `);this.writeLine(`PUSH`,e.label||e.blockType||`Block`,i),this.addToHistory(`info`,`push`,`PUSH ${e.label}`,{key:e.key.toString(),parentKey:t,behaviors:r,sourceIds:e.sourceIds})}logPop(e,t,n){this._enabled&&(this.writeLine(`POP`,e.label||e.blockType||`Block`,`d${n??`?`}${t?` `+t:``}`),this.addToHistory(`info`,`pop`,`POP ${e.label}`,{key:e.key.toString(),reason:t}))}logNext(e,t){if(!this._enabled||t.length===0)return;let n=t.map(e=>e.type||e.constructor?.name||`Action`);this.writeLine(`NEXT`,e.label||`Block`,`${n.length} action(s): [${n.join(`, `)}]`),this.addToHistory(`info`,`next`,`NEXT ${e.label}`,{key:e.key.toString(),actions:n})}logEvent(e,t){if(!this._enabled||t.length===0)return;let n=t.map(e=>e.type||e.constructor?.name||`Action`);this.writeLine(`EVNT`,e.name,`${n.length} action(s): [${n.join(`, `)}]`),this.addToHistory(`info`,`event`,`EVENT ${e.name}`,{eventName:e.name,eventData:e.data,actions:n})}logOutput(e){if(!this._enabled||e.outputType!==`segment`&&e.outputType!==`milestone`)return;let t=e.text||this.outputSubject(e.metrics);t&&(this.writeLine(`OUT`,t,e.outputType),this.addToHistory(`info`,`output`,`OUT ${t}`,{outputType:e.outputType,label:t}))}outputSubject(e){if(e){for(let t of e)if(t.type===`label`)return t.image||(t.value==null?``:String(t.value))||void 0}}logMemoryUpdate(e,t,n){if(!this._enabled)return;let r=typeof n==`object`&&n?this.summarizeObject(n):n;this.writeLine(`MEM`,t,`[${e.slice(0,8)}] ${vf(r)}`),this.addToHistory(`debug`,`memory`,`MEMORY ${t}`,{blockKey:e,memoryType:t,value:r})}logAction(e,t){if(!this._enabled)return;let n=e.type||e.constructor?.name||`Action`;this.writeLine(`EVNT`,n,`d${t}`)}logMessage(e,t,n,r){this._enabled&&(this.writeLine(e===`error`?`ERR`:e===`warn`?`WARN`:`EVNT`,t,n),this.addToHistory(e,t,n,r))}logAlways(e,t,n,r){this.writeLine(e===`error`?`ERR`:e===`warn`?`WARN`:`EVNT`,t,n),this.addToHistory(e,t,n,r)}logRule(e){this._enabled&&this._console.log(`%c${gf(e)}`,`color: #94a3b8`)}writeLine(e,t,n){let r=pf(new Date);this._console.log(`${r} %c${mf(e)}%c ${hf(t)}${n?` `+n:``}`,this.EVENT_STYLES[e],`color: inherit`)}getBehaviorNames(e){let t=e.behaviors;return!t||!Array.isArray(t)?[]:t.map(e=>e.constructor?.name||`Behavior`)}summarizeObject(e){let t={};for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?`[${r.length} items]`:typeof r==`object`&&r?`{...}`:r;return t}addToHistory(e,t,n,r){this._history.push({timestamp:new Date,level:e,category:t,message:n,data:r}),this._history.length>this._maxHistory&&(this._history=this._history.slice(-this._maxHistory))}};function vf(e){try{return JSON.stringify(e)??``}catch{return String(e)}}let yf=new _f;typeof window<`u`&&(window.RuntimeLogger=yf);var bf=class{options;type=`pop-block`;constructor(e={}){this.options=e}do(e){let t=e.stack.current;if(!t)return[];let n=this.options.createdAt??e.clock.currentDate,r={...this.options,createdAt:n};t.executionTiming&&(t.executionTiming.createdAt=n),!t.isComplete&&typeof t.markComplete==`function`&&(t.markComplete(`forced-pop`),yf.logPop(t,`forced-pop (incomplete block popped without next)`,e.stack.blocks.length));let i=t.unmount(e,r)??[],a=e.stack.pop();return a?(a.dispose(e),a.context?.release?.(),a.completionReason!==`forced-pop`&&yf.logPop(a,a.completionReason,e.stack.blocks.length+1),e.stack.current?[...i,new uf(r,e.nowProvider)]:i):[]}},xf=class{_memory;ownerId;type;visibility;_logger;id=Hd();_subscriptions=[];constructor(e,t,n,r=`private`,i){this._memory=e,this.ownerId=t,this.type=n,this.visibility=r,this._logger=i}value(){return this.get()}get subscriptions(){return this._subscriptions}get(){return this._memory.get(this)}set(e){this._memory.set(this,e)}subscribe(e,t){let n=Hd(),r={id:n,callback:e,memoryId:this.id,createdAt:new Date};return this._subscriptions.push(r),t?.immediate&&e(this.get(),void 0),()=>this.unsubscribe(n)}unsubscribe(e){let t=this._subscriptions.findIndex(t=>t.id===e);t>=0&&this._subscriptions.splice(t,1)}hasSubscribers(){return this._subscriptions.length>0}notifySubscribers(e,t){for(let n of this._subscriptions)try{n.callback(e,t)}catch(e){this._logger?.error?.(`Error in memory subscription callback:`,e)}}},Sf=class{_references=[];allocate(e,t,n,r=`private`){let i=new xf(this,t,e,r);return this._references.push({ref:i,data:n}),i}get(e){return this._references.find(t=>t.ref.id===e.id)?.data??void 0}set(e,t){let n=this._references.find(t=>t.ref.id===e.id);if(!n)throw Error(`Invalid memory reference: ${e.id}`);let r=n.data;n.data=t,e.hasSubscribers()&&e.notifySubscribers(t,r)}search(e){return this._references.map(e=>e.ref).filter(t=>!(e.id!==null&&e.id!==void 0&&e.id!==t.id||e.ownerId!==null&&e.ownerId!==void 0&&e.ownerId!==t.ownerId||e.type!==null&&e.type!==void 0&&e.type!==t.type||e.visibility!==null&&e.visibility!==void 0&&e.visibility!==t.visibility))}release(e){let t=this._references.findIndex(t=>t.ref.id===e.id);if(t>=0){let e=this._references[t],n=e.data,r=e.ref;r instanceof xf&&r.hasSubscribers()&&r.notifySubscribers(void 0,n),this._references.splice(t,1)}}};let Cf=function(e){return e.DISPLAY_STACK_STATE=`displaystack`,e.ACTION_STACK_STATE=`actions`,e.TIMER_PREFIX=`timer:`,e.HANDLER_PREFIX=`handler:`,e.METRIC_REPS=`metric:reps`,e.ANCHOR=`anchor`,e}({});var wf=class{timestamp;constructor(e=lf){this.timestamp=e.now()}},Tf=class extends wf{name=`memory:allocate`;data;constructor(e,t,n=lf){super(n),this.data={ref:e,value:t}}},Ef=class extends wf{name=`memory:set`;data;constructor(e,t,n,r=lf){super(r),this.data={ref:e,value:t,oldValue:n}}},Df=class extends wf{name=`memory:release`;data;constructor(e,t,n=lf){super(n),this.data={ref:e,lastValue:t}}},Of=class{runtime;ownerId;exerciseId;_references=[];_released=!1;_memory;constructor(e,t,n=``,r=[],i){this.runtime=e,this.ownerId=t,this.exerciseId=n,this._references=[...r],this._memory=i??new Sf}get references(){return[...this._references]}allocate(e,t,n=`private`){if(this._released)throw Error(`Cannot allocate on released context (ownerId: ${this.ownerId})`);let r=e,i=this._memory.allocate(r,this.ownerId,t,n);return this._references.push(i),this.runtime.eventBus.dispatch(new Tf(i,t,this.runtime.nowProvider),this.runtime),i}get(e){let t=e;return this._references.find(e=>e.type===t)}getAll(e){let t=e;return this._references.filter(e=>e.type===t)}set(e,t){if(this._released)throw Error(`Cannot set on released context (ownerId: ${this.ownerId})`);let n=e.get();this._memory.set(e,t),this.runtime.eventBus.dispatch(new Ef(e,t,n,this.runtime.nowProvider),this.runtime)}release(){if(!this._released){for(let e of this._references){let t=e.value();this._memory.release(e),this.runtime.eventBus.dispatch(new Df(e,t,this.runtime.nowProvider),this.runtime)}this._references=[],this._released=!0}}isReleased(){return this._released}getOrCreateAnchor(e){if(this._released)throw Error(`Cannot access anchor on released context (ownerId: ${this.ownerId})`);let t;for(let n of this.runtime.stack.blocks){let r=n.context.references.find(t=>t.id===e&&t.type===Cf.ANCHOR);if(r){t=r;break}}if(t)return this._references.find(e=>e.id===t.id)||this._references.push(t),t;let n=this._memory.allocate(Cf.ANCHOR,this.ownerId,void 0,`public`);return n.id=e,this._references.push(n),n}};let kf=`time`;function Af(e){return[new sf(e)]}function jf(e,t){return e.map((n,r)=>r===e.length-1&&n.ended===void 0?new sf(n.started,t):n)}function Mf(e,t){return[...e,new sf(t)]}function Nf(e){return e.getMemoryByTag(kf)[0]?.metrics[0]?.value}function Pf(e,t){let n=e.getMemoryByTag(kf)[0]?.metrics[0],r=n?.value;if(!r||!n)return!1;let i=t(r.spans,e.clock.currentDate.getTime());return e.updateMemory(kf,[{...n,value:{...r,spans:i}}]),!0}var Ff=class{targetBlockKey;type=`clear-children`;constructor(e){this.targetBlockKey=e}do(e){let t=[],n=0;for(;n<20;){let r=e.stack.current;if(!r||r.key.toString()===this.targetBlockKey)break;let i=new bf().do(e);for(let e of i)e.type!==`next`&&t.push(e);n++}return n>=20&&e.options.logger?.error?.(`[ClearChildrenAction] Max iterations reached, possible infinite loop`,Error(`Exceeded 20 pop iterations for target ${this.targetBlockKey}`)),e.stack.current?.key.toString()===this.targetBlockKey&&t.push(new uf(void 0,e.nowProvider)),t}};function If(e,t){let n=0;for(let r of e.spans){let e=r.ended??t;n+=e-r.started}return n}function Lf(e){let t=Math.floor(e/1e3);return`${Math.floor(t/60)}:${(t%60).toString().padStart(2,`0`)}`}var Rf=class{current;total;sourceBlockKey;timestamp;type=T.CurrentRound;origin=`tracked`;value;image;constructor(e,t,n,r,i){this.current=e,this.total=t,this.sourceBlockKey=n,this.timestamp=r,this.value=e,this.image=i??(t===void 0?`Round ${e}`:`Round ${e} of ${t}`)}},zf=class{config;constructor(e){this.config=e}subscriptions=[];isPaused=!1;onMount(e){let t=e.clock.currentDate.getTime(),n=this.config.label??e.block.label,r=this.config.role===`hidden`?`auto`:this.config.role??`primary`,i=this.config.mode??`complete-block`;return e.pushMemory(`time`,[this.createFragment(e,{spans:Af(t),direction:`down`,durationMs:this.config.durationMs,label:n,role:r})]),this.config.durationMs<=0?(this.handleExpiry(e,i),[new Ff(e.block.key.toString())]):(this.subscriptions.push(e.subscribe(`tick`,(e,t)=>{let n=Nf(t);return!n||n.direction!==`down`||n.durationMs===void 0||i===`complete-block`&&t.block.isComplete||If(n,t.clock.currentDate.getTime())<n.durationMs?[]:(this.handleExpiry(t,i),[new Ff(t.block.key.toString())])},{scope:`bubble`})),this.subscriptions.push(e.subscribe(`timer:reset`,(e,t)=>(i===`reset-interval`&&Pf(t,(e,t)=>Af(t)),[]))),this.subscriptions.push(e.subscribe(`timer:pause`,(e,t)=>(this.isPaused||Pf(t,jf)&&(this.isPaused=!0),[]))),this.subscriptions.push(e.subscribe(`timer:resume`,(e,t)=>(this.isPaused&&Pf(t,Mf)&&(this.isPaused=!1),[]))),[])}onNext(e){if(this.config.required&&!e.block.isComplete)return e.emitEvent({name:`timer:skip-attempt`,timestamp:e.clock.currentDate,data:{blockKey:e.block.key.toString()}}),[];if(e.hasCapability(`childSelection`)||!this.config.restBlockFactory)return[];let t=Nf(e);if(!t||t.direction!==`down`||!t.durationMs)return[];let n=this.getRemainingCountdownMs(e);return n>1e3?this.config.restBlockFactory(n,`Rest`):[]}onUnmount(e){return Pf(e,jf),[]}onDispose(e){for(let e of this.subscriptions)try{e()}catch{}this.subscriptions.length=0}handleExpiry(e,t){if(e.emitEvent({name:`timer:complete`,timestamp:e.clock.currentDate,data:{blockKey:e.block.key.toString()}}),t===`complete-block`)e.markComplete(`timer-expired`);else{if(Pf(e,(e,t)=>Af(t)),e.hasCapability(`childSelection`))return;let t=e.getMemoryByTag(`round`)[0]?.metrics[0];if(t){let n=new Rf(t.current+1,t.total,e.block.key.toString(),e.clock.currentDate);e.updateMemory(`round`,[n])}let n=e.getMemoryByTag(`children:status`)[0],r={childIndex:0,totalChildren:n?.metrics[0]?.value?.totalChildren??0,allExecuted:!1,allCompleted:!1};n?.metrics[0]?e.updateMemory(`children:status`,[{...n.metrics[0],value:r}]):e.pushMemory(`children:status`,[{type:`status`,image:``,origin:`runtime`,value:r}])}}getRemainingCountdownMs(e){let t=Nf(e);if(!t||t.direction!==`down`||!t.durationMs)return 0;let n=If(t,e.clock.currentDate.getTime());return Math.max(0,t.durationMs-n)}createFragment(e,t){return{type:T.Time,image:Bf(t.durationMs),origin:`runtime`,value:t,sourceBlockKey:e.block.key.toString(),timestamp:e.clock.currentDate}}};function Bf(e){if(!e||e===0)return`0:00`;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}:${r.toString().padStart(2,`0`)}:${i.toString().padStart(2,`0`)}`:`${r}:${i.toString().padStart(2,`0`)}`}var Vf=class{config;_repScheme;_lastPromotedRound;constructor(e){this.config=e,this._repScheme=[...e.repScheme??[]]}get repScheme(){return this._repScheme}getRepsForRound(e){if(this._repScheme.length===0)return;let t=(e-1)%this._repScheme.length;return this._repScheme[t]}getRepsForCurrentRound(){return this._lastPromotedRound===void 0?this._repScheme[0]:this.getRepsForRound(this._lastPromotedRound)}getPromotedFragments(e,t){let n=E.empty(t.key.toString());if(this._repScheme.length>0){let r=t.getMemoryByTag(`round`)[0]?.metrics[0]?.current??1,i=this.getRepsForRound(r);i!==void 0&&n.add({type:T.Rep,image:i.toString(),origin:`compiler`,value:i,sourceBlockKey:t.key.toString(),timestamp:e.clock.currentDate})}for(let e of this.config.promotions){let r=this.findSourceFragmentInBlock(t,e);r&&n.add({...r,origin:e.origin??`compiler`})}return n}onMount(e){if(this._repScheme.length>0){let t=e.getMemoryByTag(`round`)[0]?.metrics[0]?.current??1;this.promoteRepScheme(e,t)}return this.promoteFragments(e,this.config.promotions),[]}onNext(e){if(this._repScheme.length>0){let t=e.getMemoryByTag(`round`)[0]?.metrics[0];t&&t.current!==this._lastPromotedRound&&this.promoteRepScheme(e,t.current)}let t=this.config.promotions.filter(e=>e.enableDynamicUpdates);return this.promoteFragments(e,t),[]}onUnmount(e){return[]}onDispose(e){}promoteFragments(e,t){for(let n of t){let t=this.findSourceFragment(e,n);if(!t)continue;let r={...t,origin:n.origin??`runtime`};this.upsertPromotedFragment(e,r)}}promoteRepScheme(e,t){let n=this.getRepsForRound(t);if(n===void 0)return;this._lastPromotedRound=t;let r={type:T.Rep,image:n.toString(),origin:`runtime`,value:n,sourceBlockKey:e.block.key.toString(),timestamp:e.clock.currentDate};e.block.getMemoryByTag(`metric:rep-target`).length>0?e.updateMemory(`metric:rep-target`,[r]):e.pushMemory(`metric:rep-target`,[r])}findSourceFragment(e,t){return this.findSourceFragmentInBlock(e.block,t)}findSourceFragmentInBlock(e,t){let n=e.getAllMemory();for(let e of n){if(e.tag===`metric:promote`||e.tag===`metric:rep-target`||t.sourceTag&&e.tag!==t.sourceTag)continue;let n=e.metrics.find(e=>e.type===t.metricType);if(n)return n}}upsertPromotedFragment(e,t){let n=e.block.getMemoryByTag(`metric:promote`);if(n.length===0){e.pushMemory(`metric:promote`,[t]);return}let r=n[0].metrics.filter(e=>e.type!==t.type);e.updateMemory(`metric:promote`,[...r,t])}},Hf=class{config;unsubscribers=[];constructor(e){this.config={mode:e.mode,onNext:e.onNext??e.mode===`immediate`,onEvents:e.onEvents??[]}}onMount(e){if(this.config.mode!==`immediate`)return[];for(let t of this.config.onEvents){let n=e.subscribe(t,(e,t)=>(t.markComplete(`event:${e.name}`),[new bf]));this.unsubscribers.push(n)}return[]}onNext(e){return this.config.mode===`deferred`?e.block.isComplete?[new bf]:[]:this.config.onNext?(e.block.isComplete||e.markComplete(`user-advance`),[new bf]):[]}onUnmount(e){return[]}onDispose(e){for(let e of this.unsubscribers)e();this.unsubscribers=[]}},Uf=class{config;constructor(e={}){this.config=e}onMount(e){let t=this.createStaticLabels(e),n=this.createRoundLabel(e),r=t.clone();return n&&r.add(n),r.length>0&&e.pushMemory(`display`,r.toArray()),[]}onNext(e){let t=this.createRoundLabel(e);if(!t)return[];let n=e.block.getMemoryByTag(`display`);if(n.length===0)return e.pushMemory(`display`,[t]),[];let r=n[0].metrics.filter(e=>!this.isRoundRoleFragment(e));return e.updateMemory(`display`,[...r,t]),[]}onUnmount(e){return[]}onDispose(e){}createStaticLabels(e){let t=this.config.label??e.block.label,n=this.config.subtitle,r=this.config.actionDisplay,i=E.empty(e.block.key.toString());return t&&i.add(this.createTextMetric(e,t,`label`)),n&&i.add(this.createTextMetric(e,n,`subtitle`)),r&&i.add(this.createTextMetric(e,r,`action`)),i}createRoundLabel(e){if(this.config.showRoundDisplay===!1)return;let t=e.block.getMemoryByTag(`round`)[0];if(!t||t.metrics.length===0)return;let n=t.metrics[0];if(!n||typeof n.current!=`number`)return;let r=this.formatRound(n.current,n.total);return this.createTextMetric(e,r,`round`)}createTextMetric(e,t,n){return{type:T.Text,image:t,origin:`runtime`,value:{text:t,role:n},sourceBlockKey:e.block.key.toString(),timestamp:e.clock.currentDate}}formatRound(e,t){return this.config.roundFormat?this.config.roundFormat(e,t):typeof t==`number`?`Round ${e} of ${t}`:`Round ${e}`}isRoundRoleFragment(e){return e.value?.role===`round`}};Pd.defaultMet;var Wf=class{value;sourceBlockKey;timestamp;type=T.Elapsed;origin=`analyzed`;constructor(e,t,n){this.value=e,this.sourceBlockKey=t,this.timestamp=n}get image(){return Lf(this.value)}},Gf=class{value;sourceBlockKey;timestamp;type=T.Total;origin=`analyzed`;constructor(e,t,n){this.value=e,this.sourceBlockKey=t,this.timestamp=n}get image(){return Lf(this.value)}},Kf=class e{spans;sourceBlockKey;timestamp;type=T.Spans;origin=`tracked`;constructor(e,t,n){this.spans=e,this.sourceBlockKey=t,this.timestamp=n}get value(){return this.spans}get image(){if(this.spans.length===0)return`--:--`;if(this.spans.length===1){let t=this.spans[0];return t.started===t.ended?e.formatTimestamp(t.started):`${e.formatTimestamp(t.started)} – ${e.formatTimestamp(t.ended??Date.now())}`}return`${this.spans.length} spans`}get isOpen(){return this.spans.length!==0&&this.spans[this.spans.length-1].isOpen}static formatTimestamp(e){let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}:${t.getSeconds().toString().padStart(2,`0`)}`}},qf=class{value;sourceBlockKey;type=T.SystemTime;origin=`tracked`;constructor(e,t){this.value=e,this.sourceBlockKey=t}get timestamp(){return this.value}get image(){return this.value.toISOString()}},Jf=class{config;_now;lastEmittedRound;constructor(e={},t=lf){this.config=e,this._now=t}onMount(e){if(this.config.emitSegmentOnMount??!1){let t=this.collectDisplayFragments(e),n=this.collectStateFragments(e),r=this.mergeFragments(t,n);e.emitOutput(`segment`,r.toArray(),{label:this.formatLabel(e)})}let t=e.getMemoryByTag(`round`)[0]?.metrics[0];return(this.config.emitMilestones??!!t)&&t&&(t.total===void 0||t.total>1)&&(this.lastEmittedRound=t.current,e.emitOutput(`milestone`,this.buildMilestoneFragments(e,t).toArray(),{label:this.formatRoundLabel(t)})),[]}onNext(e){let t=e.getMemoryByTag(`round`)[0]?.metrics[0];return!(this.config.emitMilestones??!!t)||!t||t.total!==void 0&&t.total<=1||t.total!==void 0&&t.current>t.total||this.lastEmittedRound!==void 0&&t.current===this.lastEmittedRound?[]:(this.lastEmittedRound=t.current,e.emitOutput(`milestone`,this.buildMilestoneFragments(e,t).toArray(),{label:this.formatRoundLabel(t)}),[])}onUnmount(e){let t=Nf(e),n=e.getMemoryByTag(`round`)[0]?.metrics[0],r=this.config.computeTimeResults??!0,i=this.config.label??`Completed`;if(this.config.label||(e.block.blockType===`SessionRoot`?i=`Session Completed`:n&&n.total!==void 0&&n.total>1?i=`Completed ${n.total} Round(s)`:n&&n.current>1&&(i=`Completed ${n.current} Round(s)`)),r){let n=e.block.getMemoryByTag(`metric:display`);if(n.length>1){let r=this.computeSplitTimeResults(e,t,n.map(e=>e.metrics),i);return this.writeResultGroups(e,r),[]}}let a=r?this.computeTimeResults(e,t,i):E.from([new qf(this._now.now(),e.block.key.toString())],e.block.key.toString());return this.writeResultMemory(e,a),[]}onDispose(e){}collectDisplayFragments(e){let t=E.empty(e.block.key.toString());for(let n of e.block.getMemoryByTag(`metric:display`))t.merge(n.metrics);return t}collectStateFragments(e){let t=E.empty(e.block.key.toString());for(let n of e.block.getMemoryByTag(`round`))t.merge(n.metrics);for(let n of e.block.getMemoryByTag(`time`))t.merge(n.metrics);return t}mergeFragments(e,t){let n=new Set(e.map(e=>`${e.type}:${e.type}`)),r=t.filter(e=>!n.has(`${e.type}:${e.type}`));return e.clone().add(...r)}buildMilestoneFragments(e,t){let n=E.empty(e.block.key.toString()).add(new Rf(t.current,t.total,e.block.key.toString(),e.clock.currentDate)),r=Nf(e);if(r){let t=If(r,e.clock.currentDate.getTime());n.add(new Wf(t,e.block.key.toString(),e.clock.currentDate)),r.spans.length>0&&n.add(new Kf([...r.spans],e.block.key.toString(),e.clock.currentDate))}return n}computeTimeResults(e,t,n){let r=e.clock.currentDate,i=r.getTime(),a=e.block.key.toString(),o=e.getMemoryByTag(`round`)[0]?.metrics[0];if(t&&t.spans.length>0){let e=If(t,i),s=t.spans[0].started,c=t.spans[t.spans.length-1].ended??i,l=Math.max(0,c-s),u=E.empty(a).add(new Wf(e,a,r),new Gf(l,a,r),new Kf([...t.spans],a,r),new qf(this._now.now(),a));return o&&u.add(new Rf(o.current,o.total,a,r,n)),u}let s=new sf(i,i),c=E.empty(a).add(new Wf(0,a,r),new Gf(0,a,r),new Kf([s],a,r),new qf(this._now.now(),a));return o&&c.add(new Rf(o.current,o.total,a,r,n)),c}computeSplitTimeResults(e,t,n,r){let i=e.clock.currentDate,a=i.getTime(),o=e.block.key.toString(),s=e.getMemoryByTag(`round`)[0]?.metrics[0];if(!t||t.spans.length===0)return n.map(e=>{let t=e.clone().add(new Wf(0,o,i),new Gf(0,o,i),new Kf([new sf(a,a)],o,i),new qf(this._now.now(),o));return s&&t.add(new Rf(s.current,s.total,o,i,r)),t});let c=If(t,a),l=t.spans[0].started,u=(t.spans[t.spans.length-1].ended??a)-l,d=n.map(e=>{let t=e.filter(e=>e.type===T.Rep&&typeof e.value==`number`).reduce((e,t)=>e+t.value,0);return t>0?t:1}),f=d.reduce((e,t)=>e+t,0),p=0;return n.map((e,t)=>{let n=d[t]/f,a=Math.round(c*n),m=Math.round(u*n),h=l+p,g=h+m;p+=m;let _=e.clone().add(new Wf(a,o,i),new Gf(m,o,i),new Kf([new sf(h,g)],o,i),new qf(this._now.now(),o));return s&&_.add(new Rf(s.current,s.total,o,i,r)),_})}writeResultMemory(e,t){let n=e.block.getMemoryByTag(`metric:result`);if(n.length>0){let r=Yf(n);r.length>0&&(t=t.clone().add(...r)),e.updateMemory(`metric:result`,t.toArray());return}e.pushMemory(`metric:result`,t.toArray())}writeResultGroups(e,t){let n=e.block.getMemoryByTag(`metric:result`);if(n.length===0){for(let n of t)e.pushMemory(`metric:result`,n.toArray());return}let r=Math.max(n.length,t.length);for(let i=0;i<r;i++){let r=t[i]?t[i].clone():n[i].metrics.clone(),a=t[i]&&i<n.length?Yf([n[i]]):[],o=r.add(...a);i<n.length?n[i].update(o):e.pushMemory(`metric:result`,o.toArray())}}formatLabel(e){return this.config.label??e.block.label}formatRoundLabel(e){return e.total===void 0?`Round ${e.current}`:`Round ${e.current} of ${e.total}`}};function Yf(e){let t=[];for(let n of e)for(let e of n.metrics)e.origin===`user`&&t.push(e);return t}var Xf=class{sound;trigger;type=T.Sound;origin;value;image;constructor(e,t,n={}){this.sound=e,this.trigger=t,this.origin=n.origin??`tracked`,this.value={sound:e,trigger:t,atSecond:n.atSecond},this.image=n.atSecond===void 0?e:`${e}@${n.atSecond}s`}};function Zf(e,t){return e.rules.filter(e=>{let{anchor:n,offsetMs:r}=e.trigger;return n===`start`||r===0||t!==void 0&&r<=t})}let Qf={id:`default`,name:`Default`,rules:[{trigger:{anchor:`end`,offsetMs:3e3},sound:`countdown-beep`},{trigger:{anchor:`end`,offsetMs:2e3},sound:`countdown-beep`},{trigger:{anchor:`end`,offsetMs:1e3},sound:`countdown-beep`},{trigger:{anchor:`end`,offsetMs:0},sound:`timer-complete`}]};var $f=class{config;rules=[];fired=new Set;durationMs;constructor(e){this.config=e}onMount(e){let t=Nf(e);return this.durationMs=t?.durationMs,this.rules=Zf(this.config.profile,this.durationMs),this.fireDue(e,0,this.durationMs),e.subscribe(`tick`,(e,t)=>{let n=this.elapsedMs(t);return n===void 0||this.fireDue(t,n,this.durationMs),[]},{scope:`bubble`}),[]}onNext(e){return[]}onUnmount(e){return this.fireDue(e,this.elapsedMs(e)??0,this.durationMs,!0),[]}onDispose(e){this.fired.clear()}elapsedMs(e){let t=Nf(e);if(t)return If(t,e.clock.currentDate.getTime())}fireDue(e,t,n,r=!1){let i=n===void 0?void 0:Math.max(0,n-t);this.rules.forEach((n,a)=>{if(this.fired.has(a))return;let{anchor:o,offsetMs:s}=n.trigger;(o===`start`?t>=s:s===0?r||i!==void 0&&i<=0:i!==void 0&&i<=s)&&(this.fired.add(a),this.play(e,n,o,s))})}play(e,t,n,r){let i=n===`start`?r===0?`mount`:`countdown`:r===0?`complete`:`countdown`;e.emitOutput(`system`,[new Xf(t.sound,i,{atSecond:r/1e3})],{label:`Sound: ${t.sound}`}),e.emitEvent({name:`sound:play`,timestamp:e.clock.currentDate,data:{sound:t.sound,volume:1}})}};let ep=T.Sound;function tp(e,t){let n=np(e);if(n){let e=rp(t?.profiles,n);if(e)return e}if(t?.noteProfileId){let e=rp(t?.profiles,t.noteProfileId);if(e)return e}return Qf}function np(e){for(let t of e){let e=t.metrics.find(e=>e.type===ep);if(!e)continue;let n=e.value;if(typeof n==`string`&&n.trim().length>0)return n.trim()}}function rp(e,t){if(e)return e.find(e=>e.id===t)}let ip=(e,t,n)=>({id:e,kind:`expr`,expression:t,unit:n});ap(),ap(),ap(),op(),op();function ap(){return{sRPE:ip(`sRPE`,`rpeSource.rpe`),durationMinutes:ip(`durationMinutes`,`convert(session.duration, min)`),load:ip(`load`,`round(rpeSource.rpe * convert(session.duration, min))`)}}function op(){return{elapsedMin:ip(`elapsedMin`,`convert(sum(elapsed), min)`),avgMets:ip(`avgMets`,`sum(metMinutes) / elapsedMin`),metMax:ip(`metMax`,`sharedMet.metMax`),metScore:ip(`metScore`,`min(100, avgMets / metMax * 100)`),rpeScore:ip(`rpeScore`,`rpeSource.rpe * 10`),durationScore:ip(`durationScore`,`elapsedMin / 60 * metScore`,`pts`),disciplineFactor:ip(`disciplineFactor`,`lookup("effort", effort, "disciplineFactor")`),tis:ip(`tis`,`round(0.30 * metScore + 0.35 * rpeScore + 0.20 * durationScore + 0.15 * disciplineFactor, 1)`)}}new Du([]),new Du([]);var sp=class{static build(e,t={}){let{includeMetric:n=!0,includeLogic:r=!0,includeIdentity:i=!0,includeAttributes:a=!0,defaultLabel:o=`Block`,format:s=`logic-first`}=t,c=E.from(e.flatMap(e=>E.from(e.metrics).toArray()).filter(e=>e.origin!==`runtime`&&e.type!==T.Hint));if(c.length===0)return o;let l=c.find(e=>e.type===T.Label);if(l)return l.image||l.value?.toString()||o;let u=n?this.getPrimaryMetric(c):void 0,d=r?this.getLogicKeyword(e,c):void 0,f=i?this.getIdentityText(c):void 0,p=a?this.getAttributesText(c):void 0,m=[];return s===`logic-first`?(d&&m.push(d),u&&m.push(u),f&&m.push(f),p&&m.push(p)):s===`metric-first`?(u&&m.push(u),d&&m.push(d),f&&m.push(f),p&&m.push(p)):(f&&m.push(f),u&&m.push(u),d&&m.push(d),p&&m.push(p)),m.length===0?c.filter(e=>!!e.image&&!Qu.isStructural(e)).map(e=>e.image).join(` `)||o:m.join(` `).trim().replace(/\s+/g,` `)}static getPrimaryMetric(e){let t=e.find(e=>e.type===T.Rounds);if(t&&t.image)return t.image;let n=e.find(e=>e.type===T.Duration);if(n&&n.image)return n.image}static getLogicKeyword(e,t){if(e.some(e=>Nu(e,Ou.LABEL_AMRAP)))return`AMRAP`;if(e.some(e=>Nu(e,Ou.LABEL_EMOM)))return`EMOM`;if(e.some(e=>Nu(e,Ou.LABEL_TABATA)))return`TABATA`;if(e.some(e=>Nu(e,Ou.LABEL_FOR_TIME)))return`FOR TIME`;let n=[`AMRAP`,`EMOM`,`TABATA`,`FOR TIME`];for(let e of t){let t=(e.image||e.value?.toString()||``).toUpperCase();if(n.includes(t))return t}}static getIdentityText(e){let t=[`AMRAP`,`EMOM`,`TABATA`,`FOR TIME`],n=e.filter(e=>{if(e.type===T.Duration||e.type===T.Rounds||e.type===T.Resistance||e.type===T.Distance||e.type===T.Lap||e.type===T.Group)return!1;let n=(e.image||e.value?.toString()||``).toUpperCase();return!t.includes(n)});if(n.length!==0)return n.map(e=>e.image).join(` `).trim()}static getAttributesText(e){let t=e.filter(e=>e.type===T.Resistance||e.type===T.Distance);if(t.length!==0)return t.map(e=>e.image).join(` `).trim()}},cp=class{distribute(e,t){return[e.clone()]}};let lp=e=>e[0];function up(e,t){let{statements:n,runtime:r,blockType:i,defaultLabel:a}=t,o=(t.pickStatement??lp)(n),s=t.key??new Ee,c=t.context??new Of(r,s.toString(),o.exerciseId||``),l=sp.build(n,{defaultLabel:a});e.setContext(c).setKey(s).setBlockType(i).setLabel(l).setSourceIds(n.map(e=>e.id));let u=t.metricDistributorType??i,d=new cp,f=t.filterMetrics,p=n.flatMap(e=>{let t=f?E.from(e.metrics.filter(f)):E.from(e.metrics);return d.distribute(t,u)}).filter(e=>e.length>0);if(e.setFragments(p),t.timer){let n=t.timer,r=n.mode===`reset-interval`?{completesBlock:!1}:void 0;e.asTimer({direction:n.direction,durationMs:n.durationMs,label:n.label,role:n.role??`primary`,addCompletion:n.mode!==`reset-interval`,completionConfig:r,injectRest:n.injectRest,required:n.required,...t.countdownTimerConfig??{}})}if(t.repeater){let n=t.repeater;e.asRepeater({totalRounds:n.totalRounds,startRound:n.startRound??1,addCompletion:n.addCompletion})}return l}var dp=class{priority=90;id=`amrap-logic`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.hasMetric(T.Duration)),r=e.some(e=>e.hasMetric(T.Rounds)),i=e.some(e=>e.metrics.some(e=>(e.type===T.Effort||e.type===T.Action)&&typeof e.value==`string`&&(e.value.toLowerCase()===`rounds`||e.value.toLowerCase()===`amrap`)));return n&&(r||i)}apply(e,t,n){let r=(t.find(e=>e.hasMetric(T.Duration))||t[0]).metrics.find(e=>e.type===T.Duration)?.value||0,i=up(e,{blockType:`AMRAP`,defaultLabel:`AMRAP ${Math.round(r/6e4)} min`,statements:t,runtime:n,timer:{direction:`down`,durationMs:r,label:`AMRAP`,role:`primary`,mode:`complete-block`,injectRest:!1},repeater:{totalRounds:void 0,startRound:1,addCompletion:!1},pickStatement:e=>e.find(e=>e.hasMetric(T.Duration))||e[0]});e.addBehavior(new Uf({mode:`countdown`,label:i}))}},fp=class{priority=90;id=`interval-logic`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.metrics.some(e=>e.type===T.Duration)),r=e.some(e=>Nu(e,Ou.REPEATING_INTERVAL)),i=e.some(e=>e.metrics.some(e=>(e.type===T.Action||e.type===T.Effort)&&typeof e.value==`string`&&e.value.toLowerCase()===`emom`));return n&&(r||i)}apply(e,t,n){let r=(t.find(e=>e.metrics.some(e=>e.type===T.Duration))||t[0]).metrics.find(e=>e.type===T.Duration),i=t.flatMap(e=>E.from(e.metrics).toArray()).find(e=>e.type===T.Rounds),a=r?.value||6e4,o=typeof i?.value==`number`?i.value:10,s=up(e,{blockType:`EMOM`,defaultLabel:`EMOM ${o}`,statements:t,runtime:n,timer:{direction:`down`,durationMs:a,label:`Interval`,role:`primary`,mode:`reset-interval`,injectRest:!0},repeater:{totalRounds:o,startRound:1,addCompletion:!0},pickStatement:e=>e.find(e=>e.hasMetric(T.Duration))||e[0],metricDistributorType:`EMOM`});e.addBehavior(new Uf({mode:`countdown`,label:s}));let c=t.some(e=>e.metrics.some(e=>e.type===T.Resistance)),l=t.some(e=>e.metrics.some(e=>e.type===T.Distance)),u=[...c?[{metricType:T.Resistance,origin:`compiler`}]:[],...l?[{metricType:T.Distance,origin:`compiler`}]:[]];u.length>0&&e.addBehavior(new Vf({promotions:u}))}},pp=class{priority=0;id=`effort-fallback`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`)),r=e.some(e=>e.metrics.some(e=>e.type===T.Rounds&&e.origin!==`runtime`)),i=e.some(e=>e.children&&e.children.length>0);return!n&&!r&&!i}apply(e,t,n){up(e,{blockType:`effort`,defaultLabel:`Effort`,statements:t,runtime:n,timer:{direction:`up`,role:`secondary`,mode:`reset-interval`},filterMetrics:e=>e.origin!==`runtime`}),e.addBehavior(new Hf({mode:`immediate`,onNext:!0}))}},mp=class{priority=50;id=`generic-group`;match(e,t){if(!e||e.length===0)return!1;let n=e.some(e=>e.children&&e.children.length>0),r=e.some(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`)),i=e.some(e=>e.metrics.some(e=>e.type===T.Rounds&&e.origin!==`runtime`));return n&&!r&&!i}apply(e,t,n){if(e.hasTimerBehavior()||e.hasRoundConfig())return;let r=up(e,{blockType:`Group`,defaultLabel:`Group`,statements:t,runtime:n});e.addBehavior(new Uf({mode:`clock`,label:r}));let i=t.some(e=>e.metrics.some(e=>e.type===T.Resistance)),a=t.some(e=>e.metrics.some(e=>e.type===T.Distance)),o=[...i?[{metricType:T.Resistance,origin:`compiler`}]:[],...a?[{metricType:T.Distance,origin:`compiler`}]:[]];o.length>0&&e.addBehavior(new Vf({promotions:o}))}},hp=class{priority=50;id=`generic-loop`;match(e,t){return!e||e.length===0?!1:e.some(e=>e.metrics.some(e=>e.type===T.Rounds))}apply(e,t,n){if(e.hasRoundConfig())return;let r=(t.find(e=>e.metrics.some(e=>e.type===T.Rounds))||t[0]).metrics.find(e=>e.type===T.Rounds);if(!r)return;let i=1,a;typeof r.value==`number`&&(i=r.value);let o=t.flatMap(e=>e.metrics.filter(e=>e.type===T.Rep&&typeof e.value==`number`)).map(e=>e.value);o.length>0&&(a=o,i<=1&&(i=a.length));let s=up(e,{blockType:`Rounds`,defaultLabel:a?a.join(`-`):`${i} Rounds`,statements:t,runtime:n,repeater:{totalRounds:i,startRound:1,addCompletion:!0},pickStatement:e=>e.find(e=>e.metrics.some(e=>e.type===T.Rounds))||e[0],filterMetrics:e=>e.type!==T.Rep});e.addBehavior(new Uf({mode:`clock`,label:s}));let c=t.some(e=>e.metrics.some(e=>e.type===T.Resistance)),l=t.some(e=>e.metrics.some(e=>e.type===T.Distance)),u=[...c?[{metricType:T.Resistance,origin:`compiler`}]:[],...l?[{metricType:T.Distance,origin:`compiler`}]:[]];e.addBehavior(new Vf({repScheme:a,promotions:u})),e.declareExit(`immediate`)}},gp=class{priority=50;id=`generic-timer`;match(e,t){return!e||e.length===0?!1:e.some(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`))}apply(e,t,n){if(e.hasTimerBehavior())return;let r=(t.find(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`))||t[0]).metrics.find(e=>e.type===T.Duration&&e.origin!==`runtime`),i=r?.direction||`up`,a=r?.value||void 0,o=t.some(e=>Nu(e,Ou.REQUIRED_TIMER)),s=t.some(e=>Nu(e,Ou.INJECT_REST)),c=!!(a&&i===`down`),l=up(e,{blockType:`Timer`,defaultLabel:i===`down`?`Countdown`:`For Time`,statements:t,runtime:n,timer:{direction:i,durationMs:a,label:a?`Countdown`:`For Time`,role:`primary`,mode:`complete-block`,injectRest:s,required:o},pickStatement:e=>e.find(e=>e.metrics.some(e=>e.type===T.Duration&&e.origin!==`runtime`))||e[0]});o&&c?e.addBehavior(new Hf({mode:`immediate`,onNext:!1,onEvents:[`timer:complete`]})):e.addBehavior(new Hf({mode:`immediate`,onNext:!0})),e.addBehavior(new Uf({mode:a?`countdown`:`clock`,label:l}))}},_p=class{priority=50;id=`children`;match(e,t){return e&&e.length>0&&e[0].children&&e[0].children.length>0}apply(e,t,n){let r=t[0].children.filter(e=>e.length>0),i=e.hasRoundConfig(),a=e.getBehavior(zf),o=!!a;i||(o?e.asRepeater({totalRounds:void 0,startRound:1,addCompletion:!1}):e.asRepeater({totalRounds:1,startRound:1,addCompletion:!0}));let s=o||i,c=i?`rounds-remaining`:`timer-active`,l=o&&a?.config.mode===`reset-interval`;e.asContainer({childGroups:r,addLoop:s,loopConfig:s?{condition:c}:void 0,injectRest:l}),e.declareExit(`deferred`)}},vp=class{priority=15;id=`report-output`;match(e,t){return e&&e.length>0}apply(e,t,n){e.hasBehavior(Jf)||e.addBehavior(new Jf)}},yp=class{priority=20;id=`sound`;match(e,t){return e.length>0}apply(e,t,n){if(e.hasBehavior($f)||!e.hasTimerBehavior())return;let r=tp(t,n.options?.soundOptions);e.addBehavior(new $f({profile:r}))}};new Du([new dp,new fp,new gp,new hp,new mp,new yp,new vp,new _p,new pp]).list();let bp=/^---\r?\n([\s\S]*?)\r?\n---/;function xp(e){let t=bp.exec(e);if(!t)return{};let n={},r=t[1].split(/\r?\n/),i;for(let e of r){let t=e.trimEnd(),r=t.match(/^\s+-\s+(.*)$/);if(r&&i){n[i].push(r[1].trim());continue}let a=t.match(/^([^:]+):\s*(.*)$/);if(!a)continue;let o=a[1].trim().toLowerCase(),s=a[2].trim();s===``?(n[o]=[],i=o):s.startsWith(`[`)&&s.endsWith(`]`)?(n[o]=s.slice(1,-1).split(`,`).map(e=>e.trim().replace(/^['"]|['"]$/g,``)).filter(e=>e.length>0),i=void 0):(n[o]=s,i=void 0)}return n}let Sp=e=>Array.isArray(e)?e:typeof e==`string`?e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):[];function Cp(e,t=Ze){let n=xp(e),r=Sp(n.tags).map(e=>({label:e})),i=Object.keys(n);for(let e of t){if(e===`tags`)continue;let t=i.find(t=>t===e.toLowerCase());if(t)for(let i of Sp(n[t]))r.push({label:i,type:e})}return r.filter(e=>e.label.length>0)}let wp=[`sessionId`,`noteId`,`blockId`,`blockVersion`,`blockContentId`,`origin`,`status`,`startTime`,`endTime`,`duration`,`completed`,`sessionCreatedAt`,`sessionExtraJson`],Tp=`eventId.grain.outputType.timestamp.pageId.effortSlug.eventBlockId.eventBlockVersion.eventBlockContentId.eventOrigin.timeSpan.sourceBlockKey.sourceStatementId.line.text.dialect.stackLevel.completionReason.representationKind.metricType.metricValue.metricUnit.metricImage.metricOrigin.metricMetadata.metricTemporal.metricJson.eventExtraJson`.split(`.`);[...wp,...Tp];let Ep=Oe,Dp={core:0,community:1,imported:2,user:3};function Op(e,t){if(t)return t;if(!e)return`core`;if(e===`user`)return`user`;let n=e.startsWith(`seed:`)?e.slice(5):e;return n===`core`||n===`efforts`||n===`equipment`?`core`:n===`community`||n.startsWith(`community-`)||n===`common`?`community`:`imported`}function kp(e,t){return Dp[Op(e,t)]}let Ap=`canvas`;function jp(e){return`seed:${e}`}function Mp(e){return{key:e,schema:9,seedVersion:0,builtAt:``,importedAt:0,chunks:{},claim:null}}function Np(e){let t=/^(?:collection|feed)\.(.+)$/.exec(e)?.[1];return t&&t!==`_root`?t:void 0}function Pp(e){let t=/^---\r?\n([\s\S]*?)\r?\n---/.exec(e);return t?.[1]&&!/^template:\s*canvas\s*$/m.test(t[1])?null:t?.[1]?.match(/^route:\s*(\S+)\s*$/m)?.[1]?.replace(/^\//,``)||null}function Fp(e,t,n){let r=e.split(`/`),i=(r.at(-1)??``).replace(/\.md$/i,``),a=r.slice(2).map(e=>e.replace(/\.md$/i,``)).join(`/`);if(n===`canvas`)return`guides:${Pp(t)??a}`;if(n===`dashboards`)return`dashboards`;if(n===`efforts`)return`efforts`;if(n===`equipment`)return`equipment`;if(n===`template`)return`playground`;if(n.startsWith(`collection.`)){let e=Np(n);return e?i.toLowerCase()===`readme`?`collection:${e}`:`collection:${e}/${i}`:`collection:_root`}if(n.startsWith(`feed.`))return`feed:feeds/${a}`}function $(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ip(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>0}function Lp(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}function Rp(e){if(!$(e)||e.schema!==9)throw Error(`Incompatible seed schema; rebuild seed artifacts`);if(!Lp(e.version)||typeof e.builtAt!=`string`||!Number.isFinite(Date.parse(e.builtAt))||!Array.isArray(e.chunks))throw Error(`seed manifest failed shape validation`);for(let t of[`versionLabel`,`commit`,`name`,`description`])if(e[t]!==void 0&&typeof e[t]!=`string`)throw Error(`invalid seed manifest metadata`);if(e.repositoryUrl!==void 0&&(typeof e.repositoryUrl!=`string`||!/^https:\/\//.test(e.repositoryUrl)||new URL(e.repositoryUrl).username||new URL(e.repositoryUrl).password))throw Error(`invalid seed repository URL`);if(e.dirty!==void 0&&typeof e.dirty!=`boolean`)throw Error(`invalid seed manifest metadata`);let t=new Set,n=new Set;for(let r of e.chunks){if(!$(r)||typeof r.id!=`string`||!r.id||typeof r.path!=`string`||!/^chunks\/[a-zA-Z0-9._-]+\.json$/.test(r.path)||typeof r.sha256!=`string`||!/^[0-9a-f]{64}$/.test(r.sha256)||!Lp(r.bytes)||!Lp(r.count)||r.kind!==void 0&&r.kind!==`notes`||t.has(r.id)||n.has(r.path))throw Error(`seed manifest failed shape validation`);t.add(r.id),n.add(r.path)}if(e.notebooks!==void 0){if(!Array.isArray(e.notebooks))throw Error(`seed manifest failed shape validation`);for(let t of e.notebooks)if(!$(t)||typeof t.notebookId!=`string`||typeof t.label!=`string`||!Lp(t.count)||!Array.isArray(t.records))throw Error(`seed manifest failed shape validation`)}return e}function zp(e){if(!Array.isArray(e))throw Error(`seed chunk is not an array`);let t=new Set;for(let n of e){if(!$(n)||typeof n.path!=`string`||!n.path||n.path.startsWith(`/`)||n.path.split(`/`).includes(`..`)||t.has(n.path)||typeof n.content!=`string`||!$(n.blocks)||!Array.isArray(n.blockIndex)||!Array.isArray(n.blockEfforts)||!Array.isArray(n.blockEquipment))throw Error(`seed chunk row failed shape validation`);t.add(n.path);for(let[e,t]of Object.entries(n.blocks))if(!$(t)||t.id!==e||!e||t.version!==1||t.sourceRevision!==1||!Lp(t.from)||!Ip(t.to)||t.from>=t.to||t.to>n.content.length||![`wod`,`query`,`widget`,`embed`].includes(String(t.kind))||(t.kind===`wod`?![`time`,`log`].includes(String(t.dialect)):t.dialect!==void 0)||t.sport!==void 0&&typeof t.sport!=`string`)throw Error(`invalid seed block range or revision`);Fe(n.content,n.blocks,1,{registeredWidgets:Ep});let e=new Set,r=Me(n.content,{registeredWidgets:Ep});for(let t of n.blockIndex){if(!$(t)||typeof t.blockId!=`string`)throw Error(`invalid seed projection`);let i=n.blocks[t.blockId];if(!$(i)||e.has(t.blockId)||typeof t.id!=`string`||typeof t.noteId!=`string`||t.id!==`${t.noteId}:${t.blockId}`||t.blockVersion!==1||t.sourceRevision!==1||t.from!==i.from||t.to!==i.to||t.dataType!==i.kind||t.rawContent!==n.content.slice(Number(i.from),Number(i.to))||typeof t.noteTitle!=`string`||typeof t.createdAt!=`number`||!Number.isFinite(t.createdAt)||t.sourcePath!==n.path||t.isStatic!==!0)throw Error(`orphan or incompatible seed projection`);if(`segmentId`in t||`segmentVersion`in t)throw Error(`incompatible seed projection`);for(let e of[`sourceId`,`routeId`,`blockContentId`])if(t[e]!==void 0&&typeof t[e]!=`string`)throw Error(`invalid seed projection metadata`);if(t.position!==void 0&&!Lp(t.position))throw Error(`invalid seed projection position`);if(i.kind===`wod`){let e=r.find(e=>e.from===i.from&&e.to===i.to);if(t.blockContentId!==De(e?.scriptBlock?.content??n.content.slice(Number(i.from),Number(i.to))))throw Error(`invalid seed workout fingerprint`)}else if(t.blockContentId!==void 0)throw Error(`non-workout seed fingerprint`);e.add(t.blockId)}if(e.size!==Object.keys(n.blocks).length)throw Error(`missing actionable seed projection`);let i=new Set;for(let t of n.blockEfforts){if(!$(t)||typeof t.blockId!=`string`||typeof t.noteId!=`string`||typeof t.effortSlug!=`string`||!t.effortSlug)throw Error(`invalid seed effort identity`);let r=n.blocks[t.blockId];if(t.id!==`${t.noteId}:${t.blockId}:${t.effortSlug}`||i.has(String(t.id))||!$(r)||r.kind!==`wod`||!e.has(t.blockId)||t.sourcePath!==n.path||t.isStatic!==!0||typeof t.createdAt!=`number`)throw Error(`orphan or incompatible seed effort link`);let a=n.blockIndex.find(e=>$(e)&&e.blockId===t.blockId);if(!$(a)||t.noteId!==a.noteId||t.blockContentId!==a.blockContentId||!Number.isFinite(t.createdAt))throw Error(`invalid seed effort metadata`);i.add(String(t.id))}let a=new Set;for(let t of n.blockEquipment){if(!$(t)||typeof t.blockId!=`string`||typeof t.noteId!=`string`||typeof t.equipmentSlug!=`string`||!t.equipmentSlug)throw Error(`invalid seed equipment identity`);let r=n.blocks[t.blockId];if(t.id!==`${t.noteId}:${t.blockId}:${t.equipmentSlug}`||a.has(String(t.id))||!$(r)||r.kind!==`wod`||!e.has(t.blockId)||t.sourcePath!==n.path||t.isStatic!==!0||typeof t.createdAt!=`number`)throw Error(`orphan or incompatible seed equipment link`);let i=n.blockIndex.find(e=>$(e)&&e.blockId===t.blockId);if(!$(i)||t.noteId!==i.noteId||t.blockContentId!==i.blockContentId||!Number.isFinite(t.createdAt))throw Error(`invalid seed equipment metadata`);a.add(String(t.id))}}return e}function Bp(e){return zp([e])[0]}async function Vp(e){let t=await crypto.subtle.digest(`SHA-1`,new TextEncoder().encode(`1b671a64-40d5-491e-99b0-da01ff1f3341:${e}`)),n=new Uint8Array(t.slice(0,16));n[6]=n[6]&15|80,n[8]=n[8]&63|128;let r=Array.from(n,e=>e.toString(16).padStart(2,`0`)).join(``);return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function Hp(e,t){if(Object.is(e,t))return!0;if(!e||!t||typeof e!=`object`||typeof t!=`object`)return!1;let n=Object.keys(e).filter(t=>Reflect.get(e,t)!==void 0),r=Object.keys(t).filter(e=>Reflect.get(t,e)!==void 0);return n.length===r.length&&n.every(n=>n in t&&Hp(Reflect.get(e,n),Reflect.get(t,n)))}function Up(e){return(e.split(`/`).at(-1)??e).replace(/\.md$/,``).replace(/[-_]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function Wp(e,t,n){let r=e.rawContent,i=0,a=r.length,o=t.length;for(;i<a&&i<o&&r[i]===t[i];)i++;for(;a>i&&o>i&&r[a-1]===t[o-1];)a--,o--;let s=Object.values(e.blocks).filter(e=>i<e.to&&a>e.from),c=Ie(s.length<=1?e.blocks:Object.fromEntries(Object.entries(e.blocks).filter(([,e])=>!s.includes(e))),[{from:i,to:a,insert:t.slice(i,o)}]),l=0;return Pe(t,{sourceRevision:n,blocks:c,registeredWidgets:Ep,createId:()=>`seed:${e.id}:r${n}:${l++}`})}async function Gp(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=new Set(s),m=e=>{let t=-1;for(let n of o)n.noteIds.has(e)&&n.rank>t&&(t=n.rank);return t},h=[];for(let[e,t]of c.entries()){if(!u.has(l[e]))continue;let r=n(t.content);r&&h.push({...r,registrySource:`bundled`,ownerNoteId:l[e],sourceId:i,sourcePath:t.path})}let g=await e.getMany(h.map(e=>e.slug)),_=h.filter((e,t)=>{let n=g[t];if(!n)return!0;if(n.registrySource!==`bundled`)return!1;let r;if(n.ownerNoteId===e.ownerNoteId||n.ownerNoteId&&p.has(n.ownerNoteId)&&m(n.ownerNoteId)<a)r=a;else{let e=n.ownerNoteId?m(n.ownerNoteId):-1;r=e>=0?e:kp(n.sourceId)}return a>=r&&!Hp(e,n)});_.length&&await e.putMany(_);let v=new Set(h.map(e=>e.slug)),y=new Map;for(let e of f){let t=d.get(e);if(!t||t.seedOrigin!==`seed`)continue;let r=n(t.rawContent)?.slug;r&&!v.has(r)&&y.set(r,e)}let b=[...y.keys()];if(b.length){let a=await e.getMany(b);for(let[s,c]of a.entries()){let a=b[s];if(!c||c.registrySource!==`bundled`)continue;let l=y.get(a);if(!(c.ownerNoteId===l&&(!c.sourceId||c.sourceId===i||c.sourceId===r)))continue;let u=!1;for(let i of o){let o=i.meta.chunks?.[r]?.noteIds??[];if(!o.length)continue;let s=await t.getMany(o);for(let t of s){if(!t||t.seedOrigin!==`seed`)continue;let r=n(t.rawContent);if(r&&r.slug===a){await e.put({...r,registrySource:`bundled`,ownerNoteId:t.id,sourceId:i.sourceId,sourcePath:t.sourcePath??``}),u=!0;break}}if(u)break}u||await e.delete(a)}}return _.length}async function Kp(e,t,n){if(!t.length)return;let r=await e.getMany(n),i=t.filter((e,t)=>!Hp(e,r[t]));i.length&&await e.putMany(i)}async function qp(e,t){Rp(t.manifest),zp(t.rows);let n={totalNotes:0,totalEfforts:0,totalEquipment:0,totalBlocks:0,skippedUserOwned:0,deleted:0,addedNotes:0,updatedNotes:0},r=await Promise.all(t.rows.map(e=>Vp(e.path))),i=new Map,a=new Map,o=new Map;for(let[e,n]of t.rows.entries()){let t=xp(n.content).slug;typeof t==`string`&&t.trim()&&(i.set(t,await Vp(`page:${t}`)),a.set(r[e],await Vp(`pagenote:${t}:${n.path}`)));for(let{label:e}of Cp(n.content))o.has(e)||o.set(e,await Vp(`tag:${e}`))}return e.transaction([`notes`,`block_revisions`,`block_index`,`block_efforts`,`block_equipment`,`page`,`page_notes`,`tags`,`note_tags`,`efforts`,`equipment`,`meta`],`readwrite`,async e=>{let s=e.readwrite(`meta`),c=new Set;for(let e of await s.getAll()){let t=We(e?.key);t!==void 0&&c.add(t)}if(!Hp(await s.get(t.meta.key),t.expectedMeta))throw Error(`Seed checkpoint changed during import`);if(t.meta.schema!==9||t.manifest.schema!==9)throw Error(`Incompatible seed schema; recreate artifacts`);let l=e.readwrite(`notes`),u=t.chunkId?t.expectedMeta?.chunks[t.chunkId]?.noteIds??[]:[],d=new Set((t.chunkId?t.meta.chunks[t.chunkId]?.noteIds:void 0)??r),f=u.filter(e=>!d.has(e)),p=[...new Set([...r,...f])],m=await l.getMany(p),h=new Map(p.map((e,t)=>[e,m[t]])),g=t.meta.key.startsWith(`seed:`)?t.meta.key.slice(5):t.meta.key,_=kp(t.meta.key,t.meta.tier),v=[];for(let e of await s.getAll()){let n=e;if(!n||typeof n.key!=`string`||!n.key.startsWith(`seed:`)||n.key===t.meta.key)continue;let r=new Set;for(let e of Object.values(n.chunks??{}))for(let t of e.noteIds??[])r.add(t);v.push({key:n.key,sourceId:n.key.slice(5),rank:kp(n.key,n.tier),meta:n,noteIds:r})}v.sort((e,t)=>t.rank-e.rank);let y=e=>{let t=-1;for(let n of v)n.noteIds.has(e)&&n.rank>t&&(t=n.rank);return t},b=p.filter(e=>{if(c.has(e))return!1;let n=h.get(e);if(!n)return d.has(e);if(n.seedOrigin!==`seed`)return!1;let r=y(e);return d.has(e)?_>=r:r<0&&n.seedChunkId===t.chunkId}),x=new Set(b),S=e.readwrite(`block_revisions`),ee=r.filter((e,n)=>x.has(e)&&h.get(e)?.rawContent!==t.rows[n].content),te=await S.getAllFromIndexMany(`by-note`,ee),ne=new Map(ee.map((e,t)=>[e,te[t]])),re=e.readwrite(`block_index`),ie=e.readwrite(`block_efforts`),C=e.readwrite(`block_equipment`),w=e.readwrite(`note_tags`),ae=e.readwrite(`page_notes`),oe=await re.getAllFromIndexMany(`by-note`,b),se=await ie.getAllFromIndexMany(`by-note`,b),ce=await C.getAllFromIndexMany(`by-note`,b),le=await w.getAllFromIndexMany(`by-note`,b),ue=await ae.getAllFromIndexMany(`by-note`,b),de=new Map(b.map((e,t)=>[e,t])),T=e.readwrite(`tags`),fe=[...o.keys()],pe=await T.getAllFromIndexMany(`by-label`,fe),me=new Map(fe.map((e,t)=>[e,pe[t][0]])),he=[],ge=[],_e=[],ve=[],ye=[],be=[],xe=[],Se=[],Ce=[];for(let[e,s]of t.rows.entries()){let c=r[e],l=h.get(c);if(!x.has(c)){l&&l.seedOrigin!==`seed`&&n.skippedUserOwned++;continue}l?l.rawContent!==s.content&&n.updatedNotes++:n.addedNotes++,Fe(s.content,s.blocks,1,{registeredWidgets:Ep});let u=l?l.sourceRevision+(l.rawContent===s.content?0:1):1,d=0,f=ne.get(c)??[],p=l?l.rawContent===s.content?structuredClone(l.blocks):Wp(l,s.content,u):f.length?Pe(s.content,{sourceRevision:u,registeredWidgets:Ep,createId:()=>`seed:${c}:new${f.length}:${d++}`}):structuredClone(s.blocks);for(let e of Object.values(p)){let n=(ne.get(c)??[]).filter(t=>t.blockId===e.id).sort((e,t)=>t.version-e.version)[0],r=s.content.slice(e.from,e.to);if(l?.rawContent===s.content)continue;let i=n&&n.kind===e.kind&&n.rawContent===r&&n.dialect===e.dialect&&n.sport===e.sport;e.version=l?i?n.version:(n?.version??0)+1:1,(!l||!i)&&_e.push({noteId:c,blockId:e.id,version:e.version,kind:e.kind,rawContent:r,savedAt:t.meta.importedAt,...e.dialect?{dialect:e.dialect}:{},...e.sport?{sport:e.sport}:{}})}Fe(s.content,p,u,{registeredWidgets:Ep});let m=xp(s.content),g=typeof m.title==`string`&&m.title.trim()?m.title.trim():Up(s.path),_=t.chunkId?Fp(s.path,s.content,t.chunkId):void 0;if(!_)throw Error(`Unknown seed source family ${t.chunkId}`);let v=typeof m.date==`string`?m.date.match(/^(\d{4})-(\d{2})-(\d{2})$/):null,y;if(v){let e=Date.parse(`${m.date}T12:00:00Z`);if(!(Number.isFinite(e)&&new Date(e).getUTCMonth()===Number(v[2])-1&&new Date(e).getUTCDate()===Number(v[3])))throw Error(`invalid frontmatter date '${m.date}' in '${s.path}' — expected a real calendar day (YYYY-MM-DD)`);y=e}let b=s.commit??t.manifest.commit,S={...l,id:c,title:g,rawContent:s.content,sourceRevision:u,blocks:p,createdAt:t.manifest.version,...y===void 0?{}:{date:y},type:t.chunkId===`dashboards`?`dashboard`:`note`,sourceId:_,catalog:Np(t.chunkId??``),seedOrigin:`seed`,seedVersion:t.manifest.version,seedChunkId:t.chunkId??void 0,sourcePath:s.path,...b?{seedCommit:b}:{}};y===void 0&&delete S.date,Hp(S,l)||ge.push(S);let ee=new Map(Object.values(p).map(e=>[`${e.from}:${e.to}`,e])),te=new Map(s.blockIndex.map(e=>[e.blockId,e])),re=new Map;for(let e of s.blockIndex){let t=ee.get(`${e.from}:${e.to}`);if(!t||t.kind!==e.dataType)throw Error(`Orphan seed projection`);re.set(e.blockId,t.id);let n={...e,id:`${c}:${t.id}`,noteId:c,blockId:t.id,blockVersion:t.version,sourceRevision:u,noteTitle:g,sourceId:_,sourcePath:s.path,rawContent:s.content.slice(t.from,t.to)},r=oe[de.get(c)].find(e=>e.id===n.id);(!r||r.isStatic===!0)&&xe.push(n)}for(let e of s.blockEfforts){let t=re.get(e.blockId);if(!t||te.get(e.blockId)?.dataType!==`wod`)throw Error(`Orphan seed effort link`);let n={...e,id:`${c}:${t}:${e.effortSlug}`,noteId:c,blockId:t,sourcePath:s.path},r=se[de.get(c)].find(e=>e.id===n.id);(!r||r.isStatic===!0)&&Se.push(r?{...n,createdAt:r.createdAt}:n)}for(let e of s.blockEquipment){let t=re.get(e.blockId);if(!t||te.get(e.blockId)?.dataType!==`wod`)throw Error(`Orphan seed equipment link`);let n={...e,id:`${c}:${t}:${e.equipmentSlug}`,noteId:c,blockId:t,sourcePath:s.path},r=ce[de.get(c)].find(e=>e.id===n.id);(!r||r.isStatic===!0)&&Ce.push(r?{...n,createdAt:r.createdAt}:n)}let ie=de.get(c),C=new Set;for(let e of Cp(s.content)){let n=me.get(e.label);n?e.type&&!n.type&&(n={...n,type:e.type},he.push(n),me.set(e.label,n)):(n={id:o.get(e.label),label:e.label,type:e.type,createdAt:t.meta.importedAt},he.push(n),me.set(e.label,n)),!C.has(n.id)&&(C.add(n.id),le[ie].find(e=>e.tagId===n.id)||be.push({id:`${c}:${n.id}`,noteId:c,tagId:n.id}))}for(let e of le[ie])C.has(e.tagId)||await w.delete(e.id);let ae=m.slug;if(typeof ae==`string`&&i.has(ae)){let e=i.get(ae);ve.push({id:e,slug:ae,title:Up(s.path),createdAt:t.manifest.version}),ye.push({id:a.get(c),pageId:e,noteId:c,createdAt:t.manifest.version})}n.totalNotes++,n.totalBlocks+=Object.keys(p).length}let we=new Set(xe.map(e=>e.id)),Te=new Set(Se.map(e=>e.id)),E=new Set(Ce.map(e=>e.id));for(let e of oe)for(let t of e)t.isStatic===!0&&!we.has(t.id)&&await re.delete(t.id);for(let e of se)for(let t of e)t.isStatic===!0&&!Te.has(t.id)&&await ie.delete(t.id);for(let e of ce)for(let t of e)t.isStatic===!0&&!E.has(t.id)&&await C.delete(t.id);for(let e of f){if(!x.has(e)||!h.get(e))continue;let t=de.get(e);await l.delete(e);for(let e of le[t])await w.delete(e.id);for(let e of ue[t])await ae.delete(e.id);n.deleted++}return t.chunkId===`efforts`&&(n.totalEfforts=await Gp(e.readwrite(`efforts`),l,rf,`efforts`,g,_,v,u,t.rows,r,x,h,p)),t.chunkId===`equipment`&&(n.totalEquipment=await Gp(e.readwrite(`equipment`),l,af,`equipment`,g,_,v,u,t.rows,r,x,h,p)),ge.length&&await l.putMany(ge),_e.length&&await S.putMany(_e),await Kp(re,xe,xe.map(e=>e.id)),await Kp(ie,Se,Se.map(e=>e.id)),await Kp(C,Ce,Ce.map(e=>e.id)),he.length&&await T.putMany([...new Map(he.map(e=>[e.id,e])).values()]),be.length&&await w.putMany(be),await Kp(e.readwrite(`page`),ve,ve.map(e=>e.id)),await Kp(ae,ye,ye.map(e=>e.id)),await s.put(t.meta),n})}var Jp=class extends Error{status;constructor(e,t){super(e),this.status=t,this.name=`SeedSourceError`}},Yp=class{baseUrl;fetchImpl;constructor(e,t=fetch.bind(globalThis)){this.baseUrl=e,this.fetchImpl=t}async fetchManifest(){let e=await this.fetchImpl(`${this.baseUrl}manifest.json`,{cache:`no-cache`});if(!e.ok)throw new Jp(`seed manifest fetch failed: HTTP ${e.status}`,e.status);return Rp(await e.json())}async fetchChunk(e){let t=await this.fetchImpl(`${this.baseUrl}${e}`);if(!t.ok)throw new Jp(`seed chunk fetch failed: HTTP ${t.status} for ${e}`,t.status);return await t.json()}},Xp=class{storageInstance;constructor(e){this.storageInstance=e}async getSeedMeta(e){return await this.storageInstance.readonly(`meta`).get(e)}async getNoteCommits(e){let t=await this.storageInstance.readonly(`notes`).getMany(e),n=new Map;for(let r=0;r<e.length;r++){let i=t[r];n.set(e[r],i?.seedCommit)}return n}async putSeedMeta(e,t){await this.storageInstance.transaction([`meta`],`readwrite`,async n=>{let r=n.readwrite(`meta`),i=await r.get(e.key);if(t!==void 0&&JSON.stringify(i??null)!==JSON.stringify(t))throw Error(`Seed checkpoint changed during claim`);await r.put(e)})}applyChunk(e){return qp(this.storageInstance,e)}async removeSourceContent(e){return await this.storageInstance.transaction([`notes`,`attachments`,`note_tags`,`block_index`,`block_efforts`,`block_equipment`,`page_notes`,`efforts`,`equipment`,`meta`],`readwrite`,async t=>{let n=new Set,r=[];for(let[t,i]of Object.entries(e.chunks))if(i.noteIds?.length)for(let e of i.noteIds)n.add(e);else r.push(t);if(r.length)for(let e of await t.readwrite(`notes`).getAll())e.seedOrigin===`seed`&&e.seedChunkId&&r.includes(e.seedChunkId)&&n.add(e.id);let i=t.readwrite(`meta`),a=[];for(let t of await i.getAll()){let n=t;if(!n||typeof n.key!=`string`||!n.key.startsWith(`seed:`)||n.key===e.key)continue;let r=new Set;for(let e of Object.values(n.chunks??{}))for(let t of e.noteIds??[])r.add(t);a.push({key:n.key,sourceId:n.key.slice(5),rank:kp(n.key,n.tier),meta:n,noteIds:r})}a.sort((e,t)=>t.rank-e.rank);let o=e=>a.some(t=>t.noteIds.has(e)),s=e.key.startsWith(`seed:`)?e.key.slice(5):e.key,c=t.readwrite(`notes`),l=0,u=new Set;for(let r of n){if(o(r))continue;let n=await c.get(r);if(!n||n.seedOrigin!==`seed`||n.seedChunkId&&!e.chunks[n.seedChunkId])continue;n.sourcePath&&u.add(n.sourcePath),await c.delete(r);let i=t.readwrite(`attachments`);for(let e of await i.getAllFromIndex(`by-note`,r))await i.delete(e.id);let a=t.readwrite(`note_tags`);for(let e of await a.getAllFromIndex(`by-note`,r))await a.delete(e.id);let s=t.readwrite(`block_index`);for(let e of await s.getAllFromIndex(`by-note`,r))await s.delete(e.id);let d=t.readwrite(`block_efforts`);for(let e of await d.getAllFromIndex(`by-note`,r))await d.delete(e.id);let f=t.readwrite(`block_equipment`);for(let e of await f.getAllFromIndex(`by-note`,r))await f.delete(e.id);let p=t.readwrite(`page_notes`);for(let e of await p.getAllFromIndex(`by-note`,r))await p.delete(e.id);l++}let d=[{storeName:`efforts`,familyPathPrefix:`markdown/efforts/`,parse:rf},{storeName:`equipment`,familyPathPrefix:`markdown/equipment/`,parse:af}];for(let{storeName:e,familyPathPrefix:r,parse:i}of d){let o=t.readwrite(e);for(let t of await o.getAll()){if(t.registrySource!==`bundled`||!(t.sourceId===s||t.ownerNoteId!==void 0&&n.has(t.ownerNoteId)&&(!t.sourceId||t.sourceId===e)||t.sourcePath!==void 0&&t.sourcePath.startsWith(r)&&u.has(t.sourcePath)))continue;let l=!1;for(let n of a){let r=n.meta.chunks?.[e]?.noteIds??[];for(let e of r){let r=await c.get(e);if(!r||r.seedOrigin!==`seed`)continue;let a=i(r.rawContent);if(a&&a.slug===t.slug){await o.put({...a,registrySource:`bundled`,ownerNoteId:r.id,sourceId:n.sourceId,sourcePath:r.sourcePath??``}),l=!0;break}}if(l)break}l||await o.delete(t.slug)}}return await i.delete(e.key),l})}},Zp=class{storage;source;sourceId;now;constructor(e,t,n,r=Date.now){this.storage=e,this.source=t,this.sourceId=n,this.now=r}async applyAll(e={}){let t=Rp(await this.source.fetchManifest()),n=jp(this.sourceId),r=await this.storage.getSeedMeta(n),i=r?.schema===9?r:void 0,a=i??Mp(n);if(t.version<a.seedVersion)throw Error(`Seed manifest is older than the stored checkpoint`);let o=t.version!==a.seedVersion||t.builtAt!==a.builtAt,s=t.chunks.filter(t=>e.notebookIds&&!e.notebookIds.includes(t.id)?!1:e.forceAll||o||a.chunks[t.id]?.sha256!==t.sha256);s.sort((e,t)=>Number(t.id===Ap)-Number(e.id===Ap));let c=Object.keys(a.chunks).filter(e=>!t.chunks.some(t=>t.id===e)),l={status:`current`,appliedChunks:0,totalNotes:0,totalEfforts:0,totalEquipment:0,totalBlocks:0,skippedUserOwned:0,deleted:0,addedNotes:0,updatedNotes:0};if(!s.length&&!c.length&&!o)return l;l.status=`imported`;let u=(t,n,r,i,a)=>e.onProgress?.({phase:t,chunkId:n,completedChunks:l.appliedChunks,totalChunks:s.length,totalNotes:l.totalNotes,totalEfforts:l.totalEfforts,totalEquipment:l.totalEquipment,totalBlocks:l.totalBlocks,skippedUserOwned:l.skippedUserOwned,deleted:l.deleted,addedNotes:l.addedNotes,updatedNotes:l.updatedNotes,...r===void 0?{}:{recordId:r},...i===void 0?{}:{completedRecords:i},...a===void 0?{}:{totalRecords:a}});for(let n=0;n<s.length;){let r=s.slice(n,n+(s[n]?.id===`canvas`?1:4));for(let n of r){let r,o=t.notebooks?.find(e=>e.notebookId===n.id)?.records??n.records;if(e.granularRecords&&o&&o.length>0){let t=!e.forceAll&&this.storage.getNoteCommits?await this.storage.getNoteCommits(o.map(e=>e.uuid)):void 0,i=t?o.filter(e=>t.get(e.uuid)!==e.commit):o,a=[],s=0;for(let e of i){u(`fetching`,n.id,e.uuid,s,i.length);let t=await this.source.fetchChunk(e.recordPath),r=Array.isArray(t)?zp(t):[Bp(t)];a.push(...r),s++}r=a}else if(u(`fetching`,n.id),r=zp(await this.source.fetchChunk(n.path)),r.length!==n.count)throw Error(`Seed chunk count mismatch`);let s=e.granularRecords&&o&&o.length>0?o.map(e=>e.uuid):await Promise.all(r.map(e=>Vp(e.path))),c={...a,chunks:{...a.chunks,[n.id]:{sha256:n.sha256,noteIds:s}},importedAt:this.now()};u(`applying`,n.id);let d=await this.storage.applyChunk({chunkId:n.id,rows:r,manifest:t,expectedMeta:i,meta:c});l.totalNotes+=d.totalNotes,l.totalEfforts+=d.totalEfforts,l.totalEquipment+=d.totalEquipment,l.totalBlocks+=d.totalBlocks,l.skippedUserOwned+=d.skippedUserOwned,l.deleted+=d.deleted,l.addedNotes+=d.addedNotes,l.updatedNotes+=d.updatedNotes,l.appliedChunks++,a=c,i=c,u(`committed`,n.id),n.id===`canvas`&&e.onFirstPaintApplied?.()}n+=r.length}for(let e of c){let n={...a.chunks};delete n[e];let r={...a,chunks:n,importedAt:this.now()},o=await this.storage.applyChunk({chunkId:e,rows:[],manifest:t,expectedMeta:i,meta:r});l.deleted+=o.deleted,a=r,i=r}let d={...a,schema:9,seedVersion:t.version,builtAt:t.builtAt,importedAt:this.now()};return await this.storage.applyChunk({chunkId:null,rows:[],manifest:t,expectedMeta:i,meta:d}),u(`finalizing`,null),l}};function Qp(e,t){return e===void 0||e<=0||t>e?`import`:t===e?`current`:`server-stale`}function $p(e,t){return e?.schema!==void 0&&e.schema!==9?!1:e?.seedVersion!=null&&e.seedVersion>0&&e.seedVersion===t}function em(e){return(e instanceof Error?e.message:String(e)).replace(/(authToken["'=:\s]+)[^&\s,"']+/gi,`$1…`).replace(/(Bearer\s+)[\w.-]+/gi,`$1…`).replace(/https?:\/\/[^\s]+/gi,e=>{try{let t=new URL(e);return`${t.protocol}//${t.host}/…`}catch{return`…`}}).slice(0,300)}function tm(e,t,n){let r=e?.claim;return!!r&&r.owner!==t&&n-r.at<45e3}async function nm(e,t,n={}){let{storage:r,owner:i}=t,a=t.now,o=jp(e.id),s={outcome:`current`,error:null,manifestChecked:!1,hadCheckpoint:!1};try{let c=await r.getSeedMeta(o);if(s.hadCheckpoint=(c?.seedVersion??0)>0,!t.force&&!t.probeManifests&&$p(c,e.embeddedVersion))return s.outcome=`current`,s;if(tm(c,i,a()))return s.outcome=`busy`,s;let l=Rp(await e.source.fetchManifest());s.manifestChecked=!0;let u=t.force?`import`:Qp(c?.seedVersion,l.version);if(u===`server-stale`)return s.outcome=`server-stale`,s;if(c&&c.schema!==9)throw Error(`Incompatible seed checkpoint; recreate storage`);if(t.background&&!e.autoSyncOn)return s.outcome=u===`import`?`update-pending`:`current`,s;if(!t.force&&u===`current`&&c?.schema===9&&c.builtAt===l.builtAt)return s.outcome=`current`,s;let d={...c??Mp(o),...e.tier?{tier:e.tier}:{},claim:{owner:i,at:a()}};await r.putSeedMeta(d,c??null);try{let i=await new Zp(r,e.source,e.id,a).applyAll({forceAll:t.force===!0,onFirstPaintApplied:()=>n.onFirstPaint?.(),onProgress:n.onProgress,notebookIds:e.notebookIds,granularRecords:e.granularRecords});s.outcome=`imported`,i.status===`imported`&&(s.applied=!0,s.importedVersion=l.version,s.added=i.addedNotes,s.updated=i.updatedNotes)}finally{let e=await r.getSeedMeta(o);e?.claim?.owner===i&&await r.putSeedMeta({...e,claim:null},e)}return s}catch(t){return console.warn(`[seedSync] ${e.id} seed sync failed`,t),s.outcome=`error`,s.error=em(t),s}}let rm=self;rm.onmessage=e=>{if(e.data.type!==`run`)return;let t=e.data;(async()=>{let e=new Xp(new Su({dbName:t.dbName,...t.userId?{getUserId:()=>t.userId}:{}})),n=[];for(let r of t.sources){let i=await nm({id:r.id,label:r.label,source:new Yp(r.url),embeddedVersion:r.embeddedVersion,autoSyncOn:r.autoSyncOn,...r.tier?{tier:r.tier}:{},notebookIds:r.notebookIds,granularRecords:r.granularRecords??!0},{storage:e,owner:t.owner,now:Date.now,force:t.force,probeManifests:t.probeManifests,background:t.background},{onProgress:e=>rm.postMessage({type:`progress`,sourceId:r.id,progress:e}),onFirstPaint:()=>rm.postMessage({type:`first-paint`,sourceId:r.id})});rm.postMessage({type:`source-result`,sourceId:r.id,result:i}),n.push(i.outcome)}rm.postMessage({type:`done`,outcomes:n})})()}})();
|
|
16
|
+
//# sourceMappingURL=seedSync.worker-CXyhCqQv.js.map
|
package/dist/web/server/assets/{statementBuilderFlow-DKx-1xHP.js → statementBuilderFlow-CQ3x0D5F.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{di as t}from"./vendor-BmgUyVmX.js";import{t as n}from"./main-
|
|
2
|
-
//# sourceMappingURL=statementBuilderFlow-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{di as t}from"./vendor-BmgUyVmX.js";import{t as n}from"./main-CESv8JYf.js";var r=e(t(),1),i={reps:[{id:`5`,label:`5 reps`,category:`Reps`,type:`statement-part`,payload:`5`},{id:`10`,label:`10 reps`,category:`Reps`,type:`statement-part`,payload:`10`},{id:`15`,label:`15 reps`,category:`Reps`,type:`statement-part`,payload:`15`},{id:`20`,label:`20 reps`,category:`Reps`,type:`statement-part`,payload:`20`},{id:`21`,label:`21 reps`,category:`Reps`,type:`statement-part`,payload:`21`}],movement:[{id:`kbs`,label:`Kettlebell Swings`,category:`Movement`,type:`statement-part`,payload:`Kettlebell Swings`},{id:`goblet`,label:`Goblet Squats`,category:`Movement`,type:`statement-part`,payload:`Goblet Squats`},{id:`press`,label:`Overhead Press`,category:`Movement`,type:`statement-part`,payload:`Overhead Press`},{id:`snatch`,label:`Kettlebell Snatch`,category:`Movement`,type:`statement-part`,payload:`Kettlebell Snatch`},{id:`row`,label:`Bent-over Row`,category:`Movement`,type:`statement-part`,payload:`Bent-over Row`},{id:`pullup`,label:`Pull-up`,category:`Movement`,type:`statement-part`,payload:`Pull-up`},{id:`burpee`,label:`Burpee`,category:`Movement`,type:`statement-part`,payload:`Burpee`}],weight:[{id:`16kg`,label:`16 kg`,category:`Weight`,type:`statement-part`,payload:`16kg`},{id:`20kg`,label:`20 kg`,category:`Weight`,type:`statement-part`,payload:`20kg`},{id:`24kg`,label:`24 kg`,category:`Weight`,type:`statement-part`,payload:`24kg`},{id:`32kg`,label:`32 kg`,category:`Weight`,type:`statement-part`,payload:`32kg`}]};function a(e){return{id:`segment:${e}`,label:e.charAt(0).toUpperCase()+e.slice(1),search:async t=>{let n=i[e];if(!t)return n;let r=t.toLowerCase();return n.filter(e=>e.label.toLowerCase().includes(r))}}}function o(e,t,n){return r.createElement(`div`,{className:`flex flex-col border-b border-border`},r.createElement(`div`,{className:`px-4 py-3 bg-primary/5`},r.createElement(`div`,{className:`flex items-center justify-between mb-3`},r.createElement(`span`,{className:`text-[10px] font-black uppercase tracking-widest text-primary`},`Statement Builder`),r.createElement(`span`,{className:`text-[10px] font-medium text-primary/60`},`Step ${t+1} of ${e.length}`)),r.createElement(`div`,{className:`flex flex-wrap gap-1.5 font-mono text-sm`},e.map((e,n)=>r.createElement(`div`,{key:n,className:n===t?`px-2 py-1 rounded-md border bg-primary text-primary-foreground border-primary shadow-md scale-105`:`px-2 py-1 rounded-md border bg-background text-foreground/60 border-border`},e)))),r.createElement(`div`,{className:`px-4 py-2 bg-muted/30 border-t border-border`},r.createElement(`span`,{className:`text-[10px] font-bold text-muted-foreground uppercase tracking-tight`},n[t]??`Value`)))}var s=[`reps`,`movement`,`weight`],c={reps:`Repetitions`,movement:`Movement`,weight:`Load / Intensity`};async function l(e,t,r){let i=n.getState(),l=t.state.doc.sliceString(e.lineFrom,e.lineTo),u=l.trim()?l.trim().split(/\s+/):[``,``,``],d=[u[0]??``,u[1]??``,u[2]??``],f=s.map(e=>c[e]),p=Math.max(0,s.indexOf(r));for(let e=p;e<s.length;e++){let t=s[e],n=await i.open({placeholder:`Set ${c[t].toLowerCase()}…`,header:o([...d],e,f),sources:[a(t)]});if(n.dismissed)break;d[e]=n.item.payload}let m=d.filter(Boolean).join(` `);m!==l.trim()&&t.dispatch({changes:{from:e.lineFrom,to:e.lineTo,insert:m}})}export{l as runStatementBuilderFlow};
|
|
2
|
+
//# sourceMappingURL=statementBuilderFlow-CQ3x0D5F.js.map
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
<link rel="icon" type="image/png" href="/images/wod-wiki-logo-light.png" />
|
|
36
36
|
<!-- Fonts are self-hosted via @fontsource imports in app/main.tsx (external render-blocking font stylesheets once blocked startup). -->
|
|
37
37
|
<!-- Google tag is injected by app/lib/telemetry-gtag.ts unless opted out in settings (PRD #767). -->
|
|
38
|
-
<script type="module" crossorigin src="/assets/main-
|
|
38
|
+
<script type="module" crossorigin src="/assets/main-CESv8JYf.js"></script>
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/vendor-BmgUyVmX.js">
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/assets/vendor-codemirror-CFcn3kQd.js">
|
|
42
42
|
<link rel="stylesheet" crossorigin href="/assets/vendor-CelWxf33.css">
|
|
43
|
-
<link rel="stylesheet" crossorigin href="/assets/main-
|
|
43
|
+
<link rel="stylesheet" crossorigin href="/assets/main-bpDz6cBb.css">
|
|
44
44
|
</head>
|
|
45
45
|
|
|
46
46
|
<body class="min-h-svh w-full bg-white dark:bg-zinc-900">
|