mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	 d7c10b4f2a
			
		
	
	d7c10b4f2a
	
	
	
		
			
			# Pull Request Template ### Screenshots **Dark** <img width="867" alt="image" src="https://github.com/user-attachments/assets/74f6da33-1fa1-4472-84b8-5d097f4a00e1" /> **Light** <img width="867" alt="image" src="https://github.com/user-attachments/assets/5e6d5a4c-cd95-462b-baea-ff3ac333153c" /> --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
		
			
				
	
	
		
			257 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| module.exports = {
 | |
|   extends: [
 | |
|     'airbnb-base/legacy',
 | |
|     'prettier',
 | |
|     'plugin:vue/vue3-recommended',
 | |
|     'plugin:vitest-globals/recommended',
 | |
|     // use recommended-legacy when upgrading the plugin to v4
 | |
|     'plugin:@intlify/vue-i18n/recommended',
 | |
|   ],
 | |
|   overrides: [
 | |
|     {
 | |
|       files: ['**/*.spec.{j,t}s?(x)'],
 | |
|       env: {
 | |
|         'vitest-globals/env': true,
 | |
|       },
 | |
|     },
 | |
|     {
 | |
|       files: ['**/*.story.vue'],
 | |
|       rules: {
 | |
|         'vue/no-undef-components': [
 | |
|           'error',
 | |
|           {
 | |
|             ignorePatterns: ['Variant', 'Story'],
 | |
|           },
 | |
|         ],
 | |
|         // Story files can have static strings, it doesn't need to handle i18n always.
 | |
|         'vue/no-bare-strings-in-template': 'off',
 | |
|         'no-console': 'off',
 | |
|       },
 | |
|     },
 | |
|   ],
 | |
|   plugins: ['html', 'prettier'],
 | |
|   parserOptions: {
 | |
|     ecmaVersion: 'latest',
 | |
|     sourceType: 'module',
 | |
|   },
 | |
|   rules: {
 | |
|     'prettier/prettier': ['error'],
 | |
|     camelcase: 'off',
 | |
|     'no-param-reassign': 'off',
 | |
|     'import/no-extraneous-dependencies': 'off',
 | |
|     'import/prefer-default-export': 'off',
 | |
|     'import/no-named-as-default': 'off',
 | |
|     'jsx-a11y/no-static-element-interactions': 'off',
 | |
|     'jsx-a11y/click-events-have-key-events': 'off',
 | |
|     'jsx-a11y/label-has-associated-control': 'off',
 | |
|     'jsx-a11y/label-has-for': 'off',
 | |
|     'jsx-a11y/anchor-is-valid': 'off',
 | |
|     'import/no-unresolved': 'off',
 | |
|     'vue/html-indent': 'off',
 | |
|     'vue/multi-word-component-names': 'off',
 | |
|     'vue/next-tick-style': ['error', 'callback'],
 | |
|     'vue/block-order': [
 | |
|       'error',
 | |
|       {
 | |
|         order: ['script', 'template', 'style'],
 | |
|       },
 | |
|     ],
 | |
|     'vue/component-name-in-template-casing': [
 | |
|       'error',
 | |
|       'PascalCase',
 | |
|       {
 | |
|         registeredComponentsOnly: true,
 | |
|       },
 | |
|     ],
 | |
|     'vue/component-options-name-casing': ['error', 'PascalCase'],
 | |
|     'vue/custom-event-name-casing': ['error', 'camelCase'],
 | |
|     'vue/define-emits-declaration': ['error'],
 | |
|     'vue/define-macros-order': [
 | |
|       'error',
 | |
|       {
 | |
|         order: ['defineProps', 'defineEmits'],
 | |
|         defineExposeLast: false,
 | |
|       },
 | |
|     ],
 | |
|     'vue/define-props-declaration': ['error', 'runtime'],
 | |
|     'vue/match-component-import-name': ['error'],
 | |
|     'vue/no-bare-strings-in-template': [
 | |
|       'error',
 | |
|       {
 | |
|         allowlist: [
 | |
|           '(',
 | |
|           ')',
 | |
|           ',',
 | |
|           '.',
 | |
|           '&',
 | |
|           '+',
 | |
|           '-',
 | |
|           '=',
 | |
|           '*',
 | |
|           '/',
 | |
|           '#',
 | |
|           '%',
 | |
|           '!',
 | |
|           '?',
 | |
|           ':',
 | |
|           '[',
 | |
|           ']',
 | |
|           '{',
 | |
|           '}',
 | |
|           '<',
 | |
|           '>',
 | |
|           '⌘',
 | |
|           '📄',
 | |
|           '🎉',
 | |
|           '🚀',
 | |
|           '💬',
 | |
|           '👥',
 | |
|           '📥',
 | |
|           '🔖',
 | |
|           '❌',
 | |
|           '✅',
 | |
|           '\u00b7',
 | |
|           '\u2022',
 | |
|           '\u2010',
 | |
|           '\u2013',
 | |
|           '\u2014',
 | |
|           '\u2212',
 | |
|           '|',
 | |
|         ],
 | |
|         attributes: {
 | |
|           '/.+/': [
 | |
|             'title',
 | |
|             'aria-label',
 | |
|             'aria-placeholder',
 | |
|             'aria-roledescription',
 | |
|             'aria-valuetext',
 | |
|           ],
 | |
|           input: ['placeholder'],
 | |
|         },
 | |
|         directives: ['v-text'],
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-empty-component-block': 'error',
 | |
|     'vue/no-multiple-objects-in-class': 'error',
 | |
|     'vue/no-root-v-if': 'warn',
 | |
|     'vue/no-static-inline-styles': [
 | |
|       'error',
 | |
|       {
 | |
|         allowBinding: false,
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-template-target-blank': [
 | |
|       'error',
 | |
|       {
 | |
|         allowReferrer: false,
 | |
|         enforceDynamicLinks: 'always',
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-required-prop-with-default': [
 | |
|       'error',
 | |
|       {
 | |
|         autofix: false,
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-this-in-before-route-enter': 'error',
 | |
|     'vue/no-undef-components': [
 | |
|       'error',
 | |
|       {
 | |
|         ignorePatterns: [
 | |
|           '^woot-',
 | |
|           '^fluent-',
 | |
|           '^multiselect',
 | |
|           '^router-link',
 | |
|           '^router-view',
 | |
|           '^ninja-keys',
 | |
|           '^FormulateForm',
 | |
|           '^FormulateInput',
 | |
|           '^highlightjs',
 | |
|         ],
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-unused-emit-declarations': 'error',
 | |
|     'vue/no-unused-refs': 'error',
 | |
|     'vue/no-use-v-else-with-v-for': 'error',
 | |
|     'vue/prefer-true-attribute-shorthand': 'error',
 | |
|     'vue/no-useless-v-bind': [
 | |
|       'error',
 | |
|       {
 | |
|         ignoreIncludesComment: false,
 | |
|         ignoreStringEscape: false,
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-v-text': 'error',
 | |
|     'vue/padding-line-between-blocks': ['error', 'always'],
 | |
|     'vue/prefer-separate-static-class': 'error',
 | |
|     'vue/require-explicit-slots': 'error',
 | |
|     'vue/require-macro-variable-name': [
 | |
|       'error',
 | |
|       {
 | |
|         defineProps: 'props',
 | |
|         defineEmits: 'emit',
 | |
|         defineSlots: 'slots',
 | |
|         useSlots: 'slots',
 | |
|         useAttrs: 'attrs',
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-unused-properties': [
 | |
|       'error',
 | |
|       {
 | |
|         groups: ['props'],
 | |
|         deepData: false,
 | |
|         ignorePublicMembers: false,
 | |
|         unreferencedOptions: [],
 | |
|       },
 | |
|     ],
 | |
|     'vue/max-attributes-per-line': [
 | |
|       'error',
 | |
|       {
 | |
|         singleline: {
 | |
|           max: 20,
 | |
|         },
 | |
|         multiline: {
 | |
|           max: 1,
 | |
|         },
 | |
|       },
 | |
|     ],
 | |
|     'vue/html-self-closing': [
 | |
|       'error',
 | |
|       {
 | |
|         html: {
 | |
|           void: 'always',
 | |
|           normal: 'always',
 | |
|           component: 'always',
 | |
|         },
 | |
|         svg: 'always',
 | |
|         math: 'always',
 | |
|       },
 | |
|     ],
 | |
|     'vue/no-v-html': 'off',
 | |
|     'vue/component-definition-name-casing': 'off',
 | |
|     'vue/singleline-html-element-content-newline': 'off',
 | |
|     'import/extensions': ['off'],
 | |
|     'no-console': 'error',
 | |
|     '@intlify/vue-i18n/no-dynamic-keys': 'warn',
 | |
|     '@intlify/vue-i18n/no-unused-keys': [
 | |
|       'warn',
 | |
|       {
 | |
|         extensions: ['.js', '.vue'],
 | |
|       },
 | |
|     ],
 | |
|   },
 | |
|   settings: {
 | |
|     'vue-i18n': {
 | |
|       localeDir: './app/javascript/*/i18n/**.json',
 | |
|     },
 | |
|   },
 | |
|   env: {
 | |
|     browser: true,
 | |
|     node: true,
 | |
|   },
 | |
|   globals: {
 | |
|     bus: true,
 | |
|     vi: true,
 | |
|   },
 | |
| };
 |