{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/buttons/**",
              "components/display/**",
              "components/forms/**",
              "ui_kits/marketing/**"
            ],
            "message": "Import design-system components from 'index.js', not component internals."
          }
        ]
      }
    ],
    "no-restricted-syntax": [
      "warn",
      {
        "selector": "Literal[value=/#[0-9a-fA-F]{3,8}\\b/]",
        "message": "Raw hex color — use a design-system color token via var()."
      },
      {
        "selector": "Literal[value=/\\b\\d+px\\b/]",
        "message": "Raw px value — use a design-system spacing token via var()."
      },
      {
        "selector": "Literal[value=/font-family\\s*:\\s*(?!['\\\"]?(?:IBM Plex Mono|IBM Plex Sans|IBM Plex Serif))/i]",
        "message": "Font not provided by the design system. Available: IBM Plex Mono, IBM Plex Sans, IBM Plex Serif."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|tone|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: children, tone."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:neutral|brand|gold|green)$/]",
        "message": "<Badge> tone must be one of 'neutral' | 'brand' | 'gold' | 'green'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|size|arrow|icon|href|type|disabled|style|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: children, variant, size, arrow, icon, href, type, disabled, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|ghost|onDark|ghostDark)$/]",
        "message": "<Button> variant must be one of 'primary' | 'ghost' | 'onDark' | 'ghostDark'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
        "message": "<Button> size must be one of 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='type'] > Literal[value!=/^(?:button|submit|reset)$/]",
        "message": "<Button> type must be one of 'button' | 'submit' | 'reset'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|hover|padding|radius|key|ref|className|style|children)$/]",
        "message": "<Card> doesn't accept that prop. Declared props: children, hover, padding, radius."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|tone|key|ref|className|style|children)$/]",
        "message": "<Eyebrow> doesn't accept that prop. Declared props: children, variant, tone."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:rule|capsule|plain)$/]",
        "message": "<Eyebrow> variant must be one of 'rule' | 'capsule' | 'plain'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:light|dark)$/]",
        "message": "<Eyebrow> tone must be one of 'light' | 'dark'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Field'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|htmlFor|hint|error|tone|children|style|key|ref|className|style|children)$/]",
        "message": "<Field> doesn't accept that prop. Declared props: label, htmlFor, hint, error, tone, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Field'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:light|dark)$/]",
        "message": "<Field> tone must be one of 'light' | 'dark'."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|label|variant|size|href|disabled|style|key|ref|className|style|children)$/]",
        "message": "<IconButton> doesn't accept that prop. Declared props: children, label, variant, size, href, disabled, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:ghost|solid|soft)$/]",
        "message": "<IconButton> variant must be one of 'ghost' | 'solid' | 'soft'."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
        "message": "<IconButton> size must be one of 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute > JSXIdentifier[name!=/^(?:tone|invalid|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: tone, invalid."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:light|dark)$/]",
        "message": "<Input> tone must be one of 'light' | 'dark'."
      },
      {
        "selector": "JSXOpeningElement[name.name='LiveDot'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|color|size|key|ref|className|style|children)$/]",
        "message": "<LiveDot> doesn't accept that prop. Declared props: label, color, size."
      },
      {
        "selector": "JSXOpeningElement[name.name='MetricTag'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|value|lit|key|ref|className|style|children)$/]",
        "message": "<MetricTag> doesn't accept that prop. Declared props: label, value, lit."
      },
      {
        "selector": "JSXOpeningElement[name.name='SelectOption'] > JSXAttribute > JSXIdentifier[name!=/^(?:value|label|key|ref|className|style|children)$/]",
        "message": "<SelectOption> doesn't accept that prop. Declared props: value, label."
      },
      {
        "selector": "JSXOpeningElement[name.name='StepNumber'] > JSXAttribute > JSXIdentifier[name!=/^(?:n|pad|size|key|ref|className|style|children)$/]",
        "message": "<StepNumber> doesn't accept that prop. Declared props: n, pad, size."
      },
      {
        "selector": "JSXOpeningElement[name.name='Textarea'] > JSXAttribute > JSXIdentifier[name!=/^(?:tone|rows|key|ref|className|style|children)$/]",
        "message": "<Textarea> doesn't accept that prop. Declared props: tone, rows."
      },
      {
        "selector": "JSXOpeningElement[name.name='Textarea'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:light|dark)$/]",
        "message": "<Textarea> tone must be one of 'light' | 'dark'."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Card": {
        "replaces": []
      },
      "Eyebrow": {
        "replaces": []
      },
      "Field": {
        "replaces": []
      },
      "IconButton": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "LiveDot": {
        "replaces": []
      },
      "MetricTag": {
        "replaces": []
      },
      "SelectOption": {
        "replaces": []
      },
      "StepNumber": {
        "replaces": []
      },
      "Textarea": {
        "replaces": []
      }
    },
    "tokens": [
      "--accent",
      "--border",
      "--border-strong",
      "--brand",
      "--brand-hover",
      "--dot-amber",
      "--dot-green",
      "--dot-red",
      "--dur",
      "--dur-fast",
      "--dur-slow",
      "--ease-out",
      "--focus-ring",
      "--font-body",
      "--font-display",
      "--font-label",
      "--font-mono",
      "--font-sans",
      "--font-serif",
      "--fs-body",
      "--fs-body-sm",
      "--fs-caption",
      "--fs-display",
      "--fs-eyebrow",
      "--fs-h1",
      "--fs-h2",
      "--fs-h3",
      "--fs-lede",
      "--fs-mono-sm",
      "--fw-bold",
      "--fw-medium",
      "--fw-regular",
      "--fw-semibold",
      "--gold",
      "--gold-ink",
      "--gold-soft",
      "--gold-tint",
      "--gutter",
      "--ink",
      "--ink-navy",
      "--ink-navy-2",
      "--lh-body",
      "--lh-snug",
      "--lh-tight",
      "--line",
      "--line-2",
      "--ls-display",
      "--ls-eyebrow",
      "--ls-label",
      "--ls-tight",
      "--maxw",
      "--maxw-prose",
      "--measure-display",
      "--measure-lede",
      "--muted",
      "--navy",
      "--navy-700",
      "--navy-800",
      "--on-brand",
      "--on-dark",
      "--on-dark-mut",
      "--paper",
      "--paper-2",
      "--paper-3",
      "--radius",
      "--radius-lg",
      "--radius-md",
      "--radius-pill",
      "--radius-sm",
      "--radius-xl",
      "--section-pad",
      "--shadow",
      "--shadow-brand",
      "--shadow-gold",
      "--shadow-lg",
      "--shadow-sm",
      "--sheet-green",
      "--sheet-green-bg",
      "--slate",
      "--space-1",
      "--space-10",
      "--space-12",
      "--space-16",
      "--space-2",
      "--space-20",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-8",
      "--success",
      "--surface",
      "--surface-alt",
      "--surface-card",
      "--surface-dark",
      "--surface-sunken",
      "--text-body",
      "--text-muted",
      "--text-on-dark",
      "--text-on-dark-muted",
      "--text-strong"
    ],
    "tokenKinds": {
      "--navy": "color",
      "--navy-700": "color",
      "--navy-800": "color",
      "--ink-navy": "color",
      "--ink-navy-2": "color",
      "--paper": "color",
      "--paper-2": "color",
      "--paper-3": "color",
      "--line": "color",
      "--line-2": "color",
      "--ink": "color",
      "--slate": "color",
      "--muted": "color",
      "--on-dark": "color",
      "--on-dark-mut": "color",
      "--gold": "color",
      "--gold-soft": "color",
      "--gold-tint": "color",
      "--gold-ink": "color",
      "--sheet-green": "color",
      "--sheet-green-bg": "color",
      "--dot-red": "color",
      "--dot-amber": "color",
      "--dot-green": "color",
      "--surface": "color",
      "--surface-alt": "color",
      "--surface-sunken": "color",
      "--surface-card": "color",
      "--surface-dark": "color",
      "--text-strong": "font",
      "--text-body": "font",
      "--text-muted": "font",
      "--text-on-dark": "font",
      "--text-on-dark-muted": "font",
      "--border": "color",
      "--border-strong": "color",
      "--brand": "color",
      "--brand-hover": "color",
      "--accent": "color",
      "--success": "color",
      "--on-brand": "color",
      "--focus-ring": "shadow",
      "--font-serif": "font",
      "--font-sans": "font",
      "--font-mono": "font",
      "--font-display": "font",
      "--font-body": "font",
      "--font-label": "font",
      "--fw-regular": "font",
      "--fw-medium": "font",
      "--fw-semibold": "font",
      "--fw-bold": "font",
      "--fs-display": "font",
      "--fs-h1": "font",
      "--fs-h2": "font",
      "--fs-h3": "font",
      "--fs-lede": "font",
      "--fs-body": "font",
      "--fs-body-sm": "font",
      "--fs-caption": "font",
      "--fs-eyebrow": "font",
      "--fs-mono-sm": "font",
      "--lh-tight": "font",
      "--lh-snug": "font",
      "--lh-body": "font",
      "--ls-display": "font",
      "--ls-tight": "font",
      "--ls-eyebrow": "font",
      "--ls-label": "font",
      "--space-1": "spacing",
      "--space-2": "spacing",
      "--space-3": "spacing",
      "--space-4": "spacing",
      "--space-5": "spacing",
      "--space-6": "spacing",
      "--space-8": "spacing",
      "--space-10": "spacing",
      "--space-12": "spacing",
      "--space-16": "spacing",
      "--space-20": "spacing",
      "--maxw": "spacing",
      "--maxw-prose": "spacing",
      "--gutter": "spacing",
      "--section-pad": "spacing",
      "--measure-lede": "spacing",
      "--measure-display": "spacing",
      "--radius-sm": "radius",
      "--radius": "radius",
      "--radius-md": "radius",
      "--radius-lg": "radius",
      "--radius-xl": "radius",
      "--radius-pill": "radius",
      "--shadow-sm": "shadow",
      "--shadow": "shadow",
      "--shadow-lg": "shadow",
      "--shadow-gold": "shadow",
      "--shadow-brand": "shadow",
      "--ease-out": "other",
      "--dur-fast": "other",
      "--dur": "other",
      "--dur-slow": "other"
    },
    "fontFamilies": [
      "IBM Plex Mono",
      "IBM Plex Sans",
      "IBM Plex Serif"
    ]
  }
}
