@titan-design/react-ui 0.11.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bodymap.js +173 -343
- package/dist/bodymap.js.map +1 -1
- package/dist/bodymap.mjs +173 -343
- package/dist/bodymap.mjs.map +1 -1
- package/dist/index.d.mts +27 -22
- package/dist/index.d.ts +27 -22
- package/dist/index.js +366 -561
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +360 -553
- package/dist/index.mjs.map +1 -1
- package/dist/pages.js +242 -407
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +242 -407
- package/dist/pages.mjs.map +1 -1
- package/dist/theme/index.d.mts +250 -1157
- package/dist/theme/index.d.ts +250 -1157
- package/dist/theme/index.js +234 -408
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +227 -399
- package/dist/theme/index.mjs.map +1 -1
- package/dist/theme/tokens-css.js +141 -140
- package/dist/theme/tokens-css.js.map +1 -1
- package/dist/theme/tokens-css.mjs +141 -140
- package/dist/theme/tokens-css.mjs.map +1 -1
- package/dist/theme/tokens.d.mts +904 -0
- package/dist/theme/tokens.d.ts +904 -0
- package/dist/theme/tokens.js +856 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/theme/tokens.mjs +833 -0
- package/dist/theme/tokens.mjs.map +1 -0
- package/package.json +7 -1
- package/src/arch/Architecture.stories.tsx +9 -9
- package/src/components/custom/DateTime/DateTime.stories.tsx +1 -1
- package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +3 -3
- package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
- package/src/components/custom/Fatigue/GhostSpark.stories.tsx +3 -3
- package/src/components/custom/Fatigue/LiveFatigueCard.tsx +1 -1
- package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +2 -2
- package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
- package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +4 -4
- package/src/components/custom/Fatigue/VelocityHero.stories.tsx +3 -3
- package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
- package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -12
- package/src/components/custom/Sidebar/Sidebar.tsx +4 -4
- package/src/components/custom/Table/Table.tsx +2 -2
- package/src/components/custom/Workout/ActiveWorkoutPage.tsx +3 -3
- package/src/components/custom/Workout/BaseBadge.test.tsx +6 -1
- package/src/components/custom/Workout/BaseBadge.tsx +1 -1
- package/src/components/custom/Workout/BodyMap.tsx +2 -2
- package/src/components/custom/Workout/BodyMapDetailPanel.tsx +2 -2
- package/src/components/custom/Workout/DeviationBar.test.tsx +2 -1
- package/src/components/custom/Workout/DeviationBar.tsx +3 -2
- package/src/components/custom/Workout/ExerciseCard.test.tsx +3 -3
- package/src/components/custom/Workout/ExerciseCard.tsx +2 -2
- package/src/components/custom/Workout/ExerciseDetailPage.tsx +4 -4
- package/src/components/custom/Workout/InputBar.tsx +2 -2
- package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +1 -1
- package/src/components/custom/Workout/LiveAuraFrame.test.tsx +1 -1
- package/src/components/custom/Workout/LiveAuraFrame.tsx +3 -3
- package/src/components/custom/Workout/MesoCard.tsx +3 -1
- package/src/components/custom/Workout/MuscleGroupChip.tsx +4 -3
- package/src/components/custom/Workout/PrHistoryModal.tsx +2 -2
- package/src/components/custom/Workout/ProgramPlanningPage.tsx +1 -1
- package/src/components/custom/Workout/README.md +1 -1
- package/src/components/custom/Workout/ReadinessCheck.tsx +2 -2
- package/src/components/custom/Workout/RestTimer.tsx +2 -2
- package/src/components/custom/Workout/S3SetTypes.stories.tsx +3 -3
- package/src/components/custom/Workout/SessionHeader.stories.tsx +2 -2
- package/src/components/custom/Workout/SessionHeader.tsx +1 -1
- package/src/components/custom/Workout/SessionRail.stories.tsx +2 -2
- package/src/components/custom/Workout/SessionRail.tsx +13 -5
- package/src/components/custom/Workout/SetBar.tsx +3 -3
- package/src/components/custom/Workout/SetRow.test.tsx +6 -3
- package/src/components/custom/Workout/StatusDot.tsx +5 -4
- package/src/components/custom/Workout/StrengthTrendChart.tsx +1 -1
- package/src/components/custom/Workout/TrainingStatusPage.tsx +2 -2
- package/src/components/custom/Workout/VelocityStrip.test.tsx +5 -2
- package/src/components/custom/Workout/VelocityStrip.tsx +4 -4
- package/src/components/custom/Workout/VolumeLandmarkBar.tsx +3 -3
- package/src/components/custom/Workout/WeightBadge.test.tsx +6 -1
- package/src/components/custom/Workout/WeightBadge.tsx +2 -1
- package/src/components/custom/Workout/WorkoutCard.tsx +3 -1
- package/src/components/custom/Workout/WorkoutPill.tsx +5 -2
- package/src/components/custom/Workout/ZoneTrack.tsx +4 -4
- package/src/components/custom/Workout/setHeadingKit.tsx +14 -8
- package/src/components/custom/Workout/velocity-story-kit.tsx +2 -2
- package/src/components/custom/charts/SetBarChart.tsx +3 -3
- package/src/components/custom/stepper/Stepper.stories.tsx +1 -1
- package/src/components/custom/stepper/Stepper.tsx +3 -3
- package/src/components/shell/DeviceMenu.tsx +2 -2
- package/src/components/shell/README.md +1 -1
- package/src/components/shell/SessionRailSpecimen.stories.tsx +1 -1
- package/src/components/shell/SideNav.tsx +1 -1
- package/src/components/shell/TopBar.tsx +1 -1
- package/src/components/ui/autocomplete/Autocomplete.stories.tsx +1 -1
- package/src/components/ui/autocomplete/Autocomplete.tsx +1 -1
- package/src/components/ui/avatar/Avatar.tsx +2 -2
- package/src/components/ui/badge/Badge.tsx +2 -2
- package/src/components/ui/card/Card.tsx +3 -3
- package/src/components/ui/checkbox/Checkbox.tsx +1 -1
- package/src/components/ui/collapse/Collapse.tsx +1 -1
- package/src/components/ui/data-row/DataRow.stories.tsx +1 -1
- package/src/components/ui/drawer/Drawer.tsx +3 -3
- package/src/components/ui/form-field/FormField.tsx +1 -1
- package/src/components/ui/help-tip/HelpTip.tsx +1 -1
- package/src/components/ui/menu/Menu.tsx +2 -2
- package/src/components/ui/pill/Pill.tsx +2 -2
- package/src/components/ui/popover/Popover.stories.tsx +2 -2
- package/src/components/ui/popover/Popover.tsx +1 -1
- package/src/components/ui/progress/Progress.tsx +3 -3
- package/src/components/ui/radio/Radio.stories.tsx +1 -1
- package/src/components/ui/radio/Radio.tsx +4 -4
- package/src/components/ui/select/Select.tsx +3 -3
- package/src/components/ui/surface/Surface.stories.tsx +3 -3
- package/src/components/ui/surface/Surface.test.tsx +32 -19
- package/src/components/ui/surface/Surface.tsx +3 -3
- package/src/components/ui/surface/SurfaceContext.ts +19 -29
- package/src/components/ui/surface/surface.contract.test.ts +58 -45
- package/src/components/ui/switch/Switch.tsx +1 -1
- package/src/components/ui/tabs/Tabs.tsx +2 -2
- package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +5 -5
- package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +1 -1
- package/src/components/ui/toolbar-button/ToolbarButton.tsx +36 -22
- package/src/stories/PresetShowcase.stories.tsx +21 -21
- package/src/theme/ColorPalettes.stories.tsx +41 -38
- package/src/theme/ColorPrimitives.stories.tsx +89 -41
- package/src/theme/Depth.stories.tsx +312 -0
- package/src/theme/DepthCalibration.stories.tsx +655 -0
- package/src/theme/ThemeProvider.tsx +1 -1
- package/src/theme/barrel.ts +7 -14
- package/src/theme/color-stories.coverage.test.ts +15 -20
- package/src/theme/color-story-kit.tsx +1 -1
- package/src/theme/color-utils.ts +197 -0
- package/src/theme/config.ts +0 -8
- package/src/theme/depth-calibration.test.tsx +97 -0
- package/src/theme/elevation.test.ts +62 -1
- package/src/theme/elevation.ts +34 -8
- package/src/theme/global.css +47 -53
- package/src/theme/grey-ramp.test.ts +166 -0
- package/src/theme/materials.test.ts +106 -0
- package/src/theme/materials.ts +211 -0
- package/src/theme/presets/audiobook.ts +4 -4
- package/src/theme/presets/types.ts +3 -3
- package/src/theme/semantic-contrast.test.ts +83 -0
- package/src/theme/token-export-guard.test.ts +104 -0
- package/src/theme/tokens/primitives.ts +63 -116
- package/src/theme/tokens/semantic.ts +130 -82
- package/src/utils/colors.ts +1 -1
- package/tailwind.config.js +2 -5
- package/src/theme/bar-paper.ts +0 -59
- package/src/theme/shadows.stories.tsx +0 -523
- package/src/theme/shadows.ts +0 -439
package/dist/index.mjs
CHANGED
|
@@ -261,93 +261,50 @@ function AlertDescription({ children, className }) {
|
|
|
261
261
|
|
|
262
262
|
// src/theme/tokens/primitives.ts
|
|
263
263
|
var primitiveColors = {
|
|
264
|
-
// Blue scale
|
|
265
|
-
blue: {
|
|
266
|
-
50: "#EFF6FF",
|
|
267
|
-
100: "#DBEAFE",
|
|
268
|
-
200: "#BFDBFE",
|
|
269
|
-
300: "#93C5FD",
|
|
270
|
-
400: "#60A5FA",
|
|
271
|
-
500: "#3B82F6",
|
|
272
|
-
600: "#5048E5",
|
|
273
|
-
700: "#3832A0",
|
|
274
|
-
800: "#1E40AF",
|
|
275
|
-
900: "#1E3A8A"
|
|
276
|
-
},
|
|
277
|
-
// Red scale
|
|
278
|
-
red: {
|
|
279
|
-
50: "#FEF2F2",
|
|
280
|
-
100: "#FEE2E2",
|
|
281
|
-
200: "#FECACA",
|
|
282
|
-
300: "#FCA5A5",
|
|
283
|
-
400: "#DA6868",
|
|
284
|
-
500: "#EF4444",
|
|
285
|
-
600: "#D14343",
|
|
286
|
-
700: "#922E2E",
|
|
287
|
-
800: "#991B1B",
|
|
288
|
-
900: "#7F1D1D"
|
|
289
|
-
},
|
|
290
|
-
// Vivid red scale
|
|
291
|
-
redVivid: {
|
|
292
|
-
50: "#FFECEE",
|
|
293
|
-
100: "#FFD6DB",
|
|
294
|
-
200: "#FFB3BC",
|
|
295
|
-
300: "#FF8593",
|
|
296
|
-
400: "#FF6070",
|
|
297
|
-
500: "#FF4757",
|
|
298
|
-
600: "#E63548",
|
|
299
|
-
700: "#C42539",
|
|
300
|
-
800: "#9E1C2C",
|
|
301
|
-
900: "#7A1520"
|
|
302
|
-
},
|
|
303
|
-
// Neutral/Gray scale
|
|
304
|
-
neutral: {
|
|
305
|
-
50: "#FAFAFA",
|
|
306
|
-
100: "#F3F4F6",
|
|
307
|
-
200: "#E5E7EB",
|
|
308
|
-
300: "#D1D5DB",
|
|
309
|
-
400: "#9CA3AF",
|
|
310
|
-
500: "#6B7280",
|
|
311
|
-
600: "#4B5563",
|
|
312
|
-
700: "#374151",
|
|
313
|
-
800: "#1F2937",
|
|
314
|
-
900: "#111827",
|
|
315
|
-
950: "#030712"
|
|
316
|
-
},
|
|
317
|
-
// Charcoal scale (dark backgrounds)
|
|
318
|
-
charcoal: {
|
|
319
|
-
0: "#6E6E6E",
|
|
320
|
-
50: "#5D5D5D",
|
|
321
|
-
100: "#4C4C4C",
|
|
322
|
-
200: "#3C3C3C",
|
|
323
|
-
300: "#2C2C2C",
|
|
324
|
-
400: "#1F1F1F",
|
|
325
|
-
500: "#1C1C1C",
|
|
326
|
-
600: "#191919",
|
|
327
|
-
700: "#161616",
|
|
328
|
-
800: "#131313",
|
|
329
|
-
900: "#101010"
|
|
330
|
-
},
|
|
331
|
-
// Pure colors
|
|
332
264
|
white: "#FFFFFF",
|
|
333
265
|
black: "#000000",
|
|
334
266
|
transparent: "transparent"
|
|
335
267
|
};
|
|
336
|
-
var
|
|
337
|
-
|
|
338
|
-
//
|
|
339
|
-
|
|
340
|
-
// L*
|
|
341
|
-
|
|
342
|
-
// L*
|
|
343
|
-
|
|
344
|
-
// L*
|
|
345
|
-
|
|
346
|
-
// L*
|
|
347
|
-
|
|
348
|
-
// L*
|
|
349
|
-
|
|
350
|
-
|
|
268
|
+
var greyRamp = {
|
|
269
|
+
50: "#F9F6F3",
|
|
270
|
+
// L*97.0 W6
|
|
271
|
+
100: "#EDEAE7",
|
|
272
|
+
// L*92.8 W6
|
|
273
|
+
200: "#D4D1CE",
|
|
274
|
+
// L*84.0 W6 — warm silver
|
|
275
|
+
300: "#BDBAB7",
|
|
276
|
+
// L*75.7 W6
|
|
277
|
+
400: "#A29F9D",
|
|
278
|
+
// L*65.7 W5
|
|
279
|
+
500: "#888684",
|
|
280
|
+
// L*56.0 W4
|
|
281
|
+
600: "#72716F",
|
|
282
|
+
// L*47.7 W3
|
|
283
|
+
700: "#5A5958",
|
|
284
|
+
// L*37.9 W2
|
|
285
|
+
800: "#424140",
|
|
286
|
+
// L*27.6 W2 — generated bridge
|
|
287
|
+
850: "#373635",
|
|
288
|
+
// L*22.7 W2 — surface overlay
|
|
289
|
+
875: "#31302F",
|
|
290
|
+
// L*19.9 W2 — surface raised
|
|
291
|
+
900: "#2C2A28",
|
|
292
|
+
// L*17.2 W4 — surface elevated
|
|
293
|
+
925: "#252321",
|
|
294
|
+
// L*13.9 W4 — surface base
|
|
295
|
+
950: "#1C1916",
|
|
296
|
+
// L*9.0 W6 — background base / shell
|
|
297
|
+
975: "#100D0A"
|
|
298
|
+
// L*3.8 W6 — background frame / bezel
|
|
299
|
+
};
|
|
300
|
+
var SURFACE_PLANE_STEPS = {
|
|
301
|
+
frame: 975,
|
|
302
|
+
background: 950,
|
|
303
|
+
base: 925,
|
|
304
|
+
elevated: 900,
|
|
305
|
+
raised: 875,
|
|
306
|
+
overlay: 850
|
|
307
|
+
};
|
|
351
308
|
var primitiveRamps = {
|
|
352
309
|
red: {
|
|
353
310
|
50: "#FFF4F4",
|
|
@@ -498,8 +455,8 @@ var sequentialEffort = [
|
|
|
498
455
|
];
|
|
499
456
|
function bestTextColor(hex) {
|
|
500
457
|
const [r, g, b] = [0, 2, 4].map((i) => {
|
|
501
|
-
const
|
|
502
|
-
return
|
|
458
|
+
const c2 = parseInt(hex.replace("#", "").slice(i, i + 2), 16) / 255;
|
|
459
|
+
return c2 >= 0.04045 ? ((c2 + 0.055) / 1.055) ** 2.4 : c2 / 12.92;
|
|
503
460
|
});
|
|
504
461
|
const l = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
505
462
|
return (l + 0.05) / 0.05 >= 1.05 / (l + 0.05) ? "#000000" : "#FFFFFF";
|
|
@@ -675,16 +632,6 @@ var primitiveBorderRadius = {
|
|
|
675
632
|
"2xl": "24px",
|
|
676
633
|
full: "9999px"
|
|
677
634
|
};
|
|
678
|
-
var primitiveShadows = {
|
|
679
|
-
none: "none",
|
|
680
|
-
sm: "0px 1px 2px rgba(100, 116, 139, 0.12)",
|
|
681
|
-
DEFAULT: "0px 1px 3px rgba(100, 116, 139, 0.12), 0px 1px 2px rgba(100, 116, 139, 0.24)",
|
|
682
|
-
md: "0px 4px 6px rgba(100, 116, 139, 0.12)",
|
|
683
|
-
lg: "0px 10px 15px rgba(100, 116, 139, 0.12)",
|
|
684
|
-
xl: "0px 20px 25px rgba(100, 116, 139, 0.12)",
|
|
685
|
-
"2xl": "0px 25px 50px rgba(100, 116, 139, 0.25)",
|
|
686
|
-
inner: "inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)"
|
|
687
|
-
};
|
|
688
635
|
var primitiveBreakpoints = {
|
|
689
636
|
xs: 0,
|
|
690
637
|
sm: 600,
|
|
@@ -740,10 +687,10 @@ var semanticColorsLight = {
|
|
|
740
687
|
"status-error-light": primitiveRamps.red[500],
|
|
741
688
|
"status-error-dark": primitiveRamps.red[700],
|
|
742
689
|
"status-error-subtle": primitiveRamps.red[50],
|
|
743
|
-
"status-error-vivid":
|
|
690
|
+
"status-error-vivid": primitiveRamps.red[600],
|
|
744
691
|
// vivid alert red
|
|
745
|
-
"status-error-vivid-light":
|
|
746
|
-
"status-error-vivid-dark":
|
|
692
|
+
"status-error-vivid-light": primitiveRamps.red[500],
|
|
693
|
+
"status-error-vivid-dark": primitiveRamps.red[700],
|
|
747
694
|
"status-error-vivid-subtle": "rgba(255, 71, 87, 0.12)",
|
|
748
695
|
"status-warning": primitiveRamps.amber[300],
|
|
749
696
|
"status-warning-light": primitiveRamps.amber[200],
|
|
@@ -770,7 +717,7 @@ var semanticColorsLight = {
|
|
|
770
717
|
"result-inconclusive": "#9E9A97",
|
|
771
718
|
// Gray - no clear result
|
|
772
719
|
"result-inconclusive-light": "rgba(158, 154, 151, 0.12)",
|
|
773
|
-
"result-neutral":
|
|
720
|
+
"result-neutral": greyRamp[600],
|
|
774
721
|
// Neutral baseline
|
|
775
722
|
// Text on result backgrounds (on-result-*)
|
|
776
723
|
"on-result-improve": primitiveColors.white,
|
|
@@ -801,47 +748,38 @@ var semanticColorsLight = {
|
|
|
801
748
|
// Text colors (text-*)
|
|
802
749
|
"text-primary": "#121828",
|
|
803
750
|
"text-secondary": "#65748B",
|
|
804
|
-
"text-tertiary":
|
|
751
|
+
"text-tertiary": greyRamp[400],
|
|
805
752
|
"text-disabled": "rgba(55, 65, 81, 0.48)",
|
|
806
753
|
"text-inverse": primitiveColors.white,
|
|
807
|
-
"text-link":
|
|
808
|
-
"text-link-hover":
|
|
754
|
+
"text-link": primitiveRamps.blue[600],
|
|
755
|
+
"text-link-hover": primitiveRamps.blue[700],
|
|
809
756
|
// Surface colors (surface-*) - for elevated containers
|
|
810
757
|
"surface-base": primitiveColors.white,
|
|
811
|
-
"surface-elevated":
|
|
758
|
+
"surface-elevated": greyRamp[50],
|
|
812
759
|
// slightly off-white for elevated cards
|
|
813
|
-
"surface-raised":
|
|
760
|
+
"surface-raised": greyRamp[100],
|
|
814
761
|
// light gray for raised cards
|
|
815
762
|
"surface-overlay": primitiveColors.white,
|
|
816
|
-
"surface-input":
|
|
763
|
+
"surface-input": greyRamp[50],
|
|
817
764
|
// Input field background (filled variant)
|
|
818
|
-
// Deepest pressed pit (TD-surface-tokens, S-3) — light-mode counterpart of
|
|
819
|
-
// the dark ramp's `inset` plane; a placeholder pairing, not part of the
|
|
820
|
-
// dark-ramp investigation (surface.contract.test.ts is dark-mode only).
|
|
821
|
-
"surface-inset": primitiveColors.neutral[300],
|
|
822
765
|
// Background colors (background-*)
|
|
823
766
|
"background-base": "#EBEBEB",
|
|
824
767
|
"background-default": primitiveColors.white,
|
|
825
|
-
"background-subtle":
|
|
826
|
-
// Frame/bezel chrome
|
|
827
|
-
//
|
|
828
|
-
|
|
829
|
-
// mode (see dark-mode note on `surface-inset` above).
|
|
830
|
-
"background-frame": primitiveColors.neutral[400],
|
|
768
|
+
"background-subtle": greyRamp[50],
|
|
769
|
+
// Frame/bezel chrome — top bar + side nav shell, one step below
|
|
770
|
+
// `background-base`. Placeholder pairing for light mode, which is deferred.
|
|
771
|
+
"background-frame": greyRamp[400],
|
|
831
772
|
// Border colors (border-*)
|
|
832
|
-
"border-
|
|
833
|
-
"border-subtle": primitiveColors.neutral[100],
|
|
834
|
-
"border-strong": primitiveColors.neutral[300],
|
|
835
|
-
"border-prominent": primitiveColors.neutral[400],
|
|
773
|
+
"border-prominent": greyRamp[400],
|
|
836
774
|
// high-visibility divider
|
|
837
|
-
"border-focus":
|
|
838
|
-
"border-input":
|
|
775
|
+
"border-focus": primitiveRamps.blue[600],
|
|
776
|
+
"border-input": greyRamp[200],
|
|
839
777
|
// Input field border
|
|
840
|
-
"border-input-hover":
|
|
778
|
+
"border-input-hover": greyRamp[400],
|
|
841
779
|
// Input field border on hover
|
|
842
|
-
"border-input-focus":
|
|
780
|
+
"border-input-focus": primitiveRamps.blue[600],
|
|
843
781
|
// Input field border on focus
|
|
844
|
-
"border-input-error":
|
|
782
|
+
"border-input-error": primitiveRamps.red[600],
|
|
845
783
|
// Input field border on error
|
|
846
784
|
// Alpha hairline separators (surface-independent — composite toward black on
|
|
847
785
|
// light surfaces, mirroring the dark-mode white-alpha family). See §4/S-2.
|
|
@@ -858,7 +796,7 @@ var semanticColorsLight = {
|
|
|
858
796
|
// Divider
|
|
859
797
|
"divider": "#E8E9EB",
|
|
860
798
|
// Avatar default
|
|
861
|
-
"avatar-background":
|
|
799
|
+
"avatar-background": greyRamp[600],
|
|
862
800
|
"avatar-text": primitiveColors.white
|
|
863
801
|
};
|
|
864
802
|
var semanticColorsDark = {
|
|
@@ -890,9 +828,9 @@ var semanticColorsDark = {
|
|
|
890
828
|
"status-error-light": primitiveRamps.red[500],
|
|
891
829
|
"status-error-dark": primitiveRamps.red[700],
|
|
892
830
|
"status-error-subtle": "rgba(209, 67, 67, 0.12)",
|
|
893
|
-
"status-error-vivid":
|
|
894
|
-
"status-error-vivid-light":
|
|
895
|
-
"status-error-vivid-dark":
|
|
831
|
+
"status-error-vivid": primitiveRamps.red[600],
|
|
832
|
+
"status-error-vivid-light": primitiveRamps.red[500],
|
|
833
|
+
"status-error-vivid-dark": primitiveRamps.red[700],
|
|
896
834
|
"status-error-vivid-subtle": "rgba(255, 71, 87, 0.12)",
|
|
897
835
|
"status-warning": primitiveRamps.amber[300],
|
|
898
836
|
"status-warning-light": primitiveRamps.amber[200],
|
|
@@ -916,7 +854,7 @@ var semanticColorsDark = {
|
|
|
916
854
|
"result-degrade-dark": "#b30000",
|
|
917
855
|
"result-inconclusive": "#9E9A97",
|
|
918
856
|
"result-inconclusive-light": "rgba(158, 154, 151, 0.16)",
|
|
919
|
-
"result-neutral":
|
|
857
|
+
"result-neutral": greyRamp[400],
|
|
920
858
|
// Text on result backgrounds
|
|
921
859
|
"on-result-improve": primitiveColors.white,
|
|
922
860
|
"on-result-degrade": primitiveColors.white,
|
|
@@ -933,74 +871,106 @@ var semanticColorsDark = {
|
|
|
933
871
|
"data-9": discreteRainbow[3],
|
|
934
872
|
"data-10": discreteRainbow[22],
|
|
935
873
|
// Text colors - inverted for dark mode
|
|
936
|
-
"text-primary":
|
|
937
|
-
"text-secondary":
|
|
938
|
-
|
|
874
|
+
"text-primary": greyRamp[50],
|
|
875
|
+
"text-secondary": greyRamp[400],
|
|
876
|
+
// Deliberately ONE step lighter than the L*-nearest match (`greyRamp[600]`).
|
|
877
|
+
// The colour this replaced failed WCAG large-text outright on the three
|
|
878
|
+
// lightest planes — 2.96 / 2.72 / 2.49 against elevated / raised / overlay —
|
|
879
|
+
// and `600` carried that failure forward almost exactly (2.93 / 2.70 / 2.47).
|
|
880
|
+
// `500` clears 3:1 everywhere (3.32–5.34). Contrast beats colour fidelity for
|
|
881
|
+
// text roles; borders and surfaces still use strict L*-nearest. See
|
|
882
|
+
// semantic-contrast.test.ts, which fails if this is moved back down.
|
|
883
|
+
"text-tertiary": greyRamp[500],
|
|
939
884
|
"text-disabled": "rgba(255, 255, 255, 0.38)",
|
|
940
|
-
"text-inverse":
|
|
885
|
+
"text-inverse": greyRamp[950],
|
|
941
886
|
"text-link": "#828DF8",
|
|
942
|
-
"text-link-hover":
|
|
887
|
+
"text-link-hover": primitiveRamps.blue[400],
|
|
943
888
|
// Surface colors - dark backgrounds — warm-tapered DERIVED ramp (TD-surface-tokens,
|
|
944
889
|
// S-1, re-spaced S-3). Shipped verbatim from `deriveSurfaceRamp()` — see
|
|
945
890
|
// `surfaceRampDark` in primitives.ts for the full derivation note. `surface-overlay`
|
|
946
891
|
// and `surface-elevated` are distinct (were both #191919 pre-S-1); `surface-input`
|
|
947
892
|
// tracks one plane above `surface-base`, same relative position as before the remap.
|
|
948
893
|
// `background-base` backs `Surface level="background"` (SurfaceContext.SURFACE_LEVEL_TOKEN),
|
|
949
|
-
// so it takes the ramp's
|
|
950
|
-
//
|
|
951
|
-
|
|
952
|
-
//
|
|
953
|
-
"surface-
|
|
954
|
-
//
|
|
955
|
-
"surface-
|
|
956
|
-
//
|
|
957
|
-
"surface-
|
|
958
|
-
//
|
|
959
|
-
"surface-
|
|
960
|
-
// overlay surface (#373635, L*22.5 — hero/popover)
|
|
961
|
-
"surface-input": surfaceRampDark.elevated,
|
|
894
|
+
// so it takes the ramp's shell role. The deepest plane is `background-frame`,
|
|
895
|
+
// which is also the `SurfaceLevel` floor a pressed surface clamps at.
|
|
896
|
+
"surface-base": greyRamp[925],
|
|
897
|
+
// main surface (#252321, L*13.9)
|
|
898
|
+
"surface-elevated": greyRamp[900],
|
|
899
|
+
// elevated surface (#2C2A28, L*17.2 — nav/rail)
|
|
900
|
+
"surface-raised": greyRamp[875],
|
|
901
|
+
// raised surface (#31302F, L*19.9 — cards)
|
|
902
|
+
"surface-overlay": greyRamp[850],
|
|
903
|
+
// overlay surface (#373635, L*22.7 — hero/popover)
|
|
904
|
+
"surface-input": greyRamp[900],
|
|
962
905
|
// input surface (#2C2A28 — one plane above base)
|
|
963
|
-
"surface-inset": surfaceRampDark.inset,
|
|
964
|
-
// deepest pressed pit (#13100D, L*4.5 — sub-shell well)
|
|
965
906
|
// Background colors — same ramp, the frame/shell end of it.
|
|
966
|
-
"background-base":
|
|
967
|
-
// shell
|
|
968
|
-
"background-default":
|
|
969
|
-
// main background (#252321, L*13.
|
|
970
|
-
"background-subtle":
|
|
971
|
-
// subtle background (#2C2A28, L*17 — matches surface-elevated)
|
|
972
|
-
// Frame/bezel chrome
|
|
973
|
-
// `background-base
|
|
974
|
-
// ramp
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
//
|
|
978
|
-
//
|
|
979
|
-
//
|
|
980
|
-
//
|
|
981
|
-
//
|
|
982
|
-
//
|
|
983
|
-
|
|
984
|
-
//
|
|
985
|
-
"
|
|
986
|
-
//
|
|
987
|
-
|
|
988
|
-
//
|
|
989
|
-
|
|
907
|
+
"background-base": greyRamp[950],
|
|
908
|
+
// shell (#1C1916, L*9 — Surface level="background")
|
|
909
|
+
"background-default": greyRamp[925],
|
|
910
|
+
// main background (#252321, L*13.9 — matches surface-base)
|
|
911
|
+
"background-subtle": greyRamp[900],
|
|
912
|
+
// subtle background (#2C2A28, L*17.2 — matches surface-elevated)
|
|
913
|
+
// Frame/bezel chrome — the top bar + side nav shell, one step BELOW
|
|
914
|
+
// `background-base`. It used to be described as sitting OUTSIDE the ramp; it
|
|
915
|
+
// is simply the ramp's last step now, and the floor `<Surface pressed>` clamps at.
|
|
916
|
+
"background-frame": greyRamp[975],
|
|
917
|
+
// frame / bezel (#100D0A, L*3.8)
|
|
918
|
+
// Border colors — solid dark borders are RETIRED (TD-07.14). Not a preference — a structural
|
|
919
|
+
// consequence of one ramp. Every step from 850 to 975 is now a surface plane,
|
|
920
|
+
// so a solid border dark enough to read as a border necessarily equals some
|
|
921
|
+
// plane's fill, which is exactly the collision `surface.contract.test.ts` R2
|
|
922
|
+
// forbids. The only non-plane steps left in that band are 800 and 700, and
|
|
923
|
+
// borders there jump from L*~10-25 to L*~28-38 — a restyle, not a migration.
|
|
924
|
+
//
|
|
925
|
+
// So separation moves to the alpha hairlines, which dark mode already called
|
|
926
|
+
// "the primary separation cue". Being alpha, they composite against whatever
|
|
927
|
+
// plane they land on and cannot collide with any of them — the problem stops
|
|
928
|
+
// existing rather than being re-solved per plane. The three solid tokens were
|
|
929
|
+
// deleted outright; consumers point at the `hairline-*` family below.
|
|
930
|
+
//
|
|
931
|
+
// `border-prominent` stays SOLID: it is the one border meant to be seen
|
|
932
|
+
// outright (4 call sites, high-visibility dividers), and grey-800 is not a
|
|
933
|
+
// plane, so it keeps its job without collision.
|
|
934
|
+
"border-prominent": greyRamp[800],
|
|
990
935
|
// high-visibility divider
|
|
991
936
|
"border-focus": "#828DF8",
|
|
992
|
-
"border-input":
|
|
993
|
-
"border-input-hover":
|
|
937
|
+
"border-input": greyRamp[700],
|
|
938
|
+
"border-input-hover": greyRamp[600],
|
|
994
939
|
"border-input-focus": "#828DF8",
|
|
995
|
-
"border-input-error":
|
|
940
|
+
"border-input-error": primitiveRamps.red[500],
|
|
996
941
|
// Alpha hairline separators — the primary separation cue (§4/S-2). Self-
|
|
997
942
|
// normalizing: composites toward white by ~the same amount on ANY plane, so
|
|
998
943
|
// one family works at every elevation instead of per-surface border tokens.
|
|
999
944
|
// Shadows are demoted to floating-overlay use only (not shipped as a fill
|
|
1000
945
|
// separator here — see elevation.ts, follow-up S-4).
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
946
|
+
//
|
|
947
|
+
// RETUNED on the wall (VW-99, S-6). The original .06/.09/.14 were set at a
|
|
948
|
+
// desk. On the panel at ~3 m `subtle` rendered but was indiscernible, and
|
|
949
|
+
// `default` — the load-bearing one, with no solid-border fallback since
|
|
950
|
+
// TD-07.14 — went weak on the lightest plane. `strong` read cleanly with room
|
|
951
|
+
// to spare, which is what made raising the whole family viable.
|
|
952
|
+
//
|
|
953
|
+
// Each tier steps up onto the next MEASURED-GOOD rung rather than an
|
|
954
|
+
// interpolated one: the new `subtle` is the old `default`, and the new
|
|
955
|
+
// `default` is the old `strong` — a value just confirmed legible on all four
|
|
956
|
+
// planes. Spacing goes 1 : 1.56 : 2.33, against the original 1 : 1.5 : 2.33.
|
|
957
|
+
//
|
|
958
|
+
// RUN 2 (VW-99): all three tiers were seen on all four planes — the retune
|
|
959
|
+
// worked — but `subtle` was still "a bit hard to read", so the whole family
|
|
960
|
+
// took a further +.01. That is a comfort margin on a passing row, not a fix
|
|
961
|
+
// for a failing one, which is why it is a flat offset: the 1 : 1.56 : 2.33
|
|
962
|
+
// spacing that the run validated is preserved rather than re-derived.
|
|
963
|
+
//
|
|
964
|
+
// Keep these to TWO decimals. react-native-web quantises alpha to 8 bits, so
|
|
965
|
+
// a 3-decimal value silently rounds on the way to the DOM (.135 renders as
|
|
966
|
+
// .13) — the token would say one thing and paint another.
|
|
967
|
+
//
|
|
968
|
+
// DARK ONLY. The light family above composites toward BLACK on light planes,
|
|
969
|
+
// which this run says nothing about — do not mirror these numbers into it
|
|
970
|
+
// without its own verification.
|
|
971
|
+
"hairline-subtle": "rgba(255, 255, 255, 0.10)",
|
|
972
|
+
"hairline-default": "rgba(255, 255, 255, 0.15)",
|
|
973
|
+
"hairline-strong": "rgba(255, 255, 255, 0.22)",
|
|
1004
974
|
// Interactive states
|
|
1005
975
|
"interactive-hover": "rgba(255, 255, 255, 0.04)",
|
|
1006
976
|
"interactive-focus": "rgba(255, 255, 255, 0.12)",
|
|
@@ -1009,10 +979,9 @@ var semanticColorsDark = {
|
|
|
1009
979
|
"interactive-disabled": "rgba(255, 255, 255, 0.12)",
|
|
1010
980
|
"interactive-disabled-text": "rgba(255, 255, 255, 0.26)",
|
|
1011
981
|
// Divider
|
|
1012
|
-
"divider":
|
|
1013
|
-
// divider color
|
|
982
|
+
"divider": "rgba(255, 255, 255, 0.09)",
|
|
1014
983
|
// Avatar default
|
|
1015
|
-
"avatar-background":
|
|
984
|
+
"avatar-background": greyRamp[700],
|
|
1016
985
|
"avatar-text": primitiveColors.white
|
|
1017
986
|
};
|
|
1018
987
|
var semanticTypography = {
|
|
@@ -1530,14 +1499,10 @@ var lightThemeCSSVars = {
|
|
|
1530
1499
|
"--color-surface-base": semanticColorsLight["surface-base"],
|
|
1531
1500
|
"--color-surface-elevated": semanticColorsLight["surface-elevated"],
|
|
1532
1501
|
"--color-surface-raised": semanticColorsLight["surface-raised"],
|
|
1533
|
-
"--color-surface-inset": semanticColorsLight["surface-inset"],
|
|
1534
1502
|
"--color-background-base": semanticColorsLight["background-base"],
|
|
1535
1503
|
"--color-background-default": semanticColorsLight["background-default"],
|
|
1536
1504
|
"--color-background-subtle": semanticColorsLight["background-subtle"],
|
|
1537
1505
|
"--color-background-frame": semanticColorsLight["background-frame"],
|
|
1538
|
-
"--color-border-default": semanticColorsLight["border-default"],
|
|
1539
|
-
"--color-border-subtle": semanticColorsLight["border-subtle"],
|
|
1540
|
-
"--color-border-strong": semanticColorsLight["border-strong"],
|
|
1541
1506
|
"--color-border-prominent": semanticColorsLight["border-prominent"],
|
|
1542
1507
|
"--color-border-focus": semanticColorsLight["border-focus"],
|
|
1543
1508
|
"--color-interactive-hover": semanticColorsLight["interactive-hover"],
|
|
@@ -1633,14 +1598,10 @@ var darkThemeCSSVars = {
|
|
|
1633
1598
|
"--color-surface-base": semanticColorsDark["surface-base"],
|
|
1634
1599
|
"--color-surface-elevated": semanticColorsDark["surface-elevated"],
|
|
1635
1600
|
"--color-surface-raised": semanticColorsDark["surface-raised"],
|
|
1636
|
-
"--color-surface-inset": semanticColorsDark["surface-inset"],
|
|
1637
1601
|
"--color-background-base": semanticColorsDark["background-base"],
|
|
1638
1602
|
"--color-background-default": semanticColorsDark["background-default"],
|
|
1639
1603
|
"--color-background-subtle": semanticColorsDark["background-subtle"],
|
|
1640
1604
|
"--color-background-frame": semanticColorsDark["background-frame"],
|
|
1641
|
-
"--color-border-default": semanticColorsDark["border-default"],
|
|
1642
|
-
"--color-border-subtle": semanticColorsDark["border-subtle"],
|
|
1643
|
-
"--color-border-strong": semanticColorsDark["border-strong"],
|
|
1644
1605
|
"--color-border-prominent": semanticColorsDark["border-prominent"],
|
|
1645
1606
|
"--color-border-focus": semanticColorsDark["border-focus"],
|
|
1646
1607
|
"--color-interactive-hover": semanticColorsDark["interactive-hover"],
|
|
@@ -1773,6 +1734,54 @@ var gluestackConfig = {
|
|
|
1773
1734
|
rounded: "borderRadius"
|
|
1774
1735
|
}
|
|
1775
1736
|
};
|
|
1737
|
+
|
|
1738
|
+
// src/theme/materials.ts
|
|
1739
|
+
var c = getSemanticColors("dark");
|
|
1740
|
+
function parseHex(hex) {
|
|
1741
|
+
const h = hex.replace("#", "");
|
|
1742
|
+
const full = h.length === 3 ? h.split("").map((ch) => ch + ch).join("") : h;
|
|
1743
|
+
const rgb = [
|
|
1744
|
+
parseInt(full.slice(0, 2), 16),
|
|
1745
|
+
parseInt(full.slice(2, 4), 16),
|
|
1746
|
+
parseInt(full.slice(4, 6), 16)
|
|
1747
|
+
];
|
|
1748
|
+
return rgb.some(Number.isNaN) ? null : rgb;
|
|
1749
|
+
}
|
|
1750
|
+
function perceivedLuminance(hex) {
|
|
1751
|
+
const rgb = parseHex(hex);
|
|
1752
|
+
if (!rgb) return 0.5;
|
|
1753
|
+
const [r, g, b] = rgb;
|
|
1754
|
+
return (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
1755
|
+
}
|
|
1756
|
+
function grainOpacityForTone(baseColor) {
|
|
1757
|
+
return Math.min(0.24, Math.max(0.04, 0.02 + 0.31 * perceivedLuminance(baseColor)));
|
|
1758
|
+
}
|
|
1759
|
+
function grainForTone(baseColor) {
|
|
1760
|
+
const op = grainOpacityForTone(baseColor).toFixed(3);
|
|
1761
|
+
return `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='${op}'/%3E%3C/svg%3E")`;
|
|
1762
|
+
}
|
|
1763
|
+
function paperSheet(tone = c["surface-raised"]) {
|
|
1764
|
+
return {
|
|
1765
|
+
backgroundColor: tone,
|
|
1766
|
+
// Grain alone. The dither went with the gradient it protected — see header.
|
|
1767
|
+
backgroundImage: grainForTone(tone),
|
|
1768
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.20), 0 8px 22px rgba(0,0,0,0.50)"
|
|
1769
|
+
};
|
|
1770
|
+
}
|
|
1771
|
+
function insetWell(tone = c["surface-input"]) {
|
|
1772
|
+
return {
|
|
1773
|
+
backgroundColor: tone,
|
|
1774
|
+
boxShadow: "inset 0 2px 6px rgba(0,0,0,0.55), inset 0 -1px 0 rgba(255,255,255,0.12)"
|
|
1775
|
+
};
|
|
1776
|
+
}
|
|
1777
|
+
function barPaper(color, flip = false) {
|
|
1778
|
+
return {
|
|
1779
|
+
backgroundImage: grainForTone(color),
|
|
1780
|
+
boxShadow: flip ? "0 -6px 16px rgba(0,0,0,0.45)" : "inset 0 1.5px 0 rgba(255,255,255,0.22), 0 6px 16px rgba(0,0,0,0.45)"
|
|
1781
|
+
};
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
// src/theme/color-utils.ts
|
|
1776
1785
|
function hexToRgb(hex) {
|
|
1777
1786
|
const cleaned = hex.replace("#", "");
|
|
1778
1787
|
let r, g, b;
|
|
@@ -1812,32 +1821,32 @@ function rgbToHsv(r, g, b) {
|
|
|
1812
1821
|
return { h, s, v };
|
|
1813
1822
|
}
|
|
1814
1823
|
function hsvToRgb(h, s, v) {
|
|
1815
|
-
const
|
|
1816
|
-
const x =
|
|
1817
|
-
const m = v -
|
|
1824
|
+
const c2 = v * s;
|
|
1825
|
+
const x = c2 * (1 - Math.abs(h / 60 % 2 - 1));
|
|
1826
|
+
const m = v - c2;
|
|
1818
1827
|
let rPrime, gPrime, bPrime;
|
|
1819
1828
|
if (h >= 0 && h < 60) {
|
|
1820
|
-
rPrime =
|
|
1829
|
+
rPrime = c2;
|
|
1821
1830
|
gPrime = x;
|
|
1822
1831
|
bPrime = 0;
|
|
1823
1832
|
} else if (h >= 60 && h < 120) {
|
|
1824
1833
|
rPrime = x;
|
|
1825
|
-
gPrime =
|
|
1834
|
+
gPrime = c2;
|
|
1826
1835
|
bPrime = 0;
|
|
1827
1836
|
} else if (h >= 120 && h < 180) {
|
|
1828
1837
|
rPrime = 0;
|
|
1829
|
-
gPrime =
|
|
1838
|
+
gPrime = c2;
|
|
1830
1839
|
bPrime = x;
|
|
1831
1840
|
} else if (h >= 180 && h < 240) {
|
|
1832
1841
|
rPrime = 0;
|
|
1833
1842
|
gPrime = x;
|
|
1834
|
-
bPrime =
|
|
1843
|
+
bPrime = c2;
|
|
1835
1844
|
} else if (h >= 240 && h < 300) {
|
|
1836
1845
|
rPrime = x;
|
|
1837
1846
|
gPrime = 0;
|
|
1838
|
-
bPrime =
|
|
1847
|
+
bPrime = c2;
|
|
1839
1848
|
} else {
|
|
1840
|
-
rPrime =
|
|
1849
|
+
rPrime = c2;
|
|
1841
1850
|
gPrime = 0;
|
|
1842
1851
|
bPrime = x;
|
|
1843
1852
|
}
|
|
@@ -1890,194 +1899,6 @@ function isDark(hex) {
|
|
|
1890
1899
|
const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b);
|
|
1891
1900
|
return hsv.v < 0.6;
|
|
1892
1901
|
}
|
|
1893
|
-
var shadowColors = {
|
|
1894
|
-
// For charcoal surfaces (~#2C2C2C to #3C3C3C)
|
|
1895
|
-
charcoal: {
|
|
1896
|
-
dark: "rgba(0, 0, 0, 0.5)",
|
|
1897
|
-
light: "rgba(255, 255, 255, 0.12)",
|
|
1898
|
-
// brighter for crisp rim light
|
|
1899
|
-
darker: "rgba(0, 0, 0, 0.6)"
|
|
1900
|
-
},
|
|
1901
|
-
// For neutral dark surfaces (~#1F2937)
|
|
1902
|
-
neutralDark: {
|
|
1903
|
-
dark: "rgba(0, 0, 0, 0.4)",
|
|
1904
|
-
light: "rgba(255, 255, 255, 0.08)",
|
|
1905
|
-
darker: "rgba(0, 0, 0, 0.5)"
|
|
1906
|
-
},
|
|
1907
|
-
// For light surfaces (white/light gray backgrounds)
|
|
1908
|
-
neutralLight: {
|
|
1909
|
-
dark: "rgba(0, 0, 0, 0.15)",
|
|
1910
|
-
// Visible dark shadow for depth on light backgrounds
|
|
1911
|
-
light: "rgba(255, 255, 255, 1)",
|
|
1912
|
-
// Bright highlight for raised effect (visible on light gray)
|
|
1913
|
-
darker: "rgba(0, 0, 0, 0.2)"
|
|
1914
|
-
// Deeper shadow for pressed states
|
|
1915
|
-
}
|
|
1916
|
-
};
|
|
1917
|
-
var intensityConfig = {
|
|
1918
|
-
subtle: { offset: 1, blur: 2 },
|
|
1919
|
-
// very light, barely visible
|
|
1920
|
-
medium: { offset: 2, blur: 4 },
|
|
1921
|
-
// noticeable but restrained
|
|
1922
|
-
strong: { offset: 2, blur: 5 }
|
|
1923
|
-
// slightly deeper blur, same offset as medium
|
|
1924
|
-
};
|
|
1925
|
-
function createRaisedShadow(surface = "charcoal", intensity = "medium") {
|
|
1926
|
-
const colors = shadowColors[surface];
|
|
1927
|
-
const { offset, blur } = intensityConfig[intensity];
|
|
1928
|
-
const rimBlur = 1;
|
|
1929
|
-
return Platform.select({
|
|
1930
|
-
web: {
|
|
1931
|
-
boxShadow: `${offset}px ${offset}px ${blur}px ${colors.dark}, -${offset}px -${offset}px ${rimBlur}px ${colors.light}`
|
|
1932
|
-
},
|
|
1933
|
-
default: {
|
|
1934
|
-
// React Native shadow approximation (limited compared to web)
|
|
1935
|
-
shadowColor: "#000",
|
|
1936
|
-
shadowOffset: { width: offset, height: offset },
|
|
1937
|
-
shadowOpacity: 0.3,
|
|
1938
|
-
shadowRadius: blur / 2,
|
|
1939
|
-
elevation: offset
|
|
1940
|
-
}
|
|
1941
|
-
});
|
|
1942
|
-
}
|
|
1943
|
-
function createPressedShadow(surface = "charcoal", intensity = "medium") {
|
|
1944
|
-
const colors = shadowColors[surface];
|
|
1945
|
-
const { offset, blur } = intensityConfig[intensity];
|
|
1946
|
-
const rimOffset = 1;
|
|
1947
|
-
const rimBlur = 1;
|
|
1948
|
-
return Platform.select({
|
|
1949
|
-
web: {
|
|
1950
|
-
boxShadow: `inset ${offset}px ${offset}px ${blur}px ${colors.darker}, inset -${rimOffset}px -${rimOffset}px ${rimBlur}px ${colors.light}`
|
|
1951
|
-
},
|
|
1952
|
-
default: {
|
|
1953
|
-
// React Native doesn't support inset shadows, approximate with darker bg
|
|
1954
|
-
shadowOpacity: 0,
|
|
1955
|
-
elevation: 0
|
|
1956
|
-
}
|
|
1957
|
-
});
|
|
1958
|
-
}
|
|
1959
|
-
function createFlatShadow() {
|
|
1960
|
-
return Platform.select({
|
|
1961
|
-
web: {
|
|
1962
|
-
boxShadow: "none"
|
|
1963
|
-
},
|
|
1964
|
-
default: {
|
|
1965
|
-
shadowOpacity: 0,
|
|
1966
|
-
elevation: 0
|
|
1967
|
-
}
|
|
1968
|
-
});
|
|
1969
|
-
}
|
|
1970
|
-
function createRaisedHoverShadow(surface = "charcoal", intensity = "medium") {
|
|
1971
|
-
const colors = shadowColors[surface];
|
|
1972
|
-
const { offset, blur } = intensityConfig[intensity];
|
|
1973
|
-
const hoverOffset = Math.max(1, Math.round(offset / 2));
|
|
1974
|
-
const hoverBlur = Math.max(1, Math.round(blur / 2));
|
|
1975
|
-
const rimBlur = 1;
|
|
1976
|
-
return Platform.select({
|
|
1977
|
-
web: {
|
|
1978
|
-
// Keep same offsets as normal state for rim to prevent "shrinking" effect
|
|
1979
|
-
boxShadow: `${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${colors.dark}, -${offset}px -${offset}px ${rimBlur}px ${colors.light}`
|
|
1980
|
-
},
|
|
1981
|
-
default: {
|
|
1982
|
-
shadowColor: "#000",
|
|
1983
|
-
shadowOffset: { width: hoverOffset, height: hoverOffset },
|
|
1984
|
-
shadowOpacity: 0.2,
|
|
1985
|
-
shadowRadius: hoverBlur / 2,
|
|
1986
|
-
elevation: hoverOffset
|
|
1987
|
-
}
|
|
1988
|
-
});
|
|
1989
|
-
}
|
|
1990
|
-
function createPressedHoverShadow(surface = "charcoal", intensity = "medium") {
|
|
1991
|
-
const colors = shadowColors[surface];
|
|
1992
|
-
const { offset, blur } = intensityConfig[intensity];
|
|
1993
|
-
const hoverOffset = Math.max(1, Math.round(offset / 2));
|
|
1994
|
-
const hoverBlur = Math.max(1, Math.round(blur / 2));
|
|
1995
|
-
const rimBlur = 1;
|
|
1996
|
-
return Platform.select({
|
|
1997
|
-
web: {
|
|
1998
|
-
// Keep rim offset at 1px (same as pressed normal) to prevent "shrinking" effect
|
|
1999
|
-
boxShadow: `inset ${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${colors.darker}, inset -1px -1px ${rimBlur}px ${colors.light}`
|
|
2000
|
-
},
|
|
2001
|
-
default: {
|
|
2002
|
-
shadowOpacity: 0,
|
|
2003
|
-
elevation: 0
|
|
2004
|
-
}
|
|
2005
|
-
});
|
|
2006
|
-
}
|
|
2007
|
-
var neumorphicShadows = {
|
|
2008
|
-
// Charcoal surface shadows (for dark toolbars, cards)
|
|
2009
|
-
charcoal: {
|
|
2010
|
-
raised: {
|
|
2011
|
-
subtle: createRaisedShadow("charcoal", "subtle"),
|
|
2012
|
-
medium: createRaisedShadow("charcoal", "medium"),
|
|
2013
|
-
strong: createRaisedShadow("charcoal", "strong")
|
|
2014
|
-
},
|
|
2015
|
-
raisedHover: {
|
|
2016
|
-
subtle: createRaisedHoverShadow("charcoal", "subtle"),
|
|
2017
|
-
medium: createRaisedHoverShadow("charcoal", "medium"),
|
|
2018
|
-
strong: createRaisedHoverShadow("charcoal", "strong")
|
|
2019
|
-
},
|
|
2020
|
-
pressed: {
|
|
2021
|
-
subtle: createPressedShadow("charcoal", "subtle"),
|
|
2022
|
-
medium: createPressedShadow("charcoal", "medium"),
|
|
2023
|
-
strong: createPressedShadow("charcoal", "strong")
|
|
2024
|
-
},
|
|
2025
|
-
pressedHover: {
|
|
2026
|
-
subtle: createPressedHoverShadow("charcoal", "subtle"),
|
|
2027
|
-
medium: createPressedHoverShadow("charcoal", "medium"),
|
|
2028
|
-
strong: createPressedHoverShadow("charcoal", "strong")
|
|
2029
|
-
},
|
|
2030
|
-
flat: createFlatShadow()
|
|
2031
|
-
},
|
|
2032
|
-
// Neutral dark surface shadows
|
|
2033
|
-
neutralDark: {
|
|
2034
|
-
raised: {
|
|
2035
|
-
subtle: createRaisedShadow("neutralDark", "subtle"),
|
|
2036
|
-
medium: createRaisedShadow("neutralDark", "medium"),
|
|
2037
|
-
strong: createRaisedShadow("neutralDark", "strong")
|
|
2038
|
-
},
|
|
2039
|
-
raisedHover: {
|
|
2040
|
-
subtle: createRaisedHoverShadow("neutralDark", "subtle"),
|
|
2041
|
-
medium: createRaisedHoverShadow("neutralDark", "medium"),
|
|
2042
|
-
strong: createRaisedHoverShadow("neutralDark", "strong")
|
|
2043
|
-
},
|
|
2044
|
-
pressed: {
|
|
2045
|
-
subtle: createPressedShadow("neutralDark", "subtle"),
|
|
2046
|
-
medium: createPressedShadow("neutralDark", "medium"),
|
|
2047
|
-
strong: createPressedShadow("neutralDark", "strong")
|
|
2048
|
-
},
|
|
2049
|
-
pressedHover: {
|
|
2050
|
-
subtle: createPressedHoverShadow("neutralDark", "subtle"),
|
|
2051
|
-
medium: createPressedHoverShadow("neutralDark", "medium"),
|
|
2052
|
-
strong: createPressedHoverShadow("neutralDark", "strong")
|
|
2053
|
-
},
|
|
2054
|
-
flat: createFlatShadow()
|
|
2055
|
-
},
|
|
2056
|
-
// Neutral light surface shadows
|
|
2057
|
-
neutralLight: {
|
|
2058
|
-
raised: {
|
|
2059
|
-
subtle: createRaisedShadow("neutralLight", "subtle"),
|
|
2060
|
-
medium: createRaisedShadow("neutralLight", "medium"),
|
|
2061
|
-
strong: createRaisedShadow("neutralLight", "strong")
|
|
2062
|
-
},
|
|
2063
|
-
raisedHover: {
|
|
2064
|
-
subtle: createRaisedHoverShadow("neutralLight", "subtle"),
|
|
2065
|
-
medium: createRaisedHoverShadow("neutralLight", "medium"),
|
|
2066
|
-
strong: createRaisedHoverShadow("neutralLight", "strong")
|
|
2067
|
-
},
|
|
2068
|
-
pressed: {
|
|
2069
|
-
subtle: createPressedShadow("neutralLight", "subtle"),
|
|
2070
|
-
medium: createPressedShadow("neutralLight", "medium"),
|
|
2071
|
-
strong: createPressedShadow("neutralLight", "strong")
|
|
2072
|
-
},
|
|
2073
|
-
pressedHover: {
|
|
2074
|
-
subtle: createPressedHoverShadow("neutralLight", "subtle"),
|
|
2075
|
-
medium: createPressedHoverShadow("neutralLight", "medium"),
|
|
2076
|
-
strong: createPressedHoverShadow("neutralLight", "strong")
|
|
2077
|
-
},
|
|
2078
|
-
flat: createFlatShadow()
|
|
2079
|
-
}
|
|
2080
|
-
};
|
|
2081
1902
|
var elevationSystem = {
|
|
2082
1903
|
// Deep inset (recessed input fields, deeply pressed buttons)
|
|
2083
1904
|
[-2]: {
|
|
@@ -2106,7 +1927,13 @@ var elevationSystem = {
|
|
|
2106
1927
|
// Level 1: Subtle elevation (outline cards, subtle containers)
|
|
2107
1928
|
[1]: {
|
|
2108
1929
|
name: "subtle",
|
|
2109
|
-
|
|
1930
|
+
// The whole ladder was re-spaced in TD-07.16. It used to run
|
|
1931
|
+
// 0.01/0.02/0.04/0.06/0.08, where the first step was ~2 RGB values — under
|
|
1932
|
+
// the perceptual floor, so level 1 existed in the type system and nowhere on
|
|
1933
|
+
// screen. With drop-shadow now gated off below FLOATING_ELEVATION_MIN, TONE
|
|
1934
|
+
// is the only thing separating 0-3, so every step has to actually land.
|
|
1935
|
+
// Even 0.025 spacing, verified in elevation.test.ts as ΔL* > 1 per step.
|
|
1936
|
+
colorAdjustment: 0.025,
|
|
2110
1937
|
shadowIntensity: "subtle",
|
|
2111
1938
|
shadowStyle: "raised",
|
|
2112
1939
|
description: "Subtle elevation (outline cards, subtle containers)"
|
|
@@ -2114,7 +1941,7 @@ var elevationSystem = {
|
|
|
2114
1941
|
// Level 2: Standard elevation (default cards, buttons)
|
|
2115
1942
|
[2]: {
|
|
2116
1943
|
name: "standard",
|
|
2117
|
-
colorAdjustment: 0.
|
|
1944
|
+
colorAdjustment: 0.05,
|
|
2118
1945
|
shadowIntensity: "medium",
|
|
2119
1946
|
shadowStyle: "raised",
|
|
2120
1947
|
description: "Standard elevation (default cards, raised buttons)"
|
|
@@ -2122,7 +1949,7 @@ var elevationSystem = {
|
|
|
2122
1949
|
// Level 3: Prominent elevation (important cards, modals)
|
|
2123
1950
|
[3]: {
|
|
2124
1951
|
name: "prominent",
|
|
2125
|
-
colorAdjustment: 0.
|
|
1952
|
+
colorAdjustment: 0.075,
|
|
2126
1953
|
shadowIntensity: "strong",
|
|
2127
1954
|
shadowStyle: "raised",
|
|
2128
1955
|
description: "Prominent elevation (important cards, modals, dropdowns)"
|
|
@@ -2130,7 +1957,7 @@ var elevationSystem = {
|
|
|
2130
1957
|
// Level 4: High elevation (overlays, popovers)
|
|
2131
1958
|
[4]: {
|
|
2132
1959
|
name: "high",
|
|
2133
|
-
colorAdjustment: 0.
|
|
1960
|
+
colorAdjustment: 0.1,
|
|
2134
1961
|
shadowIntensity: "strong",
|
|
2135
1962
|
shadowStyle: "raised",
|
|
2136
1963
|
description: "High elevation (overlays, popovers, tooltips)"
|
|
@@ -2138,7 +1965,7 @@ var elevationSystem = {
|
|
|
2138
1965
|
// Level 5: Floating (toasts, floating action buttons)
|
|
2139
1966
|
[5]: {
|
|
2140
1967
|
name: "floating",
|
|
2141
|
-
colorAdjustment: 0.
|
|
1968
|
+
colorAdjustment: 0.13,
|
|
2142
1969
|
shadowIntensity: "strong",
|
|
2143
1970
|
shadowStyle: "raised",
|
|
2144
1971
|
description: "Floating elevation (toasts, floating action buttons, highest z-index)"
|
|
@@ -2257,12 +2084,12 @@ function calculateElevationShadow(baseColor, level, theme, isHovered = false) {
|
|
|
2257
2084
|
const elevatedSurfaceColor = calculateElevationSurface(baseColor, level);
|
|
2258
2085
|
const rimLightColor = calculateRimLightColor(baseColor, level);
|
|
2259
2086
|
const darkShadowColors = calculateDarkShadowColors(elevatedSurfaceColor);
|
|
2260
|
-
const
|
|
2087
|
+
const intensityConfig = {
|
|
2261
2088
|
subtle: { offset: 1, blur: 2 },
|
|
2262
2089
|
medium: { offset: 2, blur: 4 },
|
|
2263
2090
|
strong: { offset: 2, blur: 5 }
|
|
2264
2091
|
};
|
|
2265
|
-
const { offset, blur } =
|
|
2092
|
+
const { offset, blur } = intensityConfig[config.shadowIntensity];
|
|
2266
2093
|
const rimConfig = getRimLightConfig();
|
|
2267
2094
|
if (config.shadowStyle === "pressed") {
|
|
2268
2095
|
if (isHovered) {
|
|
@@ -2318,12 +2145,13 @@ function calculateElevationShadow(baseColor, level, theme, isHovered = false) {
|
|
|
2318
2145
|
});
|
|
2319
2146
|
}
|
|
2320
2147
|
}
|
|
2148
|
+
var FLOATING_ELEVATION_MIN = 4;
|
|
2321
2149
|
function getElevationShadow(baseColor, level, theme, isHovered = false) {
|
|
2322
2150
|
const cacheKey = getShadowCacheKey(baseColor, level, theme, isHovered);
|
|
2323
2151
|
if (elevationShadowCache.has(cacheKey)) {
|
|
2324
2152
|
return elevationShadowCache.get(cacheKey);
|
|
2325
2153
|
}
|
|
2326
|
-
const result = calculateElevationShadow(baseColor, level, theme, isHovered);
|
|
2154
|
+
const result = level > 0 && level < FLOATING_ELEVATION_MIN ? {} : calculateElevationShadow(baseColor, level, theme, isHovered);
|
|
2327
2155
|
if (elevationShadowCache.size >= MAX_SHADOW_CACHE_SIZE) {
|
|
2328
2156
|
const firstKey = elevationShadowCache.keys().next().value;
|
|
2329
2157
|
elevationShadowCache.delete(firstKey);
|
|
@@ -2593,7 +2421,7 @@ var audiobookPreset = {
|
|
|
2593
2421
|
"text-primary": "#f4f3f1",
|
|
2594
2422
|
"text-secondary": "#b5b3af",
|
|
2595
2423
|
"text-tertiary": "#7a7875",
|
|
2596
|
-
// Surfaces: warm
|
|
2424
|
+
// Surfaces: warm greys (not pure gray)
|
|
2597
2425
|
"surface-base": "#101114",
|
|
2598
2426
|
"surface-elevated": "#15171c",
|
|
2599
2427
|
"surface-raised": "#1a1d24",
|
|
@@ -2604,9 +2432,9 @@ var audiobookPreset = {
|
|
|
2604
2432
|
"background-default": "#101114",
|
|
2605
2433
|
"background-subtle": "#1a1d24",
|
|
2606
2434
|
// Borders
|
|
2607
|
-
"
|
|
2608
|
-
"
|
|
2609
|
-
"
|
|
2435
|
+
"hairline-default": "rgba(255, 255, 255, 0.06)",
|
|
2436
|
+
"hairline-subtle": "rgba(255, 255, 255, 0.03)",
|
|
2437
|
+
"hairline-strong": "#2d323d",
|
|
2610
2438
|
"border-focus": "#d4782a",
|
|
2611
2439
|
"border-input": "#2d323d",
|
|
2612
2440
|
"border-input-hover": "#454c5c",
|
|
@@ -2631,13 +2459,14 @@ var audiobookPreset = {
|
|
|
2631
2459
|
rootClasses: ["atmosphere-warm", "grain"]
|
|
2632
2460
|
};
|
|
2633
2461
|
var SURFACE_LEVEL_TOKEN = {
|
|
2462
|
+
frame: "background-frame",
|
|
2634
2463
|
background: "background-base",
|
|
2635
2464
|
base: "surface-base",
|
|
2636
2465
|
elevated: "surface-elevated",
|
|
2637
2466
|
raised: "surface-raised",
|
|
2638
2467
|
overlay: "surface-overlay"
|
|
2639
2468
|
};
|
|
2640
|
-
var PRESSED_RAMP = ["
|
|
2469
|
+
var PRESSED_RAMP = ["frame", "background", "base", "elevated", "raised", "overlay"];
|
|
2641
2470
|
var ON_SURFACE_TOKEN = {
|
|
2642
2471
|
primary: "text-primary",
|
|
2643
2472
|
secondary: "text-secondary",
|
|
@@ -2652,22 +2481,17 @@ function useSurfaceMode() {
|
|
|
2652
2481
|
return useContext(SurfaceContext).mode;
|
|
2653
2482
|
}
|
|
2654
2483
|
function onSurfaceColors(mode) {
|
|
2655
|
-
const
|
|
2484
|
+
const c2 = getSemanticColors(mode);
|
|
2656
2485
|
return {
|
|
2657
|
-
primary:
|
|
2658
|
-
secondary:
|
|
2659
|
-
tertiary:
|
|
2486
|
+
primary: c2[ON_SURFACE_TOKEN.primary],
|
|
2487
|
+
secondary: c2[ON_SURFACE_TOKEN.secondary],
|
|
2488
|
+
tertiary: c2[ON_SURFACE_TOKEN.tertiary]
|
|
2660
2489
|
};
|
|
2661
2490
|
}
|
|
2662
2491
|
function useOnSurfaceColor(role = "primary") {
|
|
2663
2492
|
return getSemanticColors(useSurfaceMode())[ON_SURFACE_TOKEN[role]];
|
|
2664
2493
|
}
|
|
2665
|
-
function insetFloor(mode) {
|
|
2666
|
-
const colors = getSemanticColors(mode);
|
|
2667
|
-
return colors["surface-inset"] ?? surfaceRampDark.inset;
|
|
2668
|
-
}
|
|
2669
2494
|
function surfaceBackground(level, mode) {
|
|
2670
|
-
if (level === "inset") return insetFloor(mode);
|
|
2671
2495
|
return getSemanticColors(mode)[SURFACE_LEVEL_TOKEN[level]];
|
|
2672
2496
|
}
|
|
2673
2497
|
function pressedLevel(parent) {
|
|
@@ -2718,12 +2542,12 @@ function useTheme() {
|
|
|
2718
2542
|
var variantStyles3 = {
|
|
2719
2543
|
elevated: "",
|
|
2720
2544
|
// Will be set dynamically via elevation system
|
|
2721
|
-
outline: "border-2 border-
|
|
2545
|
+
outline: "border-2 border-hairline-strong",
|
|
2722
2546
|
// Thicker border with stronger contrast
|
|
2723
2547
|
filled: "",
|
|
2724
2548
|
// Will be set dynamically via elevation system
|
|
2725
|
-
accent: "border border-
|
|
2726
|
-
subtle: "border border-
|
|
2549
|
+
accent: "border border-hairline",
|
|
2550
|
+
subtle: "border border-hairline-subtle"
|
|
2727
2551
|
};
|
|
2728
2552
|
function Card({
|
|
2729
2553
|
variant = "elevated",
|
|
@@ -2958,7 +2782,7 @@ function Indicator({
|
|
|
2958
2782
|
// src/components/ui/badge/Badge.tsx
|
|
2959
2783
|
var variantColorStyles = {
|
|
2960
2784
|
solid: {
|
|
2961
|
-
default: "bg-
|
|
2785
|
+
default: "bg-hairline-strong text-text-inverse",
|
|
2962
2786
|
primary: "bg-brand-primary text-text-inverse",
|
|
2963
2787
|
secondary: "bg-brand-secondary text-text-inverse",
|
|
2964
2788
|
success: "bg-status-success text-text-inverse",
|
|
@@ -2976,7 +2800,7 @@ var variantColorStyles = {
|
|
|
2976
2800
|
info: "bg-status-info-subtle text-status-info"
|
|
2977
2801
|
},
|
|
2978
2802
|
outline: {
|
|
2979
|
-
default: "border border-
|
|
2803
|
+
default: "border border-hairline-strong text-text-secondary",
|
|
2980
2804
|
primary: "border border-brand-primary text-brand-primary",
|
|
2981
2805
|
secondary: "border border-brand-secondary text-brand-secondary",
|
|
2982
2806
|
success: "border border-status-success text-status-success",
|
|
@@ -3122,7 +2946,7 @@ function Avatar({
|
|
|
3122
2946
|
accessibilityLabel: alt || resolvedFallback || "Avatar",
|
|
3123
2947
|
className: cn(
|
|
3124
2948
|
"items-center justify-center rounded-full overflow-hidden",
|
|
3125
|
-
!nameColor && "bg-
|
|
2949
|
+
!nameColor && "bg-hairline-strong",
|
|
3126
2950
|
styles2.container,
|
|
3127
2951
|
className
|
|
3128
2952
|
),
|
|
@@ -3143,7 +2967,7 @@ var badgeColors = {
|
|
|
3143
2967
|
success: "bg-status-success",
|
|
3144
2968
|
error: "bg-status-error",
|
|
3145
2969
|
warning: "bg-status-warning",
|
|
3146
|
-
default: "bg-
|
|
2970
|
+
default: "bg-hairline-strong"
|
|
3147
2971
|
};
|
|
3148
2972
|
function AvatarBadge({ color = "success", className }) {
|
|
3149
2973
|
return /* @__PURE__ */ jsx(
|
|
@@ -3261,7 +3085,7 @@ var Checkbox = forwardRef(function Checkbox2({
|
|
|
3261
3085
|
className: cn(
|
|
3262
3086
|
"items-center justify-center rounded border-2 transition-colors",
|
|
3263
3087
|
styles2.box,
|
|
3264
|
-
isChecked || isIndeterminate ? "bg-brand-primary border-brand-primary" : "bg-transparent border-
|
|
3088
|
+
isChecked || isIndeterminate ? "bg-brand-primary border-brand-primary" : "bg-transparent border-hairline",
|
|
3265
3089
|
isInvalid && "border-status-error",
|
|
3266
3090
|
!isDisabled && "web:hover:border-brand-primary"
|
|
3267
3091
|
),
|
|
@@ -3325,7 +3149,7 @@ var Switch = forwardRef(function Switch2({
|
|
|
3325
3149
|
className: cn(
|
|
3326
3150
|
"rounded-full p-0.5 transition-colors",
|
|
3327
3151
|
styles2.track,
|
|
3328
|
-
isChecked ? "bg-brand-primary" : "bg-
|
|
3152
|
+
isChecked ? "bg-brand-primary" : "bg-hairline-strong"
|
|
3329
3153
|
),
|
|
3330
3154
|
children: /* @__PURE__ */ jsx(
|
|
3331
3155
|
View,
|
|
@@ -3645,7 +3469,7 @@ function Tabs({
|
|
|
3645
3469
|
function TabList({ children, className }) {
|
|
3646
3470
|
const { variant, orientation } = useContext(TabsContext);
|
|
3647
3471
|
const variantStyles5 = {
|
|
3648
|
-
line: orientation === "horizontal" ? "border-b border-
|
|
3472
|
+
line: orientation === "horizontal" ? "border-b border-hairline" : "border-r border-hairline",
|
|
3649
3473
|
enclosed: "bg-surface-raised rounded-lg p-1",
|
|
3650
3474
|
"soft-rounded": "bg-surface-raised rounded-full p-1"
|
|
3651
3475
|
};
|
|
@@ -4131,7 +3955,7 @@ function Accordion({
|
|
|
4131
3955
|
return newSet;
|
|
4132
3956
|
});
|
|
4133
3957
|
};
|
|
4134
|
-
return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { openIndices, toggleIndex, allowMultiple }, children: /* @__PURE__ */ jsx(View, { className: cn("w-full divide-y divide-
|
|
3958
|
+
return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { openIndices, toggleIndex, allowMultiple }, children: /* @__PURE__ */ jsx(View, { className: cn("w-full divide-y divide-hairline", className), ...props, children: React25.Children.map(children, (child, index) => {
|
|
4135
3959
|
if (React25.isValidElement(child)) {
|
|
4136
3960
|
return React25.cloneElement(child, { index });
|
|
4137
3961
|
}
|
|
@@ -4361,7 +4185,7 @@ function PopoverContent({ children, className }) {
|
|
|
4361
4185
|
{
|
|
4362
4186
|
className: cn(
|
|
4363
4187
|
"absolute z-50 min-w-[200px]",
|
|
4364
|
-
"bg-surface-elevated rounded-lg shadow-lg border border-
|
|
4188
|
+
"bg-surface-elevated rounded-lg shadow-lg border border-hairline",
|
|
4365
4189
|
"p-4",
|
|
4366
4190
|
placementStyles3[placement],
|
|
4367
4191
|
className
|
|
@@ -4455,7 +4279,7 @@ function MenuList({ children, className }) {
|
|
|
4455
4279
|
{
|
|
4456
4280
|
className: cn(
|
|
4457
4281
|
"absolute z-50 top-full left-0 mt-1 min-w-[160px]",
|
|
4458
|
-
"bg-surface-elevated rounded-lg shadow-lg border border-
|
|
4282
|
+
"bg-surface-elevated rounded-lg shadow-lg border border-hairline",
|
|
4459
4283
|
"py-1 overflow-hidden",
|
|
4460
4284
|
className
|
|
4461
4285
|
),
|
|
@@ -4509,7 +4333,7 @@ function MenuItem({
|
|
|
4509
4333
|
);
|
|
4510
4334
|
}
|
|
4511
4335
|
function MenuDivider({ className }) {
|
|
4512
|
-
return /* @__PURE__ */ jsx(View, { className: cn("h-px bg-
|
|
4336
|
+
return /* @__PURE__ */ jsx(View, { className: cn("h-px bg-hairline my-1", className) });
|
|
4513
4337
|
}
|
|
4514
4338
|
function MenuGroup({ label, children, className }) {
|
|
4515
4339
|
return /* @__PURE__ */ jsxs(View, { className, children: [
|
|
@@ -4587,7 +4411,7 @@ function Select({
|
|
|
4587
4411
|
className: cn(
|
|
4588
4412
|
"flex-row items-center justify-between px-4 py-2.5 rounded-md border",
|
|
4589
4413
|
variant === "filled" ? "bg-black/30" : "bg-surface-base",
|
|
4590
|
-
isInvalid ? "border-border-input-error" : variant === "filled" ? "border-
|
|
4414
|
+
isInvalid ? "border-border-input-error" : variant === "filled" ? "border-hairline-subtle" : "border-border-input",
|
|
4591
4415
|
!isDisabled && !isInvalid && "web:hover:border-border-input-hover",
|
|
4592
4416
|
isOpen && "border-border-input-focus",
|
|
4593
4417
|
isDisabled && "opacity-50 cursor-not-allowed"
|
|
@@ -4634,7 +4458,7 @@ function Select({
|
|
|
4634
4458
|
{
|
|
4635
4459
|
className: cn(
|
|
4636
4460
|
"absolute z-50 top-full left-0 right-0 mt-1",
|
|
4637
|
-
"bg-surface-elevated rounded-md shadow-lg border border-
|
|
4461
|
+
"bg-surface-elevated rounded-md shadow-lg border border-hairline",
|
|
4638
4462
|
"max-h-60 overflow-hidden"
|
|
4639
4463
|
),
|
|
4640
4464
|
children: /* @__PURE__ */ jsx(ScrollView, { className: "py-1", children: options.map((option) => /* @__PURE__ */ jsx(SelectOption, { option }, option.value)) })
|
|
@@ -4665,7 +4489,7 @@ function SelectOption({ option }) {
|
|
|
4665
4489
|
{
|
|
4666
4490
|
className: cn(
|
|
4667
4491
|
"w-4 h-4 mr-3 rounded border",
|
|
4668
|
-
selected ? "bg-brand-primary border-brand-primary" : "border-
|
|
4492
|
+
selected ? "bg-brand-primary border-brand-primary" : "border-hairline-strong"
|
|
4669
4493
|
),
|
|
4670
4494
|
children: selected && /* @__PURE__ */ jsx(Text, { className: "text-white text-xs text-center", children: "\u2713" })
|
|
4671
4495
|
}
|
|
@@ -4680,8 +4504,11 @@ var ToolbarButtonContext = createContext({
|
|
|
4680
4504
|
setIsOpen: () => {
|
|
4681
4505
|
}
|
|
4682
4506
|
});
|
|
4683
|
-
var
|
|
4684
|
-
var
|
|
4507
|
+
var SEMANTIC = getSemanticColors("dark");
|
|
4508
|
+
var BUTTON_BG = greyRamp[800];
|
|
4509
|
+
var MENU_BG = greyRamp[900];
|
|
4510
|
+
var EDGE = { borderWidth: 1, borderColor: SEMANTIC["hairline-default"] };
|
|
4511
|
+
var EDGE_PRESSED = { borderWidth: 1, borderColor: SEMANTIC["hairline-strong"] };
|
|
4685
4512
|
var hoverColors = getHoverColors(BUTTON_BG, "medium");
|
|
4686
4513
|
var sizeStyles10 = {
|
|
4687
4514
|
sm: "px-2 py-1 min-h-[26px]",
|
|
@@ -4699,7 +4526,7 @@ function ToolbarButton({
|
|
|
4699
4526
|
isActive,
|
|
4700
4527
|
isDisabled = false,
|
|
4701
4528
|
size = "md",
|
|
4702
|
-
variant = "
|
|
4529
|
+
variant = "raised",
|
|
4703
4530
|
tooltip,
|
|
4704
4531
|
showLabel = true,
|
|
4705
4532
|
onPress,
|
|
@@ -4726,22 +4553,20 @@ function ToolbarButton({
|
|
|
4726
4553
|
if (isActive === true) return resolveColor("brand-primary");
|
|
4727
4554
|
return showActive ? "#FFFFFF" : "#D1D1D1";
|
|
4728
4555
|
};
|
|
4729
|
-
const
|
|
4556
|
+
const getRaisedStyle = () => {
|
|
4730
4557
|
if (isDisabled) {
|
|
4731
4558
|
return styles.disabledBg;
|
|
4732
4559
|
}
|
|
4733
|
-
const shadows = neumorphicShadows.charcoal;
|
|
4734
4560
|
if (showActive) {
|
|
4735
4561
|
return {
|
|
4736
|
-
backgroundColor: isHovered ? hoverColors.pressed :
|
|
4737
|
-
...
|
|
4738
|
-
};
|
|
4739
|
-
} else {
|
|
4740
|
-
return {
|
|
4741
|
-
backgroundColor: isHovered ? hoverColors.raised : BUTTON_BG,
|
|
4742
|
-
...isHovered ? shadows.raisedHover.subtle : shadows.raised.subtle
|
|
4562
|
+
backgroundColor: isHovered ? hoverColors.pressed : greyRamp[900],
|
|
4563
|
+
...EDGE_PRESSED
|
|
4743
4564
|
};
|
|
4744
4565
|
}
|
|
4566
|
+
return {
|
|
4567
|
+
backgroundColor: isHovered ? hoverColors.raised : BUTTON_BG,
|
|
4568
|
+
...EDGE
|
|
4569
|
+
};
|
|
4745
4570
|
};
|
|
4746
4571
|
return /* @__PURE__ */ jsx(ToolbarButtonContext.Provider, { value: { isOpen, setIsOpen }, children: /* @__PURE__ */ jsxs(View, { className: "relative", ...props, children: [
|
|
4747
4572
|
/* @__PURE__ */ jsxs(
|
|
@@ -4766,9 +4591,9 @@ function ToolbarButton({
|
|
|
4766
4591
|
className
|
|
4767
4592
|
),
|
|
4768
4593
|
style: [
|
|
4769
|
-
variant === "
|
|
4594
|
+
variant === "raised" && getRaisedStyle(),
|
|
4770
4595
|
variant === "default" && {
|
|
4771
|
-
backgroundColor: showActive ? BUTTON_BG :
|
|
4596
|
+
backgroundColor: showActive ? BUTTON_BG : greyRamp[600]
|
|
4772
4597
|
}
|
|
4773
4598
|
],
|
|
4774
4599
|
children: [
|
|
@@ -4813,7 +4638,7 @@ function ToolbarButton({
|
|
|
4813
4638
|
{
|
|
4814
4639
|
className: cn(
|
|
4815
4640
|
"absolute z-50 top-full left-0 mt-1",
|
|
4816
|
-
"rounded-lg shadow-lg border border-
|
|
4641
|
+
"rounded-lg shadow-lg border border-hairline",
|
|
4817
4642
|
"min-w-[150px] overflow-hidden",
|
|
4818
4643
|
`bg-[${MENU_BG}]`
|
|
4819
4644
|
),
|
|
@@ -4912,10 +4737,10 @@ var sizeConfig = {
|
|
|
4912
4737
|
lg: { outer: "w-6 h-6", inner: "w-3 h-3", text: "text-lg" }
|
|
4913
4738
|
};
|
|
4914
4739
|
var colorStyles4 = {
|
|
4915
|
-
primary: { checked: "border-brand-primary bg-brand-primary", unchecked: "border-
|
|
4916
|
-
secondary: { checked: "border-brand-secondary bg-brand-secondary", unchecked: "border-
|
|
4917
|
-
success: { checked: "border-status-success bg-status-success", unchecked: "border-
|
|
4918
|
-
error: { checked: "border-status-error bg-status-error", unchecked: "border-
|
|
4740
|
+
primary: { checked: "border-brand-primary bg-brand-primary", unchecked: "border-hairline-strong" },
|
|
4741
|
+
secondary: { checked: "border-brand-secondary bg-brand-secondary", unchecked: "border-hairline-strong" },
|
|
4742
|
+
success: { checked: "border-status-success bg-status-success", unchecked: "border-hairline-strong" },
|
|
4743
|
+
error: { checked: "border-status-error bg-status-error", unchecked: "border-hairline-strong" }
|
|
4919
4744
|
};
|
|
4920
4745
|
function Radio({
|
|
4921
4746
|
value,
|
|
@@ -5055,7 +4880,7 @@ function Drawer({
|
|
|
5055
4880
|
accessibilityRole: "dialog",
|
|
5056
4881
|
...props,
|
|
5057
4882
|
children: [
|
|
5058
|
-
(title || showCloseButton) && /* @__PURE__ */ jsxs(View, { className: "flex-row items-center justify-between px-4 py-3 border-b border-
|
|
4883
|
+
(title || showCloseButton) && /* @__PURE__ */ jsxs(View, { className: "flex-row items-center justify-between px-4 py-3 border-b border-hairline", children: [
|
|
5059
4884
|
title && /* @__PURE__ */ jsx(Text, { className: "text-lg font-semibold text-text-primary", children: title }),
|
|
5060
4885
|
showCloseButton && /* @__PURE__ */ jsx(
|
|
5061
4886
|
Pressable,
|
|
@@ -5079,7 +4904,7 @@ function DrawerHeader({ className, children, ...props }) {
|
|
|
5079
4904
|
return /* @__PURE__ */ jsx(
|
|
5080
4905
|
View,
|
|
5081
4906
|
{
|
|
5082
|
-
className: cn("px-4 py-3 border-b border-
|
|
4907
|
+
className: cn("px-4 py-3 border-b border-hairline", className),
|
|
5083
4908
|
...props,
|
|
5084
4909
|
children
|
|
5085
4910
|
}
|
|
@@ -5104,7 +4929,7 @@ function DrawerFooter({ className, children, ...props }) {
|
|
|
5104
4929
|
{
|
|
5105
4930
|
className: cn(
|
|
5106
4931
|
"flex-row items-center justify-end gap-3",
|
|
5107
|
-
"px-4 py-3 border-t border-
|
|
4932
|
+
"px-4 py-3 border-t border-hairline",
|
|
5108
4933
|
className
|
|
5109
4934
|
),
|
|
5110
4935
|
...props,
|
|
@@ -5243,7 +5068,7 @@ function CircularProgress({
|
|
|
5243
5068
|
cy: center,
|
|
5244
5069
|
r: radius,
|
|
5245
5070
|
fill: "none",
|
|
5246
|
-
stroke: "var(--color-
|
|
5071
|
+
stroke: "var(--color-hairline-default)",
|
|
5247
5072
|
strokeWidth
|
|
5248
5073
|
}
|
|
5249
5074
|
),
|
|
@@ -5312,7 +5137,7 @@ function ProgressSteps({
|
|
|
5312
5137
|
className: cn(
|
|
5313
5138
|
"rounded-full",
|
|
5314
5139
|
dot,
|
|
5315
|
-
index <= currentStep ? colorStyles5[color] : "bg-
|
|
5140
|
+
index <= currentStep ? colorStyles5[color] : "bg-hairline-strong"
|
|
5316
5141
|
)
|
|
5317
5142
|
}
|
|
5318
5143
|
),
|
|
@@ -5322,7 +5147,7 @@ function ProgressSteps({
|
|
|
5322
5147
|
className: cn(
|
|
5323
5148
|
"flex-1 mx-1",
|
|
5324
5149
|
connector,
|
|
5325
|
-
index < currentStep ? colorStyles5[color] : "bg-
|
|
5150
|
+
index < currentStep ? colorStyles5[color] : "bg-hairline-strong"
|
|
5326
5151
|
)
|
|
5327
5152
|
}
|
|
5328
5153
|
)
|
|
@@ -5656,7 +5481,7 @@ function Autocomplete({
|
|
|
5656
5481
|
{
|
|
5657
5482
|
className: cn(
|
|
5658
5483
|
"absolute z-50 top-full left-0 right-0 mt-1",
|
|
5659
|
-
"bg-surface-elevated rounded-md shadow-lg border border-
|
|
5484
|
+
"bg-surface-elevated rounded-md shadow-lg border border-hairline",
|
|
5660
5485
|
"max-h-60 overflow-hidden"
|
|
5661
5486
|
),
|
|
5662
5487
|
children: /* @__PURE__ */ jsxs(ScrollView, { className: "py-1", children: [
|
|
@@ -5809,7 +5634,7 @@ function HelpTip({
|
|
|
5809
5634
|
className: cn(
|
|
5810
5635
|
"absolute z-50",
|
|
5811
5636
|
"bg-surface-elevated rounded-lg shadow-lg",
|
|
5812
|
-
"border border-
|
|
5637
|
+
"border border-hairline",
|
|
5813
5638
|
"px-3 py-2",
|
|
5814
5639
|
placementStyles2[placement],
|
|
5815
5640
|
tooltipClassName
|
|
@@ -5985,7 +5810,7 @@ function FormActions({
|
|
|
5985
5810
|
{
|
|
5986
5811
|
className: cn(
|
|
5987
5812
|
"flex-row items-center gap-3 pt-4",
|
|
5988
|
-
"border-t border-
|
|
5813
|
+
"border-t border-hairline mt-4",
|
|
5989
5814
|
alignStyles[align],
|
|
5990
5815
|
className
|
|
5991
5816
|
),
|
|
@@ -6204,7 +6029,7 @@ function ListItemDivider({ inset = true, className, ...props }) {
|
|
|
6204
6029
|
}
|
|
6205
6030
|
var variantColorStyles2 = {
|
|
6206
6031
|
subtle: {
|
|
6207
|
-
default: "bg-surface-raised border-
|
|
6032
|
+
default: "bg-surface-raised border-hairline-subtle text-text-secondary",
|
|
6208
6033
|
primary: "bg-brand-primary/10 border-brand-primary/25 text-brand-primary",
|
|
6209
6034
|
secondary: "bg-brand-secondary/10 border-brand-secondary/25 text-brand-secondary",
|
|
6210
6035
|
success: "bg-status-success/10 border-status-success/25 text-status-success",
|
|
@@ -6213,7 +6038,7 @@ var variantColorStyles2 = {
|
|
|
6213
6038
|
info: "bg-status-info/10 border-status-info/25 text-status-info"
|
|
6214
6039
|
},
|
|
6215
6040
|
outline: {
|
|
6216
|
-
default: "border-
|
|
6041
|
+
default: "border-hairline text-text-secondary",
|
|
6217
6042
|
primary: "border-brand-primary text-brand-primary",
|
|
6218
6043
|
secondary: "border-brand-secondary text-brand-secondary",
|
|
6219
6044
|
success: "border-status-success text-status-success",
|
|
@@ -6424,7 +6249,7 @@ function Sidebar({
|
|
|
6424
6249
|
{
|
|
6425
6250
|
style: { width: currentWidth },
|
|
6426
6251
|
className: cn(
|
|
6427
|
-
"h-full flex-col bg-surface-base border-r border-
|
|
6252
|
+
"h-full flex-col bg-surface-base border-r border-hairline transition-all duration-200",
|
|
6428
6253
|
className
|
|
6429
6254
|
),
|
|
6430
6255
|
...props,
|
|
@@ -6433,7 +6258,7 @@ function Sidebar({
|
|
|
6433
6258
|
) });
|
|
6434
6259
|
}
|
|
6435
6260
|
function SidebarHeader({ children, className }) {
|
|
6436
|
-
return /* @__PURE__ */ jsx(View, { className: cn("px-4 py-4 border-b border-
|
|
6261
|
+
return /* @__PURE__ */ jsx(View, { className: cn("px-4 py-4 border-b border-hairline-subtle", className), children });
|
|
6437
6262
|
}
|
|
6438
6263
|
function SidebarContent({ children, className }) {
|
|
6439
6264
|
return /* @__PURE__ */ jsx(
|
|
@@ -6446,7 +6271,7 @@ function SidebarContent({ children, className }) {
|
|
|
6446
6271
|
);
|
|
6447
6272
|
}
|
|
6448
6273
|
function SidebarFooter({ children, className }) {
|
|
6449
|
-
return /* @__PURE__ */ jsx(View, { className: cn("px-2 py-4 border-t border-
|
|
6274
|
+
return /* @__PURE__ */ jsx(View, { className: cn("px-2 py-4 border-t border-hairline-subtle", className), children });
|
|
6450
6275
|
}
|
|
6451
6276
|
function SidebarSection({ title, children, className }) {
|
|
6452
6277
|
const { isCollapsed } = useContext(SidebarContext);
|
|
@@ -6516,7 +6341,7 @@ function SidebarItem({
|
|
|
6516
6341
|
);
|
|
6517
6342
|
}
|
|
6518
6343
|
function SidebarDivider({ className }) {
|
|
6519
|
-
return /* @__PURE__ */ jsx(View, { className: cn("h-px mx-4 my-2 bg-
|
|
6344
|
+
return /* @__PURE__ */ jsx(View, { className: cn("h-px mx-4 my-2 bg-hairline-subtle", className) });
|
|
6520
6345
|
}
|
|
6521
6346
|
var TableContext = createContext({
|
|
6522
6347
|
sortDirection: null,
|
|
@@ -6913,7 +6738,7 @@ function StepConnector({ index }) {
|
|
|
6913
6738
|
{
|
|
6914
6739
|
className: cn(
|
|
6915
6740
|
"flex-1 h-0.5 mx-2",
|
|
6916
|
-
isCompleted ? "bg-brand-primary" : "bg-
|
|
6741
|
+
isCompleted ? "bg-brand-primary" : "bg-hairline"
|
|
6917
6742
|
)
|
|
6918
6743
|
}
|
|
6919
6744
|
);
|
|
@@ -6923,7 +6748,7 @@ function StepConnector({ index }) {
|
|
|
6923
6748
|
{
|
|
6924
6749
|
className: cn(
|
|
6925
6750
|
"w-0.5 h-8 ml-4 my-1",
|
|
6926
|
-
isCompleted ? "bg-brand-primary" : "bg-
|
|
6751
|
+
isCompleted ? "bg-brand-primary" : "bg-hairline"
|
|
6927
6752
|
)
|
|
6928
6753
|
}
|
|
6929
6754
|
);
|
|
@@ -6959,7 +6784,7 @@ function StepIndicator({
|
|
|
6959
6784
|
const statusStyles2 = {
|
|
6960
6785
|
completed: "bg-brand-primary border-brand-primary",
|
|
6961
6786
|
active: "bg-brand-primary border-brand-primary",
|
|
6962
|
-
upcoming: "bg-surface-base border-
|
|
6787
|
+
upcoming: "bg-surface-base border-hairline-strong",
|
|
6963
6788
|
error: "bg-status-error border-status-error"
|
|
6964
6789
|
};
|
|
6965
6790
|
return /* @__PURE__ */ jsx(
|
|
@@ -7357,7 +7182,7 @@ var baseBadgeSizeConfig = {
|
|
|
7357
7182
|
lg: { fontSize: 12, paddingH: 10, paddingV: 4, iconSize: 14 }
|
|
7358
7183
|
};
|
|
7359
7184
|
var variantColors = {
|
|
7360
|
-
plain: { backgroundColor: t["surface-raised"], borderColor: "
|
|
7185
|
+
plain: { backgroundColor: t["surface-raised"], borderColor: t["hairline-default"] },
|
|
7361
7186
|
pr: {
|
|
7362
7187
|
backgroundColor: "rgba(255, 121, 0, 0.12)",
|
|
7363
7188
|
borderColor: "rgba(255, 121, 0, 0.3)"
|
|
@@ -7441,7 +7266,7 @@ function WeightBadge({
|
|
|
7441
7266
|
...props
|
|
7442
7267
|
}) {
|
|
7443
7268
|
const config = baseBadgeSizeConfig[size];
|
|
7444
|
-
const textColor = isPr ? getSemanticColors("dark")["brand-primary"] :
|
|
7269
|
+
const textColor = isPr ? getSemanticColors("dark")["brand-primary"] : greyRamp[400];
|
|
7445
7270
|
const iconColor = textColor;
|
|
7446
7271
|
const repMaxClause = reps != null ? `${reps} rep max` : "Estimated one rep max";
|
|
7447
7272
|
const deltaLabel = delta != null ? `, ${delta >= 0 ? "+" : ""}${delta}% change` : "";
|
|
@@ -7602,7 +7427,7 @@ var solidVariantColors = {
|
|
|
7602
7427
|
success: t2["status-success"],
|
|
7603
7428
|
warning: t2["status-warning"],
|
|
7604
7429
|
error: t2["status-error"],
|
|
7605
|
-
neutral:
|
|
7430
|
+
neutral: greyRamp[500]
|
|
7606
7431
|
};
|
|
7607
7432
|
var ringVariantStyles = {
|
|
7608
7433
|
"on-track": {
|
|
@@ -7640,10 +7465,10 @@ var iconColors2 = {
|
|
|
7640
7465
|
success: "#0A5C52",
|
|
7641
7466
|
warning: "#6B4000",
|
|
7642
7467
|
error: "#5C1A1A",
|
|
7643
|
-
neutral:
|
|
7468
|
+
neutral: greyRamp[200],
|
|
7644
7469
|
"on-track": t2["status-success"],
|
|
7645
7470
|
deviation: t2["status-warning"],
|
|
7646
|
-
future:
|
|
7471
|
+
future: greyRamp[500]
|
|
7647
7472
|
};
|
|
7648
7473
|
var sizeDimensions = {
|
|
7649
7474
|
sm: { size: 8, showIcon: false },
|
|
@@ -7712,7 +7537,7 @@ function StatusDot({
|
|
|
7712
7537
|
/* @__PURE__ */ jsx(
|
|
7713
7538
|
Text,
|
|
7714
7539
|
{
|
|
7715
|
-
style: { fontSize: 12, lineHeight: 16, color:
|
|
7540
|
+
style: { fontSize: 12, lineHeight: 16, color: greyRamp[400] },
|
|
7716
7541
|
accessibilityElementsHidden: true,
|
|
7717
7542
|
children: label
|
|
7718
7543
|
}
|
|
@@ -8044,7 +7869,7 @@ function LiveTempoCell({
|
|
|
8044
7869
|
alignItems: "center",
|
|
8045
7870
|
justifyContent: "center"
|
|
8046
7871
|
};
|
|
8047
|
-
const num = (
|
|
7872
|
+
const num = (c2, text) => /* @__PURE__ */ jsx(Text, { style: { fontFamily: MONO, fontSize, color: c2, fontWeight: "700" }, children: text });
|
|
8048
7873
|
if (status === "upcoming") {
|
|
8049
7874
|
const targetText = targetMs != null ? (targetMs / 1e3).toFixed(1) : String(value);
|
|
8050
7875
|
return /* @__PURE__ */ jsx(View, { style: wrap, children: num(color, targetText) });
|
|
@@ -8257,7 +8082,7 @@ var t4 = getSemanticColors("dark");
|
|
|
8257
8082
|
function getDotColor(deviation) {
|
|
8258
8083
|
const abs = Math.abs(deviation);
|
|
8259
8084
|
if (deviation < -0.3) return t4["status-success"];
|
|
8260
|
-
if (abs <= 0.3) return
|
|
8085
|
+
if (abs <= 0.3) return greyRamp[500];
|
|
8261
8086
|
if (abs <= 0.7) return t4["status-warning"];
|
|
8262
8087
|
return t4["status-error"];
|
|
8263
8088
|
}
|
|
@@ -8314,7 +8139,7 @@ function DeviationBar({
|
|
|
8314
8139
|
height: dotSize,
|
|
8315
8140
|
borderRadius: 9999,
|
|
8316
8141
|
borderWidth: 1.5,
|
|
8317
|
-
borderColor:
|
|
8142
|
+
borderColor: greyRamp[50],
|
|
8318
8143
|
boxShadow: "0 0 4px rgba(0,0,0,0.5)",
|
|
8319
8144
|
backgroundColor: getDotColor(clamped),
|
|
8320
8145
|
left: Math.max(0, Math.min(dotPosition - dotSize / 2, resolvedWidth - dotSize)),
|
|
@@ -8508,6 +8333,7 @@ var MESO_ACCENT_GRADIENT_LIGHT = primitiveRamps.orange[300];
|
|
|
8508
8333
|
var WORKOUT_PILL_DELOAD = primitiveRamps.magenta[600];
|
|
8509
8334
|
|
|
8510
8335
|
// src/components/custom/Workout/WorkoutPill.tsx
|
|
8336
|
+
var HAIRLINE_DEFAULT = getSemanticColors("dark")["hairline-default"];
|
|
8511
8337
|
var t6 = getSemanticColors("dark");
|
|
8512
8338
|
var statusBgColors = {
|
|
8513
8339
|
completed: "rgba(46,213,115,0.15)",
|
|
@@ -8521,7 +8347,7 @@ var statusBorderStyles = {
|
|
|
8521
8347
|
completed: { borderWidth: 1, borderColor: "rgba(46,213,115,0.3)" },
|
|
8522
8348
|
current: { borderWidth: 1, borderColor: "rgba(255,121,0,0.3)" },
|
|
8523
8349
|
next: { borderWidth: 1, borderColor: "rgba(255,121,0,0.4)" },
|
|
8524
|
-
upcoming: { borderWidth: 1, borderColor:
|
|
8350
|
+
upcoming: { borderWidth: 1, borderColor: HAIRLINE_DEFAULT },
|
|
8525
8351
|
missed: { borderWidth: 1, borderColor: "rgba(209,67,67,0.25)" },
|
|
8526
8352
|
deload: { borderWidth: 1, borderColor: "rgba(186,41,150,0.3)" }
|
|
8527
8353
|
};
|
|
@@ -8529,7 +8355,7 @@ var textColors = {
|
|
|
8529
8355
|
completed: t6["status-success"],
|
|
8530
8356
|
current: t6["brand-primary"],
|
|
8531
8357
|
next: t6["brand-primary"],
|
|
8532
|
-
upcoming:
|
|
8358
|
+
upcoming: greyRamp[500],
|
|
8533
8359
|
missed: "rgba(209,67,67,0.7)",
|
|
8534
8360
|
deload: WORKOUT_PILL_DELOAD
|
|
8535
8361
|
};
|
|
@@ -8661,28 +8487,6 @@ function WorkoutPill({
|
|
|
8661
8487
|
}
|
|
8662
8488
|
return pill;
|
|
8663
8489
|
}
|
|
8664
|
-
|
|
8665
|
-
// src/theme/bar-paper.ts
|
|
8666
|
-
function grainOpacityForColor(hex) {
|
|
8667
|
-
const h = hex.replace("#", "");
|
|
8668
|
-
const full = h.length === 3 ? h.split("").map((ch) => ch + ch).join("") : h;
|
|
8669
|
-
const r = parseInt(full.slice(0, 2), 16);
|
|
8670
|
-
const g = parseInt(full.slice(2, 4), 16);
|
|
8671
|
-
const b = parseInt(full.slice(4, 6), 16);
|
|
8672
|
-
if ([r, g, b].some(Number.isNaN)) return 0.14;
|
|
8673
|
-
const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
8674
|
-
return Math.min(0.24, Math.max(0.04, 0.02 + 0.31 * lum));
|
|
8675
|
-
}
|
|
8676
|
-
function barGrain(color) {
|
|
8677
|
-
const op = grainOpacityForColor(color).toFixed(3);
|
|
8678
|
-
return `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='${op}'/%3E%3C/svg%3E")`;
|
|
8679
|
-
}
|
|
8680
|
-
function barPaper(color, flip = false) {
|
|
8681
|
-
return {
|
|
8682
|
-
backgroundImage: barGrain(color),
|
|
8683
|
-
boxShadow: flip ? "0 -6px 16px rgba(0,0,0,0.45)" : "inset 0 1.5px 0 rgba(255,255,255,0.22), 0 6px 16px rgba(0,0,0,0.45)"
|
|
8684
|
-
};
|
|
8685
|
-
}
|
|
8686
8490
|
var ANIMATION_EASING = Easing.bezier(0.22, 1, 0.36, 1);
|
|
8687
8491
|
var PEAK_OVERSHOOT = 1.12;
|
|
8688
8492
|
function getReducedMotionPreference() {
|
|
@@ -9222,7 +9026,7 @@ function setAccessibilityLabel(set, repCount) {
|
|
|
9222
9026
|
}
|
|
9223
9027
|
var EXPANDED_HEIGHT = 60;
|
|
9224
9028
|
var COMPACT_HEIGHT = 8;
|
|
9225
|
-
var HERO_REFERENCE_COLOR =
|
|
9029
|
+
var HERO_REFERENCE_COLOR = greyRamp[600];
|
|
9226
9030
|
function DashedReferenceLine({
|
|
9227
9031
|
anchor,
|
|
9228
9032
|
offset,
|
|
@@ -9894,7 +9698,7 @@ function VelocityStrip({
|
|
|
9894
9698
|
}
|
|
9895
9699
|
var t7 = getSemanticColors("dark");
|
|
9896
9700
|
var dotColorMap = {
|
|
9897
|
-
untrained:
|
|
9701
|
+
untrained: greyRamp[900],
|
|
9898
9702
|
behind: t7["brand-secondary"],
|
|
9899
9703
|
ontrack: t7["status-success"],
|
|
9900
9704
|
target: t7["brand-primary"],
|
|
@@ -9907,12 +9711,12 @@ function MuscleGroupChip({
|
|
|
9907
9711
|
className,
|
|
9908
9712
|
...props
|
|
9909
9713
|
}) {
|
|
9910
|
-
const dotColor = volumeStatus ? dotColorMap[volumeStatus] :
|
|
9714
|
+
const dotColor = volumeStatus ? dotColorMap[volumeStatus] : greyRamp[900];
|
|
9911
9715
|
const statusLabel = volumeStatus ?? "no status";
|
|
9912
9716
|
const content = /* @__PURE__ */ jsxs(
|
|
9913
9717
|
View,
|
|
9914
9718
|
{
|
|
9915
|
-
className: ["bg-surface-raised border-
|
|
9719
|
+
className: ["bg-surface-raised border-hairline", className].filter(Boolean).join(" "),
|
|
9916
9720
|
style: {
|
|
9917
9721
|
flexDirection: "row",
|
|
9918
9722
|
alignItems: "center",
|
|
@@ -10213,7 +10017,7 @@ function SetRow(set) {
|
|
|
10213
10017
|
);
|
|
10214
10018
|
}
|
|
10215
10019
|
var BRAND_PRIMARY3 = getSemanticColors("dark")["brand-primary"];
|
|
10216
|
-
var INPUT_CLASSNAME = "bg-surface-raised border-
|
|
10020
|
+
var INPUT_CLASSNAME = "bg-surface-raised border-hairline-strong text-text-primary";
|
|
10217
10021
|
var inputStyle = {
|
|
10218
10022
|
fontSize: 14,
|
|
10219
10023
|
fontWeight: "600",
|
|
@@ -10246,7 +10050,7 @@ function InputBar({
|
|
|
10246
10050
|
style: {
|
|
10247
10051
|
width: "100%",
|
|
10248
10052
|
borderTopWidth: 1,
|
|
10249
|
-
borderTopColor: resolveColor("
|
|
10053
|
+
borderTopColor: resolveColor("hairline-default"),
|
|
10250
10054
|
paddingTop: 10,
|
|
10251
10055
|
paddingHorizontal: 16,
|
|
10252
10056
|
paddingBottom: 12,
|
|
@@ -10509,7 +10313,7 @@ function RestTimer({
|
|
|
10509
10313
|
style: {
|
|
10510
10314
|
width: "100%",
|
|
10511
10315
|
borderTopWidth: 1,
|
|
10512
|
-
borderTopColor: resolveColor("
|
|
10316
|
+
borderTopColor: resolveColor("hairline-default"),
|
|
10513
10317
|
paddingVertical: 12,
|
|
10514
10318
|
paddingHorizontal: 16
|
|
10515
10319
|
},
|
|
@@ -10578,7 +10382,7 @@ function RestTimer({
|
|
|
10578
10382
|
/* @__PURE__ */ jsx(
|
|
10579
10383
|
View,
|
|
10580
10384
|
{
|
|
10581
|
-
className: "bg-
|
|
10385
|
+
className: "bg-hairline",
|
|
10582
10386
|
style: {
|
|
10583
10387
|
height: 3,
|
|
10584
10388
|
borderRadius: 2,
|
|
@@ -10839,7 +10643,7 @@ var SET_STRIP_ZONES = {
|
|
|
10839
10643
|
fast: primitiveRamps.amber[300],
|
|
10840
10644
|
fastest: primitiveRamps.green[300]
|
|
10841
10645
|
};
|
|
10842
|
-
var TODO_COLOR =
|
|
10646
|
+
var TODO_COLOR = greyRamp[900];
|
|
10843
10647
|
var SET_STRIP_VARIABLE_COLOR = primitiveRamps.cyan[900];
|
|
10844
10648
|
var NOTCH_GAP = 2;
|
|
10845
10649
|
var CLUSTER_GAP = 3;
|
|
@@ -11289,7 +11093,7 @@ function CollapsedCard({
|
|
|
11289
11093
|
);
|
|
11290
11094
|
}
|
|
11291
11095
|
var DARK2 = getSemanticColors("dark");
|
|
11292
|
-
var BODY_DIVIDER = DARK2["
|
|
11096
|
+
var BODY_DIVIDER = DARK2["hairline-subtle"];
|
|
11293
11097
|
function deriveHeaderSetStates(sets) {
|
|
11294
11098
|
return sets.map((set) => {
|
|
11295
11099
|
switch (set.state) {
|
|
@@ -11323,7 +11127,7 @@ function ExpandedCard({
|
|
|
11323
11127
|
return /* @__PURE__ */ jsxs(
|
|
11324
11128
|
View,
|
|
11325
11129
|
{
|
|
11326
|
-
className: "bg-surface-elevated border-
|
|
11130
|
+
className: "bg-surface-elevated border-hairline",
|
|
11327
11131
|
style: {
|
|
11328
11132
|
borderWidth: 1,
|
|
11329
11133
|
...borderRadius,
|
|
@@ -11555,7 +11359,8 @@ function SessionHeader({
|
|
|
11555
11359
|
}
|
|
11556
11360
|
);
|
|
11557
11361
|
}
|
|
11558
|
-
var
|
|
11362
|
+
var SEMANTIC2 = getSemanticColors("dark");
|
|
11363
|
+
var DIVIDER = greyRamp[875];
|
|
11559
11364
|
var DEFAULT_WIDTH = 246;
|
|
11560
11365
|
function SessionRail({
|
|
11561
11366
|
title,
|
|
@@ -11599,8 +11404,8 @@ function SessionRail({
|
|
|
11599
11404
|
/* @__PURE__ */ jsx(
|
|
11600
11405
|
Surface,
|
|
11601
11406
|
{
|
|
11602
|
-
level: "
|
|
11603
|
-
style: [{ flex: 1 },
|
|
11407
|
+
level: "base",
|
|
11408
|
+
style: [{ flex: 1 }, insetWell(SEMANTIC2["surface-base"])],
|
|
11604
11409
|
testID: "session-rail-list",
|
|
11605
11410
|
children: exercises.map((ex, i) => /* @__PURE__ */ jsx(
|
|
11606
11411
|
View,
|
|
@@ -11913,11 +11718,12 @@ function WeekRow({
|
|
|
11913
11718
|
}
|
|
11914
11719
|
);
|
|
11915
11720
|
}
|
|
11721
|
+
var HAIRLINE_DEFAULT2 = getSemanticColors("dark")["hairline-default"];
|
|
11916
11722
|
var t10 = getSemanticColors("dark");
|
|
11917
11723
|
var COLORS = {
|
|
11918
11724
|
statusSuccess: t10["status-success"],
|
|
11919
11725
|
brandPrimary: t10["brand-primary"],
|
|
11920
|
-
borderDefault:
|
|
11726
|
+
borderDefault: HAIRLINE_DEFAULT2,
|
|
11921
11727
|
brandPrimarySubtle: "rgba(255,121,0,0.06)"
|
|
11922
11728
|
};
|
|
11923
11729
|
var statusBorderColors = {
|
|
@@ -12058,10 +11864,11 @@ function WorkoutCard({
|
|
|
12058
11864
|
}
|
|
12059
11865
|
);
|
|
12060
11866
|
}
|
|
11867
|
+
var HAIRLINE_DEFAULT3 = getSemanticColors("dark")["hairline-default"];
|
|
12061
11868
|
var BRAND_PRIMARY7 = getSemanticColors("dark")["brand-primary"];
|
|
12062
11869
|
var BRAND_PRIMARY_DARK = MESO_ACCENT_GRADIENT_DARK;
|
|
12063
11870
|
var BRAND_PRIMARY_LIGHT = MESO_ACCENT_GRADIENT_LIGHT;
|
|
12064
|
-
var BORDER_DEFAULT =
|
|
11871
|
+
var BORDER_DEFAULT = HAIRLINE_DEFAULT3;
|
|
12065
11872
|
var ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY7, BRAND_PRIMARY_LIGHT];
|
|
12066
11873
|
function heatmapColor(percentage) {
|
|
12067
11874
|
const clamped = Math.max(0, Math.min(100, percentage));
|
|
@@ -12217,7 +12024,7 @@ function MesoCard({
|
|
|
12217
12024
|
var BRAND_PRIMARY8 = getSemanticColors("dark")["brand-primary"];
|
|
12218
12025
|
var RECENT_BORDER = "rgba(249,180,21,0.3)";
|
|
12219
12026
|
var RECENT_GLOW = "0 0 12px rgba(249,180,21,0.06)";
|
|
12220
|
-
var BORDER_DEFAULT2 = resolveColor("
|
|
12027
|
+
var BORDER_DEFAULT2 = resolveColor("hairline-default");
|
|
12221
12028
|
var TYPE_LABELS = {
|
|
12222
12029
|
e1rm: "e1RM",
|
|
12223
12030
|
weight: "Weight",
|
|
@@ -12330,7 +12137,7 @@ function PrHistoryModal({
|
|
|
12330
12137
|
View,
|
|
12331
12138
|
{
|
|
12332
12139
|
accessibilityElementsHidden: true,
|
|
12333
|
-
className: "bg-
|
|
12140
|
+
className: "bg-hairline",
|
|
12334
12141
|
style: {
|
|
12335
12142
|
alignSelf: "center",
|
|
12336
12143
|
width: 40,
|
|
@@ -12462,7 +12269,7 @@ function EmojiSlider({ factor }) {
|
|
|
12462
12269
|
accessibilityLabel: `${factor.label} level ${level} of 5`,
|
|
12463
12270
|
"aria-checked": selected,
|
|
12464
12271
|
testID: "readiness-check-emoji",
|
|
12465
|
-
className: selected ? void 0 : "border-
|
|
12272
|
+
className: selected ? void 0 : "border-hairline bg-surface-raised",
|
|
12466
12273
|
style: ({ pressed }) => ({
|
|
12467
12274
|
flex: 1,
|
|
12468
12275
|
alignItems: "center",
|
|
@@ -12517,7 +12324,7 @@ function WarmUpCard({ validation }) {
|
|
|
12517
12324
|
return /* @__PURE__ */ jsxs(
|
|
12518
12325
|
View,
|
|
12519
12326
|
{
|
|
12520
|
-
className: "border-
|
|
12327
|
+
className: "border-hairline bg-surface-raised",
|
|
12521
12328
|
style: {
|
|
12522
12329
|
marginTop: 16,
|
|
12523
12330
|
padding: 12,
|
|
@@ -13052,11 +12859,11 @@ function ChartLine({
|
|
|
13052
12859
|
dashed,
|
|
13053
12860
|
testID
|
|
13054
12861
|
}) {
|
|
13055
|
-
return /* @__PURE__ */ jsx(Fragment, { children: coords.map((
|
|
12862
|
+
return /* @__PURE__ */ jsx(Fragment, { children: coords.map((c2, i) => {
|
|
13056
12863
|
if (i === 0) return null;
|
|
13057
12864
|
const prev = coords[i - 1];
|
|
13058
|
-
const dx =
|
|
13059
|
-
const dy =
|
|
12865
|
+
const dx = c2.x - prev.x;
|
|
12866
|
+
const dy = c2.y - prev.y;
|
|
13060
12867
|
const length = Math.sqrt(dx * dx + dy * dy);
|
|
13061
12868
|
const angle = Math.atan2(dy, dx) * (180 / Math.PI);
|
|
13062
12869
|
return /* @__PURE__ */ jsx(
|
|
@@ -13259,21 +13066,21 @@ function StrengthTrendChart({
|
|
|
13259
13066
|
}
|
|
13260
13067
|
),
|
|
13261
13068
|
geometry.actual.map(
|
|
13262
|
-
(
|
|
13069
|
+
(c2) => c2.point.isPR ? /* @__PURE__ */ jsx(
|
|
13263
13070
|
Text,
|
|
13264
13071
|
{
|
|
13265
13072
|
accessibilityElementsHidden: true,
|
|
13266
13073
|
testID: "strength-trend-chart-pr-star",
|
|
13267
13074
|
style: {
|
|
13268
13075
|
position: "absolute",
|
|
13269
|
-
left:
|
|
13270
|
-
top:
|
|
13076
|
+
left: c2.x - 7,
|
|
13077
|
+
top: c2.y - 20,
|
|
13271
13078
|
fontSize: 12,
|
|
13272
13079
|
color: STATUS_WARNING3
|
|
13273
13080
|
},
|
|
13274
13081
|
children: "\u2605"
|
|
13275
13082
|
},
|
|
13276
|
-
`star-${
|
|
13083
|
+
`star-${c2.index}`
|
|
13277
13084
|
) : null
|
|
13278
13085
|
)
|
|
13279
13086
|
]
|
|
@@ -13284,29 +13091,29 @@ function StrengthTrendChart({
|
|
|
13284
13091
|
{
|
|
13285
13092
|
style: { position: "absolute", top: 0, left: 0, width, height },
|
|
13286
13093
|
testID: "strength-trend-chart-points",
|
|
13287
|
-
children: geometry.actual.map((
|
|
13288
|
-
const label =
|
|
13094
|
+
children: geometry.actual.map((c2) => {
|
|
13095
|
+
const label = c2.point.sessionLabel ?? c2.point.date;
|
|
13289
13096
|
return /* @__PURE__ */ jsx(
|
|
13290
13097
|
Pressable,
|
|
13291
13098
|
{
|
|
13292
13099
|
testID: "strength-trend-chart-point",
|
|
13293
13100
|
accessibilityRole: "button",
|
|
13294
|
-
accessibilityLabel: `${label}: ${formatValue(
|
|
13101
|
+
accessibilityLabel: `${label}: ${formatValue(c2.point.e1rm)} ${unit}${c2.point.isPR ? ", personal record" : ""}`,
|
|
13295
13102
|
onPress: () => {
|
|
13296
|
-
setSelected(
|
|
13297
|
-
onPointPress?.(
|
|
13103
|
+
setSelected(c2.index);
|
|
13104
|
+
onPointPress?.(c2.point);
|
|
13298
13105
|
},
|
|
13299
13106
|
style: {
|
|
13300
13107
|
position: "absolute",
|
|
13301
|
-
left:
|
|
13302
|
-
top:
|
|
13108
|
+
left: c2.x - 4,
|
|
13109
|
+
top: c2.y - 4,
|
|
13303
13110
|
width: 8,
|
|
13304
13111
|
height: 8,
|
|
13305
13112
|
borderRadius: 1,
|
|
13306
13113
|
backgroundColor: BRAND_PRIMARY11
|
|
13307
13114
|
}
|
|
13308
13115
|
},
|
|
13309
|
-
`point-${
|
|
13116
|
+
`point-${c2.index}`
|
|
13310
13117
|
);
|
|
13311
13118
|
})
|
|
13312
13119
|
}
|
|
@@ -13316,7 +13123,7 @@ function StrengthTrendChart({
|
|
|
13316
13123
|
{
|
|
13317
13124
|
testID: "strength-trend-chart-tooltip",
|
|
13318
13125
|
accessibilityElementsHidden: true,
|
|
13319
|
-
className: "bg-surface-elevated border-
|
|
13126
|
+
className: "bg-surface-elevated border-hairline-strong",
|
|
13320
13127
|
style: {
|
|
13321
13128
|
position: "absolute",
|
|
13322
13129
|
left: Math.max(
|
|
@@ -13843,7 +13650,7 @@ var t14 = getSemanticColors("dark");
|
|
|
13843
13650
|
function glowShadow(color) {
|
|
13844
13651
|
return `0 0 5px 1px ${alpha(color, 0.3)}, 0 0 10px 3px ${alpha(color, 0.12)}`;
|
|
13845
13652
|
}
|
|
13846
|
-
var DEFAULT_TRACK_COLOR =
|
|
13653
|
+
var DEFAULT_TRACK_COLOR = greyRamp[800];
|
|
13847
13654
|
var DEFAULT_MARKER_COLOR2 = primitiveColors.white;
|
|
13848
13655
|
var TICK_COLOR = t14["text-tertiary"];
|
|
13849
13656
|
var ZONE_SIZES = {
|
|
@@ -14142,7 +13949,7 @@ function FatigueMeter({
|
|
|
14142
13949
|
);
|
|
14143
13950
|
}
|
|
14144
13951
|
var HEAT = WORKOUT_TOKENS.heatmap;
|
|
14145
|
-
var NEUTRAL_TRACK =
|
|
13952
|
+
var NEUTRAL_TRACK = greyRamp[800];
|
|
14146
13953
|
var MONO2 = "monospace";
|
|
14147
13954
|
var HEAT_BY_ZONE = {
|
|
14148
13955
|
under: HEAT.under,
|
|
@@ -14339,7 +14146,7 @@ function LiveAuraFrame({
|
|
|
14339
14146
|
borderRadius: 10,
|
|
14340
14147
|
backgroundColor: t16["background-base"],
|
|
14341
14148
|
borderWidth: 1,
|
|
14342
|
-
borderColor: t16["
|
|
14149
|
+
borderColor: t16["hairline-default"]
|
|
14343
14150
|
},
|
|
14344
14151
|
style
|
|
14345
14152
|
],
|
|
@@ -14399,32 +14206,32 @@ var STATE_LABEL = {
|
|
|
14399
14206
|
var PHASE_AXIS_COLOR = {
|
|
14400
14207
|
eccentric: primitiveRamps.magenta[800],
|
|
14401
14208
|
concentric: primitiveRamps.cyan[800],
|
|
14402
|
-
hold:
|
|
14403
|
-
idle:
|
|
14209
|
+
hold: greyRamp[700],
|
|
14210
|
+
idle: greyRamp[800]
|
|
14404
14211
|
};
|
|
14405
14212
|
var PHASE_AXIS_BASE_COLOR = {
|
|
14406
14213
|
eccentric: primitiveRamps.magenta[950],
|
|
14407
14214
|
concentric: primitiveRamps.cyan[950],
|
|
14408
|
-
hold:
|
|
14409
|
-
idle:
|
|
14215
|
+
hold: greyRamp[900],
|
|
14216
|
+
idle: greyRamp[800]
|
|
14410
14217
|
};
|
|
14411
14218
|
var PACING_TONE = {
|
|
14412
14219
|
ahead: primitiveRamps.amber[300],
|
|
14413
14220
|
onPace: primitiveRamps.green[300],
|
|
14414
14221
|
over: primitiveRamps.red[300]
|
|
14415
14222
|
};
|
|
14416
|
-
var SILVER =
|
|
14223
|
+
var SILVER = greyRamp[200];
|
|
14417
14224
|
var RED_LIGHT = primitiveRamps.red[400];
|
|
14418
14225
|
var RED_MID = primitiveRamps.red[600];
|
|
14419
14226
|
var RED_DEEP = primitiveRamps.red[800];
|
|
14420
14227
|
var GRIND_THRESHOLD = 0.35;
|
|
14421
|
-
var DRIFT_GREY =
|
|
14228
|
+
var DRIFT_GREY = greyRamp[700];
|
|
14422
14229
|
function clamp012(v) {
|
|
14423
14230
|
return Math.min(1, Math.max(0, v));
|
|
14424
14231
|
}
|
|
14425
14232
|
function hexToRgb2(hex) {
|
|
14426
14233
|
const h = hex.replace("#", "");
|
|
14427
|
-
const f = h.length === 3 ? h.split("").map((
|
|
14234
|
+
const f = h.length === 3 ? h.split("").map((c2) => c2 + c2).join("") : h;
|
|
14428
14235
|
return [parseInt(f.slice(0, 2), 16), parseInt(f.slice(2, 4), 16), parseInt(f.slice(4, 6), 16)];
|
|
14429
14236
|
}
|
|
14430
14237
|
function mixHex2(a, b, ratio) {
|
|
@@ -14932,9 +14739,9 @@ function GhostSpark({
|
|
|
14932
14739
|
) }) });
|
|
14933
14740
|
}
|
|
14934
14741
|
const cur = curves[curves.length - 1];
|
|
14935
|
-
const allSamples = curves.flatMap((
|
|
14742
|
+
const allSamples = curves.flatMap((c2) => c2.samples);
|
|
14936
14743
|
const vmax = Math.max(0.01, ...allSamples.map((s) => s.velocityMps)) * 1.06;
|
|
14937
|
-
const axisMaxT = Math.max(1, ...curves.map((
|
|
14744
|
+
const axisMaxT = Math.max(1, ...curves.map((c2) => c2.samples[c2.samples.length - 1]?.tMs ?? 0)) * 1.04;
|
|
14938
14745
|
const bandBottom = h - padBot;
|
|
14939
14746
|
const bandTop = bandBottom - BAND_H;
|
|
14940
14747
|
const baseline = bandTop - BAND_GAP;
|
|
@@ -14943,7 +14750,7 @@ function GhostSpark({
|
|
|
14943
14750
|
const mag = (v) => clamp012(v / vmax) * plotH;
|
|
14944
14751
|
const lineTint = ghostLineColor(cur.tempoDeviation, cur.grindSignature);
|
|
14945
14752
|
const curPts = cur.samples.map((s) => [x(s.tMs), mag(s.velocityMps)]);
|
|
14946
|
-
const ghostPts = curves.slice(0, -1).map((
|
|
14753
|
+
const ghostPts = curves.slice(0, -1).map((c2) => c2.samples.map((s) => [x(s.tMs), mag(s.velocityMps)]));
|
|
14947
14754
|
return /* @__PURE__ */ jsx(View, { testID: "ghost-spark", style: { paddingHorizontal: 4 }, children: /* @__PURE__ */ jsxs("svg", { width: w, height: h, children: [
|
|
14948
14755
|
/* @__PURE__ */ jsx(
|
|
14949
14756
|
GhostBloom,
|
|
@@ -15153,7 +14960,7 @@ function mergePhaseSegments(a, b) {
|
|
|
15153
14960
|
return out;
|
|
15154
14961
|
}
|
|
15155
14962
|
function lastTMs(curves) {
|
|
15156
|
-
return Math.max(0, ...curves.map((
|
|
14963
|
+
return Math.max(0, ...curves.map((c2) => c2.samples[c2.samples.length - 1]?.tMs ?? 0));
|
|
15157
14964
|
}
|
|
15158
14965
|
function DualGhostSpark({
|
|
15159
14966
|
left,
|
|
@@ -15179,12 +14986,12 @@ function DualGhostSpark({
|
|
|
15179
14986
|
const baseUp = bandTop - BAND_GAP;
|
|
15180
14987
|
const baseDown = mid + BAND_H / 2 + BAND_GAP;
|
|
15181
14988
|
const wingH = Math.max(1, Math.min(baseUp - padTop, h - padBot - baseDown));
|
|
15182
|
-
const allSamples = [...left, ...right].flatMap((
|
|
14989
|
+
const allSamples = [...left, ...right].flatMap((c2) => c2.samples);
|
|
15183
14990
|
const vmax = Math.max(0.01, ...allSamples.map((s) => s.velocityMps)) * 1.06;
|
|
15184
14991
|
const axisMaxT = Math.max(1, lastTMs(left), lastTMs(right)) * 1.04;
|
|
15185
14992
|
const x = (ms) => padL + ms / axisMaxT * (w - padL - padR);
|
|
15186
14993
|
const mag = (v) => clamp012(v / vmax) * wingH;
|
|
15187
|
-
const toPts = (
|
|
14994
|
+
const toPts = (c2) => c2.samples.map((s) => [x(s.tMs), mag(s.velocityMps)]);
|
|
15188
14995
|
const wing = (curves) => {
|
|
15189
14996
|
const cur = curves[curves.length - 1];
|
|
15190
14997
|
return {
|
|
@@ -15770,7 +15577,7 @@ function DeviceMenu({
|
|
|
15770
15577
|
const availCount = devices.filter((d) => !d.slot).length;
|
|
15771
15578
|
return /* @__PURE__ */ jsxs(Popover, { placement: "bottom", isOpen, onOpenChange, className, children: [
|
|
15772
15579
|
/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(DeviceIndicator, { status }) }),
|
|
15773
|
-
/* @__PURE__ */ jsxs(PopoverContent, { className: "right-0 left-auto mt-[10px] w-[326px] bg-surface-elevated border border-
|
|
15580
|
+
/* @__PURE__ */ jsxs(PopoverContent, { className: "right-0 left-auto mt-[10px] w-[326px] bg-surface-elevated border border-hairline-strong rounded-[10px] p-[7px]", children: [
|
|
15774
15581
|
/* @__PURE__ */ jsxs(
|
|
15775
15582
|
Typography,
|
|
15776
15583
|
{
|
|
@@ -15786,7 +15593,7 @@ function DeviceMenu({
|
|
|
15786
15593
|
]
|
|
15787
15594
|
}
|
|
15788
15595
|
),
|
|
15789
|
-
devices.map((device, i) => /* @__PURE__ */ jsx(View, { className: cn(i > 0 && "border-t border-
|
|
15596
|
+
devices.map((device, i) => /* @__PURE__ */ jsx(View, { className: cn(i > 0 && "border-t border-hairline"), children: /* @__PURE__ */ jsx(
|
|
15790
15597
|
DeviceRow,
|
|
15791
15598
|
{
|
|
15792
15599
|
device,
|
|
@@ -15818,7 +15625,7 @@ function TopBar({
|
|
|
15818
15625
|
onLayout,
|
|
15819
15626
|
style: surfaceGradient.chrome(),
|
|
15820
15627
|
className: cn(
|
|
15821
|
-
"h-[46px] flex-row items-center gap-[14px] px-4 bg-surface-elevated border-b border-
|
|
15628
|
+
"h-[46px] flex-row items-center gap-[14px] px-4 bg-surface-elevated border-b border-hairline",
|
|
15822
15629
|
className
|
|
15823
15630
|
),
|
|
15824
15631
|
children: [
|
|
@@ -15917,7 +15724,7 @@ function SideNav({
|
|
|
15917
15724
|
{
|
|
15918
15725
|
accessibilityRole: "tablist",
|
|
15919
15726
|
className: cn(
|
|
15920
|
-
"w-[60px] items-center gap-[6px] border-r border-
|
|
15727
|
+
"w-[60px] items-center gap-[6px] border-r border-hairline bg-background-base py-3",
|
|
15921
15728
|
className
|
|
15922
15729
|
),
|
|
15923
15730
|
children: items.map((item) => /* @__PURE__ */ jsx(
|
|
@@ -16057,6 +15864,6 @@ function composeValidators(...validators) {
|
|
|
16057
15864
|
};
|
|
16058
15865
|
}
|
|
16059
15866
|
|
|
16060
|
-
export { Accordion, AccordionButton, AccordionItem, AccordionPanel, ActivityIcon, Alert, AlertDescription, AlertTitle, AlertTriangleIcon, Autocomplete, Avatar, AvatarBadge, AvatarGroup, AwardIcon, BAND_GAP, BAND_H, Badge, BadgeText, BaseBadge, BluetoothIcon, BrandLockup, BreadcrumbItem, Breadcrumbs, Button, ButtonIcon, ButtonSpinner, ButtonText, CATEGORICAL_CVD_SAFE_MAX, CapacityBandChart, Caption, Card, CardContent, CardDescription, CardFooter, CardHeader, CardSkeleton, CardTitle, Checkbox, CheckboxGroup, Chip, CircleSlashIcon, CircularProgress, CircularTimer, Collapse, CollapseButton, CollapseContent, DRIFT_GREY, DashboardShell, DataRow, DateTime, DeviationBar, DeviceIndicator, DeviceMenu, DeviceRow, Divider, Drawer, DrawerBody, DrawerFooter, DrawerHeader, DualGhostSpark, DualVelocityStrip, DumbbellIcon, EmptyState, ExerciseCard, ExerciseCardHeading, ExerciseHeading, ExerciseIndicator, FatigueLights, FatigueMeter, FormActions, FormField, FormRow, FormSection, GRIND_THRESHOLD, Gauge2 as Gauge, GhostBand, GhostBloom, GhostSpark, HStack, Heading, HelpTip, HistoryIcon, INDICATOR_PRECEDENCE, IconBox, Indicator, InfoIcon, Input, InputBar, InputGroup, IntensityBar, Label, LabelWithHelp, LayersIcon, Link, ListItem, ListItemContent, ListItemDivider, ListItemIcon, ListItemTrailing, LiveAuraFrame, LiveFatigueCard, LiveFatiguePanel, METRIC_FONT, Menu, MenuDivider, MenuGroup, MenuItem, MenuList, MenuTrigger, MesoCard, MesoProgressBar, MesoStatusCard, Metric, MetricCell, MetricGroup, MetricTiles, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalTitle, MuscleGroupChip, NavItem, Overline, PHASE_AXIS_COLOR, PRESSED_ELEVATION_LEVEL, Paragraph, PasswordInput, PersonStandingIcon, Pill, PlaceholderStrip, Popover, PopoverCloseButton, PopoverContent, PopoverTrigger, PrBadge, PrHistoryModal, Progress, ProgressSteps, RED_DEEP, RED_LIGHT, RED_MID, Radio, RadioGroup, ReadinessCheck, RestTimer, RomProgressionChart, SET_STRIP_VARIABLE_COLOR, SET_STRIP_ZONES, SILVER, STATE_LABEL, SURFACE_LEVEL_TOKEN, ScaleIcon, Scatter, ScheduleTiles, Section, SectionContent, SectionHeader, SegmentedBar, SegmentedProgressBar, Select, SessionHeader, SessionRail, SessionStatePill, SetBar, SetRow, SetStrip, SetTableHeader, SetsRepsLoad, SideNav, Sidebar, SidebarContent, SidebarDivider, SidebarFooter, SidebarHeader, SidebarItem, SidebarSection, Skeleton, SkeletonCard, SkeletonCircle, SkeletonListItem, SkeletonText, Sparkline, Spinner, Stack, StarIcon, StatusDot, StatusPill2 as StatusPill, StepContent, StepIndicator, StepLabel, Stepper, Step as StepperStep, StrengthTrendChart, SupersetWrapper, Surface, SurfaceContext, SvgIcon, Switch, TONE_COLOR, Tab, TabList, TabPanel, TabPanels, Table, TableBody, TableCell, TableHeader, TableHeaderCell, TablePagination, TableRow, Tabs, TempoDisplay, Tile, TimerReadout, Toast, ToastProvider, ToolbarButton, ToolbarButtonGroup, Tooltip, TopBar, Treemap, TrendingDownIcon, Typography, VStack, VelocityHero, VelocityStrip, VerdictHero, VoltrasMark, VolumeLandmarkBar, WeekRow, WeightBadge, WorkoutCard, WorkoutPill, ZoneTrack, alpha, applyThemePreset, audiobookPreset, auraForVerdict,
|
|
15867
|
+
export { Accordion, AccordionButton, AccordionItem, AccordionPanel, ActivityIcon, Alert, AlertDescription, AlertTitle, AlertTriangleIcon, Autocomplete, Avatar, AvatarBadge, AvatarGroup, AwardIcon, BAND_GAP, BAND_H, Badge, BadgeText, BaseBadge, BluetoothIcon, BrandLockup, BreadcrumbItem, Breadcrumbs, Button, ButtonIcon, ButtonSpinner, ButtonText, CATEGORICAL_CVD_SAFE_MAX, CapacityBandChart, Caption, Card, CardContent, CardDescription, CardFooter, CardHeader, CardSkeleton, CardTitle, Checkbox, CheckboxGroup, Chip, CircleSlashIcon, CircularProgress, CircularTimer, Collapse, CollapseButton, CollapseContent, DRIFT_GREY, DashboardShell, DataRow, DateTime, DeviationBar, DeviceIndicator, DeviceMenu, DeviceRow, Divider, Drawer, DrawerBody, DrawerFooter, DrawerHeader, DualGhostSpark, DualVelocityStrip, DumbbellIcon, EmptyState, ExerciseCard, ExerciseCardHeading, ExerciseHeading, ExerciseIndicator, FLOATING_ELEVATION_MIN, FatigueLights, FatigueMeter, FormActions, FormField, FormRow, FormSection, GRIND_THRESHOLD, Gauge2 as Gauge, GhostBand, GhostBloom, GhostSpark, HStack, Heading, HelpTip, HistoryIcon, INDICATOR_PRECEDENCE, IconBox, Indicator, InfoIcon, Input, InputBar, InputGroup, IntensityBar, Label, LabelWithHelp, LayersIcon, Link, ListItem, ListItemContent, ListItemDivider, ListItemIcon, ListItemTrailing, LiveAuraFrame, LiveFatigueCard, LiveFatiguePanel, METRIC_FONT, Menu, MenuDivider, MenuGroup, MenuItem, MenuList, MenuTrigger, MesoCard, MesoProgressBar, MesoStatusCard, Metric, MetricCell, MetricGroup, MetricTiles, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalTitle, MuscleGroupChip, NavItem, Overline, PHASE_AXIS_COLOR, PRESSED_ELEVATION_LEVEL, Paragraph, PasswordInput, PersonStandingIcon, Pill, PlaceholderStrip, Popover, PopoverCloseButton, PopoverContent, PopoverTrigger, PrBadge, PrHistoryModal, Progress, ProgressSteps, RED_DEEP, RED_LIGHT, RED_MID, Radio, RadioGroup, ReadinessCheck, RestTimer, RomProgressionChart, SET_STRIP_VARIABLE_COLOR, SET_STRIP_ZONES, SILVER, STATE_LABEL, SURFACE_LEVEL_TOKEN, SURFACE_PLANE_STEPS, ScaleIcon, Scatter, ScheduleTiles, Section, SectionContent, SectionHeader, SegmentedBar, SegmentedProgressBar, Select, SessionHeader, SessionRail, SessionStatePill, SetBar, SetRow, SetStrip, SetTableHeader, SetsRepsLoad, SideNav, Sidebar, SidebarContent, SidebarDivider, SidebarFooter, SidebarHeader, SidebarItem, SidebarSection, Skeleton, SkeletonCard, SkeletonCircle, SkeletonListItem, SkeletonText, Sparkline, Spinner, Stack, StarIcon, StatusDot, StatusPill2 as StatusPill, StepContent, StepIndicator, StepLabel, Stepper, Step as StepperStep, StrengthTrendChart, SupersetWrapper, Surface, SurfaceContext, SvgIcon, Switch, TONE_COLOR, Tab, TabList, TabPanel, TabPanels, Table, TableBody, TableCell, TableHeader, TableHeaderCell, TablePagination, TableRow, Tabs, TempoDisplay, Tile, TimerReadout, Toast, ToastProvider, ToolbarButton, ToolbarButtonGroup, Tooltip, TopBar, Treemap, TrendingDownIcon, Typography, VStack, VelocityHero, VelocityStrip, VerdictHero, VoltrasMark, VolumeLandmarkBar, WeekRow, WeightBadge, WorkoutCard, WorkoutPill, ZoneTrack, alpha, applyThemePreset, audiobookPreset, auraForVerdict, barPaper, bestTextColor, buttonSizes, calculateMeanVelocity, calculateVelocityLoss, categoricalPalette, cn, componentElevationRanges, composeValidators, createFieldId, darkThemeCSSVars, darken, defaultNavItems, defaultPreset, discreteRainbow, divergingScale, elevationSystem, formatDateTime, formatDuration, formatPrescription, formatSignedPct, formatVelocity, getBaseSurfaceColor, getCategoricalColor, getContrastText, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getFieldAriaProps, getFieldValidationProps, getGlowShadow, getHoverColors, getLuminance, getPressedRecessShadow, getResultColor, getSemanticColors, getStatusColor, getThemeCSSVars, getValidatedElevation, getVelocityZoneColor, getVelocityZoneName, ghostLineColor, gluestackConfig, grainForTone, grainOpacityForTone, greyRamp, hasMaxLength, hasMinLength, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, isEmpty, isValidEmail, lightThemeCSSVars, lighten, linearGradient, liveAuraColor, mergePhaseSegments, onSurfaceColors, paceTone, paceToneColor, paperSheet, pressedLevel, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, resolveIndicator, rgbToHex, rgbToHsv, roundRpe, roundTempo, roundWeight, rpeColor, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, smoothPath, statusPillColor, surfaceBackground, surfaceGradient, useOnSurfaceColor, useSurface, useSurfaceMode, useTable, useTimer, useToast, useToolbarButton, validateCssPropertyManifest, validationRules, velocityZoneColor };
|
|
16061
15868
|
//# sourceMappingURL=index.mjs.map
|
|
16062
15869
|
//# sourceMappingURL=index.mjs.map
|