@titan-design/react-ui 0.5.0 → 0.6.0
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/bodymap.js +232 -185
- package/dist/bodymap.js.map +1 -1
- package/dist/bodymap.mjs +232 -185
- package/dist/bodymap.mjs.map +1 -1
- package/dist/index.d.mts +164 -8
- package/dist/index.d.ts +164 -8
- package/dist/index.js +835 -342
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +816 -343
- package/dist/index.mjs.map +1 -1
- package/dist/pages.js +570 -522
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +570 -522
- package/dist/pages.mjs.map +1 -1
- package/dist/theme/index.d.mts +461 -199
- package/dist/theme/index.d.ts +461 -199
- package/dist/theme/index.js +311 -97
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +303 -98
- package/dist/theme/index.mjs.map +1 -1
- package/dist/theme/tokens-css.js +148 -139
- package/dist/theme/tokens-css.js.map +1 -1
- package/dist/theme/tokens-css.mjs +148 -139
- package/dist/theme/tokens-css.mjs.map +1 -1
- package/package.json +3 -1
- package/src/components/custom/DateTime/DateTime.stories.tsx +82 -6
- package/src/components/custom/DateTime/DateTime.test.tsx +29 -3
- package/src/components/custom/DateTime/DateTime.tsx +55 -15
- package/src/components/custom/Gauge/Gauge.test.tsx +2 -2
- package/src/components/custom/Gauge/Gauge.tsx +6 -3
- package/src/components/custom/Scatter/Scatter.tsx +3 -5
- package/src/components/custom/Treemap/Treemap.tsx +3 -5
- package/src/components/custom/Typography/Typography.stories.tsx +45 -27
- package/src/components/custom/Typography/Typography.test.tsx +13 -3
- package/src/components/custom/Typography/Typography.tsx +5 -0
- package/src/components/custom/Workout/ActiveWorkoutPage.tsx +2 -1
- package/src/components/custom/Workout/BodyMap.tsx +6 -3
- package/src/components/custom/Workout/BodyMapDetailPanel.tsx +6 -3
- package/src/components/custom/Workout/CapacityBandChart.test.tsx +2 -2
- package/src/components/custom/Workout/CapacityBandChart.tsx +9 -6
- package/src/components/custom/Workout/DeviationBar.test.tsx +1 -1
- package/src/components/custom/Workout/DeviationBar.tsx +7 -4
- package/src/components/custom/Workout/ExerciseDetailPage.tsx +2 -1
- package/src/components/custom/Workout/InputBar.tsx +2 -1
- package/src/components/custom/Workout/IntensityBar.test.tsx +8 -8
- package/src/components/custom/Workout/IntensityBar.tsx +10 -6
- package/src/components/custom/Workout/MesoCard.tsx +8 -3
- package/src/components/custom/Workout/MesoProgressBar.test.tsx +1 -1
- package/src/components/custom/Workout/MesoProgressBar.tsx +3 -2
- package/src/components/custom/Workout/MesoStatusCard.tsx +20 -13
- package/src/components/custom/Workout/MuscleGroupChip.tsx +7 -4
- package/src/components/custom/Workout/PrBadge.tsx +5 -2
- package/src/components/custom/Workout/PrHistoryModal.tsx +4 -3
- package/src/components/custom/Workout/ProgramPlanningPage.tsx +2 -1
- package/src/components/custom/Workout/ReadinessCheck.tsx +7 -4
- package/src/components/custom/Workout/RestTimer.tsx +2 -1
- package/src/components/custom/Workout/SetRow.tsx +2 -1
- package/src/components/custom/Workout/Sparkline.tsx +2 -1
- package/src/components/custom/Workout/StatusDot.test.tsx +2 -2
- package/src/components/custom/Workout/StatusDot.tsx +12 -9
- package/src/components/custom/Workout/StrengthTrendChart.tsx +9 -6
- package/src/components/custom/Workout/SupersetWrapper.tsx +2 -1
- package/src/components/custom/Workout/TempoDisplay.tsx +6 -3
- package/src/components/custom/Workout/VelocityStrip.test.tsx +3 -3
- package/src/components/custom/Workout/WeekRow.tsx +3 -2
- package/src/components/custom/Workout/WeightBadge.tsx +6 -2
- package/src/components/custom/Workout/WorkoutCard.tsx +5 -2
- package/src/components/custom/Workout/WorkoutPill.tsx +12 -8
- package/src/components/custom/Workout/icons.tsx +6 -67
- package/src/components/icons/SvgIcon.tsx +50 -0
- package/src/components/icons/icons.stories.tsx +57 -0
- package/src/components/icons/icons.test.tsx +43 -0
- package/src/components/icons/icons.tsx +45 -0
- package/src/components/icons/index.ts +4 -0
- package/src/components/index.ts +6 -0
- package/src/components/shell/BrandLockup.stories.tsx +27 -0
- package/src/components/shell/BrandLockup.test.tsx +23 -0
- package/src/components/shell/BrandLockup.tsx +47 -0
- package/src/components/shell/DeviceIndicator.stories.tsx +28 -0
- package/src/components/shell/DeviceIndicator.test.tsx +26 -0
- package/src/components/shell/DeviceIndicator.tsx +52 -0
- package/src/components/shell/DeviceMenu.stories.tsx +47 -0
- package/src/components/shell/DeviceMenu.test.tsx +40 -0
- package/src/components/shell/DeviceMenu.tsx +65 -0
- package/src/components/shell/DeviceRow.stories.tsx +38 -0
- package/src/components/shell/DeviceRow.test.tsx +37 -0
- package/src/components/shell/DeviceRow.tsx +58 -0
- package/src/components/shell/README.md +86 -0
- package/src/components/shell/SessionStatePill.stories.tsx +27 -0
- package/src/components/shell/SessionStatePill.test.tsx +25 -0
- package/src/components/shell/SessionStatePill.tsx +46 -0
- package/src/components/shell/TopBar.stories.tsx +49 -0
- package/src/components/shell/TopBar.test.tsx +36 -0
- package/src/components/shell/TopBar.tsx +89 -0
- package/src/components/shell/index.ts +8 -0
- package/src/components/ui/indicator/Indicator.stories.tsx +37 -1
- package/src/components/ui/indicator/Indicator.test.tsx +19 -1
- package/src/components/ui/indicator/Indicator.tsx +45 -6
- package/src/components/ui/indicator/index.ts +1 -1
- package/src/components/ui/spinner/Spinner.tsx +3 -2
- package/src/components/ui/toolbar-button/ToolbarButton.tsx +2 -1
- package/src/theme/ColorSystem.stories.tsx +323 -0
- package/src/theme/Colors.stories.tsx +69 -1
- package/src/theme/barrel.ts +1 -0
- package/src/theme/config.ts +16 -3
- package/src/theme/extracted-colors-dataviz.ts +21 -0
- package/src/theme/extracted-colors-ui.ts +20 -0
- package/src/theme/global.css +64 -52
- package/src/theme/gradients.test.ts +25 -0
- package/src/theme/gradients.ts +36 -0
- package/src/theme/tokens/primitives.test.ts +232 -0
- package/src/theme/tokens/primitives.ts +247 -0
- package/src/theme/tokens/semantic.ts +93 -81
- package/src/theme/workout-tokens.ts +22 -21
- package/src/utils/avatar-color.ts +3 -3
- package/tailwind.config.js +10 -3
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { jsx as jsx$1, jsxs as jsxs$1, Fragment } from 'react/jsx-runtime';
|
|
1
2
|
import { Pressable, ActivityIndicator, Text, View, TextInput, Platform, StyleSheet, Easing, Image, Modal as Modal$1, ScrollView, Animated } from 'react-native';
|
|
2
3
|
import { clsx } from 'clsx';
|
|
3
4
|
import { twMerge } from 'tailwind-merge';
|
|
4
|
-
import { jsx as jsx$1, jsxs as jsxs$1, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import React24, { forwardRef, useState, createContext, useMemo, useContext, useRef, useEffect, useCallback, useSyncExternalStore, Fragment as Fragment$1 } from 'react';
|
|
6
6
|
|
|
7
7
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
@@ -10,9 +10,6 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
10
10
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
11
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
12
|
});
|
|
13
|
-
function cn(...inputs) {
|
|
14
|
-
return twMerge(clsx(inputs));
|
|
15
|
-
}
|
|
16
13
|
function wrapJsx(fn) {
|
|
17
14
|
return function(type, props, ...rest) {
|
|
18
15
|
if (props && typeof props.className === "string" && props.className) {
|
|
@@ -31,6 +28,58 @@ function wrapJsx(fn) {
|
|
|
31
28
|
var jsx = wrapJsx(jsx$1);
|
|
32
29
|
var jsxs = wrapJsx(jsxs$1);
|
|
33
30
|
|
|
31
|
+
// src/components/icons/SvgIcon.tsx
|
|
32
|
+
function SvgIcon({
|
|
33
|
+
size = 24,
|
|
34
|
+
color = "currentColor",
|
|
35
|
+
strokeWidth = 2,
|
|
36
|
+
fill = "none",
|
|
37
|
+
title,
|
|
38
|
+
children
|
|
39
|
+
}) {
|
|
40
|
+
return /* @__PURE__ */ jsxs(
|
|
41
|
+
"svg",
|
|
42
|
+
{
|
|
43
|
+
width: size,
|
|
44
|
+
height: size,
|
|
45
|
+
viewBox: "0 0 24 24",
|
|
46
|
+
fill,
|
|
47
|
+
stroke: color,
|
|
48
|
+
strokeWidth,
|
|
49
|
+
strokeLinecap: "round",
|
|
50
|
+
strokeLinejoin: "round",
|
|
51
|
+
...title ? { role: "img", "aria-label": title } : { "aria-hidden": true },
|
|
52
|
+
children: [
|
|
53
|
+
title ? /* @__PURE__ */ jsx("title", { children: title }) : null,
|
|
54
|
+
children
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/components/icons/icons.tsx
|
|
61
|
+
function VoltrasMark({ size = 14, ...props }) {
|
|
62
|
+
return /* @__PURE__ */ jsx(SvgIcon, { size, ...props, children: /* @__PURE__ */ jsx("path", { d: "M12 2 22 12 12 22 2 12Z" }) });
|
|
63
|
+
}
|
|
64
|
+
function BluetoothIcon({ size = 18, ...props }) {
|
|
65
|
+
return /* @__PURE__ */ jsx(SvgIcon, { size, ...props, children: /* @__PURE__ */ jsx("path", { d: "M7 7 17 17 12 22 12 2 17 7 7 17" }) });
|
|
66
|
+
}
|
|
67
|
+
function DumbbellIcon(props) {
|
|
68
|
+
return /* @__PURE__ */ jsxs(SvgIcon, { ...props, children: [
|
|
69
|
+
/* @__PURE__ */ jsx("path", { d: "M14.4 14.4 9.6 9.6" }),
|
|
70
|
+
/* @__PURE__ */ jsx("path", { d: "M18.657 21.485a2 2 0 1 1-2.829-2.828l-1.767 1.768a2 2 0 1 1-2.829-2.829l6.364-6.364a2 2 0 1 1 2.829 2.829l-1.768 1.767a2 2 0 1 1 2.828 2.829z" }),
|
|
71
|
+
/* @__PURE__ */ jsx("path", { d: "m21.5 21.5-1.4-1.4" }),
|
|
72
|
+
/* @__PURE__ */ jsx("path", { d: "M3.9 3.9 2.5 2.5" }),
|
|
73
|
+
/* @__PURE__ */ jsx("path", { d: "M6.404 12.768a2 2 0 1 1-2.829-2.829l1.768-1.767a2 2 0 1 1-2.828-2.829l2.828-2.828a2 2 0 1 1 2.829 2.828l1.767-1.768a2 2 0 1 1 2.829 2.829z" })
|
|
74
|
+
] });
|
|
75
|
+
}
|
|
76
|
+
function StarIcon(props) {
|
|
77
|
+
return /* @__PURE__ */ jsx(SvgIcon, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" }) });
|
|
78
|
+
}
|
|
79
|
+
function cn(...inputs) {
|
|
80
|
+
return twMerge(clsx(inputs));
|
|
81
|
+
}
|
|
82
|
+
|
|
34
83
|
// src/components/ui/alert/Alert.tsx
|
|
35
84
|
var statusColors = {
|
|
36
85
|
success: {
|
|
@@ -188,6 +237,38 @@ var primitiveColors = {
|
|
|
188
237
|
800: "#991B1B",
|
|
189
238
|
900: "#7F1D1D"
|
|
190
239
|
},
|
|
240
|
+
// Vivid green scale (live/go success)
|
|
241
|
+
greenVivid: {
|
|
242
|
+
50: "#E9FBF0",
|
|
243
|
+
100: "#C8F7DA",
|
|
244
|
+
200: "#9FF0BF",
|
|
245
|
+
300: "#6BE79D",
|
|
246
|
+
400: "#47DE84",
|
|
247
|
+
// Success vivid light
|
|
248
|
+
500: "#2ED573",
|
|
249
|
+
// Success vivid main
|
|
250
|
+
600: "#22B85F",
|
|
251
|
+
700: "#1A9950",
|
|
252
|
+
// Success vivid dark
|
|
253
|
+
800: "#157A40",
|
|
254
|
+
900: "#105C30"
|
|
255
|
+
},
|
|
256
|
+
// Vivid red scale (alert)
|
|
257
|
+
redVivid: {
|
|
258
|
+
50: "#FFECEE",
|
|
259
|
+
100: "#FFD6DB",
|
|
260
|
+
200: "#FFB3BC",
|
|
261
|
+
300: "#FF8593",
|
|
262
|
+
400: "#FF6070",
|
|
263
|
+
// Error vivid light
|
|
264
|
+
500: "#FF4757",
|
|
265
|
+
// Error vivid main
|
|
266
|
+
600: "#E63548",
|
|
267
|
+
700: "#C42539",
|
|
268
|
+
// Error vivid dark
|
|
269
|
+
800: "#9E1C2C",
|
|
270
|
+
900: "#7A1520"
|
|
271
|
+
},
|
|
191
272
|
// Amber scale (warning)
|
|
192
273
|
amber: {
|
|
193
274
|
50: "#FFFBEB",
|
|
@@ -277,6 +358,162 @@ var primitiveColors = {
|
|
|
277
358
|
black: "#000000",
|
|
278
359
|
transparent: "transparent"
|
|
279
360
|
};
|
|
361
|
+
var primitiveRamps = {
|
|
362
|
+
red: {
|
|
363
|
+
50: "#FFF4F4",
|
|
364
|
+
100: "#FFE3E5",
|
|
365
|
+
200: "#FFC2C5",
|
|
366
|
+
300: "#FF9A9D",
|
|
367
|
+
400: "#F77175",
|
|
368
|
+
500: "#E05254",
|
|
369
|
+
600: "#D14343",
|
|
370
|
+
// pin
|
|
371
|
+
700: "#A4221C",
|
|
372
|
+
800: "#7E1002",
|
|
373
|
+
900: "#5A0900",
|
|
374
|
+
950: "#3D0400"
|
|
375
|
+
},
|
|
376
|
+
orange: {
|
|
377
|
+
50: "#FFF5ED",
|
|
378
|
+
100: "#FFE6D4",
|
|
379
|
+
200: "#FFC7A2",
|
|
380
|
+
300: "#FFA063",
|
|
381
|
+
400: "#FF7900",
|
|
382
|
+
// pin
|
|
383
|
+
500: "#DA5F00",
|
|
384
|
+
600: "#B94A00",
|
|
385
|
+
700: "#983804",
|
|
386
|
+
800: "#6F290F",
|
|
387
|
+
900: "#4E1C0C",
|
|
388
|
+
950: "#331107"
|
|
389
|
+
},
|
|
390
|
+
amber: {
|
|
391
|
+
50: "#FFF7DD",
|
|
392
|
+
100: "#FFEAA9",
|
|
393
|
+
200: "#FFD352",
|
|
394
|
+
300: "#F9B415",
|
|
395
|
+
// pin
|
|
396
|
+
400: "#E08C00",
|
|
397
|
+
500: "#C27400",
|
|
398
|
+
600: "#A45E00",
|
|
399
|
+
700: "#814D14",
|
|
400
|
+
800: "#5B3A1A",
|
|
401
|
+
900: "#442503",
|
|
402
|
+
950: "#301500"
|
|
403
|
+
},
|
|
404
|
+
green: {
|
|
405
|
+
50: "#E3FFEE",
|
|
406
|
+
100: "#B5FFD2",
|
|
407
|
+
200: "#58F69E",
|
|
408
|
+
300: "#2ED573",
|
|
409
|
+
// pin
|
|
410
|
+
400: "#21C05D",
|
|
411
|
+
500: "#22A444",
|
|
412
|
+
600: "#298732",
|
|
413
|
+
700: "#2B6B25",
|
|
414
|
+
800: "#264D1C",
|
|
415
|
+
900: "#1B3515",
|
|
416
|
+
950: "#11220D"
|
|
417
|
+
},
|
|
418
|
+
cyan: {
|
|
419
|
+
50: "#E6FBFF",
|
|
420
|
+
100: "#C2F6FF",
|
|
421
|
+
200: "#62EAFF",
|
|
422
|
+
300: "#22D3EE",
|
|
423
|
+
// pin
|
|
424
|
+
400: "#01B5D1",
|
|
425
|
+
500: "#2697B7",
|
|
426
|
+
600: "#307B9B",
|
|
427
|
+
700: "#2A617F",
|
|
428
|
+
800: "#22465F",
|
|
429
|
+
900: "#0B3149",
|
|
430
|
+
950: "#001F36"
|
|
431
|
+
},
|
|
432
|
+
blue: {
|
|
433
|
+
50: "#EFF8FF",
|
|
434
|
+
100: "#D9EFFF",
|
|
435
|
+
200: "#ACDBFF",
|
|
436
|
+
300: "#78C2FF",
|
|
437
|
+
400: "#3CA8FF",
|
|
438
|
+
500: "#2196F3",
|
|
439
|
+
// pin
|
|
440
|
+
600: "#1072CB",
|
|
441
|
+
700: "#135AA8",
|
|
442
|
+
800: "#14407E",
|
|
443
|
+
900: "#112C5A",
|
|
444
|
+
950: "#091B3C"
|
|
445
|
+
},
|
|
446
|
+
magenta: {
|
|
447
|
+
50: "#FFF3F9",
|
|
448
|
+
100: "#FFE2F1",
|
|
449
|
+
200: "#FFBDE2",
|
|
450
|
+
300: "#FF8FD5",
|
|
451
|
+
400: "#ED69C3",
|
|
452
|
+
500: "#D548AF",
|
|
453
|
+
600: "#BA2996",
|
|
454
|
+
700: "#9C0D7A",
|
|
455
|
+
// pin
|
|
456
|
+
800: "#77005A",
|
|
457
|
+
900: "#56003F",
|
|
458
|
+
950: "#3B0029"
|
|
459
|
+
}
|
|
460
|
+
};
|
|
461
|
+
var categoricalPalette = {
|
|
462
|
+
default: [
|
|
463
|
+
primitiveRamps.blue[500],
|
|
464
|
+
primitiveRamps.magenta[500],
|
|
465
|
+
primitiveRamps.red[500],
|
|
466
|
+
primitiveRamps.orange[400],
|
|
467
|
+
primitiveRamps.green[300],
|
|
468
|
+
primitiveRamps.cyan[300],
|
|
469
|
+
primitiveRamps.amber[600]
|
|
470
|
+
// extended (7th) — pair with a legend
|
|
471
|
+
],
|
|
472
|
+
dark: [
|
|
473
|
+
primitiveRamps.blue[600],
|
|
474
|
+
primitiveRamps.magenta[600],
|
|
475
|
+
primitiveRamps.red[500],
|
|
476
|
+
primitiveRamps.orange[600],
|
|
477
|
+
primitiveRamps.green[800],
|
|
478
|
+
primitiveRamps.cyan[800],
|
|
479
|
+
primitiveRamps.amber[500]
|
|
480
|
+
// extended (7th) — pair with a legend
|
|
481
|
+
]
|
|
482
|
+
};
|
|
483
|
+
var CATEGORICAL_CVD_SAFE_MAX = 6;
|
|
484
|
+
function getCategoricalColor(index, variant = "default") {
|
|
485
|
+
const palette = categoricalPalette[variant];
|
|
486
|
+
index = Math.max(0, Math.floor(index));
|
|
487
|
+
return palette[index % palette.length];
|
|
488
|
+
}
|
|
489
|
+
var divergingScale = [
|
|
490
|
+
primitiveRamps.blue[500],
|
|
491
|
+
// under
|
|
492
|
+
primitiveRamps.cyan[300],
|
|
493
|
+
// maintenance
|
|
494
|
+
primitiveRamps.green[200],
|
|
495
|
+
// optimal (light center)
|
|
496
|
+
primitiveRamps.amber[300],
|
|
497
|
+
// approaching
|
|
498
|
+
primitiveRamps.red[600]
|
|
499
|
+
// over
|
|
500
|
+
];
|
|
501
|
+
var sequentialEffort = [
|
|
502
|
+
primitiveRamps.green[300],
|
|
503
|
+
primitiveRamps.amber[200],
|
|
504
|
+
primitiveRamps.amber[300],
|
|
505
|
+
primitiveRamps.orange[400],
|
|
506
|
+
primitiveRamps.red[600],
|
|
507
|
+
primitiveRamps.red[700]
|
|
508
|
+
];
|
|
509
|
+
function bestTextColor(hex) {
|
|
510
|
+
const [r, g, b] = [0, 2, 4].map((i) => {
|
|
511
|
+
const c = parseInt(hex.replace("#", "").slice(i, i + 2), 16) / 255;
|
|
512
|
+
return c >= 0.04045 ? ((c + 0.055) / 1.055) ** 2.4 : c / 12.92;
|
|
513
|
+
});
|
|
514
|
+
const l = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
515
|
+
return (l + 0.05) / 0.05 >= 1.05 / (l + 0.05) ? "#000000" : "#FFFFFF";
|
|
516
|
+
}
|
|
280
517
|
var discreteRainbow = [
|
|
281
518
|
"#E8ECFB",
|
|
282
519
|
"#D9CCE3",
|
|
@@ -486,56 +723,43 @@ var primitiveZIndex = {
|
|
|
486
723
|
// src/theme/tokens/semantic.ts
|
|
487
724
|
var semanticColorsLight = {
|
|
488
725
|
// Brand colors (brand-*)
|
|
489
|
-
"brand-primary":
|
|
490
|
-
|
|
491
|
-
"brand-primary-
|
|
492
|
-
// #FF9630
|
|
493
|
-
"brand-primary-dark": primitiveColors.accent[700],
|
|
494
|
-
// #D0620C
|
|
726
|
+
"brand-primary": primitiveRamps.orange[400],
|
|
727
|
+
"brand-primary-light": primitiveRamps.orange[300],
|
|
728
|
+
"brand-primary-dark": primitiveRamps.orange[500],
|
|
495
729
|
"brand-primary-subtle": "rgba(255, 121, 0, 0.08)",
|
|
496
|
-
"brand-primary-hover":
|
|
497
|
-
"brand-primary-active":
|
|
498
|
-
"brand-secondary":
|
|
499
|
-
|
|
500
|
-
"brand-secondary-
|
|
501
|
-
|
|
502
|
-
"brand-secondary-
|
|
503
|
-
|
|
504
|
-
"brand-secondary-subtle": "rgba(64, 109, 135, 0.08)",
|
|
505
|
-
"brand-secondary-hover": primitiveColors.steel[600],
|
|
506
|
-
"brand-secondary-active": primitiveColors.steel[700],
|
|
730
|
+
"brand-primary-hover": primitiveRamps.orange[500],
|
|
731
|
+
"brand-primary-active": primitiveRamps.orange[600],
|
|
732
|
+
"brand-secondary": primitiveRamps.cyan[600],
|
|
733
|
+
"brand-secondary-light": primitiveRamps.cyan[500],
|
|
734
|
+
"brand-secondary-dark": primitiveRamps.cyan[700],
|
|
735
|
+
"brand-secondary-subtle": "rgba(48, 123, 155, 0.08)",
|
|
736
|
+
"brand-secondary-hover": primitiveRamps.cyan[700],
|
|
737
|
+
"brand-secondary-active": primitiveRamps.cyan[800],
|
|
507
738
|
// Text on brand backgrounds (on-*)
|
|
508
739
|
"on-brand-primary": primitiveColors.white,
|
|
509
740
|
"on-brand-secondary": primitiveColors.white,
|
|
510
741
|
// Status colors (status-*)
|
|
511
|
-
"status-success":
|
|
512
|
-
|
|
513
|
-
"status-success-
|
|
514
|
-
|
|
515
|
-
"status-
|
|
516
|
-
|
|
517
|
-
"status-
|
|
518
|
-
"status-error":
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
"status-error-dark": primitiveColors.
|
|
523
|
-
|
|
524
|
-
"status-
|
|
525
|
-
"status-warning":
|
|
526
|
-
|
|
527
|
-
"status-warning-
|
|
528
|
-
|
|
529
|
-
"status-
|
|
530
|
-
|
|
531
|
-
"status-
|
|
532
|
-
"status-info": primitiveColors.sky[500],
|
|
533
|
-
// #2196F3
|
|
534
|
-
"status-info-light": primitiveColors.sky[400],
|
|
535
|
-
// #64B6F7
|
|
536
|
-
"status-info-dark": primitiveColors.sky[700],
|
|
537
|
-
// #0B79D0
|
|
538
|
-
"status-info-subtle": primitiveColors.sky[50],
|
|
742
|
+
"status-success": primitiveRamps.green[300],
|
|
743
|
+
"status-success-light": primitiveRamps.green[200],
|
|
744
|
+
"status-success-dark": primitiveRamps.green[600],
|
|
745
|
+
"status-success-subtle": primitiveRamps.green[50],
|
|
746
|
+
"status-error": primitiveRamps.red[600],
|
|
747
|
+
"status-error-light": primitiveRamps.red[500],
|
|
748
|
+
"status-error-dark": primitiveRamps.red[700],
|
|
749
|
+
"status-error-subtle": primitiveRamps.red[50],
|
|
750
|
+
"status-error-vivid": primitiveColors.redVivid[500],
|
|
751
|
+
// vivid alert red
|
|
752
|
+
"status-error-vivid-light": primitiveColors.redVivid[400],
|
|
753
|
+
"status-error-vivid-dark": primitiveColors.redVivid[700],
|
|
754
|
+
"status-error-vivid-subtle": "rgba(255, 71, 87, 0.12)",
|
|
755
|
+
"status-warning": primitiveRamps.amber[300],
|
|
756
|
+
"status-warning-light": primitiveRamps.amber[200],
|
|
757
|
+
"status-warning-dark": primitiveRamps.amber[500],
|
|
758
|
+
"status-warning-subtle": primitiveRamps.amber[50],
|
|
759
|
+
"status-info": primitiveRamps.blue[500],
|
|
760
|
+
"status-info-light": primitiveRamps.blue[300],
|
|
761
|
+
"status-info-dark": primitiveRamps.blue[600],
|
|
762
|
+
"status-info-subtle": primitiveRamps.blue[50],
|
|
539
763
|
// Text on status backgrounds (on-status-*)
|
|
540
764
|
"on-status-success": primitiveColors.white,
|
|
541
765
|
"on-status-error": primitiveColors.white,
|
|
@@ -562,25 +786,25 @@ var semanticColorsLight = {
|
|
|
562
786
|
// Data visualization colors (data-*)
|
|
563
787
|
// First 10 colors from discrete rainbow optimized for charts
|
|
564
788
|
"data-1": discreteRainbow[9],
|
|
565
|
-
//
|
|
789
|
+
// Blue
|
|
566
790
|
"data-2": discreteRainbow[14],
|
|
567
|
-
//
|
|
791
|
+
// Green
|
|
568
792
|
"data-3": discreteRainbow[17],
|
|
569
|
-
//
|
|
793
|
+
// Yellow
|
|
570
794
|
"data-4": discreteRainbow[25],
|
|
571
|
-
//
|
|
795
|
+
// Red
|
|
572
796
|
"data-5": discreteRainbow[8],
|
|
573
|
-
//
|
|
797
|
+
// Purple
|
|
574
798
|
"data-6": discreteRainbow[20],
|
|
575
|
-
//
|
|
799
|
+
// Orange
|
|
576
800
|
"data-7": discreteRainbow[13],
|
|
577
|
-
//
|
|
801
|
+
// Light Blue
|
|
578
802
|
"data-8": discreteRainbow[15],
|
|
579
|
-
//
|
|
803
|
+
// Light Green
|
|
580
804
|
"data-9": discreteRainbow[3],
|
|
581
|
-
//
|
|
805
|
+
// Lavender
|
|
582
806
|
"data-10": discreteRainbow[22],
|
|
583
|
-
//
|
|
807
|
+
// Dark Orange
|
|
584
808
|
// Text colors (text-*)
|
|
585
809
|
"text-primary": "#121828",
|
|
586
810
|
"text-secondary": "#65748B",
|
|
@@ -592,9 +816,9 @@ var semanticColorsLight = {
|
|
|
592
816
|
// Surface colors (surface-*) - for elevated containers
|
|
593
817
|
"surface-base": primitiveColors.white,
|
|
594
818
|
"surface-elevated": primitiveColors.neutral[50],
|
|
595
|
-
//
|
|
819
|
+
// slightly off-white for elevated cards
|
|
596
820
|
"surface-raised": primitiveColors.neutral[100],
|
|
597
|
-
//
|
|
821
|
+
// light gray for raised cards
|
|
598
822
|
"surface-overlay": primitiveColors.white,
|
|
599
823
|
"surface-input": primitiveColors.neutral[50],
|
|
600
824
|
// Input field background (filled variant)
|
|
@@ -606,6 +830,8 @@ var semanticColorsLight = {
|
|
|
606
830
|
"border-default": "#E8E9EB",
|
|
607
831
|
"border-subtle": primitiveColors.neutral[100],
|
|
608
832
|
"border-strong": primitiveColors.neutral[300],
|
|
833
|
+
"border-prominent": primitiveColors.neutral[400],
|
|
834
|
+
// high-visibility divider
|
|
609
835
|
"border-focus": primitiveColors.blue[600],
|
|
610
836
|
"border-input": primitiveColors.neutral[300],
|
|
611
837
|
// Input field border
|
|
@@ -630,37 +856,41 @@ var semanticColorsLight = {
|
|
|
630
856
|
};
|
|
631
857
|
var semanticColorsDark = {
|
|
632
858
|
// Brand colors stay the same in dark mode
|
|
633
|
-
"brand-primary":
|
|
634
|
-
"brand-primary-light":
|
|
635
|
-
"brand-primary-dark":
|
|
859
|
+
"brand-primary": primitiveRamps.orange[400],
|
|
860
|
+
"brand-primary-light": primitiveRamps.orange[300],
|
|
861
|
+
"brand-primary-dark": primitiveRamps.orange[500],
|
|
636
862
|
"brand-primary-subtle": "rgba(255, 121, 0, 0.12)",
|
|
637
|
-
"brand-primary-hover":
|
|
638
|
-
"brand-primary-active":
|
|
639
|
-
"brand-secondary":
|
|
640
|
-
"brand-secondary-light":
|
|
641
|
-
"brand-secondary-dark":
|
|
642
|
-
"brand-secondary-subtle": "rgba(
|
|
643
|
-
"brand-secondary-hover":
|
|
644
|
-
"brand-secondary-active":
|
|
863
|
+
"brand-primary-hover": primitiveRamps.orange[300],
|
|
864
|
+
"brand-primary-active": primitiveRamps.orange[200],
|
|
865
|
+
"brand-secondary": primitiveRamps.cyan[600],
|
|
866
|
+
"brand-secondary-light": primitiveRamps.cyan[500],
|
|
867
|
+
"brand-secondary-dark": primitiveRamps.cyan[700],
|
|
868
|
+
"brand-secondary-subtle": "rgba(48, 123, 155, 0.12)",
|
|
869
|
+
"brand-secondary-hover": primitiveRamps.cyan[500],
|
|
870
|
+
"brand-secondary-active": primitiveRamps.cyan[400],
|
|
645
871
|
// Text on brand backgrounds
|
|
646
872
|
"on-brand-primary": primitiveColors.white,
|
|
647
873
|
"on-brand-secondary": primitiveColors.white,
|
|
648
874
|
// Status colors
|
|
649
|
-
"status-success":
|
|
650
|
-
"status-success-light":
|
|
651
|
-
"status-success-dark":
|
|
652
|
-
"status-success-subtle": "rgba(
|
|
653
|
-
"status-error":
|
|
654
|
-
"status-error-light":
|
|
655
|
-
"status-error-dark":
|
|
875
|
+
"status-success": primitiveRamps.green[300],
|
|
876
|
+
"status-success-light": primitiveRamps.green[200],
|
|
877
|
+
"status-success-dark": primitiveRamps.green[600],
|
|
878
|
+
"status-success-subtle": "rgba(46, 213, 115, 0.12)",
|
|
879
|
+
"status-error": primitiveRamps.red[600],
|
|
880
|
+
"status-error-light": primitiveRamps.red[500],
|
|
881
|
+
"status-error-dark": primitiveRamps.red[700],
|
|
656
882
|
"status-error-subtle": "rgba(209, 67, 67, 0.12)",
|
|
657
|
-
"status-
|
|
658
|
-
"status-
|
|
659
|
-
"status-
|
|
660
|
-
"status-
|
|
661
|
-
"status-
|
|
662
|
-
"status-
|
|
663
|
-
"status-
|
|
883
|
+
"status-error-vivid": primitiveColors.redVivid[500],
|
|
884
|
+
"status-error-vivid-light": primitiveColors.redVivid[400],
|
|
885
|
+
"status-error-vivid-dark": primitiveColors.redVivid[700],
|
|
886
|
+
"status-error-vivid-subtle": "rgba(255, 71, 87, 0.12)",
|
|
887
|
+
"status-warning": primitiveRamps.amber[300],
|
|
888
|
+
"status-warning-light": primitiveRamps.amber[200],
|
|
889
|
+
"status-warning-dark": primitiveRamps.amber[500],
|
|
890
|
+
"status-warning-subtle": "rgba(249, 180, 21, 0.12)",
|
|
891
|
+
"status-info": primitiveRamps.blue[500],
|
|
892
|
+
"status-info-light": primitiveRamps.blue[300],
|
|
893
|
+
"status-info-dark": primitiveRamps.blue[600],
|
|
664
894
|
"status-info-subtle": "rgba(33, 150, 243, 0.12)",
|
|
665
895
|
// Text on status backgrounds
|
|
666
896
|
"on-status-success": primitiveColors.white,
|
|
@@ -702,29 +932,31 @@ var semanticColorsDark = {
|
|
|
702
932
|
"text-link-hover": primitiveColors.blue[400],
|
|
703
933
|
// Surface colors - dark backgrounds
|
|
704
934
|
"surface-base": primitiveColors.charcoal[700],
|
|
705
|
-
//
|
|
935
|
+
// main surface
|
|
706
936
|
"surface-elevated": primitiveColors.charcoal[600],
|
|
707
|
-
//
|
|
937
|
+
// elevated surface
|
|
708
938
|
"surface-raised": primitiveColors.charcoal[500],
|
|
709
|
-
//
|
|
939
|
+
// raised surface
|
|
710
940
|
"surface-overlay": primitiveColors.charcoal[600],
|
|
711
|
-
//
|
|
941
|
+
// overlay surface
|
|
712
942
|
"surface-input": primitiveColors.charcoal[600],
|
|
713
|
-
//
|
|
943
|
+
// input surface
|
|
714
944
|
// Background colors
|
|
715
945
|
"background-base": primitiveColors.charcoal[900],
|
|
716
|
-
//
|
|
946
|
+
// darkest charcoal
|
|
717
947
|
"background-default": primitiveColors.charcoal[700],
|
|
718
|
-
//
|
|
948
|
+
// main background
|
|
719
949
|
"background-subtle": primitiveColors.charcoal[500],
|
|
720
|
-
//
|
|
950
|
+
// subtle background
|
|
721
951
|
// Border colors
|
|
722
952
|
"border-default": primitiveColors.charcoal[400],
|
|
723
|
-
//
|
|
953
|
+
// default border
|
|
724
954
|
"border-subtle": primitiveColors.charcoal[500],
|
|
725
|
-
//
|
|
955
|
+
// subtle border
|
|
726
956
|
"border-strong": primitiveColors.charcoal[300],
|
|
727
|
-
//
|
|
957
|
+
// strong border
|
|
958
|
+
"border-prominent": primitiveColors.charcoal[200],
|
|
959
|
+
// high-visibility divider
|
|
728
960
|
"border-focus": "#828DF8",
|
|
729
961
|
"border-input": primitiveColors.neutral[600],
|
|
730
962
|
"border-input-hover": primitiveColors.neutral[500],
|
|
@@ -739,7 +971,7 @@ var semanticColorsDark = {
|
|
|
739
971
|
"interactive-disabled-text": "rgba(255, 255, 255, 0.26)",
|
|
740
972
|
// Divider
|
|
741
973
|
"divider": primitiveColors.charcoal[400],
|
|
742
|
-
//
|
|
974
|
+
// divider color
|
|
743
975
|
// Avatar default
|
|
744
976
|
"avatar-background": primitiveColors.neutral[600],
|
|
745
977
|
"avatar-text": primitiveColors.white
|
|
@@ -1205,10 +1437,11 @@ var PasswordInput = forwardRef(function PasswordInput2({ showIcon, hideIcon, ...
|
|
|
1205
1437
|
var themeIndependentCSSVars = {
|
|
1206
1438
|
// RGB decomposed values for glow shadows
|
|
1207
1439
|
"--color-brand-primary-rgb": "255, 121, 0",
|
|
1208
|
-
"--color-brand-secondary-rgb": "
|
|
1209
|
-
"--color-status-success-rgb": "
|
|
1440
|
+
"--color-brand-secondary-rgb": "48, 123, 155",
|
|
1441
|
+
"--color-status-success-rgb": "46, 213, 115",
|
|
1210
1442
|
"--color-status-error-rgb": "209, 67, 67",
|
|
1211
|
-
"--color-status-
|
|
1443
|
+
"--color-status-error-vivid-rgb": "255, 71, 87",
|
|
1444
|
+
"--color-status-warning-rgb": "249, 180, 21",
|
|
1212
1445
|
"--color-status-info-rgb": "33, 150, 243",
|
|
1213
1446
|
"--color-background-base-rgb": "16, 16, 16",
|
|
1214
1447
|
// Font families
|
|
@@ -1243,6 +1476,10 @@ var lightThemeCSSVars = {
|
|
|
1243
1476
|
"--color-status-warning-subtle": semanticColorsLight["status-warning-subtle"],
|
|
1244
1477
|
"--color-status-info": semanticColorsLight["status-info"],
|
|
1245
1478
|
"--color-status-info-subtle": semanticColorsLight["status-info-subtle"],
|
|
1479
|
+
"--color-status-error-vivid": semanticColorsLight["status-error-vivid"],
|
|
1480
|
+
"--color-status-error-vivid-light": semanticColorsLight["status-error-vivid-light"],
|
|
1481
|
+
"--color-status-error-vivid-dark": semanticColorsLight["status-error-vivid-dark"],
|
|
1482
|
+
"--color-status-error-vivid-subtle": semanticColorsLight["status-error-vivid-subtle"],
|
|
1246
1483
|
"--color-text-primary": semanticColorsLight["text-primary"],
|
|
1247
1484
|
"--color-text-secondary": semanticColorsLight["text-secondary"],
|
|
1248
1485
|
"--color-text-tertiary": semanticColorsLight["text-tertiary"],
|
|
@@ -1258,6 +1495,7 @@ var lightThemeCSSVars = {
|
|
|
1258
1495
|
"--color-border-default": semanticColorsLight["border-default"],
|
|
1259
1496
|
"--color-border-subtle": semanticColorsLight["border-subtle"],
|
|
1260
1497
|
"--color-border-strong": semanticColorsLight["border-strong"],
|
|
1498
|
+
"--color-border-prominent": semanticColorsLight["border-prominent"],
|
|
1261
1499
|
"--color-border-focus": semanticColorsLight["border-focus"],
|
|
1262
1500
|
"--color-interactive-hover": semanticColorsLight["interactive-hover"],
|
|
1263
1501
|
"--color-interactive-focus": semanticColorsLight["interactive-focus"],
|
|
@@ -1334,6 +1572,10 @@ var darkThemeCSSVars = {
|
|
|
1334
1572
|
"--color-status-warning-subtle": semanticColorsDark["status-warning-subtle"],
|
|
1335
1573
|
"--color-status-info": semanticColorsDark["status-info"],
|
|
1336
1574
|
"--color-status-info-subtle": semanticColorsDark["status-info-subtle"],
|
|
1575
|
+
"--color-status-error-vivid": semanticColorsDark["status-error-vivid"],
|
|
1576
|
+
"--color-status-error-vivid-light": semanticColorsDark["status-error-vivid-light"],
|
|
1577
|
+
"--color-status-error-vivid-dark": semanticColorsDark["status-error-vivid-dark"],
|
|
1578
|
+
"--color-status-error-vivid-subtle": semanticColorsDark["status-error-vivid-subtle"],
|
|
1337
1579
|
"--color-text-primary": semanticColorsDark["text-primary"],
|
|
1338
1580
|
"--color-text-secondary": semanticColorsDark["text-secondary"],
|
|
1339
1581
|
"--color-text-tertiary": semanticColorsDark["text-tertiary"],
|
|
@@ -1349,6 +1591,7 @@ var darkThemeCSSVars = {
|
|
|
1349
1591
|
"--color-border-default": semanticColorsDark["border-default"],
|
|
1350
1592
|
"--color-border-subtle": semanticColorsDark["border-subtle"],
|
|
1351
1593
|
"--color-border-strong": semanticColorsDark["border-strong"],
|
|
1594
|
+
"--color-border-prominent": semanticColorsDark["border-prominent"],
|
|
1352
1595
|
"--color-border-focus": semanticColorsDark["border-focus"],
|
|
1353
1596
|
"--color-interactive-hover": semanticColorsDark["interactive-hover"],
|
|
1354
1597
|
"--color-interactive-focus": semanticColorsDark["interactive-focus"],
|
|
@@ -2157,6 +2400,17 @@ function resolveColor(token, mode = "dark") {
|
|
|
2157
2400
|
return Platform.OS === "web" ? `var(--color-${token})` : getSemanticColors(mode)[token];
|
|
2158
2401
|
}
|
|
2159
2402
|
|
|
2403
|
+
// src/theme/gradients.ts
|
|
2404
|
+
function linearGradient(from, to, angle = 180, mode = "dark") {
|
|
2405
|
+
return {
|
|
2406
|
+
backgroundImage: `linear-gradient(${angle}deg, ${resolveColor(from, mode)}, ${resolveColor(to, mode)})`
|
|
2407
|
+
};
|
|
2408
|
+
}
|
|
2409
|
+
var surfaceGradient = {
|
|
2410
|
+
/** Chrome bands (top bar, headers): elevated → base, a subtle dark wash. */
|
|
2411
|
+
chrome: (mode = "dark") => linearGradient("surface-elevated", "background-base", 180, mode)
|
|
2412
|
+
};
|
|
2413
|
+
|
|
2160
2414
|
// src/theme/presets/apply.ts
|
|
2161
2415
|
function colorKeyToVar(key) {
|
|
2162
2416
|
return `--color-${key}`;
|
|
@@ -2531,7 +2785,8 @@ var colorStyles = {
|
|
|
2531
2785
|
success: "bg-status-success",
|
|
2532
2786
|
error: "bg-status-error",
|
|
2533
2787
|
warning: "bg-status-warning",
|
|
2534
|
-
info: "bg-status-info"
|
|
2788
|
+
info: "bg-status-info",
|
|
2789
|
+
"error-vivid": "bg-status-error-vivid"
|
|
2535
2790
|
};
|
|
2536
2791
|
function Indicator({
|
|
2537
2792
|
size = "sm",
|
|
@@ -2539,14 +2794,40 @@ function Indicator({
|
|
|
2539
2794
|
customColor,
|
|
2540
2795
|
glow = false,
|
|
2541
2796
|
ring = false,
|
|
2797
|
+
pulse = false,
|
|
2542
2798
|
className,
|
|
2543
2799
|
style,
|
|
2544
2800
|
...props
|
|
2545
2801
|
}) {
|
|
2802
|
+
const pulseMode = pulse === true ? "opacity" : pulse || false;
|
|
2803
|
+
const colorClass = !customColor ? colorStyles[color] : void 0;
|
|
2804
|
+
const colorStyle = customColor ? { backgroundColor: customColor } : void 0;
|
|
2805
|
+
if (pulseMode === "ping") {
|
|
2806
|
+
return /* @__PURE__ */ jsxs(View, { className: cn("relative", sizeStyles3[size], className), style, ...props, children: [
|
|
2807
|
+
/* @__PURE__ */ jsx(
|
|
2808
|
+
View,
|
|
2809
|
+
{
|
|
2810
|
+
className: cn("absolute inset-0 rounded-full animate-ping", colorClass),
|
|
2811
|
+
style: colorStyle
|
|
2812
|
+
}
|
|
2813
|
+
),
|
|
2814
|
+
/* @__PURE__ */ jsx(
|
|
2815
|
+
View,
|
|
2816
|
+
{
|
|
2817
|
+
className: cn(
|
|
2818
|
+
"relative rounded-full",
|
|
2819
|
+
sizeStyles3[size],
|
|
2820
|
+
colorClass,
|
|
2821
|
+
ring && "border-2 border-background-base"
|
|
2822
|
+
),
|
|
2823
|
+
style: colorStyle
|
|
2824
|
+
}
|
|
2825
|
+
)
|
|
2826
|
+
] });
|
|
2827
|
+
}
|
|
2546
2828
|
const dynamicStyle = {
|
|
2547
2829
|
...typeof style === "object" ? style : {},
|
|
2548
|
-
...
|
|
2549
|
-
...glow && !customColor ? {} : {},
|
|
2830
|
+
...colorStyle ?? {},
|
|
2550
2831
|
...glow && customColor ? { boxShadow: `0 0 6px ${customColor}` } : {}
|
|
2551
2832
|
};
|
|
2552
2833
|
return /* @__PURE__ */ jsx(
|
|
@@ -2555,12 +2836,14 @@ function Indicator({
|
|
|
2555
2836
|
className: cn(
|
|
2556
2837
|
"rounded-full shrink-0",
|
|
2557
2838
|
sizeStyles3[size],
|
|
2558
|
-
|
|
2839
|
+
colorClass,
|
|
2840
|
+
pulseMode === "opacity" && "animate-pulse",
|
|
2559
2841
|
ring && "border-2 border-background-base",
|
|
2560
|
-
glow && !customColor && color === "success" && "shadow-[0_0_6px_rgba(
|
|
2842
|
+
glow && !customColor && color === "success" && "shadow-[0_0_6px_rgba(46,213,115,0.6)]",
|
|
2561
2843
|
glow && !customColor && color === "error" && "shadow-[0_0_6px_rgba(239,68,68,0.6)]",
|
|
2562
2844
|
glow && !customColor && color === "warning" && "shadow-[0_0_6px_rgba(245,158,11,0.6)]",
|
|
2563
2845
|
glow && !customColor && color === "primary" && "shadow-[0_0_6px_rgba(255,121,0,0.6)]",
|
|
2846
|
+
glow && !customColor && color === "error-vivid" && "shadow-[0_0_6px_rgba(255,71,87,0.6)]",
|
|
2564
2847
|
className
|
|
2565
2848
|
),
|
|
2566
2849
|
style: Object.keys(dynamicStyle).length > 0 ? dynamicStyle : style,
|
|
@@ -2641,6 +2924,13 @@ function Badge({
|
|
|
2641
2924
|
function BadgeText({ children, className }) {
|
|
2642
2925
|
return /* @__PURE__ */ jsx(Text, { className: cn("text-inherit font-medium", className), children });
|
|
2643
2926
|
}
|
|
2927
|
+
|
|
2928
|
+
// src/theme/extracted-colors-ui.ts
|
|
2929
|
+
var SPINNER_PRIMARY = primitiveRamps.cyan[600];
|
|
2930
|
+
var SPINNER_SECONDARY = primitiveRamps.green[400];
|
|
2931
|
+
var AVATAR_CATEGORICAL_COLORS = categoricalPalette.default;
|
|
2932
|
+
|
|
2933
|
+
// src/components/ui/spinner/Spinner.tsx
|
|
2644
2934
|
var sizeMap = {
|
|
2645
2935
|
sm: "small",
|
|
2646
2936
|
md: "small",
|
|
@@ -2648,8 +2938,8 @@ var sizeMap = {
|
|
|
2648
2938
|
xl: "large"
|
|
2649
2939
|
};
|
|
2650
2940
|
var colorMap = {
|
|
2651
|
-
primary:
|
|
2652
|
-
secondary:
|
|
2941
|
+
primary: SPINNER_PRIMARY,
|
|
2942
|
+
secondary: SPINNER_SECONDARY,
|
|
2653
2943
|
white: "#FFFFFF",
|
|
2654
2944
|
default: "#6B7280"
|
|
2655
2945
|
};
|
|
@@ -2685,15 +2975,7 @@ function Spinner({
|
|
|
2685
2975
|
}
|
|
2686
2976
|
|
|
2687
2977
|
// src/utils/avatar-color.ts
|
|
2688
|
-
var AVATAR_COLORS =
|
|
2689
|
-
"#FF6B6B",
|
|
2690
|
-
"#4ECDC4",
|
|
2691
|
-
"#45B7D1",
|
|
2692
|
-
"#96CEB4",
|
|
2693
|
-
"#FFEAA7",
|
|
2694
|
-
"#DDA0DD",
|
|
2695
|
-
"#98D8C8"
|
|
2696
|
-
];
|
|
2978
|
+
var AVATAR_COLORS = AVATAR_CATEGORICAL_COLORS;
|
|
2697
2979
|
function avatarColor(name) {
|
|
2698
2980
|
let hash = 0;
|
|
2699
2981
|
for (let i = 0; i < name.length; i++) {
|
|
@@ -4338,7 +4620,7 @@ function ToolbarButton({
|
|
|
4338
4620
|
const selected = isActive === void 0 ? isOpen : isActive;
|
|
4339
4621
|
const showActive = isActive !== false;
|
|
4340
4622
|
const getIconColor = () => {
|
|
4341
|
-
if (isActive === true) return "
|
|
4623
|
+
if (isActive === true) return resolveColor("brand-primary");
|
|
4342
4624
|
return showActive ? "#FFFFFF" : "#D1D1D1";
|
|
4343
4625
|
};
|
|
4344
4626
|
const getNeumorphicStyle = () => {
|
|
@@ -4981,7 +5263,7 @@ function ToastProvider({
|
|
|
4981
5263
|
return id;
|
|
4982
5264
|
}, [defaultDuration, maxToasts]);
|
|
4983
5265
|
const removeToast = useCallback((id) => {
|
|
4984
|
-
setToasts((prev) => prev.filter((
|
|
5266
|
+
setToasts((prev) => prev.filter((t12) => t12.id !== id));
|
|
4985
5267
|
}, []);
|
|
4986
5268
|
const removeAllToasts = useCallback(() => {
|
|
4987
5269
|
setToasts([]);
|
|
@@ -5863,7 +6145,10 @@ var variantStyles4 = {
|
|
|
5863
6145
|
subtitle2: "font-body text-sm font-medium leading-normal",
|
|
5864
6146
|
caption: "font-body text-xs font-normal leading-loose",
|
|
5865
6147
|
overline: "font-body text-xs font-semibold uppercase tracking-widest leading-relaxed",
|
|
5866
|
-
button: "font-sans text-sm font-semibold leading-relaxed"
|
|
6148
|
+
button: "font-sans text-sm font-semibold leading-relaxed",
|
|
6149
|
+
// Monospace technical readouts (clocks, ids, metrics) and their all-caps label form.
|
|
6150
|
+
mono: "font-mono text-xs font-normal leading-normal",
|
|
6151
|
+
monoLabel: "font-mono text-xs font-bold uppercase tracking-wide leading-normal"
|
|
5867
6152
|
};
|
|
5868
6153
|
var colorStyles7 = {
|
|
5869
6154
|
primary: "text-text-primary",
|
|
@@ -6552,7 +6837,7 @@ var colorStyles8 = {
|
|
|
6552
6837
|
tertiary: "text-text-tertiary",
|
|
6553
6838
|
inherit: ""
|
|
6554
6839
|
};
|
|
6555
|
-
function formatDate(value, format, isUTC) {
|
|
6840
|
+
function formatDate(value, format, isUTC, hour12, seconds) {
|
|
6556
6841
|
const date = value instanceof Date ? value : new Date(value);
|
|
6557
6842
|
if (isNaN(date.getTime())) {
|
|
6558
6843
|
return "Invalid Date";
|
|
@@ -6602,6 +6887,12 @@ function formatDate(value, format, isUTC) {
|
|
|
6602
6887
|
if (isUTC) {
|
|
6603
6888
|
options.timeZone = "UTC";
|
|
6604
6889
|
}
|
|
6890
|
+
if (hour12 !== void 0 && (options.hour !== void 0 || options.minute !== void 0)) {
|
|
6891
|
+
options.hour12 = hour12;
|
|
6892
|
+
}
|
|
6893
|
+
if (seconds && options.hour !== void 0) {
|
|
6894
|
+
options.second = "2-digit";
|
|
6895
|
+
}
|
|
6605
6896
|
return new Intl.DateTimeFormat(void 0, options).format(date);
|
|
6606
6897
|
}
|
|
6607
6898
|
function getRelativeTime(date) {
|
|
@@ -6671,16 +6962,28 @@ function DateTime({
|
|
|
6671
6962
|
format = "datetime",
|
|
6672
6963
|
customFormat,
|
|
6673
6964
|
isUTC = false,
|
|
6965
|
+
hour12,
|
|
6966
|
+
seconds,
|
|
6967
|
+
variant,
|
|
6968
|
+
live = false,
|
|
6969
|
+
refreshMs = 1e3,
|
|
6674
6970
|
fallback = "-",
|
|
6675
6971
|
color = "inherit",
|
|
6676
6972
|
className,
|
|
6677
6973
|
...props
|
|
6678
6974
|
}) {
|
|
6679
|
-
|
|
6680
|
-
|
|
6975
|
+
const [now, setNow] = useState(() => Date.now());
|
|
6976
|
+
useEffect(() => {
|
|
6977
|
+
if (!live) return;
|
|
6978
|
+
const id = setInterval(() => setNow(Date.now()), refreshMs);
|
|
6979
|
+
return () => clearInterval(id);
|
|
6980
|
+
}, [live, refreshMs]);
|
|
6981
|
+
const effectiveValue = live ? now : value;
|
|
6982
|
+
const text = effectiveValue === null || effectiveValue === void 0 ? fallback : formatDate(effectiveValue, format, isUTC, hour12, seconds);
|
|
6983
|
+
if (variant) {
|
|
6984
|
+
return /* @__PURE__ */ jsx(Typography, { variant, color, className, ...props, children: text });
|
|
6681
6985
|
}
|
|
6682
|
-
|
|
6683
|
-
return /* @__PURE__ */ jsx(Text, { className: cn(colorStyles8[color], className), ...props, children: formattedDate });
|
|
6986
|
+
return /* @__PURE__ */ jsx(Text, { className: cn(colorStyles8[color], className), ...props, children: text });
|
|
6684
6987
|
}
|
|
6685
6988
|
function formatDateTime(value, format = "datetime", isUTC = false, fallback = "-") {
|
|
6686
6989
|
if (value === null || value === void 0) {
|
|
@@ -6816,58 +7119,6 @@ function BaseBadge({
|
|
|
6816
7119
|
}
|
|
6817
7120
|
return badge;
|
|
6818
7121
|
}
|
|
6819
|
-
|
|
6820
|
-
// src/components/custom/Workout/icons.tsx
|
|
6821
|
-
function DumbbellIcon({
|
|
6822
|
-
size = 24,
|
|
6823
|
-
color = "currentColor",
|
|
6824
|
-
fill = "none",
|
|
6825
|
-
strokeWidth = 2
|
|
6826
|
-
}) {
|
|
6827
|
-
return /* @__PURE__ */ jsxs(
|
|
6828
|
-
"svg",
|
|
6829
|
-
{
|
|
6830
|
-
width: size,
|
|
6831
|
-
height: size,
|
|
6832
|
-
viewBox: "0 0 24 24",
|
|
6833
|
-
fill,
|
|
6834
|
-
stroke: color,
|
|
6835
|
-
strokeWidth,
|
|
6836
|
-
strokeLinecap: "round",
|
|
6837
|
-
strokeLinejoin: "round",
|
|
6838
|
-
children: [
|
|
6839
|
-
/* @__PURE__ */ jsx("path", { d: "M14.4 14.4 9.6 9.6" }),
|
|
6840
|
-
/* @__PURE__ */ jsx("path", { d: "M18.657 21.485a2 2 0 1 1-2.829-2.828l-1.767 1.768a2 2 0 1 1-2.829-2.829l6.364-6.364a2 2 0 1 1 2.829 2.829l-1.768 1.767a2 2 0 1 1 2.828 2.829z" }),
|
|
6841
|
-
/* @__PURE__ */ jsx("path", { d: "m21.5 21.5-1.4-1.4" }),
|
|
6842
|
-
/* @__PURE__ */ jsx("path", { d: "M3.9 3.9 2.5 2.5" }),
|
|
6843
|
-
/* @__PURE__ */ jsx("path", { d: "M6.404 12.768a2 2 0 1 1-2.829-2.829l1.768-1.767a2 2 0 1 1-2.828-2.829l2.828-2.828a2 2 0 1 1 2.829 2.828l1.767-1.768a2 2 0 1 1 2.829 2.829z" })
|
|
6844
|
-
]
|
|
6845
|
-
}
|
|
6846
|
-
);
|
|
6847
|
-
}
|
|
6848
|
-
function StarIcon({
|
|
6849
|
-
size = 24,
|
|
6850
|
-
color = "currentColor",
|
|
6851
|
-
fill = "none",
|
|
6852
|
-
strokeWidth = 2
|
|
6853
|
-
}) {
|
|
6854
|
-
return /* @__PURE__ */ jsx(
|
|
6855
|
-
"svg",
|
|
6856
|
-
{
|
|
6857
|
-
width: size,
|
|
6858
|
-
height: size,
|
|
6859
|
-
viewBox: "0 0 24 24",
|
|
6860
|
-
fill,
|
|
6861
|
-
stroke: color,
|
|
6862
|
-
strokeWidth,
|
|
6863
|
-
strokeLinecap: "round",
|
|
6864
|
-
strokeLinejoin: "round",
|
|
6865
|
-
children: /* @__PURE__ */ jsx("path", { d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" })
|
|
6866
|
-
}
|
|
6867
|
-
);
|
|
6868
|
-
}
|
|
6869
|
-
|
|
6870
|
-
// src/components/custom/Workout/WeightBadge.tsx
|
|
6871
7122
|
function WeightBadge({
|
|
6872
7123
|
value,
|
|
6873
7124
|
unit = "lbs",
|
|
@@ -6881,7 +7132,7 @@ function WeightBadge({
|
|
|
6881
7132
|
...props
|
|
6882
7133
|
}) {
|
|
6883
7134
|
const config = baseBadgeSizeConfig[size];
|
|
6884
|
-
const textColor = isPr ? "
|
|
7135
|
+
const textColor = isPr ? getSemanticColors("dark")["brand-primary"] : "#9CA3AF";
|
|
6885
7136
|
const iconColor = textColor;
|
|
6886
7137
|
const repMaxClause = reps != null ? `${reps} rep max` : "Estimated one rep max";
|
|
6887
7138
|
const deltaLabel = delta != null ? `, ${delta >= 0 ? "+" : ""}${delta}% change` : "";
|
|
@@ -6940,7 +7191,7 @@ function WeightBadge({
|
|
|
6940
7191
|
fontFamily: '"Space Grotesk", sans-serif',
|
|
6941
7192
|
fontSize: config.fontSize,
|
|
6942
7193
|
marginLeft: 4,
|
|
6943
|
-
color: delta >= 0 ? "
|
|
7194
|
+
color: delta >= 0 ? getSemanticColors("dark")["result-improve"] : getSemanticColors("dark")["result-degrade"]
|
|
6944
7195
|
},
|
|
6945
7196
|
testID: "weight-badge-delta",
|
|
6946
7197
|
children: [
|
|
@@ -6954,6 +7205,7 @@ function WeightBadge({
|
|
|
6954
7205
|
}
|
|
6955
7206
|
);
|
|
6956
7207
|
}
|
|
7208
|
+
var BRAND_PRIMARY = getSemanticColors("dark")["brand-primary"];
|
|
6957
7209
|
var typeLabels = {
|
|
6958
7210
|
e1rm: "PR e1RM",
|
|
6959
7211
|
weight: "PR Weight",
|
|
@@ -6997,7 +7249,7 @@ function PrBadge({
|
|
|
6997
7249
|
accessibilityLabel: `Personal record: ${resolvedLabel}`,
|
|
6998
7250
|
testID: "pr-badge-star",
|
|
6999
7251
|
...props,
|
|
7000
|
-
children: /* @__PURE__ */ jsx(StarIcon, { size: 14, color:
|
|
7252
|
+
children: /* @__PURE__ */ jsx(StarIcon, { size: 14, color: BRAND_PRIMARY, fill: BRAND_PRIMARY, strokeWidth: 2 })
|
|
7001
7253
|
}
|
|
7002
7254
|
) : /* @__PURE__ */ jsx(
|
|
7003
7255
|
BaseBadge,
|
|
@@ -7011,7 +7263,7 @@ function PrBadge({
|
|
|
7011
7263
|
{
|
|
7012
7264
|
style: {
|
|
7013
7265
|
fontSize: 12,
|
|
7014
|
-
color:
|
|
7266
|
+
color: BRAND_PRIMARY,
|
|
7015
7267
|
fontWeight: "700",
|
|
7016
7268
|
fontFamily: "Inter, sans-serif"
|
|
7017
7269
|
},
|
|
@@ -7036,17 +7288,18 @@ function PrBadge({
|
|
|
7036
7288
|
}
|
|
7037
7289
|
return badge;
|
|
7038
7290
|
}
|
|
7291
|
+
var t = getSemanticColors("dark");
|
|
7039
7292
|
var solidVariantColors = {
|
|
7040
|
-
success: "
|
|
7041
|
-
warning: "
|
|
7042
|
-
error: "
|
|
7293
|
+
success: t["status-success"],
|
|
7294
|
+
warning: t["status-warning"],
|
|
7295
|
+
error: t["status-error"],
|
|
7043
7296
|
neutral: "#6B7280"
|
|
7044
7297
|
};
|
|
7045
7298
|
var ringVariantStyles = {
|
|
7046
7299
|
"on-track": {
|
|
7047
|
-
backgroundColor: "rgba(
|
|
7300
|
+
backgroundColor: "rgba(46,213,115,0.15)",
|
|
7048
7301
|
borderWidth: 1,
|
|
7049
|
-
borderColor: "rgba(
|
|
7302
|
+
borderColor: "rgba(46,213,115,0.3)"
|
|
7050
7303
|
},
|
|
7051
7304
|
deviation: {
|
|
7052
7305
|
backgroundColor: "rgba(245,158,11,0.15)",
|
|
@@ -7061,11 +7314,11 @@ var ringVariantStyles = {
|
|
|
7061
7314
|
}
|
|
7062
7315
|
};
|
|
7063
7316
|
var glowStyles = {
|
|
7064
|
-
success: { boxShadow: "0 0 4px rgba(
|
|
7317
|
+
success: { boxShadow: "0 0 4px rgba(46,213,115,0.4)" },
|
|
7065
7318
|
warning: { boxShadow: "0 0 4px rgba(245,158,11,0.4)" },
|
|
7066
7319
|
error: { boxShadow: "0 0 4px rgba(239,68,68,0.4)" },
|
|
7067
7320
|
neutral: { boxShadow: "0 0 4px rgba(107,114,128,0.4)" },
|
|
7068
|
-
"on-track": { boxShadow: "0 0 4px rgba(
|
|
7321
|
+
"on-track": { boxShadow: "0 0 4px rgba(46,213,115,0.4)" },
|
|
7069
7322
|
deviation: { boxShadow: "0 0 4px rgba(245,158,11,0.4)" },
|
|
7070
7323
|
future: { boxShadow: "0 0 4px rgba(107,114,128,0.4)" }
|
|
7071
7324
|
};
|
|
@@ -7079,8 +7332,8 @@ var iconColors2 = {
|
|
|
7079
7332
|
warning: "#6B4000",
|
|
7080
7333
|
error: "#5C1A1A",
|
|
7081
7334
|
neutral: "#D1D5DB",
|
|
7082
|
-
"on-track": "
|
|
7083
|
-
deviation: "
|
|
7335
|
+
"on-track": t["status-success"],
|
|
7336
|
+
deviation: t["status-warning"],
|
|
7084
7337
|
future: "#6B7280"
|
|
7085
7338
|
};
|
|
7086
7339
|
var sizeDimensions = {
|
|
@@ -7167,17 +7420,41 @@ var WORKOUT_TOKENS = {
|
|
|
7167
7420
|
// Canonical 4-band performance scale — the single source for BOTH the
|
|
7168
7421
|
// VelocityStrip zone bars and the SetRow RPE color (TD-03.43). The direction
|
|
7169
7422
|
// is intentionally inverted between the two consumers: for velocity, green =
|
|
7170
|
-
// fastest/best; for RPE, green = easiest.
|
|
7171
|
-
//
|
|
7172
|
-
//
|
|
7173
|
-
// scale below — they are consumed inline as a JS import rather than CSS vars.
|
|
7174
|
-
// A JS import also resolves on native RN, unlike var(--…) strings.
|
|
7423
|
+
// fastest/best; for RPE, green = easiest. This is the [0,1,2,4] subsample of
|
|
7424
|
+
// the canonical `sequentialEffort` primitive. The `orange` key is the band
|
|
7425
|
+
// label. Consumed inline (RN).
|
|
7175
7426
|
scale: {
|
|
7176
|
-
green:
|
|
7177
|
-
yellow:
|
|
7178
|
-
orange:
|
|
7179
|
-
|
|
7427
|
+
green: sequentialEffort[0],
|
|
7428
|
+
yellow: sequentialEffort[1],
|
|
7429
|
+
orange: sequentialEffort[2],
|
|
7430
|
+
// gold band
|
|
7431
|
+
red: sequentialEffort[4]
|
|
7432
|
+
},
|
|
7433
|
+
// BodyMap volume heatmap — the canonical `divergingScale` (under → optimal →
|
|
7434
|
+
// over): a true diverging shape with a light green center, cool-blue under-
|
|
7435
|
+
// trained end and warm-red over-reaching end (colorblind-robust in lightness).
|
|
7436
|
+
heatmap: {
|
|
7437
|
+
// no training data
|
|
7438
|
+
under: divergingScale[0],
|
|
7439
|
+
// below MEV
|
|
7440
|
+
maintenance: divergingScale[1],
|
|
7441
|
+
// MEV to MAV
|
|
7442
|
+
productive: divergingScale[2],
|
|
7443
|
+
// optimal center — MAV to MRV
|
|
7444
|
+
approaching: divergingScale[3],
|
|
7445
|
+
// near MRV
|
|
7446
|
+
over: divergingScale[4]
|
|
7447
|
+
// over MRV
|
|
7180
7448
|
},
|
|
7449
|
+
// Surface and border colors were removed here: those flip with the theme, so
|
|
7450
|
+
// components use the CSS custom properties (var(--color-surface-*/border-*))
|
|
7451
|
+
// directly. Only theme-independent data-viz values remain below.
|
|
7452
|
+
// Intensity bar specific — over-target tiers deepen along the red ramp.
|
|
7453
|
+
intensity: {
|
|
7454
|
+
over1: primitiveRamps.red[600],
|
|
7455
|
+
// matches status-error
|
|
7456
|
+
over2: primitiveRamps.red[700],
|
|
7457
|
+
over3: primitiveRamps.red[800]},
|
|
7181
7458
|
// Placeholder strip
|
|
7182
7459
|
placeholder: {
|
|
7183
7460
|
fill: "#3A3A3A"
|
|
@@ -7352,7 +7629,7 @@ function getLuminance(color) {
|
|
|
7352
7629
|
function getContrastText(backgroundColor) {
|
|
7353
7630
|
return getLuminance(backgroundColor) === "light" ? "#000000" : "#FFFFFF";
|
|
7354
7631
|
}
|
|
7355
|
-
var
|
|
7632
|
+
var t2 = getSemanticColors("dark");
|
|
7356
7633
|
var TEMPO_PACING = {
|
|
7357
7634
|
behindThresholdPct: 0.15,
|
|
7358
7635
|
minPhaseDurationMs: 500
|
|
@@ -7369,9 +7646,9 @@ function getTempoFillPct(elapsedMs, targetMs) {
|
|
|
7369
7646
|
}
|
|
7370
7647
|
var PHASE_ORDER = ["concentric", "hold", "eccentric"];
|
|
7371
7648
|
var PHASE_CONFIG = {
|
|
7372
|
-
concentric: { label: "Con", color:
|
|
7373
|
-
hold: { label: "Hold", color:
|
|
7374
|
-
eccentric: { label: "Ecc", color:
|
|
7649
|
+
concentric: { label: "Con", color: t2["status-success"], flex: 2 },
|
|
7650
|
+
hold: { label: "Hold", color: t2["brand-primary"], flex: 1 },
|
|
7651
|
+
eccentric: { label: "Ecc", color: t2["status-warning"], flex: 3 }
|
|
7375
7652
|
};
|
|
7376
7653
|
function TempoBar({
|
|
7377
7654
|
activePhase,
|
|
@@ -7384,7 +7661,7 @@ function TempoBar({
|
|
|
7384
7661
|
return /* @__PURE__ */ jsxs(View, { className, testID: "tempo-bar", ...props, children: [
|
|
7385
7662
|
/* @__PURE__ */ jsx(View, { style: { flexDirection: "row", marginBottom: 4 }, children: PHASE_ORDER.map((phase) => {
|
|
7386
7663
|
const config = PHASE_CONFIG[phase];
|
|
7387
|
-
return /* @__PURE__ */ jsx(View, { style: { flex: config.flex, alignItems: "center" }, children: /* @__PURE__ */ jsx(Text, { style: { fontSize: 10, color:
|
|
7664
|
+
return /* @__PURE__ */ jsx(View, { style: { flex: config.flex, alignItems: "center" }, children: /* @__PURE__ */ jsx(Text, { style: { fontSize: 10, color: t2["text-disabled"] }, children: config.label }) }, phase);
|
|
7388
7665
|
}) }),
|
|
7389
7666
|
/* @__PURE__ */ jsx(View, { style: { flexDirection: "row", gap: 2, height: 20 }, children: PHASE_ORDER.map((phase) => {
|
|
7390
7667
|
const config = PHASE_CONFIG[phase];
|
|
@@ -7421,7 +7698,7 @@ function ActiveSegment({
|
|
|
7421
7698
|
targetMs
|
|
7422
7699
|
}) {
|
|
7423
7700
|
const pacing = getTempoPacingState(phaseElapsedMs, targetMs);
|
|
7424
|
-
const barColor = pacing === "behind" ?
|
|
7701
|
+
const barColor = pacing === "behind" ? t2["status-error"] : config.color;
|
|
7425
7702
|
const fillPct = getTempoFillPct(phaseElapsedMs, targetMs);
|
|
7426
7703
|
const label = targetMs ? `${formatDuration(phaseElapsedMs)} / ${formatDuration(targetMs)}` : formatDuration(phaseElapsedMs);
|
|
7427
7704
|
return /* @__PURE__ */ jsxs(View, { style: { height: "100%", position: "relative" }, testID: `tempo-segment-active-${config.label}`, children: [
|
|
@@ -7485,15 +7762,14 @@ function formatDuration(ms) {
|
|
|
7485
7762
|
}
|
|
7486
7763
|
|
|
7487
7764
|
// src/components/custom/Workout/TempoDisplay.tsx
|
|
7765
|
+
var t3 = getSemanticColors("dark");
|
|
7488
7766
|
var INTER = "Inter, sans-serif";
|
|
7489
7767
|
var TEXT_TERTIARY = "#6B7280";
|
|
7490
|
-
var STATUS_ERROR = "
|
|
7768
|
+
var STATUS_ERROR = t3["status-error"];
|
|
7491
7769
|
var phaseColors = {
|
|
7492
|
-
eccentric: "
|
|
7493
|
-
// status-warning (amber)
|
|
7770
|
+
eccentric: t3["status-warning"],
|
|
7494
7771
|
pauseBottom: TEXT_TERTIARY,
|
|
7495
|
-
concentric: "
|
|
7496
|
-
// status-success (teal)
|
|
7772
|
+
concentric: t3["status-success"],
|
|
7497
7773
|
pauseTop: TEXT_TERTIARY,
|
|
7498
7774
|
dash: TEXT_TERTIARY
|
|
7499
7775
|
};
|
|
@@ -7758,12 +8034,13 @@ function TempoDisplay({
|
|
|
7758
8034
|
}
|
|
7759
8035
|
);
|
|
7760
8036
|
}
|
|
8037
|
+
var t4 = getSemanticColors("dark");
|
|
7761
8038
|
function getDotColor(deviation) {
|
|
7762
8039
|
const abs = Math.abs(deviation);
|
|
7763
|
-
if (deviation < -0.3) return "
|
|
8040
|
+
if (deviation < -0.3) return t4["status-success"];
|
|
7764
8041
|
if (abs <= 0.3) return "#6B7280";
|
|
7765
|
-
if (abs <= 0.7) return "
|
|
7766
|
-
return "
|
|
8042
|
+
if (abs <= 0.7) return t4["status-warning"];
|
|
8043
|
+
return t4["status-error"];
|
|
7767
8044
|
}
|
|
7768
8045
|
function getDeviationDescription(deviation) {
|
|
7769
8046
|
if (deviation < -0.3) return "lighter than planned";
|
|
@@ -7805,7 +8082,7 @@ function DeviationBar({
|
|
|
7805
8082
|
width: resolvedWidth,
|
|
7806
8083
|
borderRadius: 3,
|
|
7807
8084
|
// react-native-web renders backgroundImage at runtime; not in RN ViewStyle types
|
|
7808
|
-
backgroundImage: "linear-gradient(90deg, rgba(
|
|
8085
|
+
backgroundImage: "linear-gradient(90deg, rgba(46,213,115,0.25) 0%, rgba(107,114,128,0.15) 50%, rgba(249,180,21,0.25) 100%)"
|
|
7809
8086
|
}
|
|
7810
8087
|
}
|
|
7811
8088
|
),
|
|
@@ -7831,23 +8108,24 @@ function DeviationBar({
|
|
|
7831
8108
|
}
|
|
7832
8109
|
);
|
|
7833
8110
|
}
|
|
8111
|
+
var t5 = getSemanticColors("dark");
|
|
7834
8112
|
var TRACK_BG = "#333333";
|
|
7835
8113
|
var LABEL_COLOR = "#6B7280";
|
|
7836
8114
|
var TARGET_LINE_COLOR = "rgba(33, 150, 243, 0.5)";
|
|
7837
8115
|
var AT_TARGET_GLOW = "0 0 5px 1px rgba(33, 150, 243, 0.35), 0 0 10px 3px rgba(33, 150, 243, 0.15)";
|
|
7838
8116
|
var ZONE = {
|
|
7839
|
-
building: "
|
|
7840
|
-
//
|
|
7841
|
-
approaching: "
|
|
7842
|
-
//
|
|
7843
|
-
target: "
|
|
7844
|
-
//
|
|
7845
|
-
over1: "
|
|
7846
|
-
//
|
|
7847
|
-
over2:
|
|
7848
|
-
//
|
|
7849
|
-
over3:
|
|
7850
|
-
//
|
|
8117
|
+
building: t5["status-success"],
|
|
8118
|
+
// below target ramp-up
|
|
8119
|
+
approaching: t5["status-warning"],
|
|
8120
|
+
// nearing target
|
|
8121
|
+
target: t5["brand-primary"],
|
|
8122
|
+
// exactly at target
|
|
8123
|
+
over1: t5["status-error"],
|
|
8124
|
+
// mild over-target
|
|
8125
|
+
over2: WORKOUT_TOKENS.intensity.over2,
|
|
8126
|
+
// moderate over-target
|
|
8127
|
+
over3: WORKOUT_TOKENS.intensity.over3
|
|
8128
|
+
// severe over-target
|
|
7851
8129
|
};
|
|
7852
8130
|
var BULGE_SIZE = { 1: 8, 2: 10, 3: 11 };
|
|
7853
8131
|
function zoneForPct(pct) {
|
|
@@ -8003,29 +8281,38 @@ function IntensityBar({
|
|
|
8003
8281
|
}
|
|
8004
8282
|
);
|
|
8005
8283
|
}
|
|
8284
|
+
|
|
8285
|
+
// src/theme/extracted-colors-dataviz.ts
|
|
8286
|
+
var DATAVIZ_CATEGORICAL_PALETTE = categoricalPalette.default;
|
|
8287
|
+
var MESO_ACCENT_GRADIENT_DARK = primitiveRamps.orange[500];
|
|
8288
|
+
var MESO_ACCENT_GRADIENT_LIGHT = primitiveRamps.orange[300];
|
|
8289
|
+
var WORKOUT_PILL_DELOAD = primitiveRamps.magenta[600];
|
|
8290
|
+
|
|
8291
|
+
// src/components/custom/Workout/WorkoutPill.tsx
|
|
8292
|
+
var t6 = getSemanticColors("dark");
|
|
8006
8293
|
var statusBgColors = {
|
|
8007
|
-
completed: "rgba(
|
|
8294
|
+
completed: "rgba(46,213,115,0.15)",
|
|
8008
8295
|
current: "rgba(255,121,0,0.15)",
|
|
8009
8296
|
next: "transparent",
|
|
8010
8297
|
upcoming: "#1C1C1C",
|
|
8011
8298
|
missed: "rgba(209,67,67,0.1)",
|
|
8012
|
-
deload: "rgba(
|
|
8299
|
+
deload: "rgba(186,41,150,0.15)"
|
|
8013
8300
|
};
|
|
8014
8301
|
var statusBorderStyles = {
|
|
8015
|
-
completed: { borderWidth: 1, borderColor: "rgba(
|
|
8302
|
+
completed: { borderWidth: 1, borderColor: "rgba(46,213,115,0.3)" },
|
|
8016
8303
|
current: { borderWidth: 1, borderColor: "rgba(255,121,0,0.3)" },
|
|
8017
8304
|
next: { borderWidth: 1, borderColor: "rgba(255,121,0,0.4)" },
|
|
8018
8305
|
upcoming: { borderWidth: 1, borderColor: "#1F1F1F" },
|
|
8019
8306
|
missed: { borderWidth: 1, borderColor: "rgba(209,67,67,0.25)" },
|
|
8020
|
-
deload: { borderWidth: 1, borderColor: "rgba(
|
|
8307
|
+
deload: { borderWidth: 1, borderColor: "rgba(186,41,150,0.3)" }
|
|
8021
8308
|
};
|
|
8022
8309
|
var textColors = {
|
|
8023
|
-
completed: "
|
|
8024
|
-
current: "
|
|
8025
|
-
next: "
|
|
8310
|
+
completed: t6["status-success"],
|
|
8311
|
+
current: t6["brand-primary"],
|
|
8312
|
+
next: t6["brand-primary"],
|
|
8026
8313
|
upcoming: "#6B7280",
|
|
8027
8314
|
missed: "rgba(209,67,67,0.7)",
|
|
8028
|
-
deload:
|
|
8315
|
+
deload: WORKOUT_PILL_DELOAD
|
|
8029
8316
|
};
|
|
8030
8317
|
function usePulse(enabled) {
|
|
8031
8318
|
const [opacity] = useState(() => new Animated.Value(1));
|
|
@@ -8500,12 +8787,13 @@ function VelocityStrip({
|
|
|
8500
8787
|
}
|
|
8501
8788
|
return stripContent;
|
|
8502
8789
|
}
|
|
8790
|
+
var t7 = getSemanticColors("dark");
|
|
8503
8791
|
var dotColorMap = {
|
|
8504
8792
|
untrained: "#2C2C2C",
|
|
8505
|
-
behind: "
|
|
8506
|
-
ontrack: "
|
|
8507
|
-
target: "
|
|
8508
|
-
over: "
|
|
8793
|
+
behind: t7["brand-secondary"],
|
|
8794
|
+
ontrack: t7["status-success"],
|
|
8795
|
+
target: t7["brand-primary"],
|
|
8796
|
+
over: t7["status-error"]
|
|
8509
8797
|
};
|
|
8510
8798
|
function MuscleGroupChip({
|
|
8511
8799
|
name,
|
|
@@ -8577,7 +8865,7 @@ function MuscleGroupChip({
|
|
|
8577
8865
|
}
|
|
8578
8866
|
return content;
|
|
8579
8867
|
}
|
|
8580
|
-
var
|
|
8868
|
+
var BRAND_PRIMARY2 = getSemanticColors("dark")["brand-primary"];
|
|
8581
8869
|
function normalizeData(data, height) {
|
|
8582
8870
|
if (data.length === 0) return [];
|
|
8583
8871
|
const min = Math.min(...data);
|
|
@@ -8614,7 +8902,7 @@ function Sparkline({
|
|
|
8614
8902
|
}
|
|
8615
8903
|
);
|
|
8616
8904
|
}
|
|
8617
|
-
const resolvedColor = color ??
|
|
8905
|
+
const resolvedColor = color ?? BRAND_PRIMARY2;
|
|
8618
8906
|
const normalized = normalizeData(data, height);
|
|
8619
8907
|
const stepX = data.length > 1 ? width / (data.length - 1) : 0;
|
|
8620
8908
|
const dotSize = 3;
|
|
@@ -8793,7 +9081,7 @@ function SetRow({
|
|
|
8793
9081
|
fontSize: 10,
|
|
8794
9082
|
fontWeight: "700",
|
|
8795
9083
|
fontFamily: "Inter, sans-serif",
|
|
8796
|
-
color:
|
|
9084
|
+
color: WORKOUT_TOKENS.scale.orange,
|
|
8797
9085
|
backgroundColor: "rgba(255,165,2,0.12)",
|
|
8798
9086
|
paddingVertical: 1,
|
|
8799
9087
|
paddingHorizontal: 5,
|
|
@@ -8959,7 +9247,7 @@ function SetRow({
|
|
|
8959
9247
|
}
|
|
8960
9248
|
);
|
|
8961
9249
|
}
|
|
8962
|
-
var
|
|
9250
|
+
var BRAND_PRIMARY3 = getSemanticColors("dark")["brand-primary"];
|
|
8963
9251
|
var INPUT_CLASSNAME = "bg-surface-raised border-border-strong text-text-primary";
|
|
8964
9252
|
var inputStyle = {
|
|
8965
9253
|
fontSize: 14,
|
|
@@ -9088,7 +9376,7 @@ function InputBar({
|
|
|
9088
9376
|
onPress: onRecord,
|
|
9089
9377
|
disabled: !canRecord,
|
|
9090
9378
|
style: ({ pressed }) => ({
|
|
9091
|
-
backgroundColor:
|
|
9379
|
+
backgroundColor: BRAND_PRIMARY3,
|
|
9092
9380
|
borderRadius: 8,
|
|
9093
9381
|
paddingVertical: 10,
|
|
9094
9382
|
paddingHorizontal: 16,
|
|
@@ -9115,7 +9403,7 @@ function InputBar({
|
|
|
9115
9403
|
}
|
|
9116
9404
|
);
|
|
9117
9405
|
}
|
|
9118
|
-
var
|
|
9406
|
+
var BRAND_PRIMARY4 = getSemanticColors("dark")["brand-primary"];
|
|
9119
9407
|
function RestTimer({
|
|
9120
9408
|
totalSeconds,
|
|
9121
9409
|
elapsedMs,
|
|
@@ -9221,7 +9509,7 @@ function RestTimer({
|
|
|
9221
9509
|
{
|
|
9222
9510
|
style: {
|
|
9223
9511
|
height: "100%",
|
|
9224
|
-
backgroundColor:
|
|
9512
|
+
backgroundColor: BRAND_PRIMARY4,
|
|
9225
9513
|
borderRadius: 2,
|
|
9226
9514
|
width: `${progressPct}%`
|
|
9227
9515
|
},
|
|
@@ -9278,7 +9566,7 @@ function RestTimer({
|
|
|
9278
9566
|
fontSize: 11,
|
|
9279
9567
|
fontFamily: "Inter, sans-serif",
|
|
9280
9568
|
fontWeight: "600",
|
|
9281
|
-
color:
|
|
9569
|
+
color: BRAND_PRIMARY4
|
|
9282
9570
|
},
|
|
9283
9571
|
children: "Skip"
|
|
9284
9572
|
}
|
|
@@ -9671,7 +9959,7 @@ function ExerciseCard(props) {
|
|
|
9671
9959
|
}
|
|
9672
9960
|
var DEFAULTS = {
|
|
9673
9961
|
label: "SS",
|
|
9674
|
-
color: "
|
|
9962
|
+
color: getSemanticColors("dark")["brand-primary"],
|
|
9675
9963
|
bgBase: "#101010"
|
|
9676
9964
|
};
|
|
9677
9965
|
function SupersetWrapper({
|
|
@@ -9722,9 +10010,9 @@ function SupersetWrapper({
|
|
|
9722
10010
|
}
|
|
9723
10011
|
);
|
|
9724
10012
|
}
|
|
9725
|
-
var
|
|
10013
|
+
var BRAND_PRIMARY5 = getSemanticColors("dark")["brand-primary"];
|
|
9726
10014
|
var segmentBgColors = {
|
|
9727
|
-
completed: "rgba(
|
|
10015
|
+
completed: "rgba(46,213,115,0.3)",
|
|
9728
10016
|
current: "rgba(255,121,0,0.5)",
|
|
9729
10017
|
upcoming: "rgba(255,255,255,0.06)"
|
|
9730
10018
|
};
|
|
@@ -9774,7 +10062,7 @@ function MesoSegment({ meso, isActive, onPress }) {
|
|
|
9774
10062
|
},
|
|
9775
10063
|
isActive ? {
|
|
9776
10064
|
borderWidth: 2,
|
|
9777
|
-
borderColor:
|
|
10065
|
+
borderColor: BRAND_PRIMARY5,
|
|
9778
10066
|
transform: [{ scale: 1.02 }, { scale: pressScale }]
|
|
9779
10067
|
} : void 0
|
|
9780
10068
|
],
|
|
@@ -9788,7 +10076,7 @@ function MesoSegment({ meso, isActive, onPress }) {
|
|
|
9788
10076
|
top: 0,
|
|
9789
10077
|
bottom: 0,
|
|
9790
10078
|
width: `${progress * 100}%`,
|
|
9791
|
-
backgroundColor:
|
|
10079
|
+
backgroundColor: BRAND_PRIMARY5
|
|
9792
10080
|
},
|
|
9793
10081
|
testID: `meso-segment-fill-${meso.id}`
|
|
9794
10082
|
}
|
|
@@ -9829,7 +10117,7 @@ function MesoProgressBar({
|
|
|
9829
10117
|
}
|
|
9830
10118
|
);
|
|
9831
10119
|
}
|
|
9832
|
-
var
|
|
10120
|
+
var BRAND_PRIMARY6 = getSemanticColors("dark")["brand-primary"];
|
|
9833
10121
|
function WeekRow({
|
|
9834
10122
|
weekNumber,
|
|
9835
10123
|
totalWeeks,
|
|
@@ -9849,12 +10137,12 @@ function WeekRow({
|
|
|
9849
10137
|
gap: 12
|
|
9850
10138
|
};
|
|
9851
10139
|
if (isDeload) {
|
|
9852
|
-
rowStyle.backgroundColor = "rgba(
|
|
10140
|
+
rowStyle.backgroundColor = "rgba(186,41,150,0.06)";
|
|
9853
10141
|
}
|
|
9854
10142
|
if (isCurrent) {
|
|
9855
10143
|
rowStyle.backgroundColor = "rgba(255,121,0,0.04)";
|
|
9856
10144
|
rowStyle.borderLeftWidth = 2;
|
|
9857
|
-
rowStyle.borderLeftColor =
|
|
10145
|
+
rowStyle.borderLeftColor = BRAND_PRIMARY6;
|
|
9858
10146
|
}
|
|
9859
10147
|
return /* @__PURE__ */ jsxs(
|
|
9860
10148
|
View,
|
|
@@ -9878,7 +10166,7 @@ function WeekRow({
|
|
|
9878
10166
|
width: 6,
|
|
9879
10167
|
height: 6,
|
|
9880
10168
|
borderRadius: 3,
|
|
9881
|
-
backgroundColor:
|
|
10169
|
+
backgroundColor: BRAND_PRIMARY6
|
|
9882
10170
|
},
|
|
9883
10171
|
accessibilityElementsHidden: true,
|
|
9884
10172
|
testID: "week-row-current-dot"
|
|
@@ -9892,7 +10180,7 @@ function WeekRow({
|
|
|
9892
10180
|
fontSize: 13,
|
|
9893
10181
|
fontWeight: "700",
|
|
9894
10182
|
fontFamily: "Inter, sans-serif",
|
|
9895
|
-
color: isCurrent ?
|
|
10183
|
+
color: isCurrent ? BRAND_PRIMARY6 : void 0
|
|
9896
10184
|
},
|
|
9897
10185
|
accessibilityElementsHidden: true,
|
|
9898
10186
|
children: `W${weekNumber}`
|
|
@@ -9931,9 +10219,10 @@ function WeekRow({
|
|
|
9931
10219
|
}
|
|
9932
10220
|
);
|
|
9933
10221
|
}
|
|
10222
|
+
var t8 = getSemanticColors("dark");
|
|
9934
10223
|
var COLORS = {
|
|
9935
|
-
statusSuccess: "
|
|
9936
|
-
brandPrimary: "
|
|
10224
|
+
statusSuccess: t8["status-success"],
|
|
10225
|
+
brandPrimary: t8["brand-primary"],
|
|
9937
10226
|
borderDefault: "#1F1F1F",
|
|
9938
10227
|
brandPrimarySubtle: "rgba(255,121,0,0.06)"
|
|
9939
10228
|
};
|
|
@@ -10075,11 +10364,11 @@ function WorkoutCard({
|
|
|
10075
10364
|
}
|
|
10076
10365
|
);
|
|
10077
10366
|
}
|
|
10078
|
-
var
|
|
10079
|
-
var BRAND_PRIMARY_DARK =
|
|
10080
|
-
var BRAND_PRIMARY_LIGHT =
|
|
10367
|
+
var BRAND_PRIMARY7 = getSemanticColors("dark")["brand-primary"];
|
|
10368
|
+
var BRAND_PRIMARY_DARK = MESO_ACCENT_GRADIENT_DARK;
|
|
10369
|
+
var BRAND_PRIMARY_LIGHT = MESO_ACCENT_GRADIENT_LIGHT;
|
|
10081
10370
|
var BORDER_DEFAULT = "#1F1F1F";
|
|
10082
|
-
var ACCENT_STOPS = [BRAND_PRIMARY_DARK,
|
|
10371
|
+
var ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY7, BRAND_PRIMARY_LIGHT];
|
|
10083
10372
|
function heatmapColor(percentage) {
|
|
10084
10373
|
const clamped = Math.max(0, Math.min(100, percentage));
|
|
10085
10374
|
const opacity = 0.12 + clamped / 100 * 0.78;
|
|
@@ -10114,7 +10403,7 @@ function MesoCard({
|
|
|
10114
10403
|
}, [highlighted, highlight]);
|
|
10115
10404
|
const borderColor = highlight.interpolate({
|
|
10116
10405
|
inputRange: [0, 1],
|
|
10117
|
-
outputRange: [BORDER_DEFAULT,
|
|
10406
|
+
outputRange: [BORDER_DEFAULT, BRAND_PRIMARY7]
|
|
10118
10407
|
});
|
|
10119
10408
|
const header = /* @__PURE__ */ jsxs(View, { style: { paddingHorizontal: 14, paddingTop: 12, paddingBottom: 10 }, testID: "meso-card-body", children: [
|
|
10120
10409
|
/* @__PURE__ */ jsxs(View, { className: "flex-row items-center", style: { gap: 8 }, testID: "meso-card-header", children: [
|
|
@@ -10174,7 +10463,7 @@ function MesoCard({
|
|
|
10174
10463
|
{
|
|
10175
10464
|
variant: "outline",
|
|
10176
10465
|
elevation: 2,
|
|
10177
|
-
borderColor: highlighted ?
|
|
10466
|
+
borderColor: highlighted ? BRAND_PRIMARY7 : BORDER_DEFAULT,
|
|
10178
10467
|
className,
|
|
10179
10468
|
style: [
|
|
10180
10469
|
{ borderColor },
|
|
@@ -10231,9 +10520,9 @@ function MesoCard({
|
|
|
10231
10520
|
}
|
|
10232
10521
|
) });
|
|
10233
10522
|
}
|
|
10234
|
-
var
|
|
10235
|
-
var RECENT_BORDER = "rgba(
|
|
10236
|
-
var RECENT_GLOW = "0 0 12px rgba(
|
|
10523
|
+
var BRAND_PRIMARY8 = getSemanticColors("dark")["brand-primary"];
|
|
10524
|
+
var RECENT_BORDER = "rgba(249,180,21,0.3)";
|
|
10525
|
+
var RECENT_GLOW = "0 0 12px rgba(249,180,21,0.06)";
|
|
10237
10526
|
var BORDER_DEFAULT2 = resolveColor("border-default");
|
|
10238
10527
|
var TYPE_LABELS = {
|
|
10239
10528
|
e1rm: "e1RM",
|
|
@@ -10273,7 +10562,7 @@ function PrRecordRow({ record, index }) {
|
|
|
10273
10562
|
},
|
|
10274
10563
|
testID: `pr-history-modal-record-${index}`,
|
|
10275
10564
|
children: [
|
|
10276
|
-
/* @__PURE__ */ jsx(StarIcon, { size: 16, color:
|
|
10565
|
+
/* @__PURE__ */ jsx(StarIcon, { size: 16, color: BRAND_PRIMARY8, fill: BRAND_PRIMARY8, strokeWidth: 2 }),
|
|
10277
10566
|
/* @__PURE__ */ jsx(
|
|
10278
10567
|
Text,
|
|
10279
10568
|
{
|
|
@@ -10417,11 +10706,12 @@ function PrHistoryModal({
|
|
|
10417
10706
|
}
|
|
10418
10707
|
);
|
|
10419
10708
|
}
|
|
10420
|
-
var
|
|
10709
|
+
var t9 = getSemanticColors("dark");
|
|
10710
|
+
var BRAND_PRIMARY9 = t9["brand-primary"];
|
|
10421
10711
|
var BRAND_PRIMARY_SUBTLE = "rgba(255,121,0,0.12)";
|
|
10422
|
-
var STATUS_SUCCESS = "
|
|
10423
|
-
var STATUS_WARNING = "
|
|
10424
|
-
var STATUS_ERROR2 = "
|
|
10712
|
+
var STATUS_SUCCESS = t9["status-success"];
|
|
10713
|
+
var STATUS_WARNING = t9["status-warning"];
|
|
10714
|
+
var STATUS_ERROR2 = t9["status-error"];
|
|
10425
10715
|
var EMOJI_SETS = {
|
|
10426
10716
|
sleep: ["\u{1F634}", "\u{1F610}", "\u{1F642}", "\u{1F60A}", "\u{1F929}"],
|
|
10427
10717
|
soreness: ["\u{1F635}", "\u{1F623}", "\u{1F610}", "\u{1F642}", "\u{1F4AA}"],
|
|
@@ -10485,7 +10775,7 @@ function EmojiSlider({ factor }) {
|
|
|
10485
10775
|
paddingVertical: 8,
|
|
10486
10776
|
borderRadius: 8,
|
|
10487
10777
|
borderWidth: 1,
|
|
10488
|
-
borderColor: selected ?
|
|
10778
|
+
borderColor: selected ? BRAND_PRIMARY9 : void 0,
|
|
10489
10779
|
backgroundColor: selected ? BRAND_PRIMARY_SUBTLE : void 0,
|
|
10490
10780
|
opacity: selected ? 1 : pressed ? 0.8 : 0.55,
|
|
10491
10781
|
transform: [{ scale: selected ? 1.06 : 1 }]
|
|
@@ -10601,7 +10891,7 @@ function ReadinessCheck({
|
|
|
10601
10891
|
marginTop: 16,
|
|
10602
10892
|
width: "100%",
|
|
10603
10893
|
alignItems: "center",
|
|
10604
|
-
backgroundColor:
|
|
10894
|
+
backgroundColor: BRAND_PRIMARY9,
|
|
10605
10895
|
borderRadius: 8,
|
|
10606
10896
|
paddingVertical: 12,
|
|
10607
10897
|
opacity: pressed ? 0.8 : 1
|
|
@@ -10611,18 +10901,19 @@ function ReadinessCheck({
|
|
|
10611
10901
|
)
|
|
10612
10902
|
] }) });
|
|
10613
10903
|
}
|
|
10614
|
-
var
|
|
10615
|
-
var
|
|
10616
|
-
var
|
|
10617
|
-
var
|
|
10618
|
-
var
|
|
10619
|
-
var
|
|
10620
|
-
var
|
|
10904
|
+
var t10 = getSemanticColors("dark");
|
|
10905
|
+
var BRAND_PRIMARY10 = t10["brand-primary"];
|
|
10906
|
+
var BRAND_PRIMARY_DARK2 = MESO_ACCENT_GRADIENT_DARK;
|
|
10907
|
+
var BRAND_PRIMARY_LIGHT2 = MESO_ACCENT_GRADIENT_LIGHT;
|
|
10908
|
+
var SUCCESS = t10["status-success"];
|
|
10909
|
+
var WARNING = t10["status-warning"];
|
|
10910
|
+
var ERROR = t10["status-error"];
|
|
10911
|
+
var ACCENT_STOPS2 = [BRAND_PRIMARY_DARK2, BRAND_PRIMARY10, BRAND_PRIMARY_LIGHT2];
|
|
10621
10912
|
var CARD_GRADIENT = `linear-gradient(135deg, ${resolveColor("surface-elevated")} 0%, ${resolveColor("surface-raised")} 100%)`;
|
|
10622
|
-
var GAUGE_GRADIENT = "linear-gradient(90deg, rgba(
|
|
10913
|
+
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%)";
|
|
10623
10914
|
var STATUS_VARIANTS = {
|
|
10624
|
-
success: { bg: "rgba(
|
|
10625
|
-
warning: { bg: "rgba(
|
|
10915
|
+
success: { bg: "rgba(46,213,115,0.15)", border: "rgba(46,213,115,0.3)", text: SUCCESS },
|
|
10916
|
+
warning: { bg: "rgba(249,180,21,0.15)", border: "rgba(249,180,21,0.3)", text: WARNING },
|
|
10626
10917
|
error: { bg: "rgba(209,67,67,0.15)", border: "rgba(209,67,67,0.25)", text: ERROR }
|
|
10627
10918
|
};
|
|
10628
10919
|
function clamp01(value) {
|
|
@@ -10914,9 +11205,9 @@ function MesoStatusCard({
|
|
|
10914
11205
|
View,
|
|
10915
11206
|
{
|
|
10916
11207
|
style: {
|
|
10917
|
-
backgroundColor: "rgba(
|
|
11208
|
+
backgroundColor: "rgba(249,180,21,0.06)",
|
|
10918
11209
|
borderWidth: 1,
|
|
10919
|
-
borderColor: "rgba(
|
|
11210
|
+
borderColor: "rgba(249,180,21,0.15)",
|
|
10920
11211
|
borderRadius: 8,
|
|
10921
11212
|
paddingVertical: 10,
|
|
10922
11213
|
paddingHorizontal: 12
|
|
@@ -10942,9 +11233,9 @@ function MesoStatusCard({
|
|
|
10942
11233
|
className: "flex-row items-center",
|
|
10943
11234
|
style: {
|
|
10944
11235
|
gap: 8,
|
|
10945
|
-
backgroundColor: "rgba(
|
|
11236
|
+
backgroundColor: "rgba(46,213,115,0.06)",
|
|
10946
11237
|
borderWidth: 1,
|
|
10947
|
-
borderColor: "rgba(
|
|
11238
|
+
borderColor: "rgba(46,213,115,0.2)",
|
|
10948
11239
|
borderRadius: 8,
|
|
10949
11240
|
paddingVertical: 10,
|
|
10950
11241
|
paddingHorizontal: 12
|
|
@@ -10973,21 +11264,22 @@ function MesoStatusCard({
|
|
|
10973
11264
|
}
|
|
10974
11265
|
);
|
|
10975
11266
|
}
|
|
10976
|
-
var
|
|
11267
|
+
var sem = getSemanticColors("dark");
|
|
11268
|
+
var BRAND_PRIMARY11 = sem["brand-primary"];
|
|
10977
11269
|
var PROJECTION_LINE_COLOR = resolveColor("text-tertiary");
|
|
10978
|
-
var STATUS_SUCCESS2 = "
|
|
10979
|
-
var STATUS_ERROR3 = "
|
|
10980
|
-
var STATUS_WARNING2 = "
|
|
11270
|
+
var STATUS_SUCCESS2 = sem["status-success"];
|
|
11271
|
+
var STATUS_ERROR3 = sem["status-error"];
|
|
11272
|
+
var STATUS_WARNING2 = sem["status-warning"];
|
|
10981
11273
|
var GRID_LINE = "rgba(255,255,255,0.06)";
|
|
10982
|
-
var SUCCESS_PILL_BG = "rgba(
|
|
10983
|
-
var SUCCESS_PILL_BORDER = "rgba(
|
|
11274
|
+
var SUCCESS_PILL_BG = "rgba(46,213,115,0.10)";
|
|
11275
|
+
var SUCCESS_PILL_BORDER = "rgba(46,213,115,0.20)";
|
|
10984
11276
|
var ERROR_PILL_BG = "rgba(209,67,67,0.10)";
|
|
10985
11277
|
var ERROR_PILL_BORDER = "rgba(209,67,67,0.20)";
|
|
10986
11278
|
var PLOT_LEFT = 26;
|
|
10987
11279
|
var TOOLTIP_WIDTH = 124;
|
|
10988
11280
|
function timeOf(dateStr) {
|
|
10989
|
-
const
|
|
10990
|
-
return Number.isNaN(
|
|
11281
|
+
const t12 = Date.parse(dateStr);
|
|
11282
|
+
return Number.isNaN(t12) ? 0 : t12;
|
|
10991
11283
|
}
|
|
10992
11284
|
function formatValue(value) {
|
|
10993
11285
|
return `${Math.round(value)}`;
|
|
@@ -11264,7 +11556,7 @@ function StrengthTrendChart({
|
|
|
11264
11556
|
ChartLine,
|
|
11265
11557
|
{
|
|
11266
11558
|
coords: geometry.actual,
|
|
11267
|
-
color:
|
|
11559
|
+
color: BRAND_PRIMARY11,
|
|
11268
11560
|
strokeWidth: 2.5,
|
|
11269
11561
|
testID: "strength-trend-chart-actual-segment"
|
|
11270
11562
|
}
|
|
@@ -11317,7 +11609,7 @@ function StrengthTrendChart({
|
|
|
11317
11609
|
width: 8,
|
|
11318
11610
|
height: 8,
|
|
11319
11611
|
borderRadius: 1,
|
|
11320
|
-
backgroundColor:
|
|
11612
|
+
backgroundColor: BRAND_PRIMARY11
|
|
11321
11613
|
}
|
|
11322
11614
|
},
|
|
11323
11615
|
`point-${c.index}`
|
|
@@ -11447,7 +11739,7 @@ function StrengthTrendChart({
|
|
|
11447
11739
|
testID: "strength-trend-chart-legend",
|
|
11448
11740
|
children: [
|
|
11449
11741
|
/* @__PURE__ */ jsxs(View, { className: "flex-row items-center", style: { gap: 5 }, children: [
|
|
11450
|
-
/* @__PURE__ */ jsx(View, { style: { width: 14, height: 2.5, borderRadius: 1.5, backgroundColor:
|
|
11742
|
+
/* @__PURE__ */ jsx(View, { style: { width: 14, height: 2.5, borderRadius: 1.5, backgroundColor: BRAND_PRIMARY11 } }),
|
|
11451
11743
|
/* @__PURE__ */ jsx(Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "Actual" })
|
|
11452
11744
|
] }),
|
|
11453
11745
|
/* @__PURE__ */ jsxs(View, { className: "flex-row items-center", style: { gap: 5 }, children: [
|
|
@@ -11476,13 +11768,14 @@ function StrengthTrendChart({
|
|
|
11476
11768
|
}
|
|
11477
11769
|
);
|
|
11478
11770
|
}
|
|
11479
|
-
var
|
|
11480
|
-
var
|
|
11481
|
-
var
|
|
11771
|
+
var t11 = getSemanticColors("dark");
|
|
11772
|
+
var STATUS_SUCCESS3 = t11["status-success"];
|
|
11773
|
+
var STATUS_WARNING3 = t11["status-warning"];
|
|
11774
|
+
var STATUS_INFO = t11["status-info"];
|
|
11482
11775
|
var DOT_BORDER = "#F3F4F6";
|
|
11483
|
-
var BAND_FILL = "rgba(
|
|
11484
|
-
var BAND_EDGE = "rgba(
|
|
11485
|
-
var PROJECTION_FILL = "rgba(
|
|
11776
|
+
var BAND_FILL = "rgba(46,213,115,0.1)";
|
|
11777
|
+
var BAND_EDGE = "rgba(46,213,115,0.45)";
|
|
11778
|
+
var PROJECTION_FILL = "rgba(46,213,115,0.05)";
|
|
11486
11779
|
var PADDING_LEFT = 28;
|
|
11487
11780
|
var PADDING_RIGHT = 10;
|
|
11488
11781
|
var PADDING_TOP = 8;
|
|
@@ -11521,8 +11814,8 @@ function interpEdge(pixels, x, key) {
|
|
|
11521
11814
|
const a = pixels[i];
|
|
11522
11815
|
const b = pixels[i + 1];
|
|
11523
11816
|
if (x >= a.x && x <= b.x) {
|
|
11524
|
-
const
|
|
11525
|
-
return a[key] +
|
|
11817
|
+
const t12 = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x);
|
|
11818
|
+
return a[key] + t12 * (b[key] - a[key]);
|
|
11526
11819
|
}
|
|
11527
11820
|
}
|
|
11528
11821
|
return pixels[pixels.length - 1][key];
|
|
@@ -11852,16 +12145,7 @@ function CapacityBandChart({
|
|
|
11852
12145
|
}
|
|
11853
12146
|
);
|
|
11854
12147
|
}
|
|
11855
|
-
var PALETTE =
|
|
11856
|
-
"#5B9BD5",
|
|
11857
|
-
"#14B8A6",
|
|
11858
|
-
"#F4A736",
|
|
11859
|
-
"#F83030",
|
|
11860
|
-
"#823CA0",
|
|
11861
|
-
"#D4A520",
|
|
11862
|
-
"#406D87",
|
|
11863
|
-
"#43C6B7"
|
|
11864
|
-
];
|
|
12148
|
+
var PALETTE = DATAVIZ_CATEGORICAL_PALETTE;
|
|
11865
12149
|
function scaleValue(v, scale) {
|
|
11866
12150
|
if (v <= 0) return 0;
|
|
11867
12151
|
if (scale === "sqrt") return Math.sqrt(v);
|
|
@@ -11977,16 +12261,7 @@ function Treemap({
|
|
|
11977
12261
|
);
|
|
11978
12262
|
}) });
|
|
11979
12263
|
}
|
|
11980
|
-
var PALETTE2 =
|
|
11981
|
-
"#5B9BD5",
|
|
11982
|
-
"#14B8A6",
|
|
11983
|
-
"#F4A736",
|
|
11984
|
-
"#F83030",
|
|
11985
|
-
"#823CA0",
|
|
11986
|
-
"#D4A520",
|
|
11987
|
-
"#406D87",
|
|
11988
|
-
"#43C6B7"
|
|
11989
|
-
];
|
|
12264
|
+
var PALETTE2 = DATAVIZ_CATEGORICAL_PALETTE;
|
|
11990
12265
|
var GRID_LINE2 = "rgba(255,255,255,0.07)";
|
|
11991
12266
|
var AXIS_LINE = "rgba(255,255,255,0.18)";
|
|
11992
12267
|
var DIAGONAL_LINE = "rgba(255,255,255,0.28)";
|
|
@@ -12076,28 +12351,28 @@ function Scatter({
|
|
|
12076
12351
|
testID: "scatter-canvas",
|
|
12077
12352
|
style: { position: "absolute", top: 0, left: 0, width, height, overflow: "hidden" },
|
|
12078
12353
|
children: [
|
|
12079
|
-
ticksOf(yd, TICK_COUNT).map((
|
|
12080
|
-
const y = toY(
|
|
12354
|
+
ticksOf(yd, TICK_COUNT).map((t12, i) => {
|
|
12355
|
+
const y = toY(t12);
|
|
12081
12356
|
return /* @__PURE__ */ jsx(
|
|
12082
12357
|
View,
|
|
12083
12358
|
{
|
|
12084
12359
|
accessibilityElementsHidden: true,
|
|
12085
12360
|
testID: "scatter-gridline-y",
|
|
12086
12361
|
style: { position: "absolute", left: PLOT_LEFT2, width: innerW, top: y, height: 1, backgroundColor: GRID_LINE2 },
|
|
12087
|
-
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(
|
|
12362
|
+
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(t12) })
|
|
12088
12363
|
},
|
|
12089
12364
|
`y-${i}`
|
|
12090
12365
|
);
|
|
12091
12366
|
}),
|
|
12092
|
-
ticksOf(xd, TICK_COUNT).map((
|
|
12093
|
-
const x = toX(
|
|
12367
|
+
ticksOf(xd, TICK_COUNT).map((t12, i) => {
|
|
12368
|
+
const x = toX(t12);
|
|
12094
12369
|
return /* @__PURE__ */ jsx(
|
|
12095
12370
|
View,
|
|
12096
12371
|
{
|
|
12097
12372
|
accessibilityElementsHidden: true,
|
|
12098
12373
|
testID: "scatter-gridline-x",
|
|
12099
12374
|
style: { position: "absolute", top: PLOT_TOP, height: innerH, left: x, width: 1, backgroundColor: GRID_LINE2 },
|
|
12100
|
-
children: /* @__PURE__ */ jsx(Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(
|
|
12375
|
+
children: /* @__PURE__ */ jsx(Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(t12) })
|
|
12101
12376
|
},
|
|
12102
12377
|
`x-${i}`
|
|
12103
12378
|
);
|
|
@@ -12157,9 +12432,10 @@ function Scatter({
|
|
|
12157
12432
|
}) })
|
|
12158
12433
|
] });
|
|
12159
12434
|
}
|
|
12160
|
-
var
|
|
12161
|
-
var
|
|
12162
|
-
var
|
|
12435
|
+
var sem2 = getSemanticColors("dark");
|
|
12436
|
+
var STATUS_SUCCESS4 = sem2["status-success"];
|
|
12437
|
+
var STATUS_WARNING4 = sem2["status-warning"];
|
|
12438
|
+
var STATUS_ERROR4 = sem2["status-error"];
|
|
12163
12439
|
var TRACK = "rgba(255,255,255,0.08)";
|
|
12164
12440
|
var DEFAULT_THRESHOLDS = [
|
|
12165
12441
|
{ value: 0, color: STATUS_ERROR4 },
|
|
@@ -12231,23 +12507,23 @@ function Gauge2({
|
|
|
12231
12507
|
testID: "gauge",
|
|
12232
12508
|
...props,
|
|
12233
12509
|
children: [
|
|
12234
|
-
ticks.map((
|
|
12510
|
+
ticks.map((t12) => /* @__PURE__ */ jsx(
|
|
12235
12511
|
View,
|
|
12236
12512
|
{
|
|
12237
12513
|
accessibilityElementsHidden: true,
|
|
12238
12514
|
testID: "gauge-segment",
|
|
12239
12515
|
style: {
|
|
12240
12516
|
position: "absolute",
|
|
12241
|
-
left:
|
|
12242
|
-
top:
|
|
12517
|
+
left: t12.left - tickThickness / 2,
|
|
12518
|
+
top: t12.top - tickLength / 2,
|
|
12243
12519
|
width: tickThickness,
|
|
12244
12520
|
height: tickLength,
|
|
12245
12521
|
borderRadius: tickThickness / 2,
|
|
12246
|
-
backgroundColor:
|
|
12247
|
-
transform: [{ rotate:
|
|
12522
|
+
backgroundColor: t12.color,
|
|
12523
|
+
transform: [{ rotate: t12.rotate }]
|
|
12248
12524
|
}
|
|
12249
12525
|
},
|
|
12250
|
-
|
|
12526
|
+
t12.key
|
|
12251
12527
|
)),
|
|
12252
12528
|
/* @__PURE__ */ jsxs(View, { style: { position: "absolute", top: 0, left: 0, width: size, height: size }, className: "items-center justify-center", children: [
|
|
12253
12529
|
/* @__PURE__ */ jsxs(View, { className: "flex-row items-baseline gap-0.5", children: [
|
|
@@ -12260,6 +12536,203 @@ function Gauge2({
|
|
|
12260
12536
|
}
|
|
12261
12537
|
);
|
|
12262
12538
|
}
|
|
12539
|
+
function BrandLockup({
|
|
12540
|
+
subtitle = "wall dashboard",
|
|
12541
|
+
showSubtitle = true,
|
|
12542
|
+
className,
|
|
12543
|
+
...props
|
|
12544
|
+
}) {
|
|
12545
|
+
return /* @__PURE__ */ jsxs(View, { className: cn("flex-row items-center gap-[7px]", className), ...props, children: [
|
|
12546
|
+
/* @__PURE__ */ jsx(View, { className: "text-brand-primary", children: /* @__PURE__ */ jsx(VoltrasMark, { size: 14, color: "currentColor" }) }),
|
|
12547
|
+
/* @__PURE__ */ jsx(
|
|
12548
|
+
Typography,
|
|
12549
|
+
{
|
|
12550
|
+
variant: "button",
|
|
12551
|
+
color: "primary",
|
|
12552
|
+
className: "text-[12px] font-extrabold tracking-[1.5px]",
|
|
12553
|
+
children: "VOLTRAS"
|
|
12554
|
+
}
|
|
12555
|
+
),
|
|
12556
|
+
showSubtitle && subtitle ? /* @__PURE__ */ jsxs(
|
|
12557
|
+
Typography,
|
|
12558
|
+
{
|
|
12559
|
+
variant: "button",
|
|
12560
|
+
color: "tertiary",
|
|
12561
|
+
className: "text-[10px] font-semibold tracking-[0.4px]",
|
|
12562
|
+
children: [
|
|
12563
|
+
"/ ",
|
|
12564
|
+
subtitle
|
|
12565
|
+
]
|
|
12566
|
+
}
|
|
12567
|
+
) : null
|
|
12568
|
+
] });
|
|
12569
|
+
}
|
|
12570
|
+
var stateConfig = {
|
|
12571
|
+
// live = vivid green with an expanding ring; rest = solid amber (no pulse — operator); idle is dim.
|
|
12572
|
+
live: { label: "LIVE", color: "success", pulse: "ping", textColor: "primary" },
|
|
12573
|
+
rest: { label: "REST", color: "warning", pulse: false, textColor: "primary" },
|
|
12574
|
+
idle: { label: "IDLE", color: "default", pulse: false, textColor: "secondary" }
|
|
12575
|
+
};
|
|
12576
|
+
function SessionStatePill({ state, label, className, ...props }) {
|
|
12577
|
+
const cfg = stateConfig[state];
|
|
12578
|
+
return /* @__PURE__ */ jsxs(View, { className: cn("flex-row items-center gap-2", className), ...props, children: [
|
|
12579
|
+
/* @__PURE__ */ jsx(Indicator, { size: "md", color: cfg.color, pulse: cfg.pulse }),
|
|
12580
|
+
/* @__PURE__ */ jsx(Typography, { variant: "monoLabel", color: cfg.textColor, className: "text-[11px]", children: label ?? cfg.label })
|
|
12581
|
+
] });
|
|
12582
|
+
}
|
|
12583
|
+
var statusTextClass = {
|
|
12584
|
+
connected: "text-status-success",
|
|
12585
|
+
degraded: "text-status-warning",
|
|
12586
|
+
lost: "text-status-error-vivid"
|
|
12587
|
+
};
|
|
12588
|
+
function DeviceIndicator({
|
|
12589
|
+
status = "connected",
|
|
12590
|
+
onPress,
|
|
12591
|
+
label = "Devices",
|
|
12592
|
+
className,
|
|
12593
|
+
...props
|
|
12594
|
+
}) {
|
|
12595
|
+
const Wrapper = onPress ? Pressable : View;
|
|
12596
|
+
return /* @__PURE__ */ jsx(
|
|
12597
|
+
Wrapper,
|
|
12598
|
+
{
|
|
12599
|
+
accessibilityLabel: label,
|
|
12600
|
+
...onPress ? { onPress, accessibilityRole: "button" } : {},
|
|
12601
|
+
className: cn(
|
|
12602
|
+
"w-[26px] h-[28px] items-center justify-center rounded-[7px]",
|
|
12603
|
+
statusTextClass[status],
|
|
12604
|
+
className
|
|
12605
|
+
),
|
|
12606
|
+
...props,
|
|
12607
|
+
children: /* @__PURE__ */ jsx(BluetoothIcon, { size: 18, color: "currentColor", title: label })
|
|
12608
|
+
}
|
|
12609
|
+
);
|
|
12610
|
+
}
|
|
12611
|
+
var stateColor = {
|
|
12612
|
+
connected: "success",
|
|
12613
|
+
available: "info",
|
|
12614
|
+
degraded: "warning",
|
|
12615
|
+
lost: "error-vivid"
|
|
12616
|
+
};
|
|
12617
|
+
function DeviceRow({ device, onPress, className, ...props }) {
|
|
12618
|
+
const Wrapper = onPress ? Pressable : View;
|
|
12619
|
+
return /* @__PURE__ */ jsxs(
|
|
12620
|
+
Wrapper,
|
|
12621
|
+
{
|
|
12622
|
+
...onPress ? { onPress, accessibilityRole: "button" } : {},
|
|
12623
|
+
className: cn("flex-row items-center gap-[10px] px-2 py-[9px] rounded-[7px]", className),
|
|
12624
|
+
...props,
|
|
12625
|
+
children: [
|
|
12626
|
+
/* @__PURE__ */ jsx(Indicator, { size: "md", color: stateColor[device.state] }),
|
|
12627
|
+
/* @__PURE__ */ jsx(
|
|
12628
|
+
Typography,
|
|
12629
|
+
{
|
|
12630
|
+
variant: "body2",
|
|
12631
|
+
color: device.slot ? "primary" : "secondary",
|
|
12632
|
+
className: "flex-1 font-bold text-[12px]",
|
|
12633
|
+
children: device.nickname
|
|
12634
|
+
}
|
|
12635
|
+
),
|
|
12636
|
+
/* @__PURE__ */ jsx(Typography, { variant: "mono", color: "tertiary", className: "text-[10px]", children: device.id })
|
|
12637
|
+
]
|
|
12638
|
+
}
|
|
12639
|
+
);
|
|
12640
|
+
}
|
|
12641
|
+
function aggregateStatus(devices) {
|
|
12642
|
+
const bound = devices.filter((d) => d.slot);
|
|
12643
|
+
if (bound.some((d) => d.state === "lost")) return "lost";
|
|
12644
|
+
if (bound.some((d) => d.state === "degraded")) return "degraded";
|
|
12645
|
+
return "connected";
|
|
12646
|
+
}
|
|
12647
|
+
function DeviceMenu({
|
|
12648
|
+
devices,
|
|
12649
|
+
isOpen,
|
|
12650
|
+
onOpenChange,
|
|
12651
|
+
onSelectDevice,
|
|
12652
|
+
className
|
|
12653
|
+
}) {
|
|
12654
|
+
const status = aggregateStatus(devices);
|
|
12655
|
+
const boundCount = devices.filter((d) => d.slot).length;
|
|
12656
|
+
const availCount = devices.filter((d) => !d.slot).length;
|
|
12657
|
+
return /* @__PURE__ */ jsxs(Popover, { placement: "bottom", isOpen, onOpenChange, className, children: [
|
|
12658
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(DeviceIndicator, { status }) }),
|
|
12659
|
+
/* @__PURE__ */ jsxs(PopoverContent, { className: "right-0 left-auto mt-[10px] w-[326px] bg-surface-elevated border border-border-strong rounded-[10px] p-[7px]", children: [
|
|
12660
|
+
/* @__PURE__ */ jsxs(
|
|
12661
|
+
Typography,
|
|
12662
|
+
{
|
|
12663
|
+
variant: "monoLabel",
|
|
12664
|
+
color: "tertiary",
|
|
12665
|
+
className: "text-[9px] tracking-[0.8px] px-2 pt-[6px] pb-2",
|
|
12666
|
+
children: [
|
|
12667
|
+
"Devices \u2014 ",
|
|
12668
|
+
boundCount,
|
|
12669
|
+
" bound \xB7 ",
|
|
12670
|
+
availCount,
|
|
12671
|
+
" available"
|
|
12672
|
+
]
|
|
12673
|
+
}
|
|
12674
|
+
),
|
|
12675
|
+
devices.map((device, i) => /* @__PURE__ */ jsx(View, { className: cn(i > 0 && "border-t border-border"), children: /* @__PURE__ */ jsx(
|
|
12676
|
+
DeviceRow,
|
|
12677
|
+
{
|
|
12678
|
+
device,
|
|
12679
|
+
onPress: onSelectDevice ? () => onSelectDevice(device) : void 0
|
|
12680
|
+
}
|
|
12681
|
+
) }, device.id))
|
|
12682
|
+
] })
|
|
12683
|
+
] });
|
|
12684
|
+
}
|
|
12685
|
+
var SUBTITLE_MIN = 1024;
|
|
12686
|
+
var CLOCK_MIN = 720;
|
|
12687
|
+
function TopBar({
|
|
12688
|
+
state,
|
|
12689
|
+
devices,
|
|
12690
|
+
time,
|
|
12691
|
+
subtitle = "wall dashboard",
|
|
12692
|
+
showSubtitle,
|
|
12693
|
+
showClock,
|
|
12694
|
+
onSelectDevice,
|
|
12695
|
+
className
|
|
12696
|
+
}) {
|
|
12697
|
+
const [width, setWidth] = useState(SUBTITLE_MIN);
|
|
12698
|
+
const onLayout = (e) => setWidth(e.nativeEvent.layout.width);
|
|
12699
|
+
const subtitleVisible = showSubtitle ?? width >= SUBTITLE_MIN;
|
|
12700
|
+
const clockVisible = showClock ?? width >= CLOCK_MIN;
|
|
12701
|
+
return /* @__PURE__ */ jsxs(
|
|
12702
|
+
View,
|
|
12703
|
+
{
|
|
12704
|
+
onLayout,
|
|
12705
|
+
style: surfaceGradient.chrome(),
|
|
12706
|
+
className: cn(
|
|
12707
|
+
"h-[46px] flex-row items-center gap-[14px] px-4 bg-surface-elevated border-b border-border",
|
|
12708
|
+
className
|
|
12709
|
+
),
|
|
12710
|
+
children: [
|
|
12711
|
+
/* @__PURE__ */ jsx(BrandLockup, { subtitle, showSubtitle: subtitleVisible }),
|
|
12712
|
+
/* @__PURE__ */ jsxs(View, { className: "ml-auto flex-row items-center gap-[12px]", children: [
|
|
12713
|
+
/* @__PURE__ */ jsx(SessionStatePill, { state }),
|
|
12714
|
+
/* @__PURE__ */ jsx(Divider, { orientation: "vertical", className: "h-4 bg-border-prominent" }),
|
|
12715
|
+
/* @__PURE__ */ jsx(DeviceMenu, { devices, onSelectDevice }),
|
|
12716
|
+
clockVisible ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
12717
|
+
/* @__PURE__ */ jsx(Divider, { orientation: "vertical", className: "h-4 bg-border-prominent" }),
|
|
12718
|
+
/* @__PURE__ */ jsx(
|
|
12719
|
+
DateTime,
|
|
12720
|
+
{
|
|
12721
|
+
value: time,
|
|
12722
|
+
live: time == null,
|
|
12723
|
+
format: "time",
|
|
12724
|
+
hour12: false,
|
|
12725
|
+
variant: "mono",
|
|
12726
|
+
color: "secondary",
|
|
12727
|
+
className: "text-[11px] min-w-[38px] text-right"
|
|
12728
|
+
}
|
|
12729
|
+
)
|
|
12730
|
+
] }) : null
|
|
12731
|
+
] })
|
|
12732
|
+
]
|
|
12733
|
+
}
|
|
12734
|
+
);
|
|
12735
|
+
}
|
|
12263
12736
|
|
|
12264
12737
|
// src/utils/form.ts
|
|
12265
12738
|
function getFieldValidationProps(state) {
|
|
@@ -12349,6 +12822,6 @@ function composeValidators(...validators) {
|
|
|
12349
12822
|
};
|
|
12350
12823
|
}
|
|
12351
12824
|
|
|
12352
|
-
export { Accordion, AccordionButton, AccordionItem, AccordionPanel, Alert, AlertDescription, AlertTitle, Autocomplete, Avatar, AvatarBadge, AvatarGroup, Badge, BadgeText, BaseBadge, BreadcrumbItem, Breadcrumbs, Button, ButtonIcon, ButtonSpinner, ButtonText, CapacityBandChart, Caption, Card, CardContent, CardDescription, CardFooter, CardHeader, CardSkeleton, CardTitle, Checkbox, CheckboxGroup, Chip, CircularProgress, Collapse, CollapseButton, CollapseContent, DataRow, DateTime, DeviationBar, Divider, Drawer, DrawerBody, DrawerFooter, DrawerHeader, EmptyState, ExerciseCard, FormActions, FormField, FormRow, FormSection, Gauge2 as Gauge, HStack, Heading, HelpTip, IconBox, Indicator, Input, InputBar, InputGroup, IntensityBar, Label, LabelWithHelp, Link, ListItem, ListItemContent, ListItemDivider, ListItemIcon, ListItemTrailing, Menu, MenuDivider, MenuGroup, MenuItem, MenuList, MenuTrigger, MesoCard, MesoProgressBar, MesoStatusCard, Metric, MetricGroup, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalTitle, MuscleGroupChip, Overline, Paragraph, PasswordInput, Pill, PlaceholderStrip, Popover, PopoverCloseButton, PopoverContent, PopoverTrigger, PrBadge, PrHistoryModal, Progress, ProgressSteps, Radio, RadioGroup, ReadinessCheck, RestTimer, Scatter, Section, SectionContent, SectionHeader, Select, SetRow, Sidebar, SidebarContent, SidebarDivider, SidebarFooter, SidebarHeader, SidebarItem, SidebarSection, Skeleton, SkeletonCard, SkeletonCircle, SkeletonListItem, SkeletonText, Sparkline, Spinner, Stack, StatusDot, StepContent, StepIndicator, StepLabel, Stepper, Step as StepperStep, StrengthTrendChart, SupersetWrapper, Surface, Switch, TEMPO_PACING, Tab, TabList, TabPanel, TabPanels, Table, TableBody, TableCell, TableHeader, TableHeaderCell, TablePagination, TableRow, Tabs, TempoBar, TempoDisplay, Toast, ToastProvider, ToolbarButton, ToolbarButtonGroup, Tooltip, Treemap, Typography, VStack, VelocityStrip, WeekRow, WeightBadge, WorkoutCard, WorkoutPill, alpha, applyThemePreset, audiobookPreset, buttonSizes, calculateMeanVelocity, calculateVelocityLoss, cn, componentElevationRanges, composeValidators, createFieldId, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, elevationSystem, formatDateTime, formatPrescription, formatSignedPct, formatVelocity, getBaseSurfaceColor, getContrastText, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getFieldAriaProps, getFieldValidationProps, getGlowShadow, getHoverColors, getLuminance, getResultColor, getSemanticColors, getStatusColor, getTempoFillPct, getTempoPacingState, getThemeCSSVars, getValidatedElevation, getVelocityZoneColor, getVelocityZoneName, gluestackConfig, hasMaxLength, hasMinLength, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, isEmpty, isValidEmail, lightThemeCSSVars, lighten, neumorphicShadows, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, roundRpe, roundTempo, roundWeight, rpeColor, semanticColorsDark, semanticColorsLight, semanticTypography, shadowColors, useTable, useToast, useToolbarButton, validateCssPropertyManifest, validationRules };
|
|
12825
|
+
export { Accordion, AccordionButton, AccordionItem, AccordionPanel, Alert, AlertDescription, AlertTitle, Autocomplete, Avatar, AvatarBadge, AvatarGroup, 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, CircularProgress, Collapse, CollapseButton, CollapseContent, DataRow, DateTime, DeviationBar, DeviceIndicator, DeviceMenu, DeviceRow, Divider, Drawer, DrawerBody, DrawerFooter, DrawerHeader, DumbbellIcon, EmptyState, ExerciseCard, FormActions, FormField, FormRow, FormSection, Gauge2 as Gauge, HStack, Heading, HelpTip, IconBox, Indicator, Input, InputBar, InputGroup, IntensityBar, Label, LabelWithHelp, Link, ListItem, ListItemContent, ListItemDivider, ListItemIcon, ListItemTrailing, Menu, MenuDivider, MenuGroup, MenuItem, MenuList, MenuTrigger, MesoCard, MesoProgressBar, MesoStatusCard, Metric, MetricGroup, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalTitle, MuscleGroupChip, Overline, Paragraph, PasswordInput, Pill, PlaceholderStrip, Popover, PopoverCloseButton, PopoverContent, PopoverTrigger, PrBadge, PrHistoryModal, Progress, ProgressSteps, Radio, RadioGroup, ReadinessCheck, RestTimer, Scatter, Section, SectionContent, SectionHeader, Select, SessionStatePill, SetRow, Sidebar, SidebarContent, SidebarDivider, SidebarFooter, SidebarHeader, SidebarItem, SidebarSection, Skeleton, SkeletonCard, SkeletonCircle, SkeletonListItem, SkeletonText, Sparkline, Spinner, Stack, StarIcon, StatusDot, StepContent, StepIndicator, StepLabel, Stepper, Step as StepperStep, StrengthTrendChart, SupersetWrapper, Surface, SvgIcon, Switch, TEMPO_PACING, Tab, TabList, TabPanel, TabPanels, Table, TableBody, TableCell, TableHeader, TableHeaderCell, TablePagination, TableRow, Tabs, TempoBar, TempoDisplay, Toast, ToastProvider, ToolbarButton, ToolbarButtonGroup, Tooltip, TopBar, Treemap, Typography, VStack, VelocityStrip, VoltrasMark, WeekRow, WeightBadge, WorkoutCard, WorkoutPill, alpha, applyThemePreset, audiobookPreset, bestTextColor, buttonSizes, calculateMeanVelocity, calculateVelocityLoss, categoricalPalette, cn, componentElevationRanges, composeValidators, createFieldId, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, divergingScale, elevationSystem, formatDateTime, formatPrescription, formatSignedPct, formatVelocity, getBaseSurfaceColor, getCategoricalColor, getContrastText, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getFieldAriaProps, getFieldValidationProps, getGlowShadow, getHoverColors, getLuminance, getResultColor, getSemanticColors, getStatusColor, getTempoFillPct, getTempoPacingState, getThemeCSSVars, getValidatedElevation, getVelocityZoneColor, getVelocityZoneName, gluestackConfig, hasMaxLength, hasMinLength, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, isEmpty, isValidEmail, lightThemeCSSVars, lighten, linearGradient, neumorphicShadows, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, roundRpe, roundTempo, roundWeight, rpeColor, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, shadowColors, surfaceGradient, useTable, useToast, useToolbarButton, validateCssPropertyManifest, validationRules };
|
|
12353
12826
|
//# sourceMappingURL=index.mjs.map
|
|
12354
12827
|
//# sourceMappingURL=index.mjs.map
|