@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.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
3
4
|
var reactNative = require('react-native');
|
|
4
5
|
var clsx = require('clsx');
|
|
5
6
|
var tailwindMerge = require('tailwind-merge');
|
|
6
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
var React24 = require('react');
|
|
8
8
|
|
|
9
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -16,9 +16,6 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
16
16
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
17
17
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
18
18
|
});
|
|
19
|
-
function cn(...inputs) {
|
|
20
|
-
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
21
|
-
}
|
|
22
19
|
function wrapJsx(fn) {
|
|
23
20
|
return function(type, props, ...rest) {
|
|
24
21
|
if (props && typeof props.className === "string" && props.className) {
|
|
@@ -37,6 +34,58 @@ function wrapJsx(fn) {
|
|
|
37
34
|
var jsx = wrapJsx(jsxRuntime.jsx);
|
|
38
35
|
var jsxs = wrapJsx(jsxRuntime.jsxs);
|
|
39
36
|
|
|
37
|
+
// src/components/icons/SvgIcon.tsx
|
|
38
|
+
function SvgIcon({
|
|
39
|
+
size = 24,
|
|
40
|
+
color = "currentColor",
|
|
41
|
+
strokeWidth = 2,
|
|
42
|
+
fill = "none",
|
|
43
|
+
title,
|
|
44
|
+
children
|
|
45
|
+
}) {
|
|
46
|
+
return /* @__PURE__ */ jsxs(
|
|
47
|
+
"svg",
|
|
48
|
+
{
|
|
49
|
+
width: size,
|
|
50
|
+
height: size,
|
|
51
|
+
viewBox: "0 0 24 24",
|
|
52
|
+
fill,
|
|
53
|
+
stroke: color,
|
|
54
|
+
strokeWidth,
|
|
55
|
+
strokeLinecap: "round",
|
|
56
|
+
strokeLinejoin: "round",
|
|
57
|
+
...title ? { role: "img", "aria-label": title } : { "aria-hidden": true },
|
|
58
|
+
children: [
|
|
59
|
+
title ? /* @__PURE__ */ jsx("title", { children: title }) : null,
|
|
60
|
+
children
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// src/components/icons/icons.tsx
|
|
67
|
+
function VoltrasMark({ size = 14, ...props }) {
|
|
68
|
+
return /* @__PURE__ */ jsx(SvgIcon, { size, ...props, children: /* @__PURE__ */ jsx("path", { d: "M12 2 22 12 12 22 2 12Z" }) });
|
|
69
|
+
}
|
|
70
|
+
function BluetoothIcon({ size = 18, ...props }) {
|
|
71
|
+
return /* @__PURE__ */ jsx(SvgIcon, { size, ...props, children: /* @__PURE__ */ jsx("path", { d: "M7 7 17 17 12 22 12 2 17 7 7 17" }) });
|
|
72
|
+
}
|
|
73
|
+
function DumbbellIcon(props) {
|
|
74
|
+
return /* @__PURE__ */ jsxs(SvgIcon, { ...props, children: [
|
|
75
|
+
/* @__PURE__ */ jsx("path", { d: "M14.4 14.4 9.6 9.6" }),
|
|
76
|
+
/* @__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" }),
|
|
77
|
+
/* @__PURE__ */ jsx("path", { d: "m21.5 21.5-1.4-1.4" }),
|
|
78
|
+
/* @__PURE__ */ jsx("path", { d: "M3.9 3.9 2.5 2.5" }),
|
|
79
|
+
/* @__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" })
|
|
80
|
+
] });
|
|
81
|
+
}
|
|
82
|
+
function StarIcon(props) {
|
|
83
|
+
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" }) });
|
|
84
|
+
}
|
|
85
|
+
function cn(...inputs) {
|
|
86
|
+
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
87
|
+
}
|
|
88
|
+
|
|
40
89
|
// src/components/ui/alert/Alert.tsx
|
|
41
90
|
var statusColors = {
|
|
42
91
|
success: {
|
|
@@ -194,6 +243,38 @@ var primitiveColors = {
|
|
|
194
243
|
800: "#991B1B",
|
|
195
244
|
900: "#7F1D1D"
|
|
196
245
|
},
|
|
246
|
+
// Vivid green scale (live/go success)
|
|
247
|
+
greenVivid: {
|
|
248
|
+
50: "#E9FBF0",
|
|
249
|
+
100: "#C8F7DA",
|
|
250
|
+
200: "#9FF0BF",
|
|
251
|
+
300: "#6BE79D",
|
|
252
|
+
400: "#47DE84",
|
|
253
|
+
// Success vivid light
|
|
254
|
+
500: "#2ED573",
|
|
255
|
+
// Success vivid main
|
|
256
|
+
600: "#22B85F",
|
|
257
|
+
700: "#1A9950",
|
|
258
|
+
// Success vivid dark
|
|
259
|
+
800: "#157A40",
|
|
260
|
+
900: "#105C30"
|
|
261
|
+
},
|
|
262
|
+
// Vivid red scale (alert)
|
|
263
|
+
redVivid: {
|
|
264
|
+
50: "#FFECEE",
|
|
265
|
+
100: "#FFD6DB",
|
|
266
|
+
200: "#FFB3BC",
|
|
267
|
+
300: "#FF8593",
|
|
268
|
+
400: "#FF6070",
|
|
269
|
+
// Error vivid light
|
|
270
|
+
500: "#FF4757",
|
|
271
|
+
// Error vivid main
|
|
272
|
+
600: "#E63548",
|
|
273
|
+
700: "#C42539",
|
|
274
|
+
// Error vivid dark
|
|
275
|
+
800: "#9E1C2C",
|
|
276
|
+
900: "#7A1520"
|
|
277
|
+
},
|
|
197
278
|
// Amber scale (warning)
|
|
198
279
|
amber: {
|
|
199
280
|
50: "#FFFBEB",
|
|
@@ -283,6 +364,162 @@ var primitiveColors = {
|
|
|
283
364
|
black: "#000000",
|
|
284
365
|
transparent: "transparent"
|
|
285
366
|
};
|
|
367
|
+
var primitiveRamps = {
|
|
368
|
+
red: {
|
|
369
|
+
50: "#FFF4F4",
|
|
370
|
+
100: "#FFE3E5",
|
|
371
|
+
200: "#FFC2C5",
|
|
372
|
+
300: "#FF9A9D",
|
|
373
|
+
400: "#F77175",
|
|
374
|
+
500: "#E05254",
|
|
375
|
+
600: "#D14343",
|
|
376
|
+
// pin
|
|
377
|
+
700: "#A4221C",
|
|
378
|
+
800: "#7E1002",
|
|
379
|
+
900: "#5A0900",
|
|
380
|
+
950: "#3D0400"
|
|
381
|
+
},
|
|
382
|
+
orange: {
|
|
383
|
+
50: "#FFF5ED",
|
|
384
|
+
100: "#FFE6D4",
|
|
385
|
+
200: "#FFC7A2",
|
|
386
|
+
300: "#FFA063",
|
|
387
|
+
400: "#FF7900",
|
|
388
|
+
// pin
|
|
389
|
+
500: "#DA5F00",
|
|
390
|
+
600: "#B94A00",
|
|
391
|
+
700: "#983804",
|
|
392
|
+
800: "#6F290F",
|
|
393
|
+
900: "#4E1C0C",
|
|
394
|
+
950: "#331107"
|
|
395
|
+
},
|
|
396
|
+
amber: {
|
|
397
|
+
50: "#FFF7DD",
|
|
398
|
+
100: "#FFEAA9",
|
|
399
|
+
200: "#FFD352",
|
|
400
|
+
300: "#F9B415",
|
|
401
|
+
// pin
|
|
402
|
+
400: "#E08C00",
|
|
403
|
+
500: "#C27400",
|
|
404
|
+
600: "#A45E00",
|
|
405
|
+
700: "#814D14",
|
|
406
|
+
800: "#5B3A1A",
|
|
407
|
+
900: "#442503",
|
|
408
|
+
950: "#301500"
|
|
409
|
+
},
|
|
410
|
+
green: {
|
|
411
|
+
50: "#E3FFEE",
|
|
412
|
+
100: "#B5FFD2",
|
|
413
|
+
200: "#58F69E",
|
|
414
|
+
300: "#2ED573",
|
|
415
|
+
// pin
|
|
416
|
+
400: "#21C05D",
|
|
417
|
+
500: "#22A444",
|
|
418
|
+
600: "#298732",
|
|
419
|
+
700: "#2B6B25",
|
|
420
|
+
800: "#264D1C",
|
|
421
|
+
900: "#1B3515",
|
|
422
|
+
950: "#11220D"
|
|
423
|
+
},
|
|
424
|
+
cyan: {
|
|
425
|
+
50: "#E6FBFF",
|
|
426
|
+
100: "#C2F6FF",
|
|
427
|
+
200: "#62EAFF",
|
|
428
|
+
300: "#22D3EE",
|
|
429
|
+
// pin
|
|
430
|
+
400: "#01B5D1",
|
|
431
|
+
500: "#2697B7",
|
|
432
|
+
600: "#307B9B",
|
|
433
|
+
700: "#2A617F",
|
|
434
|
+
800: "#22465F",
|
|
435
|
+
900: "#0B3149",
|
|
436
|
+
950: "#001F36"
|
|
437
|
+
},
|
|
438
|
+
blue: {
|
|
439
|
+
50: "#EFF8FF",
|
|
440
|
+
100: "#D9EFFF",
|
|
441
|
+
200: "#ACDBFF",
|
|
442
|
+
300: "#78C2FF",
|
|
443
|
+
400: "#3CA8FF",
|
|
444
|
+
500: "#2196F3",
|
|
445
|
+
// pin
|
|
446
|
+
600: "#1072CB",
|
|
447
|
+
700: "#135AA8",
|
|
448
|
+
800: "#14407E",
|
|
449
|
+
900: "#112C5A",
|
|
450
|
+
950: "#091B3C"
|
|
451
|
+
},
|
|
452
|
+
magenta: {
|
|
453
|
+
50: "#FFF3F9",
|
|
454
|
+
100: "#FFE2F1",
|
|
455
|
+
200: "#FFBDE2",
|
|
456
|
+
300: "#FF8FD5",
|
|
457
|
+
400: "#ED69C3",
|
|
458
|
+
500: "#D548AF",
|
|
459
|
+
600: "#BA2996",
|
|
460
|
+
700: "#9C0D7A",
|
|
461
|
+
// pin
|
|
462
|
+
800: "#77005A",
|
|
463
|
+
900: "#56003F",
|
|
464
|
+
950: "#3B0029"
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
var categoricalPalette = {
|
|
468
|
+
default: [
|
|
469
|
+
primitiveRamps.blue[500],
|
|
470
|
+
primitiveRamps.magenta[500],
|
|
471
|
+
primitiveRamps.red[500],
|
|
472
|
+
primitiveRamps.orange[400],
|
|
473
|
+
primitiveRamps.green[300],
|
|
474
|
+
primitiveRamps.cyan[300],
|
|
475
|
+
primitiveRamps.amber[600]
|
|
476
|
+
// extended (7th) — pair with a legend
|
|
477
|
+
],
|
|
478
|
+
dark: [
|
|
479
|
+
primitiveRamps.blue[600],
|
|
480
|
+
primitiveRamps.magenta[600],
|
|
481
|
+
primitiveRamps.red[500],
|
|
482
|
+
primitiveRamps.orange[600],
|
|
483
|
+
primitiveRamps.green[800],
|
|
484
|
+
primitiveRamps.cyan[800],
|
|
485
|
+
primitiveRamps.amber[500]
|
|
486
|
+
// extended (7th) — pair with a legend
|
|
487
|
+
]
|
|
488
|
+
};
|
|
489
|
+
var CATEGORICAL_CVD_SAFE_MAX = 6;
|
|
490
|
+
function getCategoricalColor(index, variant = "default") {
|
|
491
|
+
const palette = categoricalPalette[variant];
|
|
492
|
+
index = Math.max(0, Math.floor(index));
|
|
493
|
+
return palette[index % palette.length];
|
|
494
|
+
}
|
|
495
|
+
var divergingScale = [
|
|
496
|
+
primitiveRamps.blue[500],
|
|
497
|
+
// under
|
|
498
|
+
primitiveRamps.cyan[300],
|
|
499
|
+
// maintenance
|
|
500
|
+
primitiveRamps.green[200],
|
|
501
|
+
// optimal (light center)
|
|
502
|
+
primitiveRamps.amber[300],
|
|
503
|
+
// approaching
|
|
504
|
+
primitiveRamps.red[600]
|
|
505
|
+
// over
|
|
506
|
+
];
|
|
507
|
+
var sequentialEffort = [
|
|
508
|
+
primitiveRamps.green[300],
|
|
509
|
+
primitiveRamps.amber[200],
|
|
510
|
+
primitiveRamps.amber[300],
|
|
511
|
+
primitiveRamps.orange[400],
|
|
512
|
+
primitiveRamps.red[600],
|
|
513
|
+
primitiveRamps.red[700]
|
|
514
|
+
];
|
|
515
|
+
function bestTextColor(hex) {
|
|
516
|
+
const [r, g, b] = [0, 2, 4].map((i) => {
|
|
517
|
+
const c = parseInt(hex.replace("#", "").slice(i, i + 2), 16) / 255;
|
|
518
|
+
return c >= 0.04045 ? ((c + 0.055) / 1.055) ** 2.4 : c / 12.92;
|
|
519
|
+
});
|
|
520
|
+
const l = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
521
|
+
return (l + 0.05) / 0.05 >= 1.05 / (l + 0.05) ? "#000000" : "#FFFFFF";
|
|
522
|
+
}
|
|
286
523
|
var discreteRainbow = [
|
|
287
524
|
"#E8ECFB",
|
|
288
525
|
"#D9CCE3",
|
|
@@ -492,56 +729,43 @@ var primitiveZIndex = {
|
|
|
492
729
|
// src/theme/tokens/semantic.ts
|
|
493
730
|
var semanticColorsLight = {
|
|
494
731
|
// Brand colors (brand-*)
|
|
495
|
-
"brand-primary":
|
|
496
|
-
|
|
497
|
-
"brand-primary-
|
|
498
|
-
// #FF9630
|
|
499
|
-
"brand-primary-dark": primitiveColors.accent[700],
|
|
500
|
-
// #D0620C
|
|
732
|
+
"brand-primary": primitiveRamps.orange[400],
|
|
733
|
+
"brand-primary-light": primitiveRamps.orange[300],
|
|
734
|
+
"brand-primary-dark": primitiveRamps.orange[500],
|
|
501
735
|
"brand-primary-subtle": "rgba(255, 121, 0, 0.08)",
|
|
502
|
-
"brand-primary-hover":
|
|
503
|
-
"brand-primary-active":
|
|
504
|
-
"brand-secondary":
|
|
505
|
-
|
|
506
|
-
"brand-secondary-
|
|
507
|
-
|
|
508
|
-
"brand-secondary-
|
|
509
|
-
|
|
510
|
-
"brand-secondary-subtle": "rgba(64, 109, 135, 0.08)",
|
|
511
|
-
"brand-secondary-hover": primitiveColors.steel[600],
|
|
512
|
-
"brand-secondary-active": primitiveColors.steel[700],
|
|
736
|
+
"brand-primary-hover": primitiveRamps.orange[500],
|
|
737
|
+
"brand-primary-active": primitiveRamps.orange[600],
|
|
738
|
+
"brand-secondary": primitiveRamps.cyan[600],
|
|
739
|
+
"brand-secondary-light": primitiveRamps.cyan[500],
|
|
740
|
+
"brand-secondary-dark": primitiveRamps.cyan[700],
|
|
741
|
+
"brand-secondary-subtle": "rgba(48, 123, 155, 0.08)",
|
|
742
|
+
"brand-secondary-hover": primitiveRamps.cyan[700],
|
|
743
|
+
"brand-secondary-active": primitiveRamps.cyan[800],
|
|
513
744
|
// Text on brand backgrounds (on-*)
|
|
514
745
|
"on-brand-primary": primitiveColors.white,
|
|
515
746
|
"on-brand-secondary": primitiveColors.white,
|
|
516
747
|
// Status colors (status-*)
|
|
517
|
-
"status-success":
|
|
518
|
-
|
|
519
|
-
"status-success-
|
|
520
|
-
|
|
521
|
-
"status-
|
|
522
|
-
|
|
523
|
-
"status-
|
|
524
|
-
"status-error":
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
"status-error-dark": primitiveColors.
|
|
529
|
-
|
|
530
|
-
"status-
|
|
531
|
-
"status-warning":
|
|
532
|
-
|
|
533
|
-
"status-warning-
|
|
534
|
-
|
|
535
|
-
"status-
|
|
536
|
-
|
|
537
|
-
"status-
|
|
538
|
-
"status-info": primitiveColors.sky[500],
|
|
539
|
-
// #2196F3
|
|
540
|
-
"status-info-light": primitiveColors.sky[400],
|
|
541
|
-
// #64B6F7
|
|
542
|
-
"status-info-dark": primitiveColors.sky[700],
|
|
543
|
-
// #0B79D0
|
|
544
|
-
"status-info-subtle": primitiveColors.sky[50],
|
|
748
|
+
"status-success": primitiveRamps.green[300],
|
|
749
|
+
"status-success-light": primitiveRamps.green[200],
|
|
750
|
+
"status-success-dark": primitiveRamps.green[600],
|
|
751
|
+
"status-success-subtle": primitiveRamps.green[50],
|
|
752
|
+
"status-error": primitiveRamps.red[600],
|
|
753
|
+
"status-error-light": primitiveRamps.red[500],
|
|
754
|
+
"status-error-dark": primitiveRamps.red[700],
|
|
755
|
+
"status-error-subtle": primitiveRamps.red[50],
|
|
756
|
+
"status-error-vivid": primitiveColors.redVivid[500],
|
|
757
|
+
// vivid alert red
|
|
758
|
+
"status-error-vivid-light": primitiveColors.redVivid[400],
|
|
759
|
+
"status-error-vivid-dark": primitiveColors.redVivid[700],
|
|
760
|
+
"status-error-vivid-subtle": "rgba(255, 71, 87, 0.12)",
|
|
761
|
+
"status-warning": primitiveRamps.amber[300],
|
|
762
|
+
"status-warning-light": primitiveRamps.amber[200],
|
|
763
|
+
"status-warning-dark": primitiveRamps.amber[500],
|
|
764
|
+
"status-warning-subtle": primitiveRamps.amber[50],
|
|
765
|
+
"status-info": primitiveRamps.blue[500],
|
|
766
|
+
"status-info-light": primitiveRamps.blue[300],
|
|
767
|
+
"status-info-dark": primitiveRamps.blue[600],
|
|
768
|
+
"status-info-subtle": primitiveRamps.blue[50],
|
|
545
769
|
// Text on status backgrounds (on-status-*)
|
|
546
770
|
"on-status-success": primitiveColors.white,
|
|
547
771
|
"on-status-error": primitiveColors.white,
|
|
@@ -568,25 +792,25 @@ var semanticColorsLight = {
|
|
|
568
792
|
// Data visualization colors (data-*)
|
|
569
793
|
// First 10 colors from discrete rainbow optimized for charts
|
|
570
794
|
"data-1": discreteRainbow[9],
|
|
571
|
-
//
|
|
795
|
+
// Blue
|
|
572
796
|
"data-2": discreteRainbow[14],
|
|
573
|
-
//
|
|
797
|
+
// Green
|
|
574
798
|
"data-3": discreteRainbow[17],
|
|
575
|
-
//
|
|
799
|
+
// Yellow
|
|
576
800
|
"data-4": discreteRainbow[25],
|
|
577
|
-
//
|
|
801
|
+
// Red
|
|
578
802
|
"data-5": discreteRainbow[8],
|
|
579
|
-
//
|
|
803
|
+
// Purple
|
|
580
804
|
"data-6": discreteRainbow[20],
|
|
581
|
-
//
|
|
805
|
+
// Orange
|
|
582
806
|
"data-7": discreteRainbow[13],
|
|
583
|
-
//
|
|
807
|
+
// Light Blue
|
|
584
808
|
"data-8": discreteRainbow[15],
|
|
585
|
-
//
|
|
809
|
+
// Light Green
|
|
586
810
|
"data-9": discreteRainbow[3],
|
|
587
|
-
//
|
|
811
|
+
// Lavender
|
|
588
812
|
"data-10": discreteRainbow[22],
|
|
589
|
-
//
|
|
813
|
+
// Dark Orange
|
|
590
814
|
// Text colors (text-*)
|
|
591
815
|
"text-primary": "#121828",
|
|
592
816
|
"text-secondary": "#65748B",
|
|
@@ -598,9 +822,9 @@ var semanticColorsLight = {
|
|
|
598
822
|
// Surface colors (surface-*) - for elevated containers
|
|
599
823
|
"surface-base": primitiveColors.white,
|
|
600
824
|
"surface-elevated": primitiveColors.neutral[50],
|
|
601
|
-
//
|
|
825
|
+
// slightly off-white for elevated cards
|
|
602
826
|
"surface-raised": primitiveColors.neutral[100],
|
|
603
|
-
//
|
|
827
|
+
// light gray for raised cards
|
|
604
828
|
"surface-overlay": primitiveColors.white,
|
|
605
829
|
"surface-input": primitiveColors.neutral[50],
|
|
606
830
|
// Input field background (filled variant)
|
|
@@ -612,6 +836,8 @@ var semanticColorsLight = {
|
|
|
612
836
|
"border-default": "#E8E9EB",
|
|
613
837
|
"border-subtle": primitiveColors.neutral[100],
|
|
614
838
|
"border-strong": primitiveColors.neutral[300],
|
|
839
|
+
"border-prominent": primitiveColors.neutral[400],
|
|
840
|
+
// high-visibility divider
|
|
615
841
|
"border-focus": primitiveColors.blue[600],
|
|
616
842
|
"border-input": primitiveColors.neutral[300],
|
|
617
843
|
// Input field border
|
|
@@ -636,37 +862,41 @@ var semanticColorsLight = {
|
|
|
636
862
|
};
|
|
637
863
|
var semanticColorsDark = {
|
|
638
864
|
// Brand colors stay the same in dark mode
|
|
639
|
-
"brand-primary":
|
|
640
|
-
"brand-primary-light":
|
|
641
|
-
"brand-primary-dark":
|
|
865
|
+
"brand-primary": primitiveRamps.orange[400],
|
|
866
|
+
"brand-primary-light": primitiveRamps.orange[300],
|
|
867
|
+
"brand-primary-dark": primitiveRamps.orange[500],
|
|
642
868
|
"brand-primary-subtle": "rgba(255, 121, 0, 0.12)",
|
|
643
|
-
"brand-primary-hover":
|
|
644
|
-
"brand-primary-active":
|
|
645
|
-
"brand-secondary":
|
|
646
|
-
"brand-secondary-light":
|
|
647
|
-
"brand-secondary-dark":
|
|
648
|
-
"brand-secondary-subtle": "rgba(
|
|
649
|
-
"brand-secondary-hover":
|
|
650
|
-
"brand-secondary-active":
|
|
869
|
+
"brand-primary-hover": primitiveRamps.orange[300],
|
|
870
|
+
"brand-primary-active": primitiveRamps.orange[200],
|
|
871
|
+
"brand-secondary": primitiveRamps.cyan[600],
|
|
872
|
+
"brand-secondary-light": primitiveRamps.cyan[500],
|
|
873
|
+
"brand-secondary-dark": primitiveRamps.cyan[700],
|
|
874
|
+
"brand-secondary-subtle": "rgba(48, 123, 155, 0.12)",
|
|
875
|
+
"brand-secondary-hover": primitiveRamps.cyan[500],
|
|
876
|
+
"brand-secondary-active": primitiveRamps.cyan[400],
|
|
651
877
|
// Text on brand backgrounds
|
|
652
878
|
"on-brand-primary": primitiveColors.white,
|
|
653
879
|
"on-brand-secondary": primitiveColors.white,
|
|
654
880
|
// Status colors
|
|
655
|
-
"status-success":
|
|
656
|
-
"status-success-light":
|
|
657
|
-
"status-success-dark":
|
|
658
|
-
"status-success-subtle": "rgba(
|
|
659
|
-
"status-error":
|
|
660
|
-
"status-error-light":
|
|
661
|
-
"status-error-dark":
|
|
881
|
+
"status-success": primitiveRamps.green[300],
|
|
882
|
+
"status-success-light": primitiveRamps.green[200],
|
|
883
|
+
"status-success-dark": primitiveRamps.green[600],
|
|
884
|
+
"status-success-subtle": "rgba(46, 213, 115, 0.12)",
|
|
885
|
+
"status-error": primitiveRamps.red[600],
|
|
886
|
+
"status-error-light": primitiveRamps.red[500],
|
|
887
|
+
"status-error-dark": primitiveRamps.red[700],
|
|
662
888
|
"status-error-subtle": "rgba(209, 67, 67, 0.12)",
|
|
663
|
-
"status-
|
|
664
|
-
"status-
|
|
665
|
-
"status-
|
|
666
|
-
"status-
|
|
667
|
-
"status-
|
|
668
|
-
"status-
|
|
669
|
-
"status-
|
|
889
|
+
"status-error-vivid": primitiveColors.redVivid[500],
|
|
890
|
+
"status-error-vivid-light": primitiveColors.redVivid[400],
|
|
891
|
+
"status-error-vivid-dark": primitiveColors.redVivid[700],
|
|
892
|
+
"status-error-vivid-subtle": "rgba(255, 71, 87, 0.12)",
|
|
893
|
+
"status-warning": primitiveRamps.amber[300],
|
|
894
|
+
"status-warning-light": primitiveRamps.amber[200],
|
|
895
|
+
"status-warning-dark": primitiveRamps.amber[500],
|
|
896
|
+
"status-warning-subtle": "rgba(249, 180, 21, 0.12)",
|
|
897
|
+
"status-info": primitiveRamps.blue[500],
|
|
898
|
+
"status-info-light": primitiveRamps.blue[300],
|
|
899
|
+
"status-info-dark": primitiveRamps.blue[600],
|
|
670
900
|
"status-info-subtle": "rgba(33, 150, 243, 0.12)",
|
|
671
901
|
// Text on status backgrounds
|
|
672
902
|
"on-status-success": primitiveColors.white,
|
|
@@ -708,29 +938,31 @@ var semanticColorsDark = {
|
|
|
708
938
|
"text-link-hover": primitiveColors.blue[400],
|
|
709
939
|
// Surface colors - dark backgrounds
|
|
710
940
|
"surface-base": primitiveColors.charcoal[700],
|
|
711
|
-
//
|
|
941
|
+
// main surface
|
|
712
942
|
"surface-elevated": primitiveColors.charcoal[600],
|
|
713
|
-
//
|
|
943
|
+
// elevated surface
|
|
714
944
|
"surface-raised": primitiveColors.charcoal[500],
|
|
715
|
-
//
|
|
945
|
+
// raised surface
|
|
716
946
|
"surface-overlay": primitiveColors.charcoal[600],
|
|
717
|
-
//
|
|
947
|
+
// overlay surface
|
|
718
948
|
"surface-input": primitiveColors.charcoal[600],
|
|
719
|
-
//
|
|
949
|
+
// input surface
|
|
720
950
|
// Background colors
|
|
721
951
|
"background-base": primitiveColors.charcoal[900],
|
|
722
|
-
//
|
|
952
|
+
// darkest charcoal
|
|
723
953
|
"background-default": primitiveColors.charcoal[700],
|
|
724
|
-
//
|
|
954
|
+
// main background
|
|
725
955
|
"background-subtle": primitiveColors.charcoal[500],
|
|
726
|
-
//
|
|
956
|
+
// subtle background
|
|
727
957
|
// Border colors
|
|
728
958
|
"border-default": primitiveColors.charcoal[400],
|
|
729
|
-
//
|
|
959
|
+
// default border
|
|
730
960
|
"border-subtle": primitiveColors.charcoal[500],
|
|
731
|
-
//
|
|
961
|
+
// subtle border
|
|
732
962
|
"border-strong": primitiveColors.charcoal[300],
|
|
733
|
-
//
|
|
963
|
+
// strong border
|
|
964
|
+
"border-prominent": primitiveColors.charcoal[200],
|
|
965
|
+
// high-visibility divider
|
|
734
966
|
"border-focus": "#828DF8",
|
|
735
967
|
"border-input": primitiveColors.neutral[600],
|
|
736
968
|
"border-input-hover": primitiveColors.neutral[500],
|
|
@@ -745,7 +977,7 @@ var semanticColorsDark = {
|
|
|
745
977
|
"interactive-disabled-text": "rgba(255, 255, 255, 0.26)",
|
|
746
978
|
// Divider
|
|
747
979
|
"divider": primitiveColors.charcoal[400],
|
|
748
|
-
//
|
|
980
|
+
// divider color
|
|
749
981
|
// Avatar default
|
|
750
982
|
"avatar-background": primitiveColors.neutral[600],
|
|
751
983
|
"avatar-text": primitiveColors.white
|
|
@@ -1211,10 +1443,11 @@ var PasswordInput = React24.forwardRef(function PasswordInput2({ showIcon, hideI
|
|
|
1211
1443
|
var themeIndependentCSSVars = {
|
|
1212
1444
|
// RGB decomposed values for glow shadows
|
|
1213
1445
|
"--color-brand-primary-rgb": "255, 121, 0",
|
|
1214
|
-
"--color-brand-secondary-rgb": "
|
|
1215
|
-
"--color-status-success-rgb": "
|
|
1446
|
+
"--color-brand-secondary-rgb": "48, 123, 155",
|
|
1447
|
+
"--color-status-success-rgb": "46, 213, 115",
|
|
1216
1448
|
"--color-status-error-rgb": "209, 67, 67",
|
|
1217
|
-
"--color-status-
|
|
1449
|
+
"--color-status-error-vivid-rgb": "255, 71, 87",
|
|
1450
|
+
"--color-status-warning-rgb": "249, 180, 21",
|
|
1218
1451
|
"--color-status-info-rgb": "33, 150, 243",
|
|
1219
1452
|
"--color-background-base-rgb": "16, 16, 16",
|
|
1220
1453
|
// Font families
|
|
@@ -1249,6 +1482,10 @@ var lightThemeCSSVars = {
|
|
|
1249
1482
|
"--color-status-warning-subtle": semanticColorsLight["status-warning-subtle"],
|
|
1250
1483
|
"--color-status-info": semanticColorsLight["status-info"],
|
|
1251
1484
|
"--color-status-info-subtle": semanticColorsLight["status-info-subtle"],
|
|
1485
|
+
"--color-status-error-vivid": semanticColorsLight["status-error-vivid"],
|
|
1486
|
+
"--color-status-error-vivid-light": semanticColorsLight["status-error-vivid-light"],
|
|
1487
|
+
"--color-status-error-vivid-dark": semanticColorsLight["status-error-vivid-dark"],
|
|
1488
|
+
"--color-status-error-vivid-subtle": semanticColorsLight["status-error-vivid-subtle"],
|
|
1252
1489
|
"--color-text-primary": semanticColorsLight["text-primary"],
|
|
1253
1490
|
"--color-text-secondary": semanticColorsLight["text-secondary"],
|
|
1254
1491
|
"--color-text-tertiary": semanticColorsLight["text-tertiary"],
|
|
@@ -1264,6 +1501,7 @@ var lightThemeCSSVars = {
|
|
|
1264
1501
|
"--color-border-default": semanticColorsLight["border-default"],
|
|
1265
1502
|
"--color-border-subtle": semanticColorsLight["border-subtle"],
|
|
1266
1503
|
"--color-border-strong": semanticColorsLight["border-strong"],
|
|
1504
|
+
"--color-border-prominent": semanticColorsLight["border-prominent"],
|
|
1267
1505
|
"--color-border-focus": semanticColorsLight["border-focus"],
|
|
1268
1506
|
"--color-interactive-hover": semanticColorsLight["interactive-hover"],
|
|
1269
1507
|
"--color-interactive-focus": semanticColorsLight["interactive-focus"],
|
|
@@ -1340,6 +1578,10 @@ var darkThemeCSSVars = {
|
|
|
1340
1578
|
"--color-status-warning-subtle": semanticColorsDark["status-warning-subtle"],
|
|
1341
1579
|
"--color-status-info": semanticColorsDark["status-info"],
|
|
1342
1580
|
"--color-status-info-subtle": semanticColorsDark["status-info-subtle"],
|
|
1581
|
+
"--color-status-error-vivid": semanticColorsDark["status-error-vivid"],
|
|
1582
|
+
"--color-status-error-vivid-light": semanticColorsDark["status-error-vivid-light"],
|
|
1583
|
+
"--color-status-error-vivid-dark": semanticColorsDark["status-error-vivid-dark"],
|
|
1584
|
+
"--color-status-error-vivid-subtle": semanticColorsDark["status-error-vivid-subtle"],
|
|
1343
1585
|
"--color-text-primary": semanticColorsDark["text-primary"],
|
|
1344
1586
|
"--color-text-secondary": semanticColorsDark["text-secondary"],
|
|
1345
1587
|
"--color-text-tertiary": semanticColorsDark["text-tertiary"],
|
|
@@ -1355,6 +1597,7 @@ var darkThemeCSSVars = {
|
|
|
1355
1597
|
"--color-border-default": semanticColorsDark["border-default"],
|
|
1356
1598
|
"--color-border-subtle": semanticColorsDark["border-subtle"],
|
|
1357
1599
|
"--color-border-strong": semanticColorsDark["border-strong"],
|
|
1600
|
+
"--color-border-prominent": semanticColorsDark["border-prominent"],
|
|
1358
1601
|
"--color-border-focus": semanticColorsDark["border-focus"],
|
|
1359
1602
|
"--color-interactive-hover": semanticColorsDark["interactive-hover"],
|
|
1360
1603
|
"--color-interactive-focus": semanticColorsDark["interactive-focus"],
|
|
@@ -2163,6 +2406,17 @@ function resolveColor(token, mode = "dark") {
|
|
|
2163
2406
|
return reactNative.Platform.OS === "web" ? `var(--color-${token})` : getSemanticColors(mode)[token];
|
|
2164
2407
|
}
|
|
2165
2408
|
|
|
2409
|
+
// src/theme/gradients.ts
|
|
2410
|
+
function linearGradient(from, to, angle = 180, mode = "dark") {
|
|
2411
|
+
return {
|
|
2412
|
+
backgroundImage: `linear-gradient(${angle}deg, ${resolveColor(from, mode)}, ${resolveColor(to, mode)})`
|
|
2413
|
+
};
|
|
2414
|
+
}
|
|
2415
|
+
var surfaceGradient = {
|
|
2416
|
+
/** Chrome bands (top bar, headers): elevated → base, a subtle dark wash. */
|
|
2417
|
+
chrome: (mode = "dark") => linearGradient("surface-elevated", "background-base", 180, mode)
|
|
2418
|
+
};
|
|
2419
|
+
|
|
2166
2420
|
// src/theme/presets/apply.ts
|
|
2167
2421
|
function colorKeyToVar(key) {
|
|
2168
2422
|
return `--color-${key}`;
|
|
@@ -2537,7 +2791,8 @@ var colorStyles = {
|
|
|
2537
2791
|
success: "bg-status-success",
|
|
2538
2792
|
error: "bg-status-error",
|
|
2539
2793
|
warning: "bg-status-warning",
|
|
2540
|
-
info: "bg-status-info"
|
|
2794
|
+
info: "bg-status-info",
|
|
2795
|
+
"error-vivid": "bg-status-error-vivid"
|
|
2541
2796
|
};
|
|
2542
2797
|
function Indicator({
|
|
2543
2798
|
size = "sm",
|
|
@@ -2545,14 +2800,40 @@ function Indicator({
|
|
|
2545
2800
|
customColor,
|
|
2546
2801
|
glow = false,
|
|
2547
2802
|
ring = false,
|
|
2803
|
+
pulse = false,
|
|
2548
2804
|
className,
|
|
2549
2805
|
style,
|
|
2550
2806
|
...props
|
|
2551
2807
|
}) {
|
|
2808
|
+
const pulseMode = pulse === true ? "opacity" : pulse || false;
|
|
2809
|
+
const colorClass = !customColor ? colorStyles[color] : void 0;
|
|
2810
|
+
const colorStyle = customColor ? { backgroundColor: customColor } : void 0;
|
|
2811
|
+
if (pulseMode === "ping") {
|
|
2812
|
+
return /* @__PURE__ */ jsxs(reactNative.View, { className: cn("relative", sizeStyles3[size], className), style, ...props, children: [
|
|
2813
|
+
/* @__PURE__ */ jsx(
|
|
2814
|
+
reactNative.View,
|
|
2815
|
+
{
|
|
2816
|
+
className: cn("absolute inset-0 rounded-full animate-ping", colorClass),
|
|
2817
|
+
style: colorStyle
|
|
2818
|
+
}
|
|
2819
|
+
),
|
|
2820
|
+
/* @__PURE__ */ jsx(
|
|
2821
|
+
reactNative.View,
|
|
2822
|
+
{
|
|
2823
|
+
className: cn(
|
|
2824
|
+
"relative rounded-full",
|
|
2825
|
+
sizeStyles3[size],
|
|
2826
|
+
colorClass,
|
|
2827
|
+
ring && "border-2 border-background-base"
|
|
2828
|
+
),
|
|
2829
|
+
style: colorStyle
|
|
2830
|
+
}
|
|
2831
|
+
)
|
|
2832
|
+
] });
|
|
2833
|
+
}
|
|
2552
2834
|
const dynamicStyle = {
|
|
2553
2835
|
...typeof style === "object" ? style : {},
|
|
2554
|
-
...
|
|
2555
|
-
...glow && !customColor ? {} : {},
|
|
2836
|
+
...colorStyle ?? {},
|
|
2556
2837
|
...glow && customColor ? { boxShadow: `0 0 6px ${customColor}` } : {}
|
|
2557
2838
|
};
|
|
2558
2839
|
return /* @__PURE__ */ jsx(
|
|
@@ -2561,12 +2842,14 @@ function Indicator({
|
|
|
2561
2842
|
className: cn(
|
|
2562
2843
|
"rounded-full shrink-0",
|
|
2563
2844
|
sizeStyles3[size],
|
|
2564
|
-
|
|
2845
|
+
colorClass,
|
|
2846
|
+
pulseMode === "opacity" && "animate-pulse",
|
|
2565
2847
|
ring && "border-2 border-background-base",
|
|
2566
|
-
glow && !customColor && color === "success" && "shadow-[0_0_6px_rgba(
|
|
2848
|
+
glow && !customColor && color === "success" && "shadow-[0_0_6px_rgba(46,213,115,0.6)]",
|
|
2567
2849
|
glow && !customColor && color === "error" && "shadow-[0_0_6px_rgba(239,68,68,0.6)]",
|
|
2568
2850
|
glow && !customColor && color === "warning" && "shadow-[0_0_6px_rgba(245,158,11,0.6)]",
|
|
2569
2851
|
glow && !customColor && color === "primary" && "shadow-[0_0_6px_rgba(255,121,0,0.6)]",
|
|
2852
|
+
glow && !customColor && color === "error-vivid" && "shadow-[0_0_6px_rgba(255,71,87,0.6)]",
|
|
2570
2853
|
className
|
|
2571
2854
|
),
|
|
2572
2855
|
style: Object.keys(dynamicStyle).length > 0 ? dynamicStyle : style,
|
|
@@ -2647,6 +2930,13 @@ function Badge({
|
|
|
2647
2930
|
function BadgeText({ children, className }) {
|
|
2648
2931
|
return /* @__PURE__ */ jsx(reactNative.Text, { className: cn("text-inherit font-medium", className), children });
|
|
2649
2932
|
}
|
|
2933
|
+
|
|
2934
|
+
// src/theme/extracted-colors-ui.ts
|
|
2935
|
+
var SPINNER_PRIMARY = primitiveRamps.cyan[600];
|
|
2936
|
+
var SPINNER_SECONDARY = primitiveRamps.green[400];
|
|
2937
|
+
var AVATAR_CATEGORICAL_COLORS = categoricalPalette.default;
|
|
2938
|
+
|
|
2939
|
+
// src/components/ui/spinner/Spinner.tsx
|
|
2650
2940
|
var sizeMap = {
|
|
2651
2941
|
sm: "small",
|
|
2652
2942
|
md: "small",
|
|
@@ -2654,8 +2944,8 @@ var sizeMap = {
|
|
|
2654
2944
|
xl: "large"
|
|
2655
2945
|
};
|
|
2656
2946
|
var colorMap = {
|
|
2657
|
-
primary:
|
|
2658
|
-
secondary:
|
|
2947
|
+
primary: SPINNER_PRIMARY,
|
|
2948
|
+
secondary: SPINNER_SECONDARY,
|
|
2659
2949
|
white: "#FFFFFF",
|
|
2660
2950
|
default: "#6B7280"
|
|
2661
2951
|
};
|
|
@@ -2691,15 +2981,7 @@ function Spinner({
|
|
|
2691
2981
|
}
|
|
2692
2982
|
|
|
2693
2983
|
// src/utils/avatar-color.ts
|
|
2694
|
-
var AVATAR_COLORS =
|
|
2695
|
-
"#FF6B6B",
|
|
2696
|
-
"#4ECDC4",
|
|
2697
|
-
"#45B7D1",
|
|
2698
|
-
"#96CEB4",
|
|
2699
|
-
"#FFEAA7",
|
|
2700
|
-
"#DDA0DD",
|
|
2701
|
-
"#98D8C8"
|
|
2702
|
-
];
|
|
2984
|
+
var AVATAR_COLORS = AVATAR_CATEGORICAL_COLORS;
|
|
2703
2985
|
function avatarColor(name) {
|
|
2704
2986
|
let hash = 0;
|
|
2705
2987
|
for (let i = 0; i < name.length; i++) {
|
|
@@ -4344,7 +4626,7 @@ function ToolbarButton({
|
|
|
4344
4626
|
const selected = isActive === void 0 ? isOpen : isActive;
|
|
4345
4627
|
const showActive = isActive !== false;
|
|
4346
4628
|
const getIconColor = () => {
|
|
4347
|
-
if (isActive === true) return "
|
|
4629
|
+
if (isActive === true) return resolveColor("brand-primary");
|
|
4348
4630
|
return showActive ? "#FFFFFF" : "#D1D1D1";
|
|
4349
4631
|
};
|
|
4350
4632
|
const getNeumorphicStyle = () => {
|
|
@@ -4987,7 +5269,7 @@ function ToastProvider({
|
|
|
4987
5269
|
return id;
|
|
4988
5270
|
}, [defaultDuration, maxToasts]);
|
|
4989
5271
|
const removeToast = React24.useCallback((id) => {
|
|
4990
|
-
setToasts((prev) => prev.filter((
|
|
5272
|
+
setToasts((prev) => prev.filter((t12) => t12.id !== id));
|
|
4991
5273
|
}, []);
|
|
4992
5274
|
const removeAllToasts = React24.useCallback(() => {
|
|
4993
5275
|
setToasts([]);
|
|
@@ -5869,7 +6151,10 @@ var variantStyles4 = {
|
|
|
5869
6151
|
subtitle2: "font-body text-sm font-medium leading-normal",
|
|
5870
6152
|
caption: "font-body text-xs font-normal leading-loose",
|
|
5871
6153
|
overline: "font-body text-xs font-semibold uppercase tracking-widest leading-relaxed",
|
|
5872
|
-
button: "font-sans text-sm font-semibold leading-relaxed"
|
|
6154
|
+
button: "font-sans text-sm font-semibold leading-relaxed",
|
|
6155
|
+
// Monospace technical readouts (clocks, ids, metrics) and their all-caps label form.
|
|
6156
|
+
mono: "font-mono text-xs font-normal leading-normal",
|
|
6157
|
+
monoLabel: "font-mono text-xs font-bold uppercase tracking-wide leading-normal"
|
|
5873
6158
|
};
|
|
5874
6159
|
var colorStyles7 = {
|
|
5875
6160
|
primary: "text-text-primary",
|
|
@@ -6558,7 +6843,7 @@ var colorStyles8 = {
|
|
|
6558
6843
|
tertiary: "text-text-tertiary",
|
|
6559
6844
|
inherit: ""
|
|
6560
6845
|
};
|
|
6561
|
-
function formatDate(value, format, isUTC) {
|
|
6846
|
+
function formatDate(value, format, isUTC, hour12, seconds) {
|
|
6562
6847
|
const date = value instanceof Date ? value : new Date(value);
|
|
6563
6848
|
if (isNaN(date.getTime())) {
|
|
6564
6849
|
return "Invalid Date";
|
|
@@ -6608,6 +6893,12 @@ function formatDate(value, format, isUTC) {
|
|
|
6608
6893
|
if (isUTC) {
|
|
6609
6894
|
options.timeZone = "UTC";
|
|
6610
6895
|
}
|
|
6896
|
+
if (hour12 !== void 0 && (options.hour !== void 0 || options.minute !== void 0)) {
|
|
6897
|
+
options.hour12 = hour12;
|
|
6898
|
+
}
|
|
6899
|
+
if (seconds && options.hour !== void 0) {
|
|
6900
|
+
options.second = "2-digit";
|
|
6901
|
+
}
|
|
6611
6902
|
return new Intl.DateTimeFormat(void 0, options).format(date);
|
|
6612
6903
|
}
|
|
6613
6904
|
function getRelativeTime(date) {
|
|
@@ -6677,16 +6968,28 @@ function DateTime({
|
|
|
6677
6968
|
format = "datetime",
|
|
6678
6969
|
customFormat,
|
|
6679
6970
|
isUTC = false,
|
|
6971
|
+
hour12,
|
|
6972
|
+
seconds,
|
|
6973
|
+
variant,
|
|
6974
|
+
live = false,
|
|
6975
|
+
refreshMs = 1e3,
|
|
6680
6976
|
fallback = "-",
|
|
6681
6977
|
color = "inherit",
|
|
6682
6978
|
className,
|
|
6683
6979
|
...props
|
|
6684
6980
|
}) {
|
|
6685
|
-
|
|
6686
|
-
|
|
6981
|
+
const [now, setNow] = React24.useState(() => Date.now());
|
|
6982
|
+
React24.useEffect(() => {
|
|
6983
|
+
if (!live) return;
|
|
6984
|
+
const id = setInterval(() => setNow(Date.now()), refreshMs);
|
|
6985
|
+
return () => clearInterval(id);
|
|
6986
|
+
}, [live, refreshMs]);
|
|
6987
|
+
const effectiveValue = live ? now : value;
|
|
6988
|
+
const text = effectiveValue === null || effectiveValue === void 0 ? fallback : formatDate(effectiveValue, format, isUTC, hour12, seconds);
|
|
6989
|
+
if (variant) {
|
|
6990
|
+
return /* @__PURE__ */ jsx(Typography, { variant, color, className, ...props, children: text });
|
|
6687
6991
|
}
|
|
6688
|
-
|
|
6689
|
-
return /* @__PURE__ */ jsx(reactNative.Text, { className: cn(colorStyles8[color], className), ...props, children: formattedDate });
|
|
6992
|
+
return /* @__PURE__ */ jsx(reactNative.Text, { className: cn(colorStyles8[color], className), ...props, children: text });
|
|
6690
6993
|
}
|
|
6691
6994
|
function formatDateTime(value, format = "datetime", isUTC = false, fallback = "-") {
|
|
6692
6995
|
if (value === null || value === void 0) {
|
|
@@ -6822,58 +7125,6 @@ function BaseBadge({
|
|
|
6822
7125
|
}
|
|
6823
7126
|
return badge;
|
|
6824
7127
|
}
|
|
6825
|
-
|
|
6826
|
-
// src/components/custom/Workout/icons.tsx
|
|
6827
|
-
function DumbbellIcon({
|
|
6828
|
-
size = 24,
|
|
6829
|
-
color = "currentColor",
|
|
6830
|
-
fill = "none",
|
|
6831
|
-
strokeWidth = 2
|
|
6832
|
-
}) {
|
|
6833
|
-
return /* @__PURE__ */ jsxs(
|
|
6834
|
-
"svg",
|
|
6835
|
-
{
|
|
6836
|
-
width: size,
|
|
6837
|
-
height: size,
|
|
6838
|
-
viewBox: "0 0 24 24",
|
|
6839
|
-
fill,
|
|
6840
|
-
stroke: color,
|
|
6841
|
-
strokeWidth,
|
|
6842
|
-
strokeLinecap: "round",
|
|
6843
|
-
strokeLinejoin: "round",
|
|
6844
|
-
children: [
|
|
6845
|
-
/* @__PURE__ */ jsx("path", { d: "M14.4 14.4 9.6 9.6" }),
|
|
6846
|
-
/* @__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" }),
|
|
6847
|
-
/* @__PURE__ */ jsx("path", { d: "m21.5 21.5-1.4-1.4" }),
|
|
6848
|
-
/* @__PURE__ */ jsx("path", { d: "M3.9 3.9 2.5 2.5" }),
|
|
6849
|
-
/* @__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" })
|
|
6850
|
-
]
|
|
6851
|
-
}
|
|
6852
|
-
);
|
|
6853
|
-
}
|
|
6854
|
-
function StarIcon({
|
|
6855
|
-
size = 24,
|
|
6856
|
-
color = "currentColor",
|
|
6857
|
-
fill = "none",
|
|
6858
|
-
strokeWidth = 2
|
|
6859
|
-
}) {
|
|
6860
|
-
return /* @__PURE__ */ jsx(
|
|
6861
|
-
"svg",
|
|
6862
|
-
{
|
|
6863
|
-
width: size,
|
|
6864
|
-
height: size,
|
|
6865
|
-
viewBox: "0 0 24 24",
|
|
6866
|
-
fill,
|
|
6867
|
-
stroke: color,
|
|
6868
|
-
strokeWidth,
|
|
6869
|
-
strokeLinecap: "round",
|
|
6870
|
-
strokeLinejoin: "round",
|
|
6871
|
-
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" })
|
|
6872
|
-
}
|
|
6873
|
-
);
|
|
6874
|
-
}
|
|
6875
|
-
|
|
6876
|
-
// src/components/custom/Workout/WeightBadge.tsx
|
|
6877
7128
|
function WeightBadge({
|
|
6878
7129
|
value,
|
|
6879
7130
|
unit = "lbs",
|
|
@@ -6887,7 +7138,7 @@ function WeightBadge({
|
|
|
6887
7138
|
...props
|
|
6888
7139
|
}) {
|
|
6889
7140
|
const config = baseBadgeSizeConfig[size];
|
|
6890
|
-
const textColor = isPr ? "
|
|
7141
|
+
const textColor = isPr ? getSemanticColors("dark")["brand-primary"] : "#9CA3AF";
|
|
6891
7142
|
const iconColor = textColor;
|
|
6892
7143
|
const repMaxClause = reps != null ? `${reps} rep max` : "Estimated one rep max";
|
|
6893
7144
|
const deltaLabel = delta != null ? `, ${delta >= 0 ? "+" : ""}${delta}% change` : "";
|
|
@@ -6946,7 +7197,7 @@ function WeightBadge({
|
|
|
6946
7197
|
fontFamily: '"Space Grotesk", sans-serif',
|
|
6947
7198
|
fontSize: config.fontSize,
|
|
6948
7199
|
marginLeft: 4,
|
|
6949
|
-
color: delta >= 0 ? "
|
|
7200
|
+
color: delta >= 0 ? getSemanticColors("dark")["result-improve"] : getSemanticColors("dark")["result-degrade"]
|
|
6950
7201
|
},
|
|
6951
7202
|
testID: "weight-badge-delta",
|
|
6952
7203
|
children: [
|
|
@@ -6960,6 +7211,7 @@ function WeightBadge({
|
|
|
6960
7211
|
}
|
|
6961
7212
|
);
|
|
6962
7213
|
}
|
|
7214
|
+
var BRAND_PRIMARY = getSemanticColors("dark")["brand-primary"];
|
|
6963
7215
|
var typeLabels = {
|
|
6964
7216
|
e1rm: "PR e1RM",
|
|
6965
7217
|
weight: "PR Weight",
|
|
@@ -7003,7 +7255,7 @@ function PrBadge({
|
|
|
7003
7255
|
accessibilityLabel: `Personal record: ${resolvedLabel}`,
|
|
7004
7256
|
testID: "pr-badge-star",
|
|
7005
7257
|
...props,
|
|
7006
|
-
children: /* @__PURE__ */ jsx(StarIcon, { size: 14, color:
|
|
7258
|
+
children: /* @__PURE__ */ jsx(StarIcon, { size: 14, color: BRAND_PRIMARY, fill: BRAND_PRIMARY, strokeWidth: 2 })
|
|
7007
7259
|
}
|
|
7008
7260
|
) : /* @__PURE__ */ jsx(
|
|
7009
7261
|
BaseBadge,
|
|
@@ -7017,7 +7269,7 @@ function PrBadge({
|
|
|
7017
7269
|
{
|
|
7018
7270
|
style: {
|
|
7019
7271
|
fontSize: 12,
|
|
7020
|
-
color:
|
|
7272
|
+
color: BRAND_PRIMARY,
|
|
7021
7273
|
fontWeight: "700",
|
|
7022
7274
|
fontFamily: "Inter, sans-serif"
|
|
7023
7275
|
},
|
|
@@ -7042,17 +7294,18 @@ function PrBadge({
|
|
|
7042
7294
|
}
|
|
7043
7295
|
return badge;
|
|
7044
7296
|
}
|
|
7297
|
+
var t = getSemanticColors("dark");
|
|
7045
7298
|
var solidVariantColors = {
|
|
7046
|
-
success: "
|
|
7047
|
-
warning: "
|
|
7048
|
-
error: "
|
|
7299
|
+
success: t["status-success"],
|
|
7300
|
+
warning: t["status-warning"],
|
|
7301
|
+
error: t["status-error"],
|
|
7049
7302
|
neutral: "#6B7280"
|
|
7050
7303
|
};
|
|
7051
7304
|
var ringVariantStyles = {
|
|
7052
7305
|
"on-track": {
|
|
7053
|
-
backgroundColor: "rgba(
|
|
7306
|
+
backgroundColor: "rgba(46,213,115,0.15)",
|
|
7054
7307
|
borderWidth: 1,
|
|
7055
|
-
borderColor: "rgba(
|
|
7308
|
+
borderColor: "rgba(46,213,115,0.3)"
|
|
7056
7309
|
},
|
|
7057
7310
|
deviation: {
|
|
7058
7311
|
backgroundColor: "rgba(245,158,11,0.15)",
|
|
@@ -7067,11 +7320,11 @@ var ringVariantStyles = {
|
|
|
7067
7320
|
}
|
|
7068
7321
|
};
|
|
7069
7322
|
var glowStyles = {
|
|
7070
|
-
success: { boxShadow: "0 0 4px rgba(
|
|
7323
|
+
success: { boxShadow: "0 0 4px rgba(46,213,115,0.4)" },
|
|
7071
7324
|
warning: { boxShadow: "0 0 4px rgba(245,158,11,0.4)" },
|
|
7072
7325
|
error: { boxShadow: "0 0 4px rgba(239,68,68,0.4)" },
|
|
7073
7326
|
neutral: { boxShadow: "0 0 4px rgba(107,114,128,0.4)" },
|
|
7074
|
-
"on-track": { boxShadow: "0 0 4px rgba(
|
|
7327
|
+
"on-track": { boxShadow: "0 0 4px rgba(46,213,115,0.4)" },
|
|
7075
7328
|
deviation: { boxShadow: "0 0 4px rgba(245,158,11,0.4)" },
|
|
7076
7329
|
future: { boxShadow: "0 0 4px rgba(107,114,128,0.4)" }
|
|
7077
7330
|
};
|
|
@@ -7085,8 +7338,8 @@ var iconColors2 = {
|
|
|
7085
7338
|
warning: "#6B4000",
|
|
7086
7339
|
error: "#5C1A1A",
|
|
7087
7340
|
neutral: "#D1D5DB",
|
|
7088
|
-
"on-track": "
|
|
7089
|
-
deviation: "
|
|
7341
|
+
"on-track": t["status-success"],
|
|
7342
|
+
deviation: t["status-warning"],
|
|
7090
7343
|
future: "#6B7280"
|
|
7091
7344
|
};
|
|
7092
7345
|
var sizeDimensions = {
|
|
@@ -7173,17 +7426,41 @@ var WORKOUT_TOKENS = {
|
|
|
7173
7426
|
// Canonical 4-band performance scale — the single source for BOTH the
|
|
7174
7427
|
// VelocityStrip zone bars and the SetRow RPE color (TD-03.43). The direction
|
|
7175
7428
|
// is intentionally inverted between the two consumers: for velocity, green =
|
|
7176
|
-
// fastest/best; for RPE, green = easiest.
|
|
7177
|
-
//
|
|
7178
|
-
//
|
|
7179
|
-
// scale below — they are consumed inline as a JS import rather than CSS vars.
|
|
7180
|
-
// A JS import also resolves on native RN, unlike var(--…) strings.
|
|
7429
|
+
// fastest/best; for RPE, green = easiest. This is the [0,1,2,4] subsample of
|
|
7430
|
+
// the canonical `sequentialEffort` primitive. The `orange` key is the band
|
|
7431
|
+
// label. Consumed inline (RN).
|
|
7181
7432
|
scale: {
|
|
7182
|
-
green:
|
|
7183
|
-
yellow:
|
|
7184
|
-
orange:
|
|
7185
|
-
|
|
7433
|
+
green: sequentialEffort[0],
|
|
7434
|
+
yellow: sequentialEffort[1],
|
|
7435
|
+
orange: sequentialEffort[2],
|
|
7436
|
+
// gold band
|
|
7437
|
+
red: sequentialEffort[4]
|
|
7438
|
+
},
|
|
7439
|
+
// BodyMap volume heatmap — the canonical `divergingScale` (under → optimal →
|
|
7440
|
+
// over): a true diverging shape with a light green center, cool-blue under-
|
|
7441
|
+
// trained end and warm-red over-reaching end (colorblind-robust in lightness).
|
|
7442
|
+
heatmap: {
|
|
7443
|
+
// no training data
|
|
7444
|
+
under: divergingScale[0],
|
|
7445
|
+
// below MEV
|
|
7446
|
+
maintenance: divergingScale[1],
|
|
7447
|
+
// MEV to MAV
|
|
7448
|
+
productive: divergingScale[2],
|
|
7449
|
+
// optimal center — MAV to MRV
|
|
7450
|
+
approaching: divergingScale[3],
|
|
7451
|
+
// near MRV
|
|
7452
|
+
over: divergingScale[4]
|
|
7453
|
+
// over MRV
|
|
7186
7454
|
},
|
|
7455
|
+
// Surface and border colors were removed here: those flip with the theme, so
|
|
7456
|
+
// components use the CSS custom properties (var(--color-surface-*/border-*))
|
|
7457
|
+
// directly. Only theme-independent data-viz values remain below.
|
|
7458
|
+
// Intensity bar specific — over-target tiers deepen along the red ramp.
|
|
7459
|
+
intensity: {
|
|
7460
|
+
over1: primitiveRamps.red[600],
|
|
7461
|
+
// matches status-error
|
|
7462
|
+
over2: primitiveRamps.red[700],
|
|
7463
|
+
over3: primitiveRamps.red[800]},
|
|
7187
7464
|
// Placeholder strip
|
|
7188
7465
|
placeholder: {
|
|
7189
7466
|
fill: "#3A3A3A"
|
|
@@ -7358,7 +7635,7 @@ function getLuminance(color) {
|
|
|
7358
7635
|
function getContrastText(backgroundColor) {
|
|
7359
7636
|
return getLuminance(backgroundColor) === "light" ? "#000000" : "#FFFFFF";
|
|
7360
7637
|
}
|
|
7361
|
-
var
|
|
7638
|
+
var t2 = getSemanticColors("dark");
|
|
7362
7639
|
var TEMPO_PACING = {
|
|
7363
7640
|
behindThresholdPct: 0.15,
|
|
7364
7641
|
minPhaseDurationMs: 500
|
|
@@ -7375,9 +7652,9 @@ function getTempoFillPct(elapsedMs, targetMs) {
|
|
|
7375
7652
|
}
|
|
7376
7653
|
var PHASE_ORDER = ["concentric", "hold", "eccentric"];
|
|
7377
7654
|
var PHASE_CONFIG = {
|
|
7378
|
-
concentric: { label: "Con", color:
|
|
7379
|
-
hold: { label: "Hold", color:
|
|
7380
|
-
eccentric: { label: "Ecc", color:
|
|
7655
|
+
concentric: { label: "Con", color: t2["status-success"], flex: 2 },
|
|
7656
|
+
hold: { label: "Hold", color: t2["brand-primary"], flex: 1 },
|
|
7657
|
+
eccentric: { label: "Ecc", color: t2["status-warning"], flex: 3 }
|
|
7381
7658
|
};
|
|
7382
7659
|
function TempoBar({
|
|
7383
7660
|
activePhase,
|
|
@@ -7390,7 +7667,7 @@ function TempoBar({
|
|
|
7390
7667
|
return /* @__PURE__ */ jsxs(reactNative.View, { className, testID: "tempo-bar", ...props, children: [
|
|
7391
7668
|
/* @__PURE__ */ jsx(reactNative.View, { style: { flexDirection: "row", marginBottom: 4 }, children: PHASE_ORDER.map((phase) => {
|
|
7392
7669
|
const config = PHASE_CONFIG[phase];
|
|
7393
|
-
return /* @__PURE__ */ jsx(reactNative.View, { style: { flex: config.flex, alignItems: "center" }, children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, color:
|
|
7670
|
+
return /* @__PURE__ */ jsx(reactNative.View, { style: { flex: config.flex, alignItems: "center" }, children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, color: t2["text-disabled"] }, children: config.label }) }, phase);
|
|
7394
7671
|
}) }),
|
|
7395
7672
|
/* @__PURE__ */ jsx(reactNative.View, { style: { flexDirection: "row", gap: 2, height: 20 }, children: PHASE_ORDER.map((phase) => {
|
|
7396
7673
|
const config = PHASE_CONFIG[phase];
|
|
@@ -7427,7 +7704,7 @@ function ActiveSegment({
|
|
|
7427
7704
|
targetMs
|
|
7428
7705
|
}) {
|
|
7429
7706
|
const pacing = getTempoPacingState(phaseElapsedMs, targetMs);
|
|
7430
|
-
const barColor = pacing === "behind" ?
|
|
7707
|
+
const barColor = pacing === "behind" ? t2["status-error"] : config.color;
|
|
7431
7708
|
const fillPct = getTempoFillPct(phaseElapsedMs, targetMs);
|
|
7432
7709
|
const label = targetMs ? `${formatDuration(phaseElapsedMs)} / ${formatDuration(targetMs)}` : formatDuration(phaseElapsedMs);
|
|
7433
7710
|
return /* @__PURE__ */ jsxs(reactNative.View, { style: { height: "100%", position: "relative" }, testID: `tempo-segment-active-${config.label}`, children: [
|
|
@@ -7491,15 +7768,14 @@ function formatDuration(ms) {
|
|
|
7491
7768
|
}
|
|
7492
7769
|
|
|
7493
7770
|
// src/components/custom/Workout/TempoDisplay.tsx
|
|
7771
|
+
var t3 = getSemanticColors("dark");
|
|
7494
7772
|
var INTER = "Inter, sans-serif";
|
|
7495
7773
|
var TEXT_TERTIARY = "#6B7280";
|
|
7496
|
-
var STATUS_ERROR = "
|
|
7774
|
+
var STATUS_ERROR = t3["status-error"];
|
|
7497
7775
|
var phaseColors = {
|
|
7498
|
-
eccentric: "
|
|
7499
|
-
// status-warning (amber)
|
|
7776
|
+
eccentric: t3["status-warning"],
|
|
7500
7777
|
pauseBottom: TEXT_TERTIARY,
|
|
7501
|
-
concentric: "
|
|
7502
|
-
// status-success (teal)
|
|
7778
|
+
concentric: t3["status-success"],
|
|
7503
7779
|
pauseTop: TEXT_TERTIARY,
|
|
7504
7780
|
dash: TEXT_TERTIARY
|
|
7505
7781
|
};
|
|
@@ -7764,12 +8040,13 @@ function TempoDisplay({
|
|
|
7764
8040
|
}
|
|
7765
8041
|
);
|
|
7766
8042
|
}
|
|
8043
|
+
var t4 = getSemanticColors("dark");
|
|
7767
8044
|
function getDotColor(deviation) {
|
|
7768
8045
|
const abs = Math.abs(deviation);
|
|
7769
|
-
if (deviation < -0.3) return "
|
|
8046
|
+
if (deviation < -0.3) return t4["status-success"];
|
|
7770
8047
|
if (abs <= 0.3) return "#6B7280";
|
|
7771
|
-
if (abs <= 0.7) return "
|
|
7772
|
-
return "
|
|
8048
|
+
if (abs <= 0.7) return t4["status-warning"];
|
|
8049
|
+
return t4["status-error"];
|
|
7773
8050
|
}
|
|
7774
8051
|
function getDeviationDescription(deviation) {
|
|
7775
8052
|
if (deviation < -0.3) return "lighter than planned";
|
|
@@ -7811,7 +8088,7 @@ function DeviationBar({
|
|
|
7811
8088
|
width: resolvedWidth,
|
|
7812
8089
|
borderRadius: 3,
|
|
7813
8090
|
// react-native-web renders backgroundImage at runtime; not in RN ViewStyle types
|
|
7814
|
-
backgroundImage: "linear-gradient(90deg, rgba(
|
|
8091
|
+
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%)"
|
|
7815
8092
|
}
|
|
7816
8093
|
}
|
|
7817
8094
|
),
|
|
@@ -7837,23 +8114,24 @@ function DeviationBar({
|
|
|
7837
8114
|
}
|
|
7838
8115
|
);
|
|
7839
8116
|
}
|
|
8117
|
+
var t5 = getSemanticColors("dark");
|
|
7840
8118
|
var TRACK_BG = "#333333";
|
|
7841
8119
|
var LABEL_COLOR = "#6B7280";
|
|
7842
8120
|
var TARGET_LINE_COLOR = "rgba(33, 150, 243, 0.5)";
|
|
7843
8121
|
var AT_TARGET_GLOW = "0 0 5px 1px rgba(33, 150, 243, 0.35), 0 0 10px 3px rgba(33, 150, 243, 0.15)";
|
|
7844
8122
|
var ZONE = {
|
|
7845
|
-
building: "
|
|
7846
|
-
//
|
|
7847
|
-
approaching: "
|
|
7848
|
-
//
|
|
7849
|
-
target: "
|
|
7850
|
-
//
|
|
7851
|
-
over1: "
|
|
7852
|
-
//
|
|
7853
|
-
over2:
|
|
7854
|
-
//
|
|
7855
|
-
over3:
|
|
7856
|
-
//
|
|
8123
|
+
building: t5["status-success"],
|
|
8124
|
+
// below target ramp-up
|
|
8125
|
+
approaching: t5["status-warning"],
|
|
8126
|
+
// nearing target
|
|
8127
|
+
target: t5["brand-primary"],
|
|
8128
|
+
// exactly at target
|
|
8129
|
+
over1: t5["status-error"],
|
|
8130
|
+
// mild over-target
|
|
8131
|
+
over2: WORKOUT_TOKENS.intensity.over2,
|
|
8132
|
+
// moderate over-target
|
|
8133
|
+
over3: WORKOUT_TOKENS.intensity.over3
|
|
8134
|
+
// severe over-target
|
|
7857
8135
|
};
|
|
7858
8136
|
var BULGE_SIZE = { 1: 8, 2: 10, 3: 11 };
|
|
7859
8137
|
function zoneForPct(pct) {
|
|
@@ -8009,29 +8287,38 @@ function IntensityBar({
|
|
|
8009
8287
|
}
|
|
8010
8288
|
);
|
|
8011
8289
|
}
|
|
8290
|
+
|
|
8291
|
+
// src/theme/extracted-colors-dataviz.ts
|
|
8292
|
+
var DATAVIZ_CATEGORICAL_PALETTE = categoricalPalette.default;
|
|
8293
|
+
var MESO_ACCENT_GRADIENT_DARK = primitiveRamps.orange[500];
|
|
8294
|
+
var MESO_ACCENT_GRADIENT_LIGHT = primitiveRamps.orange[300];
|
|
8295
|
+
var WORKOUT_PILL_DELOAD = primitiveRamps.magenta[600];
|
|
8296
|
+
|
|
8297
|
+
// src/components/custom/Workout/WorkoutPill.tsx
|
|
8298
|
+
var t6 = getSemanticColors("dark");
|
|
8012
8299
|
var statusBgColors = {
|
|
8013
|
-
completed: "rgba(
|
|
8300
|
+
completed: "rgba(46,213,115,0.15)",
|
|
8014
8301
|
current: "rgba(255,121,0,0.15)",
|
|
8015
8302
|
next: "transparent",
|
|
8016
8303
|
upcoming: "#1C1C1C",
|
|
8017
8304
|
missed: "rgba(209,67,67,0.1)",
|
|
8018
|
-
deload: "rgba(
|
|
8305
|
+
deload: "rgba(186,41,150,0.15)"
|
|
8019
8306
|
};
|
|
8020
8307
|
var statusBorderStyles = {
|
|
8021
|
-
completed: { borderWidth: 1, borderColor: "rgba(
|
|
8308
|
+
completed: { borderWidth: 1, borderColor: "rgba(46,213,115,0.3)" },
|
|
8022
8309
|
current: { borderWidth: 1, borderColor: "rgba(255,121,0,0.3)" },
|
|
8023
8310
|
next: { borderWidth: 1, borderColor: "rgba(255,121,0,0.4)" },
|
|
8024
8311
|
upcoming: { borderWidth: 1, borderColor: "#1F1F1F" },
|
|
8025
8312
|
missed: { borderWidth: 1, borderColor: "rgba(209,67,67,0.25)" },
|
|
8026
|
-
deload: { borderWidth: 1, borderColor: "rgba(
|
|
8313
|
+
deload: { borderWidth: 1, borderColor: "rgba(186,41,150,0.3)" }
|
|
8027
8314
|
};
|
|
8028
8315
|
var textColors = {
|
|
8029
|
-
completed: "
|
|
8030
|
-
current: "
|
|
8031
|
-
next: "
|
|
8316
|
+
completed: t6["status-success"],
|
|
8317
|
+
current: t6["brand-primary"],
|
|
8318
|
+
next: t6["brand-primary"],
|
|
8032
8319
|
upcoming: "#6B7280",
|
|
8033
8320
|
missed: "rgba(209,67,67,0.7)",
|
|
8034
|
-
deload:
|
|
8321
|
+
deload: WORKOUT_PILL_DELOAD
|
|
8035
8322
|
};
|
|
8036
8323
|
function usePulse(enabled) {
|
|
8037
8324
|
const [opacity] = React24.useState(() => new reactNative.Animated.Value(1));
|
|
@@ -8506,12 +8793,13 @@ function VelocityStrip({
|
|
|
8506
8793
|
}
|
|
8507
8794
|
return stripContent;
|
|
8508
8795
|
}
|
|
8796
|
+
var t7 = getSemanticColors("dark");
|
|
8509
8797
|
var dotColorMap = {
|
|
8510
8798
|
untrained: "#2C2C2C",
|
|
8511
|
-
behind: "
|
|
8512
|
-
ontrack: "
|
|
8513
|
-
target: "
|
|
8514
|
-
over: "
|
|
8799
|
+
behind: t7["brand-secondary"],
|
|
8800
|
+
ontrack: t7["status-success"],
|
|
8801
|
+
target: t7["brand-primary"],
|
|
8802
|
+
over: t7["status-error"]
|
|
8515
8803
|
};
|
|
8516
8804
|
function MuscleGroupChip({
|
|
8517
8805
|
name,
|
|
@@ -8583,7 +8871,7 @@ function MuscleGroupChip({
|
|
|
8583
8871
|
}
|
|
8584
8872
|
return content;
|
|
8585
8873
|
}
|
|
8586
|
-
var
|
|
8874
|
+
var BRAND_PRIMARY2 = getSemanticColors("dark")["brand-primary"];
|
|
8587
8875
|
function normalizeData(data, height) {
|
|
8588
8876
|
if (data.length === 0) return [];
|
|
8589
8877
|
const min = Math.min(...data);
|
|
@@ -8620,7 +8908,7 @@ function Sparkline({
|
|
|
8620
8908
|
}
|
|
8621
8909
|
);
|
|
8622
8910
|
}
|
|
8623
|
-
const resolvedColor = color ??
|
|
8911
|
+
const resolvedColor = color ?? BRAND_PRIMARY2;
|
|
8624
8912
|
const normalized = normalizeData(data, height);
|
|
8625
8913
|
const stepX = data.length > 1 ? width / (data.length - 1) : 0;
|
|
8626
8914
|
const dotSize = 3;
|
|
@@ -8799,7 +9087,7 @@ function SetRow({
|
|
|
8799
9087
|
fontSize: 10,
|
|
8800
9088
|
fontWeight: "700",
|
|
8801
9089
|
fontFamily: "Inter, sans-serif",
|
|
8802
|
-
color:
|
|
9090
|
+
color: WORKOUT_TOKENS.scale.orange,
|
|
8803
9091
|
backgroundColor: "rgba(255,165,2,0.12)",
|
|
8804
9092
|
paddingVertical: 1,
|
|
8805
9093
|
paddingHorizontal: 5,
|
|
@@ -8965,7 +9253,7 @@ function SetRow({
|
|
|
8965
9253
|
}
|
|
8966
9254
|
);
|
|
8967
9255
|
}
|
|
8968
|
-
var
|
|
9256
|
+
var BRAND_PRIMARY3 = getSemanticColors("dark")["brand-primary"];
|
|
8969
9257
|
var INPUT_CLASSNAME = "bg-surface-raised border-border-strong text-text-primary";
|
|
8970
9258
|
var inputStyle = {
|
|
8971
9259
|
fontSize: 14,
|
|
@@ -9094,7 +9382,7 @@ function InputBar({
|
|
|
9094
9382
|
onPress: onRecord,
|
|
9095
9383
|
disabled: !canRecord,
|
|
9096
9384
|
style: ({ pressed }) => ({
|
|
9097
|
-
backgroundColor:
|
|
9385
|
+
backgroundColor: BRAND_PRIMARY3,
|
|
9098
9386
|
borderRadius: 8,
|
|
9099
9387
|
paddingVertical: 10,
|
|
9100
9388
|
paddingHorizontal: 16,
|
|
@@ -9121,7 +9409,7 @@ function InputBar({
|
|
|
9121
9409
|
}
|
|
9122
9410
|
);
|
|
9123
9411
|
}
|
|
9124
|
-
var
|
|
9412
|
+
var BRAND_PRIMARY4 = getSemanticColors("dark")["brand-primary"];
|
|
9125
9413
|
function RestTimer({
|
|
9126
9414
|
totalSeconds,
|
|
9127
9415
|
elapsedMs,
|
|
@@ -9227,7 +9515,7 @@ function RestTimer({
|
|
|
9227
9515
|
{
|
|
9228
9516
|
style: {
|
|
9229
9517
|
height: "100%",
|
|
9230
|
-
backgroundColor:
|
|
9518
|
+
backgroundColor: BRAND_PRIMARY4,
|
|
9231
9519
|
borderRadius: 2,
|
|
9232
9520
|
width: `${progressPct}%`
|
|
9233
9521
|
},
|
|
@@ -9284,7 +9572,7 @@ function RestTimer({
|
|
|
9284
9572
|
fontSize: 11,
|
|
9285
9573
|
fontFamily: "Inter, sans-serif",
|
|
9286
9574
|
fontWeight: "600",
|
|
9287
|
-
color:
|
|
9575
|
+
color: BRAND_PRIMARY4
|
|
9288
9576
|
},
|
|
9289
9577
|
children: "Skip"
|
|
9290
9578
|
}
|
|
@@ -9677,7 +9965,7 @@ function ExerciseCard(props) {
|
|
|
9677
9965
|
}
|
|
9678
9966
|
var DEFAULTS = {
|
|
9679
9967
|
label: "SS",
|
|
9680
|
-
color: "
|
|
9968
|
+
color: getSemanticColors("dark")["brand-primary"],
|
|
9681
9969
|
bgBase: "#101010"
|
|
9682
9970
|
};
|
|
9683
9971
|
function SupersetWrapper({
|
|
@@ -9728,9 +10016,9 @@ function SupersetWrapper({
|
|
|
9728
10016
|
}
|
|
9729
10017
|
);
|
|
9730
10018
|
}
|
|
9731
|
-
var
|
|
10019
|
+
var BRAND_PRIMARY5 = getSemanticColors("dark")["brand-primary"];
|
|
9732
10020
|
var segmentBgColors = {
|
|
9733
|
-
completed: "rgba(
|
|
10021
|
+
completed: "rgba(46,213,115,0.3)",
|
|
9734
10022
|
current: "rgba(255,121,0,0.5)",
|
|
9735
10023
|
upcoming: "rgba(255,255,255,0.06)"
|
|
9736
10024
|
};
|
|
@@ -9780,7 +10068,7 @@ function MesoSegment({ meso, isActive, onPress }) {
|
|
|
9780
10068
|
},
|
|
9781
10069
|
isActive ? {
|
|
9782
10070
|
borderWidth: 2,
|
|
9783
|
-
borderColor:
|
|
10071
|
+
borderColor: BRAND_PRIMARY5,
|
|
9784
10072
|
transform: [{ scale: 1.02 }, { scale: pressScale }]
|
|
9785
10073
|
} : void 0
|
|
9786
10074
|
],
|
|
@@ -9794,7 +10082,7 @@ function MesoSegment({ meso, isActive, onPress }) {
|
|
|
9794
10082
|
top: 0,
|
|
9795
10083
|
bottom: 0,
|
|
9796
10084
|
width: `${progress * 100}%`,
|
|
9797
|
-
backgroundColor:
|
|
10085
|
+
backgroundColor: BRAND_PRIMARY5
|
|
9798
10086
|
},
|
|
9799
10087
|
testID: `meso-segment-fill-${meso.id}`
|
|
9800
10088
|
}
|
|
@@ -9835,7 +10123,7 @@ function MesoProgressBar({
|
|
|
9835
10123
|
}
|
|
9836
10124
|
);
|
|
9837
10125
|
}
|
|
9838
|
-
var
|
|
10126
|
+
var BRAND_PRIMARY6 = getSemanticColors("dark")["brand-primary"];
|
|
9839
10127
|
function WeekRow({
|
|
9840
10128
|
weekNumber,
|
|
9841
10129
|
totalWeeks,
|
|
@@ -9855,12 +10143,12 @@ function WeekRow({
|
|
|
9855
10143
|
gap: 12
|
|
9856
10144
|
};
|
|
9857
10145
|
if (isDeload) {
|
|
9858
|
-
rowStyle.backgroundColor = "rgba(
|
|
10146
|
+
rowStyle.backgroundColor = "rgba(186,41,150,0.06)";
|
|
9859
10147
|
}
|
|
9860
10148
|
if (isCurrent) {
|
|
9861
10149
|
rowStyle.backgroundColor = "rgba(255,121,0,0.04)";
|
|
9862
10150
|
rowStyle.borderLeftWidth = 2;
|
|
9863
|
-
rowStyle.borderLeftColor =
|
|
10151
|
+
rowStyle.borderLeftColor = BRAND_PRIMARY6;
|
|
9864
10152
|
}
|
|
9865
10153
|
return /* @__PURE__ */ jsxs(
|
|
9866
10154
|
reactNative.View,
|
|
@@ -9884,7 +10172,7 @@ function WeekRow({
|
|
|
9884
10172
|
width: 6,
|
|
9885
10173
|
height: 6,
|
|
9886
10174
|
borderRadius: 3,
|
|
9887
|
-
backgroundColor:
|
|
10175
|
+
backgroundColor: BRAND_PRIMARY6
|
|
9888
10176
|
},
|
|
9889
10177
|
accessibilityElementsHidden: true,
|
|
9890
10178
|
testID: "week-row-current-dot"
|
|
@@ -9898,7 +10186,7 @@ function WeekRow({
|
|
|
9898
10186
|
fontSize: 13,
|
|
9899
10187
|
fontWeight: "700",
|
|
9900
10188
|
fontFamily: "Inter, sans-serif",
|
|
9901
|
-
color: isCurrent ?
|
|
10189
|
+
color: isCurrent ? BRAND_PRIMARY6 : void 0
|
|
9902
10190
|
},
|
|
9903
10191
|
accessibilityElementsHidden: true,
|
|
9904
10192
|
children: `W${weekNumber}`
|
|
@@ -9937,9 +10225,10 @@ function WeekRow({
|
|
|
9937
10225
|
}
|
|
9938
10226
|
);
|
|
9939
10227
|
}
|
|
10228
|
+
var t8 = getSemanticColors("dark");
|
|
9940
10229
|
var COLORS = {
|
|
9941
|
-
statusSuccess: "
|
|
9942
|
-
brandPrimary: "
|
|
10230
|
+
statusSuccess: t8["status-success"],
|
|
10231
|
+
brandPrimary: t8["brand-primary"],
|
|
9943
10232
|
borderDefault: "#1F1F1F",
|
|
9944
10233
|
brandPrimarySubtle: "rgba(255,121,0,0.06)"
|
|
9945
10234
|
};
|
|
@@ -10081,11 +10370,11 @@ function WorkoutCard({
|
|
|
10081
10370
|
}
|
|
10082
10371
|
);
|
|
10083
10372
|
}
|
|
10084
|
-
var
|
|
10085
|
-
var BRAND_PRIMARY_DARK =
|
|
10086
|
-
var BRAND_PRIMARY_LIGHT =
|
|
10373
|
+
var BRAND_PRIMARY7 = getSemanticColors("dark")["brand-primary"];
|
|
10374
|
+
var BRAND_PRIMARY_DARK = MESO_ACCENT_GRADIENT_DARK;
|
|
10375
|
+
var BRAND_PRIMARY_LIGHT = MESO_ACCENT_GRADIENT_LIGHT;
|
|
10087
10376
|
var BORDER_DEFAULT = "#1F1F1F";
|
|
10088
|
-
var ACCENT_STOPS = [BRAND_PRIMARY_DARK,
|
|
10377
|
+
var ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY7, BRAND_PRIMARY_LIGHT];
|
|
10089
10378
|
function heatmapColor(percentage) {
|
|
10090
10379
|
const clamped = Math.max(0, Math.min(100, percentage));
|
|
10091
10380
|
const opacity = 0.12 + clamped / 100 * 0.78;
|
|
@@ -10120,7 +10409,7 @@ function MesoCard({
|
|
|
10120
10409
|
}, [highlighted, highlight]);
|
|
10121
10410
|
const borderColor = highlight.interpolate({
|
|
10122
10411
|
inputRange: [0, 1],
|
|
10123
|
-
outputRange: [BORDER_DEFAULT,
|
|
10412
|
+
outputRange: [BORDER_DEFAULT, BRAND_PRIMARY7]
|
|
10124
10413
|
});
|
|
10125
10414
|
const header = /* @__PURE__ */ jsxs(reactNative.View, { style: { paddingHorizontal: 14, paddingTop: 12, paddingBottom: 10 }, testID: "meso-card-body", children: [
|
|
10126
10415
|
/* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 8 }, testID: "meso-card-header", children: [
|
|
@@ -10180,7 +10469,7 @@ function MesoCard({
|
|
|
10180
10469
|
{
|
|
10181
10470
|
variant: "outline",
|
|
10182
10471
|
elevation: 2,
|
|
10183
|
-
borderColor: highlighted ?
|
|
10472
|
+
borderColor: highlighted ? BRAND_PRIMARY7 : BORDER_DEFAULT,
|
|
10184
10473
|
className,
|
|
10185
10474
|
style: [
|
|
10186
10475
|
{ borderColor },
|
|
@@ -10237,9 +10526,9 @@ function MesoCard({
|
|
|
10237
10526
|
}
|
|
10238
10527
|
) });
|
|
10239
10528
|
}
|
|
10240
|
-
var
|
|
10241
|
-
var RECENT_BORDER = "rgba(
|
|
10242
|
-
var RECENT_GLOW = "0 0 12px rgba(
|
|
10529
|
+
var BRAND_PRIMARY8 = getSemanticColors("dark")["brand-primary"];
|
|
10530
|
+
var RECENT_BORDER = "rgba(249,180,21,0.3)";
|
|
10531
|
+
var RECENT_GLOW = "0 0 12px rgba(249,180,21,0.06)";
|
|
10243
10532
|
var BORDER_DEFAULT2 = resolveColor("border-default");
|
|
10244
10533
|
var TYPE_LABELS = {
|
|
10245
10534
|
e1rm: "e1RM",
|
|
@@ -10279,7 +10568,7 @@ function PrRecordRow({ record, index }) {
|
|
|
10279
10568
|
},
|
|
10280
10569
|
testID: `pr-history-modal-record-${index}`,
|
|
10281
10570
|
children: [
|
|
10282
|
-
/* @__PURE__ */ jsx(StarIcon, { size: 16, color:
|
|
10571
|
+
/* @__PURE__ */ jsx(StarIcon, { size: 16, color: BRAND_PRIMARY8, fill: BRAND_PRIMARY8, strokeWidth: 2 }),
|
|
10283
10572
|
/* @__PURE__ */ jsx(
|
|
10284
10573
|
reactNative.Text,
|
|
10285
10574
|
{
|
|
@@ -10423,11 +10712,12 @@ function PrHistoryModal({
|
|
|
10423
10712
|
}
|
|
10424
10713
|
);
|
|
10425
10714
|
}
|
|
10426
|
-
var
|
|
10715
|
+
var t9 = getSemanticColors("dark");
|
|
10716
|
+
var BRAND_PRIMARY9 = t9["brand-primary"];
|
|
10427
10717
|
var BRAND_PRIMARY_SUBTLE = "rgba(255,121,0,0.12)";
|
|
10428
|
-
var STATUS_SUCCESS = "
|
|
10429
|
-
var STATUS_WARNING = "
|
|
10430
|
-
var STATUS_ERROR2 = "
|
|
10718
|
+
var STATUS_SUCCESS = t9["status-success"];
|
|
10719
|
+
var STATUS_WARNING = t9["status-warning"];
|
|
10720
|
+
var STATUS_ERROR2 = t9["status-error"];
|
|
10431
10721
|
var EMOJI_SETS = {
|
|
10432
10722
|
sleep: ["\u{1F634}", "\u{1F610}", "\u{1F642}", "\u{1F60A}", "\u{1F929}"],
|
|
10433
10723
|
soreness: ["\u{1F635}", "\u{1F623}", "\u{1F610}", "\u{1F642}", "\u{1F4AA}"],
|
|
@@ -10491,7 +10781,7 @@ function EmojiSlider({ factor }) {
|
|
|
10491
10781
|
paddingVertical: 8,
|
|
10492
10782
|
borderRadius: 8,
|
|
10493
10783
|
borderWidth: 1,
|
|
10494
|
-
borderColor: selected ?
|
|
10784
|
+
borderColor: selected ? BRAND_PRIMARY9 : void 0,
|
|
10495
10785
|
backgroundColor: selected ? BRAND_PRIMARY_SUBTLE : void 0,
|
|
10496
10786
|
opacity: selected ? 1 : pressed ? 0.8 : 0.55,
|
|
10497
10787
|
transform: [{ scale: selected ? 1.06 : 1 }]
|
|
@@ -10607,7 +10897,7 @@ function ReadinessCheck({
|
|
|
10607
10897
|
marginTop: 16,
|
|
10608
10898
|
width: "100%",
|
|
10609
10899
|
alignItems: "center",
|
|
10610
|
-
backgroundColor:
|
|
10900
|
+
backgroundColor: BRAND_PRIMARY9,
|
|
10611
10901
|
borderRadius: 8,
|
|
10612
10902
|
paddingVertical: 12,
|
|
10613
10903
|
opacity: pressed ? 0.8 : 1
|
|
@@ -10617,18 +10907,19 @@ function ReadinessCheck({
|
|
|
10617
10907
|
)
|
|
10618
10908
|
] }) });
|
|
10619
10909
|
}
|
|
10620
|
-
var
|
|
10621
|
-
var
|
|
10622
|
-
var
|
|
10623
|
-
var
|
|
10624
|
-
var
|
|
10625
|
-
var
|
|
10626
|
-
var
|
|
10910
|
+
var t10 = getSemanticColors("dark");
|
|
10911
|
+
var BRAND_PRIMARY10 = t10["brand-primary"];
|
|
10912
|
+
var BRAND_PRIMARY_DARK2 = MESO_ACCENT_GRADIENT_DARK;
|
|
10913
|
+
var BRAND_PRIMARY_LIGHT2 = MESO_ACCENT_GRADIENT_LIGHT;
|
|
10914
|
+
var SUCCESS = t10["status-success"];
|
|
10915
|
+
var WARNING = t10["status-warning"];
|
|
10916
|
+
var ERROR = t10["status-error"];
|
|
10917
|
+
var ACCENT_STOPS2 = [BRAND_PRIMARY_DARK2, BRAND_PRIMARY10, BRAND_PRIMARY_LIGHT2];
|
|
10627
10918
|
var CARD_GRADIENT = `linear-gradient(135deg, ${resolveColor("surface-elevated")} 0%, ${resolveColor("surface-raised")} 100%)`;
|
|
10628
|
-
var GAUGE_GRADIENT = "linear-gradient(90deg, rgba(
|
|
10919
|
+
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%)";
|
|
10629
10920
|
var STATUS_VARIANTS = {
|
|
10630
|
-
success: { bg: "rgba(
|
|
10631
|
-
warning: { bg: "rgba(
|
|
10921
|
+
success: { bg: "rgba(46,213,115,0.15)", border: "rgba(46,213,115,0.3)", text: SUCCESS },
|
|
10922
|
+
warning: { bg: "rgba(249,180,21,0.15)", border: "rgba(249,180,21,0.3)", text: WARNING },
|
|
10632
10923
|
error: { bg: "rgba(209,67,67,0.15)", border: "rgba(209,67,67,0.25)", text: ERROR }
|
|
10633
10924
|
};
|
|
10634
10925
|
function clamp01(value) {
|
|
@@ -10920,9 +11211,9 @@ function MesoStatusCard({
|
|
|
10920
11211
|
reactNative.View,
|
|
10921
11212
|
{
|
|
10922
11213
|
style: {
|
|
10923
|
-
backgroundColor: "rgba(
|
|
11214
|
+
backgroundColor: "rgba(249,180,21,0.06)",
|
|
10924
11215
|
borderWidth: 1,
|
|
10925
|
-
borderColor: "rgba(
|
|
11216
|
+
borderColor: "rgba(249,180,21,0.15)",
|
|
10926
11217
|
borderRadius: 8,
|
|
10927
11218
|
paddingVertical: 10,
|
|
10928
11219
|
paddingHorizontal: 12
|
|
@@ -10948,9 +11239,9 @@ function MesoStatusCard({
|
|
|
10948
11239
|
className: "flex-row items-center",
|
|
10949
11240
|
style: {
|
|
10950
11241
|
gap: 8,
|
|
10951
|
-
backgroundColor: "rgba(
|
|
11242
|
+
backgroundColor: "rgba(46,213,115,0.06)",
|
|
10952
11243
|
borderWidth: 1,
|
|
10953
|
-
borderColor: "rgba(
|
|
11244
|
+
borderColor: "rgba(46,213,115,0.2)",
|
|
10954
11245
|
borderRadius: 8,
|
|
10955
11246
|
paddingVertical: 10,
|
|
10956
11247
|
paddingHorizontal: 12
|
|
@@ -10979,21 +11270,22 @@ function MesoStatusCard({
|
|
|
10979
11270
|
}
|
|
10980
11271
|
);
|
|
10981
11272
|
}
|
|
10982
|
-
var
|
|
11273
|
+
var sem = getSemanticColors("dark");
|
|
11274
|
+
var BRAND_PRIMARY11 = sem["brand-primary"];
|
|
10983
11275
|
var PROJECTION_LINE_COLOR = resolveColor("text-tertiary");
|
|
10984
|
-
var STATUS_SUCCESS2 = "
|
|
10985
|
-
var STATUS_ERROR3 = "
|
|
10986
|
-
var STATUS_WARNING2 = "
|
|
11276
|
+
var STATUS_SUCCESS2 = sem["status-success"];
|
|
11277
|
+
var STATUS_ERROR3 = sem["status-error"];
|
|
11278
|
+
var STATUS_WARNING2 = sem["status-warning"];
|
|
10987
11279
|
var GRID_LINE = "rgba(255,255,255,0.06)";
|
|
10988
|
-
var SUCCESS_PILL_BG = "rgba(
|
|
10989
|
-
var SUCCESS_PILL_BORDER = "rgba(
|
|
11280
|
+
var SUCCESS_PILL_BG = "rgba(46,213,115,0.10)";
|
|
11281
|
+
var SUCCESS_PILL_BORDER = "rgba(46,213,115,0.20)";
|
|
10990
11282
|
var ERROR_PILL_BG = "rgba(209,67,67,0.10)";
|
|
10991
11283
|
var ERROR_PILL_BORDER = "rgba(209,67,67,0.20)";
|
|
10992
11284
|
var PLOT_LEFT = 26;
|
|
10993
11285
|
var TOOLTIP_WIDTH = 124;
|
|
10994
11286
|
function timeOf(dateStr) {
|
|
10995
|
-
const
|
|
10996
|
-
return Number.isNaN(
|
|
11287
|
+
const t12 = Date.parse(dateStr);
|
|
11288
|
+
return Number.isNaN(t12) ? 0 : t12;
|
|
10997
11289
|
}
|
|
10998
11290
|
function formatValue(value) {
|
|
10999
11291
|
return `${Math.round(value)}`;
|
|
@@ -11270,7 +11562,7 @@ function StrengthTrendChart({
|
|
|
11270
11562
|
ChartLine,
|
|
11271
11563
|
{
|
|
11272
11564
|
coords: geometry.actual,
|
|
11273
|
-
color:
|
|
11565
|
+
color: BRAND_PRIMARY11,
|
|
11274
11566
|
strokeWidth: 2.5,
|
|
11275
11567
|
testID: "strength-trend-chart-actual-segment"
|
|
11276
11568
|
}
|
|
@@ -11323,7 +11615,7 @@ function StrengthTrendChart({
|
|
|
11323
11615
|
width: 8,
|
|
11324
11616
|
height: 8,
|
|
11325
11617
|
borderRadius: 1,
|
|
11326
|
-
backgroundColor:
|
|
11618
|
+
backgroundColor: BRAND_PRIMARY11
|
|
11327
11619
|
}
|
|
11328
11620
|
},
|
|
11329
11621
|
`point-${c.index}`
|
|
@@ -11453,7 +11745,7 @@ function StrengthTrendChart({
|
|
|
11453
11745
|
testID: "strength-trend-chart-legend",
|
|
11454
11746
|
children: [
|
|
11455
11747
|
/* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 5 }, children: [
|
|
11456
|
-
/* @__PURE__ */ jsx(reactNative.View, { style: { width: 14, height: 2.5, borderRadius: 1.5, backgroundColor:
|
|
11748
|
+
/* @__PURE__ */ jsx(reactNative.View, { style: { width: 14, height: 2.5, borderRadius: 1.5, backgroundColor: BRAND_PRIMARY11 } }),
|
|
11457
11749
|
/* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "Actual" })
|
|
11458
11750
|
] }),
|
|
11459
11751
|
/* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 5 }, children: [
|
|
@@ -11482,13 +11774,14 @@ function StrengthTrendChart({
|
|
|
11482
11774
|
}
|
|
11483
11775
|
);
|
|
11484
11776
|
}
|
|
11485
|
-
var
|
|
11486
|
-
var
|
|
11487
|
-
var
|
|
11777
|
+
var t11 = getSemanticColors("dark");
|
|
11778
|
+
var STATUS_SUCCESS3 = t11["status-success"];
|
|
11779
|
+
var STATUS_WARNING3 = t11["status-warning"];
|
|
11780
|
+
var STATUS_INFO = t11["status-info"];
|
|
11488
11781
|
var DOT_BORDER = "#F3F4F6";
|
|
11489
|
-
var BAND_FILL = "rgba(
|
|
11490
|
-
var BAND_EDGE = "rgba(
|
|
11491
|
-
var PROJECTION_FILL = "rgba(
|
|
11782
|
+
var BAND_FILL = "rgba(46,213,115,0.1)";
|
|
11783
|
+
var BAND_EDGE = "rgba(46,213,115,0.45)";
|
|
11784
|
+
var PROJECTION_FILL = "rgba(46,213,115,0.05)";
|
|
11492
11785
|
var PADDING_LEFT = 28;
|
|
11493
11786
|
var PADDING_RIGHT = 10;
|
|
11494
11787
|
var PADDING_TOP = 8;
|
|
@@ -11527,8 +11820,8 @@ function interpEdge(pixels, x, key) {
|
|
|
11527
11820
|
const a = pixels[i];
|
|
11528
11821
|
const b = pixels[i + 1];
|
|
11529
11822
|
if (x >= a.x && x <= b.x) {
|
|
11530
|
-
const
|
|
11531
|
-
return a[key] +
|
|
11823
|
+
const t12 = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x);
|
|
11824
|
+
return a[key] + t12 * (b[key] - a[key]);
|
|
11532
11825
|
}
|
|
11533
11826
|
}
|
|
11534
11827
|
return pixels[pixels.length - 1][key];
|
|
@@ -11858,16 +12151,7 @@ function CapacityBandChart({
|
|
|
11858
12151
|
}
|
|
11859
12152
|
);
|
|
11860
12153
|
}
|
|
11861
|
-
var PALETTE =
|
|
11862
|
-
"#5B9BD5",
|
|
11863
|
-
"#14B8A6",
|
|
11864
|
-
"#F4A736",
|
|
11865
|
-
"#F83030",
|
|
11866
|
-
"#823CA0",
|
|
11867
|
-
"#D4A520",
|
|
11868
|
-
"#406D87",
|
|
11869
|
-
"#43C6B7"
|
|
11870
|
-
];
|
|
12154
|
+
var PALETTE = DATAVIZ_CATEGORICAL_PALETTE;
|
|
11871
12155
|
function scaleValue(v, scale) {
|
|
11872
12156
|
if (v <= 0) return 0;
|
|
11873
12157
|
if (scale === "sqrt") return Math.sqrt(v);
|
|
@@ -11983,16 +12267,7 @@ function Treemap({
|
|
|
11983
12267
|
);
|
|
11984
12268
|
}) });
|
|
11985
12269
|
}
|
|
11986
|
-
var PALETTE2 =
|
|
11987
|
-
"#5B9BD5",
|
|
11988
|
-
"#14B8A6",
|
|
11989
|
-
"#F4A736",
|
|
11990
|
-
"#F83030",
|
|
11991
|
-
"#823CA0",
|
|
11992
|
-
"#D4A520",
|
|
11993
|
-
"#406D87",
|
|
11994
|
-
"#43C6B7"
|
|
11995
|
-
];
|
|
12270
|
+
var PALETTE2 = DATAVIZ_CATEGORICAL_PALETTE;
|
|
11996
12271
|
var GRID_LINE2 = "rgba(255,255,255,0.07)";
|
|
11997
12272
|
var AXIS_LINE = "rgba(255,255,255,0.18)";
|
|
11998
12273
|
var DIAGONAL_LINE = "rgba(255,255,255,0.28)";
|
|
@@ -12082,28 +12357,28 @@ function Scatter({
|
|
|
12082
12357
|
testID: "scatter-canvas",
|
|
12083
12358
|
style: { position: "absolute", top: 0, left: 0, width, height, overflow: "hidden" },
|
|
12084
12359
|
children: [
|
|
12085
|
-
ticksOf(yd, TICK_COUNT).map((
|
|
12086
|
-
const y = toY(
|
|
12360
|
+
ticksOf(yd, TICK_COUNT).map((t12, i) => {
|
|
12361
|
+
const y = toY(t12);
|
|
12087
12362
|
return /* @__PURE__ */ jsx(
|
|
12088
12363
|
reactNative.View,
|
|
12089
12364
|
{
|
|
12090
12365
|
accessibilityElementsHidden: true,
|
|
12091
12366
|
testID: "scatter-gridline-y",
|
|
12092
12367
|
style: { position: "absolute", left: PLOT_LEFT2, width: innerW, top: y, height: 1, backgroundColor: GRID_LINE2 },
|
|
12093
|
-
children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", left: -PLOT_LEFT2, top: -6, width: PLOT_LEFT2 - 6, textAlign: "right" }, children: formatTick(
|
|
12368
|
+
children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", left: -PLOT_LEFT2, top: -6, width: PLOT_LEFT2 - 6, textAlign: "right" }, children: formatTick(t12) })
|
|
12094
12369
|
},
|
|
12095
12370
|
`y-${i}`
|
|
12096
12371
|
);
|
|
12097
12372
|
}),
|
|
12098
|
-
ticksOf(xd, TICK_COUNT).map((
|
|
12099
|
-
const x = toX(
|
|
12373
|
+
ticksOf(xd, TICK_COUNT).map((t12, i) => {
|
|
12374
|
+
const x = toX(t12);
|
|
12100
12375
|
return /* @__PURE__ */ jsx(
|
|
12101
12376
|
reactNative.View,
|
|
12102
12377
|
{
|
|
12103
12378
|
accessibilityElementsHidden: true,
|
|
12104
12379
|
testID: "scatter-gridline-x",
|
|
12105
12380
|
style: { position: "absolute", top: PLOT_TOP, height: innerH, left: x, width: 1, backgroundColor: GRID_LINE2 },
|
|
12106
|
-
children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(
|
|
12381
|
+
children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(t12) })
|
|
12107
12382
|
},
|
|
12108
12383
|
`x-${i}`
|
|
12109
12384
|
);
|
|
@@ -12163,9 +12438,10 @@ function Scatter({
|
|
|
12163
12438
|
}) })
|
|
12164
12439
|
] });
|
|
12165
12440
|
}
|
|
12166
|
-
var
|
|
12167
|
-
var
|
|
12168
|
-
var
|
|
12441
|
+
var sem2 = getSemanticColors("dark");
|
|
12442
|
+
var STATUS_SUCCESS4 = sem2["status-success"];
|
|
12443
|
+
var STATUS_WARNING4 = sem2["status-warning"];
|
|
12444
|
+
var STATUS_ERROR4 = sem2["status-error"];
|
|
12169
12445
|
var TRACK = "rgba(255,255,255,0.08)";
|
|
12170
12446
|
var DEFAULT_THRESHOLDS = [
|
|
12171
12447
|
{ value: 0, color: STATUS_ERROR4 },
|
|
@@ -12237,23 +12513,23 @@ function Gauge2({
|
|
|
12237
12513
|
testID: "gauge",
|
|
12238
12514
|
...props,
|
|
12239
12515
|
children: [
|
|
12240
|
-
ticks.map((
|
|
12516
|
+
ticks.map((t12) => /* @__PURE__ */ jsx(
|
|
12241
12517
|
reactNative.View,
|
|
12242
12518
|
{
|
|
12243
12519
|
accessibilityElementsHidden: true,
|
|
12244
12520
|
testID: "gauge-segment",
|
|
12245
12521
|
style: {
|
|
12246
12522
|
position: "absolute",
|
|
12247
|
-
left:
|
|
12248
|
-
top:
|
|
12523
|
+
left: t12.left - tickThickness / 2,
|
|
12524
|
+
top: t12.top - tickLength / 2,
|
|
12249
12525
|
width: tickThickness,
|
|
12250
12526
|
height: tickLength,
|
|
12251
12527
|
borderRadius: tickThickness / 2,
|
|
12252
|
-
backgroundColor:
|
|
12253
|
-
transform: [{ rotate:
|
|
12528
|
+
backgroundColor: t12.color,
|
|
12529
|
+
transform: [{ rotate: t12.rotate }]
|
|
12254
12530
|
}
|
|
12255
12531
|
},
|
|
12256
|
-
|
|
12532
|
+
t12.key
|
|
12257
12533
|
)),
|
|
12258
12534
|
/* @__PURE__ */ jsxs(reactNative.View, { style: { position: "absolute", top: 0, left: 0, width: size, height: size }, className: "items-center justify-center", children: [
|
|
12259
12535
|
/* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-baseline gap-0.5", children: [
|
|
@@ -12266,6 +12542,203 @@ function Gauge2({
|
|
|
12266
12542
|
}
|
|
12267
12543
|
);
|
|
12268
12544
|
}
|
|
12545
|
+
function BrandLockup({
|
|
12546
|
+
subtitle = "wall dashboard",
|
|
12547
|
+
showSubtitle = true,
|
|
12548
|
+
className,
|
|
12549
|
+
...props
|
|
12550
|
+
}) {
|
|
12551
|
+
return /* @__PURE__ */ jsxs(reactNative.View, { className: cn("flex-row items-center gap-[7px]", className), ...props, children: [
|
|
12552
|
+
/* @__PURE__ */ jsx(reactNative.View, { className: "text-brand-primary", children: /* @__PURE__ */ jsx(VoltrasMark, { size: 14, color: "currentColor" }) }),
|
|
12553
|
+
/* @__PURE__ */ jsx(
|
|
12554
|
+
Typography,
|
|
12555
|
+
{
|
|
12556
|
+
variant: "button",
|
|
12557
|
+
color: "primary",
|
|
12558
|
+
className: "text-[12px] font-extrabold tracking-[1.5px]",
|
|
12559
|
+
children: "VOLTRAS"
|
|
12560
|
+
}
|
|
12561
|
+
),
|
|
12562
|
+
showSubtitle && subtitle ? /* @__PURE__ */ jsxs(
|
|
12563
|
+
Typography,
|
|
12564
|
+
{
|
|
12565
|
+
variant: "button",
|
|
12566
|
+
color: "tertiary",
|
|
12567
|
+
className: "text-[10px] font-semibold tracking-[0.4px]",
|
|
12568
|
+
children: [
|
|
12569
|
+
"/ ",
|
|
12570
|
+
subtitle
|
|
12571
|
+
]
|
|
12572
|
+
}
|
|
12573
|
+
) : null
|
|
12574
|
+
] });
|
|
12575
|
+
}
|
|
12576
|
+
var stateConfig = {
|
|
12577
|
+
// live = vivid green with an expanding ring; rest = solid amber (no pulse — operator); idle is dim.
|
|
12578
|
+
live: { label: "LIVE", color: "success", pulse: "ping", textColor: "primary" },
|
|
12579
|
+
rest: { label: "REST", color: "warning", pulse: false, textColor: "primary" },
|
|
12580
|
+
idle: { label: "IDLE", color: "default", pulse: false, textColor: "secondary" }
|
|
12581
|
+
};
|
|
12582
|
+
function SessionStatePill({ state, label, className, ...props }) {
|
|
12583
|
+
const cfg = stateConfig[state];
|
|
12584
|
+
return /* @__PURE__ */ jsxs(reactNative.View, { className: cn("flex-row items-center gap-2", className), ...props, children: [
|
|
12585
|
+
/* @__PURE__ */ jsx(Indicator, { size: "md", color: cfg.color, pulse: cfg.pulse }),
|
|
12586
|
+
/* @__PURE__ */ jsx(Typography, { variant: "monoLabel", color: cfg.textColor, className: "text-[11px]", children: label ?? cfg.label })
|
|
12587
|
+
] });
|
|
12588
|
+
}
|
|
12589
|
+
var statusTextClass = {
|
|
12590
|
+
connected: "text-status-success",
|
|
12591
|
+
degraded: "text-status-warning",
|
|
12592
|
+
lost: "text-status-error-vivid"
|
|
12593
|
+
};
|
|
12594
|
+
function DeviceIndicator({
|
|
12595
|
+
status = "connected",
|
|
12596
|
+
onPress,
|
|
12597
|
+
label = "Devices",
|
|
12598
|
+
className,
|
|
12599
|
+
...props
|
|
12600
|
+
}) {
|
|
12601
|
+
const Wrapper = onPress ? reactNative.Pressable : reactNative.View;
|
|
12602
|
+
return /* @__PURE__ */ jsx(
|
|
12603
|
+
Wrapper,
|
|
12604
|
+
{
|
|
12605
|
+
accessibilityLabel: label,
|
|
12606
|
+
...onPress ? { onPress, accessibilityRole: "button" } : {},
|
|
12607
|
+
className: cn(
|
|
12608
|
+
"w-[26px] h-[28px] items-center justify-center rounded-[7px]",
|
|
12609
|
+
statusTextClass[status],
|
|
12610
|
+
className
|
|
12611
|
+
),
|
|
12612
|
+
...props,
|
|
12613
|
+
children: /* @__PURE__ */ jsx(BluetoothIcon, { size: 18, color: "currentColor", title: label })
|
|
12614
|
+
}
|
|
12615
|
+
);
|
|
12616
|
+
}
|
|
12617
|
+
var stateColor = {
|
|
12618
|
+
connected: "success",
|
|
12619
|
+
available: "info",
|
|
12620
|
+
degraded: "warning",
|
|
12621
|
+
lost: "error-vivid"
|
|
12622
|
+
};
|
|
12623
|
+
function DeviceRow({ device, onPress, className, ...props }) {
|
|
12624
|
+
const Wrapper = onPress ? reactNative.Pressable : reactNative.View;
|
|
12625
|
+
return /* @__PURE__ */ jsxs(
|
|
12626
|
+
Wrapper,
|
|
12627
|
+
{
|
|
12628
|
+
...onPress ? { onPress, accessibilityRole: "button" } : {},
|
|
12629
|
+
className: cn("flex-row items-center gap-[10px] px-2 py-[9px] rounded-[7px]", className),
|
|
12630
|
+
...props,
|
|
12631
|
+
children: [
|
|
12632
|
+
/* @__PURE__ */ jsx(Indicator, { size: "md", color: stateColor[device.state] }),
|
|
12633
|
+
/* @__PURE__ */ jsx(
|
|
12634
|
+
Typography,
|
|
12635
|
+
{
|
|
12636
|
+
variant: "body2",
|
|
12637
|
+
color: device.slot ? "primary" : "secondary",
|
|
12638
|
+
className: "flex-1 font-bold text-[12px]",
|
|
12639
|
+
children: device.nickname
|
|
12640
|
+
}
|
|
12641
|
+
),
|
|
12642
|
+
/* @__PURE__ */ jsx(Typography, { variant: "mono", color: "tertiary", className: "text-[10px]", children: device.id })
|
|
12643
|
+
]
|
|
12644
|
+
}
|
|
12645
|
+
);
|
|
12646
|
+
}
|
|
12647
|
+
function aggregateStatus(devices) {
|
|
12648
|
+
const bound = devices.filter((d) => d.slot);
|
|
12649
|
+
if (bound.some((d) => d.state === "lost")) return "lost";
|
|
12650
|
+
if (bound.some((d) => d.state === "degraded")) return "degraded";
|
|
12651
|
+
return "connected";
|
|
12652
|
+
}
|
|
12653
|
+
function DeviceMenu({
|
|
12654
|
+
devices,
|
|
12655
|
+
isOpen,
|
|
12656
|
+
onOpenChange,
|
|
12657
|
+
onSelectDevice,
|
|
12658
|
+
className
|
|
12659
|
+
}) {
|
|
12660
|
+
const status = aggregateStatus(devices);
|
|
12661
|
+
const boundCount = devices.filter((d) => d.slot).length;
|
|
12662
|
+
const availCount = devices.filter((d) => !d.slot).length;
|
|
12663
|
+
return /* @__PURE__ */ jsxs(Popover, { placement: "bottom", isOpen, onOpenChange, className, children: [
|
|
12664
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(DeviceIndicator, { status }) }),
|
|
12665
|
+
/* @__PURE__ */ jsxs(PopoverContent, { className: "right-0 left-auto mt-[10px] w-[326px] bg-surface-elevated border border-border-strong rounded-[10px] p-[7px]", children: [
|
|
12666
|
+
/* @__PURE__ */ jsxs(
|
|
12667
|
+
Typography,
|
|
12668
|
+
{
|
|
12669
|
+
variant: "monoLabel",
|
|
12670
|
+
color: "tertiary",
|
|
12671
|
+
className: "text-[9px] tracking-[0.8px] px-2 pt-[6px] pb-2",
|
|
12672
|
+
children: [
|
|
12673
|
+
"Devices \u2014 ",
|
|
12674
|
+
boundCount,
|
|
12675
|
+
" bound \xB7 ",
|
|
12676
|
+
availCount,
|
|
12677
|
+
" available"
|
|
12678
|
+
]
|
|
12679
|
+
}
|
|
12680
|
+
),
|
|
12681
|
+
devices.map((device, i) => /* @__PURE__ */ jsx(reactNative.View, { className: cn(i > 0 && "border-t border-border"), children: /* @__PURE__ */ jsx(
|
|
12682
|
+
DeviceRow,
|
|
12683
|
+
{
|
|
12684
|
+
device,
|
|
12685
|
+
onPress: onSelectDevice ? () => onSelectDevice(device) : void 0
|
|
12686
|
+
}
|
|
12687
|
+
) }, device.id))
|
|
12688
|
+
] })
|
|
12689
|
+
] });
|
|
12690
|
+
}
|
|
12691
|
+
var SUBTITLE_MIN = 1024;
|
|
12692
|
+
var CLOCK_MIN = 720;
|
|
12693
|
+
function TopBar({
|
|
12694
|
+
state,
|
|
12695
|
+
devices,
|
|
12696
|
+
time,
|
|
12697
|
+
subtitle = "wall dashboard",
|
|
12698
|
+
showSubtitle,
|
|
12699
|
+
showClock,
|
|
12700
|
+
onSelectDevice,
|
|
12701
|
+
className
|
|
12702
|
+
}) {
|
|
12703
|
+
const [width, setWidth] = React24.useState(SUBTITLE_MIN);
|
|
12704
|
+
const onLayout = (e) => setWidth(e.nativeEvent.layout.width);
|
|
12705
|
+
const subtitleVisible = showSubtitle ?? width >= SUBTITLE_MIN;
|
|
12706
|
+
const clockVisible = showClock ?? width >= CLOCK_MIN;
|
|
12707
|
+
return /* @__PURE__ */ jsxs(
|
|
12708
|
+
reactNative.View,
|
|
12709
|
+
{
|
|
12710
|
+
onLayout,
|
|
12711
|
+
style: surfaceGradient.chrome(),
|
|
12712
|
+
className: cn(
|
|
12713
|
+
"h-[46px] flex-row items-center gap-[14px] px-4 bg-surface-elevated border-b border-border",
|
|
12714
|
+
className
|
|
12715
|
+
),
|
|
12716
|
+
children: [
|
|
12717
|
+
/* @__PURE__ */ jsx(BrandLockup, { subtitle, showSubtitle: subtitleVisible }),
|
|
12718
|
+
/* @__PURE__ */ jsxs(reactNative.View, { className: "ml-auto flex-row items-center gap-[12px]", children: [
|
|
12719
|
+
/* @__PURE__ */ jsx(SessionStatePill, { state }),
|
|
12720
|
+
/* @__PURE__ */ jsx(Divider, { orientation: "vertical", className: "h-4 bg-border-prominent" }),
|
|
12721
|
+
/* @__PURE__ */ jsx(DeviceMenu, { devices, onSelectDevice }),
|
|
12722
|
+
clockVisible ? /* @__PURE__ */ jsxs(jsxRuntime.Fragment, { children: [
|
|
12723
|
+
/* @__PURE__ */ jsx(Divider, { orientation: "vertical", className: "h-4 bg-border-prominent" }),
|
|
12724
|
+
/* @__PURE__ */ jsx(
|
|
12725
|
+
DateTime,
|
|
12726
|
+
{
|
|
12727
|
+
value: time,
|
|
12728
|
+
live: time == null,
|
|
12729
|
+
format: "time",
|
|
12730
|
+
hour12: false,
|
|
12731
|
+
variant: "mono",
|
|
12732
|
+
color: "secondary",
|
|
12733
|
+
className: "text-[11px] min-w-[38px] text-right"
|
|
12734
|
+
}
|
|
12735
|
+
)
|
|
12736
|
+
] }) : null
|
|
12737
|
+
] })
|
|
12738
|
+
]
|
|
12739
|
+
}
|
|
12740
|
+
);
|
|
12741
|
+
}
|
|
12269
12742
|
|
|
12270
12743
|
// src/utils/form.ts
|
|
12271
12744
|
function getFieldValidationProps(state) {
|
|
@@ -12369,12 +12842,15 @@ exports.AvatarGroup = AvatarGroup;
|
|
|
12369
12842
|
exports.Badge = Badge;
|
|
12370
12843
|
exports.BadgeText = BadgeText;
|
|
12371
12844
|
exports.BaseBadge = BaseBadge;
|
|
12845
|
+
exports.BluetoothIcon = BluetoothIcon;
|
|
12846
|
+
exports.BrandLockup = BrandLockup;
|
|
12372
12847
|
exports.BreadcrumbItem = BreadcrumbItem;
|
|
12373
12848
|
exports.Breadcrumbs = Breadcrumbs;
|
|
12374
12849
|
exports.Button = Button;
|
|
12375
12850
|
exports.ButtonIcon = ButtonIcon;
|
|
12376
12851
|
exports.ButtonSpinner = ButtonSpinner;
|
|
12377
12852
|
exports.ButtonText = ButtonText;
|
|
12853
|
+
exports.CATEGORICAL_CVD_SAFE_MAX = CATEGORICAL_CVD_SAFE_MAX;
|
|
12378
12854
|
exports.CapacityBandChart = CapacityBandChart;
|
|
12379
12855
|
exports.Caption = Caption;
|
|
12380
12856
|
exports.Card = Card;
|
|
@@ -12394,11 +12870,15 @@ exports.CollapseContent = CollapseContent;
|
|
|
12394
12870
|
exports.DataRow = DataRow;
|
|
12395
12871
|
exports.DateTime = DateTime;
|
|
12396
12872
|
exports.DeviationBar = DeviationBar;
|
|
12873
|
+
exports.DeviceIndicator = DeviceIndicator;
|
|
12874
|
+
exports.DeviceMenu = DeviceMenu;
|
|
12875
|
+
exports.DeviceRow = DeviceRow;
|
|
12397
12876
|
exports.Divider = Divider;
|
|
12398
12877
|
exports.Drawer = Drawer;
|
|
12399
12878
|
exports.DrawerBody = DrawerBody;
|
|
12400
12879
|
exports.DrawerFooter = DrawerFooter;
|
|
12401
12880
|
exports.DrawerHeader = DrawerHeader;
|
|
12881
|
+
exports.DumbbellIcon = DumbbellIcon;
|
|
12402
12882
|
exports.EmptyState = EmptyState;
|
|
12403
12883
|
exports.ExerciseCard = ExerciseCard;
|
|
12404
12884
|
exports.FormActions = FormActions;
|
|
@@ -12464,6 +12944,7 @@ exports.Section = Section;
|
|
|
12464
12944
|
exports.SectionContent = SectionContent;
|
|
12465
12945
|
exports.SectionHeader = SectionHeader;
|
|
12466
12946
|
exports.Select = Select;
|
|
12947
|
+
exports.SessionStatePill = SessionStatePill;
|
|
12467
12948
|
exports.SetRow = SetRow;
|
|
12468
12949
|
exports.Sidebar = Sidebar;
|
|
12469
12950
|
exports.SidebarContent = SidebarContent;
|
|
@@ -12480,6 +12961,7 @@ exports.SkeletonText = SkeletonText;
|
|
|
12480
12961
|
exports.Sparkline = Sparkline;
|
|
12481
12962
|
exports.Spinner = Spinner;
|
|
12482
12963
|
exports.Stack = Stack;
|
|
12964
|
+
exports.StarIcon = StarIcon;
|
|
12483
12965
|
exports.StatusDot = StatusDot;
|
|
12484
12966
|
exports.StepContent = StepContent;
|
|
12485
12967
|
exports.StepIndicator = StepIndicator;
|
|
@@ -12489,6 +12971,7 @@ exports.StepperStep = Step;
|
|
|
12489
12971
|
exports.StrengthTrendChart = StrengthTrendChart;
|
|
12490
12972
|
exports.SupersetWrapper = SupersetWrapper;
|
|
12491
12973
|
exports.Surface = Surface;
|
|
12974
|
+
exports.SvgIcon = SvgIcon;
|
|
12492
12975
|
exports.Switch = Switch;
|
|
12493
12976
|
exports.TEMPO_PACING = TEMPO_PACING;
|
|
12494
12977
|
exports.Tab = Tab;
|
|
@@ -12510,10 +12993,12 @@ exports.ToastProvider = ToastProvider;
|
|
|
12510
12993
|
exports.ToolbarButton = ToolbarButton;
|
|
12511
12994
|
exports.ToolbarButtonGroup = ToolbarButtonGroup;
|
|
12512
12995
|
exports.Tooltip = Tooltip;
|
|
12996
|
+
exports.TopBar = TopBar;
|
|
12513
12997
|
exports.Treemap = Treemap;
|
|
12514
12998
|
exports.Typography = Typography;
|
|
12515
12999
|
exports.VStack = VStack;
|
|
12516
13000
|
exports.VelocityStrip = VelocityStrip;
|
|
13001
|
+
exports.VoltrasMark = VoltrasMark;
|
|
12517
13002
|
exports.WeekRow = WeekRow;
|
|
12518
13003
|
exports.WeightBadge = WeightBadge;
|
|
12519
13004
|
exports.WorkoutCard = WorkoutCard;
|
|
@@ -12521,9 +13006,11 @@ exports.WorkoutPill = WorkoutPill;
|
|
|
12521
13006
|
exports.alpha = alpha;
|
|
12522
13007
|
exports.applyThemePreset = applyThemePreset;
|
|
12523
13008
|
exports.audiobookPreset = audiobookPreset;
|
|
13009
|
+
exports.bestTextColor = bestTextColor;
|
|
12524
13010
|
exports.buttonSizes = buttonSizes;
|
|
12525
13011
|
exports.calculateMeanVelocity = calculateMeanVelocity;
|
|
12526
13012
|
exports.calculateVelocityLoss = calculateVelocityLoss;
|
|
13013
|
+
exports.categoricalPalette = categoricalPalette;
|
|
12527
13014
|
exports.cn = cn;
|
|
12528
13015
|
exports.componentElevationRanges = componentElevationRanges;
|
|
12529
13016
|
exports.composeValidators = composeValidators;
|
|
@@ -12537,12 +13024,14 @@ exports.darkThemeCSSVars = darkThemeCSSVars;
|
|
|
12537
13024
|
exports.darken = darken;
|
|
12538
13025
|
exports.defaultPreset = defaultPreset;
|
|
12539
13026
|
exports.discreteRainbow = discreteRainbow;
|
|
13027
|
+
exports.divergingScale = divergingScale;
|
|
12540
13028
|
exports.elevationSystem = elevationSystem;
|
|
12541
13029
|
exports.formatDateTime = formatDateTime;
|
|
12542
13030
|
exports.formatPrescription = formatPrescription;
|
|
12543
13031
|
exports.formatSignedPct = formatSignedPct;
|
|
12544
13032
|
exports.formatVelocity = formatVelocity;
|
|
12545
13033
|
exports.getBaseSurfaceColor = getBaseSurfaceColor;
|
|
13034
|
+
exports.getCategoricalColor = getCategoricalColor;
|
|
12546
13035
|
exports.getContrastText = getContrastText;
|
|
12547
13036
|
exports.getDiscreteRainbowColor = getDiscreteRainbowColor;
|
|
12548
13037
|
exports.getElevationConfig = getElevationConfig;
|
|
@@ -12573,10 +13062,12 @@ exports.isEmpty = isEmpty;
|
|
|
12573
13062
|
exports.isValidEmail = isValidEmail;
|
|
12574
13063
|
exports.lightThemeCSSVars = lightThemeCSSVars;
|
|
12575
13064
|
exports.lighten = lighten;
|
|
13065
|
+
exports.linearGradient = linearGradient;
|
|
12576
13066
|
exports.neumorphicShadows = neumorphicShadows;
|
|
12577
13067
|
exports.primitiveBorderRadius = primitiveBorderRadius;
|
|
12578
13068
|
exports.primitiveBreakpoints = primitiveBreakpoints;
|
|
12579
13069
|
exports.primitiveColors = primitiveColors;
|
|
13070
|
+
exports.primitiveRamps = primitiveRamps;
|
|
12580
13071
|
exports.primitiveShadows = primitiveShadows;
|
|
12581
13072
|
exports.primitiveSpacing = primitiveSpacing;
|
|
12582
13073
|
exports.primitiveTypography = primitiveTypography;
|
|
@@ -12591,7 +13082,9 @@ exports.rpeColor = rpeColor;
|
|
|
12591
13082
|
exports.semanticColorsDark = semanticColorsDark;
|
|
12592
13083
|
exports.semanticColorsLight = semanticColorsLight;
|
|
12593
13084
|
exports.semanticTypography = semanticTypography;
|
|
13085
|
+
exports.sequentialEffort = sequentialEffort;
|
|
12594
13086
|
exports.shadowColors = shadowColors;
|
|
13087
|
+
exports.surfaceGradient = surfaceGradient;
|
|
12595
13088
|
exports.useTable = useTable;
|
|
12596
13089
|
exports.useToast = useToast;
|
|
12597
13090
|
exports.useToolbarButton = useToolbarButton;
|