{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/buttons/**",
              "components/data-display/**",
              "components/feedback/**",
              "components/forms/**",
              "components/navigation/**",
              "ui_kits/genesis/**"
            ],
            "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*(?!['\\\"]?(?:DM Sans|JetBrains Mono))/i]",
        "message": "Font not provided by the design system. Available: DM Sans, JetBrains Mono."
      },
      {
        "selector": "JSXOpeningElement[name.name='Avatar'] > JSXAttribute > JSXIdentifier[name!=/^(?:src|name|size|style|key|ref|className|style|children)$/]",
        "message": "<Avatar> doesn't accept that prop. Declared props: src, name, size, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Avatar'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:xs|sm|md|lg)$/]",
        "message": "<Avatar> size must be one of 'xs' | 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:status|dot|children|style|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: status, dot, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='status'] > Literal[value!=/^(?:published|pending|rejected|info|neutral)$/]",
        "message": "<Badge> status must be one of 'published' | 'pending' | 'rejected' | 'info' | 'neutral'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|disabled|leadingIcon|trailingIcon|fullWidth|type|href|onClick|children|style|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: variant, size, disabled, leadingIcon, trailingIcon, fullWidth, type, href, onClick, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|secondary|ghost|destructive)$/]",
        "message": "<Button> variant must be one of 'primary' | 'secondary' | 'ghost' | 'destructive'."
      },
      {
        "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!=/^(?:interactive|padding|onClick|children|style|key|ref|className|style|children)$/]",
        "message": "<Card> doesn't accept that prop. Declared props: interactive, padding, onClick, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Checkbox'] > JSXAttribute > JSXIdentifier[name!=/^(?:checked|defaultChecked|disabled|onChange|label|key|ref|className|style|children)$/]",
        "message": "<Checkbox> doesn't accept that prop. Declared props: checked, defaultChecked, disabled, onChange, label."
      },
      {
        "selector": "JSXOpeningElement[name.name='Dialog'] > JSXAttribute > JSXIdentifier[name!=/^(?:open|title|description|onClose|footer|width|children|key|ref|className|style|children)$/]",
        "message": "<Dialog> doesn't accept that prop. Declared props: open, title, description, onClose, footer, width, children."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|disabled|label|onClick|children|style|key|ref|className|style|children)$/]",
        "message": "<IconButton> doesn't accept that prop. Declared props: variant, size, disabled, label, onClick, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:ghost|secondary|primary)$/]",
        "message": "<IconButton> variant must be one of 'ghost' | 'secondary' | 'primary'."
      },
      {
        "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!=/^(?:type|size|value|defaultValue|placeholder|disabled|invalid|leadingIcon|onChange|style|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: type, size, value, defaultValue, placeholder, disabled, invalid, leadingIcon, onChange, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md)$/]",
        "message": "<Input> size must be one of 'sm' | 'md'."
      },
      {
        "selector": "JSXOpeningElement[name.name='KitCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|description|author|cover|accent|tags|downloads|likes|onClick|style|key|ref|className|style|children)$/]",
        "message": "<KitCard> doesn't accept that prop. Declared props: name, description, author, cover, accent, tags, downloads, likes, onClick, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='SearchBar'] > JSXAttribute > JSXIdentifier[name!=/^(?:placeholder|shortcut|value|onChange|fullWidth|style|key|ref|className|style|children)$/]",
        "message": "<SearchBar> doesn't accept that prop. Declared props: placeholder, shortcut, value, onChange, fullWidth, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Select'] > JSXAttribute > JSXIdentifier[name!=/^(?:value|defaultValue|disabled|onChange|children|style|key|ref|className|style|children)$/]",
        "message": "<Select> doesn't accept that prop. Declared props: value, defaultValue, disabled, onChange, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Switch'] > JSXAttribute > JSXIdentifier[name!=/^(?:checked|defaultChecked|disabled|onChange|label|key|ref|className|style|children)$/]",
        "message": "<Switch> doesn't accept that prop. Declared props: checked, defaultChecked, disabled, onChange, label."
      },
      {
        "selector": "JSXOpeningElement[name.name='TabItem'] > JSXAttribute > JSXIdentifier[name!=/^(?:id|label|count|key|ref|className|style|children)$/]",
        "message": "<TabItem> doesn't accept that prop. Declared props: id, label, count."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute > JSXIdentifier[name!=/^(?:active|onClick|children|style|key|ref|className|style|children)$/]",
        "message": "<Tag> doesn't accept that prop. Declared props: active, onClick, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Toast'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|title|message|onClose|style|key|ref|className|style|children)$/]",
        "message": "<Toast> doesn't accept that prop. Declared props: variant, title, message, onClose, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Toast'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:success|error|info|neutral)$/]",
        "message": "<Toast> variant must be one of 'success' | 'error' | 'info' | 'neutral'."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "Avatar": {
        "replaces": []
      },
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Card": {
        "replaces": []
      },
      "Checkbox": {
        "replaces": []
      },
      "Dialog": {
        "replaces": []
      },
      "IconButton": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "KitCard": {
        "replaces": []
      },
      "SearchBar": {
        "replaces": []
      },
      "Select": {
        "replaces": []
      },
      "Switch": {
        "replaces": []
      },
      "TabItem": {
        "replaces": []
      },
      "Tag": {
        "replaces": []
      },
      "Toast": {
        "replaces": []
      }
    },
    "tokens": [
      "--bg",
      "--border",
      "--border-strong",
      "--brand-green",
      "--color-bg",
      "--color-bg-alt",
      "--color-border",
      "--color-error",
      "--color-error-50",
      "--color-gray-100",
      "--color-gray-600",
      "--color-green-600",
      "--color-indigo-50",
      "--color-indigo-500",
      "--color-indigo-600",
      "--color-ink-400",
      "--color-ink-600",
      "--color-ink-900",
      "--color-success",
      "--color-success-50",
      "--color-warning",
      "--color-warning-50",
      "--color-white",
      "--container-max",
      "--container-pad",
      "--duration-base",
      "--duration-fast",
      "--ease-standard",
      "--focus-ring",
      "--font-body",
      "--font-display",
      "--font-mono",
      "--grid-gap",
      "--leading-normal",
      "--leading-snug",
      "--leading-tight",
      "--nav-bg",
      "--nav-blur",
      "--nav-height",
      "--primary",
      "--primary-glow",
      "--primary-hover",
      "--primary-tint",
      "--radius-full",
      "--radius-lg",
      "--radius-md",
      "--radius-sm",
      "--radius-xs",
      "--ring-focus",
      "--section-gap-desktop",
      "--section-gap-mobile",
      "--section-gap-tablet",
      "--shadow-card-hover",
      "--shadow-dialog",
      "--shadow-lg",
      "--shadow-primary-hover",
      "--space-1",
      "--space-10",
      "--space-12",
      "--space-16",
      "--space-2",
      "--space-20",
      "--space-24",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-8",
      "--status-pending",
      "--status-published",
      "--status-rejected",
      "--surface",
      "--surface-alt",
      "--text-body",
      "--text-caption",
      "--text-display",
      "--text-headline",
      "--text-muted",
      "--text-on-primary",
      "--text-overline",
      "--text-primary",
      "--text-secondary",
      "--text-section",
      "--text-small",
      "--text-subhead",
      "--tracking-display",
      "--tracking-heading",
      "--tracking-normal",
      "--tracking-overline",
      "--weight-bold",
      "--weight-medium",
      "--weight-regular",
      "--weight-semibold"
    ],
    "tokenKinds": {
      "--color-indigo-500": "color",
      "--color-indigo-600": "color",
      "--color-green-600": "color",
      "--color-success": "color",
      "--color-warning": "color",
      "--color-error": "color",
      "--color-ink-900": "color",
      "--color-ink-600": "color",
      "--color-ink-400": "color",
      "--color-white": "color",
      "--color-bg": "color",
      "--color-border": "color",
      "--color-bg-alt": "color",
      "--color-indigo-50": "color",
      "--color-success-50": "color",
      "--color-warning-50": "color",
      "--color-error-50": "color",
      "--color-gray-100": "color",
      "--color-gray-600": "color",
      "--primary": "color",
      "--primary-hover": "color",
      "--primary-tint": "color",
      "--brand-green": "color",
      "--bg": "color",
      "--surface": "color",
      "--surface-alt": "color",
      "--text-primary": "font",
      "--text-secondary": "font",
      "--text-muted": "font",
      "--text-on-primary": "font",
      "--border": "color",
      "--border-strong": "color",
      "--focus-ring": "color",
      "--primary-glow": "color",
      "--status-published": "color",
      "--status-pending": "color",
      "--status-rejected": "color",
      "--font-display": "font",
      "--font-body": "font",
      "--font-mono": "font",
      "--text-display": "font",
      "--text-headline": "font",
      "--text-section": "font",
      "--text-subhead": "font",
      "--text-body": "font",
      "--text-small": "font",
      "--text-caption": "font",
      "--text-overline": "font",
      "--weight-regular": "font",
      "--weight-medium": "font",
      "--weight-semibold": "font",
      "--weight-bold": "font",
      "--leading-tight": "font",
      "--leading-snug": "font",
      "--leading-normal": "font",
      "--tracking-display": "font",
      "--tracking-heading": "font",
      "--tracking-normal": "font",
      "--tracking-overline": "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",
      "--space-24": "spacing",
      "--container-max": "spacing",
      "--container-pad": "spacing",
      "--grid-gap": "spacing",
      "--section-gap-mobile": "spacing",
      "--section-gap-tablet": "spacing",
      "--section-gap-desktop": "spacing",
      "--radius-xs": "radius",
      "--radius-sm": "radius",
      "--radius-md": "radius",
      "--radius-lg": "radius",
      "--radius-full": "radius",
      "--shadow-card-hover": "shadow",
      "--shadow-primary-hover": "shadow",
      "--shadow-lg": "shadow",
      "--shadow-dialog": "shadow",
      "--ring-focus": "color",
      "--ease-standard": "other",
      "--duration-fast": "other",
      "--duration-base": "other",
      "--nav-height": "spacing",
      "--nav-blur": "other",
      "--nav-bg": "color"
    },
    "fontFamilies": [
      "DM Sans",
      "JetBrains Mono"
    ]
  }
}