myoperator-mcp 0.2.44 → 0.2.46

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.
Files changed (2) hide show
  1. package/dist/index.js +171 -171
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ const accordionVariants = cva("w-full", {
21
21
  variants: {
22
22
  variant: {
23
23
  default: "",
24
- bordered: "border border-[#E9EAEB] rounded-lg divide-y divide-[#E9EAEB]",
24
+ bordered: "border border-semantic-border-layout rounded-lg divide-y divide-semantic-border-layout",
25
25
  },
26
26
  },
27
27
  defaultVariants: {
@@ -48,12 +48,12 @@ const accordionItemVariants = cva("", {
48
48
  * Accordion trigger variants
49
49
  */
50
50
  const accordionTriggerVariants = cva(
51
- "flex w-full items-center justify-between text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#343E55] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
51
+ "flex w-full items-center justify-between text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
52
52
  {
53
53
  variants: {
54
54
  variant: {
55
55
  default: "py-3",
56
- bordered: "p-4 hover:bg-[#FAFAFA]",
56
+ bordered: "p-4 hover:bg-[var(--color-neutral-50)]",
57
57
  },
58
58
  },
59
59
  defaultVariants: {
@@ -291,7 +291,7 @@ const AccordionTrigger = React.forwardRef<
291
291
  {showChevron && (
292
292
  <ChevronDown
293
293
  className={cn(
294
- "h-4 w-4 shrink-0 text-[#717680] transition-transform duration-300",
294
+ "h-4 w-4 shrink-0 text-semantic-text-muted transition-transform duration-300",
295
295
  isOpen && "rotate-180"
296
296
  )}
297
297
  />
@@ -363,16 +363,16 @@ import { cn } from "@/lib/utils";
363
363
  * Colors are hardcoded for Bootstrap compatibility.
364
364
  */
365
365
  const alertVariants = cva(
366
- "relative w-full rounded border p-4 text-sm text-[#181D27] [&>svg~*]:pl-8 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4",
366
+ "relative w-full rounded border p-4 text-sm text-semantic-text-primary [&>svg~*]:pl-8 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4",
367
367
  {
368
368
  variants: {
369
369
  variant: {
370
- default: "bg-[#F5F5F5] border-[#E9EAEB] [&>svg]:text-[#181D27]",
371
- success: "bg-[#ECFDF3] border-[#17B26A]/20 [&>svg]:text-[#17B26A]",
372
- error: "bg-[#FEF3F2] border-[#F04438]/20 [&>svg]:text-[#F04438]",
373
- destructive: "bg-[#FEF3F2] border-[#F04438]/20 [&>svg]:text-[#F04438]",
374
- warning: "bg-[#FFFAEB] border-[#F79009]/20 [&>svg]:text-[#F79009]",
375
- info: "bg-[#EBF5FF] border-[#4275D6]/20 [&>svg]:text-[#4275D6]",
370
+ default: "bg-semantic-bg-ui border-semantic-border-layout [&>svg]:text-semantic-text-primary",
371
+ success: "bg-semantic-success-surface border-semantic-success-border [&>svg]:text-semantic-success-primary",
372
+ error: "bg-semantic-error-surface border-semantic-error-border [&>svg]:text-semantic-error-primary",
373
+ destructive: "bg-semantic-error-surface border-semantic-error-border [&>svg]:text-semantic-error-primary",
374
+ warning: "bg-semantic-warning-surface border-semantic-warning-border [&>svg]:text-semantic-warning-primary",
375
+ info: "bg-semantic-info-surface border-semantic-info-border [&>svg]:text-semantic-info-primary",
376
376
  },
377
377
  },
378
378
  defaultVariants: {
@@ -504,12 +504,12 @@ const Alert = React.forwardRef<HTMLDivElement, AlertProps>(
504
504
  onClick={handleClose}
505
505
  className={cn(
506
506
  "rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2",
507
- variant === "default" && "focus:ring-[#181D27]",
508
- variant === "success" && "focus:ring-[#17B26A]",
507
+ variant === "default" && "focus:ring-semantic-text-primary",
508
+ variant === "success" && "focus:ring-semantic-success-primary",
509
509
  (variant === "error" || variant === "destructive") &&
510
- "focus:ring-[#F04438]",
511
- variant === "warning" && "focus:ring-[#F79009]",
512
- variant === "info" && "focus:ring-[#4275D6]"
510
+ "focus:ring-semantic-error-primary",
511
+ variant === "warning" && "focus:ring-semantic-warning-primary",
512
+ variant === "info" && "focus:ring-semantic-info-primary"
513
513
  )}
514
514
  aria-label="Close alert"
515
515
  >
@@ -569,15 +569,15 @@ const badgeVariants = cva(
569
569
  variants: {
570
570
  variant: {
571
571
  // Status-based variants (existing)
572
- active: "bg-[#ECFDF3] text-[#17B26A]",
573
- failed: "bg-[#FEF3F2] text-[#F04438]",
574
- disabled: "bg-[#F5F5F5] text-[#717680]",
575
- default: "bg-[#F5F5F5] text-[#181D27]",
576
- primary: "bg-[#F5F5F5] text-[#181D27]",
572
+ active: "bg-semantic-success-surface text-semantic-success-primary",
573
+ failed: "bg-semantic-error-surface text-semantic-error-primary",
574
+ disabled: "bg-semantic-bg-ui text-semantic-text-muted",
575
+ default: "bg-semantic-bg-ui text-semantic-text-primary",
576
+ primary: "bg-semantic-bg-ui text-semantic-text-primary",
577
577
  // shadcn-style variants (new)
578
- secondary: "bg-[#F5F5F5] text-[#181D27]",
579
- outline: "border border-[#E9EAEB] bg-transparent text-[#181D27]",
580
- destructive: "bg-[#FEF3F2] text-[#F04438]",
578
+ secondary: "bg-semantic-bg-ui text-semantic-text-primary",
579
+ outline: "border border-semantic-border-layout bg-transparent text-semantic-text-primary",
580
+ destructive: "bg-semantic-error-surface text-semantic-error-primary",
581
581
  },
582
582
  size: {
583
583
  default: "px-3 py-1",
@@ -676,20 +676,20 @@ import { Loader2 } from "lucide-react";
676
676
  import { cn } from "@/lib/utils";
677
677
 
678
678
  const buttonVariants = cva(
679
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#343E55] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
679
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
680
680
  {
681
681
  variants: {
682
682
  variant: {
683
- default: "bg-[#343E55] text-white hover:bg-[#2F384D]",
684
- primary: "bg-[#343E55] text-white hover:bg-[#2F384D]",
685
- destructive: "bg-[#F04438] text-white hover:bg-[#D92D20]",
683
+ default: "bg-semantic-primary text-semantic-text-inverted hover:bg-semantic-primary-hover",
684
+ primary: "bg-semantic-primary text-semantic-text-inverted hover:bg-semantic-primary-hover",
685
+ destructive: "bg-semantic-error-primary text-semantic-text-inverted hover:bg-semantic-error-hover",
686
686
  outline:
687
- "border border-[#343E55] bg-transparent text-[#343E55] hover:bg-[#EBECEE]",
688
- secondary: "bg-[#EBECEE] text-[#343E55] hover:bg-[#D5D7DA]",
689
- ghost: "text-[#717680] hover:bg-[#F5F5F5] hover:text-[#181D27]",
690
- link: "text-[#343E55] underline-offset-4 hover:underline",
687
+ "border border-semantic-border-primary bg-transparent text-semantic-text-secondary hover:bg-semantic-primary-surface",
688
+ secondary: "bg-semantic-primary-surface text-semantic-text-secondary hover:bg-semantic-bg-hover",
689
+ ghost: "text-semantic-text-muted hover:bg-semantic-bg-ui hover:text-semantic-text-primary",
690
+ link: "text-semantic-text-secondary underline-offset-4 hover:underline",
691
691
  dashed:
692
- "border border-dashed border-[#D5D7DA] bg-transparent text-[#717680] hover:border-[#343E55] hover:text-[#343E55] hover:bg-[#FAFAFA]",
692
+ "border border-dashed border-semantic-bg-hover bg-transparent text-semantic-text-muted hover:border-semantic-border-primary hover:text-semantic-text-secondary hover:bg-[var(--color-neutral-50)]",
693
693
  },
694
694
  size: {
695
695
  default: "min-w-20 py-2.5 px-4 [&_svg]:size-4",
@@ -790,7 +790,7 @@ import { cn } from "@/lib/utils";
790
790
  * Checkbox box variants (the outer container)
791
791
  */
792
792
  const checkboxVariants = cva(
793
- "peer inline-flex items-center justify-center shrink-0 rounded border-2 transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#343E55] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-[#343E55] data-[state=checked]:border-[#343E55] data-[state=checked]:text-white data-[state=indeterminate]:bg-[#343E55] data-[state=indeterminate]:border-[#343E55] data-[state=indeterminate]:text-white data-[state=unchecked]:bg-white data-[state=unchecked]:border-[#E9EAEB] data-[state=unchecked]:hover:border-[#A4A7AE]",
793
+ "peer inline-flex items-center justify-center shrink-0 rounded border-2 transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-semantic-primary data-[state=checked]:border-semantic-primary data-[state=checked]:text-semantic-text-inverted data-[state=indeterminate]:bg-semantic-primary data-[state=indeterminate]:border-semantic-primary data-[state=indeterminate]:text-semantic-text-inverted data-[state=unchecked]:bg-semantic-bg-primary data-[state=unchecked]:border-semantic-border-input data-[state=unchecked]:hover:border-[var(--color-neutral-400)]",
794
794
  {
795
795
  variants: {
796
796
  size: {
@@ -922,7 +922,7 @@ const Checkbox = React.forwardRef<
922
922
  htmlFor={id}
923
923
  className={cn(
924
924
  labelSizeVariants({ size }),
925
- "text-[#181D27] cursor-pointer",
925
+ "text-semantic-text-primary cursor-pointer",
926
926
  disabled && "opacity-50 cursor-not-allowed",
927
927
  labelClassName
928
928
  )}
@@ -936,7 +936,7 @@ const Checkbox = React.forwardRef<
936
936
  htmlFor={id}
937
937
  className={cn(
938
938
  labelSizeVariants({ size }),
939
- "text-[#181D27] cursor-pointer",
939
+ "text-semantic-text-primary cursor-pointer",
940
940
  disabled && "opacity-50 cursor-not-allowed",
941
941
  labelClassName
942
942
  )}
@@ -960,7 +960,7 @@ const Checkbox = React.forwardRef<
960
960
  <span
961
961
  className={cn(
962
962
  labelSizeVariants({ size }),
963
- "text-[#181D27]",
963
+ "text-semantic-text-primary",
964
964
  disabled && "opacity-50",
965
965
  labelClassName
966
966
  )}
@@ -973,7 +973,7 @@ const Checkbox = React.forwardRef<
973
973
  <span
974
974
  className={cn(
975
975
  labelSizeVariants({ size }),
976
- "text-[#181D27]",
976
+ "text-semantic-text-primary",
977
977
  disabled && "opacity-50",
978
978
  labelClassName
979
979
  )}
@@ -1495,7 +1495,7 @@ const DropdownMenuSubTrigger = React.forwardRef<
1495
1495
  <DropdownMenuPrimitive.SubTrigger
1496
1496
  ref={ref}
1497
1497
  className={cn(
1498
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-[#F5F5F5] data-[state=open]:bg-[#F5F5F5]",
1498
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-semantic-bg-ui data-[state=open]:bg-semantic-bg-ui",
1499
1499
  inset && "pl-8",
1500
1500
  className
1501
1501
  )}
@@ -1515,7 +1515,7 @@ const DropdownMenuSubContent = React.forwardRef<
1515
1515
  <DropdownMenuPrimitive.SubContent
1516
1516
  ref={ref}
1517
1517
  className={cn(
1518
- "z-50 min-w-[8rem] overflow-hidden rounded-md border border-[#E9EAEB] bg-white p-1 text-[#181D27] shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
1518
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border border-semantic-border-layout bg-semantic-bg-primary p-1 text-semantic-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
1519
1519
  className
1520
1520
  )}
1521
1521
  {...props}
@@ -1533,7 +1533,7 @@ const DropdownMenuContent = React.forwardRef<
1533
1533
  ref={ref}
1534
1534
  sideOffset={sideOffset}
1535
1535
  className={cn(
1536
- "z-50 min-w-[8rem] overflow-hidden rounded-md border border-[#E9EAEB] bg-white p-1 text-[#181D27] shadow-md",
1536
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border border-semantic-border-layout bg-semantic-bg-primary p-1 text-semantic-text-primary shadow-md",
1537
1537
  "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
1538
1538
  className
1539
1539
  )}
@@ -1552,7 +1552,7 @@ const DropdownMenuItem = React.forwardRef<
1552
1552
  <DropdownMenuPrimitive.Item
1553
1553
  ref={ref}
1554
1554
  className={cn(
1555
- "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-[#F5F5F5] focus:text-[#181D27] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1555
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-semantic-bg-ui focus:text-semantic-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1556
1556
  inset && "pl-8",
1557
1557
  className
1558
1558
  )}
@@ -1568,7 +1568,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
1568
1568
  <DropdownMenuPrimitive.CheckboxItem
1569
1569
  ref={ref}
1570
1570
  className={cn(
1571
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-[#F5F5F5] focus:text-[#181D27] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1571
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-semantic-bg-ui focus:text-semantic-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1572
1572
  className
1573
1573
  )}
1574
1574
  checked={checked}
@@ -1592,7 +1592,7 @@ const DropdownMenuRadioItem = React.forwardRef<
1592
1592
  <DropdownMenuPrimitive.RadioItem
1593
1593
  ref={ref}
1594
1594
  className={cn(
1595
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-[#F5F5F5] focus:text-[#181D27] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1595
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-semantic-bg-ui focus:text-semantic-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1596
1596
  className
1597
1597
  )}
1598
1598
  {...props}
@@ -1631,7 +1631,7 @@ const DropdownMenuSeparator = React.forwardRef<
1631
1631
  >(({ className, ...props }, ref) => (
1632
1632
  <DropdownMenuPrimitive.Separator
1633
1633
  ref={ref}
1634
- className={cn("-mx-1 my-1 h-px bg-[#E9EAEB]", className)}
1634
+ className={cn("-mx-1 my-1 h-px bg-semantic-border-layout", className)}
1635
1635
  {...props}
1636
1636
  />
1637
1637
  ));
@@ -1677,14 +1677,14 @@ import { cn } from "@/lib/utils";
1677
1677
  * Input variants for different visual states
1678
1678
  */
1679
1679
  const inputVariants = cva(
1680
- "h-10 w-full rounded bg-white px-4 py-2.5 text-sm text-[#181D27] transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[#181D27] placeholder:text-[#A2A6B1] disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[#FAFAFA]",
1680
+ "h-10 w-full rounded bg-semantic-bg-primary px-4 py-2.5 text-sm text-semantic-text-primary transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-semantic-text-primary placeholder:text-semantic-text-placeholder disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)]",
1681
1681
  {
1682
1682
  variants: {
1683
1683
  state: {
1684
1684
  default:
1685
- "border border-[#E9EAEB] focus:outline-none focus:border-[#2BBCCA]/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1685
+ "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1686
1686
  error:
1687
- "border border-[#F04438]/40 focus:outline-none focus:border-[#F04438]/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1687
+ "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1688
1688
  },
1689
1689
  },
1690
1690
  defaultVariants: {
@@ -1734,14 +1734,14 @@ import { cn } from "@/lib/utils";
1734
1734
  * MultiSelect trigger variants matching TextField styling
1735
1735
  */
1736
1736
  const multiSelectTriggerVariants = cva(
1737
- "flex min-h-10 w-full items-center justify-between rounded bg-white px-4 py-2 text-sm text-[#181D27] transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[#FAFAFA]",
1737
+ "flex min-h-10 w-full items-center justify-between rounded bg-semantic-bg-primary px-4 py-2 text-sm text-semantic-text-primary transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)]",
1738
1738
  {
1739
1739
  variants: {
1740
1740
  state: {
1741
1741
  default:
1742
- "border border-[#E9EAEB] focus:outline-none focus:border-[#2BBCCA]/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1742
+ "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1743
1743
  error:
1744
- "border border-[#F04438]/40 focus:outline-none focus:border-[#F04438]/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1744
+ "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1745
1745
  },
1746
1746
  },
1747
1747
  defaultVariants: {
@@ -1959,10 +1959,10 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
1959
1959
  {label && (
1960
1960
  <label
1961
1961
  htmlFor={selectId}
1962
- className={cn("text-sm font-medium text-[#181D27]", labelClassName)}
1962
+ className={cn("text-sm font-medium text-semantic-text-primary", labelClassName)}
1963
1963
  >
1964
1964
  {label}
1965
- {required && <span className="text-[#F04438] ml-0.5">*</span>}
1965
+ {required && <span className="text-semantic-error-primary ml-0.5">*</span>}
1966
1966
  </label>
1967
1967
  )}
1968
1968
 
@@ -1987,12 +1987,12 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
1987
1987
  >
1988
1988
  <div className="flex-1 flex flex-wrap gap-1">
1989
1989
  {selectedValues.length === 0 ? (
1990
- <span className="text-[#A2A6B1]">{placeholder}</span>
1990
+ <span className="text-semantic-text-placeholder">{placeholder}</span>
1991
1991
  ) : (
1992
1992
  selectedLabels.map((label, index) => (
1993
1993
  <span
1994
1994
  key={selectedValues[index]}
1995
- className="inline-flex items-center gap-1 bg-[#F5F5F5] text-[#181D27] text-xs px-2 py-0.5 rounded"
1995
+ className="inline-flex items-center gap-1 bg-semantic-bg-ui text-semantic-text-primary text-xs px-2 py-0.5 rounded"
1996
1996
  >
1997
1997
  {label}
1998
1998
  <span
@@ -2008,7 +2008,7 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2008
2008
  );
2009
2009
  }
2010
2010
  }}
2011
- className="cursor-pointer hover:text-[#F04438] focus:outline-none"
2011
+ className="cursor-pointer hover:text-semantic-error-primary focus:outline-none"
2012
2012
  aria-label={\`Remove \${label}\`}
2013
2013
  >
2014
2014
  <X className="size-3" />
@@ -2029,18 +2029,18 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2029
2029
  clearAll(e as unknown as React.MouseEvent);
2030
2030
  }
2031
2031
  }}
2032
- className="p-0.5 cursor-pointer hover:text-[#F04438] focus:outline-none"
2032
+ className="p-0.5 cursor-pointer hover:text-semantic-error-primary focus:outline-none"
2033
2033
  aria-label="Clear all"
2034
2034
  >
2035
- <X className="size-4 text-[#717680]" />
2035
+ <X className="size-4 text-semantic-text-muted" />
2036
2036
  </span>
2037
2037
  )}
2038
2038
  {loading ? (
2039
- <Loader2 className="size-4 animate-spin text-[#717680]" />
2039
+ <Loader2 className="size-4 animate-spin text-semantic-text-muted" />
2040
2040
  ) : (
2041
2041
  <ChevronDown
2042
2042
  className={cn(
2043
- "size-4 text-[#717680] transition-transform",
2043
+ "size-4 text-semantic-text-muted transition-transform",
2044
2044
  isOpen && "rotate-180"
2045
2045
  )}
2046
2046
  />
@@ -2052,7 +2052,7 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2052
2052
  {isOpen && (
2053
2053
  <div
2054
2054
  className={cn(
2055
- "absolute z-50 mt-1 w-full rounded bg-white border border-[#E9EAEB] shadow-md",
2055
+ "absolute z-50 mt-1 w-full rounded bg-semantic-bg-primary border border-semantic-border-layout shadow-md",
2056
2056
  "top-full"
2057
2057
  )}
2058
2058
  role="listbox"
@@ -2060,13 +2060,13 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2060
2060
  >
2061
2061
  {/* Search input */}
2062
2062
  {searchable && (
2063
- <div className="p-2 border-b border-[#E9EAEB]">
2063
+ <div className="p-2 border-b border-semantic-border-layout">
2064
2064
  <input
2065
2065
  type="text"
2066
2066
  placeholder={searchPlaceholder}
2067
2067
  value={searchQuery}
2068
2068
  onChange={(e) => setSearchQuery(e.target.value)}
2069
- className="w-full h-8 px-3 text-sm border border-[#E9EAEB] rounded bg-white placeholder:text-[#A2A6B1] focus:outline-none focus:border-[#2BBCCA]/50"
2069
+ className="w-full h-8 px-3 text-sm border border-semantic-border-input rounded bg-semantic-bg-primary placeholder:text-semantic-text-placeholder focus:outline-none focus:border-semantic-border-input-focus/50"
2070
2070
  onClick={(e) => e.stopPropagation()}
2071
2071
  />
2072
2072
  </div>
@@ -2075,7 +2075,7 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2075
2075
  {/* Options */}
2076
2076
  <div className="max-h-60 overflow-auto p-1">
2077
2077
  {filteredOptions.length === 0 ? (
2078
- <div className="py-6 text-center text-sm text-[#717680]">
2078
+ <div className="py-6 text-center text-sm text-semantic-text-muted">
2079
2079
  No results found
2080
2080
  </div>
2081
2081
  ) : (
@@ -2097,15 +2097,15 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2097
2097
  disabled={isDisabled}
2098
2098
  onClick={() => !isDisabled && toggleOption(option.value)}
2099
2099
  className={cn(
2100
- "relative flex w-full cursor-pointer select-none items-center rounded-sm py-2 pl-4 pr-8 text-sm text-[#181D27] outline-none",
2101
- "hover:bg-[#F5F5F5] focus:bg-[#F5F5F5]",
2102
- isSelected && "bg-[#F5F5F5]",
2100
+ "relative flex w-full cursor-pointer select-none items-center rounded-sm py-2 pl-4 pr-8 text-sm text-semantic-text-primary outline-none",
2101
+ "hover:bg-semantic-bg-ui focus:bg-semantic-bg-ui",
2102
+ isSelected && "bg-semantic-bg-ui",
2103
2103
  isDisabled && "pointer-events-none opacity-50"
2104
2104
  )}
2105
2105
  >
2106
2106
  <span className="absolute right-2 flex size-4 items-center justify-center">
2107
2107
  {isSelected && (
2108
- <Check className="size-4 text-[#2BBCCA]" />
2108
+ <Check className="size-4 text-semantic-brand" />
2109
2109
  )}
2110
2110
  </span>
2111
2111
  {option.label}
@@ -2117,7 +2117,7 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2117
2117
 
2118
2118
  {/* Footer with count */}
2119
2119
  {maxSelections && (
2120
- <div className="p-2 border-t border-[#E9EAEB] text-xs text-[#717680]">
2120
+ <div className="p-2 border-t border-semantic-border-layout text-xs text-semantic-text-muted">
2121
2121
  {selectedValues.length} / {maxSelections} selected
2122
2122
  </div>
2123
2123
  )}
@@ -2134,11 +2134,11 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
2134
2134
  {(error || helperText) && (
2135
2135
  <div className="flex justify-between items-start gap-2">
2136
2136
  {error ? (
2137
- <span id={errorId} className="text-xs text-[#F04438]">
2137
+ <span id={errorId} className="text-xs text-semantic-error-primary">
2138
2138
  {error}
2139
2139
  </span>
2140
2140
  ) : helperText ? (
2141
- <span id={helperId} className="text-xs text-[#717680]">
2141
+ <span id={helperId} className="text-xs text-semantic-text-muted">
2142
2142
  {helperText}
2143
2143
  </span>
2144
2144
  ) : null}
@@ -2163,7 +2163,7 @@ import { Button } from "./button";
2163
2163
  * PageHeader variants for layout styles.
2164
2164
  */
2165
2165
  const pageHeaderVariants = cva(
2166
- "flex flex-col sm:flex-row sm:items-center w-full bg-white",
2166
+ "flex flex-col sm:flex-row sm:items-center w-full bg-semantic-bg-primary",
2167
2167
  {
2168
2168
  variants: {},
2169
2169
  defaultVariants: {},
@@ -2254,7 +2254,7 @@ const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
2254
2254
  <button
2255
2255
  type="button"
2256
2256
  onClick={onBackClick}
2257
- className="flex items-center justify-center w-10 h-10 rounded hover:bg-[#F5F5F5] transition-colors text-[#181D27]"
2257
+ className="flex items-center justify-center w-10 h-10 rounded hover:bg-semantic-bg-ui transition-colors text-semantic-text-primary"
2258
2258
  aria-label="Go back"
2259
2259
  >
2260
2260
  <ArrowLeft className="w-5 h-5" />
@@ -2263,7 +2263,7 @@ const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
2263
2263
  }
2264
2264
  if (icon) {
2265
2265
  return (
2266
- <div className="flex items-center justify-center w-10 h-10 [&_svg]:w-6 [&_svg]:h-6 text-[#717680]">
2266
+ <div className="flex items-center justify-center w-10 h-10 [&_svg]:w-6 [&_svg]:h-6 text-semantic-text-muted">
2267
2267
  {icon}
2268
2268
  </div>
2269
2269
  );
@@ -2395,10 +2395,10 @@ const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
2395
2395
  <div
2396
2396
  ref={ref}
2397
2397
  className={cn(
2398
- "flex w-full bg-white px-4",
2398
+ "flex w-full bg-semantic-bg-primary px-4",
2399
2399
  layoutClasses[layout],
2400
2400
  heightClasses[layout],
2401
- showBorder && "border-b border-[#E9EAEB]",
2401
+ showBorder && "border-b border-semantic-border-layout",
2402
2402
  className
2403
2403
  )}
2404
2404
  {...props}
@@ -2413,17 +2413,17 @@ const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
2413
2413
  {/* Content Section: Title + Description */}
2414
2414
  <div className="flex-1 min-w-0">
2415
2415
  <div className="flex items-center gap-2">
2416
- <h1 className="m-0 text-base font-semibold text-[#181D27] truncate">
2416
+ <h1 className="m-0 text-base font-semibold text-semantic-text-primary truncate">
2417
2417
  {title}
2418
2418
  </h1>
2419
2419
  {infoIcon && (
2420
- <span className="flex-shrink-0 [&_svg]:w-4 [&_svg]:h-4 text-[#717680]">
2420
+ <span className="flex-shrink-0 [&_svg]:w-4 [&_svg]:h-4 text-semantic-text-muted">
2421
2421
  {infoIcon}
2422
2422
  </span>
2423
2423
  )}
2424
2424
  </div>
2425
2425
  {description && (
2426
- <p className="m-0 text-sm text-[#181D27] font-normal mt-1 line-clamp-2">
2426
+ <p className="m-0 text-sm text-semantic-text-primary font-normal mt-1 line-clamp-2">
2427
2427
  {description}
2428
2428
  </p>
2429
2429
  )}
@@ -2606,10 +2606,10 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
2606
2606
  {label && (
2607
2607
  <label
2608
2608
  htmlFor={selectId}
2609
- className={cn("text-sm font-medium text-[#181D27]", labelClassName)}
2609
+ className={cn("text-sm font-medium text-semantic-text-primary", labelClassName)}
2610
2610
  >
2611
2611
  {label}
2612
- {required && <span className="text-[#F04438] ml-0.5">*</span>}
2612
+ {required && <span className="text-semantic-error-primary ml-0.5">*</span>}
2613
2613
  </label>
2614
2614
  )}
2615
2615
 
@@ -2632,7 +2632,7 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
2632
2632
  >
2633
2633
  <SelectValue placeholder={placeholder} />
2634
2634
  {loading && (
2635
- <Loader2 className="absolute right-8 size-4 animate-spin text-[#717680]" />
2635
+ <Loader2 className="absolute right-8 size-4 animate-spin text-semantic-text-muted" />
2636
2636
  )}
2637
2637
  </SelectTrigger>
2638
2638
  <SelectContent>
@@ -2644,7 +2644,7 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
2644
2644
  placeholder={searchPlaceholder}
2645
2645
  value={searchQuery}
2646
2646
  onChange={handleSearchChange}
2647
- className="w-full h-8 px-3 text-sm border border-[#E9EAEB] rounded bg-white placeholder:text-[#A2A6B1] focus:outline-none focus:border-[#2BBCCA]/50"
2647
+ className="w-full h-8 px-3 text-sm border border-semantic-border-input rounded bg-semantic-bg-primary placeholder:text-semantic-text-placeholder focus:outline-none focus:border-semantic-border-input-focus/50"
2648
2648
  // Prevent closing dropdown when clicking input
2649
2649
  onClick={(e) => e.stopPropagation()}
2650
2650
  onKeyDown={(e) => e.stopPropagation()}
@@ -2687,7 +2687,7 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
2687
2687
  searchQuery &&
2688
2688
  groupedOptions.ungrouped.length === 0 &&
2689
2689
  Object.keys(groupedOptions.groups).length === 0 && (
2690
- <div className="py-6 text-center text-sm text-[#717680]">
2690
+ <div className="py-6 text-center text-sm text-semantic-text-muted">
2691
2691
  No results found
2692
2692
  </div>
2693
2693
  )}
@@ -2698,11 +2698,11 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
2698
2698
  {(error || helperText) && (
2699
2699
  <div className="flex justify-between items-start gap-2">
2700
2700
  {error ? (
2701
- <span id={errorId} className="text-xs text-[#F04438]">
2701
+ <span id={errorId} className="text-xs text-semantic-error-primary">
2702
2702
  {error}
2703
2703
  </span>
2704
2704
  ) : helperText ? (
2705
- <span id={helperId} className="text-xs text-[#717680]">
2705
+ <span id={helperId} className="text-xs text-semantic-text-muted">
2706
2706
  {helperText}
2707
2707
  </span>
2708
2708
  ) : null}
@@ -2727,14 +2727,14 @@ import { cn } from "@/lib/utils";
2727
2727
  * SelectTrigger variants matching TextField styling
2728
2728
  */
2729
2729
  const selectTriggerVariants = cva(
2730
- "flex h-10 w-full items-center justify-between rounded bg-white px-4 py-2.5 text-sm text-[#181D27] transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[#FAFAFA] [&>span]:line-clamp-1",
2730
+ "flex h-10 w-full items-center justify-between rounded bg-semantic-bg-primary px-4 py-2.5 text-sm text-semantic-text-primary transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)] [&>span]:line-clamp-1",
2731
2731
  {
2732
2732
  variants: {
2733
2733
  state: {
2734
2734
  default:
2735
- "border border-[#E9EAEB] focus:outline-none focus:border-[#2BBCCA]/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
2735
+ "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
2736
2736
  error:
2737
- "border border-[#F04438]/40 focus:outline-none focus:border-[#F04438]/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
2737
+ "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
2738
2738
  },
2739
2739
  },
2740
2740
  defaultVariants: {
@@ -2765,7 +2765,7 @@ const SelectTrigger = React.forwardRef<
2765
2765
  >
2766
2766
  {children}
2767
2767
  <SelectPrimitive.Icon asChild>
2768
- <ChevronDown className="size-4 text-[#717680] opacity-70" />
2768
+ <ChevronDown className="size-4 text-semantic-text-muted opacity-70" />
2769
2769
  </SelectPrimitive.Icon>
2770
2770
  </SelectPrimitive.Trigger>
2771
2771
  ));
@@ -2783,7 +2783,7 @@ const SelectScrollUpButton = React.forwardRef<
2783
2783
  )}
2784
2784
  {...props}
2785
2785
  >
2786
- <ChevronUp className="size-4 text-[#717680]" />
2786
+ <ChevronUp className="size-4 text-semantic-text-muted" />
2787
2787
  </SelectPrimitive.ScrollUpButton>
2788
2788
  ));
2789
2789
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
@@ -2800,7 +2800,7 @@ const SelectScrollDownButton = React.forwardRef<
2800
2800
  )}
2801
2801
  {...props}
2802
2802
  >
2803
- <ChevronDown className="size-4 text-[#717680]" />
2803
+ <ChevronDown className="size-4 text-semantic-text-muted" />
2804
2804
  </SelectPrimitive.ScrollDownButton>
2805
2805
  ));
2806
2806
  SelectScrollDownButton.displayName =
@@ -2814,7 +2814,7 @@ const SelectContent = React.forwardRef<
2814
2814
  <SelectPrimitive.Content
2815
2815
  ref={ref}
2816
2816
  className={cn(
2817
- "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded bg-white border border-[#E9EAEB] shadow-md",
2817
+ "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded bg-semantic-bg-primary border border-semantic-border-layout shadow-md",
2818
2818
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
2819
2819
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2820
2820
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -2849,7 +2849,7 @@ const SelectLabel = React.forwardRef<
2849
2849
  >(({ className, ...props }, ref) => (
2850
2850
  <SelectPrimitive.Label
2851
2851
  ref={ref}
2852
- className={cn("px-4 py-1.5 text-xs font-medium text-[#717680]", className)}
2852
+ className={cn("px-4 py-1.5 text-xs font-medium text-semantic-text-muted", className)}
2853
2853
  {...props}
2854
2854
  />
2855
2855
  ));
@@ -2862,8 +2862,8 @@ const SelectItem = React.forwardRef<
2862
2862
  <SelectPrimitive.Item
2863
2863
  ref={ref}
2864
2864
  className={cn(
2865
- "relative flex w-full cursor-pointer select-none items-center rounded-sm py-2 pl-4 pr-8 text-sm text-[#181D27] outline-none",
2866
- "hover:bg-[#F5F5F5] focus:bg-[#F5F5F5]",
2865
+ "relative flex w-full cursor-pointer select-none items-center rounded-sm py-2 pl-4 pr-8 text-sm text-semantic-text-primary outline-none",
2866
+ "hover:bg-semantic-bg-ui focus:bg-semantic-bg-ui",
2867
2867
  "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2868
2868
  className
2869
2869
  )}
@@ -2871,7 +2871,7 @@ const SelectItem = React.forwardRef<
2871
2871
  >
2872
2872
  <span className="absolute right-2 flex size-4 items-center justify-center">
2873
2873
  <SelectPrimitive.ItemIndicator>
2874
- <Check className="size-4 text-[#2BBCCA]" />
2874
+ <Check className="size-4 text-semantic-brand" />
2875
2875
  </SelectPrimitive.ItemIndicator>
2876
2876
  </span>
2877
2877
  <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
@@ -2885,7 +2885,7 @@ const SelectSeparator = React.forwardRef<
2885
2885
  >(({ className, ...props }, ref) => (
2886
2886
  <SelectPrimitive.Separator
2887
2887
  ref={ref}
2888
- className={cn("-mx-1 my-1 h-px bg-[#E9EAEB]", className)}
2888
+ className={cn("-mx-1 my-1 h-px bg-semantic-border-layout", className)}
2889
2889
  {...props}
2890
2890
  />
2891
2891
  ));
@@ -2915,7 +2915,7 @@ import { cn } from "@/lib/utils";
2915
2915
  * Switch track variants (the outer container)
2916
2916
  */
2917
2917
  const switchVariants = cva(
2918
- "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#343E55] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-[#343E55] data-[state=unchecked]:bg-[#E9EAEB]",
2918
+ "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-semantic-primary data-[state=unchecked]:bg-semantic-bg-grey",
2919
2919
  {
2920
2920
  variants: {
2921
2921
  size: {
@@ -3019,7 +3019,7 @@ const Switch = React.forwardRef<
3019
3019
  <span
3020
3020
  className={cn(
3021
3021
  labelSizeVariants({ size }),
3022
- "text-[#181D27]",
3022
+ "text-semantic-text-primary",
3023
3023
  disabled && "opacity-50"
3024
3024
  )}
3025
3025
  >
@@ -3031,7 +3031,7 @@ const Switch = React.forwardRef<
3031
3031
  <span
3032
3032
  className={cn(
3033
3033
  labelSizeVariants({ size }),
3034
- "text-[#181D27]",
3034
+ "text-semantic-text-primary",
3035
3035
  disabled && "opacity-50"
3036
3036
  )}
3037
3037
  >
@@ -3106,7 +3106,7 @@ const Table = React.forwardRef<HTMLTableElement, TableProps>(
3106
3106
  <div
3107
3107
  className={cn(
3108
3108
  "relative w-full overflow-auto",
3109
- !withoutBorder && "rounded-lg border border-[#E9EAEB]"
3109
+ !withoutBorder && "rounded-lg border border-semantic-border-layout"
3110
3110
  )}
3111
3111
  >
3112
3112
  <table
@@ -3125,7 +3125,7 @@ const TableHeader = React.forwardRef<
3125
3125
  >(({ className, ...props }, ref) => (
3126
3126
  <thead
3127
3127
  ref={ref}
3128
- className={cn("bg-[#FAFAFA] [&_tr]:border-b", className)}
3128
+ className={cn("bg-[var(--color-neutral-50)] [&_tr]:border-b", className)}
3129
3129
  {...props}
3130
3130
  />
3131
3131
  ));
@@ -3150,7 +3150,7 @@ const TableFooter = React.forwardRef<
3150
3150
  <tfoot
3151
3151
  ref={ref}
3152
3152
  className={cn(
3153
- "border-t bg-[#FAFAFA] font-medium [&>tr]:last:border-b-0",
3153
+ "border-t bg-[var(--color-neutral-50)] font-medium [&>tr]:last:border-b-0",
3154
3154
  className
3155
3155
  )}
3156
3156
  {...props}
@@ -3168,10 +3168,10 @@ const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(
3168
3168
  <tr
3169
3169
  ref={ref}
3170
3170
  className={cn(
3171
- "border-b border-[#E9EAEB] transition-colors",
3171
+ "border-b border-semantic-border-layout transition-colors",
3172
3172
  highlighted
3173
- ? "bg-[#ECF1FB]"
3174
- : "hover:bg-[#FAFAFA]/50 data-[state=selected]:bg-[#F5F5F5]",
3173
+ ? "bg-semantic-info-surface"
3174
+ : "hover:bg-[var(--color-neutral-50)]/50 data-[state=selected]:bg-semantic-bg-ui",
3175
3175
  className
3176
3176
  )}
3177
3177
  {...props}
@@ -3197,8 +3197,8 @@ const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(
3197
3197
  <th
3198
3198
  ref={ref}
3199
3199
  className={cn(
3200
- "h-12 px-4 text-left align-middle font-medium text-[#717680] text-sm [&:has([role=checkbox])]:pr-0",
3201
- sticky && "sticky left-0 bg-[#FAFAFA] z-10",
3200
+ "h-12 px-4 text-left align-middle font-medium text-semantic-text-muted text-sm [&:has([role=checkbox])]:pr-0",
3201
+ sticky && "sticky left-0 bg-[var(--color-neutral-50)] z-10",
3202
3202
  sortDirection && "cursor-pointer select-none",
3203
3203
  className
3204
3204
  )}
@@ -3207,12 +3207,12 @@ const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(
3207
3207
  <div className="flex items-center gap-1">
3208
3208
  {children}
3209
3209
  {sortDirection && (
3210
- <span className="text-[#A4A7AE]">
3210
+ <span className="text-[var(--color-neutral-400)]">
3211
3211
  {sortDirection === "asc" ? "\u2191" : "\u2193"}
3212
3212
  </span>
3213
3213
  )}
3214
3214
  {infoTooltip && (
3215
- <span className="text-[#A4A7AE] cursor-help" title={infoTooltip}>
3215
+ <span className="text-[var(--color-neutral-400)] cursor-help" title={infoTooltip}>
3216
3216
  \u24D8
3217
3217
  </span>
3218
3218
  )}
@@ -3232,8 +3232,8 @@ const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(
3232
3232
  <td
3233
3233
  ref={ref}
3234
3234
  className={cn(
3235
- "px-4 align-middle text-[#181D27] [&:has([role=checkbox])]:pr-0",
3236
- sticky && "sticky left-0 bg-white z-10",
3235
+ "px-4 align-middle text-semantic-text-primary [&:has([role=checkbox])]:pr-0",
3236
+ sticky && "sticky left-0 bg-semantic-bg-primary z-10",
3237
3237
  className
3238
3238
  )}
3239
3239
  {...props}
@@ -3248,7 +3248,7 @@ const TableCaption = React.forwardRef<
3248
3248
  >(({ className, ...props }, ref) => (
3249
3249
  <caption
3250
3250
  ref={ref}
3251
- className={cn("mt-4 text-sm text-[#717680]", className)}
3251
+ className={cn("mt-4 text-sm text-semantic-text-muted", className)}
3252
3252
  {...props}
3253
3253
  />
3254
3254
  ));
@@ -3271,7 +3271,7 @@ const TableSkeleton = ({ rows = 5, columns = 5 }: TableSkeletonProps) => (
3271
3271
  {Array.from({ length: columns }).map((_, colIndex) => (
3272
3272
  <TableCell key={colIndex}>
3273
3273
  <div
3274
- className="h-4 bg-[#E9EAEB] rounded animate-pulse"
3274
+ className="h-4 bg-semantic-bg-grey rounded animate-pulse"
3275
3275
  style={{
3276
3276
  width: colIndex === 1 ? "80%" : colIndex === 2 ? "30%" : "60%",
3277
3277
  }}
@@ -3296,7 +3296,7 @@ export interface TableEmptyProps {
3296
3296
 
3297
3297
  const TableEmpty = ({ colSpan, children }: TableEmptyProps) => (
3298
3298
  <TableRow>
3299
- <TableCell colSpan={colSpan} className="text-center py-8 text-[#717680]">
3299
+ <TableCell colSpan={colSpan} className="text-center py-8 text-semantic-text-muted">
3300
3300
  {children || "No data available"}
3301
3301
  </TableCell>
3302
3302
  </TableRow>
@@ -3366,14 +3366,14 @@ import { cn } from "@/lib/utils";
3366
3366
  const tagVariants = cva("inline-flex items-center rounded text-sm", {
3367
3367
  variants: {
3368
3368
  variant: {
3369
- default: "bg-[#F5F5F5] text-[#181D27]",
3370
- primary: "bg-[#F5F5F5] text-[#181D27]",
3371
- accent: "bg-[#EBECEE] text-[#343E55]",
3372
- secondary: "bg-[#E9EAEB] text-[#414651]",
3373
- success: "bg-[#ECFDF3] text-[#17B26A]",
3374
- warning: "bg-[#FFFAEB] text-[#F79009]",
3375
- error: "bg-[#FEF3F2] text-[#F04438]",
3376
- destructive: "bg-[#FEF3F2] text-[#F04438]",
3369
+ default: "bg-semantic-bg-ui text-semantic-text-primary",
3370
+ primary: "bg-semantic-bg-ui text-semantic-text-primary",
3371
+ accent: "bg-semantic-primary-surface text-semantic-text-secondary",
3372
+ secondary: "bg-semantic-bg-grey text-[var(--color-neutral-700)]",
3373
+ success: "bg-semantic-success-surface text-semantic-success-primary",
3374
+ warning: "bg-semantic-warning-surface text-semantic-warning-primary",
3375
+ error: "bg-semantic-error-surface text-semantic-error-primary",
3376
+ destructive: "bg-semantic-error-surface text-semantic-error-primary",
3377
3377
  },
3378
3378
  size: {
3379
3379
  default: "px-2 py-1",
@@ -3500,17 +3500,17 @@ import { cn } from "@/lib/utils";
3500
3500
  * TextField container variants for when icons/prefix/suffix are present
3501
3501
  */
3502
3502
  const textFieldContainerVariants = cva(
3503
- "relative flex items-center rounded bg-white transition-all",
3503
+ "relative flex items-center rounded bg-semantic-bg-primary transition-all",
3504
3504
  {
3505
3505
  variants: {
3506
3506
  state: {
3507
3507
  default:
3508
- "border border-[#E9EAEB] focus-within:border-[#2BBCCA]/50 focus-within:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
3508
+ "border border-semantic-border-input focus-within:border-semantic-border-input-focus/50 focus-within:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
3509
3509
  error:
3510
- "border border-[#F04438]/40 focus-within:border-[#F04438]/60 focus-within:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
3510
+ "border border-semantic-error-primary/40 focus-within:border-semantic-error-primary/60 focus-within:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
3511
3511
  },
3512
3512
  disabled: {
3513
- true: "cursor-not-allowed opacity-50 bg-[#FAFAFA]",
3513
+ true: "cursor-not-allowed opacity-50 bg-[var(--color-neutral-50)]",
3514
3514
  false: "",
3515
3515
  },
3516
3516
  },
@@ -3525,14 +3525,14 @@ const textFieldContainerVariants = cva(
3525
3525
  * TextField input variants (standalone without container)
3526
3526
  */
3527
3527
  const textFieldInputVariants = cva(
3528
- "h-10 w-full rounded bg-white px-4 py-2.5 text-sm text-[#181D27] transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[#181D27] placeholder:text-[#A2A6B1] disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[#FAFAFA]",
3528
+ "h-10 w-full rounded bg-semantic-bg-primary px-4 py-2.5 text-sm text-semantic-text-primary transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-semantic-text-primary placeholder:text-semantic-text-placeholder disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)]",
3529
3529
  {
3530
3530
  variants: {
3531
3531
  state: {
3532
3532
  default:
3533
- "border border-[#E9EAEB] focus:outline-none focus:border-[#2BBCCA]/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
3533
+ "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
3534
3534
  error:
3535
- "border border-[#F04438]/40 focus:outline-none focus:border-[#F04438]/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
3535
+ "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
3536
3536
  },
3537
3537
  },
3538
3538
  defaultVariants: {
@@ -3653,7 +3653,7 @@ const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
3653
3653
  id={inputId}
3654
3654
  className={cn(
3655
3655
  hasAddons
3656
- ? "flex-1 bg-transparent border-0 outline-none focus:ring-0 px-0 h-full text-sm text-[#181D27] placeholder:text-[#A2A6B1] disabled:cursor-not-allowed"
3656
+ ? "flex-1 bg-transparent border-0 outline-none focus:ring-0 px-0 h-full text-sm text-semantic-text-primary placeholder:text-semantic-text-placeholder disabled:cursor-not-allowed"
3657
3657
  : textFieldInputVariants({ state: derivedState, className })
3658
3658
  )}
3659
3659
  disabled={disabled || loading}
@@ -3673,10 +3673,10 @@ const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
3673
3673
  {label && (
3674
3674
  <label
3675
3675
  htmlFor={inputId}
3676
- className={cn("text-sm font-medium text-[#181D27]", labelClassName)}
3676
+ className={cn("text-sm font-medium text-semantic-text-primary", labelClassName)}
3677
3677
  >
3678
3678
  {label}
3679
- {required && <span className="text-[#F04438] ml-0.5">*</span>}
3679
+ {required && <span className="text-semantic-error-primary ml-0.5">*</span>}
3680
3680
  </label>
3681
3681
  )}
3682
3682
 
@@ -3693,26 +3693,26 @@ const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
3693
3693
  )}
3694
3694
  >
3695
3695
  {prefix && (
3696
- <span className="text-sm text-[#717680] mr-2 select-none">
3696
+ <span className="text-sm text-semantic-text-muted mr-2 select-none">
3697
3697
  {prefix}
3698
3698
  </span>
3699
3699
  )}
3700
3700
  {leftIcon && (
3701
- <span className="mr-2 text-[#717680] [&_svg]:size-4 flex-shrink-0">
3701
+ <span className="mr-2 text-semantic-text-muted [&_svg]:size-4 flex-shrink-0">
3702
3702
  {leftIcon}
3703
3703
  </span>
3704
3704
  )}
3705
3705
  {inputElement}
3706
3706
  {loading && (
3707
- <Loader2 className="animate-spin size-4 text-[#717680] ml-2 flex-shrink-0" />
3707
+ <Loader2 className="animate-spin size-4 text-semantic-text-muted ml-2 flex-shrink-0" />
3708
3708
  )}
3709
3709
  {!loading && rightIcon && (
3710
- <span className="ml-2 text-[#717680] [&_svg]:size-4 flex-shrink-0">
3710
+ <span className="ml-2 text-semantic-text-muted [&_svg]:size-4 flex-shrink-0">
3711
3711
  {rightIcon}
3712
3712
  </span>
3713
3713
  )}
3714
3714
  {suffix && (
3715
- <span className="text-sm text-[#717680] ml-2 select-none">
3715
+ <span className="text-sm text-semantic-text-muted ml-2 select-none">
3716
3716
  {suffix}
3717
3717
  </span>
3718
3718
  )}
@@ -3725,11 +3725,11 @@ const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
3725
3725
  {(error || helperText || (showCount && maxLength)) && (
3726
3726
  <div className="flex justify-between items-start gap-2">
3727
3727
  {error ? (
3728
- <span id={errorId} className="text-xs text-[#F04438]">
3728
+ <span id={errorId} className="text-xs text-semantic-error-primary">
3729
3729
  {error}
3730
3730
  </span>
3731
3731
  ) : helperText ? (
3732
- <span id={helperId} className="text-xs text-[#717680]">
3732
+ <span id={helperId} className="text-xs text-semantic-text-muted">
3733
3733
  {helperText}
3734
3734
  </span>
3735
3735
  ) : (
@@ -3739,7 +3739,7 @@ const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
3739
3739
  <span
3740
3740
  className={cn(
3741
3741
  "text-xs",
3742
- charCount > maxLength ? "text-[#F04438]" : "text-[#717680]"
3742
+ charCount > maxLength ? "text-semantic-error-primary" : "text-semantic-text-muted"
3743
3743
  )}
3744
3744
  >
3745
3745
  {charCount}/{maxLength}
@@ -3784,11 +3784,11 @@ const toastVariants = cva(
3784
3784
  {
3785
3785
  variants: {
3786
3786
  variant: {
3787
- default: "border-[#E9EAEB] bg-white text-[#181D27]",
3788
- success: "border-[#17B26A]/20 bg-[#ECFDF3] text-[#067647]",
3789
- error: "border-[#F04438]/20 bg-[#FEF3F2] text-[#B42318]",
3790
- warning: "border-[#F79009]/20 bg-[#FFFAEB] text-[#B54708]",
3791
- info: "border-[#4275D6]/20 bg-[#EBF5FF] text-[#1849A9]",
3787
+ default: "border-semantic-border-layout bg-semantic-bg-primary text-semantic-text-primary",
3788
+ success: "border-semantic-success-border bg-semantic-success-surface text-semantic-success-hover",
3789
+ error: "border-semantic-error-border bg-semantic-error-surface text-semantic-error-hover",
3790
+ warning: "border-semantic-warning-border bg-semantic-warning-surface text-semantic-warning-hover",
3791
+ info: "border-semantic-info-border bg-semantic-info-surface text-semantic-info-hover",
3792
3792
  },
3793
3793
  },
3794
3794
  defaultVariants: {
@@ -3819,11 +3819,11 @@ const ToastAction = React.forwardRef<
3819
3819
  <ToastPrimitives.Action
3820
3820
  ref={ref}
3821
3821
  className={cn(
3822
- "inline-flex h-8 shrink-0 items-center justify-center rounded border border-[#E9EAEB] bg-transparent px-3 text-sm font-medium transition-colors hover:bg-[#F5F5F5] focus:outline-none focus:ring-2 focus:ring-[#4275D6] focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
3823
- "group-[.success]:border-[#17B26A]/30 group-[.success]:hover:border-[#17B26A]/50 group-[.success]:hover:bg-[#17B26A]/10",
3824
- "group-[.error]:border-[#F04438]/30 group-[.error]:hover:border-[#F04438]/50 group-[.error]:hover:bg-[#F04438]/10",
3825
- "group-[.warning]:border-[#F79009]/30 group-[.warning]:hover:border-[#F79009]/50 group-[.warning]:hover:bg-[#F79009]/10",
3826
- "group-[.info]:border-[#4275D6]/30 group-[.info]:hover:border-[#4275D6]/50 group-[.info]:hover:bg-[#4275D6]/10",
3822
+ "inline-flex h-8 shrink-0 items-center justify-center rounded border border-semantic-border-layout bg-transparent px-3 text-sm font-medium transition-colors hover:bg-semantic-bg-ui focus:outline-none focus:ring-2 focus:ring-semantic-info-primary focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
3823
+ "group-[.success]:border-semantic-success-primary/30 group-[.success]:hover:border-semantic-success-primary/50 group-[.success]:hover:bg-semantic-success-primary/10",
3824
+ "group-[.error]:border-semantic-error-primary/30 group-[.error]:hover:border-semantic-error-primary/50 group-[.error]:hover:bg-semantic-error-primary/10",
3825
+ "group-[.warning]:border-semantic-warning-primary/30 group-[.warning]:hover:border-semantic-warning-primary/50 group-[.warning]:hover:bg-semantic-warning-primary/10",
3826
+ "group-[.info]:border-semantic-info-primary/30 group-[.info]:hover:border-semantic-info-primary/50 group-[.info]:hover:bg-semantic-info-primary/10",
3827
3827
  className
3828
3828
  )}
3829
3829
  {...props}
@@ -3838,11 +3838,11 @@ const ToastClose = React.forwardRef<
3838
3838
  <ToastPrimitives.Close
3839
3839
  ref={ref}
3840
3840
  className={cn(
3841
- "absolute right-2 top-2 rounded-md p-1 text-[#717680] opacity-0 transition-opacity hover:text-[#181D27] focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100",
3842
- "group-[.success]:text-[#067647] group-[.success]:hover:text-[#067647]",
3843
- "group-[.error]:text-[#B42318] group-[.error]:hover:text-[#B42318]",
3844
- "group-[.warning]:text-[#B54708] group-[.warning]:hover:text-[#B54708]",
3845
- "group-[.info]:text-[#1849A9] group-[.info]:hover:text-[#1849A9]",
3841
+ "absolute right-2 top-2 rounded-md p-1 text-semantic-text-muted opacity-0 transition-opacity hover:text-semantic-text-primary focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100",
3842
+ "group-[.success]:text-semantic-success-hover group-[.success]:hover:text-semantic-success-hover",
3843
+ "group-[.error]:text-semantic-error-hover group-[.error]:hover:text-semantic-error-hover",
3844
+ "group-[.warning]:text-semantic-warning-hover group-[.warning]:hover:text-semantic-warning-hover",
3845
+ "group-[.info]:text-semantic-info-hover group-[.info]:hover:text-semantic-info-hover",
3846
3846
  className
3847
3847
  )}
3848
3848
  toast-close=""
@@ -4136,10 +4136,10 @@ function Toaster() {
4136
4136
  <Icon
4137
4137
  className={cn(
4138
4138
  "h-5 w-5 shrink-0",
4139
- variant === "success" && "text-[#17B26A]",
4140
- variant === "error" && "text-[#F04438]",
4141
- variant === "warning" && "text-[#F79009]",
4142
- variant === "info" && "text-[#4275D6]"
4139
+ variant === "success" && "text-semantic-success-primary",
4140
+ variant === "error" && "text-semantic-error-primary",
4141
+ variant === "warning" && "text-semantic-warning-primary",
4142
+ variant === "info" && "text-semantic-info-primary"
4143
4143
  )}
4144
4144
  />
4145
4145
  )}
@@ -4243,7 +4243,7 @@ const TooltipContent = React.forwardRef<
4243
4243
  ref={ref}
4244
4244
  sideOffset={sideOffset}
4245
4245
  className={cn(
4246
- "z-50 overflow-hidden rounded-md bg-[#343E55] px-3 py-1.5 text-xs text-white shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
4246
+ "z-50 overflow-hidden rounded-md bg-semantic-primary px-3 py-1.5 text-xs text-semantic-text-inverted shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
4247
4247
  className
4248
4248
  )}
4249
4249
  {...props}
@@ -4258,7 +4258,7 @@ const TooltipArrow = React.forwardRef<
4258
4258
  >(({ className, ...props }, ref) => (
4259
4259
  <TooltipPrimitive.Arrow
4260
4260
  ref={ref}
4261
- className={cn("fill-[#343E55]", className)}
4261
+ className={cn("fill-semantic-primary", className)}
4262
4262
  {...props}
4263
4263
  />
4264
4264
  ));
@@ -4344,14 +4344,14 @@ const mapClassName: { [key in Key]: string } = {
4344
4344
  * Maps color variants to Tailwind text color classes
4345
4345
  */
4346
4346
  const mapColorClassName: { [key in Color]: string } = {
4347
- primary: "text-[#181D27]",
4348
- secondary: "text-[#343E55]",
4349
- muted: "text-[#717680]",
4350
- placeholder: "text-[#A2A6B1]",
4351
- link: "text-[#4275D6]",
4352
- inverted: "text-white",
4353
- error: "text-[#F04438]",
4354
- success: "text-[#17B26A]",
4347
+ primary: "text-semantic-text-primary",
4348
+ secondary: "text-semantic-text-secondary",
4349
+ muted: "text-semantic-text-muted",
4350
+ placeholder: "text-semantic-text-placeholder",
4351
+ link: "text-semantic-text-link",
4352
+ inverted: "text-semantic-text-inverted",
4353
+ error: "text-semantic-error-primary",
4354
+ success: "text-semantic-success-primary",
4355
4355
  };
4356
4356
 
4357
4357
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myoperator-mcp",
3
- "version": "0.2.44",
3
+ "version": "0.2.46",
4
4
  "description": "MCP server for myOperator UI components - enables AI assistants to access component metadata, examples, and design tokens",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",