@moderneinc/design-system-components 6.1.0-alpha.f3c8fa → 7.0.0-next.4ff15f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,14 +1,15 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { semanticColors, spacing, typography, borderRadius, shadows, colors, semanticColorsDark, semanticTypography } from '@moderneinc/design-system-tokens';
3
3
  import Box from '@mui/material/Box';
4
- import { styled, alpha } from '@mui/material/styles';
4
+ import { styled, useTheme, alpha } from '@mui/material/styles';
5
5
  import Chip, { chipClasses } from '@mui/material/Chip';
6
6
  import MuiAvatar from '@mui/material/Avatar';
7
7
  import SvgIcon from '@mui/material/SvgIcon';
8
8
  import Alert, { alertClasses } from '@mui/material/Alert';
9
9
  import ButtonBase, { buttonBaseClasses } from '@mui/material/ButtonBase';
10
- import React, { useContext, createContext, forwardRef, createElement, useState, useRef, useCallback, useMemo, useEffect, useLayoutEffect, Children, isValidElement, cloneElement } from 'react';
10
+ import { BadgeInfo, WifiOff, TriangleAlert, CircleAlert, CircleCheckBig, X, ChevronRight, Square, SquareCheck, SquareMinus, Search, ChevronDown, Plus, Trash2, ArrowUp, ArrowDown, ChevronsUpDown, Columns3, ListFilter, HelpCircle, CalendarDays, Minus, ChevronLeft, AlertCircle, ChevronUp } from 'lucide-react';
11
11
  import IconButton, { iconButtonClasses } from '@mui/material/IconButton';
12
+ import React, { useState, useRef, useCallback, useMemo, forwardRef, useEffect, createContext, useContext, useLayoutEffect, Children, isValidElement, cloneElement } from 'react';
12
13
  import Breadcrumbs, { breadcrumbsClasses } from '@mui/material/Breadcrumbs';
13
14
  import Link from '@mui/material/Link';
14
15
  import CircularProgress from '@mui/material/CircularProgress';
@@ -23,9 +24,11 @@ import Divider from '@mui/material/Divider';
23
24
  import InputAdornment, { inputAdornmentClasses } from '@mui/material/InputAdornment';
24
25
  import InputBase, { inputBaseClasses } from '@mui/material/InputBase';
25
26
  import TextField from '@mui/material/TextField';
27
+ import FormControl from '@mui/material/FormControl';
26
28
  import { formLabelClasses } from '@mui/material/FormLabel';
27
- import InputLabel, { inputLabelClasses } from '@mui/material/InputLabel';
29
+ import MuiInputLabel, { inputLabelClasses } from '@mui/material/InputLabel';
28
30
  import MuiSelect, { selectClasses } from '@mui/material/Select';
31
+ import { mergeSlotProps, useForkRef } from '@mui/material/utils';
29
32
  import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
30
33
  import Tooltip, { tooltipClasses } from '@mui/material/Tooltip';
31
34
  import { dayCalendarClasses } from '@mui/x-date-pickers/DateCalendar';
@@ -36,10 +39,10 @@ import { pickersCalendarHeaderClasses } from '@mui/x-date-pickers/PickersCalenda
36
39
  import { PickersShortcuts } from '@mui/x-date-pickers/PickersShortcuts';
37
40
  import { DateRangePicker } from '@mui/x-date-pickers-pro/DateRangePicker';
38
41
  import { dateRangePickerDayClasses } from '@mui/x-date-pickers-pro/DateRangePickerDay';
42
+ import { startOfDay, endOfDay, subDays, startOfMonth, subMonths, endOfMonth, startOfYear } from 'date-fns';
39
43
  import LinearProgress, { linearProgressClasses } from '@mui/material/LinearProgress';
40
44
  import Paper, { paperClasses } from '@mui/material/Paper';
41
45
  import Stack from '@mui/material/Stack';
42
- import FormControl from '@mui/material/FormControl';
43
46
  import FormHelperText, { formHelperTextClasses } from '@mui/material/FormHelperText';
44
47
  import ListItemButton, { listItemButtonClasses } from '@mui/material/ListItemButton';
45
48
  import ListItemIcon, { listItemIconClasses } from '@mui/material/ListItemIcon';
@@ -78,29 +81,35 @@ import { RichTreeViewPro } from '@mui/x-tree-view-pro/RichTreeViewPro';
78
81
  const MUI_INTERNAL_PROPS = ['ownerState', 'theme', 'sx', 'as'];
79
82
  const isMuiInternalProp = (prop) => MUI_INTERNAL_PROPS.includes(prop);
80
83
 
84
+ // semanticColors.status.<name> feeds `palette` below, read with
85
+ // .light/.dark/.transparent, so the phase-2 token restructure's codemod
86
+ // (driven from literal TOKEN_MAP paths) cannot reach either — fixed by hand,
87
+ // mirroring ModStatusCell/Dot. See
88
+ // docs/superpowers/plans/2026-08-05-semantic-restructure.md
89
+ // "Dynamic access — the codemod cannot see these".
81
90
  const STATUS_COLOR_CLASSES = [
82
- [chipClasses.colorDefault, semanticColors.status.neutral],
83
- [chipClasses.colorError, semanticColors.status.error],
84
- [chipClasses.colorWarning, semanticColors.status.warning],
85
- [chipClasses.colorSuccess, semanticColors.status.success],
86
- [chipClasses.colorInfo, semanticColors.status.info],
91
+ [chipClasses.colorDefault, semanticColors.color.status.neutral],
92
+ [chipClasses.colorError, semanticColors.color.status.error],
93
+ [chipClasses.colorWarning, semanticColors.color.status.warning],
94
+ [chipClasses.colorSuccess, semanticColors.color.status.success],
95
+ [chipClasses.colorInfo, semanticColors.color.status.info],
87
96
  ];
88
97
  const outlinedColorOverrides = {
89
98
  backgroundColor: 'transparent',
90
- color: semanticColors.typography.bodySecondary,
91
- border: `1px solid ${semanticColors.border.secondary}`,
99
+ color: semanticColors.color.text.secondary,
100
+ border: `1px solid ${semanticColors.color.border.primary}`,
92
101
  [`& .${chipClasses.icon}, & .${chipClasses.deleteIcon}`]: {
93
- color: semanticColors.typography.bodySecondary,
102
+ color: semanticColors.color.text.secondary,
94
103
  },
95
104
  };
96
105
  const filledColorRules = Object.fromEntries(STATUS_COLOR_CLASSES.map(([className, palette]) => [
97
106
  `&.${className}`,
98
107
  {
99
- backgroundColor: palette.light,
100
- color: palette.dark,
101
- border: `1px solid ${palette.transparent}`,
108
+ backgroundColor: palette.bg,
109
+ color: palette.fg,
110
+ border: `1px solid ${palette.tint}`,
102
111
  [`& .${chipClasses.icon}, & .${chipClasses.deleteIcon}`]: {
103
- color: palette.dark,
112
+ color: palette.fg,
104
113
  },
105
114
  },
106
115
  ]));
@@ -174,7 +183,7 @@ const avatarIndexFromSeed = (seed) => seed ? ((djb2Hash(seed) % 7) + 1) : undefi
174
183
  * Produces a double-ring effect: a white inner gap (via outline-offset) and a colored outer ring.
175
184
  */
176
185
  const focusRingStyles = {
177
- outline: `2px solid ${semanticColors.border.focus}`,
186
+ outline: `2px solid ${semanticColors.color.border.focus}`,
178
187
  outlineOffset: '2px',
179
188
  };
180
189
 
@@ -182,9 +191,14 @@ const sizeConfig$1 = {
182
191
  small: { size: spacing.spacing_2_1_2, fontSize: typography.fontSize.xs },
183
192
  medium: { size: spacing.spacing_4, fontSize: typography.fontSize.xs },
184
193
  };
194
+ // semanticColors.avatar.initials[...] is a computed member access, so the
195
+ // phase-2 token restructure's codemod (driven from literal TOKEN_MAP paths)
196
+ // cannot reach it — fixed by hand, mirroring ModStatusCell/Dot. See
197
+ // docs/superpowers/plans/2026-08-05-semantic-restructure.md
198
+ // "Dynamic access — the codemod cannot see these".
185
199
  const indexedColors = (colorIndex) => ({
186
- color: semanticColors.avatar.initials[`text${colorIndex}`],
187
- backgroundColor: semanticColors.avatar.initials[`background${colorIndex}`],
200
+ color: semanticColors.avatar.initials[`fg${colorIndex}`],
201
+ backgroundColor: semanticColors.avatar.initials[`bg${colorIndex}`],
188
202
  borderColor: semanticColors.avatar.initials[`border${colorIndex}`],
189
203
  });
190
204
  const StyledAvatar = styled(MuiAvatar, {
@@ -199,13 +213,13 @@ const StyledAvatar = styled(MuiAvatar, {
199
213
  fontFamily: typography.fontFamily.body,
200
214
  fontWeight: typography.fontWeight.regular,
201
215
  lineHeight: 1,
202
- color: semanticColors.avatar.userDefaultText,
203
- backgroundColor: semanticColors.avatar.userDefaultBg,
204
- border: `1px solid ${semanticColors.border.primary}`,
216
+ color: semanticColors.avatar.user.fg,
217
+ backgroundColor: semanticColors.avatar.user.bg,
218
+ border: `1px solid ${semanticColors.color.border.primary}`,
205
219
  ...(avatarColorIndex && indexedColors(avatarColorIndex)),
206
220
  '&:focus-visible': {
207
221
  ...focusRingStyles,
208
- borderColor: semanticColors.border.focus,
222
+ borderColor: semanticColors.color.border.focus,
209
223
  },
210
224
  };
211
225
  });
@@ -320,7 +334,7 @@ const HeaderContainer = styled(Box)(({ size }) => {
320
334
  return {
321
335
  width: '34px',
322
336
  height: `${modRowHeights[size]}px`,
323
- borderBottom: `1px solid ${semanticColors.border.secondary}`,
337
+ borderBottom: `1px solid ${semanticColors.color.border.primary}`,
324
338
  boxSizing: 'border-box',
325
339
  display: 'flex',
326
340
  alignItems: 'center',
@@ -357,7 +371,7 @@ const ActivityDot = styled('div')(({ color }) => ({
357
371
  * field: 'activity',
358
372
  * headerName: '',
359
373
  * width: 34,
360
- * renderHeader: () => <ModActivityHeader size="condensed" color="commitJob" />,
374
+ * renderHeader: () => <ModActivityHeader size="compact" color="commitJob" />,
361
375
  * renderCell: (params) => (
362
376
  * <ModActivityIndicatorCell
363
377
  * event={params.row.eventType}
@@ -428,7 +442,7 @@ const ModActivityIndicatorCell = ({ event = 'commit-job', secondaryEvent, scene
428
442
  if (scene === ActivityScene.BLANK) {
429
443
  return null;
430
444
  }
431
- const color = event !== 'none' ? ACTIVITY_COLORS[event] : semanticColors.border.secondary;
445
+ const color = event !== 'none' ? ACTIVITY_COLORS[event] : semanticColors.color.border.primary;
432
446
  // Use secondary color for paths if specified, otherwise use primary color
433
447
  const pathColor = secondaryEvent && secondaryEvent !== 'none' ? ACTIVITY_COLORS[secondaryEvent] : color;
434
448
  switch (scene) {
@@ -455,506 +469,19 @@ const ModActivityIndicatorCell = ({ event = 'commit-job', secondaryEvent, scene
455
469
  };
456
470
  ModActivityIndicatorCell.displayName = 'ModActivityIndicatorCell';
457
471
 
458
- /**
459
- * @license lucide-react v1.28.0 - ISC
460
- *
461
- * This source code is licensed under the ISC license.
462
- * See the LICENSE file in the root directory of this source tree.
463
- */
464
-
465
- const mergeClasses = (...classes) => classes.filter((className, index, array) => {
466
- return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
467
- }).join(" ").trim();
468
-
469
- /**
470
- * @license lucide-react v1.28.0 - ISC
471
- *
472
- * This source code is licensed under the ISC license.
473
- * See the LICENSE file in the root directory of this source tree.
474
- */
475
-
476
- const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
477
-
478
- /**
479
- * @license lucide-react v1.28.0 - ISC
480
- *
481
- * This source code is licensed under the ISC license.
482
- * See the LICENSE file in the root directory of this source tree.
483
- */
484
-
485
- const toCamelCase = (string) => string.replace(
486
- /^([A-Z])|[\s-_]+(\w)/g,
487
- (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
488
- );
489
-
490
- /**
491
- * @license lucide-react v1.28.0 - ISC
492
- *
493
- * This source code is licensed under the ISC license.
494
- * See the LICENSE file in the root directory of this source tree.
495
- */
496
-
497
-
498
- const toPascalCase = (string) => {
499
- const camelCase = toCamelCase(string);
500
- return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
501
- };
502
-
503
- /**
504
- * @license lucide-react v1.28.0 - ISC
505
- *
506
- * This source code is licensed under the ISC license.
507
- * See the LICENSE file in the root directory of this source tree.
508
- */
509
-
510
- var defaultAttributes = {
511
- xmlns: "http://www.w3.org/2000/svg",
512
- width: 24,
513
- height: 24,
514
- viewBox: "0 0 24 24",
515
- fill: "none",
516
- stroke: "currentColor",
517
- strokeWidth: 2,
518
- strokeLinecap: "round",
519
- strokeLinejoin: "round"
520
- };
521
-
522
- /**
523
- * @license lucide-react v1.28.0 - ISC
524
- *
525
- * This source code is licensed under the ISC license.
526
- * See the LICENSE file in the root directory of this source tree.
527
- */
528
-
529
- const hasA11yProp = (props) => {
530
- for (const prop in props) {
531
- if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
532
- return true;
533
- }
534
- }
535
- return false;
536
- };
537
-
538
- const LucideContext = createContext({});
539
- const useLucideContext = () => useContext(LucideContext);
540
-
541
- const Icon = forwardRef(
542
- ({ color, size, strokeWidth, absoluteStrokeWidth, className = "", children, iconNode, ...rest }, ref) => {
543
- const {
544
- size: contextSize = 24,
545
- strokeWidth: contextStrokeWidth = 2,
546
- absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,
547
- color: contextColor = "currentColor",
548
- className: contextClass = ""
549
- } = useLucideContext() ?? {};
550
- const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;
551
- return createElement(
552
- "svg",
553
- {
554
- ref,
555
- ...defaultAttributes,
556
- width: size ?? contextSize ?? defaultAttributes.width,
557
- height: size ?? contextSize ?? defaultAttributes.height,
558
- stroke: color ?? contextColor,
559
- strokeWidth: calculatedStrokeWidth,
560
- className: mergeClasses("lucide", contextClass, className),
561
- ...!children && !hasA11yProp(rest) && { "aria-hidden": "true" },
562
- ...rest
563
- },
564
- [
565
- ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
566
- ...Array.isArray(children) ? children : [children]
567
- ]
568
- );
569
- }
570
- );
571
-
572
- /**
573
- * @license lucide-react v1.28.0 - ISC
574
- *
575
- * This source code is licensed under the ISC license.
576
- * See the LICENSE file in the root directory of this source tree.
577
- */
578
-
579
-
580
- const createLucideIcon = (iconName, iconNode) => {
581
- const Component = forwardRef(
582
- ({ className, ...props }, ref) => createElement(Icon, {
583
- ref,
584
- iconNode,
585
- className: mergeClasses(
586
- `lucide-${toKebabCase(toPascalCase(iconName))}`,
587
- `lucide-${iconName}`,
588
- className
589
- ),
590
- ...props
591
- })
592
- );
593
- Component.displayName = toPascalCase(iconName);
594
- return Component;
595
- };
596
-
597
- /**
598
- * @license lucide-react v1.28.0 - ISC
599
- *
600
- * This source code is licensed under the ISC license.
601
- * See the LICENSE file in the root directory of this source tree.
602
- */
603
-
604
-
605
- const __iconNode$n = [
606
- ["path", { d: "M12 5v14", key: "s699le" }],
607
- ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
608
- ];
609
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$n);
610
-
611
- /**
612
- * @license lucide-react v1.28.0 - ISC
613
- *
614
- * This source code is licensed under the ISC license.
615
- * See the LICENSE file in the root directory of this source tree.
616
- */
617
-
618
-
619
- const __iconNode$m = [
620
- ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
621
- ["path", { d: "M12 19V5", key: "x0mq9r" }]
622
- ];
623
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$m);
624
-
625
- /**
626
- * @license lucide-react v1.28.0 - ISC
627
- *
628
- * This source code is licensed under the ISC license.
629
- * See the LICENSE file in the root directory of this source tree.
630
- */
631
-
632
-
633
- const __iconNode$l = [
634
- [
635
- "path",
636
- {
637
- d: "M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",
638
- key: "3c2336"
639
- }
640
- ],
641
- ["line", { x1: "12", x2: "12", y1: "16", y2: "12", key: "1y1yb1" }],
642
- ["line", { x1: "12", x2: "12.01", y1: "8", y2: "8", key: "110wyk" }]
643
- ];
644
- const BadgeInfo = createLucideIcon("badge-info", __iconNode$l);
645
-
646
- /**
647
- * @license lucide-react v1.28.0 - ISC
648
- *
649
- * This source code is licensed under the ISC license.
650
- * See the LICENSE file in the root directory of this source tree.
651
- */
652
-
653
-
654
- const __iconNode$k = [
655
- ["path", { d: "M8 2v3", key: "1ioesn" }],
656
- ["path", { d: "M16 2v3", key: "otl347" }],
657
- ["rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", key: "h1oib" }],
658
- ["path", { d: "M3 9h18", key: "1pudct" }],
659
- ["path", { d: "M8 13h.01", key: "1sbv64" }],
660
- ["path", { d: "M12 13h.01", key: "y0uutt" }],
661
- ["path", { d: "M16 13h.01", key: "wip0gl" }],
662
- ["path", { d: "M8 17h.01", key: "p3bg7i" }],
663
- ["path", { d: "M12 17h.01", key: "p32p05" }],
664
- ["path", { d: "M16 17h.01", key: "ql8jdd" }]
665
- ];
666
- const CalendarDays = createLucideIcon("calendar-days", __iconNode$k);
667
-
668
- /**
669
- * @license lucide-react v1.28.0 - ISC
670
- *
671
- * This source code is licensed under the ISC license.
672
- * See the LICENSE file in the root directory of this source tree.
673
- */
674
-
675
-
676
- const __iconNode$j = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
677
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$j);
678
-
679
- /**
680
- * @license lucide-react v1.28.0 - ISC
681
- *
682
- * This source code is licensed under the ISC license.
683
- * See the LICENSE file in the root directory of this source tree.
684
- */
685
-
686
-
687
- const __iconNode$i = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
688
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$i);
689
-
690
- /**
691
- * @license lucide-react v1.28.0 - ISC
692
- *
693
- * This source code is licensed under the ISC license.
694
- * See the LICENSE file in the root directory of this source tree.
695
- */
696
-
697
-
698
- const __iconNode$h = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
699
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$h);
700
-
701
- /**
702
- * @license lucide-react v1.28.0 - ISC
703
- *
704
- * This source code is licensed under the ISC license.
705
- * See the LICENSE file in the root directory of this source tree.
706
- */
707
-
708
-
709
- const __iconNode$g = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
710
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$g);
711
-
712
- /**
713
- * @license lucide-react v1.28.0 - ISC
714
- *
715
- * This source code is licensed under the ISC license.
716
- * See the LICENSE file in the root directory of this source tree.
717
- */
718
-
719
-
720
- const __iconNode$f = [
721
- ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
722
- ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
723
- ];
724
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$f);
725
-
726
- /**
727
- * @license lucide-react v1.28.0 - ISC
728
- *
729
- * This source code is licensed under the ISC license.
730
- * See the LICENSE file in the root directory of this source tree.
731
- */
732
-
733
-
734
- const __iconNode$e = [
735
- ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
736
- ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
737
- ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
738
- ];
739
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$e);
740
-
741
- /**
742
- * @license lucide-react v1.28.0 - ISC
743
- *
744
- * This source code is licensed under the ISC license.
745
- * See the LICENSE file in the root directory of this source tree.
746
- */
747
-
748
-
749
- const __iconNode$d = [
750
- ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
751
- ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
752
- ];
753
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$d);
754
-
755
- /**
756
- * @license lucide-react v1.28.0 - ISC
757
- *
758
- * This source code is licensed under the ISC license.
759
- * See the LICENSE file in the root directory of this source tree.
760
- */
761
-
762
-
763
- const __iconNode$c = [
764
- ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
765
- ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
766
- ["path", { d: "M12 17h.01", key: "p32p05" }]
767
- ];
768
- const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$c);
769
-
770
- /**
771
- * @license lucide-react v1.28.0 - ISC
772
- *
773
- * This source code is licensed under the ISC license.
774
- * See the LICENSE file in the root directory of this source tree.
775
- */
776
-
777
-
778
- const __iconNode$b = [
779
- ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
780
- ["path", { d: "M9 3v18", key: "fh3hqa" }],
781
- ["path", { d: "M15 3v18", key: "14nvp0" }]
782
- ];
783
- const Columns3 = createLucideIcon("columns-3", __iconNode$b);
784
-
785
- /**
786
- * @license lucide-react v1.28.0 - ISC
787
- *
788
- * This source code is licensed under the ISC license.
789
- * See the LICENSE file in the root directory of this source tree.
790
- */
791
-
792
-
793
- const __iconNode$a = [
794
- ["path", { d: "M2 5h20", key: "1fs1ex" }],
795
- ["path", { d: "M6 12h12", key: "8npq4p" }],
796
- ["path", { d: "M9 19h6", key: "456am0" }]
797
- ];
798
- const ListFilter = createLucideIcon("list-filter", __iconNode$a);
799
-
800
- /**
801
- * @license lucide-react v1.28.0 - ISC
802
- *
803
- * This source code is licensed under the ISC license.
804
- * See the LICENSE file in the root directory of this source tree.
805
- */
806
-
807
-
808
- const __iconNode$9 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
809
- const Minus = createLucideIcon("minus", __iconNode$9);
810
-
811
- /**
812
- * @license lucide-react v1.28.0 - ISC
813
- *
814
- * This source code is licensed under the ISC license.
815
- * See the LICENSE file in the root directory of this source tree.
816
- */
817
-
818
-
819
- const __iconNode$8 = [
820
- ["path", { d: "M5 12h14", key: "1ays0h" }],
821
- ["path", { d: "M12 5v14", key: "s699le" }]
822
- ];
823
- const Plus = createLucideIcon("plus", __iconNode$8);
824
-
825
- /**
826
- * @license lucide-react v1.28.0 - ISC
827
- *
828
- * This source code is licensed under the ISC license.
829
- * See the LICENSE file in the root directory of this source tree.
830
- */
831
-
832
-
833
- const __iconNode$7 = [
834
- ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
835
- ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
836
- ];
837
- const Search = createLucideIcon("search", __iconNode$7);
838
-
839
- /**
840
- * @license lucide-react v1.28.0 - ISC
841
- *
842
- * This source code is licensed under the ISC license.
843
- * See the LICENSE file in the root directory of this source tree.
844
- */
845
-
846
-
847
- const __iconNode$6 = [
848
- ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
849
- ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
850
- ];
851
- const SquareCheck = createLucideIcon("square-check", __iconNode$6);
852
-
853
- /**
854
- * @license lucide-react v1.28.0 - ISC
855
- *
856
- * This source code is licensed under the ISC license.
857
- * See the LICENSE file in the root directory of this source tree.
858
- */
859
-
860
-
861
- const __iconNode$5 = [
862
- ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
863
- ["path", { d: "M8 12h8", key: "1wcyev" }]
864
- ];
865
- const SquareMinus = createLucideIcon("square-minus", __iconNode$5);
866
-
867
- /**
868
- * @license lucide-react v1.28.0 - ISC
869
- *
870
- * This source code is licensed under the ISC license.
871
- * See the LICENSE file in the root directory of this source tree.
872
- */
873
-
874
-
875
- const __iconNode$4 = [
876
- ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
877
- ];
878
- const Square = createLucideIcon("square", __iconNode$4);
879
-
880
- /**
881
- * @license lucide-react v1.28.0 - ISC
882
- *
883
- * This source code is licensed under the ISC license.
884
- * See the LICENSE file in the root directory of this source tree.
885
- */
886
-
887
-
888
- const __iconNode$3 = [
889
- ["path", { d: "M10 11v6", key: "nco0om" }],
890
- ["path", { d: "M14 11v6", key: "outv1u" }],
891
- ["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
892
- ["path", { d: "M3 6h18", key: "d0wm0j" }],
893
- ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
894
- ];
895
- const Trash2 = createLucideIcon("trash-2", __iconNode$3);
896
-
897
- /**
898
- * @license lucide-react v1.28.0 - ISC
899
- *
900
- * This source code is licensed under the ISC license.
901
- * See the LICENSE file in the root directory of this source tree.
902
- */
903
-
904
-
905
- const __iconNode$2 = [
906
- [
907
- "path",
908
- {
909
- d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
910
- key: "wmoenq"
911
- }
912
- ],
913
- ["path", { d: "M12 9v4", key: "juzpu7" }],
914
- ["path", { d: "M12 17h.01", key: "p32p05" }]
915
- ];
916
- const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$2);
917
-
918
- /**
919
- * @license lucide-react v1.28.0 - ISC
920
- *
921
- * This source code is licensed under the ISC license.
922
- * See the LICENSE file in the root directory of this source tree.
923
- */
924
-
925
-
926
- const __iconNode$1 = [
927
- ["path", { d: "M12 20h.01", key: "zekei9" }],
928
- ["path", { d: "M8.5 16.429a5 5 0 0 1 7 0", key: "1bycff" }],
929
- ["path", { d: "M5 12.859a10 10 0 0 1 5.17-2.69", key: "1dl1wf" }],
930
- ["path", { d: "M19 12.859a10 10 0 0 0-2.007-1.523", key: "4k23kn" }],
931
- ["path", { d: "M2 8.82a15 15 0 0 1 4.177-2.643", key: "1grhjp" }],
932
- ["path", { d: "M22 8.82a15 15 0 0 0-11.288-3.764", key: "z3jwby" }],
933
- ["path", { d: "m2 2 20 20", key: "1ooewy" }]
934
- ];
935
- const WifiOff = createLucideIcon("wifi-off", __iconNode$1);
936
-
937
- /**
938
- * @license lucide-react v1.28.0 - ISC
939
- *
940
- * This source code is licensed under the ISC license.
941
- * See the LICENSE file in the root directory of this source tree.
942
- */
943
-
944
-
945
- const __iconNode = [
946
- ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
947
- ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
948
- ];
949
- const X = createLucideIcon("x", __iconNode);
950
-
951
472
  const neutralSmallShadow = `${shadows.neutral.small.x}px ${shadows.neutral.small.y}px ${shadows.neutral.small.blur}px ${shadows.neutral.small.spread}px ${shadows.neutral.small.shadow}`;
473
+ // semanticColors.status[intent] is read dynamically below, so the phase-2
474
+ // token restructure's codemod (driven from literal TOKEN_MAP paths) cannot
475
+ // reach these group references or the .default/.dark/.light/.transparent
476
+ // reads on `palette` — fixed by hand, mirroring ModStatusCell/Dot. See
477
+ // docs/superpowers/plans/2026-08-05-semantic-restructure.md
478
+ // "Dynamic access — the codemod cannot see these".
952
479
  const intentColors$1 = {
953
- success: semanticColors.status.success,
954
- error: semanticColors.status.error,
955
- warning: semanticColors.status.warning,
956
- offline: semanticColors.status.neutral,
957
- info: semanticColors.status.info,
480
+ success: semanticColors.color.status.success,
481
+ error: semanticColors.color.status.error,
482
+ warning: semanticColors.color.status.warning,
483
+ offline: semanticColors.color.status.neutral,
484
+ info: semanticColors.color.status.info,
958
485
  };
959
486
  // biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
960
487
  const StyledAlert$2 = styled(Alert, {
@@ -963,10 +490,10 @@ const StyledAlert$2 = styled(Alert, {
963
490
  const palette = intentColors$1[intent];
964
491
  const isFilled = alertType === 'filled';
965
492
  const isCompact = alertSize === 'compact';
966
- const iconColor = isFilled ? semanticColors.typography.tooltip.default : palette.default;
493
+ const iconColor = isFilled ? semanticColors.color.text.tooltip : palette.solid;
967
494
  const messageColor = isFilled
968
- ? semanticColors.typography.tooltip.default
969
- : semanticColors.typography.body;
495
+ ? semanticColors.color.text.tooltip
496
+ : semanticColors.color.text.primary;
970
497
  return {
971
498
  ...(isCompact
972
499
  ? { minHeight: spacing.spacing_5 }
@@ -983,9 +510,9 @@ const StyledAlert$2 = styled(Alert, {
983
510
  padding: hasChildren
984
511
  ? `${spacing.spacing_1_1_2}px ${spacing.spacing_2}px`
985
512
  : `0 ${spacing.spacing_2}px`,
986
- backgroundColor: isFilled ? palette.dark : palette.light,
987
- border: isFilled ? 'none' : `1px solid ${palette.transparent}`,
988
- color: isFilled ? semanticColors.typography.tooltip.default : semanticColors.typography.body,
513
+ backgroundColor: isFilled ? palette.fg : palette.bg,
514
+ border: isFilled ? 'none' : `1px solid ${palette.tint}`,
515
+ color: isFilled ? semanticColors.color.text.tooltip : semanticColors.color.text.primary,
989
516
  boxShadow: isFilled ? neutralSmallShadow : undefined,
990
517
  [`& .${alertClasses.icon}`]: {
991
518
  color: iconColor,
@@ -1003,9 +530,7 @@ const StyledAlert$2 = styled(Alert, {
1003
530
  '& span:last-child': {
1004
531
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
1005
532
  fontWeight: typography.fontWeight.medium,
1006
- color: isFilled
1007
- ? semanticColors.typography.tooltip.default
1008
- : semanticColors.typography.bodySecondary,
533
+ color: isFilled ? semanticColors.color.text.tooltip : semanticColors.color.text.secondary,
1009
534
  lineHeight: 1.4,
1010
535
  },
1011
536
  },
@@ -1013,7 +538,7 @@ const StyledAlert$2 = styled(Alert, {
1013
538
  padding: 0,
1014
539
  marginRight: 0,
1015
540
  ...(isFilled && {
1016
- color: semanticColors.typography.tooltip.default,
541
+ color: semanticColors.color.text.tooltip,
1017
542
  [`& .${buttonBaseClasses.root}`]: { color: 'inherit' },
1018
543
  }),
1019
544
  },
@@ -1035,12 +560,18 @@ const ModAlert = ({ intent = 'success', type = 'outlined', size = 'default', tit
1035
560
  };
1036
561
  ModAlert.displayName = 'ModAlert';
1037
562
 
563
+ // semanticColors.status[intent] is read dynamically below, so the phase-2
564
+ // token restructure's codemod (driven from literal TOKEN_MAP paths) cannot
565
+ // reach these group references or the .default/.dark/.light reads on
566
+ // `palette` — fixed by hand, mirroring ModStatusCell/Dot. See
567
+ // docs/superpowers/plans/2026-08-05-semantic-restructure.md
568
+ // "Dynamic access — the codemod cannot see these".
1038
569
  const intentColors = {
1039
- info: semanticColors.status.info,
1040
- success: semanticColors.status.success,
1041
- error: semanticColors.status.error,
1042
- warning: semanticColors.status.warning,
1043
- neutral: semanticColors.status.neutral,
570
+ info: semanticColors.color.status.info,
571
+ success: semanticColors.color.status.success,
572
+ error: semanticColors.color.status.error,
573
+ warning: semanticColors.color.status.warning,
574
+ neutral: semanticColors.color.status.neutral,
1044
575
  };
1045
576
  // biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
1046
577
  const StyledAlert$1 = styled(Alert, {
@@ -1049,12 +580,12 @@ const StyledAlert$1 = styled(Alert, {
1049
580
  const palette = intentColors[intent];
1050
581
  const typeStyles = bannerType === 'filled'
1051
582
  ? {
1052
- backgroundColor: palette.dark,
1053
- color: semanticColors.surfaces.white,
583
+ backgroundColor: palette.fg,
584
+ color: semanticColors.color.surface.raised,
1054
585
  }
1055
586
  : {
1056
- backgroundColor: palette.light,
1057
- color: semanticColors.typography.body,
587
+ backgroundColor: palette.bg,
588
+ color: semanticColors.color.text.primary,
1058
589
  };
1059
590
  return {
1060
591
  width: '100%',
@@ -1103,8 +634,8 @@ const LinkText = styled('span')(({ bannerType = 'outlined' }) => ({
1103
634
  marginLeft: 'auto',
1104
635
  fontWeight: typography.fontWeight.semiBold,
1105
636
  color: bannerType === 'filled'
1106
- ? semanticColors.typography.link.white
1107
- : semanticColors.typography.link.primary,
637
+ ? semanticColors.color.text.linkOnBrand
638
+ : semanticColors.color.text.link,
1108
639
  cursor: 'pointer',
1109
640
  whiteSpace: 'nowrap',
1110
641
  '&:hover': {
@@ -1131,7 +662,7 @@ const ModBanner = ({ intent = 'info', type = 'outlined', message, messagePositio
1131
662
  if (dismissed) {
1132
663
  return null;
1133
664
  }
1134
- const closeIconColor = type === 'filled' ? semanticColors.surfaces.white : intentColors[intent].default;
665
+ const closeIconColor = type === 'filled' ? semanticColors.color.surface.raised : intentColors[intent].solid;
1135
666
  return (jsx(StyledAlert$1, { ...props, intent: intent, bannerType: type, messagePosition: messagePosition, icon: messagePosition === 'left' ? icon || false : false, action: showClose ? (jsx(StyledIconButton, { size: "small", onClick: handleClose, closeIconColor: closeIconColor, children: jsx(X, { size: 16 }) })) : undefined, children: messagePosition === 'center' ? (jsxs(Fragment, { children: [icon, jsx("span", { children: message }), linkText && (jsx(LinkText, { bannerType: type, onClick: onLinkClick, children: linkText }))] })) : (jsxs(Fragment, { children: [jsx("span", { children: message }), linkText && (jsx(LinkText, { bannerType: type, onClick: onLinkClick, children: linkText }))] })) }));
1136
667
  };
1137
668
  ModBanner.displayName = 'ModBanner';
@@ -1139,7 +670,7 @@ ModBanner.displayName = 'ModBanner';
1139
670
  const StyledBreadcrumbs = styled(Breadcrumbs)(() => ({
1140
671
  [`& .${breadcrumbsClasses.separator}`]: {
1141
672
  margin: 0,
1142
- color: semanticColors.icons.utility,
673
+ color: semanticColors.color.icon.utility,
1143
674
  },
1144
675
  [`& .${breadcrumbsClasses.ol}`]: {
1145
676
  gap: spacing.spacing_1,
@@ -1152,15 +683,15 @@ const StyledBreadcrumbLink = styled(Link, {
1152
683
  fontWeight: typography.fontWeight.medium,
1153
684
  lineHeight: 1,
1154
685
  textDecoration: 'none',
1155
- color: current ? semanticColors.typography.bodySecondary : semanticColors.typography.link.primary,
686
+ color: current ? semanticColors.color.text.secondary : semanticColors.color.text.link,
1156
687
  cursor: current ? 'default' : 'pointer',
1157
688
  borderRadius: borderRadius.xS,
1158
689
  transition: 'color 0.2s ease-in-out',
1159
690
  '&:hover': {
1160
- color: current ? semanticColors.icons.hover : semanticColors.buttons.tertiary.hover,
691
+ color: current ? semanticColors.color.icon.hover : semanticColors.button.tertiary.fgHover,
1161
692
  },
1162
693
  '&:focus-visible': {
1163
- outline: `2px solid ${semanticColors.border.focus}`,
694
+ outline: `2px solid ${semanticColors.color.border.focus}`,
1164
695
  outlineOffset: 2,
1165
696
  },
1166
697
  }));
@@ -1198,7 +729,7 @@ function ModBreadcrumbLink({ current = false, children, component, ...props }) {
1198
729
  * ```
1199
730
  */
1200
731
  function ModBreadcrumbs({ children, className }) {
1201
- return (jsx(StyledBreadcrumbs, { separator: jsx(ChevronRight, { size: 10.67, color: semanticColors.icons.utility }), className: className, "aria-label": "breadcrumb", children: children }));
732
+ return (jsx(StyledBreadcrumbs, { separator: jsx(ChevronRight, { size: 10.67, color: semanticColors.color.icon.utility }), className: className, "aria-label": "breadcrumb", children: children }));
1202
733
  }
1203
734
 
1204
735
  // Props that should not be forwarded to ButtonBase (Button-specific props that ButtonBase doesn't support)
@@ -1250,90 +781,90 @@ const StyledButtonBase$1 = styled(ButtonBase, {
1250
781
  },
1251
782
  // Focus visible for keyboard navigation
1252
783
  [`&.${buttonBaseClasses.focusVisible}`]: {
1253
- outline: `2px solid ${semanticColors.border.focus}`,
784
+ outline: `2px solid ${semanticColors.color.border.focus}`,
1254
785
  outlineOffset: 2,
1255
786
  },
1256
787
  };
1257
788
  // Variant-specific styles
1258
789
  const variantStyles = {
1259
790
  primary: {
1260
- backgroundColor: semanticColors.buttons.primary.default,
1261
- color: semanticColors.surfaces.white,
791
+ backgroundColor: semanticColors.button.primary.bg,
792
+ color: semanticColors.color.surface.raised,
1262
793
  border: 'none',
1263
794
  '&:hover': {
1264
- backgroundColor: semanticColors.buttons.primary.hover,
795
+ backgroundColor: semanticColors.button.primary.bgHover,
1265
796
  },
1266
797
  '&:active': {
1267
- backgroundColor: semanticColors.buttons.primary.pressed,
798
+ backgroundColor: semanticColors.button.primary.bgPressed,
1268
799
  },
1269
800
  ...(loading
1270
801
  ? {}
1271
802
  : {
1272
803
  [`&.${buttonBaseClasses.disabled}`]: {
1273
- backgroundColor: semanticColors.buttons.primary.disabled,
1274
- color: semanticColors.typography.button.disabled,
804
+ backgroundColor: semanticColors.button.primary.bgDisabled,
805
+ color: semanticColors.button.fgDisabled,
1275
806
  },
1276
807
  }),
1277
808
  },
1278
809
  secondary: {
1279
- backgroundColor: semanticColors.buttons.secondary.defaultBackground,
1280
- color: semanticColors.buttons.secondary.default,
1281
- border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
810
+ backgroundColor: semanticColors.button.secondary.bg,
811
+ color: semanticColors.button.secondary.fg,
812
+ border: `1px solid ${semanticColors.button.secondary.border}`,
1282
813
  '&:hover': {
1283
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
814
+ backgroundColor: semanticColors.button.secondary.bgHover,
1284
815
  },
1285
816
  '&:active': {
1286
- backgroundColor: semanticColors.buttons.secondary.pressedBackground,
817
+ backgroundColor: semanticColors.button.secondary.bgPressed,
1287
818
  },
1288
819
  ...(loading
1289
820
  ? {}
1290
821
  : {
1291
822
  [`&.${buttonBaseClasses.disabled}`]: {
1292
- backgroundColor: semanticColors.buttons.secondary.disabledBackground,
1293
- borderColor: semanticColors.border.secondary,
1294
- color: semanticColors.typography.button.disabled,
823
+ backgroundColor: semanticColors.button.secondary.bgDisabled,
824
+ borderColor: semanticColors.color.border.primary,
825
+ color: semanticColors.button.fgDisabled,
1295
826
  },
1296
827
  }),
1297
828
  },
1298
829
  destructive: {
1299
- backgroundColor: semanticColors.buttons.destructive,
1300
- color: semanticColors.surfaces.white,
830
+ backgroundColor: semanticColors.button.destructive.bg,
831
+ color: semanticColors.color.surface.raised,
1301
832
  border: 'none',
1302
833
  '&:hover': {
1303
- backgroundColor: semanticColors.status.error.dark,
834
+ backgroundColor: semanticColors.color.status.error.fg,
1304
835
  },
1305
836
  '&:active': {
1306
- backgroundColor: semanticColors.status.error.dark,
837
+ backgroundColor: semanticColors.color.status.error.fg,
1307
838
  filter: 'brightness(0.9)',
1308
839
  },
1309
840
  ...(loading
1310
841
  ? {}
1311
842
  : {
1312
843
  [`&.${buttonBaseClasses.disabled}`]: {
1313
- backgroundColor: semanticColors.buttons.primary.disabled,
1314
- color: semanticColors.typography.button.disabled,
844
+ backgroundColor: semanticColors.button.primary.bgDisabled,
845
+ color: semanticColors.button.fgDisabled,
1315
846
  },
1316
847
  }),
1317
848
  },
1318
849
  tertiary: {
1319
850
  backgroundColor: 'transparent',
1320
- color: semanticColors.typography.input.default,
851
+ color: semanticColors.color.text.input,
1321
852
  border: 'none',
1322
853
  padding: 0,
1323
854
  lineHeight: 1,
1324
855
  '&:hover': {
1325
856
  backgroundColor: 'transparent',
1326
- color: semanticColors.buttons.tertiary.hover,
857
+ color: semanticColors.button.tertiary.fgHover,
1327
858
  },
1328
859
  '&:active': {
1329
- color: semanticColors.buttons.tertiary.pressed,
860
+ color: semanticColors.button.tertiary.fgPressed,
1330
861
  },
1331
862
  ...(loading
1332
863
  ? {}
1333
864
  : {
1334
865
  [`&.${buttonBaseClasses.disabled}`]: {
1335
866
  backgroundColor: 'transparent',
1336
- color: semanticColors.buttons.tertiary.disabled,
867
+ color: semanticColors.button.tertiary.fgDisabled,
1337
868
  },
1338
869
  }),
1339
870
  },
@@ -1348,10 +879,10 @@ const LoadingSpinner = styled(CircularProgress, {
1348
879
  })(({ $variant }) => {
1349
880
  // Use appropriate spinner color for each variant to ensure visibility
1350
881
  const spinnerColors = {
1351
- primary: semanticColors.surfaces.white,
1352
- secondary: semanticColors.buttons.primary.default,
1353
- destructive: semanticColors.surfaces.white,
1354
- tertiary: semanticColors.buttons.tertiary.default,
882
+ primary: semanticColors.color.surface.raised,
883
+ secondary: semanticColors.button.primary.bg,
884
+ destructive: semanticColors.color.surface.raised,
885
+ tertiary: semanticColors.button.tertiary.fg,
1355
886
  };
1356
887
  return {
1357
888
  color: spinnerColors[$variant],
@@ -1369,7 +900,7 @@ const StyledButtonTab = styled(MuiToggleButton)(({ theme }) => ({
1369
900
  fontFamily: typography.fontFamily.body,
1370
901
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
1371
902
  lineHeight: 1,
1372
- color: semanticColors.typography.tab.inactive,
903
+ color: semanticColors.color.text.tabInactive,
1373
904
  backgroundColor: 'transparent',
1374
905
  border: 'none',
1375
906
  padding: `${spacing.spacing_1}px ${spacing.spacing_1_1_2}px`,
@@ -1379,15 +910,15 @@ const StyledButtonTab = styled(MuiToggleButton)(({ theme }) => ({
1379
910
  duration: theme.transitions.duration.short,
1380
911
  }),
1381
912
  '&:hover': {
1382
- color: semanticColors.typography.tab.active,
913
+ color: semanticColors.color.text.tabActive,
1383
914
  },
1384
915
  '&.Mui-focusVisible': {
1385
- outline: `2px solid ${semanticColors.border.focus}`,
916
+ outline: `2px solid ${semanticColors.color.border.focus}`,
1386
917
  outlineOffset: -2,
1387
918
  borderRadius: borderRadius.xXS,
1388
919
  },
1389
920
  '&.Mui-disabled': {
1390
- color: semanticColors.typography.button.disabled,
921
+ color: semanticColors.button.fgDisabled,
1391
922
  cursor: 'default',
1392
923
  pointerEvents: 'none',
1393
924
  },
@@ -1449,7 +980,7 @@ const StyledButtonTabGroup = styled(MuiToggleButtonGroup)(({ theme, size = 'medi
1449
980
  };
1450
981
  return {
1451
982
  borderRadius: borderRadius.button,
1452
- border: `1px solid ${semanticColors.border.primary}`,
983
+ border: `1px solid ${semanticColors.color.border.primary}`,
1453
984
  overflow: 'hidden',
1454
985
  // Style all grouped children
1455
986
  [`& .${toggleButtonGroupClasses.grouped}`]: {
@@ -1462,26 +993,26 @@ const StyledButtonTabGroup = styled(MuiToggleButtonGroup)(({ theme, size = 'medi
1462
993
  lineHeight: 1,
1463
994
  textTransform: 'none',
1464
995
  border: 'none',
1465
- borderRight: `1px solid ${semanticColors.border.primary}`,
996
+ borderRight: `1px solid ${semanticColors.color.border.primary}`,
1466
997
  borderRadius: 0,
1467
- color: semanticColors.typography.tab.inactive,
1468
- backgroundColor: semanticColors.buttons.secondary.disabledBackground,
998
+ color: semanticColors.color.text.tabInactive,
999
+ backgroundColor: semanticColors.button.secondary.bgDisabled,
1469
1000
  transition: theme.transitions.create(['background-color', 'color', 'border-color'], {
1470
1001
  duration: theme.transitions.duration.short,
1471
1002
  }),
1472
1003
  // Selected state — double selector for specificity over MUI ToggleButton defaults
1473
1004
  [`&.${toggleButtonClasses.selected}.${toggleButtonClasses.selected}`]: {
1474
- backgroundColor: semanticColors.surfaces.white,
1475
- color: semanticColors.buttons.tertiary.default,
1005
+ backgroundColor: semanticColors.color.surface.raised,
1006
+ color: semanticColors.button.tertiary.fg,
1476
1007
  fontWeight: typography.fontWeight.semiBold,
1477
1008
  },
1478
1009
  // Hover state
1479
1010
  [`&:hover, &.${toggleButtonClasses.selected}:hover`]: {
1480
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
1011
+ backgroundColor: semanticColors.button.secondary.bgHover,
1481
1012
  },
1482
1013
  // Focus visible for keyboard navigation
1483
1014
  '&.Mui-focusVisible': {
1484
- outline: `2px solid ${semanticColors.border.focus}`,
1015
+ outline: `2px solid ${semanticColors.color.border.focus}`,
1485
1016
  outlineOffset: -2,
1486
1017
  zIndex: 1,
1487
1018
  },
@@ -1498,8 +1029,8 @@ const StyledButtonTabGroup = styled(MuiToggleButtonGroup)(({ theme, size = 'medi
1498
1029
  },
1499
1030
  // Disabled state
1500
1031
  [`&.${toggleButtonClasses.disabled}`]: {
1501
- backgroundColor: semanticColors.buttons.secondary.disabledBackground,
1502
- color: semanticColors.typography.button.disabled,
1032
+ backgroundColor: semanticColors.button.secondary.bgDisabled,
1033
+ color: semanticColors.button.fgDisabled,
1503
1034
  cursor: 'not-allowed',
1504
1035
  pointerEvents: 'auto',
1505
1036
  },
@@ -1544,18 +1075,18 @@ const SmallStyledCard = styled(MuiCard, {
1544
1075
  display: 'flex',
1545
1076
  flexDirection: 'column',
1546
1077
  gap: spacing.spacing_2, // 16px
1547
- backgroundColor: semanticColors.surfaces.card,
1548
- border: `1px solid ${selected ? semanticColors.buttons.primary.default : semanticColors.border.primary}`,
1078
+ backgroundColor: semanticColors.color.surface.raised,
1079
+ border: `1px solid ${selected ? semanticColors.button.primary.bg : semanticColors.color.border.primary}`,
1549
1080
  borderRadius: borderRadius.card,
1550
1081
  boxShadow: selected ? activeShadow : 'none',
1551
1082
  transition: theme.transitions.create(['border-color', 'background-color', 'box-shadow']),
1552
1083
  cursor: 'pointer',
1553
1084
  '&:hover': {
1554
- borderColor: semanticColors.buttons.primary.default,
1085
+ borderColor: semanticColors.button.primary.bg,
1555
1086
  boxShadow: activeShadow,
1556
1087
  },
1557
1088
  '&:focus-visible': {
1558
- borderColor: semanticColors.buttons.primary.default,
1089
+ borderColor: semanticColors.button.primary.bg,
1559
1090
  ...focusRingStyles,
1560
1091
  },
1561
1092
  ...(disabled && {
@@ -1580,7 +1111,7 @@ const SmallRecipeCount = styled('p')(({ theme }) => ({
1580
1111
  fontSize: theme.typography.pxToRem(typography.fontSize.xxs), // 10px
1581
1112
  fontWeight: typography.fontWeight.semiBold, // 600
1582
1113
  lineHeight: 1.2,
1583
- color: semanticColors.typography.body,
1114
+ color: semanticColors.color.text.primary,
1584
1115
  whiteSpace: 'nowrap',
1585
1116
  }));
1586
1117
  const SmallCardContent = styled('div')(() => ({
@@ -1594,7 +1125,7 @@ const SmallTitle = styled('p')(({ theme }) => ({
1594
1125
  fontSize: theme.typography.pxToRem(typography.fontSize.h6), // 16px
1595
1126
  fontWeight: typography.fontWeight.semiBold, // 600
1596
1127
  lineHeight: 1.4,
1597
- color: semanticColors.typography.body,
1128
+ color: semanticColors.color.text.primary,
1598
1129
  width: '100%',
1599
1130
  }));
1600
1131
  const SmallDescription = styled('p')(({ theme }) => ({
@@ -1602,7 +1133,7 @@ const SmallDescription = styled('p')(({ theme }) => ({
1602
1133
  fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
1603
1134
  fontWeight: typography.fontWeight.regular, // 400
1604
1135
  lineHeight: 1.5,
1605
- color: semanticColors.typography.body,
1136
+ color: semanticColors.color.text.primary,
1606
1137
  width: '100%',
1607
1138
  display: '-webkit-box',
1608
1139
  WebkitLineClamp: 2,
@@ -1619,12 +1150,10 @@ const LargeStyledCard = styled(MuiCard, {
1619
1150
  // sourcing one side from `semanticColors` (which flips) and the other from a
1620
1151
  // primitive (which doesn't) puts light-mode text on a dark surface in dark
1621
1152
  // mode. `semanticColorsDark` is the literal-hex escape hatch for exactly this.
1622
- const activeBorderColor = isLight
1623
- ? semanticColors.buttons.primary.default
1624
- : colors.digitalGreen[300];
1153
+ const activeBorderColor = isLight ? semanticColors.button.primary.bg : colors.digitalGreen[300];
1625
1154
  const defaultBorderColor = isLight
1626
- ? semanticColors.border.primary
1627
- : semanticColorsDark.border.primary;
1155
+ ? semanticColors.color.border.primary
1156
+ : semanticColorsDark.color.border.primary;
1628
1157
  return {
1629
1158
  width: 340,
1630
1159
  height: 162,
@@ -1634,7 +1163,9 @@ const LargeStyledCard = styled(MuiCard, {
1634
1163
  alignItems: 'flex-start',
1635
1164
  padding: spacing.spacing_2,
1636
1165
  borderRadius: borderRadius.card,
1637
- backgroundColor: isLight ? semanticColors.surfaces.card : semanticColorsDark.surfaces.card,
1166
+ backgroundColor: isLight
1167
+ ? semanticColors.color.surface.raised
1168
+ : semanticColorsDark.color.surface.raised,
1638
1169
  border: `1px solid ${defaultBorderColor}`,
1639
1170
  boxShadow: 'none',
1640
1171
  overflow: 'hidden',
@@ -1689,7 +1220,9 @@ const LargeHeaderTitle = styled('span', {
1689
1220
  fontWeight: typography.fontWeight.semiBold,
1690
1221
  fontSize: typography.fontSize.h6,
1691
1222
  lineHeight: 1.4,
1692
- color: cardTheme === 'light' ? semanticColors.typography.body : semanticColorsDark.typography.body,
1223
+ color: cardTheme === 'light'
1224
+ ? semanticColors.color.text.primary
1225
+ : semanticColorsDark.color.text.primary,
1693
1226
  flexShrink: 0,
1694
1227
  }));
1695
1228
  const LargeDescription = styled('p', {
@@ -1699,7 +1232,9 @@ const LargeDescription = styled('p', {
1699
1232
  fontWeight: typography.fontWeight.regular,
1700
1233
  fontSize: typography.fontSize.xs,
1701
1234
  lineHeight: 1.5,
1702
- color: cardTheme === 'light' ? semanticColors.typography.body : semanticColorsDark.typography.body,
1235
+ color: cardTheme === 'light'
1236
+ ? semanticColors.color.text.primary
1237
+ : semanticColorsDark.color.text.primary,
1703
1238
  margin: 0,
1704
1239
  minWidth: '100%',
1705
1240
  wordWrap: 'break-word',
@@ -1748,7 +1283,7 @@ const Label$4 = styled('span')(({ theme, size = 'medium' }) => ({
1748
1283
  : typography.fontSize.default),
1749
1284
  fontWeight: typography.fontWeight.medium,
1750
1285
  lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
1751
- color: semanticColors.typography.input.default,
1286
+ color: semanticColors.color.text.input,
1752
1287
  }));
1753
1288
  const HelperText$2 = styled('span')(({ theme, size = 'medium' }) => ({
1754
1289
  fontSize: theme.typography.pxToRem(size === 'xs'
@@ -1758,7 +1293,7 @@ const HelperText$2 = styled('span')(({ theme, size = 'medium' }) => ({
1758
1293
  : typography.fontSize.default),
1759
1294
  fontWeight: typography.fontWeight.regular,
1760
1295
  lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
1761
- color: semanticColors.typography.bodySecondary,
1296
+ color: semanticColors.color.text.secondary,
1762
1297
  }));
1763
1298
  // xs focus-ring radius — no matching design token (box corner comes from the icon)
1764
1299
  const FIGMA_XS_BORDER_RADIUS = 1;
@@ -1786,7 +1321,7 @@ const StyledCheckbox = styled(Checkbox, {
1786
1321
  height: config.size,
1787
1322
  padding: 0,
1788
1323
  marginTop: size === 'xs' ? 3 : 2,
1789
- color: semanticColors.border.strong,
1324
+ color: semanticColors.color.border.strong,
1790
1325
  borderRadius: config.borderRadius,
1791
1326
  flexShrink: 0,
1792
1327
  // Suppress MUI's grey hover background
@@ -1812,11 +1347,11 @@ const StyledCheckbox = styled(Checkbox, {
1812
1347
  cursor: 'not-allowed',
1813
1348
  },
1814
1349
  [`&.${checkboxClasses.disabled}:not(.${checkboxClasses.checked}):not(.${checkboxClasses.indeterminate})`]: {
1815
- color: semanticColors.border.primary,
1350
+ color: semanticColors.color.border.primary,
1816
1351
  },
1817
1352
  // Focus visible for keyboard navigation
1818
1353
  '&.Mui-focusVisible': {
1819
- outline: `2px solid ${semanticColors.border.focus}`,
1354
+ outline: `2px solid ${semanticColors.color.border.focus}`,
1820
1355
  outlineOffset: 2,
1821
1356
  borderRadius: config.borderRadius,
1822
1357
  },
@@ -1860,14 +1395,7 @@ const StyledCheckbox = styled(Checkbox, {
1860
1395
  */
1861
1396
  const ModCheckbox = ({ size = 'medium', label, helperText, disabled, icon, checkedIcon, indeterminateIcon, className, ...props }) => {
1862
1397
  // Identifies ModCheckbox instances to consumer stylesheets.
1863
- //
1864
- // `neo-checkbox` ships alongside for one major. Consumers select on these
1865
- // names from their own CSS, where nothing type-checks the string — moderne-ui
1866
- // has `'&:not(.neo-checkbox)'`, which on a bare rename would stop excluding
1867
- // anything and silently start overriding every checkbox. Remove the legacy
1868
- // name once consumers have migrated.
1869
- const ownClassNames = 'mod-checkbox neo-checkbox';
1870
- const combinedClassName = className ? `${ownClassNames} ${className}` : ownClassNames;
1398
+ const combinedClassName = className ? `mod-checkbox ${className}` : 'mod-checkbox';
1871
1399
  // Default icons (sized via CSS on the SVG); overridable per instance
1872
1400
  const defaultIcon = icon || jsx(Square, {});
1873
1401
  const defaultCheckedIcon = checkedIcon || jsx(SquareCheck, {});
@@ -1950,20 +1478,20 @@ const StyledButtonBase = styled(ButtonBase, {
1950
1478
  cursor: 'text',
1951
1479
  // Focus visible for keyboard navigation
1952
1480
  [`&.${buttonBaseClasses.focusVisible}`]: {
1953
- outline: `2px solid ${semanticColors.border.focus}`,
1481
+ outline: `2px solid ${semanticColors.color.border.focus}`,
1954
1482
  outlineOffset: 2,
1955
1483
  },
1956
1484
  };
1957
1485
  // Variant-specific styles
1958
1486
  const variantStyles = {
1959
1487
  outlined: {
1960
- backgroundColor: semanticColors.code.background,
1961
- color: semanticColors.typography.code.primary,
1488
+ backgroundColor: semanticColors.code.bg,
1489
+ color: semanticColors.color.text.code,
1962
1490
  border: 'none',
1963
1491
  },
1964
1492
  filled: {
1965
- backgroundColor: semanticColors.surfaces.tooltip,
1966
- color: semanticColors.typography.tooltip.default,
1493
+ backgroundColor: semanticColors.color.surface.tooltip,
1494
+ color: semanticColors.color.text.tooltip,
1967
1495
  border: 'none',
1968
1496
  },
1969
1497
  };
@@ -2005,15 +1533,15 @@ ModCodeSnippet.displayName = 'ModCodeSnippet';
2005
1533
  * they carry this surface themselves.
2006
1534
  */
2007
1535
  const panelSurfaceStyles = {
2008
- backgroundColor: semanticColors.surfaces.white,
1536
+ backgroundColor: semanticColors.color.surface.raised,
2009
1537
  };
2010
1538
  const getDataGridHeaderStyles = () => {
2011
1539
  return {
2012
1540
  // Header cell container styles - from Figma: bg, border, padding
2013
1541
  // Height is set via density-specific selectors in DataGrid.tsx
2014
1542
  [`& .${gridClasses.columnHeader}`]: {
2015
- backgroundColor: semanticColors.surfaces.dataGrid.header,
2016
- borderBottom: `1px solid ${semanticColors.border.primary}`,
1543
+ backgroundColor: semanticColors.color.surface.dataGrid.header,
1544
+ borderBottom: `1px solid ${semanticColors.color.border.primary}`,
2017
1545
  paddingTop: `${spacing.spacing_1_1_2}px`,
2018
1546
  paddingBottom: `${spacing.spacing_1_1_2}px`,
2019
1547
  paddingLeft: `${spacing.spacing_2}px`,
@@ -2023,8 +1551,8 @@ const getDataGridHeaderStyles = () => {
2023
1551
  // Style the filler element to match header
2024
1552
  // Height is set via density-specific selectors in DataGrid.tsx
2025
1553
  [`& .${gridClasses.filler}`]: {
2026
- backgroundColor: semanticColors.surfaces.dataGrid.header,
2027
- borderBottom: `1px solid ${semanticColors.border.primary}`,
1554
+ backgroundColor: semanticColors.color.surface.dataGrid.header,
1555
+ borderBottom: `1px solid ${semanticColors.color.border.primary}`,
2028
1556
  boxSizing: 'border-box',
2029
1557
  },
2030
1558
  // Style the default MUI column header title text to match Figma
@@ -2033,14 +1561,14 @@ const getDataGridHeaderStyles = () => {
2033
1561
  fontSize: typography.fontSize.sm,
2034
1562
  fontWeight: typography.fontWeight.semiBold, // Always semiBold (600)
2035
1563
  lineHeight: 'normal',
2036
- color: semanticColors.typography.bodySecondary, // #6b7280 by default
1564
+ color: semanticColors.color.text.secondary, // #6b7280 by default
2037
1565
  transition: 'color 0.2s',
2038
1566
  textOverflow: 'clip',
2039
1567
  whiteSpace: 'break-spaces',
2040
1568
  },
2041
1569
  // Change text color on hover
2042
1570
  [`& .${gridClasses.columnHeader}:hover .${gridClasses.columnHeaderTitle}`]: {
2043
- color: semanticColors.icons.default, // #1f2937 on hover
1571
+ color: semanticColors.color.icon.default, // #1f2937 on hover
2044
1572
  },
2045
1573
  // Style the checkbox in header to match design system (16x16 from Figma)
2046
1574
  [`& .${gridClasses.columnHeaderCheckbox}`]: {
@@ -2074,7 +1602,7 @@ const getDataGridHeaderStyles = () => {
2074
1602
  '& svg': {
2075
1603
  width: 16,
2076
1604
  height: 16,
2077
- color: semanticColors.icons.utility,
1605
+ color: semanticColors.color.icon.utility,
2078
1606
  },
2079
1607
  },
2080
1608
  },
@@ -2082,16 +1610,16 @@ const getDataGridHeaderStyles = () => {
2082
1610
  };
2083
1611
  const getDataGridRowStyles = () => ({
2084
1612
  [`& .${gridClasses.row}`]: {
2085
- backgroundColor: semanticColors.surfaces.dataGrid.default,
1613
+ backgroundColor: semanticColors.color.surface.dataGrid.default,
2086
1614
  },
2087
1615
  [`& .${gridClasses.row}:hover`]: {
2088
- backgroundColor: semanticColors.surfaces.dataGrid.hover,
1616
+ backgroundColor: semanticColors.color.surface.dataGrid.hover,
2089
1617
  },
2090
1618
  [`& .${gridClasses.row}.Mui-selected`]: {
2091
- backgroundColor: semanticColors.surfaces.dataGrid.selected,
1619
+ backgroundColor: semanticColors.color.surface.dataGrid.selected,
2092
1620
  },
2093
1621
  [`& .${gridClasses.row}.Mui-selected:hover`]: {
2094
- backgroundColor: semanticColors.surfaces.dataGrid.selectedHover,
1622
+ backgroundColor: semanticColors.color.surface.dataGrid.selectedHover,
2095
1623
  },
2096
1624
  });
2097
1625
 
@@ -2120,8 +1648,8 @@ const StyledSearchField = styled(TextField)(({ theme }) => ({
2120
1648
  height: spacing.spacing_5,
2121
1649
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
2122
1650
  borderRadius: borderRadius.input,
2123
- backgroundColor: semanticColors.input.background,
2124
- border: `1px solid ${semanticColors.border.primary}`,
1651
+ backgroundColor: semanticColors.input.bg,
1652
+ border: `1px solid ${semanticColors.color.border.primary}`,
2125
1653
  paddingTop: spacing.spacing_1,
2126
1654
  paddingBottom: spacing.spacing_1,
2127
1655
  paddingLeft: spacing.spacing_1_1_2,
@@ -2132,22 +1660,22 @@ const StyledSearchField = styled(TextField)(({ theme }) => ({
2132
1660
  },
2133
1661
  [`& .${inputBaseClasses.input}`]: {
2134
1662
  padding: 0,
2135
- color: semanticColors.typography.input.default,
1663
+ color: semanticColors.color.text.input,
2136
1664
  '&::placeholder': {
2137
- color: semanticColors.typography.input.placeholder,
1665
+ color: semanticColors.color.text.inputPlaceholder,
2138
1666
  opacity: 1,
2139
1667
  },
2140
1668
  },
2141
1669
  '&:hover': {
2142
- backgroundColor: semanticColors.input.hoverBackground,
1670
+ backgroundColor: semanticColors.input.bgHover,
2143
1671
  },
2144
1672
  [`&.${inputBaseClasses.focused}`]: {
2145
- backgroundColor: semanticColors.input.background,
2146
- borderColor: semanticColors.buttons.primary.default,
1673
+ backgroundColor: semanticColors.input.bg,
1674
+ borderColor: semanticColors.button.primary.bg,
2147
1675
  },
2148
1676
  },
2149
1677
  [`& .${inputAdornmentClasses.root}`]: {
2150
- color: semanticColors.icons.placeholder,
1678
+ color: semanticColors.color.icon.placeholder,
2151
1679
  '& svg': {
2152
1680
  width: 20,
2153
1681
  height: 20,
@@ -2170,14 +1698,14 @@ const MenuItemContent$1 = styled('div')(() => ({
2170
1698
  borderRadius: MENU_ITEM_BORDER_RADIUS,
2171
1699
  width: '100%',
2172
1700
  '&:hover': {
2173
- backgroundColor: semanticColors.surfaces.listHover,
1701
+ backgroundColor: semanticColors.color.surface.rowHover,
2174
1702
  },
2175
1703
  }));
2176
1704
  const MenuItemLabel = styled('span')(({ theme, fontWeight = 500 }) => ({
2177
1705
  fontSize: theme.typography.pxToRem(16),
2178
1706
  fontWeight,
2179
1707
  lineHeight: 1.5,
2180
- color: semanticColors.typography.body,
1708
+ color: semanticColors.color.text.primary,
2181
1709
  whiteSpace: 'nowrap',
2182
1710
  }));
2183
1711
  const DividerContainer = styled('div')(() => ({
@@ -2185,7 +1713,7 @@ const DividerContainer = styled('div')(() => ({
2185
1713
  paddingBottom: spacing.spacing_1_2,
2186
1714
  }));
2187
1715
  const StyledDivider$1 = styled(Divider)(() => ({
2188
- borderColor: semanticColors.border.primary,
1716
+ borderColor: semanticColors.color.border.primary,
2189
1717
  }));
2190
1718
  const FooterRow = styled(Box)(() => ({
2191
1719
  display: 'flex',
@@ -2197,16 +1725,16 @@ const FooterRow = styled(Box)(() => ({
2197
1725
  const ResetButton = styled(Button)(({ theme }) => ({
2198
1726
  fontSize: theme.typography.pxToRem(16),
2199
1727
  fontWeight: typography.fontWeight.regular,
2200
- color: semanticColors.buttons.primary.default,
1728
+ color: semanticColors.button.primary.bg,
2201
1729
  textTransform: 'none',
2202
1730
  padding: spacing.spacing_1,
2203
1731
  minWidth: 'auto',
2204
1732
  '&:hover': {
2205
1733
  backgroundColor: 'transparent',
2206
- color: semanticColors.typography.bodySecondary,
1734
+ color: semanticColors.color.text.secondary,
2207
1735
  },
2208
1736
  '&:disabled': {
2209
- color: semanticColors.typography.button.disabled,
1737
+ color: semanticColors.button.fgDisabled,
2210
1738
  },
2211
1739
  }));
2212
1740
  const ModDataGridColumnsPanel = ({ showSearch = false,
@@ -2270,7 +1798,7 @@ const StyledMenuItem = styled(MenuItem)(({ theme }) => ({
2270
1798
  minHeight: spacing.spacing_5,
2271
1799
  gap: spacing.spacing_2,
2272
1800
  borderRadius: 0,
2273
- color: semanticColors.icons.default,
1801
+ color: semanticColors.color.icon.default,
2274
1802
  textDecoration: 'none',
2275
1803
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
2276
1804
  fontWeight: typography.fontWeight.regular,
@@ -2279,19 +1807,19 @@ const StyledMenuItem = styled(MenuItem)(({ theme }) => ({
2279
1807
  duration: theme.transitions.duration.shortest,
2280
1808
  }),
2281
1809
  '&:hover': {
2282
- backgroundColor: semanticColors.surfaces.listHover,
1810
+ backgroundColor: semanticColors.color.surface.rowHover,
2283
1811
  },
2284
1812
  [`&.${menuItemClasses.selected}`]: {
2285
- backgroundColor: semanticColors.surfaces.listHover,
1813
+ backgroundColor: semanticColors.color.surface.rowHover,
2286
1814
  '&:hover': {
2287
- backgroundColor: semanticColors.surfaces.listHover,
1815
+ backgroundColor: semanticColors.color.surface.rowHover,
2288
1816
  },
2289
1817
  },
2290
1818
  [`&.${menuItemClasses.disabled}`]: {
2291
1819
  opacity: 0.5,
2292
1820
  },
2293
1821
  [`&.${menuItemClasses.focusVisible}`]: {
2294
- backgroundColor: semanticColors.surfaces.listHover,
1822
+ backgroundColor: semanticColors.color.surface.rowHover,
2295
1823
  },
2296
1824
  }));
2297
1825
  const MenuItemContent = styled('div')({
@@ -2306,7 +1834,7 @@ const IconWrapper$1 = styled('span')(({ theme }) => ({
2306
1834
  justifyContent: 'center',
2307
1835
  flexShrink: 0,
2308
1836
  fontSize: theme.typography.pxToRem(typography.fontSize.h4),
2309
- color: semanticColors.icons.default,
1837
+ color: semanticColors.color.icon.default,
2310
1838
  }));
2311
1839
  const LabelContainer$3 = styled('div')({
2312
1840
  flex: 1,
@@ -2316,24 +1844,24 @@ const LabelContainer$3 = styled('div')({
2316
1844
  minWidth: 0,
2317
1845
  });
2318
1846
  const Label$3 = styled('span')({
2319
- color: semanticColors.icons.default,
1847
+ color: semanticColors.color.icon.default,
2320
1848
  flexShrink: 0,
2321
1849
  });
2322
1850
  const SecondaryLabel = styled('span')({
2323
- color: semanticColors.typography.bodySecondary,
1851
+ color: semanticColors.color.text.secondary,
2324
1852
  fontWeight: typography.fontWeight.regular,
2325
1853
  flexShrink: 0,
2326
1854
  });
2327
1855
  const Shortcut = styled('span')(({ theme }) => ({
2328
1856
  fontSize: theme.typography.pxToRem(typography.fontSize.xs),
2329
1857
  fontWeight: typography.fontWeight.medium,
2330
- color: semanticColors.typography.bodySecondary,
1858
+ color: semanticColors.color.text.secondary,
2331
1859
  marginLeft: 'auto',
2332
1860
  flexShrink: 0,
2333
- border: `1px solid ${semanticColors.border.secondary}`,
1861
+ border: `1px solid ${semanticColors.color.border.primary}`,
2334
1862
  borderRadius: borderRadius.xS,
2335
1863
  padding: `${spacing.spacing_1_4}px ${spacing.spacing_3_4}px`,
2336
- backgroundColor: semanticColors.surfaces.white,
1864
+ backgroundColor: semanticColors.color.surface.raised,
2337
1865
  }));
2338
1866
  /**
2339
1867
  * ModMenuItem - Menu item component based on MUI MenuItem
@@ -2352,7 +1880,7 @@ const Shortcut = styled('span')(({ theme }) => ({
2352
1880
  * // Disabled state
2353
1881
  * <ModMenuItem disabled>Disabled item</ModMenuItem>
2354
1882
  *
2355
- * // As an anchor — middle-click/right-click open in a new tab
1883
+ * // As an anchor — `href` alone is enough
2356
1884
  * <ModMenuItem href="/api-explorer">API explorer</ModMenuItem>
2357
1885
  *
2358
1886
  * // External link
@@ -2360,12 +1888,17 @@ const Shortcut = styled('span')(({ theme }) => ({
2360
1888
  * Documentation
2361
1889
  * </ModMenuItem>
2362
1890
  *
2363
- * // Client-side routing (Next.js)
1891
+ * // Client-side routing (Next.js) — an explicit `component` wins over the anchor default
2364
1892
  * <ModMenuItem component={NextLink} href="/api-explorer">API explorer</ModMenuItem>
2365
1893
  * ```
2366
1894
  */
2367
- function ModMenuItem({ icon, shortcut, secondaryText, children, ...rest }) {
2368
- return (jsx(StyledMenuItem, { ...rest, children: jsxs(MenuItemContent, { children: [icon && jsx(IconWrapper$1, { children: icon }), jsxs(LabelContainer$3, { children: [jsx(Label$3, { children: children }), secondaryText && jsx(SecondaryLabel, { children: secondaryText })] }), shortcut && jsx(Shortcut, { children: shortcut })] }) }));
1895
+ function ModMenuItem({ icon, shortcut, secondaryText, children, component, href, ...rest }) {
1896
+ // MUI roots MenuItem at `li`, and ButtonBase only swaps in a link component when the
1897
+ // root is `button` (as of @mui/material 9.2) — so an `href` on the default root lands as
1898
+ // an attribute on the `<li>` and never navigates (#722). Root at an anchor instead,
1899
+ // unless the caller named a component (e.g. a router link) themselves.
1900
+ const rootProps = { ...rest, href, component: component ?? (href ? 'a' : undefined) };
1901
+ return (jsx(StyledMenuItem, { ...rootProps, children: jsxs(MenuItemContent, { children: [icon && jsx(IconWrapper$1, { children: icon }), jsxs(LabelContainer$3, { children: [jsx(Label$3, { children: children }), secondaryText && jsx(SecondaryLabel, { children: secondaryText })] }), shortcut && jsx(Shortcut, { children: shortcut })] }) }));
2369
1902
  }
2370
1903
  ModMenuItem.displayName = 'ModMenuItem';
2371
1904
 
@@ -2373,22 +1906,22 @@ ModMenuItem.displayName = 'ModMenuItem';
2373
1906
  * Custom chevron icon for select
2374
1907
  * Must accept props from MUI Select to work correctly
2375
1908
  */
2376
- const ChevronDownIcon = (props) => (jsx(ChevronDown, { ...props, size: spacing.spacing_2_1_2, color: semanticColors.typography.input.default, style: { ...props.style } }));
1909
+ const ChevronDownIcon = (props) => (jsx(ChevronDown, { ...props, size: spacing.spacing_2_1_2, color: semanticColors.color.text.input, style: { ...props.style } }));
2377
1910
  /**
2378
1911
  * Styled Select component with design system styling
2379
1912
  */
2380
1913
  const StyledSelect = styled(MuiSelect)({
2381
1914
  minHeight: spacing.spacing_5,
2382
- backgroundColor: semanticColors.input.background,
2383
- border: `1px solid ${semanticColors.border.primary}`,
1915
+ backgroundColor: semanticColors.input.bg,
1916
+ border: `1px solid ${semanticColors.color.border.primary}`,
2384
1917
  borderRadius: `${borderRadius.input}px`,
2385
1918
  '&:hover': {
2386
- backgroundColor: semanticColors.input.hoverBackground,
2387
- borderColor: semanticColors.border.primary,
1919
+ backgroundColor: semanticColors.input.bgHover,
1920
+ borderColor: semanticColors.color.border.primary,
2388
1921
  },
2389
1922
  '&.Mui-focused': {
2390
- backgroundColor: semanticColors.input.background,
2391
- borderColor: semanticColors.buttons.primary.default,
1923
+ backgroundColor: semanticColors.input.bg,
1924
+ borderColor: semanticColors.button.primary.bg,
2392
1925
  },
2393
1926
  '&::before': {
2394
1927
  display: 'none',
@@ -2403,7 +1936,7 @@ const StyledSelect = styled(MuiSelect)({
2403
1936
  paddingRight: spacing.spacing_5,
2404
1937
  fontSize: typography.fontSize.sm,
2405
1938
  fontWeight: typography.fontWeight.regular,
2406
- color: semanticColors.typography.input.default,
1939
+ color: semanticColors.color.text.input,
2407
1940
  },
2408
1941
  [`& .${selectClasses.icon}`]: {
2409
1942
  right: spacing.spacing_1_1_2,
@@ -2425,37 +1958,34 @@ const StyledSelect = styled(MuiSelect)({
2425
1958
  * </ModSelect>
2426
1959
  * ```
2427
1960
  */
2428
- const ModSelect = (props) => {
2429
- const paperSlotProps = props.MenuProps?.slotProps?.paper;
2430
- const incomingPaperSx = typeof paperSlotProps === 'function' ? undefined : paperSlotProps?.sx;
2431
- return (jsx(StyledSelect, { ...props, IconComponent: ChevronDownIcon, variant: "standard", MenuProps: {
2432
- ...props.MenuProps,
2433
- slotProps: {
2434
- ...props.MenuProps?.slotProps,
2435
- paper: {
2436
- sx: {
2437
- backgroundColor: semanticColors.surfaces.white,
2438
- borderRadius: `${borderRadius.s}px`,
2439
- border: `1px solid ${semanticColors.border.primary}`,
2440
- boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
2441
- marginTop: 1,
2442
- ...incomingPaperSx,
2443
- },
1961
+ const ModSelect = (props) => (jsx(StyledSelect, { ...props, IconComponent: ChevronDownIcon, variant: "standard", MenuProps: {
1962
+ ...props.MenuProps,
1963
+ slotProps: {
1964
+ ...props.MenuProps?.slotProps,
1965
+ // Caller wins, caller `sx` last — and unlike a spread, handles `sx` arrays and the
1966
+ // callback form of `slotProps.paper`.
1967
+ paper: mergeSlotProps(props.MenuProps?.slotProps?.paper, {
1968
+ sx: {
1969
+ backgroundColor: semanticColors.color.surface.raised,
1970
+ borderRadius: `${borderRadius.s}px`,
1971
+ border: `1px solid ${semanticColors.color.border.primary}`,
1972
+ boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
1973
+ marginTop: 1,
2444
1974
  },
2445
- },
2446
- } }));
2447
- };
1975
+ }),
1976
+ },
1977
+ } }));
2448
1978
  ModSelect.displayName = 'ModSelect';
2449
1979
 
2450
1980
  /**
2451
1981
  * Icon components for DataGrid filter panel slots
2452
1982
  * These must be passed to the DataGrid's slots prop
2453
1983
  */
2454
- const ModDataGridFilterPanelAddIcon = () => (jsx(Plus, { size: spacing.spacing_2, color: semanticColors.buttons.tertiary.default }));
1984
+ const ModDataGridFilterPanelAddIcon = () => (jsx(Plus, { size: spacing.spacing_2, color: semanticColors.button.tertiary.fg }));
2455
1985
  ModDataGridFilterPanelAddIcon.displayName = 'ModDataGridFilterPanelAddIcon';
2456
- const ModDataGridFilterPanelDeleteIcon = () => (jsx(X, { size: spacing.spacing_2_1_2, color: semanticColors.icons.default }));
1986
+ const ModDataGridFilterPanelDeleteIcon = () => (jsx(X, { size: spacing.spacing_2_1_2, color: semanticColors.color.icon.default }));
2457
1987
  ModDataGridFilterPanelDeleteIcon.displayName = 'ModDataGridFilterPanelDeleteIcon';
2458
- const ModDataGridFilterPanelRemoveAllIcon = () => (jsx(Trash2, { size: spacing.spacing_2, color: semanticColors.buttons.tertiary.default }));
1988
+ const ModDataGridFilterPanelRemoveAllIcon = () => (jsx(Trash2, { size: spacing.spacing_2, color: semanticColors.button.tertiary.fg }));
2459
1989
  ModDataGridFilterPanelRemoveAllIcon.displayName = 'ModDataGridFilterPanelRemoveAllIcon';
2460
1990
  /**
2461
1991
  * Base styled GridFilterPanel with design system styling
@@ -2504,20 +2034,20 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
2504
2034
  [`& .${gridClasses.filterForm} .${inputBaseClasses.root}`]: {
2505
2035
  position: 'relative',
2506
2036
  minHeight: spacing.spacing_5,
2507
- backgroundColor: semanticColors.input.background,
2508
- border: `1px solid ${semanticColors.border.primary}`,
2037
+ backgroundColor: semanticColors.input.bg,
2038
+ border: `1px solid ${semanticColors.color.border.primary}`,
2509
2039
  borderRadius: `${borderRadius.input}px`,
2510
2040
  fontSize: typography.fontSize.default,
2511
2041
  fontWeight: typography.fontWeight.regular,
2512
- color: semanticColors.typography.input.default,
2042
+ color: semanticColors.color.text.input,
2513
2043
  },
2514
2044
  [`& .${gridClasses.filterForm} .${inputBaseClasses.root}:hover`]: {
2515
- backgroundColor: semanticColors.input.hoverBackground,
2516
- borderColor: semanticColors.border.primary,
2045
+ backgroundColor: semanticColors.input.bgHover,
2046
+ borderColor: semanticColors.color.border.primary,
2517
2047
  },
2518
2048
  [`& .${gridClasses.filterForm} .${inputBaseClasses.root}.${inputBaseClasses.focused}`]: {
2519
- backgroundColor: semanticColors.input.background,
2520
- borderColor: semanticColors.border.primary,
2049
+ backgroundColor: semanticColors.input.bg,
2050
+ borderColor: semanticColors.color.border.primary,
2521
2051
  },
2522
2052
  [`& .${gridClasses.filterForm} .${inputBaseClasses.root}::before`]: {
2523
2053
  display: 'none',
@@ -2532,9 +2062,9 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
2532
2062
  paddingRight: spacing.spacing_1_1_2,
2533
2063
  fontSize: typography.fontSize.default,
2534
2064
  fontWeight: typography.fontWeight.regular,
2535
- color: semanticColors.typography.input.default,
2065
+ color: semanticColors.color.text.input,
2536
2066
  '&::placeholder': {
2537
- color: semanticColors.typography.input.placeholder,
2067
+ color: semanticColors.color.text.inputPlaceholder,
2538
2068
  opacity: 1,
2539
2069
  },
2540
2070
  },
@@ -2549,7 +2079,7 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
2549
2079
  [`& .${gridClasses.filterForm} .${formLabelClasses.root}`]: {
2550
2080
  fontSize: typography.fontSize.sm,
2551
2081
  fontWeight: typography.fontWeight.medium,
2552
- color: semanticColors.typography.input.label,
2082
+ color: semanticColors.color.text.inputLabel,
2553
2083
  marginBottom: spacing.spacing_1_2,
2554
2084
  position: 'static',
2555
2085
  transform: 'none',
@@ -2557,16 +2087,20 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
2557
2087
  [`& .${gridClasses.filterForm} .${inputLabelClasses.root}`]: {
2558
2088
  fontSize: typography.fontSize.sm,
2559
2089
  fontWeight: typography.fontWeight.medium,
2560
- color: semanticColors.typography.input.label,
2090
+ color: semanticColors.color.text.inputLabel,
2561
2091
  marginBottom: spacing.spacing_1_2,
2562
2092
  position: 'static',
2563
2093
  transform: 'none',
2564
2094
  },
2565
2095
  [`& .${gridClasses.filterForm} .${formLabelClasses.root}.${formLabelClasses.focused}`]: {
2566
- color: semanticColors.typography.input.label,
2096
+ color: semanticColors.color.text.inputLabel,
2567
2097
  },
2568
2098
  [`& .${gridClasses.filterForm} .${inputLabelClasses.root}.${inputLabelClasses.focused}`]: {
2569
- color: semanticColors.typography.input.label,
2099
+ color: semanticColors.color.text.inputLabel,
2100
+ },
2101
+ // Reclaim the 16px MUI's standard Input reserves for a floating label; these sit statically.
2102
+ [`& .${gridClasses.filterForm} label + .${inputBaseClasses.root}`]: {
2103
+ marginTop: 0,
2570
2104
  },
2571
2105
  // Remove fieldset/legend
2572
2106
  '& fieldset': {
@@ -2590,13 +2124,13 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
2590
2124
  minHeight: 'auto',
2591
2125
  height: 'auto',
2592
2126
  gap: spacing.spacing_1_2,
2593
- backgroundColor: semanticColors.buttons.secondary.defaultBackground,
2594
- color: semanticColors.typography.input.default,
2595
- border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
2127
+ backgroundColor: semanticColors.button.secondary.bg,
2128
+ color: semanticColors.color.text.input,
2129
+ border: `1px solid ${semanticColors.button.secondary.border}`,
2596
2130
  },
2597
2131
  [`& .${gridClasses.panelFooter} .${buttonClasses.root}:first-child:hover`]: {
2598
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
2599
- borderColor: semanticColors.buttons.secondary.defaultBorder,
2132
+ backgroundColor: semanticColors.button.secondary.bgHover,
2133
+ borderColor: semanticColors.button.secondary.border,
2600
2134
  },
2601
2135
  // Clear all button (second button) - styled to match ModButton link variant
2602
2136
  [`& .${gridClasses.panelFooter} .${buttonClasses.root}:nth-child(2)`]: {
@@ -2608,27 +2142,88 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
2608
2142
  textTransform: 'none',
2609
2143
  minHeight: 'auto',
2610
2144
  backgroundColor: 'transparent',
2611
- color: semanticColors.buttons.tertiary.default,
2145
+ color: semanticColors.button.tertiary.fg,
2612
2146
  border: 'none',
2613
2147
  [`& .${buttonClasses.startIcon}`]: {
2614
2148
  display: 'none', // Hide the trash icon
2615
2149
  },
2616
2150
  '&:hover': {
2617
2151
  backgroundColor: 'transparent',
2618
- color: semanticColors.buttons.tertiary.hover,
2152
+ color: semanticColors.button.tertiary.fgHover,
2619
2153
  },
2620
2154
  },
2621
2155
  // Icon buttons (delete/trash icon)
2622
2156
  [`& .${gridClasses.filterForm} .${iconButtonClasses.root}`]: {
2623
2157
  width: spacing.spacing_5_1_2,
2624
2158
  height: spacing.spacing_5_1_2,
2625
- color: semanticColors.icons.default,
2159
+ color: semanticColors.color.icon.default,
2626
2160
  },
2627
2161
  [`& .${gridClasses.filterForm} .${iconButtonClasses.root}:hover`]: {
2628
- backgroundColor: semanticColors.input.hoverBackground,
2162
+ backgroundColor: semanticColors.input.bgHover,
2629
2163
  },
2630
2164
  });
2631
2165
  StyledGridFilterPanel.displayName = 'StyledGridFilterPanel';
2166
+ /**
2167
+ * ModDataGridSelect - ModSelect adapted to the DataGrid `baseSelect` slot contract.
2168
+ *
2169
+ * Kept structurally parallel to MUI's own `BaseSelect` (`@mui/x-data-grid/material`) so the two
2170
+ * can be diffed on upgrade.
2171
+ *
2172
+ * @example
2173
+ * ```tsx
2174
+ * <ModDataGrid rows={rows} columns={columns} slots={{ baseSelect: ModDataGridSelect }} />
2175
+ * ```
2176
+ */
2177
+ const ModDataGridSelect = forwardRef(function ModDataGridSelect({ id, label, labelId, disabled, fullWidth, size, style, slotProps, material, onChange, onClose, onKeyDown, ...rest }, ref) {
2178
+ const theme = useTheme();
2179
+ const hasLabel = label !== undefined;
2180
+ // The grid omits `size` in edit cells, where MUI's adapter falls back to the theme's TextField
2181
+ // default — without this the select renders medium beside small fields.
2182
+ const computedSize = size ?? theme.components?.MuiTextField?.defaultProps?.size;
2183
+ return (jsxs(FormControl
2184
+ // Bridges Ref<HTMLElement> to FormControl's Ref<HTMLDivElement>; neither direct form typechecks.
2185
+ , {
2186
+ // Bridges Ref<HTMLElement> to FormControl's Ref<HTMLDivElement>; neither direct form typechecks.
2187
+ ref: useForkRef(ref), disabled: disabled, fullWidth: fullWidth, size: computedSize, style: style, children: [hasLabel && (jsx(MuiInputLabel, { id: labelId, htmlFor: id, variant: "standard", shrink: true, children: label })), jsx(ModSelect, { ...rest, id: id, label: label, labelId: hasLabel ? labelId : undefined, size: computedSize, displayEmpty: true, inputProps: slotProps?.htmlInput,
2188
+ // The grid types this as a ChangeEventHandler; MUI emits a SelectChangeEvent. MUI's own
2189
+ // adapter forwards it unchanged, so the divergence is only in the type.
2190
+ onChange: onChange, MenuProps: {
2191
+ // Must stay absent when absent: MUI spreads MenuProps over its own `onClose: handleClose`,
2192
+ // so an explicit `undefined` stops Escape and backdrop click closing the menu.
2193
+ ...(onClose && { onClose }),
2194
+ slotProps: { paper: { onKeyDown } },
2195
+ }, ...material })] }));
2196
+ });
2197
+ /**
2198
+ * ModDataGridFilterPanel - MUI GridFilterPanel with design system styling and Lucide icons
2199
+ *
2200
+ * A styled version of MUI's GridFilterPanel that applies design system tokens.
2201
+ * The per-row delete icon uses Lucide Trash2 internally.
2202
+ *
2203
+ * For footer button icons ("Add filter" and "Remove all"), you must also pass the icon components
2204
+ * to the DataGrid's slots prop.
2205
+ *
2206
+ * @example
2207
+ * ```tsx
2208
+ * import {
2209
+ * ModDataGridFilterPanel,
2210
+ * FilterPanelAddIcon,
2211
+ * FilterPanelDeleteIcon,
2212
+ * FilterPanelRemoveAllIcon
2213
+ * } from '@moderneinc/design-system-components'
2214
+ *
2215
+ * <DataGridPro
2216
+ * rows={rows}
2217
+ * columns={columns}
2218
+ * slots={{
2219
+ * filterPanel: ModDataGridFilterPanel,
2220
+ * filterPanelAddIcon: FilterPanelAddIcon,
2221
+ * filterPanelDeleteIcon: FilterPanelDeleteIcon,
2222
+ * filterPanelRemoveAllIcon: FilterPanelRemoveAllIcon,
2223
+ * }}
2224
+ * />
2225
+ * ```
2226
+ */
2632
2227
  const ModDataGridFilterPanel = (props) => {
2633
2228
  return jsx(StyledGridFilterPanel, { ...props });
2634
2229
  };
@@ -2640,13 +2235,13 @@ ModDataGridFilterPanel.displayName = 'ModDataGridFilterPanel';
2640
2235
  * Use these with DataGrid's slots API to replace default sort indicators.
2641
2236
  */
2642
2237
  function SortedDescendingIcon() {
2643
- return jsx(ArrowDown, { size: 16, color: semanticColors.icons.utility });
2238
+ return jsx(ArrowDown, { size: 16, color: semanticColors.color.icon.utility });
2644
2239
  }
2645
2240
  function SortedAscendingIcon() {
2646
- return jsx(ArrowUp, { size: 16, color: semanticColors.icons.utility });
2241
+ return jsx(ArrowUp, { size: 16, color: semanticColors.color.icon.utility });
2647
2242
  }
2648
2243
  function UnsortedIcon() {
2649
- return jsx(ChevronsUpDown, { size: 16, color: semanticColors.icons.utility });
2244
+ return jsx(ChevronsUpDown, { size: 16, color: semanticColors.color.icon.utility });
2650
2245
  }
2651
2246
 
2652
2247
  /**
@@ -2657,7 +2252,7 @@ function UnsortedIcon() {
2657
2252
  */
2658
2253
  const ModGridPanel = styled(GridPanel)({
2659
2254
  [`& .${gridPanelClasses.paper}`]: {
2660
- backgroundColor: semanticColors.surfaces.white,
2255
+ backgroundColor: semanticColors.color.surface.raised,
2661
2256
  },
2662
2257
  });
2663
2258
  /**
@@ -2733,27 +2328,27 @@ function ModDataGrid({ autoHeight = false, toolbar, slots, sx, density = 'standa
2733
2328
  // See: https://github.com/mui/mui-x/issues/20107
2734
2329
  // This must be set to prevent scroll shadow artifacts
2735
2330
  [`& .${gridClasses.main}`]: {
2736
- backgroundColor: semanticColors.surfaces.dataGrid.background,
2331
+ backgroundColor: semanticColors.color.surface.dataGrid.default,
2737
2332
  },
2738
2333
  // White background for empty/loading overlays
2739
2334
  [`& .${gridClasses.overlay}`]: {
2740
- backgroundColor: semanticColors.surfaces.dataGrid.background,
2335
+ backgroundColor: semanticColors.color.surface.dataGrid.default,
2741
2336
  },
2742
2337
  // The root keeps MUI's background.paper (#fff), which the note above
2743
2338
  // requires us to leave alone. Everything outside `main` therefore showed
2744
2339
  // white under [data-theme="dark"] — the footer, and the filler strips
2745
2340
  // beyond the last column and next to the scrollbar.
2746
2341
  [`& .${gridClasses.footerContainer}`]: {
2747
- backgroundColor: semanticColors.surfaces.dataGrid.background,
2342
+ backgroundColor: semanticColors.color.surface.dataGrid.default,
2748
2343
  },
2749
2344
  // `&&` doubles specificity: MUI paints the filler strips itself, so a
2750
2345
  // single-class rule loses to its own.
2751
2346
  [`&& .${gridClasses.filler}, && .${gridClasses.scrollbarFiller}`]: {
2752
- backgroundColor: semanticColors.surfaces.dataGrid.background,
2347
+ backgroundColor: semanticColors.color.surface.dataGrid.default,
2753
2348
  },
2754
2349
  ...getDataGridHeaderStyles(),
2755
2350
  ...getDataGridRowStyles(),
2756
- border: `1px solid ${semanticColors.border.secondary}`,
2351
+ border: `1px solid ${semanticColors.color.border.primary}`,
2757
2352
  // Target `& svg` (not `.MuiSvgIcon-root`) to match the lucide icons
2758
2353
  // ModCheckbox renders, mirroring the header rule below.
2759
2354
  // flexShrink: 0 stops the icon collapsing to 0 width when the checkbox
@@ -2808,7 +2403,7 @@ ModDataGrid.displayName = 'ModDataGrid';
2808
2403
  * ```
2809
2404
  */
2810
2405
  function ModDataGridColumnsButton() {
2811
- return (jsx(ColumnsPanelTrigger, { render: jsx(ToolbarButton, { render: jsxs(ModButton, { variant: "secondary", size: "small", children: [jsx(Columns3, { size: 16, color: semanticColors.buttons.primary.default }), "Columns"] }) }) }));
2406
+ return (jsx(ColumnsPanelTrigger, { render: jsx(ToolbarButton, { render: jsxs(ModButton, { variant: "secondary", size: "small", children: [jsx(Columns3, { size: 16, color: semanticColors.button.primary.bg }), "Columns"] }) }) }));
2812
2407
  }
2813
2408
  ModDataGridColumnsButton.displayName = 'ModDataGridColumnsButton';
2814
2409
 
@@ -2834,69 +2429,69 @@ const sizeStyles$1 = {
2834
2429
  };
2835
2430
  const outlinedColorStyles = {
2836
2431
  default: {
2837
- backgroundColor: semanticColors.status.neutral.light,
2838
- color: semanticColors.status.neutral.dark,
2839
- borderColor: semanticColors.status.neutral.transparent,
2432
+ backgroundColor: semanticColors.color.status.neutral.bg,
2433
+ color: semanticColors.color.status.neutral.fg,
2434
+ borderColor: semanticColors.color.status.neutral.tint,
2840
2435
  },
2841
2436
  error: {
2842
- backgroundColor: semanticColors.status.error.light,
2843
- color: semanticColors.status.error.dark,
2844
- borderColor: semanticColors.status.error.transparent,
2437
+ backgroundColor: semanticColors.color.status.error.bg,
2438
+ color: semanticColors.color.status.error.fg,
2439
+ borderColor: semanticColors.color.status.error.tint,
2845
2440
  },
2846
2441
  warning: {
2847
- backgroundColor: semanticColors.status.warning.light,
2848
- color: semanticColors.status.warning.dark,
2849
- borderColor: semanticColors.status.warning.transparent,
2442
+ backgroundColor: semanticColors.color.status.warning.bg,
2443
+ color: semanticColors.color.status.warning.fg,
2444
+ borderColor: semanticColors.color.status.warning.tint,
2850
2445
  },
2851
2446
  success: {
2852
- backgroundColor: semanticColors.status.success.light,
2853
- color: semanticColors.status.success.dark,
2854
- borderColor: semanticColors.status.success.transparent,
2447
+ backgroundColor: semanticColors.color.status.success.bg,
2448
+ color: semanticColors.color.status.success.fg,
2449
+ borderColor: semanticColors.color.status.success.tint,
2855
2450
  },
2856
2451
  info: {
2857
- backgroundColor: semanticColors.status.info.light,
2858
- color: semanticColors.status.info.dark,
2859
- borderColor: semanticColors.status.info.transparent,
2452
+ backgroundColor: semanticColors.color.status.info.bg,
2453
+ color: semanticColors.color.status.info.fg,
2454
+ borderColor: semanticColors.color.status.info.tint,
2860
2455
  },
2861
2456
  violet: {
2862
- backgroundColor: semanticColors.status.active.light,
2863
- color: semanticColors.status.active.dark,
2864
- borderColor: semanticColors.status.active.transparent,
2457
+ backgroundColor: semanticColors.color.status.active.bg,
2458
+ color: semanticColors.color.status.active.fg,
2459
+ borderColor: semanticColors.color.status.active.tint,
2865
2460
  },
2866
2461
  beta: {
2867
2462
  backgroundColor: 'transparent',
2868
- color: semanticColors.typography.bodySecondary,
2463
+ color: semanticColors.color.text.secondary,
2869
2464
  borderColor: 'transparent',
2870
2465
  },
2871
2466
  };
2872
2467
  const filledColorStyles = {
2873
2468
  default: {
2874
- backgroundColor: semanticColors.status.neutral.dark,
2875
- color: semanticColors.status.neutral.light,
2469
+ backgroundColor: semanticColors.color.status.neutral.fg,
2470
+ color: semanticColors.color.status.neutral.bg,
2876
2471
  },
2877
2472
  error: {
2878
- backgroundColor: semanticColors.status.error.dark,
2879
- color: semanticColors.status.error.light,
2473
+ backgroundColor: semanticColors.color.status.error.fg,
2474
+ color: semanticColors.color.status.error.bg,
2880
2475
  },
2881
2476
  warning: {
2882
- backgroundColor: semanticColors.status.warning.dark,
2883
- color: semanticColors.status.warning.light,
2477
+ backgroundColor: semanticColors.color.status.warning.fg,
2478
+ color: semanticColors.color.status.warning.bg,
2884
2479
  },
2885
2480
  success: {
2886
- backgroundColor: semanticColors.status.success.dark,
2887
- color: semanticColors.status.success.light,
2481
+ backgroundColor: semanticColors.color.status.success.fg,
2482
+ color: semanticColors.color.status.success.bg,
2888
2483
  },
2889
2484
  info: {
2890
- backgroundColor: semanticColors.status.info.dark,
2891
- color: semanticColors.status.info.light,
2485
+ backgroundColor: semanticColors.color.status.info.fg,
2486
+ color: semanticColors.color.status.info.bg,
2892
2487
  },
2893
2488
  violet: {
2894
- backgroundColor: semanticColors.status.active.dark,
2895
- color: semanticColors.status.active.light,
2489
+ backgroundColor: semanticColors.color.status.active.fg,
2490
+ color: semanticColors.color.status.active.bg,
2896
2491
  },
2897
2492
  beta: {
2898
2493
  backgroundColor: 'transparent',
2899
- color: semanticColors.typography.bodySecondary,
2494
+ color: semanticColors.color.text.secondary,
2900
2495
  },
2901
2496
  };
2902
2497
  const StyledChip$2 = styled(Chip, {
@@ -2950,7 +2545,7 @@ function ModDataGridFiltersButton() {
2950
2545
  const filterModel = useGridSelector(apiRef, gridFilterModelSelector);
2951
2546
  const activeFilters = filterModel.items.filter(item => item.value != null && item.value !== '');
2952
2547
  const filterCount = activeFilters.length;
2953
- return (jsx(FilterPanelTrigger, { render: jsx(ToolbarButton, { render: jsxs(ModButton, { variant: "secondary", size: "small", children: [jsx(ListFilter, { size: 16, color: semanticColors.buttons.primary.default }), "Filters", filterCount > 0 && (jsx(ModTag, { size: "medium", variant: "filled", intent: "info", label: String(filterCount) }))] }) }) }));
2548
+ return (jsx(FilterPanelTrigger, { render: jsx(ToolbarButton, { render: jsxs(ModButton, { variant: "secondary", size: "small", children: [jsx(ListFilter, { size: 16, color: semanticColors.button.primary.bg }), "Filters", filterCount > 0 && (jsx(ModTag, { size: "medium", variant: "filled", intent: "info", label: String(filterCount) }))] }) }) }));
2954
2549
  }
2955
2550
  ModDataGridFiltersButton.displayName = 'ModDataGridFiltersButton';
2956
2551
 
@@ -2985,14 +2580,14 @@ const LabelText$1 = styled('p')({
2985
2580
  fontSize: typography.fontSize.sm,
2986
2581
  fontWeight: typography.fontWeight.semiBold, // Always semiBold (600)
2987
2582
  lineHeight: 'normal',
2988
- color: semanticColors.typography.bodySecondary, // #6b7280 by default
2583
+ color: semanticColors.color.text.secondary, // #6b7280 by default
2989
2584
  whiteSpace: 'nowrap',
2990
2585
  margin: 0,
2991
2586
  padding: 0,
2992
2587
  transition: 'color 0.2s',
2993
2588
  // Hover state - changes to primary text color
2994
2589
  '&:hover': {
2995
- color: semanticColors.icons.default, // #1f2937 on hover
2590
+ color: semanticColors.color.icon.default, // #1f2937 on hover
2996
2591
  },
2997
2592
  });
2998
2593
  const IconWrapper = styled('div')({
@@ -3005,476 +2600,11 @@ const IconWrapper = styled('div')({
3005
2600
  '& svg': {
3006
2601
  width: 16,
3007
2602
  height: 16,
3008
- color: semanticColors.icons.utility,
2603
+ color: semanticColors.color.icon.utility,
3009
2604
  },
3010
2605
  });
3011
2606
  function ModDataGridHeaderLabel({ children, helpTooltip, className, }) {
3012
- return (jsxs(LabelContainer$2, { className: className, "data-mod-header-label": true, children: [children && jsx(LabelText$1, { children: children }), helpTooltip && (jsx(Tooltip, { title: helpTooltip, placement: "top", children: jsx(IconWrapper, { children: jsx(CircleQuestionMark, {}) }) }))] }));
3013
- }
3014
-
3015
- /**
3016
- * @module constants
3017
- * @summary Useful constants
3018
- * @description
3019
- * Collection of useful date constants.
3020
- *
3021
- * The constants could be imported from `date-fns/constants`:
3022
- *
3023
- * ```ts
3024
- * import { maxTime, minTime } from "./constants/date-fns/constants";
3025
- *
3026
- * function isAllowedTime(time) {
3027
- * return time <= maxTime && time >= minTime;
3028
- * }
3029
- * ```
3030
- */
3031
-
3032
-
3033
- /**
3034
- * @constant
3035
- * @name constructFromSymbol
3036
- * @summary Symbol enabling Date extensions to inherit properties from the reference date.
3037
- *
3038
- * The symbol is used to enable the `constructFrom` function to construct a date
3039
- * using a reference date and a value. It allows to transfer extra properties
3040
- * from the reference date to the new date. It's useful for extensions like
3041
- * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as
3042
- * a constructor argument.
3043
- */
3044
- const constructFromSymbol = Symbol.for("constructDateFrom");
3045
-
3046
- /**
3047
- * @name constructFrom
3048
- * @category Generic Helpers
3049
- * @summary Constructs a date using the reference date and the value
3050
- *
3051
- * @description
3052
- * The function constructs a new date using the constructor from the reference
3053
- * date and the given value. It helps to build generic functions that accept
3054
- * date extensions.
3055
- *
3056
- * It defaults to `Date` if the passed reference date is a number or a string.
3057
- *
3058
- * Starting from v3.7.0, it allows to construct a date using `[Symbol.for("constructDateFrom")]`
3059
- * enabling to transfer extra properties from the reference date to the new date.
3060
- * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)
3061
- * that accept a time zone as a constructor argument.
3062
- *
3063
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3064
- *
3065
- * @param date - The reference date to take constructor from
3066
- * @param value - The value to create the date
3067
- *
3068
- * @returns Date initialized using the given date and value
3069
- *
3070
- * @example
3071
- * import { constructFrom } from "./constructFrom/date-fns";
3072
- *
3073
- * // A function that clones a date preserving the original type
3074
- * function cloneDate<DateType extends Date>(date: DateType): DateType {
3075
- * return constructFrom(
3076
- * date, // Use constructor from the given date
3077
- * date.getTime() // Use the date value to create a new date
3078
- * );
3079
- * }
3080
- */
3081
- function constructFrom(date, value) {
3082
- if (typeof date === "function") return date(value);
3083
-
3084
- if (date && typeof date === "object" && constructFromSymbol in date)
3085
- return date[constructFromSymbol](value);
3086
-
3087
- if (date instanceof Date) return new date.constructor(value);
3088
-
3089
- return new Date(value);
3090
- }
3091
-
3092
- /**
3093
- * @name toDate
3094
- * @category Common Helpers
3095
- * @summary Convert the given argument to an instance of Date.
3096
- *
3097
- * @description
3098
- * Convert the given argument to an instance of Date.
3099
- *
3100
- * If the argument is an instance of Date, the function returns its clone.
3101
- *
3102
- * If the argument is a number, it is treated as a timestamp.
3103
- *
3104
- * If the argument is none of the above, the function returns Invalid Date.
3105
- *
3106
- * Starting from v3.7.0, it clones a date using `[Symbol.for("constructDateFrom")]`
3107
- * enabling to transfer extra properties from the reference date to the new date.
3108
- * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)
3109
- * that accept a time zone as a constructor argument.
3110
- *
3111
- * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.
3112
- *
3113
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3114
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3115
- *
3116
- * @param argument - The value to convert
3117
- *
3118
- * @returns The parsed date in the local time zone
3119
- *
3120
- * @example
3121
- * // Clone the date:
3122
- * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))
3123
- * //=> Tue Feb 11 2014 11:30:30
3124
- *
3125
- * @example
3126
- * // Convert the timestamp to date:
3127
- * const result = toDate(1392098430000)
3128
- * //=> Tue Feb 11 2014 11:30:30
3129
- */
3130
- function toDate(argument, context) {
3131
- // [TODO] Get rid of `toDate` or `constructFrom`?
3132
- return constructFrom(argument, argument);
3133
- }
3134
-
3135
- /**
3136
- * The {@link addDays} function options.
3137
- */
3138
-
3139
- /**
3140
- * @name addDays
3141
- * @category Day Helpers
3142
- * @summary Add the specified number of days to the given date.
3143
- *
3144
- * @description
3145
- * Add the specified number of days to the given date.
3146
- *
3147
- * **You don't need date-fns\***:
3148
- *
3149
- * Temporal has a built-in `add` method on all its classes:
3150
- *
3151
- * - [`Temporal.Instant.prototype.add()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant/add)
3152
- * - [`Temporal.PlainDate.prototype.add()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/add)
3153
- * - [`Temporal.PlainDateTime.prototype.add()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/add)
3154
- * - [`Temporal.PlainTime.prototype.add()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/add)
3155
- * - [`Temporal.PlainYearMonth.prototype.add()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/add)
3156
- * - [`Temporal.ZonedDateTime.prototype.add()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/add)
3157
- *
3158
- * \* **Not really**, see: https://date-fns.org/you-dont-need-date-fns
3159
- *
3160
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3161
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3162
- *
3163
- * @param date - The date to be changed
3164
- * @param amount - The amount of days to be added.
3165
- * @param options - An object with options
3166
- *
3167
- * @returns The new date with the days added
3168
- *
3169
- * @example
3170
- * // Add 10 days to 1 September 2014:
3171
- * const result = addDays(new Date(2014, 8, 1), 10)
3172
- * //=> Thu Sep 11 2014 00:00:00
3173
- *
3174
- * @example
3175
- * // Using Temporal:
3176
- * // Add 10 days to 1 September 2014:
3177
- * Temporal.PlainDate.from("2014-09-01").add({ days: 10 }).toString();
3178
- * //=> "2014-09-11"
3179
- */
3180
- function addDays(date, amount, options) {
3181
- const _date = toDate(date);
3182
- if (isNaN(amount)) return constructFrom(date, NaN);
3183
-
3184
- // If 0 days, no-op to avoid changing times in the hour before end of DST
3185
- if (!amount) return _date;
3186
-
3187
- _date.setDate(_date.getDate() + amount);
3188
- return _date;
3189
- }
3190
-
3191
- /**
3192
- * The {@link addMonths} function options.
3193
- */
3194
-
3195
- /**
3196
- * @name addMonths
3197
- * @category Month Helpers
3198
- * @summary Add the specified number of months to the given date.
3199
- *
3200
- * @description
3201
- * Add the specified number of months to the given date.
3202
- *
3203
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3204
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3205
- *
3206
- * @param date - The date to be changed
3207
- * @param amount - The amount of months to be added.
3208
- * @param options - The options object
3209
- *
3210
- * @returns The new date with the months added
3211
- *
3212
- * @example
3213
- * // Add 5 months to 1 September 2014:
3214
- * const result = addMonths(new Date(2014, 8, 1), 5)
3215
- * //=> Sun Feb 01 2015 00:00:00
3216
- *
3217
- * // Add one month to 30 January 2023:
3218
- * const result = addMonths(new Date(2023, 0, 30), 1)
3219
- * //=> Tue Feb 28 2023 00:00:00
3220
- */
3221
- function addMonths(date, amount, options) {
3222
- const _date = toDate(date);
3223
- if (isNaN(amount)) return constructFrom(date, NaN);
3224
- const dayOfMonth = _date.getDate();
3225
-
3226
- // The JS Date object supports date math by accepting out-of-bounds values for
3227
- // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and
3228
- // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we
3229
- // want except that dates will wrap around the end of a month, meaning that
3230
- // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So
3231
- // we'll default to the end of the desired month by adding 1 to the desired
3232
- // month and using a date of 0 to back up one day to the end of the desired
3233
- // month.
3234
- const endOfDesiredMonth = constructFrom(date, _date.getTime());
3235
- endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);
3236
- const daysInMonth = endOfDesiredMonth.getDate();
3237
- if (dayOfMonth >= daysInMonth) {
3238
- // If we're already at the end of the month, then this is the correct date
3239
- // and we're done.
3240
- return endOfDesiredMonth;
3241
- } else {
3242
- // Otherwise, we now know that setting the original day-of-month value won't
3243
- // cause an overflow, so set the desired day-of-month. Note that we can't
3244
- // just set the date of `endOfDesiredMonth` because that object may have had
3245
- // its time changed in the unusual case where where a DST transition was on
3246
- // the last day of the month and its local time was in the hour skipped or
3247
- // repeated next to a DST transition. So we use `date` instead which is
3248
- // guaranteed to still have the original time.
3249
- _date.setFullYear(
3250
- endOfDesiredMonth.getFullYear(),
3251
- endOfDesiredMonth.getMonth(),
3252
- dayOfMonth,
3253
- );
3254
- return _date;
3255
- }
3256
- }
3257
-
3258
- /**
3259
- * The {@link startOfDay} function options.
3260
- */
3261
-
3262
- /**
3263
- * @name startOfDay
3264
- * @category Day Helpers
3265
- * @summary Return the start of a day for the given date.
3266
- *
3267
- * @description
3268
- * Return the start of a day for the given date.
3269
- * The result will be in the local timezone.
3270
- *
3271
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3272
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3273
- *
3274
- * @param date - The original date
3275
- * @param options - The options
3276
- *
3277
- * @returns The start of a day
3278
- *
3279
- * @example
3280
- * // The start of a day for 2 September 2014 11:55:00:
3281
- * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
3282
- * //=> Tue Sep 02 2014 00:00:00
3283
- */
3284
- function startOfDay(date, options) {
3285
- const _date = toDate(date);
3286
- _date.setHours(0, 0, 0, 0);
3287
- return _date;
3288
- }
3289
-
3290
- /**
3291
- * The {@link endOfDay} function options.
3292
- */
3293
-
3294
- /**
3295
- * @name endOfDay
3296
- * @category Day Helpers
3297
- * @summary Return the end of a day for the given date.
3298
- *
3299
- * @description
3300
- * Return the end of a day for the given date.
3301
- * The result will be in the local timezone.
3302
- *
3303
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3304
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3305
- *
3306
- * @param date - The original date
3307
- * @param options - An object with options
3308
- *
3309
- * @returns The end of a day
3310
- *
3311
- * @example
3312
- * // The end of a day for 2 September 2014 11:55:00:
3313
- * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))
3314
- * //=> Tue Sep 02 2014 23:59:59.999
3315
- */
3316
- function endOfDay(date, options) {
3317
- const _date = toDate(date);
3318
- _date.setHours(23, 59, 59, 999);
3319
- return _date;
3320
- }
3321
-
3322
- /**
3323
- * The {@link endOfMonth} function options.
3324
- */
3325
-
3326
- /**
3327
- * @name endOfMonth
3328
- * @category Month Helpers
3329
- * @summary Return the end of a month for the given date.
3330
- *
3331
- * @description
3332
- * Return the end of a month for the given date.
3333
- * The result will be in the local timezone.
3334
- *
3335
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3336
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3337
- *
3338
- * @param date - The original date
3339
- * @param options - An object with options
3340
- *
3341
- * @returns The end of a month
3342
- *
3343
- * @example
3344
- * // The end of a month for 2 September 2014 11:55:00:
3345
- * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))
3346
- * //=> Tue Sep 30 2014 23:59:59.999
3347
- */
3348
- function endOfMonth(date, options) {
3349
- const _date = toDate(date);
3350
- const month = _date.getMonth();
3351
- _date.setFullYear(_date.getFullYear(), month + 1, 0);
3352
- _date.setHours(23, 59, 59, 999);
3353
- return _date;
3354
- }
3355
-
3356
- /**
3357
- * The {@link startOfMonth} function options.
3358
- */
3359
-
3360
- /**
3361
- * @name startOfMonth
3362
- * @category Month Helpers
3363
- * @summary Return the start of a month for the given date.
3364
- *
3365
- * @description
3366
- * Return the start of a month for the given date. The result will be in the local timezone.
3367
- *
3368
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.
3369
- * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3370
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,
3371
- * or inferred from the arguments.
3372
- *
3373
- * @param date - The original date
3374
- * @param options - An object with options
3375
- *
3376
- * @returns The start of a month
3377
- *
3378
- * @example
3379
- * // The start of a month for 2 September 2014 11:55:00:
3380
- * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))
3381
- * //=> Mon Sep 01 2014 00:00:00
3382
- */
3383
- function startOfMonth(date, options) {
3384
- const _date = toDate(date);
3385
- _date.setDate(1);
3386
- _date.setHours(0, 0, 0, 0);
3387
- return _date;
3388
- }
3389
-
3390
- /**
3391
- * The {@link startOfYear} function options.
3392
- */
3393
-
3394
- /**
3395
- * @name startOfYear
3396
- * @category Year Helpers
3397
- * @summary Return the start of a year for the given date.
3398
- *
3399
- * @description
3400
- * Return the start of a year for the given date.
3401
- * The result will be in the local timezone.
3402
- *
3403
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3404
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3405
- *
3406
- * @param date - The original date
3407
- * @param options - The options
3408
- *
3409
- * @returns The start of a year
3410
- *
3411
- * @example
3412
- * // The start of a year for 2 September 2014 11:55:00:
3413
- * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))
3414
- * //=> Wed Jan 01 2014 00:00:00
3415
- */
3416
- function startOfYear(date, options) {
3417
- const date_ = toDate(date);
3418
- date_.setFullYear(date_.getFullYear(), 0, 1);
3419
- date_.setHours(0, 0, 0, 0);
3420
- return date_;
3421
- }
3422
-
3423
- /**
3424
- * The {@link subDays} function options.
3425
- */
3426
-
3427
- /**
3428
- * @name subDays
3429
- * @category Day Helpers
3430
- * @summary Subtract the specified number of days from the given date.
3431
- *
3432
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3433
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3434
- *
3435
- * @param date - The date to be changed
3436
- * @param amount - The amount of days to be subtracted.
3437
- * @param options - An object with options
3438
- *
3439
- * @returns The new date with the days subtracted
3440
- *
3441
- * @example
3442
- * // Subtract 10 days from 1 September 2014:
3443
- * const result = subDays(new Date(2014, 8, 1), 10)
3444
- * //=> Fri Aug 22 2014 00:00:00
3445
- */
3446
- function subDays(date, amount, options) {
3447
- return addDays(date, -amount);
3448
- }
3449
-
3450
- /**
3451
- * The subMonths function options.
3452
- */
3453
-
3454
- /**
3455
- * @name subMonths
3456
- * @category Month Helpers
3457
- * @summary Subtract the specified number of months from the given date.
3458
- *
3459
- * @description
3460
- * Subtract the specified number of months from the given date.
3461
- *
3462
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
3463
- * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.
3464
- *
3465
- * @param date - The date to be changed
3466
- * @param amount - The amount of months to be subtracted.
3467
- * @param options - An object with options
3468
- *
3469
- * @returns The new date with the months subtracted
3470
- *
3471
- * @example
3472
- * // Subtract 5 months from 1 February 2015:
3473
- * const result = subMonths(new Date(2015, 1, 1), 5)
3474
- * //=> Mon Sep 01 2014 00:00:00
3475
- */
3476
- function subMonths(date, amount, options) {
3477
- return addMonths(date, -1);
2607
+ return (jsxs(LabelContainer$2, { className: className, "data-mod-header-label": true, children: [children && jsx(LabelText$1, { children: children }), helpTooltip && (jsx(Tooltip, { title: helpTooltip, placement: "top", children: jsx(IconWrapper, { children: jsx(HelpCircle, {}) }) }))] }));
3478
2608
  }
3479
2609
 
3480
2610
  // Cast ModButton to a simpler type for styled() compatibility (avoids generic inference issues)
@@ -3509,9 +2639,9 @@ const StyledNavButton = styled(IconButton, {
3509
2639
  };
3510
2640
  const sizeStyles = sizeConfig[size];
3511
2641
  const activeNavStyles = {
3512
- backgroundColor: semanticColors.icons.pressedBackground,
2642
+ backgroundColor: semanticColors.color.icon.bgPressed,
3513
2643
  borderColor: 'transparent',
3514
- color: semanticColors.buttons.primary.pressed,
2644
+ color: semanticColors.button.primary.bgPressed,
3515
2645
  };
3516
2646
  return {
3517
2647
  width: sizeStyles.width,
@@ -3522,25 +2652,25 @@ const StyledNavButton = styled(IconButton, {
3522
2652
  duration: theme.transitions.duration.short,
3523
2653
  }),
3524
2654
  '&:focus-visible': {
3525
- outline: `2px solid ${semanticColors.border.focus}`,
2655
+ outline: `2px solid ${semanticColors.color.border.focus}`,
3526
2656
  outlineOffset: 2,
3527
2657
  },
3528
2658
  // Nav styles
3529
- backgroundColor: semanticColors.surfaces.white,
3530
- color: semanticColors.icons.default,
3531
- border: `1px solid ${semanticColors.border.secondary}`,
2659
+ backgroundColor: semanticColors.color.surface.raised,
2660
+ color: semanticColors.color.icon.default,
2661
+ border: `1px solid ${semanticColors.color.border.primary}`,
3532
2662
  '&:hover': {
3533
- backgroundColor: semanticColors.input.hoverBackground,
3534
- borderColor: semanticColors.border.primary,
3535
- color: semanticColors.icons.default,
2663
+ backgroundColor: semanticColors.input.bgHover,
2664
+ borderColor: semanticColors.color.border.primary,
2665
+ color: semanticColors.color.icon.default,
3536
2666
  },
3537
2667
  '&:active': activeNavStyles,
3538
2668
  [`&.${iconButtonClasses.disabled}`]: {
3539
2669
  cursor: 'not-allowed',
3540
2670
  pointerEvents: 'auto',
3541
- backgroundColor: semanticColors.surfaces.white,
3542
- borderColor: semanticColors.border.secondary,
3543
- color: semanticColors.icons.disabled,
2671
+ backgroundColor: semanticColors.color.surface.raised,
2672
+ borderColor: semanticColors.color.border.primary,
2673
+ color: semanticColors.color.icon.disabled,
3544
2674
  opacity: 0.5,
3545
2675
  },
3546
2676
  ...(active ? activeNavStyles : {}),
@@ -3602,7 +2732,7 @@ const defaultRangeShortcuts = [
3602
2732
  label: 'Last month',
3603
2733
  getValue: () => {
3604
2734
  const today = new Date();
3605
- const lastMonth = subMonths(today);
2735
+ const lastMonth = subMonths(today, 1);
3606
2736
  return [startOfMonth(lastMonth), endOfMonth(lastMonth)];
3607
2737
  },
3608
2738
  },
@@ -3617,80 +2747,80 @@ const defaultRangeShortcuts = [
3617
2747
  // Styled DatePicker with design system tokens
3618
2748
  const StyledDatePicker = styled(DatePicker)(({ theme }) => ({
3619
2749
  [`& .${pickerPopperClasses.paper}`]: {
3620
- backgroundColor: semanticColors.surfaces.card,
2750
+ backgroundColor: semanticColors.color.surface.raised,
3621
2751
  boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
3622
2752
  borderRadius: `${borderRadius.s}px`,
3623
2753
  },
3624
2754
  [`& .${dayCalendarClasses.weekDayLabel}`]: {
3625
2755
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3626
2756
  fontWeight: typography.fontWeight.medium,
3627
- color: semanticColors.typography.bodySecondary,
2757
+ color: semanticColors.color.text.secondary,
3628
2758
  },
3629
2759
  [`& .${pickerDayClasses.root}`]: {
3630
2760
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3631
- color: semanticColors.typography.bodySecondary,
2761
+ color: semanticColors.color.text.secondary,
3632
2762
  borderRadius: borderRadius.l,
3633
2763
  '&:hover': {
3634
- backgroundColor: semanticColors.icons.hoverBackground,
2764
+ backgroundColor: semanticColors.color.icon.bgHover,
3635
2765
  },
3636
2766
  '&.Mui-selected': {
3637
- backgroundColor: semanticColors.icons.active,
3638
- color: semanticColors.surfaces.white,
2767
+ backgroundColor: semanticColors.color.icon.active,
2768
+ color: semanticColors.color.surface.raised,
3639
2769
  '&:hover': {
3640
- backgroundColor: semanticColors.icons.active,
2770
+ backgroundColor: semanticColors.color.icon.active,
3641
2771
  },
3642
2772
  },
3643
2773
  [`&.${pickerDayClasses.today}`]: {
3644
- border: `2px solid ${semanticColors.border.strong}`,
2774
+ border: `2px solid ${semanticColors.color.border.strong}`,
3645
2775
  backgroundColor: 'transparent',
3646
2776
  },
3647
2777
  },
3648
2778
  [`& .${pickersCalendarHeaderClasses.label}`]: {
3649
2779
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3650
2780
  fontWeight: typography.fontWeight.semiBold,
3651
- color: semanticColors.typography.body,
2781
+ color: semanticColors.color.text.primary,
3652
2782
  },
3653
2783
  }));
3654
2784
  // Styled DateRangePicker with design system tokens
3655
2785
  const StyledDateRangePicker = styled(DateRangePicker)(({ theme }) => ({
3656
2786
  [`& .${pickerPopperClasses.paper}`]: {
3657
- backgroundColor: semanticColors.surfaces.card,
2787
+ backgroundColor: semanticColors.color.surface.raised,
3658
2788
  boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
3659
2789
  borderRadius: `${borderRadius.s}px`,
3660
2790
  },
3661
2791
  [`& .${dayCalendarClasses.weekDayLabel}`]: {
3662
2792
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3663
2793
  fontWeight: typography.fontWeight.medium,
3664
- color: semanticColors.typography.bodySecondary,
2794
+ color: semanticColors.color.text.secondary,
3665
2795
  },
3666
2796
  [`& .${dateRangePickerDayClasses.root}`]: {
3667
2797
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3668
- color: semanticColors.typography.bodySecondary,
2798
+ color: semanticColors.color.text.secondary,
3669
2799
  borderRadius: borderRadius.l,
3670
2800
  '&:hover': {
3671
- backgroundColor: semanticColors.icons.hoverBackground,
2801
+ backgroundColor: semanticColors.color.icon.bgHover,
3672
2802
  },
3673
2803
  '&.Mui-selected': {
3674
- backgroundColor: semanticColors.icons.active,
3675
- color: semanticColors.surfaces.white,
2804
+ backgroundColor: semanticColors.color.icon.active,
2805
+ color: semanticColors.color.surface.raised,
3676
2806
  },
3677
2807
  },
3678
2808
  [`& .${dateRangePickerDayClasses.insideSelection}`]: {
3679
- backgroundColor: semanticColors.icons.hoverBackground,
3680
- color: semanticColors.typography.input.default,
2809
+ backgroundColor: semanticColors.color.icon.bgHover,
2810
+ color: semanticColors.color.text.input,
3681
2811
  },
3682
2812
  [`& .${dateRangePickerDayClasses.selectionStart}, & .${dateRangePickerDayClasses.selectionEnd}`]: {
3683
- backgroundColor: semanticColors.icons.active,
2813
+ backgroundColor: semanticColors.color.icon.active,
3684
2814
  },
3685
2815
  [`& .${pickersCalendarHeaderClasses.label}`]: {
3686
2816
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3687
2817
  fontWeight: typography.fontWeight.semiBold,
3688
- color: semanticColors.typography.body,
2818
+ color: semanticColors.color.text.primary,
3689
2819
  },
3690
2820
  }));
3691
- const ClearIcon = () => jsx(X, { size: 20, color: semanticColors.icons.placeholder });
2821
+ const ClearIcon = () => jsx(X, { size: 20, color: semanticColors.color.icon.placeholder });
3692
2822
  // Custom calendar icon component
3693
- const CalendarIcon = () => jsx(CalendarDays, { size: 20, color: semanticColors.icons.placeholder });
2823
+ const CalendarIcon = () => jsx(CalendarDays, { size: 20, color: semanticColors.color.icon.placeholder });
3694
2824
  // Shortcut styles to match Figma list item design (no borders, plain text)
3695
2825
  const shortcutChipStyles = {
3696
2826
  // Container (MuiList) styles
@@ -3699,7 +2829,7 @@ const shortcutChipStyles = {
3699
2829
  [`& .${chipClasses.root}`]: {
3700
2830
  fontSize: typography.fontSize.sm,
3701
2831
  fontWeight: typography.fontWeight.medium,
3702
- color: semanticColors.typography.input.default,
2832
+ color: semanticColors.color.text.input,
3703
2833
  backgroundColor: 'transparent',
3704
2834
  borderRadius: `${spacing.spacing_3_4}px`,
3705
2835
  border: 'none',
@@ -3712,7 +2842,7 @@ const shortcutChipStyles = {
3712
2842
  padding: 0,
3713
2843
  },
3714
2844
  '&:hover': {
3715
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
2845
+ backgroundColor: semanticColors.button.secondary.bgHover,
3716
2846
  },
3717
2847
  },
3718
2848
  };
@@ -3805,18 +2935,8 @@ const ModDatePicker = ({ type = 'single', open, label, value, rangeValue, onChan
3805
2935
  };
3806
2936
  ModDatePicker.displayName = 'ModDatePicker';
3807
2937
 
3808
- /**
3809
- * ModDatePickerListItem
3810
- */
3811
- const ModDatePickerListItem = styled('div')({});
3812
-
3813
- /**
3814
- * ModDatePickerMenu
3815
- */
3816
- const ModDatePickerMenu = styled('div')({});
3817
-
3818
2938
  const StyledDivider = styled(Divider)(() => ({
3819
- borderColor: semanticColors.border.secondary,
2939
+ borderColor: semanticColors.color.border.primary,
3820
2940
  marginTop: spacing.spacing_1,
3821
2941
  marginBottom: spacing.spacing_1,
3822
2942
  }));
@@ -3857,7 +2977,11 @@ const StyledDot = styled('span', {
3857
2977
  shouldForwardProp: prop => prop !== 'ownerState',
3858
2978
  })(({ ownerState }) => {
3859
2979
  const size = sizeMap[ownerState.size];
3860
- const palette = semanticColors.status[ownerState.color];
2980
+ // Computed member access — the phase-2 restructure's codemod (driven from
2981
+ // literal TOKEN_MAP paths) cannot reach this. Fixed by hand. See
2982
+ // docs/superpowers/plans/2026-08-05-semantic-restructure.md
2983
+ // "Dynamic access — the codemod cannot see these".
2984
+ const palette = semanticColors.color.status[ownerState.color];
3861
2985
  return {
3862
2986
  display: 'inline-flex',
3863
2987
  alignItems: 'center',
@@ -3868,10 +2992,10 @@ const StyledDot = styled('span', {
3868
2992
  borderRadius: '50%',
3869
2993
  flexShrink: 0,
3870
2994
  boxSizing: 'border-box',
3871
- backgroundColor: palette.default,
3872
- color: semanticColors.typography.tooltip.default,
2995
+ backgroundColor: palette.solid,
2996
+ color: semanticColors.color.text.tooltip,
3873
2997
  ...(ownerState.variant === 'outline' && {
3874
- border: `3px solid ${palette.light}`,
2998
+ border: `3px solid ${palette.bg}`,
3875
2999
  }),
3876
3000
  '& > svg': {
3877
3001
  width: '70%',
@@ -3890,9 +3014,9 @@ ModDot.displayName = 'ModDot';
3890
3014
  const StyledRoot$1 = styled(Paper)({
3891
3015
  padding: spacing.spacing_2,
3892
3016
  borderRadius: borderRadius.s,
3893
- backgroundColor: semanticColors.surfaces.card,
3894
- color: semanticColors.typography.body,
3895
- border: `1px solid ${semanticColors.border.primary}`,
3017
+ backgroundColor: semanticColors.color.surface.raised,
3018
+ color: semanticColors.color.text.primary,
3019
+ border: `1px solid ${semanticColors.color.border.primary}`,
3896
3020
  boxShadow: `${shadows.neutral.regular.x}px ${shadows.neutral.regular.y}px ${shadows.neutral.regular.blur}px ${shadows.neutral.regular.spread}px ${shadows.neutral.regular.shadow}`,
3897
3021
  display: 'flex',
3898
3022
  flexDirection: 'column',
@@ -3903,14 +3027,14 @@ const Title = styled('p')(({ theme }) => ({
3903
3027
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3904
3028
  fontWeight: typography.fontWeight.semiBold,
3905
3029
  lineHeight: 1.4,
3906
- color: semanticColors.typography.bodySecondary,
3030
+ color: semanticColors.color.text.secondary,
3907
3031
  }));
3908
3032
  const FileName = styled('p')(({ theme }) => ({
3909
3033
  margin: 0,
3910
3034
  fontSize: theme.typography.pxToRem(typography.fontSize.xs),
3911
3035
  fontWeight: typography.fontWeight.medium,
3912
3036
  lineHeight: 1.5,
3913
- color: semanticColors.typography.body,
3037
+ color: semanticColors.color.text.primary,
3914
3038
  overflow: 'hidden',
3915
3039
  textOverflow: 'ellipsis',
3916
3040
  whiteSpace: 'nowrap',
@@ -3921,16 +3045,16 @@ const ProgressLabel$1 = styled('p')(({ theme }) => ({
3921
3045
  fontSize: theme.typography.pxToRem(typography.fontSize.xs),
3922
3046
  fontWeight: typography.fontWeight.medium,
3923
3047
  lineHeight: 1.5,
3924
- color: semanticColors.typography.body,
3048
+ color: semanticColors.color.text.primary,
3925
3049
  flexShrink: 0,
3926
3050
  }));
3927
3051
  const StyledLinearProgress$1 = styled(LinearProgress)({
3928
3052
  width: '100%',
3929
3053
  height: spacing.spacing_1,
3930
3054
  borderRadius: borderRadius.s,
3931
- backgroundColor: semanticColors.border.secondary,
3055
+ backgroundColor: semanticColors.color.border.primary,
3932
3056
  [`& .${linearProgressClasses.bar}`]: {
3933
- backgroundColor: semanticColors.buttons.primary.default,
3057
+ backgroundColor: semanticColors.button.primary.bg,
3934
3058
  borderRadius: `${borderRadius.xS}px 0 0 ${borderRadius.xS}px`,
3935
3059
  },
3936
3060
  });
@@ -3938,7 +3062,7 @@ const ActionButton = styled(IconButton)({
3938
3062
  padding: 0,
3939
3063
  width: spacing.spacing_2,
3940
3064
  height: spacing.spacing_2,
3941
- color: semanticColors.icons.utility,
3065
+ color: semanticColors.color.icon.utility,
3942
3066
  '&:hover': {
3943
3067
  backgroundColor: 'transparent',
3944
3068
  },
@@ -3970,50 +3094,50 @@ const ModDownloadToast = ({ title, fileName, progress, showClose = true, showPau
3970
3094
  ModDownloadToast.displayName = 'ModDownloadToast';
3971
3095
 
3972
3096
  const buildFilledIcon = ({ displayName, fillColor, body, knockout }) => {
3973
- const Component = (props) => (jsxs(SvgIcon, { viewBox: "0 0 16 16", ...props, children: [jsx("g", { fill: fillColor, children: body }), jsx("g", { stroke: semanticColors.surfaces.white, strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", fill: "none", children: knockout })] }));
3097
+ const Component = (props) => (jsxs(SvgIcon, { viewBox: "0 0 16 16", ...props, children: [jsx("g", { fill: fillColor, children: body }), jsx("g", { stroke: semanticColors.color.surface.raised, strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", fill: "none", children: knockout })] }));
3974
3098
  Component.displayName = displayName;
3975
3099
  return Component;
3976
3100
  };
3977
3101
  const CIRCLE_BODY = (jsx("path", { d: "M8.00001 14.6666C11.6819 14.6666 14.6667 11.6818 14.6667 7.99992C14.6667 4.31802 11.6819 1.33325 8.00001 1.33325C4.31811 1.33325 1.33334 4.31802 1.33334 7.99992C1.33334 11.6818 4.31811 14.6666 8.00001 14.6666Z" }));
3978
3102
  const ModFilledSuccess = buildFilledIcon({
3979
3103
  displayName: 'ModFilledSuccess',
3980
- fillColor: semanticColors.status.success.default,
3104
+ fillColor: semanticColors.color.status.success.solid,
3981
3105
  body: CIRCLE_BODY,
3982
3106
  knockout: jsx("path", { d: "M6 8.00008L7.33333 9.33341L10 6.66675" }),
3983
3107
  });
3984
3108
  const ModFilledQueued = buildFilledIcon({
3985
3109
  displayName: 'ModFilledQueued',
3986
- fillColor: semanticColors.status.active.default,
3110
+ fillColor: semanticColors.color.status.active.solid,
3987
3111
  body: CIRCLE_BODY,
3988
3112
  knockout: jsx("path", { d: "M8 4V8L10.6667 9.33333" }),
3989
3113
  });
3990
3114
  const ModFilledInfo = buildFilledIcon({
3991
3115
  displayName: 'ModFilledInfo',
3992
- fillColor: semanticColors.status.info.default,
3116
+ fillColor: semanticColors.color.status.info.solid,
3993
3117
  body: CIRCLE_BODY,
3994
3118
  knockout: (jsxs(Fragment, { children: [jsx("path", { d: "M8 10.6667V8" }), jsx("path", { d: "M8 5.33325H8.00667" })] })),
3995
3119
  });
3996
3120
  const ModFilledWarning = buildFilledIcon({
3997
3121
  displayName: 'ModFilledWarning',
3998
- fillColor: semanticColors.status.warning.default,
3122
+ fillColor: semanticColors.color.status.warning.solid,
3999
3123
  body: (jsx("path", { d: "M14.4867 12L9.15335 2.66665C9.03706 2.46146 8.86842 2.29078 8.66463 2.17203C8.46084 2.05329 8.22921 1.99072 7.99335 1.99072C7.75749 1.99072 7.52585 2.05329 7.32206 2.17203C7.11828 2.29078 6.94964 2.46146 6.83335 2.66665L1.50001 12C1.38247 12.2036 1.32083 12.4346 1.32135 12.6697C1.32187 12.9047 1.38453 13.1355 1.50298 13.3385C1.62142 13.5416 1.79145 13.7097 1.99581 13.8259C2.20018 13.942 2.43162 14.0021 2.66668 14H13.3333C13.5673 13.9997 13.797 13.938 13.9995 13.8208C14.202 13.7037 14.3702 13.5354 14.487 13.3327C14.6039 13.1301 14.6654 12.9002 14.6653 12.6663C14.6653 12.4324 14.6036 12.2026 14.4867 12Z" })),
4000
3124
  knockout: (jsxs(Fragment, { children: [jsx("path", { d: "M8 6V8.66667" }), jsx("path", { d: "M8 11.3333H8.00667" })] })),
4001
3125
  });
4002
3126
  const ModFilledError = buildFilledIcon({
4003
3127
  displayName: 'ModFilledError',
4004
- fillColor: semanticColors.status.error.default,
3128
+ fillColor: semanticColors.color.status.error.solid,
4005
3129
  body: (jsx("path", { d: "M10.208 1.33325C10.5616 1.33333 10.9007 1.47385 11.1507 1.72392L14.276 4.84925C14.5261 5.09924 14.6666 5.43832 14.6667 5.79192V10.2079C14.6666 10.5615 14.5261 10.9006 14.276 11.1506L11.1507 14.2759C10.9007 14.526 10.5616 14.6665 10.208 14.6666H5.79201C5.43842 14.6665 5.09933 14.526 4.84934 14.2759L1.72401 11.1506C1.47394 10.9006 1.33342 10.5615 1.33334 10.2079V5.79192C1.33342 5.43832 1.47394 5.09924 1.72401 4.84925L4.84934 1.72392C5.09933 1.47385 5.43842 1.33333 5.79201 1.33325H10.208Z" })),
4006
3130
  knockout: (jsxs(Fragment, { children: [jsx("path", { d: "M8 5.33325V7.99992" }), jsx("path", { d: "M8 10.6667H8.00667" })] })),
4007
3131
  });
4008
3132
  const ModFilledNeutral = buildFilledIcon({
4009
3133
  displayName: 'ModFilledNeutral',
4010
- fillColor: semanticColors.status.neutral.default,
3134
+ fillColor: semanticColors.color.status.neutral.solid,
4011
3135
  body: CIRCLE_BODY,
4012
3136
  knockout: jsx("path", { d: "M5.33334 8H10.6667" }),
4013
3137
  });
4014
3138
  const ModFilledCanceled = buildFilledIcon({
4015
3139
  displayName: 'ModFilledCanceled',
4016
- fillColor: semanticColors.status.canceled.default,
3140
+ fillColor: semanticColors.color.status.canceled.solid,
4017
3141
  body: CIRCLE_BODY,
4018
3142
  knockout: (jsxs(Fragment, { children: [jsx("path", { d: "M10 6L6 10" }), jsx("path", { d: "M6 6L10 10" })] })),
4019
3143
  });
@@ -4023,17 +3147,17 @@ const StyledChip$1 = styled(Chip, {
4023
3147
  shouldForwardProp: prop => !filterChipOnlyProps.includes(prop),
4024
3148
  })(({ theme, selected }) => ({
4025
3149
  borderRadius: borderRadius.full,
4026
- border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
3150
+ border: `1px solid ${semanticColors.button.secondary.border}`,
4027
3151
  backgroundColor: selected
4028
- ? semanticColors.buttons.secondary.pressedBackground
4029
- : semanticColors.surfaces.white,
3152
+ ? semanticColors.button.secondary.bgPressed
3153
+ : semanticColors.color.surface.raised,
4030
3154
  minHeight: 40,
4031
3155
  padding: `${spacing.spacing_3_4}px ${spacing.spacing_1_1_2}px`,
4032
3156
  gap: spacing.spacing_1,
4033
3157
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
4034
3158
  fontWeight: typography.fontWeight.medium,
4035
3159
  lineHeight: 1,
4036
- color: semanticColors.typography.body,
3160
+ color: semanticColors.color.text.primary,
4037
3161
  [`& .${chipClasses.label}`]: {
4038
3162
  padding: 0,
4039
3163
  overflow: 'visible',
@@ -4041,23 +3165,23 @@ const StyledChip$1 = styled(Chip, {
4041
3165
  alignItems: 'center',
4042
3166
  },
4043
3167
  [`& .${chipClasses.deleteIcon}`]: {
4044
- color: semanticColors.icons.default,
3168
+ color: semanticColors.color.icon.default,
4045
3169
  width: 24,
4046
3170
  height: 24,
4047
3171
  margin: 0,
4048
3172
  flexShrink: 0,
4049
3173
  '&:hover': {
4050
- color: semanticColors.icons.default,
3174
+ color: semanticColors.color.icon.default,
4051
3175
  },
4052
3176
  },
4053
3177
  '&:hover': {
4054
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
3178
+ backgroundColor: semanticColors.button.secondary.bgHover,
4055
3179
  },
4056
3180
  [`&.${chipClasses.focusVisible}`]: {
4057
3181
  ...focusRingStyles,
4058
3182
  backgroundColor: selected
4059
- ? semanticColors.buttons.secondary.pressedBackground
4060
- : semanticColors.surfaces.white,
3183
+ ? semanticColors.button.secondary.bgPressed
3184
+ : semanticColors.color.surface.raised,
4061
3185
  },
4062
3186
  }));
4063
3187
  const LabelContent = styled('span')({
@@ -4076,13 +3200,13 @@ const HeaderLabel = styled('span')(({ theme }) => ({
4076
3200
  fontSize: theme.typography.pxToRem(typography.fontSize.xxs),
4077
3201
  fontWeight: typography.fontWeight.regular,
4078
3202
  lineHeight: '120%',
4079
- color: semanticColors.typography.bodySecondary,
3203
+ color: semanticColors.color.text.secondary,
4080
3204
  }));
4081
3205
  const SelectedLabel = styled('span')(({ theme }) => ({
4082
3206
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
4083
3207
  fontWeight: typography.fontWeight.medium,
4084
3208
  lineHeight: 1,
4085
- color: semanticColors.buttons.secondary.default,
3209
+ color: semanticColors.button.secondary.fg,
4086
3210
  }));
4087
3211
  const CountBadge = styled('span')(({ theme }) => ({
4088
3212
  display: 'inline-flex',
@@ -4092,8 +3216,8 @@ const CountBadge = styled('span')(({ theme }) => ({
4092
3216
  height: 16,
4093
3217
  padding: `0 ${spacing.spacing_1_2}px`,
4094
3218
  borderRadius: borderRadius.full,
4095
- backgroundColor: semanticColors.brand,
4096
- color: semanticColors.surfaces.white,
3219
+ backgroundColor: semanticColors.color.action.brand,
3220
+ color: semanticColors.color.surface.raised,
4097
3221
  fontSize: theme.typography.pxToRem(typography.fontSize.xs),
4098
3222
  fontWeight: typography.fontWeight.medium,
4099
3223
  lineHeight: 1,
@@ -4137,7 +3261,7 @@ const SpinnerWrapper = styled('div')({
4137
3261
  * @example
4138
3262
  * <ModLoadingSpinner size={32} color="#ff0000" />
4139
3263
  */
4140
- const ModLoadingSpinner = ({ size = 24, color = semanticColors.buttons.primary.default, }) => {
3264
+ const ModLoadingSpinner = ({ size = 24, color = semanticColors.button.primary.bg, }) => {
4141
3265
  return (jsx(SpinnerWrapper, { style: { width: size, height: size }, children: jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("title", { children: "Loading Spinner" }), jsx("g", { opacity: "0.2", children: jsx("circle", { cx: "12", cy: "12", r: "10", stroke: color, strokeWidth: "2.1" }) }), jsx("path", { d: "M12 2C6.477 2 2 6.477 2 12", stroke: color, strokeWidth: "2.1", strokeLinecap: "round" })] }) }));
4142
3266
  };
4143
3267
  ModLoadingSpinner.displayName = 'ModLoadingSpinner';
@@ -4145,8 +3269,8 @@ ModLoadingSpinner.displayName = 'ModLoadingSpinner';
4145
3269
  const StyledFooter = styled(Box, {
4146
3270
  shouldForwardProp: prop => prop !== 'showShadow',
4147
3271
  })(({ theme, showShadow = false }) => ({
4148
- backgroundColor: semanticColors.surfaces.white,
4149
- borderTop: `1px solid ${semanticColors.border.primary}`,
3272
+ backgroundColor: semanticColors.color.surface.raised,
3273
+ borderTop: `1px solid ${semanticColors.color.border.primary}`,
4150
3274
  display: 'flex',
4151
3275
  alignItems: 'center',
4152
3276
  justifyContent: 'center',
@@ -4174,7 +3298,7 @@ const ResultText = styled('p')(({ theme }) => ({
4174
3298
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
4175
3299
  fontWeight: typography.fontWeight.regular,
4176
3300
  lineHeight: 1.5,
4177
- color: semanticColors.typography.body, // typography/body: #232342
3301
+ color: semanticColors.color.text.primary, // typography/body: #232342
4178
3302
  margin: 0,
4179
3303
  whiteSpace: 'pre',
4180
3304
  }));
@@ -4183,7 +3307,7 @@ const LoadMoreButton = styled('button')(({ theme }) => ({
4183
3307
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
4184
3308
  fontWeight: typography.fontWeight.regular,
4185
3309
  lineHeight: 'normal',
4186
- color: semanticColors.typography.link.primary,
3310
+ color: semanticColors.color.text.link,
4187
3311
  background: 'none',
4188
3312
  border: 'none',
4189
3313
  padding: 0,
@@ -4193,7 +3317,7 @@ const LoadMoreButton = styled('button')(({ theme }) => ({
4193
3317
  textDecoration: 'underline',
4194
3318
  },
4195
3319
  '&:disabled': {
4196
- color: semanticColors.typography.button.disabled,
3320
+ color: semanticColors.button.fgDisabled,
4197
3321
  cursor: 'not-allowed',
4198
3322
  },
4199
3323
  }));
@@ -4202,7 +3326,7 @@ const SelectedText = styled('p')(({ theme }) => ({
4202
3326
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
4203
3327
  fontWeight: typography.fontWeight.regular,
4204
3328
  lineHeight: 1.5,
4205
- color: semanticColors.typography.body,
3329
+ color: semanticColors.color.text.primary,
4206
3330
  margin: 0,
4207
3331
  whiteSpace: 'pre',
4208
3332
  }));
@@ -4216,15 +3340,15 @@ const PaginationButton = styled(IconButton)(({ disabled }) => ({
4216
3340
  width: spacing.spacing_5_1_2,
4217
3341
  height: spacing.spacing_5_1_2,
4218
3342
  padding: spacing.spacing_1,
4219
- backgroundColor: semanticColors.surfaces.white,
3343
+ backgroundColor: semanticColors.color.surface.raised,
4220
3344
  borderRadius: borderRadius.full,
4221
3345
  '&:hover': {
4222
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
3346
+ backgroundColor: semanticColors.button.secondary.bgHover,
4223
3347
  },
4224
3348
  '& svg': {
4225
3349
  width: 24,
4226
3350
  height: 24,
4227
- color: disabled ? semanticColors.icons.disabled : semanticColors.icons.default,
3351
+ color: disabled ? semanticColors.color.icon.disabled : semanticColors.color.icon.default,
4228
3352
  },
4229
3353
  }));
4230
3354
  const PaginationText = styled('p')(({ theme }) => ({
@@ -4232,7 +3356,7 @@ const PaginationText = styled('p')(({ theme }) => ({
4232
3356
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
4233
3357
  fontWeight: typography.fontWeight.regular,
4234
3358
  lineHeight: 1.5,
4235
- color: semanticColors.typography.body, // typography/body: #232342
3359
+ color: semanticColors.color.text.primary, // typography/body: #232342
4236
3360
  margin: 0,
4237
3361
  whiteSpace: 'pre',
4238
3362
  }));
@@ -4491,31 +3615,31 @@ const StyledFormControl = styled(FormControl, {
4491
3615
  width: '100%',
4492
3616
  };
4493
3617
  });
4494
- const StyledInputLabel = styled(InputLabel, {
3618
+ const StyledInputLabel = styled(MuiInputLabel, {
4495
3619
  shouldForwardProp: prop => prop !== 'size' && prop !== 'infoIcon',
4496
3620
  })(({ theme }) => ({
4497
3621
  position: 'static',
4498
3622
  transform: 'none',
4499
3623
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
4500
3624
  fontWeight: typography.fontWeight.medium,
4501
- color: semanticColors.typography.input.label,
3625
+ color: semanticColors.color.text.inputLabel,
4502
3626
  display: 'flex',
4503
3627
  alignItems: 'center',
4504
3628
  gap: spacing.spacing_1_4,
4505
3629
  [`&.${inputLabelClasses.focused}`]: {
4506
- color: semanticColors.typography.input.label,
3630
+ color: semanticColors.color.text.inputLabel,
4507
3631
  },
4508
3632
  [`&.${inputLabelClasses.disabled}`]: {
4509
- color: semanticColors.typography.button.disabled,
3633
+ color: semanticColors.button.fgDisabled,
4510
3634
  },
4511
3635
  [`&.${inputLabelClasses.error}`]: {
4512
- color: semanticColors.typography.input.label,
3636
+ color: semanticColors.color.text.inputLabel,
4513
3637
  },
4514
3638
  }));
4515
3639
  const InfoIconWrapper = styled('span')({
4516
3640
  display: 'inline-flex',
4517
3641
  alignItems: 'center',
4518
- color: semanticColors.icons.placeholder,
3642
+ color: semanticColors.color.icon.placeholder,
4519
3643
  });
4520
3644
  const StyledInputBase = styled(InputBase, {
4521
3645
  shouldForwardProp: prop => prop !== 'size' && prop !== 'destructive',
@@ -4539,50 +3663,52 @@ const StyledInputBase = styled(InputBase, {
4539
3663
  height: multiline ? 'auto' : sizeStyles.height,
4540
3664
  fontSize: sizeStyles.fontSize,
4541
3665
  borderRadius: sizeStyles.borderRadius,
4542
- backgroundColor: semanticColors.input.background,
4543
- border: `1px solid ${destructive ? semanticColors.status.error.default : semanticColors.border.primary}`,
3666
+ backgroundColor: semanticColors.input.bg,
3667
+ border: `1px solid ${destructive ? semanticColors.color.status.error.solid : semanticColors.color.border.primary}`,
4544
3668
  transition: theme.transitions.create(['border-color', 'background-color'], {
4545
3669
  duration: theme.transitions.duration.short,
4546
3670
  }),
4547
3671
  [`& .${inputBaseClasses.input}`]: {
4548
3672
  padding: sizeStyles.padding,
4549
- color: semanticColors.typography.input.default,
3673
+ color: semanticColors.color.text.input,
4550
3674
  // Tabular figures, no tracking — see Badge.tsx.
4551
3675
  fontVariantNumeric: 'tabular-nums',
4552
3676
  '&::placeholder': {
4553
- color: semanticColors.typography.input.placeholder,
3677
+ color: semanticColors.color.text.inputPlaceholder,
4554
3678
  },
4555
3679
  },
4556
3680
  // Hover state
4557
3681
  '&:hover': {
4558
- backgroundColor: semanticColors.input.hoverBackground,
3682
+ backgroundColor: semanticColors.input.bgHover,
4559
3683
  borderColor: destructive
4560
- ? semanticColors.status.error.default
4561
- : semanticColors.border.primary,
3684
+ ? semanticColors.color.status.error.solid
3685
+ : semanticColors.color.border.primary,
4562
3686
  },
4563
3687
  // Focused state
4564
3688
  [`&.${inputBaseClasses.focused}`]: {
4565
- backgroundColor: semanticColors.input.background,
3689
+ backgroundColor: semanticColors.input.bg,
4566
3690
  borderColor: destructive
4567
- ? semanticColors.status.error.default
4568
- : semanticColors.buttons.primary.default,
3691
+ ? semanticColors.color.status.error.solid
3692
+ : semanticColors.button.primary.bg,
4569
3693
  },
4570
3694
  // Disabled state
4571
3695
  [`&.${inputBaseClasses.disabled}`]: {
4572
- backgroundColor: semanticColors.input.disabledBackground,
4573
- borderColor: semanticColors.border.primary,
4574
- color: semanticColors.typography.button.disabled,
3696
+ backgroundColor: semanticColors.input.bgDisabled,
3697
+ borderColor: semanticColors.color.border.primary,
3698
+ color: semanticColors.button.fgDisabled,
4575
3699
  [`& .${inputBaseClasses.input}`]: {
4576
- WebkitTextFillColor: semanticColors.typography.button.disabled,
3700
+ WebkitTextFillColor: semanticColors.button.fgDisabled,
4577
3701
  },
4578
3702
  },
4579
3703
  // Error state
4580
3704
  [`&.${inputBaseClasses.error}`]: {
4581
- borderColor: semanticColors.status.error.default,
3705
+ borderColor: semanticColors.color.status.error.solid,
4582
3706
  },
4583
3707
  // Adornment styling
4584
3708
  [`& .${inputAdornmentClasses.root}`]: {
4585
- color: destructive ? semanticColors.status.error.default : semanticColors.icons.placeholder,
3709
+ color: destructive
3710
+ ? semanticColors.color.status.error.solid
3711
+ : semanticColors.color.icon.placeholder,
4586
3712
  },
4587
3713
  };
4588
3714
  });
@@ -4594,12 +3720,12 @@ const StyledFormHelperText = styled(FormHelperText, {
4594
3720
  marginRight: 0,
4595
3721
  // Figma specifies 14px for helper text
4596
3722
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
4597
- color: semanticColors.typography.input.helper,
3723
+ color: semanticColors.color.text.inputHelper,
4598
3724
  [`&.${formHelperTextClasses.error}`]: {
4599
- color: semanticColors.status.error.default,
3725
+ color: semanticColors.color.status.error.solid,
4600
3726
  },
4601
3727
  [`&.${formHelperTextClasses.disabled}`]: {
4602
- color: semanticColors.typography.button.disabled,
3728
+ color: semanticColors.button.fgDisabled,
4603
3729
  },
4604
3730
  };
4605
3731
  });
@@ -4609,7 +3735,7 @@ const StyledFormHelperText = styled(FormHelperText, {
4609
3735
  const ModInputField = ({ size = 'medium', destructive = false, label, required = false, infoIcon, helperText, errorMessage, startIcon, endIcon, disabled, id, ...props }) => {
4610
3736
  const inputId = id || `mod-input-${Math.random().toString(36).substring(7)}`;
4611
3737
  const helperTextId = helperText || errorMessage ? `${inputId}-helper-text` : undefined;
4612
- return (jsxs(StyledFormControl, { size: size, error: destructive, disabled: disabled, children: [label && (jsxs(StyledInputLabel, { htmlFor: inputId, size: size, infoIcon: !!infoIcon, disabled: disabled, error: destructive, shrink: true, children: [label, required && jsx("span", { "aria-hidden": "true", children: "*" }), infoIcon && jsx(InfoIconWrapper, { children: infoIcon })] })), jsx(StyledInputBase, { id: inputId, size: size, destructive: destructive, disabled: disabled, error: destructive, "aria-describedby": helperTextId, startAdornment: startIcon ? (jsx(InputAdornment, { position: "start", style: { paddingLeft: size === 'small' ? spacing.spacing_1_1_2 : spacing.spacing_2 }, children: startIcon })) : undefined, endAdornment: destructive ? (jsx(InputAdornment, { position: "end", style: { paddingRight: spacing.spacing_1_1_2 }, children: jsx(CircleAlert, { size: 20 }) })) : endIcon ? (jsx(InputAdornment, { position: "end", style: { paddingRight: spacing.spacing_1_1_2 }, children: endIcon })) : undefined, ...props }), (helperText || errorMessage) && (jsx(StyledFormHelperText, { id: helperTextId, error: destructive, disabled: disabled, children: destructive ? errorMessage : helperText }))] }));
3738
+ return (jsxs(StyledFormControl, { size: size, error: destructive, disabled: disabled, children: [label && (jsxs(StyledInputLabel, { htmlFor: inputId, size: size, infoIcon: !!infoIcon, disabled: disabled, error: destructive, shrink: true, children: [label, required && jsx("span", { "aria-hidden": "true", children: "*" }), infoIcon && jsx(InfoIconWrapper, { children: infoIcon })] })), jsx(StyledInputBase, { id: inputId, size: size, destructive: destructive, disabled: disabled, error: destructive, "aria-describedby": helperTextId, startAdornment: startIcon ? (jsx(InputAdornment, { position: "start", style: { paddingLeft: size === 'small' ? spacing.spacing_1_1_2 : spacing.spacing_2 }, children: startIcon })) : undefined, endAdornment: destructive ? (jsx(InputAdornment, { position: "end", style: { paddingRight: spacing.spacing_1_1_2 }, children: jsx(AlertCircle, { size: 20 }) })) : endIcon ? (jsx(InputAdornment, { position: "end", style: { paddingRight: spacing.spacing_1_1_2 }, children: endIcon })) : undefined, ...props }), (helperText || errorMessage) && (jsx(StyledFormHelperText, { id: helperTextId, error: destructive, disabled: disabled, children: destructive ? errorMessage : helperText }))] }));
4613
3739
  };
4614
3740
  ModInputField.displayName = 'ModInputField';
4615
3741
 
@@ -4707,7 +3833,7 @@ const StyledListItemButton$1 = styled(ListItemButton, {
4707
3833
  paddingBottom: config.paddingBottom,
4708
3834
  paddingLeft: config.paddingLeft,
4709
3835
  borderRadius: spacing.spacing_3_4, // 6px
4710
- backgroundColor: semanticColors.input.background,
3836
+ backgroundColor: semanticColors.input.bg,
4711
3837
  gap: config.gap,
4712
3838
  // Icon is always centered vertically per Figma design
4713
3839
  alignItems: 'center',
@@ -4719,7 +3845,7 @@ const StyledListItemButton$1 = styled(ListItemButton, {
4719
3845
  minWidth: config.iconSize, // Override MUI's default 56px
4720
3846
  width: config.iconSize,
4721
3847
  height: config.iconSize,
4722
- color: semanticColors.icons.placeholder,
3848
+ color: semanticColors.color.icon.placeholder,
4723
3849
  transition: theme.transitions.create(['color'], {
4724
3850
  duration: theme.transitions.duration.short,
4725
3851
  }),
@@ -4736,9 +3862,7 @@ const StyledListItemButton$1 = styled(ListItemButton, {
4736
3862
  : size === 'small' || size === 'medium'
4737
3863
  ? typography.fontWeight.regular
4738
3864
  : typography.fontWeight.medium,
4739
- color: isLink
4740
- ? semanticColors.typography.link.primary
4741
- : semanticColors.typography.navigation.default,
3865
+ color: isLink ? semanticColors.color.text.link : semanticColors.color.text.nav,
4742
3866
  overflow: 'hidden',
4743
3867
  textOverflow: 'ellipsis',
4744
3868
  whiteSpace: 'nowrap',
@@ -4758,14 +3882,14 @@ const StyledListItemButton$1 = styled(ListItemButton, {
4758
3882
  : 12),
4759
3883
  lineHeight: 1.5,
4760
3884
  fontWeight: typography.fontWeight.regular,
4761
- color: semanticColors.typography.bodySecondary,
3885
+ color: semanticColors.color.text.secondary,
4762
3886
  },
4763
3887
  // Secondary text styling - wraps with word break
4764
3888
  '& .list-item-secondary': {
4765
3889
  fontSize: theme.typography.pxToRem('secondaryFontSize' in config ? config.secondaryFontSize : config.fontSize),
4766
3890
  lineHeight: size === 'large' ? 1.5 : 1.4,
4767
3891
  fontWeight: typography.fontWeight.regular,
4768
- color: semanticColors.typography.bodySecondary,
3892
+ color: semanticColors.color.text.secondary,
4769
3893
  wordBreak: 'break-word',
4770
3894
  whiteSpace: 'normal',
4771
3895
  ...(size === 'large' && {
@@ -4778,29 +3902,29 @@ const StyledListItemButton$1 = styled(ListItemButton, {
4778
3902
  alignItems: 'center',
4779
3903
  flexShrink: 0,
4780
3904
  marginLeft: spacing.spacing_1,
4781
- color: semanticColors.icons.default,
3905
+ color: semanticColors.color.icon.default,
4782
3906
  },
4783
3907
  // Hover state
4784
3908
  '&:hover': {
4785
- backgroundColor: semanticColors.input.background,
3909
+ backgroundColor: semanticColors.input.bg,
4786
3910
  },
4787
3911
  // Selected/Active state
4788
3912
  // Font weights per Figma:
4789
3913
  // - Primary: small/medium/xxlarge use 500, large/xlarge use 600
4790
3914
  // - Secondary: large/xlarge use 500, xxlarge uses 400
4791
3915
  [`&.${listItemButtonClasses.selected}`]: {
4792
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
3916
+ backgroundColor: semanticColors.button.secondary.bgHover,
4793
3917
  '&:hover': {
4794
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
3918
+ backgroundColor: semanticColors.button.secondary.bgHover,
4795
3919
  },
4796
3920
  [`& .${listItemIconClasses.root}`]: {
4797
- color: semanticColors.icons.pressed,
3921
+ color: semanticColors.color.icon.pressed,
4798
3922
  },
4799
3923
  '& .list-item-primary': {
4800
3924
  fontWeight: size === 'large' || size === 'xlarge'
4801
3925
  ? typography.fontWeight.semiBold
4802
3926
  : typography.fontWeight.medium,
4803
- color: semanticColors.typography.navigation.default,
3927
+ color: semanticColors.color.text.nav,
4804
3928
  },
4805
3929
  '& .list-item-secondary': {
4806
3930
  fontWeight: size === 'large' || size === 'xlarge'
@@ -4810,22 +3934,22 @@ const StyledListItemButton$1 = styled(ListItemButton, {
4810
3934
  },
4811
3935
  // Disabled state
4812
3936
  [`&.${listItemButtonClasses.disabled}`]: {
4813
- backgroundColor: semanticColors.input.disabledBackground,
3937
+ backgroundColor: semanticColors.input.bgDisabled,
4814
3938
  opacity: 1,
4815
3939
  [`& .${listItemIconClasses.root}`]: {
4816
- color: semanticColors.icons.disabled,
3940
+ color: semanticColors.color.icon.disabled,
4817
3941
  },
4818
3942
  '& .list-item-primary': {
4819
- color: semanticColors.buttons.tertiary.disabled,
3943
+ color: semanticColors.button.tertiary.fgDisabled,
4820
3944
  },
4821
3945
  '& .list-item-secondary': {
4822
- color: semanticColors.buttons.tertiary.disabled,
3946
+ color: semanticColors.button.tertiary.fgDisabled,
4823
3947
  },
4824
3948
  '& .list-item-badge': {
4825
- color: semanticColors.buttons.tertiary.disabled,
3949
+ color: semanticColors.button.tertiary.fgDisabled,
4826
3950
  },
4827
3951
  '& .list-item-trailing': {
4828
- color: semanticColors.icons.disabled,
3952
+ color: semanticColors.color.icon.disabled,
4829
3953
  },
4830
3954
  },
4831
3955
  };
@@ -4880,28 +4004,28 @@ function navVariantStyles(theme) {
4880
4004
  paddingLeft: spacing.spacing_2,
4881
4005
  paddingRight: spacing.spacing_2,
4882
4006
  border: 'none',
4883
- color: semanticColors.typography.bodySecondary,
4007
+ color: semanticColors.color.text.secondary,
4884
4008
  backgroundColor: 'transparent',
4885
4009
  transition: theme.transitions.create(['background-color', 'color']),
4886
4010
  [`&.${listItemButtonClasses.selected}`]: {
4887
- backgroundColor: semanticColors.surfaces.activeHighlight,
4888
- color: semanticColors.typography.body,
4011
+ backgroundColor: semanticColors.color.surface.highlightActive,
4012
+ color: semanticColors.color.text.primary,
4889
4013
  '&:hover': {
4890
- backgroundColor: semanticColors.surfaces.activeHighlight,
4014
+ backgroundColor: semanticColors.color.surface.highlightActive,
4891
4015
  },
4892
4016
  },
4893
4017
  [`&:not(.${listItemButtonClasses.selected}):not(.${listItemButtonClasses.disabled})`]: {
4894
4018
  '&:hover': {
4895
- backgroundColor: semanticColors.surfaces.listHover,
4896
- color: semanticColors.typography.body,
4019
+ backgroundColor: semanticColors.color.surface.rowHover,
4020
+ color: semanticColors.color.text.primary,
4897
4021
  },
4898
4022
  },
4899
4023
  [`&.${listItemButtonClasses.focusVisible}`]: {
4900
- outline: `2px solid ${semanticColors.border.focus}`,
4024
+ outline: `2px solid ${semanticColors.color.border.focus}`,
4901
4025
  outlineOffset: -2,
4902
4026
  },
4903
4027
  [`&.${listItemButtonClasses.disabled}`]: {
4904
- color: semanticColors.typography.button.disabled,
4028
+ color: semanticColors.button.fgDisabled,
4905
4029
  opacity: 1,
4906
4030
  },
4907
4031
  };
@@ -4916,71 +4040,71 @@ function cardVariantStyles(theme) {
4916
4040
  paddingBottom: spacing.spacing_1,
4917
4041
  paddingLeft: spacing.spacing_3_4,
4918
4042
  paddingRight: spacing.spacing_3_4,
4919
- border: `1px solid ${semanticColors.border.primary}`,
4920
- backgroundColor: semanticColors.surfaces.white,
4043
+ border: `1px solid ${semanticColors.color.border.primary}`,
4044
+ backgroundColor: semanticColors.color.surface.raised,
4921
4045
  transition: theme.transitions.create(['border', 'background-color']),
4922
4046
  // Active (selected) state
4923
4047
  [`&.${listItemButtonClasses.selected}`]: {
4924
- border: `2px solid ${semanticColors.buttons.primary.default}`,
4925
- backgroundColor: semanticColors.surfaces.white,
4048
+ border: `2px solid ${semanticColors.button.primary.bg}`,
4049
+ backgroundColor: semanticColors.color.surface.raised,
4926
4050
  '&:hover': {
4927
- backgroundColor: semanticColors.surfaces.white,
4051
+ backgroundColor: semanticColors.color.surface.raised,
4928
4052
  },
4929
4053
  // Icon color in selected state
4930
4054
  [`& .${listItemIconClasses.root}`]: {
4931
- color: semanticColors.icons.default,
4055
+ color: semanticColors.color.icon.default,
4932
4056
  },
4933
4057
  // Text colors in selected state
4934
4058
  [`& .${listItemTextClasses.primary}`]: {
4935
- color: semanticColors.typography.body,
4059
+ color: semanticColors.color.text.primary,
4936
4060
  },
4937
4061
  [`& .${listItemTextClasses.secondary}`]: {
4938
- color: semanticColors.typography.bodySecondary,
4062
+ color: semanticColors.color.text.secondary,
4939
4063
  },
4940
4064
  },
4941
4065
  // Deselected (default) state
4942
4066
  [`&:not(.${listItemButtonClasses.selected}):not(.${listItemButtonClasses.disabled})`]: {
4943
4067
  '&:hover': {
4944
- backgroundColor: semanticColors.surfaces.listHover,
4068
+ backgroundColor: semanticColors.color.surface.rowHover,
4945
4069
  },
4946
4070
  [`& .${listItemIconClasses.root}`]: {
4947
- color: semanticColors.icons.disabled,
4071
+ color: semanticColors.color.icon.disabled,
4948
4072
  },
4949
4073
  [`& .${listItemTextClasses.primary}`]: {
4950
- color: semanticColors.buttons.tertiary.disabled,
4074
+ color: semanticColors.button.tertiary.fgDisabled,
4951
4075
  },
4952
4076
  [`& .${listItemTextClasses.secondary}`]: {
4953
- color: semanticColors.typography.button.disabled,
4077
+ color: semanticColors.button.fgDisabled,
4954
4078
  },
4955
4079
  },
4956
4080
  // Focus state
4957
4081
  [`&.${listItemButtonClasses.focusVisible}`]: {
4958
- outline: `2px solid ${semanticColors.buttons.primary.default}`,
4082
+ outline: `2px solid ${semanticColors.button.primary.bg}`,
4959
4083
  outlineOffset: 2,
4960
- border: `2px solid ${semanticColors.buttons.primary.default}`,
4961
- backgroundColor: semanticColors.surfaces.white,
4084
+ border: `2px solid ${semanticColors.button.primary.bg}`,
4085
+ backgroundColor: semanticColors.color.surface.raised,
4962
4086
  [`& .${listItemIconClasses.root}`]: {
4963
- color: semanticColors.icons.default,
4087
+ color: semanticColors.color.icon.default,
4964
4088
  },
4965
4089
  [`& .${listItemTextClasses.primary}`]: {
4966
- color: semanticColors.typography.body,
4090
+ color: semanticColors.color.text.primary,
4967
4091
  },
4968
4092
  [`& .${listItemTextClasses.secondary}`]: {
4969
- color: semanticColors.typography.bodySecondary,
4093
+ color: semanticColors.color.text.secondary,
4970
4094
  },
4971
4095
  },
4972
4096
  // Disabled state
4973
4097
  [`&.${listItemButtonClasses.disabled}`]: {
4974
- backgroundColor: semanticColors.surface.sunken,
4098
+ backgroundColor: semanticColors.color.surface.sunken,
4975
4099
  opacity: 1, // Override MUI default opacity
4976
4100
  [`& .${listItemIconClasses.root}`]: {
4977
- color: semanticColors.icons.disabled,
4101
+ color: semanticColors.color.icon.disabled,
4978
4102
  },
4979
4103
  [`& .${listItemTextClasses.primary}`]: {
4980
- color: semanticColors.typography.button.disabled,
4104
+ color: semanticColors.button.fgDisabled,
4981
4105
  },
4982
4106
  [`& .${listItemTextClasses.secondary}`]: {
4983
- color: semanticColors.typography.button.disabled,
4107
+ color: semanticColors.button.fgDisabled,
4984
4108
  },
4985
4109
  },
4986
4110
  };
@@ -5025,9 +4149,9 @@ ModListItemButton.displayName = 'ModListItemButton';
5025
4149
 
5026
4150
  const StyledMenu = styled(Menu)(() => ({
5027
4151
  [`& .${paperClasses.root}`]: {
5028
- backgroundColor: semanticColors.surfaces.white,
4152
+ backgroundColor: semanticColors.color.surface.raised,
5029
4153
  borderRadius: borderRadius.s,
5030
- border: `1px solid ${semanticColors.border.primary}`,
4154
+ border: `1px solid ${semanticColors.color.border.primary}`,
5031
4155
  boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
5032
4156
  marginTop: spacing.spacing_1,
5033
4157
  paddingTop: spacing.spacing_1,
@@ -5083,8 +4207,8 @@ const StyledCell$1 = styled('div', {
5083
4207
  paddingTop: spacing.spacing_1_2, // 4px — input-vertical
5084
4208
  paddingBottom: spacing.spacing_1_2,
5085
4209
  backgroundColor: disabled
5086
- ? semanticColors.surfaces.dataGrid.disabled
5087
- : semanticColors.surfaces.dataGrid.default,
4210
+ ? semanticColors.color.surface.dataGrid.disabled
4211
+ : semanticColors.color.surface.dataGrid.default,
5088
4212
  boxSizing: 'border-box',
5089
4213
  }));
5090
4214
  const LabelText = styled('span', {
@@ -5097,7 +4221,7 @@ const LabelText = styled('span', {
5097
4221
  fontSize: typography.fontSize.xs,
5098
4222
  fontWeight: typography.fontWeight.regular,
5099
4223
  lineHeight: 1.5,
5100
- color: disabled ? semanticColors.typography.bodySecondary : semanticColors.typography.body,
4224
+ color: disabled ? semanticColors.color.text.secondary : semanticColors.color.text.primary,
5101
4225
  }));
5102
4226
  /**
5103
4227
  * ModAvatarCell — DataGrid cell displaying a user avatar with optional label.
@@ -5115,9 +4239,9 @@ ModAvatarCell.displayName = 'ModAvatarCell';
5115
4239
  // ============================================================================
5116
4240
  const StyledDialog = styled(Dialog)({
5117
4241
  [`& .${dialogClasses.paper}`]: {
5118
- backgroundColor: semanticColors.surfaces.white,
4242
+ backgroundColor: semanticColors.color.surface.raised,
5119
4243
  borderRadius: borderRadius.card,
5120
- border: `1px solid ${semanticColors.border.primary}`,
4244
+ border: `1px solid ${semanticColors.color.border.primary}`,
5121
4245
  boxShadow: 'none',
5122
4246
  },
5123
4247
  [`& .${dialogClasses.container}`]: {
@@ -5177,7 +4301,7 @@ const ModalHeaderTitle = styled('h2')(({ theme }) => ({
5177
4301
  fontWeight: typography.fontWeight.medium,
5178
4302
  fontSize: theme.typography.pxToRem(typography.fontSize.h3),
5179
4303
  lineHeight: 1.4,
5180
- color: semanticColors.typography.navigation.default,
4304
+ color: semanticColors.color.text.nav,
5181
4305
  }));
5182
4306
  const modalHeaderTitleLinkStyles = {
5183
4307
  margin: 0,
@@ -5185,10 +4309,10 @@ const modalHeaderTitleLinkStyles = {
5185
4309
  fontWeight: typography.fontWeight.medium,
5186
4310
  fontSize: typography.fontSize.h3,
5187
4311
  lineHeight: 1.4,
5188
- color: semanticColors.typography.link.primary,
4312
+ color: semanticColors.color.text.link,
5189
4313
  textDecoration: 'none',
5190
4314
  '&:hover': {
5191
- color: semanticColors.buttons.tertiary.hover,
4315
+ color: semanticColors.button.tertiary.fgHover,
5192
4316
  textDecoration: 'underline',
5193
4317
  },
5194
4318
  };
@@ -5198,10 +4322,10 @@ const ModalHeaderSubtitle = styled('p')(({ theme }) => ({
5198
4322
  fontWeight: typography.fontWeight.regular,
5199
4323
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
5200
4324
  lineHeight: 1.4,
5201
- color: semanticColors.typography.bodySecondary,
4325
+ color: semanticColors.color.text.secondary,
5202
4326
  }));
5203
4327
  const StyledCloseButton = styled(IconButton)({
5204
- color: semanticColors.icons.utility,
4328
+ color: semanticColors.color.icon.utility,
5205
4329
  paddingTop: 0,
5206
4330
  paddingRight: 0,
5207
4331
  paddingBottom: 0,
@@ -5211,7 +4335,7 @@ const StyledCloseButton = styled(IconButton)({
5211
4335
  flexShrink: 0,
5212
4336
  '&:hover': {
5213
4337
  backgroundColor: 'transparent',
5214
- color: semanticColors.icons.utility,
4338
+ color: semanticColors.color.icon.utility,
5215
4339
  },
5216
4340
  });
5217
4341
  /**
@@ -5245,7 +4369,7 @@ const StyledDialogContent = styled(DialogContent)(({ theme }) => ({
5245
4369
  fontWeight: typography.fontWeight.regular,
5246
4370
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
5247
4371
  lineHeight: 1.5,
5248
- color: semanticColors.typography.navigation.default,
4372
+ color: semanticColors.color.text.nav,
5249
4373
  [`&.${dialogContentClasses.root}`]: {
5250
4374
  paddingTop: 0,
5251
4375
  paddingRight: spacing.spacing_4,
@@ -5300,7 +4424,7 @@ const CellRoot = styled('div', {
5300
4424
  justifyContent: 'center',
5301
4425
  width: '100%',
5302
4426
  height: '100%',
5303
- color: disabled ? semanticColors.icons.disabled : semanticColors.icons.default,
4427
+ color: disabled ? semanticColors.color.icon.disabled : semanticColors.color.icon.default,
5304
4428
  }));
5305
4429
  /**
5306
4430
  * ModIconCell — Icon cell for DataGrid. Renders an icon centered in the cell.
@@ -5323,8 +4447,8 @@ const CellWrapper = styled('div', {
5323
4447
  paddingLeft: spacing.spacing_1,
5324
4448
  paddingRight: spacing.spacing_1,
5325
4449
  backgroundColor: disabled
5326
- ? semanticColors.surfaces.dataGrid.disabled
5327
- : semanticColors.surfaces.dataGrid.default,
4450
+ ? semanticColors.color.surface.dataGrid.disabled
4451
+ : semanticColors.color.surface.dataGrid.default,
5328
4452
  '& img': {
5329
4453
  display: 'block',
5330
4454
  maxHeight: 32,
@@ -5362,13 +4486,13 @@ const StyledLinearProgress = styled(LinearProgress, {
5362
4486
  [`&.${linearProgressClasses.colorPrimary}`]: {
5363
4487
  backgroundColor: semanticColors.progress.track,
5364
4488
  [`& .${linearProgressClasses.bar}`]: {
5365
- backgroundColor: semanticColors.status.active.default,
4489
+ backgroundColor: semanticColors.color.status.active.solid,
5366
4490
  },
5367
4491
  },
5368
4492
  // Cancelled variant uses warning color
5369
4493
  '&[data-variant="cancelled"]': {
5370
4494
  [`& .${linearProgressClasses.bar}`]: {
5371
- backgroundColor: semanticColors.status.warning.default,
4495
+ backgroundColor: semanticColors.color.status.warning.solid,
5372
4496
  },
5373
4497
  },
5374
4498
  }));
@@ -5397,7 +4521,7 @@ const ProgressWrapper = styled('div')(({ labelPosition }) => ({
5397
4521
  const ProgressLabel = styled(Typography)(({ theme }) => ({
5398
4522
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
5399
4523
  fontWeight: typography.fontWeight.medium,
5400
- color: semanticColors.typography.body,
4524
+ color: semanticColors.color.text.primary,
5401
4525
  lineHeight: 1.4,
5402
4526
  whiteSpace: 'nowrap',
5403
4527
  flexShrink: 0,
@@ -5431,8 +4555,8 @@ const StyledCell = styled('div', {
5431
4555
  paddingLeft: spacing.spacing_1_1_2, // 12px input-horizontal
5432
4556
  paddingRight: spacing.spacing_1_1_2,
5433
4557
  backgroundColor: disabled
5434
- ? semanticColors.surfaces.dataGrid.disabled
5435
- : semanticColors.surfaces.dataGrid.default,
4558
+ ? semanticColors.color.surface.dataGrid.disabled
4559
+ : semanticColors.color.surface.dataGrid.default,
5436
4560
  boxSizing: 'border-box',
5437
4561
  }));
5438
4562
  /**
@@ -5444,10 +4568,14 @@ const ModProgressCell = ({ value = 0, disabled = false, empty = false, }) => {
5444
4568
  };
5445
4569
  ModProgressCell.displayName = 'ModProgressCell';
5446
4570
 
4571
+ // semanticColors.status[variant] is a computed member access, so the phase-2
4572
+ // token restructure's codemod (driven from literal TOKEN_MAP paths) cannot
4573
+ // reach it — fixed by hand. See docs/superpowers/plans/2026-08-05-semantic-restructure.md
4574
+ // "Dynamic access — the codemod cannot see these".
5447
4575
  const variantColors = (variant) => ({
5448
- bg: semanticColors.status[variant].light,
5449
- fg: semanticColors.status[variant].dark,
5450
- border: semanticColors.status[variant].transparent,
4576
+ bg: semanticColors.color.status[variant].bg,
4577
+ fg: semanticColors.color.status[variant].fg,
4578
+ border: semanticColors.color.status[variant].tint,
5451
4579
  });
5452
4580
  const StyledChip = styled('div', {
5453
4581
  shouldForwardProp: prop => prop !== 'disabled' && prop !== 'variant',
@@ -5462,9 +4590,9 @@ const StyledChip = styled('div', {
5462
4590
  paddingLeft: spacing.spacing_1_1_2,
5463
4591
  paddingRight: spacing.spacing_1_1_2,
5464
4592
  borderRadius: borderRadius.full,
5465
- border: `1px solid ${disabled ? semanticColors.border.secondary : colors.border}`,
5466
- backgroundColor: disabled ? semanticColors.surfaces.dataGrid.disabled : colors.bg,
5467
- color: disabled ? semanticColors.icons.disabled : colors.fg,
4593
+ border: `1px solid ${disabled ? semanticColors.color.border.primary : colors.border}`,
4594
+ backgroundColor: disabled ? semanticColors.color.surface.dataGrid.disabled : colors.bg,
4595
+ color: disabled ? semanticColors.color.icon.disabled : colors.fg,
5468
4596
  fontFamily: typography.fontFamily.body,
5469
4597
  fontSize: typography.fontSize.xs,
5470
4598
  fontWeight: typography.fontWeight.medium,
@@ -5489,7 +4617,7 @@ const TooltipErrorPre = styled('pre')({
5489
4617
  fontSize: typography.fontSize.sm,
5490
4618
  fontWeight: typography.fontWeight.regular,
5491
4619
  lineHeight: 1.5,
5492
- color: semanticColors.typography.tooltip.default,
4620
+ color: semanticColors.color.text.tooltip,
5493
4621
  whiteSpace: 'pre-wrap',
5494
4622
  wordBreak: 'break-all',
5495
4623
  maxHeight: 200,
@@ -5497,12 +4625,12 @@ const TooltipErrorPre = styled('pre')({
5497
4625
  });
5498
4626
  const StyledTooltip$1 = styled(Tooltip)({
5499
4627
  [`& .${tooltipClasses.tooltip}`]: {
5500
- backgroundColor: semanticColors.surfaces.tooltip,
4628
+ backgroundColor: semanticColors.color.surface.tooltip,
5501
4629
  maxWidth: 400,
5502
4630
  padding: `${spacing.spacing_1}px ${spacing.spacing_1_1_2}px`,
5503
4631
  },
5504
4632
  [`& .${tooltipClasses.arrow}`]: {
5505
- color: semanticColors.surfaces.tooltip,
4633
+ color: semanticColors.color.surface.tooltip,
5506
4634
  },
5507
4635
  });
5508
4636
  /**
@@ -5511,7 +4639,7 @@ const StyledTooltip$1 = styled(Tooltip)({
5511
4639
  const ModStatusCell = ({ icon, label, details, disabled = false, variant = 'success', empty = false, }) => {
5512
4640
  if (empty) {
5513
4641
  return (jsx(Box, { component: "span", sx: {
5514
- color: semanticColors.typography.body,
4642
+ color: semanticColors.color.text.primary,
5515
4643
  fontSize: typography.fontSize.sm,
5516
4644
  lineHeight: 1,
5517
4645
  }, children: '—' }));
@@ -5532,10 +4660,10 @@ const NavigationAvatarContainer = styled('div')({
5532
4660
  justifyContent: 'center',
5533
4661
  alignItems: 'center',
5534
4662
  borderRadius: '50%',
5535
- border: `1px solid ${semanticColors.border.secondary}`,
5536
- backgroundColor: semanticColors.buttons.secondary.defaultBackground,
4663
+ border: `1px solid ${semanticColors.color.border.primary}`,
4664
+ backgroundColor: semanticColors.button.secondary.bg,
5537
4665
  '&:focus-within': {
5538
- borderColor: semanticColors.border.focus,
4666
+ borderColor: semanticColors.color.border.focus,
5539
4667
  },
5540
4668
  });
5541
4669
  /**
@@ -5559,19 +4687,19 @@ const useModSideNav = () => useContext(ModSideNavContext);
5559
4687
  */
5560
4688
  const variantConfig = {
5561
4689
  light: {
5562
- backgroundColor: semanticColors.surfaces.tooltip, // #4b5563 - medium gray
5563
- color: semanticColors.typography.tooltip.default, // #ffffff - white
4690
+ backgroundColor: semanticColors.color.surface.tooltip, // #4b5563 - medium gray
4691
+ color: semanticColors.color.text.tooltip, // #ffffff - white
5564
4692
  },
5565
4693
  dark: {
5566
- backgroundColor: semanticColors.surfaces.white,
5567
- color: semanticColors.typography.body,
4694
+ backgroundColor: semanticColors.color.surface.raised,
4695
+ color: semanticColors.color.text.primary,
5568
4696
  },
5569
4697
  brand: {
5570
4698
  // snackbarBrand is one of the few tokens Figma fixes across both modes, so
5571
4699
  // its foreground must be fixed too. typography.tooltip.default flips
5572
4700
  // (#ffffff -> #232342), which would put dark navy on dark blue in dark mode.
5573
- backgroundColor: semanticColors.surfaces.snackbarBrand,
5574
- color: semanticColors.typography.linkWhite,
4701
+ backgroundColor: semanticColors.color.surface.snackbarBrand,
4702
+ color: semanticColors.color.text.linkOnDark,
5575
4703
  },
5576
4704
  };
5577
4705
  /**
@@ -5581,29 +4709,19 @@ const variantConfig = {
5581
4709
  // `.MuiTooltip-tooltip` selectors below actually reach the portaled tooltip
5582
4710
  // (styled(Tooltip) alone applies to the anchor, not the popped content).
5583
4711
  const StyledTooltip = styled(({ className, ...props }) => jsx(Tooltip, { ...props, classes: { popper: className } }), {
5584
- shouldForwardProp: prop => prop !== 'variant' && prop !== 'description',
5585
- })(({ variant = 'light', description }) => {
5586
- const hasDescription = Boolean(description);
4712
+ shouldForwardProp: prop => prop !== 'variant',
4713
+ })(({ variant = 'light' }) => {
5587
4714
  const variantStyles = variantConfig[variant];
5588
4715
  return {
5589
- // Style the tooltip content
4716
+ // Style the tooltip content. Padding/line-height/radius are uniform
4717
+ // regardless of whether a description is present — Figma defines a
4718
+ // single tooltip treatment (title + optional content), not two.
5590
4719
  [`& .${tooltipClasses.tooltip}`]: {
5591
4720
  backgroundColor: variantStyles.backgroundColor,
5592
4721
  color: variantStyles.color,
5593
- fontSize: typography.fontSize.xs,
5594
- fontWeight: typography.fontWeight.medium,
5595
- lineHeight: hasDescription ? 1.5 : 1,
5596
- borderRadius: hasDescription ? borderRadius.s : borderRadius.xS,
5597
- padding: hasDescription ? spacing.spacing_1_1_2 : `0 ${spacing.spacing_1}px`,
5598
- ...(hasDescription && {
5599
- maxWidth: 296,
5600
- }),
5601
- ...(!hasDescription && {
5602
- height: spacing.spacing_3_1_4,
5603
- display: 'flex',
5604
- alignItems: 'center',
5605
- justifyContent: 'center',
5606
- }),
4722
+ ...semanticTypography.tooltip,
4723
+ borderRadius: borderRadius.s,
4724
+ padding: `${spacing.spacing_1}px ${spacing.spacing_1_1_2}px`,
5607
4725
  boxShadow: `${shadows.neutral.medium.x}px ${shadows.neutral.medium.y}px ${shadows.neutral.medium.blur}px ${shadows.neutral.medium.spread}px ${shadows.neutral.medium.shadow}`,
5608
4726
  },
5609
4727
  // Style the arrow
@@ -5623,18 +4741,17 @@ const StyledTooltip = styled(({ className, ...props }) => jsx(Tooltip, { ...prop
5623
4741
  * - Dark: surfaces.white, typography.body
5624
4742
  * - Brand: surfaces.snackbarBrand, typography.linkWhite (both fixed across modes)
5625
4743
  * - Shadow: neutralMedium (0px 8px 15px 0px rgba(31,41,55,0.1))
5626
- * - Typography: fontSize.xs (12), fontSize.caption (13), fontWeight.medium (500), fontWeight.semiBold (600)
4744
+ * - Typography: semanticTypography.tooltip (12px/1.5 line-height), fontWeight.semiBold (600) for the title
5627
4745
  */
5628
4746
  const ModTooltip = ({ variant = 'light', title, description, children, arrow = false, placement, ...props }) => {
5629
- // Build the title content
5630
- // If description is provided, create a structured layout with title + description
5631
- // Otherwise, just show the title text
5632
- const titleContent = description ? (jsxs(Stack, { sx: { gap: 0.5 }, children: [jsx(Typography, { sx: { fontSize: typography.fontSize.caption, fontWeight: typography.fontWeight.semiBold }, children: title }), jsx(Typography, { sx: {
5633
- fontSize: typography.fontSize.xs,
5634
- fontWeight: typography.fontWeight.medium,
5635
- opacity: 0.75,
5636
- }, children: description })] })) : (title);
5637
- return (jsx(StyledTooltip, { variant: variant, description: description, title: titleContent, arrow: arrow, placement: placement, ...props, children: children }));
4747
+ // variant="inherit" stops Typography from applying MUI's own body1 font
4748
+ // styles (which would otherwise win over the container's tooltip typography
4749
+ // — a directly-set style beats an inherited one regardless of specificity),
4750
+ // letting it inherit fontSize/lineHeight/fontFamily from `.MuiTooltip-tooltip`.
4751
+ // Title is always semibold; description (when present) inherits the
4752
+ // container's regular weight, distinguishing it from the title above it.
4753
+ const titleContent = description ? (jsxs(Stack, { sx: { gap: `${spacing.spacing_1_4}px` }, children: [jsx(Typography, { variant: "inherit", sx: { fontWeight: typography.fontWeight.semiBold }, children: title }), jsx(Typography, { variant: "inherit", children: description })] })) : (jsx(Typography, { variant: "inherit", sx: { fontWeight: typography.fontWeight.semiBold }, children: title }));
4754
+ return (jsx(StyledTooltip, { variant: variant, title: titleContent, arrow: arrow, placement: placement, ...props, children: children }));
5638
4755
  };
5639
4756
  ModTooltip.displayName = 'ModTooltip';
5640
4757
 
@@ -5655,11 +4772,11 @@ const StyledRoot = styled(ButtonBase, {
5655
4772
  cursor: 'pointer',
5656
4773
  textDecoration: 'none',
5657
4774
  '&:hover .mod-nav-icon-padding': {
5658
- backgroundColor: semanticColors.accent.tint,
5659
- borderColor: semanticColors.accent.border,
4775
+ backgroundColor: semanticColors.color.action.tint,
4776
+ borderColor: semanticColors.color.action.border,
5660
4777
  },
5661
4778
  '&:hover .mod-nav-label': {
5662
- color: semanticColors.text.primary,
4779
+ color: semanticColors.color.text.primary,
5663
4780
  fontWeight: typography.fontWeight.semiBold,
5664
4781
  },
5665
4782
  [`& .${chipClasses.root}`]: {
@@ -5670,16 +4787,16 @@ const StyledRoot = styled(ButtonBase, {
5670
4787
  },
5671
4788
  ...(selected && {
5672
4789
  '& .mod-nav-icon-padding': {
5673
- backgroundColor: semanticColors.accent.tint,
5674
- borderColor: semanticColors.accent.border,
5675
- color: semanticColors.accent.deep,
4790
+ backgroundColor: semanticColors.color.action.tint,
4791
+ borderColor: semanticColors.color.action.border,
4792
+ color: semanticColors.color.action.navy,
5676
4793
  },
5677
4794
  '& .mod-nav-label': {
5678
- color: semanticColors.accent.deep,
4795
+ color: semanticColors.color.action.navy,
5679
4796
  fontWeight: typography.fontWeight.semiBold,
5680
4797
  },
5681
4798
  '&:hover .mod-nav-label': {
5682
- color: semanticColors.accent.deep,
4799
+ color: semanticColors.color.action.navy,
5683
4800
  },
5684
4801
  }),
5685
4802
  }));
@@ -5689,7 +4806,7 @@ const IconPadding = styled('span')({
5689
4806
  padding: spacing.spacing_1, // 8px
5690
4807
  borderRadius: borderRadius.xS, // 4px
5691
4808
  border: '1px solid transparent',
5692
- color: semanticColors.icons.default,
4809
+ color: semanticColors.color.icon.default,
5693
4810
  transition: 'background-color 150ms, border-color 150ms, color 150ms',
5694
4811
  });
5695
4812
  const navLabel = semanticTypography.navigationLabel.default;
@@ -5699,7 +4816,7 @@ const Label$2 = styled('span')(({ theme }) => ({
5699
4816
  fontSize: theme.typography.pxToRem(navLabel.fontSize),
5700
4817
  lineHeight: navLabel.lineHeight,
5701
4818
  textAlign: 'center',
5702
- color: semanticColors.text.primary,
4819
+ color: semanticColors.color.text.primary,
5703
4820
  width: '100%',
5704
4821
  transition: 'color 150ms',
5705
4822
  }));
@@ -5711,7 +4828,7 @@ function ModNavigationItem({ icon, label, selected = false, tag, tooltip, slotPr
5711
4828
  // When collapsed the label is hidden, so fall back to it for the tooltip and
5712
4829
  // accessible name — otherwise an icon-only button has no name (WCAG 4.1.2).
5713
4830
  const collapsedTooltip = tooltip ?? label;
5714
- const item = (jsxs(StyledRoot, { selected: selected, "aria-label": collapsed && typeof label === 'string' ? label : undefined, disableRipple: true, ...props, children: [jsx(IconPadding, { className: "mod-nav-icon-padding neo-nav-icon-padding", children: icon }), !collapsed && label && jsx(Label$2, { className: "mod-nav-label neo-nav-label", children: label }), !collapsed && tag && (jsx(ModTag, { size: "medium", variant: "filled", intent: "beta", shape: "rounded", label: tag, ...slotProps?.badge })), children] }));
4831
+ const item = (jsxs(StyledRoot, { selected: selected, "aria-label": collapsed && typeof label === 'string' ? label : undefined, disableRipple: true, ...props, children: [jsx(IconPadding, { className: "mod-nav-icon-padding", children: icon }), !collapsed && label && jsx(Label$2, { className: "mod-nav-label", children: label }), !collapsed && tag && (jsx(ModTag, { size: "medium", variant: "filled", intent: "beta", shape: "rounded", label: tag, ...slotProps?.badge })), children] }));
5715
4832
  if (collapsed && collapsedTooltip) {
5716
4833
  return (jsx(ModTooltip, { title: collapsedTooltip, placement: "right", arrow: true, children: item }));
5717
4834
  }
@@ -5726,7 +4843,7 @@ const StickyHeader = styled(Box)(({ theme }) => ({
5726
4843
  position: 'sticky',
5727
4844
  top: 0,
5728
4845
  zIndex: theme.zIndex.appBar,
5729
- backgroundColor: semanticColors.surface.canvasContent,
4846
+ backgroundColor: semanticColors.color.surface.canvas,
5730
4847
  flexShrink: 0,
5731
4848
  }));
5732
4849
  /**
@@ -5735,14 +4852,14 @@ const StickyHeader = styled(Box)(({ theme }) => ({
5735
4852
  const PageTitle = styled(Typography)(() => ({
5736
4853
  ...semanticTypography.titles.pageHeader,
5737
4854
  lineHeight: 1.4,
5738
- color: semanticColors.typography.body,
4855
+ color: semanticColors.color.text.primary,
5739
4856
  }));
5740
4857
  /**
5741
4858
  * Subtitle typography
5742
4859
  */
5743
4860
  const Subtitle = styled(Typography)(() => ({
5744
4861
  fontSize: typography.fontSize.sm,
5745
- color: semanticColors.typography.bodySecondary,
4862
+ color: semanticColors.color.text.secondary,
5746
4863
  }));
5747
4864
  /**
5748
4865
  * ModPageContent - Page content surface from the Moderne Design System
@@ -5837,8 +4954,8 @@ function ModPageContent({ pageTitle, subtitle, breadcrumbs, action, sticky = fal
5837
4954
  minHeight: '50vh',
5838
4955
  }, children: jsx(ModLoadingSpinner, {}) })) : (children);
5839
4956
  return (jsxs(Fragment, { children: [jsx(Box, { sx: {
5840
- backgroundColor: semanticColors.surface.canvasContent,
5841
- border: `1px solid ${semanticColors.border.primary}`,
4957
+ backgroundColor: semanticColors.color.surface.canvas,
4958
+ border: `1px solid ${semanticColors.color.border.primary}`,
5842
4959
  borderRadius: `${borderRadius.input}px`,
5843
4960
  height: '100%',
5844
4961
  display: 'flex',
@@ -5881,10 +4998,10 @@ function ModPageContent({ pageTitle, subtitle, breadcrumbs, action, sticky = fal
5881
4998
  right: spacing.spacing_4,
5882
4999
  zIndex: 1000,
5883
5000
  }, children: jsx(Fab, { sx: {
5884
- backgroundColor: `color-mix(in srgb, ${semanticColors.buttons.primary.default} 12.5%, transparent)`,
5885
- color: semanticColors.buttons.primary.default,
5001
+ backgroundColor: `color-mix(in srgb, ${semanticColors.button.primary.bg} 12.5%, transparent)`,
5002
+ color: semanticColors.button.primary.bg,
5886
5003
  '&:hover': {
5887
- backgroundColor: `color-mix(in srgb, ${semanticColors.buttons.primary.default} 18.8%, transparent)`,
5004
+ backgroundColor: `color-mix(in srgb, ${semanticColors.button.primary.bg} 18.8%, transparent)`,
5888
5005
  },
5889
5006
  }, title: "Back to top", size: "small", onClick: handleScrollToTop, children: jsx(ChevronUp, { size: 20 }) }) }) }))] }));
5890
5007
  }
@@ -5941,8 +5058,8 @@ const StyledTextField = styled(TextField)(({ theme }) => ({
5941
5058
  height: spacing.spacing_5,
5942
5059
  fontSize: theme.typography.pxToRem(typography.fontSize.default),
5943
5060
  borderRadius: borderRadius.input,
5944
- backgroundColor: semanticColors.input.background,
5945
- border: `1px solid ${semanticColors.border.primary}`,
5061
+ backgroundColor: semanticColors.input.bg,
5062
+ border: `1px solid ${semanticColors.color.border.primary}`,
5946
5063
  paddingTop: spacing.spacing_1,
5947
5064
  paddingBottom: spacing.spacing_1,
5948
5065
  paddingLeft: spacing.spacing_1_1_2,
@@ -5953,26 +5070,26 @@ const StyledTextField = styled(TextField)(({ theme }) => ({
5953
5070
  },
5954
5071
  [`& .${inputBaseClasses.input}`]: {
5955
5072
  padding: 0,
5956
- color: semanticColors.typography.input.default,
5073
+ color: semanticColors.color.text.input,
5957
5074
  '&::placeholder': {
5958
- color: semanticColors.typography.input.placeholder,
5075
+ color: semanticColors.color.text.inputPlaceholder,
5959
5076
  opacity: 1,
5960
5077
  },
5961
5078
  },
5962
5079
  '&:hover': {
5963
- backgroundColor: semanticColors.input.hoverBackground,
5080
+ backgroundColor: semanticColors.input.bgHover,
5964
5081
  },
5965
5082
  [`&.${inputBaseClasses.focused}`]: {
5966
- backgroundColor: semanticColors.input.background,
5967
- borderColor: semanticColors.buttons.primary.default,
5083
+ backgroundColor: semanticColors.input.bg,
5084
+ borderColor: semanticColors.button.primary.bg,
5968
5085
  },
5969
5086
  [`&.${inputBaseClasses.disabled}`]: {
5970
- backgroundColor: semanticColors.input.disabledBackground,
5971
- color: semanticColors.typography.button.disabled,
5087
+ backgroundColor: semanticColors.input.bgDisabled,
5088
+ color: semanticColors.button.fgDisabled,
5972
5089
  },
5973
5090
  },
5974
5091
  [`& .${inputAdornmentClasses.root}`]: {
5975
- color: semanticColors.icons.placeholder,
5092
+ color: semanticColors.color.icon.placeholder,
5976
5093
  '& svg': {
5977
5094
  width: 14,
5978
5095
  height: 14,
@@ -5982,10 +5099,10 @@ const StyledTextField = styled(TextField)(({ theme }) => ({
5982
5099
  marginRight: 0,
5983
5100
  },
5984
5101
  [`& .${iconButtonClasses.root}`]: {
5985
- color: semanticColors.icons.placeholder,
5102
+ color: semanticColors.color.icon.placeholder,
5986
5103
  '&:hover': {
5987
- backgroundColor: semanticColors.icons.hoverBackground,
5988
- color: semanticColors.icons.utility,
5104
+ backgroundColor: semanticColors.color.icon.bgHover,
5105
+ color: semanticColors.color.icon.utility,
5989
5106
  },
5990
5107
  '& svg': {
5991
5108
  width: 16,
@@ -6032,14 +5149,14 @@ ModQuickFilter.displayName = 'ModQuickFilter';
6032
5149
  const UncheckedIcon = ({ size, disabled }) => {
6033
5150
  const dimensions = size === 'small' ? 16 : 20;
6034
5151
  const radius = size === 'small' ? 8 : 10;
6035
- return (jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsx("title", { children: "Unchecked radio button" }), jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, stroke: semanticColors.border.strong, strokeWidth: "1", fill: disabled ? semanticColors.buttons.primary.disabled : 'transparent' })] }));
5152
+ return (jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsx("title", { children: "Unchecked radio button" }), jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, stroke: semanticColors.color.border.strong, strokeWidth: "1", fill: disabled ? semanticColors.button.primary.bgDisabled : 'transparent' })] }));
6036
5153
  };
6037
5154
  const CheckedIcon = ({ size, disabled }) => {
6038
5155
  const dimensions = size === 'small' ? 16 : 20;
6039
5156
  const radius = size === 'small' ? 8 : 10;
6040
5157
  const inset = size === 'small' ? 0.3125 : 0.3; // 31.25% or 30%
6041
5158
  const innerRadius = radius * (1 - 2 * inset);
6042
- return (jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsx("title", { children: "Checked radio button" }), jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, fill: disabled ? semanticColors.buttons.primary.disabled : semanticColors.icons.active, stroke: disabled ? semanticColors.border.primary : semanticColors.icons.active, strokeWidth: "1" }), jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: innerRadius, fill: disabled ? semanticColors.icons.disabled : semanticColors.surfaces.white })] }));
5159
+ return (jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsx("title", { children: "Checked radio button" }), jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, fill: disabled ? semanticColors.button.primary.bgDisabled : semanticColors.color.icon.active, stroke: disabled ? semanticColors.color.border.primary : semanticColors.color.icon.active, strokeWidth: "1" }), jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: innerRadius, fill: disabled ? semanticColors.color.icon.disabled : semanticColors.color.surface.raised })] }));
6043
5160
  };
6044
5161
  const RadioContainer = styled('label')(({ disabled }) => ({
6045
5162
  display: 'inline-flex',
@@ -6065,13 +5182,13 @@ const Label$1 = styled('span')(({ theme, size = 'medium' }) => ({
6065
5182
  fontSize: theme.typography.pxToRem(size === 'small' ? typography.fontSize.sm : typography.fontSize.default),
6066
5183
  fontWeight: typography.fontWeight.medium,
6067
5184
  lineHeight: size === 'small' ? 1.4 : 1.5,
6068
- color: semanticColors.typography.input.default,
5185
+ color: semanticColors.color.text.input,
6069
5186
  }));
6070
5187
  const HelperText$1 = styled('span')(({ theme, size = 'medium' }) => ({
6071
5188
  fontSize: theme.typography.pxToRem(size === 'small' ? typography.fontSize.sm : typography.fontSize.default),
6072
5189
  fontWeight: typography.fontWeight.regular,
6073
5190
  lineHeight: size === 'small' ? 1.4 : 1.5,
6074
- color: semanticColors.typography.bodySecondary,
5191
+ color: semanticColors.color.text.secondary,
6075
5192
  }));
6076
5193
  const StyledRadio = styled(Radio, {
6077
5194
  shouldForwardProp: prop => prop !== 'size',
@@ -6084,9 +5201,9 @@ const StyledRadio = styled(Radio, {
6084
5201
  height: dimensions,
6085
5202
  flexShrink: 0,
6086
5203
  borderRadius: radius,
6087
- color: semanticColors.border.strong,
5204
+ color: semanticColors.color.border.strong,
6088
5205
  [`&.${radioClasses.checked}`]: {
6089
- color: semanticColors.icons.active,
5206
+ color: semanticColors.color.icon.active,
6090
5207
  },
6091
5208
  '&:hover': {
6092
5209
  backgroundColor: 'transparent',
@@ -6099,7 +5216,7 @@ const StyledRadio = styled(Radio, {
6099
5216
  // Focus state for keyboard navigation
6100
5217
  [`&.${buttonBaseClasses.focusVisible}`]: {
6101
5218
  // Unchecked focus state: white background
6102
- backgroundColor: semanticColors.surfaces.white,
5219
+ backgroundColor: semanticColors.color.surface.raised,
6103
5220
  // Checked focus state: keep the blue circle visible
6104
5221
  [`&.${radioClasses.checked}`]: {
6105
5222
  backgroundColor: 'transparent',
@@ -6107,9 +5224,9 @@ const StyledRadio = styled(Radio, {
6107
5224
  },
6108
5225
  // Disabled state — icons handle their own disabled colors
6109
5226
  [`&.${radioClasses.disabled}`]: {
6110
- color: semanticColors.border.primary,
5227
+ color: semanticColors.color.border.primary,
6111
5228
  [`&.${radioClasses.checked}`]: {
6112
- color: semanticColors.border.primary,
5229
+ color: semanticColors.color.border.primary,
6113
5230
  },
6114
5231
  },
6115
5232
  };
@@ -6159,11 +5276,6 @@ const ModRadio = ({ size = 'medium', label, helperText, disabled, ...props }) =>
6159
5276
  };
6160
5277
  ModRadio.displayName = 'ModRadio';
6161
5278
 
6162
- /**
6163
- * ModRadioButtonWithText
6164
- */
6165
- const ModRadioButtonWithText = styled('div')({});
6166
-
6167
5279
  // Box-breathing rhythm: appear (inhale) → hold → expand+fade (exhale) → rest.
6168
5280
  // Max scale is capped so the ring fits within a parent row's line-height.
6169
5281
  const ripple = keyframes `
@@ -6208,15 +5320,15 @@ ModRipplingDot.displayName = 'ModRipplingDot';
6208
5320
 
6209
5321
  const StyledSearchChip = styled(InputBase)(({ theme }) => ({
6210
5322
  borderRadius: borderRadius.button,
6211
- border: `1px solid ${semanticColors.border.primary}`,
6212
- backgroundColor: semanticColors.surfaces.white,
5323
+ border: `1px solid ${semanticColors.color.border.primary}`,
5324
+ backgroundColor: semanticColors.color.surface.raised,
6213
5325
  height: 40,
6214
5326
  padding: `0 ${spacing.spacing_1_1_2}px`,
6215
5327
  gap: spacing.spacing_1_2,
6216
5328
  fontSize: theme.typography.pxToRem(typography.fontSize.sm),
6217
5329
  fontWeight: typography.fontWeight.medium,
6218
5330
  lineHeight: 1,
6219
- color: semanticColors.typography.input.default,
5331
+ color: semanticColors.color.text.input,
6220
5332
  cursor: 'text',
6221
5333
  boxSizing: 'border-box',
6222
5334
  transition: theme.transitions.create(['border-color', 'background-color'], {
@@ -6227,7 +5339,7 @@ const StyledSearchChip = styled(InputBase)(({ theme }) => ({
6227
5339
  height: 'auto',
6228
5340
  lineHeight: 1,
6229
5341
  '&::placeholder': {
6230
- color: semanticColors.typography.input.placeholder,
5342
+ color: semanticColors.color.text.inputPlaceholder,
6231
5343
  opacity: 1,
6232
5344
  },
6233
5345
  // Hide native browser clear button for type="search" (we provide our own)
@@ -6236,22 +5348,22 @@ const StyledSearchChip = styled(InputBase)(({ theme }) => ({
6236
5348
  },
6237
5349
  },
6238
5350
  '&:hover': {
6239
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
6240
- borderColor: semanticColors.accent.border,
5351
+ backgroundColor: semanticColors.button.secondary.bgHover,
5352
+ borderColor: semanticColors.color.action.border,
6241
5353
  },
6242
5354
  // After `&:hover` so a disabled chip takes no hover feedback -- MUI leaves pointer-events
6243
5355
  // live on the disabled root, so `&:hover` matches it too.
6244
5356
  [`&.${inputBaseClasses.disabled}`]: {
6245
- backgroundColor: semanticColors.surfaces.white,
6246
- borderColor: semanticColors.border.primary,
5357
+ backgroundColor: semanticColors.color.surface.raised,
5358
+ borderColor: semanticColors.color.border.primary,
6247
5359
  },
6248
5360
  // A tint hugging the border, not focusRingStyles' detached ring: even :focus-visible matches a
6249
5361
  // clicked text input, so this has to stay calm. Keep below `&:hover` -- equal specificity, so
6250
5362
  // source order is what keeps a hovered+focused chip white.
6251
5363
  [`&.${inputBaseClasses.focused}`]: {
6252
- backgroundColor: semanticColors.surfaces.white,
6253
- borderColor: semanticColors.border.focus,
6254
- outline: `3px solid ${semanticColors.accent.tint}`,
5364
+ backgroundColor: semanticColors.color.surface.raised,
5365
+ borderColor: semanticColors.color.border.focus,
5366
+ outline: `3px solid ${semanticColors.color.action.tint}`,
6255
5367
  },
6256
5368
  }));
6257
5369
  const ClearButton = styled(ButtonBase)({
@@ -6264,11 +5376,11 @@ const ClearButton = styled(ButtonBase)({
6264
5376
  border: 'none',
6265
5377
  backgroundColor: 'transparent',
6266
5378
  cursor: 'pointer',
6267
- color: semanticColors.icons.default,
5379
+ color: semanticColors.color.icon.default,
6268
5380
  flexShrink: 0,
6269
5381
  borderRadius: borderRadius.button,
6270
5382
  '&:hover': {
6271
- backgroundColor: semanticColors.buttons.secondary.hoverBackground,
5383
+ backgroundColor: semanticColors.button.secondary.bgHover,
6272
5384
  },
6273
5385
  });
6274
5386
  /**
@@ -6279,7 +5391,7 @@ const ClearButton = styled(ButtonBase)({
6279
5391
  */
6280
5392
  const ModSearchChip = ({ onClear, value, ...props }) => {
6281
5393
  const hasValue = Boolean(value && String(value).length > 0);
6282
- return (jsx(StyledSearchChip, { type: "search", value: value, startAdornment: jsx(Search, { size: 16, color: semanticColors.icons.placeholder, style: { flexShrink: 0 } }), endAdornment: hasValue && onClear ? (jsx(ClearButton, { type: "button", onClick: onClear, "aria-label": "Clear search", children: jsx(X, { size: 16 }) })) : undefined, ...props }));
5394
+ return (jsx(StyledSearchChip, { type: "search", value: value, startAdornment: jsx(Search, { size: 16, color: semanticColors.color.icon.placeholder, style: { flexShrink: 0 } }), endAdornment: hasValue && onClear ? (jsx(ClearButton, { type: "button", onClick: onClear, "aria-label": "Clear search", children: jsx(X, { size: 16 }) })) : undefined, ...props }));
6283
5395
  };
6284
5396
  ModSearchChip.displayName = 'ModSearchChip';
6285
5397
 
@@ -6313,7 +5425,7 @@ const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : us
6313
5425
  const EXPANDED_WIDTH = 98;
6314
5426
  const COLLAPSED_WIDTH = 68;
6315
5427
  // The fade overlay must end on the same color as the rail to blend cleanly.
6316
- const RAIL_BACKGROUND = semanticColors.surfaces.page;
5428
+ const RAIL_BACKGROUND = semanticColors.color.surface.page;
6317
5429
  // Unclipped positioning context so the edge handle can straddle the rail's
6318
5430
  // trailing edge (Root itself clips its overflow during the width transition).
6319
5431
  const Frame = styled('div', {
@@ -6424,12 +5536,12 @@ const Handle = styled(ButtonBase)(({ theme }) => ({
6424
5536
  height: spacing.spacing_5,
6425
5537
  borderRadius: borderRadius.s,
6426
5538
  backgroundColor: RAIL_BACKGROUND,
6427
- border: `1px solid ${semanticColors.border.secondary}`,
6428
- color: semanticColors.typography.bodySecondary,
5539
+ border: `1px solid ${semanticColors.color.border.primary}`,
5540
+ color: semanticColors.color.text.secondary,
6429
5541
  transition: theme.transitions.create(['color', 'border-color']),
6430
5542
  '&:hover': {
6431
- color: semanticColors.typography.body,
6432
- borderColor: semanticColors.border.primary,
5543
+ color: semanticColors.color.text.primary,
5544
+ borderColor: semanticColors.color.border.primary,
6433
5545
  },
6434
5546
  }));
6435
5547
  /**
@@ -6516,7 +5628,7 @@ const StyledSkeleton = styled(Skeleton, {
6516
5628
  transform: 'none',
6517
5629
  // Light theme colors
6518
5630
  ...(colorTheme === 'light' && {
6519
- backgroundColor: semanticColors.skeleton.background,
5631
+ backgroundColor: semanticColors.skeleton.bg,
6520
5632
  '&::after': {
6521
5633
  background: `linear-gradient(90deg, transparent, ${semanticColors.skeleton.wave}, transparent)`,
6522
5634
  },
@@ -6563,23 +5675,23 @@ const StyledTable = styled(MuiTable, {
6563
5675
  borderCollapse: 'separate',
6564
5676
  borderSpacing: 0,
6565
5677
  [`& .${tableCellClasses.head}`]: {
6566
- backgroundColor: semanticColors.surfaces.dataGrid.header,
6567
- color: semanticColors.typography.body,
5678
+ backgroundColor: semanticColors.color.surface.dataGrid.header,
5679
+ color: semanticColors.color.text.primary,
6568
5680
  fontFamily: typography.fontFamily.body,
6569
5681
  fontSize: theme.typography.pxToRem(sizeFontSize[tableSize]),
6570
5682
  fontWeight: typography.fontWeight.semiBold,
6571
5683
  lineHeight: 1.4,
6572
5684
  padding: sizePadding[tableSize],
6573
- borderBottom: `1px solid ${semanticColors.border.secondary}`,
5685
+ borderBottom: `1px solid ${semanticColors.color.border.primary}`,
6574
5686
  },
6575
5687
  [`& .${tableCellClasses.body}`]: {
6576
- color: semanticColors.typography.body,
5688
+ color: semanticColors.color.text.primary,
6577
5689
  fontFamily: typography.fontFamily.body,
6578
5690
  fontSize: theme.typography.pxToRem(sizeFontSize[tableSize]),
6579
5691
  fontWeight: typography.fontWeight.regular,
6580
5692
  lineHeight: 1.4,
6581
5693
  padding: sizePadding[tableSize],
6582
- borderBottom: `1px solid ${semanticColors.border.secondary}`,
5694
+ borderBottom: `1px solid ${semanticColors.color.border.primary}`,
6583
5695
  },
6584
5696
  // Drop the trailing row's bottom border so the container border (if
6585
5697
  // any) is the visual edge.
@@ -6591,10 +5703,10 @@ const StyledContainer = styled('div', {
6591
5703
  shouldForwardProp: prop => prop !== 'tableVariant',
6592
5704
  })(({ tableVariant = 'bordered' }) => tableVariant === 'bordered'
6593
5705
  ? {
6594
- border: `1px solid ${semanticColors.border.secondary}`,
5706
+ border: `1px solid ${semanticColors.color.border.primary}`,
6595
5707
  borderRadius: borderRadius.card,
6596
5708
  overflow: 'hidden',
6597
- backgroundColor: semanticColors.surfaces.white,
5709
+ backgroundColor: semanticColors.color.surface.raised,
6598
5710
  }
6599
5711
  : { backgroundColor: 'transparent' });
6600
5712
  /**
@@ -6622,7 +5734,7 @@ ModTable.displayName = 'ModTable';
6622
5734
  const StyledTabPanel = styled(Box, {
6623
5735
  shouldForwardProp: prop => prop !== 'tabPanelVariant',
6624
5736
  })(({ tabPanelVariant = 'default' }) => ({
6625
- backgroundColor: semanticColors.surfaces.white,
5737
+ backgroundColor: semanticColors.color.surface.raised,
6626
5738
  // default: 16px top padding for content-driven pages.
6627
5739
  // flush: zero padding so content sits directly against the tab bar's
6628
5740
  // bottom border (sidebars, panels, builders, canvases).
@@ -6660,7 +5772,7 @@ ModTabPanel.displayName = 'ModTabPanel';
6660
5772
  const ModTabs = styled(MuiTabs)(() => ({
6661
5773
  minHeight: spacing.spacing_5,
6662
5774
  [`& .${tabsClasses.indicator}`]: {
6663
- backgroundColor: semanticColors.buttons.navigation.activeBorder,
5775
+ backgroundColor: semanticColors.button.nav.borderActive,
6664
5776
  height: 2,
6665
5777
  },
6666
5778
  [`& .${tabsClasses.list}`]: {
@@ -6675,14 +5787,21 @@ const StyledTab = styled(MuiTab)(({ theme }) => ({
6675
5787
  fontWeight: typography.fontWeight.regular,
6676
5788
  fontSize: theme.typography.pxToRem(14),
6677
5789
  lineHeight: '1.5rem',
6678
- color: semanticColors.typography.tab.inactive,
5790
+ color: semanticColors.color.text.tabInactive,
6679
5791
  transition: 'none', // Remove animation
5792
+ // The count stays a step quieter than the label, but on secondary text ink
5793
+ // rather than ModTag's neutral status ink. That one is tuned for standalone
5794
+ // badges and is a warm grey: in dark mode it lands #aca598 beside an #f1f0ea
5795
+ // label and reads as disabled rather than as secondary.
5796
+ [`& .${chipClasses.root}`]: {
5797
+ color: semanticColors.color.text.secondary,
5798
+ },
6680
5799
  [`&.${tabClasses.selected}`]: {
6681
- color: semanticColors.typography.tab.active,
5800
+ color: semanticColors.color.text.tabActive,
6682
5801
  fontWeight: typography.fontWeight.semiBold,
6683
5802
  },
6684
5803
  '&:hover': {
6685
- color: semanticColors.typography.tab.active,
5804
+ color: semanticColors.color.text.tabActive,
6686
5805
  [`&.${tabClasses.selected}::after`]: {
6687
5806
  content: '""',
6688
5807
  position: 'absolute',
@@ -6690,23 +5809,26 @@ const StyledTab = styled(MuiTab)(({ theme }) => ({
6690
5809
  left: 0,
6691
5810
  right: 0,
6692
5811
  height: 2,
6693
- backgroundColor: semanticColors.buttons.navigation.activeBorder,
5812
+ backgroundColor: semanticColors.button.nav.borderActive,
6694
5813
  },
6695
5814
  },
6696
5815
  [`&.${buttonBaseClasses.focusVisible}`]: {
6697
- color: semanticColors.typography.tab.active,
6698
- outline: `2px solid ${semanticColors.border.focus}`,
5816
+ color: semanticColors.color.text.tabActive,
5817
+ outline: `2px solid ${semanticColors.color.border.focus}`,
6699
5818
  outlineOffset: -2,
6700
5819
  },
6701
5820
  [`&.${tabClasses.disabled}`]: {
6702
- color: semanticColors.typography.button.disabled,
5821
+ color: semanticColors.button.fgDisabled,
6703
5822
  cursor: 'not-allowed',
6704
5823
  pointerEvents: 'auto',
5824
+ [`& .${chipClasses.root}`]: {
5825
+ color: semanticColors.color.text.tabDisabled,
5826
+ },
6705
5827
  '&:hover': {
6706
5828
  backgroundColor: 'transparent',
6707
5829
  },
6708
5830
  [`&.${tabClasses.selected}`]: {
6709
- color: semanticColors.typography.button.disabled,
5831
+ color: semanticColors.button.fgDisabled,
6710
5832
  '&::after': {
6711
5833
  content: '""',
6712
5834
  position: 'absolute',
@@ -6714,7 +5836,7 @@ const StyledTab = styled(MuiTab)(({ theme }) => ({
6714
5836
  left: 0,
6715
5837
  right: 0,
6716
5838
  height: 2,
6717
- backgroundColor: semanticColors.buttons.tertiary.disabled,
5839
+ backgroundColor: semanticColors.button.tertiary.fgDisabled,
6718
5840
  },
6719
5841
  },
6720
5842
  },
@@ -6735,34 +5857,34 @@ ModTab.displayName = 'ModTab';
6735
5857
 
6736
5858
  const intentStyles = {
6737
5859
  neutral: {
6738
- background: semanticColors.status.neutral.light,
6739
- border: semanticColors.border.primary,
6740
- text: semanticColors.status.neutral.dark,
6741
- action: semanticColors.typography.link.default,
5860
+ background: semanticColors.color.status.neutral.bg,
5861
+ border: semanticColors.color.border.primary,
5862
+ text: semanticColors.color.status.neutral.fg,
5863
+ action: semanticColors.color.text.link,
6742
5864
  },
6743
5865
  info: {
6744
- background: semanticColors.toast.infoBg,
6745
- border: semanticColors.toast.infoBorder,
6746
- text: semanticColors.toast.infoText,
6747
- action: semanticColors.toast.infoText,
5866
+ background: semanticColors.toast.info.bg,
5867
+ border: semanticColors.toast.info.border,
5868
+ text: semanticColors.toast.info.fg,
5869
+ action: semanticColors.toast.info.fg,
6748
5870
  },
6749
5871
  success: {
6750
- background: semanticColors.toast.successBg,
6751
- border: semanticColors.toast.successBorder,
6752
- text: semanticColors.toast.successText,
6753
- action: semanticColors.toast.successText,
5872
+ background: semanticColors.toast.success.bg,
5873
+ border: semanticColors.toast.success.border,
5874
+ text: semanticColors.toast.success.fg,
5875
+ action: semanticColors.toast.success.fg,
6754
5876
  },
6755
5877
  error: {
6756
- background: semanticColors.toast.errorBg,
6757
- border: semanticColors.toast.errorBorder,
6758
- text: semanticColors.toast.errorText,
6759
- action: semanticColors.toast.errorText,
5878
+ background: semanticColors.toast.error.bg,
5879
+ border: semanticColors.toast.error.border,
5880
+ text: semanticColors.toast.error.fg,
5881
+ action: semanticColors.toast.error.fg,
6760
5882
  },
6761
5883
  warning: {
6762
- background: semanticColors.toast.warningBg,
6763
- border: semanticColors.toast.warningBorder,
6764
- text: semanticColors.toast.warningText,
6765
- action: semanticColors.toast.warningText,
5884
+ background: semanticColors.toast.warning.bg,
5885
+ border: semanticColors.toast.warning.border,
5886
+ text: semanticColors.toast.warning.fg,
5887
+ action: semanticColors.toast.warning.fg,
6766
5888
  },
6767
5889
  };
6768
5890
  const shadowRegular = shadows.neutral.regular;
@@ -6837,7 +5959,7 @@ const ToastButton = styled(Button, {
6837
5959
  * ModToast - Notification/Toast component based on MUI Alert
6838
5960
  */
6839
5961
  const ModToast = ({ intent = 'neutral', type: _type, title, message, showClose = false, actions, onClose, ...props }) => {
6840
- return (jsxs(StyledAlert, { ...props, intent: intent, action: showClose ? (jsx(IconButton, { size: "small", onClick: onClose, sx: { color: semanticColors.icons.utility }, children: jsx(X, { size: 16 }) })) : undefined, children: [jsxs(Stack, { sx: { gap: `${spacing.spacing_1}px`, width: '100%' }, children: [title && jsx(ToastTitle, { intent: intent, children: title }), message && jsx(ToastMessage, { intent: intent, children: message })] }), actions && jsx(ToastActions, { direction: "row", children: actions })] }));
5962
+ return (jsxs(StyledAlert, { ...props, intent: intent, action: showClose ? (jsx(IconButton, { size: "small", onClick: onClose, sx: { color: semanticColors.color.icon.utility }, children: jsx(X, { size: 16 }) })) : undefined, children: [jsxs(Stack, { sx: { gap: `${spacing.spacing_1}px`, width: '100%' }, children: [title && jsx(ToastTitle, { intent: intent, children: title }), message && jsx(ToastMessage, { intent: intent, children: message })] }), actions && jsx(ToastActions, { direction: "row", children: actions })] }));
6841
5963
  };
6842
5964
  /**
6843
5965
  * Helper component for creating toast action buttons with proper styling
@@ -6864,13 +5986,13 @@ const Label = styled('span')(({ theme, size = 'medium' }) => ({
6864
5986
  fontSize: theme.typography.pxToRem(size === 'small' ? typography.fontSize.sm : typography.fontSize.default),
6865
5987
  fontWeight: typography.fontWeight.medium,
6866
5988
  lineHeight: size === 'small' ? 1.4 : 1.5,
6867
- color: semanticColors.typography.input.default,
5989
+ color: semanticColors.color.text.input,
6868
5990
  }));
6869
5991
  const HelperText = styled('span')(({ theme, size = 'medium' }) => ({
6870
5992
  fontSize: theme.typography.pxToRem(size === 'small' ? typography.fontSize.sm : typography.fontSize.default),
6871
5993
  fontWeight: typography.fontWeight.regular,
6872
5994
  lineHeight: size === 'small' ? 1.4 : 1.5,
6873
- color: semanticColors.typography.bodySecondary,
5995
+ color: semanticColors.color.text.secondary,
6874
5996
  }));
6875
5997
  const StyledSwitch = styled(Switch, {
6876
5998
  shouldForwardProp: prop => prop !== 'size',
@@ -6903,23 +6025,23 @@ const StyledSwitch = styled(Switch, {
6903
6025
  // Root element
6904
6026
  [`& .${switchClasses.switchBase}`]: {
6905
6027
  padding: config.trackPadding,
6906
- color: semanticColors.surfaces.toggleKnob,
6028
+ color: semanticColors.control.knob,
6907
6029
  transition: theme.transitions.create(['transform'], {
6908
6030
  duration: theme.transitions.duration.shortest,
6909
6031
  }),
6910
6032
  // Focus visible for keyboard navigation
6911
6033
  '&.Mui-focusVisible': {
6912
6034
  [`& + .${switchClasses.track}`]: {
6913
- outline: `2px solid ${semanticColors.border.focus}`,
6035
+ outline: `2px solid ${semanticColors.color.border.focus}`,
6914
6036
  outlineOffset: 2,
6915
6037
  },
6916
6038
  },
6917
6039
  // Checked state
6918
6040
  [`&.${switchClasses.checked}`]: {
6919
6041
  transform: `translateX(${thumbTranslate}px)`,
6920
- color: semanticColors.surfaces.toggleKnob,
6042
+ color: semanticColors.control.knob,
6921
6043
  [`& + .${switchClasses.track}`]: {
6922
- backgroundColor: semanticColors.buttons.primary.default,
6044
+ backgroundColor: semanticColors.button.primary.bg,
6923
6045
  opacity: 1,
6924
6046
  border: 'none',
6925
6047
  },
@@ -6927,18 +6049,18 @@ const StyledSwitch = styled(Switch, {
6927
6049
  // Disabled state
6928
6050
  [`&.${switchClasses.disabled}`]: {
6929
6051
  // Thumb changes to disabled background color for both checked and unchecked
6930
- color: semanticColors.input.disabledBackground,
6052
+ color: semanticColors.input.bgDisabled,
6931
6053
  cursor: 'not-allowed',
6932
6054
  // Both checked and unchecked use the same grey track when disabled
6933
6055
  [`& + .${switchClasses.track}`]: {
6934
- backgroundColor: semanticColors.border.secondary,
6056
+ backgroundColor: semanticColors.color.border.primary,
6935
6057
  opacity: 1,
6936
6058
  border: 'none',
6937
6059
  },
6938
6060
  },
6939
6061
  // More specific selector for disabled+checked to override checked color
6940
6062
  [`&.${switchClasses.disabled}.${switchClasses.checked}`]: {
6941
- color: semanticColors.input.disabledBackground,
6063
+ color: semanticColors.input.bgDisabled,
6942
6064
  },
6943
6065
  },
6944
6066
  // Thumb
@@ -6955,12 +6077,12 @@ const StyledSwitch = styled(Switch, {
6955
6077
  width: config.width,
6956
6078
  height: config.height,
6957
6079
  borderRadius: config.height / 2,
6958
- backgroundColor: semanticColors.surface.sunken2,
6080
+ backgroundColor: semanticColors.color.surface.sunkenDeep,
6959
6081
  opacity: 1,
6960
6082
  // Off track carries a border; box-sizing keeps the 1px inside the
6961
6083
  // configured width/height. Checked/disabled states reset it below.
6962
6084
  boxSizing: 'border-box',
6963
- border: `1px solid ${semanticColors.border.strong}`,
6085
+ border: `1px solid ${semanticColors.color.border.strong}`,
6964
6086
  transition: theme.transitions.create(['background-color'], {
6965
6087
  duration: theme.transitions.duration.short,
6966
6088
  }),
@@ -7021,7 +6143,7 @@ const StyledToggleButton$1 = styled(MuiToggleButton, {
7021
6143
  fontSize: theme.typography.pxToRem(sizeStyles[toggleSize].fontSize),
7022
6144
  fontWeight: typography.fontWeight.regular,
7023
6145
  lineHeight: 1,
7024
- color: segmented ? semanticColors.typography.body : semanticColors.typography.bodySecondary,
6146
+ color: segmented ? semanticColors.color.text.primary : semanticColors.color.text.secondary,
7025
6147
  backgroundColor: 'transparent',
7026
6148
  border: 'none',
7027
6149
  // Segmented buttons are independent rounded pills on the group's track.
@@ -7031,22 +6153,22 @@ const StyledToggleButton$1 = styled(MuiToggleButton, {
7031
6153
  duration: theme.transitions.duration.short,
7032
6154
  }),
7033
6155
  '&:hover': {
7034
- backgroundColor: segmented ? 'transparent' : semanticColors.surfaces.tabActive,
7035
- color: semanticColors.typography.body,
6156
+ backgroundColor: segmented ? 'transparent' : semanticColors.color.surface.tabActive,
6157
+ color: semanticColors.color.text.primary,
7036
6158
  },
7037
6159
  '&.Mui-selected, &.Mui-selected:hover': {
7038
6160
  backgroundColor: segmented
7039
- ? semanticColors.surfaces.card
7040
- : semanticColors.surfaces.tabActive,
7041
- color: segmented ? semanticColors.accent.default : semanticColors.typography.body,
6161
+ ? semanticColors.color.surface.raised
6162
+ : semanticColors.color.surface.tabActive,
6163
+ color: segmented ? semanticColors.color.action.default : semanticColors.color.text.primary,
7042
6164
  fontWeight: typography.fontWeight.semiBold,
7043
6165
  },
7044
6166
  '&.Mui-focusVisible': {
7045
- outline: `2px solid ${semanticColors.border.focus}`,
6167
+ outline: `2px solid ${semanticColors.color.border.focus}`,
7046
6168
  outlineOffset: -2,
7047
6169
  },
7048
6170
  '&.Mui-disabled': {
7049
- color: semanticColors.typography.button.disabled,
6171
+ color: semanticColors.button.fgDisabled,
7050
6172
  cursor: 'default',
7051
6173
  pointerEvents: 'none',
7052
6174
  },
@@ -7070,7 +6192,7 @@ const StyledToggleButtonGroup$1 = styled(MuiToggleButtonGroup, {
7070
6192
  ...(segmented
7071
6193
  ? {
7072
6194
  // Sunken track holding raised pills (the Morpheus `.seg` control).
7073
- backgroundColor: semanticColors.surface.sunken2,
6195
+ backgroundColor: semanticColors.color.surface.sunkenDeep,
7074
6196
  borderRadius: borderRadius.input,
7075
6197
  border: 'none',
7076
6198
  padding: spacing.spacing_1_2,
@@ -7078,7 +6200,7 @@ const StyledToggleButtonGroup$1 = styled(MuiToggleButtonGroup, {
7078
6200
  }
7079
6201
  : {
7080
6202
  borderRadius: borderRadius.button,
7081
- border: `1px solid ${semanticColors.border.secondary}`,
6203
+ border: `1px solid ${semanticColors.color.border.primary}`,
7082
6204
  overflow: 'hidden',
7083
6205
  }),
7084
6206
  // Default fuses the children (square inner corners, no gap); segmented
@@ -7111,13 +6233,8 @@ const ModToggleButtonGroup = ({ size = 'medium', variant = 'default', children,
7111
6233
  };
7112
6234
  ModToggleButtonGroup.displayName = 'ModToggleButtonGroup';
7113
6235
 
7114
- /**
7115
- * ModToggleButtonWithText
7116
- */
7117
- const ModToggleButtonWithText = styled('div')({});
7118
-
7119
6236
  const StyledToolbar = styled(Toolbar)(({ theme }) => ({
7120
- backgroundColor: semanticColors.surfaces.white,
6237
+ backgroundColor: semanticColors.color.surface.raised,
7121
6238
  minHeight: 'auto',
7122
6239
  justifyContent: 'space-between',
7123
6240
  // Apply padding directly to match Figma design (16px horizontal, 12px vertical)
@@ -7173,16 +6290,6 @@ const ModToolbar = ({ children, ...props }) => {
7173
6290
  };
7174
6291
  ModToolbar.displayName = 'ModToolbar';
7175
6292
 
7176
- /**
7177
- * ModTopNav
7178
- */
7179
- const ModTopNav = styled('div')({});
7180
-
7181
- /**
7182
- * ModTourModal
7183
- */
7184
- const ModTourModal = styled('div')({});
7185
-
7186
6293
  /**
7187
6294
  * Custom label component that reads extra slot data from the item model.
7188
6295
  * Used as `slots.label` on the TreeItem.
@@ -7220,7 +6327,7 @@ const ItemIcon = styled('span')({
7220
6327
  width: 16,
7221
6328
  height: 16,
7222
6329
  flexShrink: 0,
7223
- color: semanticColors.icons.default,
6330
+ color: semanticColors.color.icon.default,
7224
6331
  '& svg': {
7225
6332
  width: 16,
7226
6333
  height: 16,
@@ -7238,13 +6345,13 @@ const ItemSecondaryLabel = styled('span')({
7238
6345
  fontSize: typography.fontSize.xs,
7239
6346
  fontWeight: typography.fontWeight.regular,
7240
6347
  fontFamily: typography.fontFamily.body,
7241
- color: semanticColors.typography.link.primary,
6348
+ color: semanticColors.color.text.link,
7242
6349
  });
7243
6350
  const ItemEndAction = styled('span')({
7244
6351
  display: 'inline-flex',
7245
6352
  alignItems: 'center',
7246
6353
  flexShrink: 0,
7247
- color: semanticColors.icons.utility,
6354
+ color: semanticColors.color.icon.utility,
7248
6355
  '& svg': {
7249
6356
  width: 16,
7250
6357
  height: 16,
@@ -7280,36 +6387,36 @@ const StyledTreeView = styled(RichTreeViewPro)({
7280
6387
  borderRadius: 0,
7281
6388
  },
7282
6389
  [`& .${treeItemClasses.content}:hover`]: {
7283
- backgroundColor: semanticColors.surfaces.listHover,
6390
+ backgroundColor: semanticColors.color.surface.rowHover,
7284
6391
  },
7285
6392
  [`& .${treeItemClasses.content}[data-focused]`]: {
7286
- boxShadow: `inset 0 0 0 2px ${semanticColors.border.focus}`,
6393
+ boxShadow: `inset 0 0 0 2px ${semanticColors.color.border.focus}`,
7287
6394
  backgroundColor: 'transparent',
7288
6395
  },
7289
6396
  [`& .${treeItemClasses.content}[data-selected]`]: {
7290
- backgroundColor: semanticColors.surfaces.listHover,
6397
+ backgroundColor: semanticColors.color.surface.rowHover,
7291
6398
  },
7292
6399
  [`& .${treeItemClasses.content}[data-selected][data-focused]`]: {
7293
- backgroundColor: semanticColors.surfaces.listHover,
7294
- boxShadow: `inset 0 0 0 2px ${semanticColors.border.focus}`,
6400
+ backgroundColor: semanticColors.color.surface.rowHover,
6401
+ boxShadow: `inset 0 0 0 2px ${semanticColors.color.border.focus}`,
7295
6402
  },
7296
6403
  [`& .${treeItemClasses.label}`]: {
7297
6404
  fontSize: typography.fontSize.xs,
7298
6405
  fontWeight: typography.fontWeight.regular,
7299
6406
  fontFamily: typography.fontFamily.body,
7300
- color: semanticColors.typography.body,
6407
+ color: semanticColors.color.text.primary,
7301
6408
  padding: 0,
7302
6409
  },
7303
6410
  [`& .${treeItemClasses.iconContainer}`]: {
7304
6411
  width: 16,
7305
- color: semanticColors.icons.default,
6412
+ color: semanticColors.color.icon.default,
7306
6413
  '& svg': {
7307
6414
  width: 16,
7308
6415
  height: 16,
7309
6416
  },
7310
6417
  },
7311
6418
  [`& .${treeItemClasses.groupTransition}`]: {
7312
- borderLeft: `1px solid ${semanticColors.border.primary}`,
6419
+ borderLeft: `1px solid ${semanticColors.color.border.primary}`,
7313
6420
  marginLeft: spacing.spacing_1_1_4,
7314
6421
  },
7315
6422
  });
@@ -7317,7 +6424,7 @@ const StyledTreeView = styled(RichTreeViewPro)({
7317
6424
  // Figma-exact border radius for toggle buttons — no matching design token
7318
6425
  const TOGGLE_BUTTON_BORDER_RADIUS = 14;
7319
6426
  const StyledToggleButtonGroup = styled(MuiToggleButtonGroup)(({ theme }) => ({
7320
- backgroundColor: semanticColors.surfaces.card,
6427
+ backgroundColor: semanticColors.color.surface.raised,
7321
6428
  padding: theme.spacing(0.625, 0.875),
7322
6429
  borderRadius: borderRadius.m,
7323
6430
  gap: 0,
@@ -7337,7 +6444,7 @@ const StyledToggleButtonGroup = styled(MuiToggleButtonGroup)(({ theme }) => ({
7337
6444
  const StyledToggleButton = styled(MuiToggleButton)(({ theme }) => ({
7338
6445
  padding: theme.spacing(0.625),
7339
6446
  minWidth: 'auto',
7340
- color: semanticColors.icons.default,
6447
+ color: semanticColors.color.icon.default,
7341
6448
  border: 'none',
7342
6449
  '& svg': {
7343
6450
  width: 20,
@@ -7347,10 +6454,10 @@ const StyledToggleButton = styled(MuiToggleButton)(({ theme }) => ({
7347
6454
  backgroundColor: 'transparent',
7348
6455
  },
7349
6456
  [`&.${toggleButtonClasses.selected}`]: {
7350
- backgroundColor: semanticColors.buttons.navigation.pressedBackground,
7351
- color: semanticColors.icons.active,
6457
+ backgroundColor: semanticColors.button.nav.bgPressed,
6458
+ color: semanticColors.color.icon.active,
7352
6459
  '&:hover': {
7353
- backgroundColor: semanticColors.buttons.navigation.pressedBackground,
6460
+ backgroundColor: semanticColors.button.nav.bgPressed,
7354
6461
  },
7355
6462
  },
7356
6463
  }));
@@ -7410,5 +6517,5 @@ ModVibratingDot.displayName = 'ModVibratingDot';
7410
6517
 
7411
6518
  const version = '0.0.0-development';
7412
6519
 
7413
- export { ActivityScene, CIRCLE_RADIUS, ModActionsCell, ModActivityHeader, ModActivityIndicatorCell, ModAlert, ModAvatarCell, ModBadge, ModBanner, ModBreadcrumbLink, ModBreadcrumbs, ModButton, ModButtonTab, ModButtonTabGroup, ModCanceledIcon, ModCard, ModCheckbox, ModCheckboxWithText, ModCodeSnippet, ModDataGrid, ModDataGridCellContent, ModDataGridColumnsButton, ModDataGridColumnsPanel, ModDataGridFilterPanel, ModDataGridFilterPanelAddIcon, ModDataGridFilterPanelDeleteIcon, ModDataGridFilterPanelRemoveAllIcon, ModDataGridFiltersButton, ModDataGridHeaderLabel, ModSelect as ModDataGridSelect, ModDatePicker, ModDatePickerListItem, ModDatePickerMenu, ModDivider, ModDot, ModDownloadToast, ModSelect as ModDropdown, ModMenu as ModDropdownMenu, ModMenuItem as ModDropdownMenuItem, ModMenuItem as ModDropdownOption, ModFilledCanceled, ModFilledError, ModFilledInfo, ModFilledNeutral, ModFilledQueued, ModFilledSuccess, ModFilledWarning, ModFilterChip, ModFooter, ModGeneralAvatar, ModIconButton, ModIconCell, ModIconWrapper, ModInfiniteScrollGrid, ModInputField, ModListItem, ModListItemButton, ModLoadingSpinner, ModLogoCell, ModMenu, ModMenuItem, ModModal, ModModalContent, ModModalFooter, ModModalHeader, ModMultiBadgesCell, ModNavigationAvatar, ModNavigationItem, ModPageContent, ModPaginatedGrid, ModProgressCell, ModProgressbar, ModQuickFilter, ModRadio, ModRadioButtonWithText, ModRipplingDot, ModSearchChip, ModSelect, ModSelectField, ModMenuItem as ModSelectOption, ModSideNav, ModSkeleton, ModStatusBadgeCell, ModStatusCell, ModTab, ModTabPanel, ModTable, ModTabs, ModTag, ModToast, ModToastButton, ModToggle, ModToggleButton, ModToggleButtonGroup, ModToggleButtonWithText, ModToolbar, ModTooltip, ModTopNav, ModTourModal, ModTreeItem, ModTreeView, StyledToggleButton as ModTypologyButton, ModTypologyControl, ModUserAvatarCell, ModVibratingDot, SortedAscendingIcon, SortedDescendingIcon, UnsortedIcon, focusRingStyles, getDataGridHeaderStyles, getDataGridRowStyles, modRowHeights, version };
6520
+ export { ActivityScene, CIRCLE_RADIUS, ModActionsCell, ModActivityHeader, ModActivityIndicatorCell, ModAlert, ModAvatarCell, ModBadge, ModBanner, ModBreadcrumbLink, ModBreadcrumbs, ModButton, ModButtonTab, ModButtonTabGroup, ModCanceledIcon, ModCard, ModCheckbox, ModCheckboxWithText, ModCodeSnippet, ModDataGrid, ModDataGridCellContent, ModDataGridColumnsButton, ModDataGridColumnsPanel, ModDataGridFilterPanel, ModDataGridFilterPanelAddIcon, ModDataGridFilterPanelDeleteIcon, ModDataGridFilterPanelRemoveAllIcon, ModDataGridFiltersButton, ModDataGridHeaderLabel, ModDataGridSelect, ModDatePicker, ModDivider, ModDot, ModDownloadToast, ModSelect as ModDropdown, ModMenu as ModDropdownMenu, ModMenuItem as ModDropdownMenuItem, ModMenuItem as ModDropdownOption, ModFilledCanceled, ModFilledError, ModFilledInfo, ModFilledNeutral, ModFilledQueued, ModFilledSuccess, ModFilledWarning, ModFilterChip, ModFooter, ModGeneralAvatar, ModIconButton, ModIconCell, ModIconWrapper, ModInfiniteScrollGrid, ModInputField, ModListItem, ModListItemButton, ModLoadingSpinner, ModLogoCell, ModMenu, ModMenuItem, ModModal, ModModalContent, ModModalFooter, ModModalHeader, ModMultiBadgesCell, ModNavigationAvatar, ModNavigationItem, ModPageContent, ModPaginatedGrid, ModProgressCell, ModProgressbar, ModQuickFilter, ModRadio, ModRipplingDot, ModSearchChip, ModSelect, ModSelectField, ModMenuItem as ModSelectOption, ModSideNav, ModSkeleton, ModStatusBadgeCell, ModStatusCell, ModTab, ModTabPanel, ModTable, ModTabs, ModTag, ModToast, ModToastButton, ModToggle, ModToggleButton, ModToggleButtonGroup, ModToolbar, ModTooltip, ModTreeItem, ModTreeView, StyledToggleButton as ModTypologyButton, ModTypologyControl, ModUserAvatarCell, ModVibratingDot, SortedAscendingIcon, SortedDescendingIcon, UnsortedIcon, focusRingStyles, getDataGridHeaderStyles, getDataGridRowStyles, modRowHeights, version };
7414
6521
  //# sourceMappingURL=index.esm.js.map