@maltjoy/eslint-rules
v6.4.0
Published
Custom ESLint rules for the @maltjoy/core-vue design system
Keywords
Readme
@maltjoy/eslint-rules
Custom ESLint rules for Maltjoy design system usage.
This package is ESM-only ("type": "module"). Use import from eslint.config.mjs / eslint.config.js (with ESM).
Rules
no-html-button: disallow native HTML<button>elements. UseVJoyButtonorVJoyIconButtoninstead.
Message:
Do not use native HTML button elements, use VJoyButton or VJoyIconButton instead.
no-vjoyavatar-fullname-totalnumber: disallow usingfullNameandtotalNumbertogether onVJoyAvatar. This rule is a warning in the recommended preset.
Message:
VJoyAvatar fullName and totalNumber props are mutually exclusive.
no-vjoyavatar-photourl-totalnumber: disallow usingphotoUrlandtotalNumbertogether onVJoyAvatar. This rule is a warning in the recommended preset.
Message:
VJoyAvatar photoUrl and totalNumber props are mutually exclusive.
no-vjoybutton-circle: disallowcircleprop usage onVJoyButton/v-joy-button.
Message:
VJoyButton circle property is deprecated, please use VJoyIconButton instead
no-vjoycompanyavatar: disallowVJoyCompanyAvatarusage. UseVJoyAvatarinstead. This rule is a warning in the recommended preset.
Message:
VJoyCompanyAvatar is deprecated, use VJoyAvatar instead.
no-vjoyformgroup-vjoyradio: disallowVJoyRadioinsideVJoyFormGroup. UseVJoyRadioGroupto group radios instead.
Message:
VJoyFormGroup shouldn't be used around a VJoyRadio. Use VJoyRadioGroup instead.
no-vjoyfunnelfooter-slot: disallow deprecated#funnel-footerslot usage onVJoyFunnel. UseVJoyFunnelFooterin the default slot instead. This rule is a warning in the recommended preset.
Message:
VJoyFunnel funnel-footer slot is deprecated, use VJoyFunnelFooter in the default slot instead.
no-vjoyinput-type-password: disallowVJoyInputwithtype="password"(or a literal:typebound topassword). UseVJoyInputPasswordinstead.no-vjoyinput-unit: disallowunitprop usage onVJoyInput. UseVJoyInputNumberinstead.
Message:
Do not use VJoyInput with unit, use VJoyInputNumber instead.
no-vjoymenu-vjoypanel: disallowVJoyMenuinsideVJoyPanel.
Message:
Never use a VJoyMenu inside a VJoyPanel.
no-vjoysnackbar-direct: disallow directVJoySnackbarusage in templates. UsepushVJoySnackbarfrom@maltjoy/core-vueinstead.
Message:
Do not use VJoySnackbar directly, use pushVJoySnackbar from @maltjoy/core-vue instead.
require-vjoymenu-template-sidebar: requireVJoyMenuto be insideVJoyTemplate's#template-sidebarslot. This rule is a warning in the recommended preset.
Message:
VJoyMenu must be used inside the VJoyTemplate #template-sidebar slot.
require-vjoytemplate-template-title: requireVJoyTemplateto provide a#template-titleslot. This rule is a warning in the recommended preset.
Message:
VJoyTemplate must have a template-title slot.
no-vjoyusercard-rating-stars-slot: disallowuser-card-rating-starsslot usage onVJoyUserCard. Use the default slot instead.
Message:
Do not use VJoyUserCard user-card-rating-stars slot, use the default slot instead.
Accessibility rules
Rules under rules/accessibility/ enforce accessible usage of Joy components.
require-vjoytemplate-template-title-heading: require theVJoyTemplate#template-titleslot to contain anh1–h6element, preferablyh1. This rule is a warning in the recommended preset.
Message:
VJoyTemplate template-title slot should use a heading tag (h1-h6), preferably h1.
require-vjoyiconbutton-label: require an accessible label onVJoyIconButtonvia thelabelprop or default slot content. This rule is a warning in the recommended preset.
Message:
VJoyIconButton must have an accessible label via the label prop or the default slot.
Token rules
Rules under rules/tokens/ enforce usage of Joy design tokens instead of hardcoded CSS values.
no-hardcoded-hex-colors-in-vue: disallow hardcoded hex colors in Vue templates and<style>blocks. This rule is a warning in the recommended preset.
Message:
Avoid hardcoded hex colors in Vue files. Use @maltjoy/themes design tokens such as var(--joy-color-*).
no-inline-style-colors: disallow inline color styles in Vue templates. This rule is a warning in the recommended preset.
Message:
Avoid inline color styles in Vue templates. Use Joy utility classes or component styles with design tokens instead.
no-arbitrary-font-size: disallow arbitraryfont-sizevalues in Vue templates and<style>blocks. This rule is a warning in the recommended preset.
Message:
Avoid arbitrary font-size values in Vue files. Use @maltjoy/themes tokens such as var(--joy-font-size-primary-400) or typography classes like joy-font-primary-400.
Folder layout
rules/components/— component usage and composition rulesrules/accessibility/— accessibility and semantic HTML rulesrules/tokens/— design token and styling rulesrules/utils/— shared ESLint helpers
Usage (flat config)
Preset (recommended) — active toutes les règles du design system d’un coup :
import maltjoyRules from '@maltjoy/eslint-rules';
import vueParser from 'vue-eslint-parser';
export default [
{
files: ['**/*.vue'],
languageOptions: {
parser: vueParser,
},
},
...maltjoyRules.configs.recommended,
];Les sévérités par défaut du preset sont en error. Pour assouplir une règle, ajoute un bloc après le spread :
...maltjoyRules.configs.recommended,
{
rules: {
'@maltjoy/eslint-rules/no-vjoybutton-circle': 'warn',
},
},Règles à la carte (sans preset) :
import maltjoyRules from '@maltjoy/eslint-rules';
export default [
{
plugins: {'@maltjoy/eslint-rules': maltjoyRules},
rules: {
'@maltjoy/eslint-rules/no-vjoybutton-circle': 'warn',
},
},
];