503 lines
16 KiB
JSON
503 lines
16 KiB
JSON
{
|
|
"plugins": [
|
|
"react",
|
|
"import"
|
|
],
|
|
"rules": {
|
|
"react/forbid-elements": [
|
|
"warn",
|
|
{
|
|
"forbid": []
|
|
}
|
|
],
|
|
"no-restricted-imports": [
|
|
"warn",
|
|
{
|
|
"patterns": [
|
|
{
|
|
"group": [
|
|
"components/core/**",
|
|
"components/product/**",
|
|
"ui_kits/storefront/**"
|
|
],
|
|
"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*(?!['\\\"]?(?:Nunito|Nunito Fallback))/i]",
|
|
"message": "Font not provided by the design system. Available: Nunito, Nunito Fallback."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|size|dot|key|ref|className|style|children)$/]",
|
|
"message": "<Badge> doesn't accept that prop. Declared props: children, variant, size, dot."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:brand|blue|purple|neutral|success|warning|error|dark|outline)$/]",
|
|
"message": "<Badge> variant must be one of 'brand' | 'blue' | 'purple' | 'neutral' | 'success' | 'warning' | 'error' | 'dark' | 'outline'."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
|
|
"message": "<Badge> size must be one of 'sm' | 'md' | 'lg'."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|disabled|fullWidth|icon|iconPosition|onClick|type|href|children|key|ref|className|style|children)$/]",
|
|
"message": "<Button> doesn't accept that prop. Declared props: variant, size, disabled, fullWidth, icon, iconPosition, onClick, type, href, children."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:gradient|primary|secondary|outline|ghost|danger)$/]",
|
|
"message": "<Button> variant must be one of 'gradient' | 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg|xl)$/]",
|
|
"message": "<Button> size must be one of 'sm' | 'md' | 'lg' | 'xl'."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='iconPosition'] > Literal[value!=/^(?:left|right)$/]",
|
|
"message": "<Button> iconPosition must be one of 'left' | 'right'."
|
|
},
|
|
{
|
|
"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='CategoryCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:image|title|description|ctaLabel|href|align|badge|key|ref|className|style|children)$/]",
|
|
"message": "<CategoryCard> doesn't accept that prop. Declared props: image, title, description, ctaLabel, href, align, badge."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='CategoryCard'] > JSXAttribute[name.name='align'] > Literal[value!=/^(?:left|right)$/]",
|
|
"message": "<CategoryCard> align must be one of 'left' | 'right'."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='ProductCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:image|name|price|originalPrice|badge|category|onAddToCart|onWishlist|wishlisted|href|key|ref|className|style|children)$/]",
|
|
"message": "<ProductCard> doesn't accept that prop. Declared props: image, name, price, originalPrice, badge, category, onAddToCart, onWishlist, wishlisted, href."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|active|onClick|onRemove|color|key|ref|className|style|children)$/]",
|
|
"message": "<Tag> doesn't accept that prop. Declared props: children, active, onClick, onRemove, color."
|
|
},
|
|
{
|
|
"selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute[name.name='color'] > Literal[value!=/^(?:default|blue|purple|green|orange)$/]",
|
|
"message": "<Tag> color must be one of 'default' | 'blue' | 'purple' | 'green' | 'orange'."
|
|
}
|
|
]
|
|
},
|
|
"overrides": [
|
|
{
|
|
"files": [
|
|
"**/index.js"
|
|
],
|
|
"rules": {
|
|
"no-restricted-imports": "off"
|
|
}
|
|
}
|
|
],
|
|
"x-omelette": {
|
|
"components": {
|
|
"Badge": {
|
|
"replaces": []
|
|
},
|
|
"Button": {
|
|
"replaces": []
|
|
},
|
|
"CategoryCard": {
|
|
"replaces": []
|
|
},
|
|
"ProductCard": {
|
|
"replaces": []
|
|
},
|
|
"Tag": {
|
|
"replaces": []
|
|
}
|
|
},
|
|
"tokens": [
|
|
"--border-brand",
|
|
"--border-default",
|
|
"--border-strong",
|
|
"--border-subtle",
|
|
"--brand-blue",
|
|
"--brand-gradient",
|
|
"--brand-gradient-h",
|
|
"--brand-purple",
|
|
"--color-accent-100",
|
|
"--color-accent-200",
|
|
"--color-accent-300",
|
|
"--color-accent-400",
|
|
"--color-accent-50",
|
|
"--color-accent-500",
|
|
"--color-accent-600",
|
|
"--color-accent-700",
|
|
"--color-accent-800",
|
|
"--color-accent-900",
|
|
"--color-error",
|
|
"--color-error-bg",
|
|
"--color-info",
|
|
"--color-info-bg",
|
|
"--color-neutral-0",
|
|
"--color-neutral-100",
|
|
"--color-neutral-1000",
|
|
"--color-neutral-150",
|
|
"--color-neutral-200",
|
|
"--color-neutral-300",
|
|
"--color-neutral-400",
|
|
"--color-neutral-50",
|
|
"--color-neutral-500",
|
|
"--color-neutral-600",
|
|
"--color-neutral-700",
|
|
"--color-neutral-800",
|
|
"--color-neutral-900",
|
|
"--color-primary-100",
|
|
"--color-primary-200",
|
|
"--color-primary-300",
|
|
"--color-primary-400",
|
|
"--color-primary-50",
|
|
"--color-primary-500",
|
|
"--color-primary-600",
|
|
"--color-primary-700",
|
|
"--color-primary-800",
|
|
"--color-primary-900",
|
|
"--color-success",
|
|
"--color-success-bg",
|
|
"--color-warning",
|
|
"--color-warning-bg",
|
|
"--container-2xl",
|
|
"--container-lg",
|
|
"--container-md",
|
|
"--container-sm",
|
|
"--container-xl",
|
|
"--duration-base",
|
|
"--duration-fast",
|
|
"--duration-slow",
|
|
"--ease-in",
|
|
"--ease-in-out",
|
|
"--ease-out",
|
|
"--ease-spring",
|
|
"--font-mono",
|
|
"--font-primary",
|
|
"--fw-black",
|
|
"--fw-bold",
|
|
"--fw-extrabold",
|
|
"--fw-light",
|
|
"--fw-medium",
|
|
"--fw-regular",
|
|
"--fw-semibold",
|
|
"--header-height",
|
|
"--lh-loose",
|
|
"--lh-normal",
|
|
"--lh-relaxed",
|
|
"--lh-snug",
|
|
"--lh-tight",
|
|
"--ls-normal",
|
|
"--ls-snug",
|
|
"--ls-tight",
|
|
"--ls-wide",
|
|
"--ls-wider",
|
|
"--ls-widest",
|
|
"--nav-height",
|
|
"--radius-2xl",
|
|
"--radius-3xl",
|
|
"--radius-brand",
|
|
"--radius-full",
|
|
"--radius-lg",
|
|
"--radius-md",
|
|
"--radius-none",
|
|
"--radius-sm",
|
|
"--radius-xl",
|
|
"--radius-xs",
|
|
"--shadow-accent",
|
|
"--shadow-brand",
|
|
"--shadow-lg",
|
|
"--shadow-md",
|
|
"--shadow-sm",
|
|
"--shadow-xl",
|
|
"--shadow-xs",
|
|
"--space-0",
|
|
"--space-0-5",
|
|
"--space-1",
|
|
"--space-1-5",
|
|
"--space-10",
|
|
"--space-12",
|
|
"--space-14",
|
|
"--space-16",
|
|
"--space-2",
|
|
"--space-20",
|
|
"--space-24",
|
|
"--space-28",
|
|
"--space-3",
|
|
"--space-32",
|
|
"--space-4",
|
|
"--space-40",
|
|
"--space-48",
|
|
"--space-5",
|
|
"--space-6",
|
|
"--space-7",
|
|
"--space-8",
|
|
"--space-px",
|
|
"--surface-card",
|
|
"--surface-overlay",
|
|
"--surface-page",
|
|
"--surface-raised",
|
|
"--surface-subtle",
|
|
"--text-2xl",
|
|
"--text-3xl",
|
|
"--text-4xl",
|
|
"--text-5xl",
|
|
"--text-6xl",
|
|
"--text-accent",
|
|
"--text-base",
|
|
"--text-brand",
|
|
"--text-inverse",
|
|
"--text-lg",
|
|
"--text-md",
|
|
"--text-muted",
|
|
"--text-primary",
|
|
"--text-secondary",
|
|
"--text-sm",
|
|
"--text-xl",
|
|
"--text-xs",
|
|
"--transition-base",
|
|
"--transition-spring",
|
|
"--type-body-family",
|
|
"--type-body-lg-lh",
|
|
"--type-body-lg-size",
|
|
"--type-body-lh",
|
|
"--type-body-size",
|
|
"--type-body-weight",
|
|
"--type-btn-ls",
|
|
"--type-btn-size",
|
|
"--type-btn-weight",
|
|
"--type-caption-ls",
|
|
"--type-caption-size",
|
|
"--type-caption-weight",
|
|
"--type-display-family",
|
|
"--type-display-lh",
|
|
"--type-display-ls",
|
|
"--type-display-size",
|
|
"--type-display-weight",
|
|
"--type-h1-family",
|
|
"--type-h1-lh",
|
|
"--type-h1-ls",
|
|
"--type-h1-size",
|
|
"--type-h1-weight",
|
|
"--type-h2-lh",
|
|
"--type-h2-size",
|
|
"--type-h2-weight",
|
|
"--type-h3-lh",
|
|
"--type-h3-size",
|
|
"--type-h3-weight",
|
|
"--type-h4-lh",
|
|
"--type-h4-size",
|
|
"--type-h4-weight",
|
|
"--z-base",
|
|
"--z-dropdown",
|
|
"--z-modal",
|
|
"--z-overlay",
|
|
"--z-raised",
|
|
"--z-sticky",
|
|
"--z-toast",
|
|
"--z-tooltip"
|
|
],
|
|
"tokenKinds": {
|
|
"--brand-blue": "color",
|
|
"--brand-purple": "color",
|
|
"--brand-gradient": "color",
|
|
"--brand-gradient-h": "color",
|
|
"--color-primary-50": "color",
|
|
"--color-primary-100": "color",
|
|
"--color-primary-200": "color",
|
|
"--color-primary-300": "color",
|
|
"--color-primary-400": "color",
|
|
"--color-primary-500": "color",
|
|
"--color-primary-600": "color",
|
|
"--color-primary-700": "color",
|
|
"--color-primary-800": "color",
|
|
"--color-primary-900": "color",
|
|
"--color-accent-50": "color",
|
|
"--color-accent-100": "color",
|
|
"--color-accent-200": "color",
|
|
"--color-accent-300": "color",
|
|
"--color-accent-400": "color",
|
|
"--color-accent-500": "color",
|
|
"--color-accent-600": "color",
|
|
"--color-accent-700": "color",
|
|
"--color-accent-800": "color",
|
|
"--color-accent-900": "color",
|
|
"--color-neutral-0": "color",
|
|
"--color-neutral-50": "color",
|
|
"--color-neutral-100": "color",
|
|
"--color-neutral-150": "color",
|
|
"--color-neutral-200": "color",
|
|
"--color-neutral-300": "color",
|
|
"--color-neutral-400": "color",
|
|
"--color-neutral-500": "color",
|
|
"--color-neutral-600": "color",
|
|
"--color-neutral-700": "color",
|
|
"--color-neutral-800": "color",
|
|
"--color-neutral-900": "color",
|
|
"--color-neutral-1000": "color",
|
|
"--color-success": "color",
|
|
"--color-success-bg": "color",
|
|
"--color-warning": "color",
|
|
"--color-warning-bg": "color",
|
|
"--color-error": "color",
|
|
"--color-error-bg": "color",
|
|
"--color-info": "color",
|
|
"--color-info-bg": "color",
|
|
"--text-primary": "font",
|
|
"--text-secondary": "font",
|
|
"--text-muted": "font",
|
|
"--text-inverse": "font",
|
|
"--text-brand": "font",
|
|
"--text-accent": "font",
|
|
"--surface-page": "color",
|
|
"--surface-subtle": "color",
|
|
"--surface-card": "color",
|
|
"--surface-raised": "color",
|
|
"--surface-overlay": "color",
|
|
"--border-subtle": "color",
|
|
"--border-default": "color",
|
|
"--border-strong": "color",
|
|
"--border-brand": "color",
|
|
"--font-primary": "font",
|
|
"--font-mono": "font",
|
|
"--fw-light": "other",
|
|
"--fw-regular": "other",
|
|
"--fw-medium": "other",
|
|
"--fw-semibold": "other",
|
|
"--fw-bold": "other",
|
|
"--fw-extrabold": "other",
|
|
"--fw-black": "other",
|
|
"--text-xs": "font",
|
|
"--text-sm": "font",
|
|
"--text-base": "font",
|
|
"--text-md": "font",
|
|
"--text-lg": "font",
|
|
"--text-xl": "font",
|
|
"--text-2xl": "font",
|
|
"--text-3xl": "font",
|
|
"--text-4xl": "font",
|
|
"--text-5xl": "font",
|
|
"--text-6xl": "font",
|
|
"--lh-tight": "other",
|
|
"--lh-snug": "other",
|
|
"--lh-normal": "other",
|
|
"--lh-relaxed": "other",
|
|
"--lh-loose": "other",
|
|
"--ls-tight": "other",
|
|
"--ls-snug": "other",
|
|
"--ls-normal": "other",
|
|
"--ls-wide": "other",
|
|
"--ls-wider": "other",
|
|
"--ls-widest": "other",
|
|
"--type-display-family": "font",
|
|
"--type-display-weight": "font",
|
|
"--type-display-size": "font",
|
|
"--type-display-lh": "font",
|
|
"--type-display-ls": "font",
|
|
"--type-h1-family": "font",
|
|
"--type-h1-weight": "font",
|
|
"--type-h1-size": "font",
|
|
"--type-h1-lh": "font",
|
|
"--type-h1-ls": "font",
|
|
"--type-h2-weight": "font",
|
|
"--type-h2-size": "font",
|
|
"--type-h2-lh": "font",
|
|
"--type-h3-weight": "font",
|
|
"--type-h3-size": "font",
|
|
"--type-h3-lh": "font",
|
|
"--type-h4-weight": "font",
|
|
"--type-h4-size": "font",
|
|
"--type-h4-lh": "font",
|
|
"--type-body-family": "font",
|
|
"--type-body-weight": "font",
|
|
"--type-body-size": "font",
|
|
"--type-body-lh": "font",
|
|
"--type-body-lg-size": "font",
|
|
"--type-body-lg-lh": "font",
|
|
"--type-caption-weight": "font",
|
|
"--type-caption-size": "font",
|
|
"--type-caption-ls": "font",
|
|
"--type-btn-weight": "font",
|
|
"--type-btn-size": "font",
|
|
"--type-btn-ls": "font",
|
|
"--space-0": "spacing",
|
|
"--space-px": "spacing",
|
|
"--space-0-5": "spacing",
|
|
"--space-1": "spacing",
|
|
"--space-1-5": "spacing",
|
|
"--space-2": "spacing",
|
|
"--space-3": "spacing",
|
|
"--space-4": "spacing",
|
|
"--space-5": "spacing",
|
|
"--space-6": "spacing",
|
|
"--space-7": "spacing",
|
|
"--space-8": "spacing",
|
|
"--space-10": "spacing",
|
|
"--space-12": "spacing",
|
|
"--space-14": "spacing",
|
|
"--space-16": "spacing",
|
|
"--space-20": "spacing",
|
|
"--space-24": "spacing",
|
|
"--space-28": "spacing",
|
|
"--space-32": "spacing",
|
|
"--space-40": "spacing",
|
|
"--space-48": "spacing",
|
|
"--radius-none": "radius",
|
|
"--radius-xs": "radius",
|
|
"--radius-sm": "radius",
|
|
"--radius-md": "radius",
|
|
"--radius-lg": "radius",
|
|
"--radius-xl": "radius",
|
|
"--radius-2xl": "radius",
|
|
"--radius-3xl": "radius",
|
|
"--radius-full": "radius",
|
|
"--radius-brand": "radius",
|
|
"--shadow-xs": "shadow",
|
|
"--shadow-sm": "shadow",
|
|
"--shadow-md": "shadow",
|
|
"--shadow-lg": "shadow",
|
|
"--shadow-xl": "shadow",
|
|
"--shadow-brand": "shadow",
|
|
"--shadow-accent": "shadow",
|
|
"--container-sm": "spacing",
|
|
"--container-md": "spacing",
|
|
"--container-lg": "spacing",
|
|
"--container-xl": "spacing",
|
|
"--container-2xl": "spacing",
|
|
"--header-height": "spacing",
|
|
"--nav-height": "spacing",
|
|
"--ease-out": "other",
|
|
"--ease-in": "other",
|
|
"--ease-in-out": "other",
|
|
"--ease-spring": "other",
|
|
"--duration-fast": "other",
|
|
"--duration-base": "other",
|
|
"--duration-slow": "other",
|
|
"--transition-base": "other",
|
|
"--transition-spring": "other",
|
|
"--z-base": "other",
|
|
"--z-raised": "other",
|
|
"--z-dropdown": "other",
|
|
"--z-sticky": "other",
|
|
"--z-overlay": "other",
|
|
"--z-modal": "other",
|
|
"--z-toast": "other",
|
|
"--z-tooltip": "other"
|
|
},
|
|
"fontFamilies": [
|
|
"Nunito",
|
|
"Nunito Fallback"
|
|
]
|
|
}
|
|
} |