{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/brand/**",
              "components/core/**",
              "components/data/**",
              "components/feedback/**",
              "components/forms/**",
              "components/navigation/**",
              "components/ted/**",
              "ui_kits/app/**"
            ],
            "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*(?!['\\\"]?(?:Space Mono|DM Sans|Silkscreen|Baloo 2))/i]",
        "message": "Font not provided by the design system. Available: Space Mono, DM Sans, Silkscreen, Baloo 2."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:tone|icon|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: tone, icon."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:neutral|accent|success|warning|lime|inverse)$/]",
        "message": "<Badge> tone must be one of 'neutral' | 'accent' | 'success' | 'warning' | 'lime' | 'inverse'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|iconLeft|iconRight|full|disabled|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: variant, size, iconLeft, iconRight, full, disabled."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|success|secondary|inverse|ghost)$/]",
        "message": "<Button> variant must be one of 'primary' | 'success' | 'secondary' | 'inverse' | 'ghost'."
      },
      {
        "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='Card'] > JSXAttribute > JSXIdentifier[name!=/^(?:tone|shadow|padding|as|key|ref|className|style|children)$/]",
        "message": "<Card> doesn't accept that prop. Declared props: tone, shadow, padding, as."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:default|cream|sunken|accent|success|yellow|inverse)$/]",
        "message": "<Card> tone must be one of 'default' | 'cream' | 'sunken' | 'accent' | 'success' | 'yellow' | 'inverse'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Checkbox'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|checked|disabled|key|ref|className|style|children)$/]",
        "message": "<Checkbox> doesn't accept that prop. Declared props: label, checked, disabled."
      },
      {
        "selector": "JSXOpeningElement[name.name='Dialog'] > JSXAttribute > JSXIdentifier[name!=/^(?:open|title|footer|onClose|width|key|ref|className|style|children)$/]",
        "message": "<Dialog> doesn't accept that prop. Declared props: open, title, footer, onClose, width."
      },
      {
        "selector": "JSXOpeningElement[name.name='EffortMeter'] > JSXAttribute > JSXIdentifier[name!=/^(?:level|showLabel|blockSize|key|ref|className|style|children)$/]",
        "message": "<EffortMeter> doesn't accept that prop. Declared props: level, showLabel, blockSize."
      },
      {
        "selector": "JSXOpeningElement[name.name='Icon'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|size|color|base|title|key|ref|className|style|children)$/]",
        "message": "<Icon> doesn't accept that prop. Declared props: name, size, color, base, title."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|label|variant|size|disabled|key|ref|className|style|children)$/]",
        "message": "<IconButton> doesn't accept that prop. Declared props: icon, label, variant, size, disabled."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|success|secondary|inverse|ghost)$/]",
        "message": "<IconButton> variant must be one of 'primary' | 'success' | 'secondary' | 'inverse' | 'ghost'."
      },
      {
        "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!=/^(?:label|hint|error|icon|suffix|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: label, hint, error, icon, suffix."
      },
      {
        "selector": "JSXOpeningElement[name.name='ListRow'] > JSXAttribute > JSXIdentifier[name!=/^(?:title|subtitle|leading|trailing|icon|last|onClick|key|ref|className|style|children)$/]",
        "message": "<ListRow> doesn't accept that prop. Declared props: title, subtitle, leading, trailing, icon, last, onClick."
      },
      {
        "selector": "JSXOpeningElement[name.name='Logo'] > JSXAttribute > JSXIdentifier[name!=/^(?:height|variant|base|key|ref|className|style|children)$/]",
        "message": "<Logo> doesn't accept that prop. Declared props: height, variant, base."
      },
      {
        "selector": "JSXOpeningElement[name.name='Logo'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:lockup|lockup-cream|lockup-dark|picto)$/]",
        "message": "<Logo> variant must be one of 'lockup' | 'lockup-cream' | 'lockup-dark' | 'picto'."
      },
      {
        "selector": "JSXOpeningElement[name.name='ProgressBar'] > JSXAttribute > JSXIdentifier[name!=/^(?:value|max|tone|label|showValue|height|key|ref|className|style|children)$/]",
        "message": "<ProgressBar> doesn't accept that prop. Declared props: value, max, tone, label, showValue, height."
      },
      {
        "selector": "JSXOpeningElement[name.name='ProgressBar'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:success|accent|yellow|lime|ink)$/]",
        "message": "<ProgressBar> tone must be one of 'success' | 'accent' | 'yellow' | 'lime' | 'ink'."
      },
      {
        "selector": "JSXOpeningElement[name.name='SegmentedControl'] > JSXAttribute > JSXIdentifier[name!=/^(?:options|value|onChange|full|key|ref|className|style|children)$/]",
        "message": "<SegmentedControl> doesn't accept that prop. Declared props: options, value, onChange, full."
      },
      {
        "selector": "JSXOpeningElement[name.name='Select'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|hint|options|key|ref|className|style|children)$/]",
        "message": "<Select> doesn't accept that prop. Declared props: label, hint, options."
      },
      {
        "selector": "JSXOpeningElement[name.name='StatTile'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|value|unit|icon|tone|size|key|ref|className|style|children)$/]",
        "message": "<StatTile> doesn't accept that prop. Declared props: label, value, unit, icon, tone, size."
      },
      {
        "selector": "JSXOpeningElement[name.name='StatTile'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:default|cream|accent|success|inverse)$/]",
        "message": "<StatTile> tone must be one of 'default' | 'cream' | 'accent' | 'success' | 'inverse'."
      },
      {
        "selector": "JSXOpeningElement[name.name='StatTile'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
        "message": "<StatTile> size must be one of 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Switch'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|checked|disabled|key|ref|className|style|children)$/]",
        "message": "<Switch> doesn't accept that prop. Declared props: label, checked, disabled."
      },
      {
        "selector": "JSXOpeningElement[name.name='TabBar'] > JSXAttribute > JSXIdentifier[name!=/^(?:items|value|onChange|key|ref|className|style|children)$/]",
        "message": "<TabBar> doesn't accept that prop. Declared props: items, value, onChange."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|selected|disabled|key|ref|className|style|children)$/]",
        "message": "<Tag> doesn't accept that prop. Declared props: icon, selected, disabled."
      },
      {
        "selector": "JSXOpeningElement[name.name='TedAvatar'] > JSXAttribute > JSXIdentifier[name!=/^(?:mood|size|disc|ring|base|key|ref|className|style|children)$/]",
        "message": "<TedAvatar> doesn't accept that prop. Declared props: mood, size, disc, ring, base."
      },
      {
        "selector": "JSXOpeningElement[name.name='TedAvatar'] > JSXAttribute[name.name='mood'] > Literal[value!=/^(?:neutre|content|fier|coach|compatissant|malicieux|fatigue)$/]",
        "message": "<TedAvatar> mood must be one of 'neutre' | 'content' | 'fier' | 'coach' | 'compatissant' | 'malicieux' | 'fatigue'."
      },
      {
        "selector": "JSXOpeningElement[name.name='TedBubble'] > JSXAttribute > JSXIdentifier[name!=/^(?:mood|avatar|tail|avatarSize|key|ref|className|style|children)$/]",
        "message": "<TedBubble> doesn't accept that prop. Declared props: mood, avatar, tail, avatarSize."
      },
      {
        "selector": "JSXOpeningElement[name.name='TedBubble'] > JSXAttribute[name.name='mood'] > Literal[value!=/^(?:neutre|content|fier|coach|compatissant|malicieux|fatigue)$/]",
        "message": "<TedBubble> mood must be one of 'neutre' | 'content' | 'fier' | 'coach' | 'compatissant' | 'malicieux' | 'fatigue'."
      },
      {
        "selector": "JSXOpeningElement[name.name='TedBubble'] > JSXAttribute[name.name='tail'] > Literal[value!=/^(?:left|right|none)$/]",
        "message": "<TedBubble> tail must be one of 'left' | 'right' | 'none'."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Card": {
        "replaces": []
      },
      "Checkbox": {
        "replaces": []
      },
      "Dialog": {
        "replaces": []
      },
      "EffortMeter": {
        "replaces": []
      },
      "Icon": {
        "replaces": []
      },
      "IconButton": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "ListRow": {
        "replaces": []
      },
      "Logo": {
        "replaces": []
      },
      "ProgressBar": {
        "replaces": []
      },
      "SegmentedControl": {
        "replaces": []
      },
      "Select": {
        "replaces": []
      },
      "StatTile": {
        "replaces": []
      },
      "Switch": {
        "replaces": []
      },
      "TabBar": {
        "replaces": []
      },
      "Tag": {
        "replaces": []
      },
      "TedAvatar": {
        "replaces": []
      },
      "TedBubble": {
        "replaces": []
      }
    },
    "tokens": [
      "--amber-500",
      "--border-1",
      "--border-2",
      "--border-3",
      "--border-strong",
      "--border-subtle",
      "--control-h-lg",
      "--control-h-md",
      "--control-h-sm",
      "--cream-50",
      "--dialogue-shadow",
      "--dur-base",
      "--dur-fast",
      "--dur-instant",
      "--dur-slow",
      "--ease-out",
      "--ease-snap",
      "--ease-step-2",
      "--ease-step-4",
      "--effort-easy",
      "--effort-hard",
      "--effort-max",
      "--effort-steady",
      "--effort-tempo",
      "--font-body",
      "--font-dialogue",
      "--font-display",
      "--font-fun",
      "--font-mono",
      "--gap-card",
      "--gap-stack",
      "--green-100",
      "--green-500",
      "--green-600",
      "--gutter-screen",
      "--indigo-900",
      "--ink-100",
      "--ink-200",
      "--ink-300",
      "--ink-500",
      "--ink-700",
      "--ink-900",
      "--leading-loose",
      "--leading-normal",
      "--leading-snug",
      "--leading-tight",
      "--lime-100",
      "--lime-400",
      "--orange-100",
      "--orange-400",
      "--orange-500",
      "--orange-600",
      "--outline-focus",
      "--outline-focus-offset",
      "--press-translate",
      "--px",
      "--radius-none",
      "--radius-pill",
      "--radius-pixel",
      "--shadow-dialogue",
      "--shadow-pixel",
      "--shadow-pixel-accent",
      "--shadow-pixel-lg",
      "--shadow-pixel-sm",
      "--shadow-pressed",
      "--space-0",
      "--space-1",
      "--space-10",
      "--space-12",
      "--space-16",
      "--space-2",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-8",
      "--state-danger",
      "--state-info",
      "--state-success",
      "--state-warning",
      "--surface-accent",
      "--surface-card",
      "--surface-inverse",
      "--surface-page",
      "--surface-success",
      "--surface-sunken",
      "--tap-min",
      "--ted-navy",
      "--ted-sky",
      "--text-2xl",
      "--text-2xs",
      "--text-3xl",
      "--text-body",
      "--text-faint",
      "--text-lg",
      "--text-link",
      "--text-link-hover",
      "--text-md",
      "--text-muted",
      "--text-on-accent",
      "--text-on-inverse",
      "--text-sm",
      "--text-xl",
      "--text-xs",
      "--tracking-display",
      "--tracking-label",
      "--tracking-normal",
      "--type-body",
      "--type-body-sm",
      "--type-dialogue",
      "--type-fun",
      "--type-label",
      "--type-metric",
      "--type-subtitle",
      "--type-title",
      "--weight-bold",
      "--weight-medium",
      "--weight-regular",
      "--white",
      "--yellow-100",
      "--yellow-400"
    ],
    "tokenKinds": {
      "--font-display": "font",
      "--font-mono": "font",
      "--font-body": "font",
      "--font-dialogue": "font",
      "--font-fun": "font",
      "--orange-500": "color",
      "--green-500": "color",
      "--ink-900": "color",
      "--cream-50": "color",
      "--yellow-400": "color",
      "--lime-400": "color",
      "--amber-500": "color",
      "--orange-600": "color",
      "--orange-400": "color",
      "--orange-100": "color",
      "--green-600": "color",
      "--green-100": "color",
      "--yellow-100": "color",
      "--lime-100": "color",
      "--ink-700": "color",
      "--ink-500": "color",
      "--ink-300": "color",
      "--ink-200": "color",
      "--ink-100": "color",
      "--white": "color",
      "--ted-navy": "color",
      "--ted-sky": "color",
      "--dialogue-shadow": "shadow",
      "--indigo-900": "color",
      "--surface-page": "color",
      "--surface-card": "color",
      "--surface-sunken": "color",
      "--surface-inverse": "color",
      "--surface-accent": "color",
      "--surface-success": "color",
      "--text-body": "font",
      "--text-muted": "font",
      "--text-faint": "font",
      "--text-on-accent": "font",
      "--text-on-inverse": "font",
      "--text-link": "font",
      "--text-link-hover": "font",
      "--border-strong": "color",
      "--border-subtle": "color",
      "--effort-easy": "color",
      "--effort-steady": "color",
      "--effort-tempo": "color",
      "--effort-hard": "color",
      "--effort-max": "color",
      "--state-success": "color",
      "--state-warning": "color",
      "--state-danger": "color",
      "--state-info": "color",
      "--text-3xl": "font",
      "--text-2xl": "font",
      "--text-xl": "font",
      "--text-lg": "font",
      "--text-md": "font",
      "--text-sm": "font",
      "--text-xs": "font",
      "--text-2xs": "font",
      "--leading-tight": "font",
      "--leading-snug": "font",
      "--leading-normal": "font",
      "--leading-loose": "font",
      "--tracking-display": "font",
      "--tracking-normal": "font",
      "--tracking-label": "font",
      "--weight-regular": "font",
      "--weight-medium": "font",
      "--weight-bold": "font",
      "--type-title": "font",
      "--type-subtitle": "font",
      "--type-body": "font",
      "--type-body-sm": "font",
      "--type-label": "font",
      "--type-metric": "font",
      "--type-dialogue": "font",
      "--type-fun": "font",
      "--px": "spacing",
      "--space-0": "spacing",
      "--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",
      "--gutter-screen": "color",
      "--gap-card": "spacing",
      "--gap-stack": "spacing",
      "--tap-min": "spacing",
      "--control-h-sm": "spacing",
      "--control-h-md": "spacing",
      "--control-h-lg": "spacing",
      "--radius-none": "radius",
      "--radius-pixel": "radius",
      "--radius-pill": "radius",
      "--border-1": "spacing",
      "--border-2": "spacing",
      "--border-3": "spacing",
      "--shadow-pixel-sm": "shadow",
      "--shadow-pixel": "shadow",
      "--shadow-pixel-lg": "shadow",
      "--shadow-pixel-accent": "shadow",
      "--shadow-dialogue": "shadow",
      "--shadow-pressed": "shadow",
      "--outline-focus": "color",
      "--outline-focus-offset": "spacing",
      "--ease-step-2": "other",
      "--ease-step-4": "other",
      "--ease-snap": "other",
      "--ease-out": "other",
      "--dur-instant": "other",
      "--dur-fast": "other",
      "--dur-base": "other",
      "--dur-slow": "other",
      "--press-translate": "spacing"
    },
    "fontFamilies": [
      "Baloo 2",
      "DM Sans",
      "Silkscreen",
      "Space Mono"
    ]
  }
}