@titan-design/react-ui 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +19 -59
- package/dist/index.d.ts +19 -59
- package/dist/index.js +248 -371
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +249 -368
- package/dist/index.mjs.map +1 -1
- package/dist/{pages-DCFBqp79.d.mts → pages-D7hOD4Vj.d.mts} +1 -1
- package/dist/{pages-_fI3-x7Z.d.ts → pages-DyEx-lBf.d.ts} +1 -1
- package/dist/pages.d.mts +1 -1
- package/dist/pages.d.ts +1 -1
- package/dist/pages.js +199 -161
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +199 -161
- package/dist/pages.mjs.map +1 -1
- package/package.json +2 -1
- package/src/components/custom/Workout/ExerciseIndicator.tsx +1 -1
- package/src/components/custom/Workout/README.md +33 -13
- package/src/components/custom/Workout/SetsRepsLoad.test.tsx +6 -0
- package/src/components/custom/Workout/SetsRepsLoad.tsx +15 -6
- package/src/components/custom/Workout/TempoDisplay.stories.tsx +240 -65
- package/src/components/custom/Workout/TempoDisplay.test.tsx +61 -16
- package/src/components/custom/Workout/TempoDisplay.tsx +173 -60
- package/src/components/custom/Workout/VelocityStrip.test.tsx +3 -3
- package/src/components/custom/Workout/VelocityStrip.tsx +45 -11
- package/src/components/custom/Workout/ZoneTrack.tsx +15 -1
- package/src/components/custom/Workout/index.ts +1 -9
- package/src/test/no-device-internals.test.ts +51 -0
- package/src/components/custom/Workout/TempoBar.stories.tsx +0 -164
- package/src/components/custom/Workout/TempoBar.test.tsx +0 -218
- package/src/components/custom/Workout/TempoBar.tsx +0 -300
package/dist/index.mjs
CHANGED
|
@@ -5256,7 +5256,7 @@ function ToastProvider({
|
|
|
5256
5256
|
return id;
|
|
5257
5257
|
}, [defaultDuration, maxToasts]);
|
|
5258
5258
|
const removeToast = useCallback((id) => {
|
|
5259
|
-
setToasts((prev) => prev.filter((
|
|
5259
|
+
setToasts((prev) => prev.filter((t17) => t17.id !== id));
|
|
5260
5260
|
}, []);
|
|
5261
5261
|
const removeAllToasts = useCallback(() => {
|
|
5262
5262
|
setToasts([]);
|
|
@@ -7810,189 +7810,6 @@ function getLuminance(color) {
|
|
|
7810
7810
|
function getContrastText(backgroundColor) {
|
|
7811
7811
|
return getLuminance(backgroundColor) === "light" ? "#000000" : "#FFFFFF";
|
|
7812
7812
|
}
|
|
7813
|
-
var t2 = getSemanticColors("dark");
|
|
7814
|
-
var TEMPO_PACING = {
|
|
7815
|
-
behindThresholdPct: 0.15,
|
|
7816
|
-
minPhaseDurationMs: 500
|
|
7817
|
-
};
|
|
7818
|
-
function formatTempoDelta(remainingMs) {
|
|
7819
|
-
const s = remainingMs / 1e3;
|
|
7820
|
-
const rounded = Math.abs(s) < 0.05 ? 0 : s;
|
|
7821
|
-
return rounded.toFixed(1);
|
|
7822
|
-
}
|
|
7823
|
-
function getTempoPacingState(elapsedMs, targetMs) {
|
|
7824
|
-
if (!targetMs || targetMs < TEMPO_PACING.minPhaseDurationMs) return "none";
|
|
7825
|
-
const ratio = elapsedMs / targetMs;
|
|
7826
|
-
if (ratio > 1 + TEMPO_PACING.behindThresholdPct) return "behind";
|
|
7827
|
-
return "on-pace";
|
|
7828
|
-
}
|
|
7829
|
-
function getTempoFillPct(elapsedMs, targetMs) {
|
|
7830
|
-
if (!targetMs) return 100;
|
|
7831
|
-
return Math.min(100, elapsedMs / targetMs * 100);
|
|
7832
|
-
}
|
|
7833
|
-
var PHASE_ORDER = ["concentric", "hold", "eccentric"];
|
|
7834
|
-
var PHASE_CONFIG = {
|
|
7835
|
-
concentric: { label: "Con", wallLabel: "Concentric", color: t2["status-success"], flex: 2 },
|
|
7836
|
-
hold: { label: "Hold", wallLabel: "Hold", color: t2["brand-primary"], flex: 1 },
|
|
7837
|
-
eccentric: { label: "Ecc", wallLabel: "Eccentric", color: t2["status-warning"], flex: 3 }
|
|
7838
|
-
};
|
|
7839
|
-
var TEMPO_SIZES = {
|
|
7840
|
-
default: { labelMargin: 4, labelFont: 10, barGap: 2, barHeight: 20, radius: 4, segFont: 12 },
|
|
7841
|
-
wall: { labelMargin: 8, labelFont: 15, barGap: 4, barHeight: 40, radius: 6, segFont: 22 }
|
|
7842
|
-
};
|
|
7843
|
-
function TempoBar({
|
|
7844
|
-
activePhase,
|
|
7845
|
-
phaseElapsedMs,
|
|
7846
|
-
completed,
|
|
7847
|
-
target,
|
|
7848
|
-
size = "default",
|
|
7849
|
-
activeDisplay = "time",
|
|
7850
|
-
className,
|
|
7851
|
-
...props
|
|
7852
|
-
}) {
|
|
7853
|
-
const s = TEMPO_SIZES[size];
|
|
7854
|
-
const [display, setDisplay] = useState(activeDisplay);
|
|
7855
|
-
const toggleDisplay = () => setDisplay((d) => d === "time" ? "delta" : "time");
|
|
7856
|
-
return /* @__PURE__ */ jsxs(View, { className, testID: "tempo-bar", ...props, children: [
|
|
7857
|
-
/* @__PURE__ */ jsx(View, { style: { flexDirection: "row", marginBottom: s.labelMargin }, children: PHASE_ORDER.map((phase) => {
|
|
7858
|
-
const config = PHASE_CONFIG[phase];
|
|
7859
|
-
return /* @__PURE__ */ jsx(View, { style: { flex: config.flex, alignItems: "center" }, children: /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: { fontSize: s.labelFont, color: t2["text-disabled"] }, children: size === "wall" ? config.wallLabel : config.label }) }, phase);
|
|
7860
|
-
}) }),
|
|
7861
|
-
/* @__PURE__ */ jsx(View, { style: { flexDirection: "row", gap: s.barGap, height: s.barHeight }, children: PHASE_ORDER.map((phase) => {
|
|
7862
|
-
const config = PHASE_CONFIG[phase];
|
|
7863
|
-
const isActive = activePhase === phase;
|
|
7864
|
-
const completedMs = completed?.[phase];
|
|
7865
|
-
const targetSec = target?.[phase];
|
|
7866
|
-
const targetMs = targetSec != null ? targetSec * 1e3 : null;
|
|
7867
|
-
return /* @__PURE__ */ jsx(
|
|
7868
|
-
View,
|
|
7869
|
-
{
|
|
7870
|
-
style: {
|
|
7871
|
-
flex: config.flex,
|
|
7872
|
-
backgroundColor: alpha("#ffffff", 0.06),
|
|
7873
|
-
borderRadius: s.radius,
|
|
7874
|
-
overflow: "hidden"
|
|
7875
|
-
},
|
|
7876
|
-
children: isActive ? /* @__PURE__ */ jsx(
|
|
7877
|
-
ActiveSegment,
|
|
7878
|
-
{
|
|
7879
|
-
config,
|
|
7880
|
-
phaseElapsedMs,
|
|
7881
|
-
targetMs,
|
|
7882
|
-
radius: s.radius,
|
|
7883
|
-
font: s.segFont,
|
|
7884
|
-
display,
|
|
7885
|
-
onToggleDisplay: toggleDisplay
|
|
7886
|
-
}
|
|
7887
|
-
) : completedMs != null ? /* @__PURE__ */ jsx(
|
|
7888
|
-
CompletedSegment,
|
|
7889
|
-
{
|
|
7890
|
-
config,
|
|
7891
|
-
completedMs,
|
|
7892
|
-
targetMs,
|
|
7893
|
-
font: s.segFont
|
|
7894
|
-
}
|
|
7895
|
-
) : null
|
|
7896
|
-
},
|
|
7897
|
-
phase
|
|
7898
|
-
);
|
|
7899
|
-
}) })
|
|
7900
|
-
] });
|
|
7901
|
-
}
|
|
7902
|
-
function ActiveSegment({
|
|
7903
|
-
config,
|
|
7904
|
-
phaseElapsedMs,
|
|
7905
|
-
targetMs,
|
|
7906
|
-
radius,
|
|
7907
|
-
font,
|
|
7908
|
-
display,
|
|
7909
|
-
onToggleDisplay
|
|
7910
|
-
}) {
|
|
7911
|
-
const pacing = getTempoPacingState(phaseElapsedMs, targetMs);
|
|
7912
|
-
const barColor = pacing === "behind" ? t2["status-error"] : config.color;
|
|
7913
|
-
const fillPct = getTempoFillPct(phaseElapsedMs, targetMs);
|
|
7914
|
-
const label = display === "delta" && targetMs != null ? formatTempoDelta(targetMs - phaseElapsedMs) : targetMs != null ? `${formatDuration2(phaseElapsedMs)} / ${formatDuration2(targetMs)}` : formatDuration2(phaseElapsedMs);
|
|
7915
|
-
return /* @__PURE__ */ jsxs(
|
|
7916
|
-
Pressable,
|
|
7917
|
-
{
|
|
7918
|
-
onPress: onToggleDisplay,
|
|
7919
|
-
style: { height: "100%", position: "relative" },
|
|
7920
|
-
accessibilityRole: "button",
|
|
7921
|
-
accessibilityLabel: `Tempo readout: ${display === "delta" ? "delta" : "time"} \u2014 tap to switch`,
|
|
7922
|
-
testID: `tempo-segment-active-${config.label}`,
|
|
7923
|
-
children: [
|
|
7924
|
-
/* @__PURE__ */ jsx(
|
|
7925
|
-
View,
|
|
7926
|
-
{
|
|
7927
|
-
style: {
|
|
7928
|
-
position: "absolute",
|
|
7929
|
-
left: 0,
|
|
7930
|
-
top: 0,
|
|
7931
|
-
bottom: 0,
|
|
7932
|
-
width: `${fillPct}%`,
|
|
7933
|
-
backgroundColor: alpha(barColor, 0.3),
|
|
7934
|
-
borderRadius: radius
|
|
7935
|
-
}
|
|
7936
|
-
}
|
|
7937
|
-
),
|
|
7938
|
-
/* @__PURE__ */ jsx(
|
|
7939
|
-
View,
|
|
7940
|
-
{
|
|
7941
|
-
style: {
|
|
7942
|
-
height: "100%",
|
|
7943
|
-
flexDirection: "row",
|
|
7944
|
-
alignItems: "center",
|
|
7945
|
-
justifyContent: "center"
|
|
7946
|
-
},
|
|
7947
|
-
children: /* @__PURE__ */ jsx(Text, { style: { fontSize: font, fontWeight: "700", color: barColor }, children: label })
|
|
7948
|
-
}
|
|
7949
|
-
)
|
|
7950
|
-
]
|
|
7951
|
-
}
|
|
7952
|
-
);
|
|
7953
|
-
}
|
|
7954
|
-
function CompletedSegment({
|
|
7955
|
-
config,
|
|
7956
|
-
completedMs,
|
|
7957
|
-
targetMs,
|
|
7958
|
-
font
|
|
7959
|
-
}) {
|
|
7960
|
-
const pacing = getTempoPacingState(completedMs, targetMs);
|
|
7961
|
-
const hitTarget = pacing !== "behind";
|
|
7962
|
-
const indicator = targetMs && targetMs >= TEMPO_PACING.minPhaseDurationMs ? hitTarget ? " \u2713" : " \u2717" : "";
|
|
7963
|
-
const cueColor = hitTarget ? config.color : t2["status-error"];
|
|
7964
|
-
return /* @__PURE__ */ jsx(
|
|
7965
|
-
View,
|
|
7966
|
-
{
|
|
7967
|
-
style: {
|
|
7968
|
-
height: "100%",
|
|
7969
|
-
flexDirection: "row",
|
|
7970
|
-
alignItems: "center",
|
|
7971
|
-
justifyContent: "center",
|
|
7972
|
-
backgroundColor: alpha(cueColor, 0.15)
|
|
7973
|
-
},
|
|
7974
|
-
testID: `tempo-segment-completed-${config.label}`,
|
|
7975
|
-
children: /* @__PURE__ */ jsxs(
|
|
7976
|
-
Text,
|
|
7977
|
-
{
|
|
7978
|
-
style: {
|
|
7979
|
-
fontSize: font,
|
|
7980
|
-
fontWeight: "500",
|
|
7981
|
-
color: hitTarget ? alpha(config.color, 0.7) : cueColor
|
|
7982
|
-
},
|
|
7983
|
-
children: [
|
|
7984
|
-
formatDuration2(completedMs),
|
|
7985
|
-
indicator
|
|
7986
|
-
]
|
|
7987
|
-
}
|
|
7988
|
-
)
|
|
7989
|
-
}
|
|
7990
|
-
);
|
|
7991
|
-
}
|
|
7992
|
-
function formatDuration2(ms) {
|
|
7993
|
-
const s = ms / 1e3;
|
|
7994
|
-
return s < 10 ? s.toFixed(1) : Math.round(s).toString();
|
|
7995
|
-
}
|
|
7996
7813
|
var METRIC_FONT = "Inter, sans-serif";
|
|
7997
7814
|
function MetricCell({ children, color, fontSize = 11 }) {
|
|
7998
7815
|
return /* @__PURE__ */ jsx(
|
|
@@ -8011,14 +7828,32 @@ function MetricCell({ children, color, fontSize = 11 }) {
|
|
|
8011
7828
|
}
|
|
8012
7829
|
|
|
8013
7830
|
// src/components/custom/Workout/TempoDisplay.tsx
|
|
8014
|
-
var
|
|
7831
|
+
var t2 = getSemanticColors("dark");
|
|
8015
7832
|
var INTER = "Inter, sans-serif";
|
|
8016
7833
|
var TEXT_TERTIARY = "#6B7280";
|
|
8017
|
-
var STATUS_ERROR =
|
|
7834
|
+
var STATUS_ERROR = t2["status-error"];
|
|
7835
|
+
var STATUS_SUCCESS = t2["status-success"];
|
|
7836
|
+
var STATUS_WARNING = t2["status-warning"];
|
|
7837
|
+
var ON_TARGET_MS = 100;
|
|
7838
|
+
function getTempoFillPct(elapsedMs, targetMs) {
|
|
7839
|
+
if (!targetMs) return 100;
|
|
7840
|
+
return Math.min(100, elapsedMs / targetMs * 100);
|
|
7841
|
+
}
|
|
7842
|
+
function activeNumberTone(elapsedMs, targetMs) {
|
|
7843
|
+
if (targetMs == null) return t2["text-primary"];
|
|
7844
|
+
const remainingMs = targetMs - elapsedMs;
|
|
7845
|
+
if (remainingMs > ON_TARGET_MS) return STATUS_WARNING;
|
|
7846
|
+
if (remainingMs >= -ON_TARGET_MS) return STATUS_SUCCESS;
|
|
7847
|
+
return STATUS_ERROR;
|
|
7848
|
+
}
|
|
7849
|
+
function liveReadoutText(elapsedMs, targetMs, readout) {
|
|
7850
|
+
const seconds = readout === "countup" ? elapsedMs / 1e3 : (targetMs - elapsedMs) / 1e3;
|
|
7851
|
+
return seconds.toFixed(1);
|
|
7852
|
+
}
|
|
8018
7853
|
var phaseColors = {
|
|
8019
|
-
eccentric:
|
|
7854
|
+
eccentric: primitiveRamps.magenta[400],
|
|
8020
7855
|
pauseBottom: TEXT_TERTIARY,
|
|
8021
|
-
concentric:
|
|
7856
|
+
concentric: primitiveRamps.cyan[300],
|
|
8022
7857
|
pauseTop: TEXT_TERTIARY,
|
|
8023
7858
|
dash: TEXT_TERTIARY
|
|
8024
7859
|
};
|
|
@@ -8038,63 +7873,98 @@ var LIVE_PHASES = [
|
|
|
8038
7873
|
{ key: "concentric", color: phaseColors.concentric },
|
|
8039
7874
|
{ key: "pauseTop", color: phaseColors.pauseTop }
|
|
8040
7875
|
];
|
|
7876
|
+
function CellFill({ color, pct: pct2 }) {
|
|
7877
|
+
return /* @__PURE__ */ jsx(
|
|
7878
|
+
View,
|
|
7879
|
+
{
|
|
7880
|
+
style: {
|
|
7881
|
+
position: "absolute",
|
|
7882
|
+
left: 2,
|
|
7883
|
+
right: 2,
|
|
7884
|
+
bottom: 0,
|
|
7885
|
+
height: `${pct2}%`,
|
|
7886
|
+
backgroundColor: alpha(color, 0.28),
|
|
7887
|
+
borderRadius: 3
|
|
7888
|
+
}
|
|
7889
|
+
}
|
|
7890
|
+
);
|
|
7891
|
+
}
|
|
7892
|
+
var MONO = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
7893
|
+
var READOUT_MAX_CHARS = 5;
|
|
8041
7894
|
function LiveTempoCell({
|
|
8042
7895
|
value,
|
|
8043
7896
|
color,
|
|
8044
|
-
|
|
7897
|
+
status,
|
|
8045
7898
|
phaseElapsedMs,
|
|
8046
|
-
|
|
7899
|
+
completedMs,
|
|
7900
|
+
fontSize,
|
|
7901
|
+
readout
|
|
8047
7902
|
}) {
|
|
8048
|
-
if (!isActive) {
|
|
8049
|
-
return /* @__PURE__ */ jsx(TempoValue, { value, color: alpha(color, 0.35), fontSize });
|
|
8050
|
-
}
|
|
8051
7903
|
const targetMs = value > 0 ? value * 1e3 : null;
|
|
8052
|
-
const
|
|
7904
|
+
const cellW = Math.ceil(fontSize * 0.62 * READOUT_MAX_CHARS);
|
|
7905
|
+
const wrap = {
|
|
7906
|
+
position: "relative",
|
|
7907
|
+
width: cellW,
|
|
7908
|
+
minHeight: Math.round(fontSize * 1.25),
|
|
7909
|
+
alignItems: "center",
|
|
7910
|
+
justifyContent: "center"
|
|
7911
|
+
};
|
|
7912
|
+
const num = (c, text) => /* @__PURE__ */ jsx(Text, { style: { fontFamily: MONO, fontSize, color: c, fontWeight: "700" }, children: text });
|
|
7913
|
+
if (status === "upcoming") {
|
|
7914
|
+
const targetText = targetMs != null ? (targetMs / 1e3).toFixed(1) : String(value);
|
|
7915
|
+
return /* @__PURE__ */ jsx(View, { style: wrap, children: num(color, targetText) });
|
|
7916
|
+
}
|
|
7917
|
+
if (status === "done") {
|
|
7918
|
+
const finalMs = completedMs ?? targetMs ?? 0;
|
|
7919
|
+
const finalText = targetMs != null ? liveReadoutText(finalMs, targetMs, readout) : String(value);
|
|
7920
|
+
const finalTone = targetMs != null ? activeNumberTone(finalMs, targetMs) : color;
|
|
7921
|
+
return /* @__PURE__ */ jsxs(View, { style: wrap, testID: "tempo-live-done", children: [
|
|
7922
|
+
/* @__PURE__ */ jsx(CellFill, { color, pct: 100 }),
|
|
7923
|
+
num(finalTone, finalText)
|
|
7924
|
+
] });
|
|
7925
|
+
}
|
|
7926
|
+
const numberTone = activeNumberTone(phaseElapsedMs, targetMs);
|
|
8053
7927
|
const fillPct = getTempoFillPct(phaseElapsedMs, targetMs);
|
|
8054
|
-
|
|
8055
|
-
|
|
8056
|
-
|
|
8057
|
-
|
|
8058
|
-
style: {
|
|
8059
|
-
position: "absolute",
|
|
8060
|
-
left: 0,
|
|
8061
|
-
top: 0,
|
|
8062
|
-
bottom: 0,
|
|
8063
|
-
width: `${fillPct}%`,
|
|
8064
|
-
backgroundColor: alpha(barColor, 0.3),
|
|
8065
|
-
borderRadius: 2
|
|
8066
|
-
}
|
|
8067
|
-
}
|
|
8068
|
-
),
|
|
8069
|
-
/* @__PURE__ */ jsx(TempoValue, { value, color: barColor, fontSize })
|
|
7928
|
+
const activeText = targetMs != null ? liveReadoutText(phaseElapsedMs, targetMs, readout) : String(value);
|
|
7929
|
+
return /* @__PURE__ */ jsxs(View, { style: wrap, testID: "tempo-live-active", children: [
|
|
7930
|
+
/* @__PURE__ */ jsx(CellFill, { color, pct: fillPct }),
|
|
7931
|
+
num(numberTone, activeText)
|
|
8070
7932
|
] });
|
|
8071
7933
|
}
|
|
8072
7934
|
function LiveTempoRow({
|
|
8073
7935
|
values,
|
|
8074
7936
|
live,
|
|
8075
|
-
fontSize
|
|
8076
|
-
|
|
8077
|
-
|
|
8078
|
-
|
|
8079
|
-
|
|
8080
|
-
|
|
8081
|
-
|
|
8082
|
-
|
|
8083
|
-
|
|
8084
|
-
|
|
8085
|
-
|
|
8086
|
-
|
|
8087
|
-
|
|
8088
|
-
|
|
8089
|
-
|
|
7937
|
+
fontSize,
|
|
7938
|
+
readout
|
|
7939
|
+
}) {
|
|
7940
|
+
const activeIndex = live.activePhase ? LIVE_PHASES.findIndex((p) => p.key === live.activePhase) : -1;
|
|
7941
|
+
return /* @__PURE__ */ jsx(Fragment, { children: LIVE_PHASES.map((phase, i) => {
|
|
7942
|
+
const status = activeIndex < 0 || i > activeIndex ? "upcoming" : i < activeIndex ? "done" : "active";
|
|
7943
|
+
return /* @__PURE__ */ jsxs(View, { style: { flexDirection: "row", alignItems: "center" }, children: [
|
|
7944
|
+
i > 0 && /* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
7945
|
+
/* @__PURE__ */ jsx(
|
|
7946
|
+
LiveTempoCell,
|
|
7947
|
+
{
|
|
7948
|
+
value: values[i],
|
|
7949
|
+
color: phase.color,
|
|
7950
|
+
status,
|
|
7951
|
+
phaseElapsedMs: live.phaseElapsedMs,
|
|
7952
|
+
completedMs: live.completed?.[phase.key],
|
|
7953
|
+
fontSize,
|
|
7954
|
+
readout
|
|
7955
|
+
}
|
|
7956
|
+
)
|
|
7957
|
+
] }, phase.key);
|
|
7958
|
+
}) });
|
|
8090
7959
|
}
|
|
8091
7960
|
function TempoDisplay({
|
|
8092
7961
|
tempo,
|
|
8093
7962
|
size = "md",
|
|
8094
|
-
|
|
7963
|
+
fontSize: fontSizeProp,
|
|
8095
7964
|
showLabel = true,
|
|
8096
7965
|
showInfo = true,
|
|
8097
7966
|
live,
|
|
7967
|
+
liveReadout = "countdown",
|
|
8098
7968
|
onPress,
|
|
8099
7969
|
className,
|
|
8100
7970
|
...props
|
|
@@ -8102,8 +7972,11 @@ function TempoDisplay({
|
|
|
8102
7972
|
const [showTooltip, setShowTooltip] = useState(false);
|
|
8103
7973
|
const [eccentric, pauseBottom, concentric, pauseTop] = roundTempo(tempo);
|
|
8104
7974
|
const isSm = size === "sm";
|
|
8105
|
-
const fontSize = isSm ? 9 : 11;
|
|
8106
|
-
const
|
|
7975
|
+
const fontSize = fontSizeProp ?? (isSm ? 9 : 11);
|
|
7976
|
+
const chromePadX = Math.round(fontSize * 0.6);
|
|
7977
|
+
const chromePadY = Math.round(fontSize * 0.3);
|
|
7978
|
+
const chromeRadius = Math.round(fontSize * 0.4);
|
|
7979
|
+
const labelFont = Math.max(9, Math.round(fontSize * 0.5));
|
|
8107
7980
|
const handlePress = useCallback(() => {
|
|
8108
7981
|
if (onPress) {
|
|
8109
7982
|
onPress();
|
|
@@ -8120,9 +7993,9 @@ function TempoDisplay({
|
|
|
8120
7993
|
flexDirection: "row",
|
|
8121
7994
|
alignItems: "center",
|
|
8122
7995
|
backgroundColor: "#1C1C1C",
|
|
8123
|
-
paddingHorizontal:
|
|
8124
|
-
paddingVertical:
|
|
8125
|
-
borderRadius:
|
|
7996
|
+
paddingHorizontal: chromePadX,
|
|
7997
|
+
paddingVertical: chromePadY,
|
|
7998
|
+
borderRadius: chromeRadius
|
|
8126
7999
|
},
|
|
8127
8000
|
...props,
|
|
8128
8001
|
children: [
|
|
@@ -8131,12 +8004,13 @@ function TempoDisplay({
|
|
|
8131
8004
|
{
|
|
8132
8005
|
style: {
|
|
8133
8006
|
fontFamily: INTER,
|
|
8134
|
-
fontSize:
|
|
8007
|
+
fontSize: labelFont,
|
|
8135
8008
|
fontWeight: "500",
|
|
8136
|
-
|
|
8009
|
+
// Live-muted green while a rep is running, tertiary at rest.
|
|
8010
|
+
color: live ? t2["status-live-muted"] : TEXT_TERTIARY,
|
|
8137
8011
|
letterSpacing: 0.5,
|
|
8138
8012
|
textTransform: "uppercase",
|
|
8139
|
-
marginRight:
|
|
8013
|
+
marginRight: Math.round(fontSize * 0.5)
|
|
8140
8014
|
},
|
|
8141
8015
|
children: "TEMPO"
|
|
8142
8016
|
}
|
|
@@ -8146,36 +8020,20 @@ function TempoDisplay({
|
|
|
8146
8020
|
{
|
|
8147
8021
|
values: [eccentric, pauseBottom, concentric, pauseTop],
|
|
8148
8022
|
live,
|
|
8149
|
-
fontSize
|
|
8150
|
-
|
|
8151
|
-
) : colored ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8152
|
-
/* @__PURE__ */ jsx(TempoValue, { value: eccentric, color: phaseColors.eccentric, fontSize }),
|
|
8153
|
-
/* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
8154
|
-
/* @__PURE__ */ jsx(TempoValue, { value: pauseBottom, color: phaseColors.pauseBottom, fontSize }),
|
|
8155
|
-
/* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
8156
|
-
/* @__PURE__ */ jsx(TempoValue, { value: concentric, color: phaseColors.concentric, fontSize }),
|
|
8157
|
-
/* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
8158
|
-
/* @__PURE__ */ jsx(TempoValue, { value: pauseTop, color: phaseColors.pauseTop, fontSize })
|
|
8159
|
-
] }) : /* @__PURE__ */ jsxs(
|
|
8160
|
-
Text,
|
|
8161
|
-
{
|
|
8162
|
-
style: {
|
|
8163
|
-
fontFamily: INTER,
|
|
8164
|
-
fontSize,
|
|
8165
|
-
color: monoColor,
|
|
8166
|
-
fontWeight: "600",
|
|
8167
|
-
letterSpacing: 1
|
|
8168
|
-
},
|
|
8169
|
-
children: [
|
|
8170
|
-
eccentric,
|
|
8171
|
-
"-",
|
|
8172
|
-
pauseBottom,
|
|
8173
|
-
"-",
|
|
8174
|
-
concentric,
|
|
8175
|
-
"-",
|
|
8176
|
-
pauseTop
|
|
8177
|
-
]
|
|
8023
|
+
fontSize,
|
|
8024
|
+
readout: liveReadout
|
|
8178
8025
|
}
|
|
8026
|
+
) : (
|
|
8027
|
+
// Static prescription: the phase-coloured lockup (the same colours the live row rests at).
|
|
8028
|
+
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8029
|
+
/* @__PURE__ */ jsx(TempoValue, { value: eccentric, color: phaseColors.eccentric, fontSize }),
|
|
8030
|
+
/* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
8031
|
+
/* @__PURE__ */ jsx(TempoValue, { value: pauseBottom, color: phaseColors.pauseBottom, fontSize }),
|
|
8032
|
+
/* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
8033
|
+
/* @__PURE__ */ jsx(TempoValue, { value: concentric, color: phaseColors.concentric, fontSize }),
|
|
8034
|
+
/* @__PURE__ */ jsx(TempoSeparator, { color: phaseColors.dash, fontSize }),
|
|
8035
|
+
/* @__PURE__ */ jsx(TempoValue, { value: pauseTop, color: phaseColors.pauseTop, fontSize })
|
|
8036
|
+
] })
|
|
8179
8037
|
) })
|
|
8180
8038
|
]
|
|
8181
8039
|
}
|
|
@@ -8260,13 +8118,13 @@ function TempoDisplay({
|
|
|
8260
8118
|
}
|
|
8261
8119
|
);
|
|
8262
8120
|
}
|
|
8263
|
-
var
|
|
8121
|
+
var t3 = getSemanticColors("dark");
|
|
8264
8122
|
function getDotColor(deviation) {
|
|
8265
8123
|
const abs = Math.abs(deviation);
|
|
8266
|
-
if (deviation < -0.3) return
|
|
8124
|
+
if (deviation < -0.3) return t3["status-success"];
|
|
8267
8125
|
if (abs <= 0.3) return "#6B7280";
|
|
8268
|
-
if (abs <= 0.7) return
|
|
8269
|
-
return
|
|
8126
|
+
if (abs <= 0.7) return t3["status-warning"];
|
|
8127
|
+
return t3["status-error"];
|
|
8270
8128
|
}
|
|
8271
8129
|
function getDeviationDescription(deviation) {
|
|
8272
8130
|
if (deviation < -0.3) return "lighter than planned";
|
|
@@ -8334,19 +8192,19 @@ function DeviationBar({
|
|
|
8334
8192
|
}
|
|
8335
8193
|
);
|
|
8336
8194
|
}
|
|
8337
|
-
var
|
|
8195
|
+
var t4 = getSemanticColors("dark");
|
|
8338
8196
|
var TRACK_BG = "#333333";
|
|
8339
8197
|
var LABEL_COLOR = "#6B7280";
|
|
8340
8198
|
var TARGET_LINE_COLOR = "rgba(33, 150, 243, 0.5)";
|
|
8341
8199
|
var AT_TARGET_GLOW = "0 0 5px 1px rgba(33, 150, 243, 0.35), 0 0 10px 3px rgba(33, 150, 243, 0.15)";
|
|
8342
8200
|
var ZONE = {
|
|
8343
|
-
building:
|
|
8201
|
+
building: t4["status-success"],
|
|
8344
8202
|
// below target ramp-up
|
|
8345
|
-
approaching:
|
|
8203
|
+
approaching: t4["status-warning"],
|
|
8346
8204
|
// nearing target
|
|
8347
|
-
target:
|
|
8205
|
+
target: t4["brand-primary"],
|
|
8348
8206
|
// exactly at target
|
|
8349
|
-
over1:
|
|
8207
|
+
over1: t4["status-error"],
|
|
8350
8208
|
// mild over-target
|
|
8351
8209
|
over2: WORKOUT_TOKENS.intensity.over2,
|
|
8352
8210
|
// moderate over-target
|
|
@@ -8515,7 +8373,7 @@ var MESO_ACCENT_GRADIENT_LIGHT = primitiveRamps.orange[300];
|
|
|
8515
8373
|
var WORKOUT_PILL_DELOAD = primitiveRamps.magenta[600];
|
|
8516
8374
|
|
|
8517
8375
|
// src/components/custom/Workout/WorkoutPill.tsx
|
|
8518
|
-
var
|
|
8376
|
+
var t5 = getSemanticColors("dark");
|
|
8519
8377
|
var statusBgColors = {
|
|
8520
8378
|
completed: "rgba(46,213,115,0.15)",
|
|
8521
8379
|
current: "rgba(255,121,0,0.15)",
|
|
@@ -8533,9 +8391,9 @@ var statusBorderStyles = {
|
|
|
8533
8391
|
deload: { borderWidth: 1, borderColor: "rgba(186,41,150,0.3)" }
|
|
8534
8392
|
};
|
|
8535
8393
|
var textColors = {
|
|
8536
|
-
completed:
|
|
8537
|
-
current:
|
|
8538
|
-
next:
|
|
8394
|
+
completed: t5["status-success"],
|
|
8395
|
+
current: t5["brand-primary"],
|
|
8396
|
+
next: t5["brand-primary"],
|
|
8539
8397
|
upcoming: "#6B7280",
|
|
8540
8398
|
missed: "rgba(209,67,67,0.7)",
|
|
8541
8399
|
deload: WORKOUT_PILL_DELOAD
|
|
@@ -9078,13 +8936,15 @@ var BARE_STUB_HEIGHT = 3;
|
|
|
9078
8936
|
var HERO_HEIGHT = 220;
|
|
9079
8937
|
var HERO_LABEL_HEADROOM = 20;
|
|
9080
8938
|
var HERO_BAR_GAP = 8;
|
|
9081
|
-
var HERO_BAR_MAX_WIDTH =
|
|
8939
|
+
var HERO_BAR_MAX_WIDTH = 120;
|
|
8940
|
+
var HERO_LABEL_MIN_BAR_WIDTH = 30;
|
|
9082
8941
|
var HERO_BAR_RADIUS = 5;
|
|
9083
8942
|
var HERO_MIN_BAR_HEIGHT = 4;
|
|
9084
8943
|
var HERO_PENDING_COLOR = primitiveColors.charcoal[100];
|
|
9085
8944
|
var HERO_REFERENCE_COLOR = primitiveColors.charcoal[0];
|
|
8945
|
+
var PEAK_HEADROOM = 1.06;
|
|
9086
8946
|
function scaleDenominator(scale, maxVelocity) {
|
|
9087
|
-
return scale === "fixed" ? FIXED_MAX_VELOCITY : maxVelocity *
|
|
8947
|
+
return scale === "fixed" ? FIXED_MAX_VELOCITY : maxVelocity * PEAK_HEADROOM;
|
|
9088
8948
|
}
|
|
9089
8949
|
function bareSlotHeight(slot, height, denom) {
|
|
9090
8950
|
if (slot.kind !== "rep" || denom <= 0) return BARE_STUB_HEIGHT;
|
|
@@ -9161,10 +9021,21 @@ function HeroVelocityChart({
|
|
|
9161
9021
|
}) {
|
|
9162
9022
|
const liveVelocity = liveRepIndex != null ? doneVelocities[liveRepIndex] : void 0;
|
|
9163
9023
|
const liveScale = useLiveRepPop(true, liveRepIndex, liveVelocity, isNewPeak);
|
|
9024
|
+
const [plotW, setPlotW] = useState(0);
|
|
9025
|
+
const onPlotLayout = (e) => setPlotW(e.nativeEvent.layout.width);
|
|
9164
9026
|
const plotHeight = Math.max(0, height - HERO_LABEL_HEADROOM);
|
|
9165
9027
|
const barHeight = (velocity) => scaleDenom > 0 ? Math.max(HERO_MIN_BAR_HEIGHT, Math.min(1, velocity / scaleDenom) * plotHeight) : HERO_MIN_BAR_HEIGHT;
|
|
9166
9028
|
const pendingCount = Math.max(0, (targetReps ?? 0) - doneVelocities.length);
|
|
9167
9029
|
const referencePx = referenceVelocity > 0 && scaleDenom > 0 ? Math.min(plotHeight, referenceVelocity / scaleDenom * plotHeight) : 0;
|
|
9030
|
+
const totalSlots = doneVelocities.length + pendingCount;
|
|
9031
|
+
const barWidth = plotW > 0 && totalSlots > 0 ? Math.min(HERO_BAR_MAX_WIDTH, (plotW - HERO_BAR_GAP * (totalSlots - 1)) / totalSlots) : HERO_BAR_MAX_WIDTH;
|
|
9032
|
+
const labelsCrowded = plotW > 0 && barWidth < HERO_LABEL_MIN_BAR_WIDTH;
|
|
9033
|
+
const heroGap = plotW === 0 ? HERO_BAR_GAP : barWidth < 16 ? 2 : barWidth < 28 ? 4 : HERO_BAR_GAP;
|
|
9034
|
+
const peakIndex = doneVelocities.reduce(
|
|
9035
|
+
(best, v, i) => v > doneVelocities[best] ? i : best,
|
|
9036
|
+
0
|
|
9037
|
+
);
|
|
9038
|
+
const showBarLabel = (i) => !labelsCrowded || i === peakIndex || i === liveRepIndex;
|
|
9168
9039
|
const repCount = doneVelocities.length;
|
|
9169
9040
|
const total = Math.max(repCount, targetReps ?? repCount);
|
|
9170
9041
|
const label = referenceVelocity > 0 ? `Velocity chart, ${repCount} of ${total} reps, best ${formatVelocity(referenceVelocity)} meters per second` : `Velocity chart, ${repCount} of ${total} reps`;
|
|
@@ -9181,11 +9052,12 @@ function HeroVelocityChart({
|
|
|
9181
9052
|
children: /* @__PURE__ */ jsxs(
|
|
9182
9053
|
View,
|
|
9183
9054
|
{
|
|
9055
|
+
onLayout: onPlotLayout,
|
|
9184
9056
|
style: {
|
|
9185
9057
|
flex: 1,
|
|
9186
9058
|
flexDirection: "row",
|
|
9187
9059
|
alignItems: "flex-end",
|
|
9188
|
-
gap:
|
|
9060
|
+
gap: heroGap,
|
|
9189
9061
|
position: "relative",
|
|
9190
9062
|
borderBottomWidth: 2,
|
|
9191
9063
|
borderBottomColor: HERO_PENDING_COLOR
|
|
@@ -9222,7 +9094,7 @@ function HeroVelocityChart({
|
|
|
9222
9094
|
justifyContent: "flex-end"
|
|
9223
9095
|
},
|
|
9224
9096
|
children: [
|
|
9225
|
-
/* @__PURE__ */ jsx(
|
|
9097
|
+
showBarLabel(i) && /* @__PURE__ */ jsx(
|
|
9226
9098
|
Text,
|
|
9227
9099
|
{
|
|
9228
9100
|
className: "text-text-primary",
|
|
@@ -9668,13 +9540,13 @@ function VelocityStrip({
|
|
|
9668
9540
|
}
|
|
9669
9541
|
return stripContent;
|
|
9670
9542
|
}
|
|
9671
|
-
var
|
|
9543
|
+
var t6 = getSemanticColors("dark");
|
|
9672
9544
|
var dotColorMap = {
|
|
9673
9545
|
untrained: "#2C2C2C",
|
|
9674
|
-
behind:
|
|
9675
|
-
ontrack:
|
|
9676
|
-
target:
|
|
9677
|
-
over:
|
|
9546
|
+
behind: t6["brand-secondary"],
|
|
9547
|
+
ontrack: t6["status-success"],
|
|
9548
|
+
target: t6["brand-primary"],
|
|
9549
|
+
over: t6["status-error"]
|
|
9678
9550
|
};
|
|
9679
9551
|
function MuscleGroupChip({
|
|
9680
9552
|
name,
|
|
@@ -10377,7 +10249,7 @@ function RestTimer({
|
|
|
10377
10249
|
}
|
|
10378
10250
|
);
|
|
10379
10251
|
}
|
|
10380
|
-
var
|
|
10252
|
+
var t7 = getSemanticColors("dark");
|
|
10381
10253
|
var TIMES = "\xD7";
|
|
10382
10254
|
var AT = "@";
|
|
10383
10255
|
function SetsRepsLoad({
|
|
@@ -10385,11 +10257,12 @@ function SetsRepsLoad({
|
|
|
10385
10257
|
reps,
|
|
10386
10258
|
load,
|
|
10387
10259
|
unit = "lb",
|
|
10260
|
+
fontSize,
|
|
10388
10261
|
className,
|
|
10389
10262
|
...props
|
|
10390
10263
|
}) {
|
|
10391
|
-
const value =
|
|
10392
|
-
const sep =
|
|
10264
|
+
const value = t7["text-primary"];
|
|
10265
|
+
const sep = t7["text-tertiary"];
|
|
10393
10266
|
return /* @__PURE__ */ jsxs(
|
|
10394
10267
|
View,
|
|
10395
10268
|
{
|
|
@@ -10399,12 +10272,12 @@ function SetsRepsLoad({
|
|
|
10399
10272
|
testID: "sets-reps-load",
|
|
10400
10273
|
...props,
|
|
10401
10274
|
children: [
|
|
10402
|
-
/* @__PURE__ */ jsx(MetricCell, { color: value, children: sets }),
|
|
10403
|
-
/* @__PURE__ */ jsx(MetricCell, { color: sep, children: ` ${TIMES} ` }),
|
|
10404
|
-
/* @__PURE__ */ jsx(MetricCell, { color: value, children: reps }),
|
|
10405
|
-
/* @__PURE__ */ jsx(MetricCell, { color: sep, children: ` ${AT} ` }),
|
|
10406
|
-
/* @__PURE__ */ jsx(MetricCell, { color: value, children: load }),
|
|
10407
|
-
/* @__PURE__ */ jsx(MetricCell, { color: sep, children: ` ${unit}` })
|
|
10275
|
+
/* @__PURE__ */ jsx(MetricCell, { color: value, fontSize, children: sets }),
|
|
10276
|
+
/* @__PURE__ */ jsx(MetricCell, { color: sep, fontSize, children: ` ${TIMES} ` }),
|
|
10277
|
+
/* @__PURE__ */ jsx(MetricCell, { color: value, fontSize, children: reps }),
|
|
10278
|
+
/* @__PURE__ */ jsx(MetricCell, { color: sep, fontSize, children: ` ${AT} ` }),
|
|
10279
|
+
/* @__PURE__ */ jsx(MetricCell, { color: value, fontSize, children: load }),
|
|
10280
|
+
/* @__PURE__ */ jsx(MetricCell, { color: sep, fontSize, children: ` ${unit}` })
|
|
10408
10281
|
]
|
|
10409
10282
|
}
|
|
10410
10283
|
);
|
|
@@ -10502,14 +10375,14 @@ function ScheduleTiles({ when, now, gap = 1, ...props }) {
|
|
|
10502
10375
|
)
|
|
10503
10376
|
] });
|
|
10504
10377
|
}
|
|
10505
|
-
var
|
|
10378
|
+
var t8 = getSemanticColors("dark");
|
|
10506
10379
|
var INDICATOR_CONFIG = {
|
|
10507
|
-
imbalance: { Icon: ScaleIcon, color:
|
|
10508
|
-
overshoot: { Icon: AlertTriangleIcon, color:
|
|
10509
|
-
"velocity-loss": { Icon: TrendingDownIcon, color:
|
|
10510
|
-
"missed-reps": { Icon: CircleSlashIcon, color:
|
|
10511
|
-
pr: { Icon: AwardIcon, color:
|
|
10512
|
-
info: { Icon: InfoIcon, color:
|
|
10380
|
+
imbalance: { Icon: ScaleIcon, color: t8["status-error"], label: "Left/right imbalance" },
|
|
10381
|
+
overshoot: { Icon: AlertTriangleIcon, color: t8["status-error"], label: "Load overshoot" },
|
|
10382
|
+
"velocity-loss": { Icon: TrendingDownIcon, color: t8["status-warning"], label: "Velocity loss" },
|
|
10383
|
+
"missed-reps": { Icon: CircleSlashIcon, color: t8["status-warning"], label: "Missed reps" },
|
|
10384
|
+
pr: { Icon: AwardIcon, color: t8["status-success"], label: "Personal record" },
|
|
10385
|
+
info: { Icon: InfoIcon, color: t8["status-info"], label: "More info" }
|
|
10513
10386
|
};
|
|
10514
10387
|
var INDICATOR_PRECEDENCE = [
|
|
10515
10388
|
"imbalance",
|
|
@@ -10984,7 +10857,7 @@ function ExerciseCard({
|
|
|
10984
10857
|
if (upcoming) return /* @__PURE__ */ jsx(UpcomingCard, { ...rest, onToggle });
|
|
10985
10858
|
return isExpanded ? /* @__PURE__ */ jsx(ExpandedCard, { ...rest, onToggle }) : /* @__PURE__ */ jsx(CollapsedCard, { ...rest, onToggle });
|
|
10986
10859
|
}
|
|
10987
|
-
var
|
|
10860
|
+
var t9 = getSemanticColors("dark");
|
|
10988
10861
|
var RAISED = primitiveColors.charcoal[400];
|
|
10989
10862
|
var BAR_HEIGHT = 9;
|
|
10990
10863
|
var BAR_GAP = 3;
|
|
@@ -11006,7 +10879,7 @@ function SessionHeader({
|
|
|
11006
10879
|
const hasPace = !upcoming && budgetMs != null && elapsedMs != null;
|
|
11007
10880
|
const target = hasPace ? elapsedMs / budgetMs : void 0;
|
|
11008
10881
|
const setsLabel = upcoming ? `${totalSets} sets` : `${Math.floor(setsDone)}/${totalSets} sets`;
|
|
11009
|
-
const setsLabelColor = upcoming ?
|
|
10882
|
+
const setsLabelColor = upcoming ? t9["text-secondary"] : paceToneColor(paceTone(totalSets > 0 ? setsDone / totalSets : 0, target));
|
|
11010
10883
|
return /* @__PURE__ */ jsxs(
|
|
11011
10884
|
View,
|
|
11012
10885
|
{
|
|
@@ -11034,7 +10907,7 @@ function SessionHeader({
|
|
|
11034
10907
|
lineHeight: 18,
|
|
11035
10908
|
fontWeight: "700",
|
|
11036
10909
|
fontFamily: '"Space Grotesk", sans-serif',
|
|
11037
|
-
color:
|
|
10910
|
+
color: t9["text-primary"],
|
|
11038
10911
|
marginBottom: 10
|
|
11039
10912
|
},
|
|
11040
10913
|
testID: "session-rail-title",
|
|
@@ -11429,10 +11302,10 @@ function WeekRow({
|
|
|
11429
11302
|
}
|
|
11430
11303
|
);
|
|
11431
11304
|
}
|
|
11432
|
-
var
|
|
11305
|
+
var t10 = getSemanticColors("dark");
|
|
11433
11306
|
var COLORS = {
|
|
11434
|
-
statusSuccess:
|
|
11435
|
-
brandPrimary:
|
|
11307
|
+
statusSuccess: t10["status-success"],
|
|
11308
|
+
brandPrimary: t10["brand-primary"],
|
|
11436
11309
|
borderDefault: "#1F1F1F",
|
|
11437
11310
|
brandPrimarySubtle: "rgba(255,121,0,0.06)"
|
|
11438
11311
|
};
|
|
@@ -11916,12 +11789,12 @@ function PrHistoryModal({
|
|
|
11916
11789
|
}
|
|
11917
11790
|
);
|
|
11918
11791
|
}
|
|
11919
|
-
var
|
|
11920
|
-
var BRAND_PRIMARY9 =
|
|
11792
|
+
var t11 = getSemanticColors("dark");
|
|
11793
|
+
var BRAND_PRIMARY9 = t11["brand-primary"];
|
|
11921
11794
|
var BRAND_PRIMARY_SUBTLE = "rgba(255,121,0,0.12)";
|
|
11922
|
-
var
|
|
11923
|
-
var
|
|
11924
|
-
var STATUS_ERROR2 =
|
|
11795
|
+
var STATUS_SUCCESS2 = t11["status-success"];
|
|
11796
|
+
var STATUS_WARNING2 = t11["status-warning"];
|
|
11797
|
+
var STATUS_ERROR2 = t11["status-error"];
|
|
11925
11798
|
var EMOJI_SETS = {
|
|
11926
11799
|
sleep: ["\u{1F634}", "\u{1F610}", "\u{1F642}", "\u{1F60A}", "\u{1F929}"],
|
|
11927
11800
|
soreness: ["\u{1F635}", "\u{1F623}", "\u{1F610}", "\u{1F642}", "\u{1F4AA}"],
|
|
@@ -11931,8 +11804,8 @@ var EMOJI_SETS = {
|
|
|
11931
11804
|
var DEFAULT_EMOJI_SET = ["\u{1F61E}", "\u{1F615}", "\u{1F610}", "\u{1F642}", "\u{1F604}"];
|
|
11932
11805
|
function scoreColor(score) {
|
|
11933
11806
|
if (score < 40) return STATUS_ERROR2;
|
|
11934
|
-
if (score < 70) return
|
|
11935
|
-
return
|
|
11807
|
+
if (score < 70) return STATUS_WARNING2;
|
|
11808
|
+
return STATUS_SUCCESS2;
|
|
11936
11809
|
}
|
|
11937
11810
|
var WARMUP_BADGE = {
|
|
11938
11811
|
good: { color: "success", label: "Good" },
|
|
@@ -12111,13 +11984,13 @@ function ReadinessCheck({
|
|
|
12111
11984
|
)
|
|
12112
11985
|
] }) });
|
|
12113
11986
|
}
|
|
12114
|
-
var
|
|
12115
|
-
var BRAND_PRIMARY10 =
|
|
11987
|
+
var t12 = getSemanticColors("dark");
|
|
11988
|
+
var BRAND_PRIMARY10 = t12["brand-primary"];
|
|
12116
11989
|
var BRAND_PRIMARY_DARK2 = MESO_ACCENT_GRADIENT_DARK;
|
|
12117
11990
|
var BRAND_PRIMARY_LIGHT2 = MESO_ACCENT_GRADIENT_LIGHT;
|
|
12118
|
-
var SUCCESS =
|
|
12119
|
-
var WARNING =
|
|
12120
|
-
var ERROR =
|
|
11991
|
+
var SUCCESS = t12["status-success"];
|
|
11992
|
+
var WARNING = t12["status-warning"];
|
|
11993
|
+
var ERROR = t12["status-error"];
|
|
12121
11994
|
var ACCENT_STOPS2 = [BRAND_PRIMARY_DARK2, BRAND_PRIMARY10, BRAND_PRIMARY_LIGHT2];
|
|
12122
11995
|
var CARD_GRADIENT = `linear-gradient(135deg, ${resolveColor("surface-elevated")} 0%, ${resolveColor("surface-raised")} 100%)`;
|
|
12123
11996
|
var GAUGE_GRADIENT = "linear-gradient(90deg, rgba(46,213,115,0.25) 0%, rgba(249,180,21,0.25) 50%, rgba(209,67,67,0.25) 100%)";
|
|
@@ -12477,9 +12350,9 @@ function MesoStatusCard({
|
|
|
12477
12350
|
var sem = getSemanticColors("dark");
|
|
12478
12351
|
var BRAND_PRIMARY11 = sem["brand-primary"];
|
|
12479
12352
|
var PROJECTION_LINE_COLOR = resolveColor("text-tertiary");
|
|
12480
|
-
var
|
|
12353
|
+
var STATUS_SUCCESS3 = sem["status-success"];
|
|
12481
12354
|
var STATUS_ERROR3 = sem["status-error"];
|
|
12482
|
-
var
|
|
12355
|
+
var STATUS_WARNING3 = sem["status-warning"];
|
|
12483
12356
|
var GRID_LINE = "rgba(255,255,255,0.06)";
|
|
12484
12357
|
var SUCCESS_PILL_BG = "rgba(46,213,115,0.10)";
|
|
12485
12358
|
var SUCCESS_PILL_BORDER = "rgba(46,213,115,0.20)";
|
|
@@ -12488,8 +12361,8 @@ var ERROR_PILL_BORDER = "rgba(209,67,67,0.20)";
|
|
|
12488
12361
|
var PLOT_LEFT = 26;
|
|
12489
12362
|
var TOOLTIP_WIDTH = 124;
|
|
12490
12363
|
function timeOf(dateStr) {
|
|
12491
|
-
const
|
|
12492
|
-
return Number.isNaN(
|
|
12364
|
+
const t17 = Date.parse(dateStr);
|
|
12365
|
+
return Number.isNaN(t17) ? 0 : t17;
|
|
12493
12366
|
}
|
|
12494
12367
|
function formatValue(value) {
|
|
12495
12368
|
return `${Math.round(value)}`;
|
|
@@ -12785,7 +12658,7 @@ function StrengthTrendChart({
|
|
|
12785
12658
|
left: c.x - 7,
|
|
12786
12659
|
top: c.y - 20,
|
|
12787
12660
|
fontSize: 12,
|
|
12788
|
-
color:
|
|
12661
|
+
color: STATUS_WARNING3
|
|
12789
12662
|
},
|
|
12790
12663
|
children: "\u2605"
|
|
12791
12664
|
},
|
|
@@ -12878,7 +12751,7 @@ function StrengthTrendChart({
|
|
|
12878
12751
|
marginTop: 1,
|
|
12879
12752
|
fontSize: 10,
|
|
12880
12753
|
fontFamily: "Inter, sans-serif",
|
|
12881
|
-
color: selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0 ?
|
|
12754
|
+
color: selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0 ? STATUS_SUCCESS3 : STATUS_ERROR3
|
|
12882
12755
|
},
|
|
12883
12756
|
children: `${selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0 ? "+" : "-"}${Math.abs(
|
|
12884
12757
|
selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm
|
|
@@ -12934,7 +12807,7 @@ function StrengthTrendChart({
|
|
|
12934
12807
|
fontSize: 11,
|
|
12935
12808
|
fontFamily: "Inter, sans-serif",
|
|
12936
12809
|
fontWeight: "600",
|
|
12937
|
-
color: trend.positive ?
|
|
12810
|
+
color: trend.positive ? STATUS_SUCCESS3 : STATUS_ERROR3
|
|
12938
12811
|
},
|
|
12939
12812
|
children: trendText
|
|
12940
12813
|
}
|
|
@@ -12968,7 +12841,7 @@ function StrengthTrendChart({
|
|
|
12968
12841
|
/* @__PURE__ */ jsx(Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "Projected" })
|
|
12969
12842
|
] }),
|
|
12970
12843
|
/* @__PURE__ */ jsxs(View, { className: "flex-row items-center", style: { gap: 5 }, children: [
|
|
12971
|
-
/* @__PURE__ */ jsx(Text, { style: { fontSize: 12, color:
|
|
12844
|
+
/* @__PURE__ */ jsx(Text, { style: { fontSize: 12, color: STATUS_WARNING3 }, children: "\u2605" }),
|
|
12972
12845
|
/* @__PURE__ */ jsx(Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "PR" })
|
|
12973
12846
|
] })
|
|
12974
12847
|
]
|
|
@@ -12978,10 +12851,10 @@ function StrengthTrendChart({
|
|
|
12978
12851
|
}
|
|
12979
12852
|
);
|
|
12980
12853
|
}
|
|
12981
|
-
var
|
|
12982
|
-
var
|
|
12983
|
-
var
|
|
12984
|
-
var STATUS_INFO =
|
|
12854
|
+
var t13 = getSemanticColors("dark");
|
|
12855
|
+
var STATUS_SUCCESS4 = t13["status-success"];
|
|
12856
|
+
var STATUS_WARNING4 = t13["status-warning"];
|
|
12857
|
+
var STATUS_INFO = t13["status-info"];
|
|
12985
12858
|
var DOT_BORDER = "#F3F4F6";
|
|
12986
12859
|
var BAND_FILL = "rgba(46,213,115,0.1)";
|
|
12987
12860
|
var BAND_EDGE = "rgba(46,213,115,0.45)";
|
|
@@ -12993,8 +12866,8 @@ var PADDING_BOTTOM = 16;
|
|
|
12993
12866
|
var COLUMN_STEP = 4;
|
|
12994
12867
|
var DOT_SIZE = 8;
|
|
12995
12868
|
var DOT_COLORS = {
|
|
12996
|
-
within:
|
|
12997
|
-
above:
|
|
12869
|
+
within: STATUS_SUCCESS4,
|
|
12870
|
+
above: STATUS_WARNING4,
|
|
12998
12871
|
below: STATUS_INFO
|
|
12999
12872
|
};
|
|
13000
12873
|
var STATUS_PHRASES = {
|
|
@@ -13024,8 +12897,8 @@ function interpEdge(pixels, x, key) {
|
|
|
13024
12897
|
const a = pixels[i];
|
|
13025
12898
|
const b = pixels[i + 1];
|
|
13026
12899
|
if (x >= a.x && x <= b.x) {
|
|
13027
|
-
const
|
|
13028
|
-
return a[key] +
|
|
12900
|
+
const t17 = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x);
|
|
12901
|
+
return a[key] + t17 * (b[key] - a[key]);
|
|
13029
12902
|
}
|
|
13030
12903
|
}
|
|
13031
12904
|
return pixels[pixels.length - 1][key];
|
|
@@ -13219,8 +13092,8 @@ function CapacityBandChart({
|
|
|
13219
13092
|
projection && /* @__PURE__ */ jsxs(View, { testID: "capacity-band-chart-projection", children: [
|
|
13220
13093
|
renderColumns(buildColumns2(trainingPixels, COLUMN_STEP), PROJECTION_FILL, "capacity-band-chart-projection-fill"),
|
|
13221
13094
|
renderColumns(buildColumns2(restPixels, COLUMN_STEP), PROJECTION_FILL, "capacity-band-chart-projection-fill"),
|
|
13222
|
-
renderEdges(buildEdges(trainingPixels, "yHigh"),
|
|
13223
|
-
renderEdges(buildEdges(trainingPixels, "yLow"),
|
|
13095
|
+
renderEdges(buildEdges(trainingPixels, "yHigh"), STATUS_SUCCESS4, true, "capacity-band-chart-projection-training"),
|
|
13096
|
+
renderEdges(buildEdges(trainingPixels, "yLow"), STATUS_SUCCESS4, true, "capacity-band-chart-projection-training"),
|
|
13224
13097
|
renderEdges(buildEdges(restPixels, "yHigh"), STATUS_INFO, true, "capacity-band-chart-projection-rest"),
|
|
13225
13098
|
renderEdges(buildEdges(restPixels, "yLow"), STATUS_INFO, true, "capacity-band-chart-projection-rest"),
|
|
13226
13099
|
/* @__PURE__ */ jsx(
|
|
@@ -13232,7 +13105,7 @@ function CapacityBandChart({
|
|
|
13232
13105
|
top: trainingPixels[trainingPixels.length - 1]?.yHigh - 12,
|
|
13233
13106
|
fontSize: 9,
|
|
13234
13107
|
fontFamily: "Inter, sans-serif",
|
|
13235
|
-
color:
|
|
13108
|
+
color: STATUS_SUCCESS4
|
|
13236
13109
|
},
|
|
13237
13110
|
testID: "capacity-band-chart-projection-training-label",
|
|
13238
13111
|
children: "Training"
|
|
@@ -13355,13 +13228,13 @@ function CapacityBandChart({
|
|
|
13355
13228
|
}
|
|
13356
13229
|
);
|
|
13357
13230
|
}
|
|
13358
|
-
var
|
|
13231
|
+
var t14 = getSemanticColors("dark");
|
|
13359
13232
|
function glowShadow(color) {
|
|
13360
13233
|
return `0 0 5px 1px ${alpha(color, 0.3)}, 0 0 10px 3px ${alpha(color, 0.12)}`;
|
|
13361
13234
|
}
|
|
13362
13235
|
var DEFAULT_TRACK_COLOR = primitiveColors.charcoal[200];
|
|
13363
13236
|
var DEFAULT_MARKER_COLOR2 = primitiveColors.white;
|
|
13364
|
-
var TICK_COLOR =
|
|
13237
|
+
var TICK_COLOR = t14["text-tertiary"];
|
|
13365
13238
|
var ZONE_SIZES = {
|
|
13366
13239
|
default: {
|
|
13367
13240
|
trackHeight: 14,
|
|
@@ -13418,6 +13291,12 @@ function ZoneTrack({
|
|
|
13418
13291
|
const s = ZONE_SIZES[size];
|
|
13419
13292
|
const trackHeight = trackHeightProp ?? s.trackHeight;
|
|
13420
13293
|
const needleOverhang = needleOverhangProp ?? s.needleOverhang;
|
|
13294
|
+
const [trackW, setTrackW] = useState(0);
|
|
13295
|
+
const onTrackLayout = (e) => setTrackW(e.nativeEvent.layout.width);
|
|
13296
|
+
const tickCount = ticks?.length ?? 0;
|
|
13297
|
+
const tickSpacing = trackW > 0 && tickCount > 0 ? trackW / tickCount : Infinity;
|
|
13298
|
+
const tickStep = tickSpacing < s.tickCellWidth ? Math.ceil(s.tickCellWidth / tickSpacing) : 1;
|
|
13299
|
+
const showTickLabel = (i, emphasized) => tickStep <= 1 || i === 0 || i === tickCount - 1 || i % tickStep === 0 || emphasized;
|
|
13421
13300
|
const isNeedle = marker?.type === "needle";
|
|
13422
13301
|
const markerHeight = isNeedle ? trackHeight + needleOverhang * 2 : trackHeight;
|
|
13423
13302
|
const markerFrac = marker != null ? fraction(marker.value, min, max) : 0;
|
|
@@ -13436,6 +13315,7 @@ function ZoneTrack({
|
|
|
13436
13315
|
accessibilityValue: marker != null ? { min, max, now: marker.value } : { min, max, now: min },
|
|
13437
13316
|
accessibilityLabel: accessibilityLabel2 ?? `Zone track: ${marker?.value ?? min}`,
|
|
13438
13317
|
testID: "zone-track",
|
|
13318
|
+
onLayout: onTrackLayout,
|
|
13439
13319
|
...props,
|
|
13440
13320
|
children: [
|
|
13441
13321
|
/* @__PURE__ */ jsxs(View, { style: { position: "relative", height: markerHeight }, children: [
|
|
@@ -13537,7 +13417,7 @@ function ZoneTrack({
|
|
|
13537
13417
|
),
|
|
13538
13418
|
ticks?.map((tick, i) => {
|
|
13539
13419
|
const emphasized = tick.emphasized === true;
|
|
13540
|
-
const lineColor = tick.color ?? (emphasized ?
|
|
13420
|
+
const lineColor = tick.color ?? (emphasized ? t14["brand-primary"] : TICK_COLOR);
|
|
13541
13421
|
const lineWidth = emphasized ? s.tickLineEmphasized : s.tickLineNormal;
|
|
13542
13422
|
return /* @__PURE__ */ jsx(
|
|
13543
13423
|
View,
|
|
@@ -13567,7 +13447,8 @@ function ZoneTrack({
|
|
|
13567
13447
|
children: ticks.map((tick, i) => {
|
|
13568
13448
|
if (tick.label == null) return null;
|
|
13569
13449
|
const emphasized = tick.emphasized === true;
|
|
13570
|
-
|
|
13450
|
+
if (!showTickLabel(i, emphasized)) return null;
|
|
13451
|
+
const labelColor = tick.color ?? (emphasized ? t14["brand-primary"] : TICK_COLOR);
|
|
13571
13452
|
const labelNode = /* @__PURE__ */ jsx(
|
|
13572
13453
|
Text,
|
|
13573
13454
|
{
|
|
@@ -13651,7 +13532,7 @@ function FatigueMeter({
|
|
|
13651
13532
|
}
|
|
13652
13533
|
var HEAT = WORKOUT_TOKENS.heatmap;
|
|
13653
13534
|
var NEUTRAL_TRACK = primitiveColors.charcoal[200];
|
|
13654
|
-
var
|
|
13535
|
+
var MONO2 = "monospace";
|
|
13655
13536
|
var HEAT_BY_ZONE = {
|
|
13656
13537
|
under: HEAT.under,
|
|
13657
13538
|
maintenance: HEAT.maintenance,
|
|
@@ -13710,7 +13591,7 @@ function VolumeLandmarkBar({
|
|
|
13710
13591
|
Text,
|
|
13711
13592
|
{
|
|
13712
13593
|
testID: "volume-landmark-pct",
|
|
13713
|
-
style: { fontSize: 14, fontWeight: "700", fontFamily:
|
|
13594
|
+
style: { fontSize: 14, fontWeight: "700", fontFamily: MONO2, color: fillColor },
|
|
13714
13595
|
children: [
|
|
13715
13596
|
pct2,
|
|
13716
13597
|
"%"
|
|
@@ -13753,7 +13634,7 @@ function VolumeLandmarkBar({
|
|
|
13753
13634
|
}
|
|
13754
13635
|
);
|
|
13755
13636
|
}
|
|
13756
|
-
var
|
|
13637
|
+
var t15 = getSemanticColors("dark");
|
|
13757
13638
|
var statusToken = {
|
|
13758
13639
|
productive: "status-success",
|
|
13759
13640
|
threshold: "status-warning",
|
|
@@ -13770,7 +13651,7 @@ var defaultLabel = {
|
|
|
13770
13651
|
stop: "Stop"
|
|
13771
13652
|
};
|
|
13772
13653
|
function statusPillColor(status) {
|
|
13773
|
-
return
|
|
13654
|
+
return t15[statusToken[status]];
|
|
13774
13655
|
}
|
|
13775
13656
|
function StatusPill2({ status, label, className, style, ...props }) {
|
|
13776
13657
|
const color = statusPillColor(status);
|
|
@@ -13803,7 +13684,7 @@ function StatusPill2({ status, label, className, style, ...props }) {
|
|
|
13803
13684
|
}
|
|
13804
13685
|
);
|
|
13805
13686
|
}
|
|
13806
|
-
var
|
|
13687
|
+
var t16 = getSemanticColors("dark");
|
|
13807
13688
|
var categoryToken = {
|
|
13808
13689
|
productive: null,
|
|
13809
13690
|
threshold: "status-warning",
|
|
@@ -13816,7 +13697,7 @@ var floodOpacity = {
|
|
|
13816
13697
|
};
|
|
13817
13698
|
function liveAuraColor(category) {
|
|
13818
13699
|
const token = categoryToken[category];
|
|
13819
|
-
return token ?
|
|
13700
|
+
return token ? t16[token] : null;
|
|
13820
13701
|
}
|
|
13821
13702
|
function LiveAuraFrame({
|
|
13822
13703
|
category,
|
|
@@ -13845,9 +13726,9 @@ function LiveAuraFrame({
|
|
|
13845
13726
|
position: "relative",
|
|
13846
13727
|
overflow: "hidden",
|
|
13847
13728
|
borderRadius: 10,
|
|
13848
|
-
backgroundColor:
|
|
13729
|
+
backgroundColor: t16["background-base"],
|
|
13849
13730
|
borderWidth: 1,
|
|
13850
|
-
borderColor:
|
|
13731
|
+
borderColor: t16["border-default"]
|
|
13851
13732
|
},
|
|
13852
13733
|
style
|
|
13853
13734
|
],
|
|
@@ -14074,28 +13955,28 @@ function Scatter({
|
|
|
14074
13955
|
testID: "scatter-canvas",
|
|
14075
13956
|
style: { position: "absolute", top: 0, left: 0, width, height, overflow: "hidden" },
|
|
14076
13957
|
children: [
|
|
14077
|
-
ticksOf(yd, TICK_COUNT).map((
|
|
14078
|
-
const y = toY(
|
|
13958
|
+
ticksOf(yd, TICK_COUNT).map((t17, i) => {
|
|
13959
|
+
const y = toY(t17);
|
|
14079
13960
|
return /* @__PURE__ */ jsx(
|
|
14080
13961
|
View,
|
|
14081
13962
|
{
|
|
14082
13963
|
accessibilityElementsHidden: true,
|
|
14083
13964
|
testID: "scatter-gridline-y",
|
|
14084
13965
|
style: { position: "absolute", left: PLOT_LEFT2, width: innerW, top: y, height: 1, backgroundColor: GRID_LINE2 },
|
|
14085
|
-
children: /* @__PURE__ */ jsx(Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", left: -PLOT_LEFT2, top: -6, width: PLOT_LEFT2 - 6, textAlign: "right" }, children: formatTick(
|
|
13966
|
+
children: /* @__PURE__ */ jsx(Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", left: -PLOT_LEFT2, top: -6, width: PLOT_LEFT2 - 6, textAlign: "right" }, children: formatTick(t17) })
|
|
14086
13967
|
},
|
|
14087
13968
|
`y-${i}`
|
|
14088
13969
|
);
|
|
14089
13970
|
}),
|
|
14090
|
-
ticksOf(xd, TICK_COUNT).map((
|
|
14091
|
-
const x = toX(
|
|
13971
|
+
ticksOf(xd, TICK_COUNT).map((t17, i) => {
|
|
13972
|
+
const x = toX(t17);
|
|
14092
13973
|
return /* @__PURE__ */ jsx(
|
|
14093
13974
|
View,
|
|
14094
13975
|
{
|
|
14095
13976
|
accessibilityElementsHidden: true,
|
|
14096
13977
|
testID: "scatter-gridline-x",
|
|
14097
13978
|
style: { position: "absolute", top: PLOT_TOP, height: innerH, left: x, width: 1, backgroundColor: GRID_LINE2 },
|
|
14098
|
-
children: /* @__PURE__ */ jsx(Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(
|
|
13979
|
+
children: /* @__PURE__ */ jsx(Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(t17) })
|
|
14099
13980
|
},
|
|
14100
13981
|
`x-${i}`
|
|
14101
13982
|
);
|
|
@@ -14156,14 +14037,14 @@ function Scatter({
|
|
|
14156
14037
|
] });
|
|
14157
14038
|
}
|
|
14158
14039
|
var sem2 = getSemanticColors("dark");
|
|
14159
|
-
var
|
|
14160
|
-
var
|
|
14040
|
+
var STATUS_SUCCESS5 = sem2["status-success"];
|
|
14041
|
+
var STATUS_WARNING5 = sem2["status-warning"];
|
|
14161
14042
|
var STATUS_ERROR4 = sem2["status-error"];
|
|
14162
14043
|
var TRACK = "rgba(255,255,255,0.08)";
|
|
14163
14044
|
var DEFAULT_THRESHOLDS2 = [
|
|
14164
14045
|
{ value: 0, color: STATUS_ERROR4 },
|
|
14165
|
-
{ value: 60, color:
|
|
14166
|
-
{ value: 80, color:
|
|
14046
|
+
{ value: 60, color: STATUS_WARNING5 },
|
|
14047
|
+
{ value: 80, color: STATUS_SUCCESS5 }
|
|
14167
14048
|
];
|
|
14168
14049
|
var ARC_START = 135;
|
|
14169
14050
|
var ARC_SWEEP = 270;
|
|
@@ -14178,7 +14059,7 @@ function formatValue2(v) {
|
|
|
14178
14059
|
function bandColor2(fraction2, bands, min, max) {
|
|
14179
14060
|
const value = min + fraction2 * (max - min);
|
|
14180
14061
|
const sorted = [...bands].sort((a, b) => a.value - b.value);
|
|
14181
|
-
let color = sorted[0]?.color ??
|
|
14062
|
+
let color = sorted[0]?.color ?? STATUS_SUCCESS5;
|
|
14182
14063
|
for (const band of sorted) {
|
|
14183
14064
|
if (value >= band.value) color = band.color;
|
|
14184
14065
|
}
|
|
@@ -14230,23 +14111,23 @@ function Gauge2({
|
|
|
14230
14111
|
testID: "gauge",
|
|
14231
14112
|
...props,
|
|
14232
14113
|
children: [
|
|
14233
|
-
ticks.map((
|
|
14114
|
+
ticks.map((t17) => /* @__PURE__ */ jsx(
|
|
14234
14115
|
View,
|
|
14235
14116
|
{
|
|
14236
14117
|
accessibilityElementsHidden: true,
|
|
14237
14118
|
testID: "gauge-segment",
|
|
14238
14119
|
style: {
|
|
14239
14120
|
position: "absolute",
|
|
14240
|
-
left:
|
|
14241
|
-
top:
|
|
14121
|
+
left: t17.left - tickThickness / 2,
|
|
14122
|
+
top: t17.top - tickLength / 2,
|
|
14242
14123
|
width: tickThickness,
|
|
14243
14124
|
height: tickLength,
|
|
14244
14125
|
borderRadius: tickThickness / 2,
|
|
14245
|
-
backgroundColor:
|
|
14246
|
-
transform: [{ rotate:
|
|
14126
|
+
backgroundColor: t17.color,
|
|
14127
|
+
transform: [{ rotate: t17.rotate }]
|
|
14247
14128
|
}
|
|
14248
14129
|
},
|
|
14249
|
-
|
|
14130
|
+
t17.key
|
|
14250
14131
|
)),
|
|
14251
14132
|
/* @__PURE__ */ jsxs(View, { style: { position: "absolute", top: 0, left: 0, width: size, height: size }, className: "items-center justify-center", children: [
|
|
14252
14133
|
/* @__PURE__ */ jsxs(View, { className: "flex-row items-baseline gap-0.5", children: [
|
|
@@ -14666,6 +14547,6 @@ function composeValidators(...validators) {
|
|
|
14666
14547
|
};
|
|
14667
14548
|
}
|
|
14668
14549
|
|
|
14669
|
-
export { Accordion, AccordionButton, AccordionItem, AccordionPanel, ActivityIcon, Alert, AlertDescription, AlertTitle, AlertTriangleIcon, Autocomplete, Avatar, AvatarBadge, AvatarGroup, AwardIcon, Badge, BadgeText, BaseBadge, BluetoothIcon, BrandLockup, BreadcrumbItem, Breadcrumbs, Button, ButtonIcon, ButtonSpinner, ButtonText, CATEGORICAL_CVD_SAFE_MAX, CapacityBandChart, Caption, Card, CardContent, CardDescription, CardFooter, CardHeader, CardSkeleton, CardTitle, Checkbox, CheckboxGroup, Chip, CircleSlashIcon, CircularProgress, CircularTimer, Collapse, CollapseButton, CollapseContent, DashboardShell, DataRow, DateTime, DeviationBar, DeviceIndicator, DeviceMenu, DeviceRow, Divider, Drawer, DrawerBody, DrawerFooter, DrawerHeader, DumbbellIcon, EmptyState, ExerciseCard, ExerciseCardHeading, ExerciseHeading, ExerciseIndicator, FatigueMeter, FormActions, FormField, FormRow, FormSection, Gauge2 as Gauge, HStack, Heading, HelpTip, HistoryIcon, INDICATOR_PRECEDENCE, IconBox, Indicator, InfoIcon, Input, InputBar, InputGroup, IntensityBar, Label, LabelWithHelp, LayersIcon, Link, ListItem, ListItemContent, ListItemDivider, ListItemIcon, ListItemTrailing, LiveAuraFrame, METRIC_FONT, Menu, MenuDivider, MenuGroup, MenuItem, MenuList, MenuTrigger, MesoCard, MesoProgressBar, MesoStatusCard, Metric, MetricCell, MetricGroup, MetricTiles, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalTitle, MuscleGroupChip, NavItem, Overline, Paragraph, PasswordInput, PersonStandingIcon, Pill, PlaceholderStrip, Popover, PopoverCloseButton, PopoverContent, PopoverTrigger, PrBadge, PrHistoryModal, Progress, ProgressSteps, Radio, RadioGroup, ReadinessCheck, RestTimer, SET_STRIP_VARIABLE_COLOR, SET_STRIP_ZONES, ScaleIcon, Scatter, ScheduleTiles, Section, SectionContent, SectionHeader, SegmentedBar, SegmentedProgressBar, Select, SessionHeader, SessionRail, SessionStatePill, SetBar, SetRow, SetStrip, SetTableHeader, SetsRepsLoad, SideNav, Sidebar, SidebarContent, SidebarDivider, SidebarFooter, SidebarHeader, SidebarItem, SidebarSection, Skeleton, SkeletonCard, SkeletonCircle, SkeletonListItem, SkeletonText, Sparkline, Spinner, Stack, StarIcon, StatusDot, StatusPill2 as StatusPill, StepContent, StepIndicator, StepLabel, Stepper, Step as StepperStep, StrengthTrendChart, SupersetWrapper, Surface, SvgIcon, Switch,
|
|
14550
|
+
export { Accordion, AccordionButton, AccordionItem, AccordionPanel, ActivityIcon, Alert, AlertDescription, AlertTitle, AlertTriangleIcon, Autocomplete, Avatar, AvatarBadge, AvatarGroup, AwardIcon, Badge, BadgeText, BaseBadge, BluetoothIcon, BrandLockup, BreadcrumbItem, Breadcrumbs, Button, ButtonIcon, ButtonSpinner, ButtonText, CATEGORICAL_CVD_SAFE_MAX, CapacityBandChart, Caption, Card, CardContent, CardDescription, CardFooter, CardHeader, CardSkeleton, CardTitle, Checkbox, CheckboxGroup, Chip, CircleSlashIcon, CircularProgress, CircularTimer, Collapse, CollapseButton, CollapseContent, DashboardShell, DataRow, DateTime, DeviationBar, DeviceIndicator, DeviceMenu, DeviceRow, Divider, Drawer, DrawerBody, DrawerFooter, DrawerHeader, DumbbellIcon, EmptyState, ExerciseCard, ExerciseCardHeading, ExerciseHeading, ExerciseIndicator, FatigueMeter, FormActions, FormField, FormRow, FormSection, Gauge2 as Gauge, HStack, Heading, HelpTip, HistoryIcon, INDICATOR_PRECEDENCE, IconBox, Indicator, InfoIcon, Input, InputBar, InputGroup, IntensityBar, Label, LabelWithHelp, LayersIcon, Link, ListItem, ListItemContent, ListItemDivider, ListItemIcon, ListItemTrailing, LiveAuraFrame, METRIC_FONT, Menu, MenuDivider, MenuGroup, MenuItem, MenuList, MenuTrigger, MesoCard, MesoProgressBar, MesoStatusCard, Metric, MetricCell, MetricGroup, MetricTiles, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalTitle, MuscleGroupChip, NavItem, Overline, Paragraph, PasswordInput, PersonStandingIcon, Pill, PlaceholderStrip, Popover, PopoverCloseButton, PopoverContent, PopoverTrigger, PrBadge, PrHistoryModal, Progress, ProgressSteps, Radio, RadioGroup, ReadinessCheck, RestTimer, SET_STRIP_VARIABLE_COLOR, SET_STRIP_ZONES, ScaleIcon, Scatter, ScheduleTiles, Section, SectionContent, SectionHeader, SegmentedBar, SegmentedProgressBar, Select, SessionHeader, SessionRail, SessionStatePill, SetBar, SetRow, SetStrip, SetTableHeader, SetsRepsLoad, SideNav, Sidebar, SidebarContent, SidebarDivider, SidebarFooter, SidebarHeader, SidebarItem, SidebarSection, Skeleton, SkeletonCard, SkeletonCircle, SkeletonListItem, SkeletonText, Sparkline, Spinner, Stack, StarIcon, StatusDot, StatusPill2 as StatusPill, StepContent, StepIndicator, StepLabel, Stepper, Step as StepperStep, StrengthTrendChart, SupersetWrapper, Surface, SvgIcon, Switch, Tab, TabList, TabPanel, TabPanels, Table, TableBody, TableCell, TableHeader, TableHeaderCell, TablePagination, TableRow, Tabs, TempoDisplay, Tile, TimerReadout, Toast, ToastProvider, ToolbarButton, ToolbarButtonGroup, Tooltip, TopBar, Treemap, TrendingDownIcon, Typography, VStack, VelocityStrip, VoltrasMark, VolumeLandmarkBar, WeekRow, WeightBadge, WorkoutCard, WorkoutPill, ZoneTrack, alpha, applyThemePreset, audiobookPreset, bestTextColor, buttonSizes, calculateMeanVelocity, calculateVelocityLoss, categoricalPalette, cn, componentElevationRanges, composeValidators, createFieldId, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultNavItems, defaultPreset, discreteRainbow, divergingScale, elevationSystem, formatDateTime, formatDuration, formatPrescription, formatSignedPct, formatVelocity, getBaseSurfaceColor, getCategoricalColor, getContrastText, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getFieldAriaProps, getFieldValidationProps, getGlowShadow, getHoverColors, getLuminance, getResultColor, getSemanticColors, getStatusColor, getThemeCSSVars, getValidatedElevation, getVelocityZoneColor, getVelocityZoneName, gluestackConfig, hasMaxLength, hasMinLength, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, isEmpty, isValidEmail, lightThemeCSSVars, lighten, linearGradient, liveAuraColor, neumorphicShadows, paceTone, paceToneColor, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, resolveIndicator, rgbToHex, rgbToHsv, roundRpe, roundTempo, roundWeight, rpeColor, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, shadowColors, statusPillColor, surfaceGradient, useTable, useTimer, useToast, useToolbarButton, validateCssPropertyManifest, validationRules, velocityZoneColor };
|
|
14670
14551
|
//# sourceMappingURL=index.mjs.map
|
|
14671
14552
|
//# sourceMappingURL=index.mjs.map
|