/** 是否为 uniapp */
const isUniapp = true;

export default {
  // stylelint-config-html支持更多扩展： "stylelint-config-html/html",  "stylelint-config-html/xml", "stylelint-config-html/vue", "stylelint-config-html/svelte",  "stylelint-config-html/astro",  "stylelint-config-html/php"
  extends: ['stylelint-config-recommended-scss', 'stylelint-config-html/vue'],
  plugins: ['stylelint-order', 'stylelint-scss'],
  overrides: [
    {
      files: ['*.html', '**/*.html', '*.nvue', '**/*.nvue', '*.uvue', '**/*.uvue'],
      customSyntax: 'postcss-html',
    },
  ],
  // 在某些文件或文件夹中禁用检查
  ignoreFiles: ['index.html', 'dist/**', 'src/uni_modules/**', '!src/uni_modules/mxp-*/**/*', 'src/uni_modules/mxp-tool/sdk/'],

  // 规则
  rules: {
    // 不允许使用这些规则降序
    'no-descending-specificity': null, // 不允许优先级较低性的选择器出现在覆盖较高优先级的选择器之后。
    // 禁止使用这些规则进行重复
    'declaration-block-no-duplicate-custom-properties': true, // 不允许重复自定义属性
    'declaration-block-no-duplicate-properties': [true, { ignoreProperties: ['image-rendering', 'position'] }], // 禁止声明块的重复属性。
    'font-family-no-duplicate-names': true, // 禁止使用重复的字体名称。
    'keyframe-block-no-duplicate-selectors': null, // 禁止关键帧块中的重复选择器。
    'no-duplicate-at-import-rules': true, // 禁止在样式表中使用重复的 @import 规则。
    'no-duplicate-selectors': true, // 禁止样式表中的重复选择器。

    // 使用这些规则禁止空的东西
    'block-no-empty': true, // 禁止空块。
    'comment-no-empty': null, // 禁止空注释。 在scss/comment-no-empty 中启用该规则
    'no-empty-source': true, // 禁止空源码。
    // 禁止使用这些（有时是隐式）规则的无效语法
    'color-no-invalid-hex': true, // 禁止使用无效的十六进制颜色
    'function-calc-no-unspaced-operator': true, // 禁止在 calc 函数中使用没有间隔的运算符。
    'keyframe-declaration-no-important': true, // 在动画中禁止关键帧声明的 !important。
    'media-query-no-invalid': true, // 禁止无效的媒体查询。
    'named-grid-areas-no-invalid': true, // 禁止无效的命名网格区域。
    'no-invalid-double-slash-comments': true, // 不允许无效的双斜杠注释。
    'no-invalid-position-at-import-rule': true, // @import 只能在其他样式最前面
    'string-no-newline': true, // 禁止字符串中的(未转义)换行符。
    // 根据这些规则禁止不规则的事情
    'no-irregular-whitespace': true, // 禁止使用不规则空格
    // 禁止使用这些规则进行遗漏
    'custom-property-no-missing-var-function': true, // 自定义属性必须添加var()
    'font-family-no-missing-generic-family-keyword': [true, { ignoreFontFamilies: ['mxp-iconfont'] }], // 不允许在字体系列名称列表中缺少通用系列。
    // 禁止使用这些规则的非标准事物
    'function-linear-gradient-no-nonstandard-direction': true, // 禁止在 linear-gradient() 中调用不符合标准语法的无效方
    // 禁止使用这些规则进行覆盖
    'declaration-block-no-shorthand-property-overrides': true, // 禁止简写属性覆盖相关的扩写属性。
    // 不允许与这些规则相提并论的东西
    'selector-anb-no-unmatchable': true, // 禁止不匹配的 An+B 选择器。(:nth-child(0n+0) 这里报错，结果匹配不到任何元素) (15.3.0新增)
    // 用这些规则禁止未知的事物
    'annotation-no-unknown': [true, { ignoreAnnotations: 'default' }], // 不允许使用未知批注
    'at-rule-no-unknown': null, // 不允许未知的规则。 // 在 scss/at-rule-no-unknown中开启
    'declaration-property-value-no-unknown': isUniapp ? null : true, // 不允许声明中的属性出现未知值
    'function-no-unknown': null, // 禁止未知功能 在 "scss/function-no-unknown" 中开启
    'media-feature-name-no-unknown': true, // 禁止未知的媒体功能名。
    'media-feature-name-value-no-unknown': true, // 禁止媒体功能的未知值。
    'no-unknown-animations': true, // 禁止未知的动画。
    'no-unknown-custom-media': true, // 禁止未知自定义媒体查询
    'no-unknown-custom-properties': null, // 禁止未知自定义属性。
    'property-no-unknown': [
      null,
      {
        checkPrefixed: true,
        ignoreSelectors: [':export', ':root'],
        ignoreProperties: ['lines'],
      },
    ], // 禁止未知的属性 使用 scss/property-no-unknown覆盖
    'selector-pseudo-class-no-unknown': [true, { ignorePseudoClasses: ['deep', 'global', 'export'] }], // 禁止未知的伪类选择器
    'selector-pseudo-element-no-unknown': true, // 禁止未知的伪元素选择器。
    'selector-type-no-unknown': [true, { ignoreTypes: ['page', 'text'] }], // 禁止未知的类型选择器。
    'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }], // 禁止未知的单位。
    // 允许、不允许和必填
    // at-rule 相关
    'at-rule-allowed-list': null, // 指定允许的at-rules规则列表
    'at-rule-disallowed-list': ['extend'], //指定不允许的规则列表
    'at-rule-no-vendor-prefix': true, // 不允许使用供应商前缀作为 at 规则
    'at-rule-property-required-list': null, // 指定 at 规则的必需属性列表
    // 颜色
    'color-hex-alpha': 'never', // 要求或禁止十六进制颜色的 Alpha 通道。
    'color-named': 'never', // 禁止颜色使用名称 如不能 color: black ，而应该使用color: #000000
    'color-no-hex': null, // 禁止十六进制颜色。
    // 评论
    'comment-word-disallowed-list': [null, '/^TODO:/', 'badword'], // 指定注释中不允许的单词列表
    // 声明
    'declaration-no-important': null, // 禁止使用 !important
    'declaration-property-unit-allowed-list': null, // 限制属性的值的单位
    'declaration-property-unit-disallowed-list': null, //指定声明中不允许的属性和单位对的列表
    'declaration-property-value-allowed-list': null, // 指定声明中允许的属性和值对的列表
    'declaration-property-value-disallowed-list': null, // 指定声明中禁止的属性和值对的列表
    // function
    'function-allowed-list': null, //  指定允许的功能列表。
    'function-disallowed-list': null, //  指定不允许使用的功能列表。
    'function-url-no-scheme-relative': true, // 禁止相对协议 URL。
    'function-url-scheme-allowed-list': null, ///指定允许的 URL 方案列表。
    'function-url-scheme-disallowed-list': null, // 指定不允许的 URL 方案列表。
    // 参数
    'length-zero-no-unit': true, // 不允许使用零长度的单位
    // 媒体
    'media-feature-name-allowed-list': null, // 指定允许的媒体功能名称列表
    'media-feature-name-disallowed-list': null, // 指定不允许的媒体功能名称列表
    'media-feature-name-no-vendor-prefix': true, // 不允许使用媒体功能名称的供应商前缀
    'media-feature-name-unit-allowed-list': null, // 指定媒体功能中允许的名称和设备对的列表
    'media-feature-name-value-allowed-list': null, // 指定允许的媒体功能名称和值对的列表
    // 财产
    'property-allowed-list': null, //指定允许的属性列表。
    'property-disallowed-list': null, //指定不允许的属性列表。
    'property-no-vendor-prefix': [true, { ignoreProperties: ['mask-image', 'mask-size', 'user-select'] }], // 属性不允许出现供应商前缀(可自动修复)。
    // 统治
    'rule-selector-property-disallowed-list': null, // 指定每个元素不允许的属性
    // 选择器
    'selector-attribute-name-disallowed-list': ['id', '/^data-/'], // 指定不允许的属性名称的列表
    'selector-attribute-operator-allowed-list': ['=', '*=', '^='], // 指定允许的属性运算符的列表
    'selector-attribute-operator-disallowed-list': null, // 指定不允许的属性运算符的列表
    'selector-combinator-allowed-list': ['+', '>', ' '], //指定允许的组合器的列表
    'selector-combinator-disallowed-list': null, // 指定不允许的组合器的列表
    'selector-disallowed-list': null, // 指定不允许的选择器列表
    'selector-no-qualifying-type': [true, { ignore: ['class', 'attribute'] }], // 不允许按类型限定选择器
    'selector-no-vendor-prefix': true, // 不允许使用选择器的供应商前缀
    'selector-pseudo-class-allowed-list': null, // 指定允许的伪类选择器的列表
    'selector-pseudo-class-disallowed-list': null, // 指定不允许的伪类选择器的列表
    'selector-pseudo-element-allowed-list': null, // 指定允许的伪元素选择器的列表
    'selector-pseudo-element-disallowed-list': ['before', 'after'], // 指定不允许的伪元素选择器的列表

    // 单位
    'unit-allowed-list': isUniapp ? ['px', 'rpx', 's', 'deg', '%', 'fr', 'em', 'vh', 'vw'] : ['px', 's', 'deg', '%', 'fr', 'em', 'vh', 'vw'], //指定允许的单位列表。
    'unit-disallowed-list': isUniapp ? ['rem', 'ms'] : ['rem', 'rpx', 'ms'], // 指定不允许的单位列表
    // 价值
    'value-no-vendor-prefix': [true, { ignoreValues: ['sticky', 'box'] }], // 值不允许出现供应商前缀(可自动修复)。
    // 使用这些规则为单词指定小写或大写
    'function-name-case': 'lower', // 指定函数名的大小写(可自动修复)。
    'selector-type-case': 'lower', // 指定类型选择器的大小写(可自动修复)。
    'value-keyword-case': 'lower', // 指定关键字值的大小写(可自动修复)。
    // 在构造之前强制执行或禁止使用这些规则的空行
    'at-rule-empty-line-before': [
      'always',
      {
        except: ['blockless-after-blockless', 'first-nested', 'blockless-after-same-name-blockless', 'after-same-name'],
        ignore: ['after-comment'],
      },
    ], // 要求或禁止在 at 规则之前使用空行
    'comment-empty-line-before': ['always', { except: ['first-nested'], ignoreComments: ['/^#/'] }], // 要求或禁止在注释之前的空行(可自动修复)。
    'custom-property-empty-line-before': 'never', // 要求或禁止在自定义属性之前使用空行(可自动修复)。
    'declaration-empty-line-before': ['never', { ignore: 'after-comment' }], // 在声明之前要求或禁止空行。
    'rule-empty-line-before': ['always', { ignore: ['after-comment', 'first-nested'] }], // 要求或禁止在规则之前的空行(可自动修复)。
    // 使用这些和规则应用限制最大最小
    'declaration-block-single-line-max-declarations': 1, // 一行中最大允许的属性数量
    'declaration-property-max-values': null, // 限制属性的最大值
    'max-nesting-depth': null, // 限制嵌套的深度
    'number-max-precision': 4, // 限制数字中允许的小数位数
    'selector-max-attribute': 2, //限制选择器中的属性选择器的数量
    'selector-max-class': null, // 限制选择器中的类的最大数量
    'selector-max-combinators': null, // 限制选择器中组合器的最大数量 (组合器即： > +  ~ 空格 等等)
    'selector-max-compound-selectors': null, // 所有选择器的最大数量 (包含id class 等选择器)
    'selector-max-id': 0, //限制选择器中 ID 选择器的最大数量
    'selector-max-pseudo-class': null, // 限制选择器中伪类的数量
    'selector-max-specificity': null, // 限制选择器的特异性
    'selector-max-type': null, // 限制选择器中类型选择器的数量
    'selector-max-universal': 0, // 限制选择器中通用选择器的数量
    'time-min-milliseconds': 10, // 指定时间值的最小毫秒数
    // 使用这些（有时是隐式）规则强制执行具有多个事物的一种表示形式

    'alpha-value-notation': 'number', // 指定alpha值的百分比或数字表示法(可自动修复)。
    'color-function-notation': 'legacy', // 颜色代码同意使用逗号或空格分割
    'color-hex-length': 'long', // 为十六进制颜色指定短表示法或长表示法,即是：#ffffff 还是#fff  "short" "long"
    'font-weight-notation': 'named-where-possible', //需要数字或命名(如果可能)font-weight值。此外，当需要命名值时，只需要有效的名称。
    'hue-degree-notation': 'angle', // 指定度数或角度表示法(可自动修复)。
    'import-notation': 'string', // 使用@import url("xxxx.scss");  还是@import "xxxx.scss";
    'keyframe-selector-notation': 'percentage', // 禁止使用无效的十六进制颜色
    'lightness-notation': 'percentage', // 指定亮度的数字或百分比表示法。
    'media-feature-range-notation': 'prefix', // 指定媒体特征范围的上下文或前缀表示法
    'selector-not-notation': 'simple', // 为伪类指定简单或复杂表示法。:not()
    'selector-pseudo-element-colon-notation': 'single', // 指定伪元素适用单冒号还是双冒号表示法(可自动修复)。
    // 使用这些规则强制执行命名约定
    'comment-pattern': null, // 指定注释的规则
    'custom-media-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 指定自定义媒体查询名称的模式 (命名规则)
    'custom-property-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 指定自定义属性的命名规则
    'keyframes-name-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, //指定关键帧名称的模式(命名规则)
    'selector-class-pattern': /(^[a-z][a-z0-9]*(-[a-z0-9]+)*$)|(^el-[a-z-_]+[a-z]$)/, // 【 特殊 】 指定类选择器的模式(即class的命名规范)
    'selector-id-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 指定ID选择器的模式(即id的命名规范)
    'selector-nested-pattern': null, // 为嵌套在规则中的规则选择器指定规则
    // 要求或禁止使用这些规则的引号
    'font-family-name-quotes': 'always-where-required', // 指定是否应在字体系列名称周围使用引号(可自动修复)
    'function-url-quotes': 'always', // 要求或禁止 URL 的引号。(可自动修复)。
    'selector-attribute-quotes': 'always', // 要求在块的开大括号之前必须有一个空格或不能有空白符。
    // 不允许使用这些规则进行冗余
    'declaration-block-no-redundant-longhand-properties': true, // 禁止冗余的写法
    'shorthand-property-no-redundant-values': true, // 禁止简写属性的冗余值
    // 使用此规则要求或禁止内部的空格
    'comment-whitespace-inside': 'always', // 要求或禁止注释标记内侧的空白符(可自动修复)。

    /* ****************************************** stylelint-config-standard-scss ****************************************** */

    'scss/at-each-key-value-single-line': true, // 用于检查用户使用 map-keys 或 map.keys 执行循环并在循环内获取该键的值的情况

    'scss/at-else-closing-brace-newline-after': 'always-last-in-chain', // 在语句的右大括号之后要求或不允许换行符(可自动修复)
    'scss/at-else-closing-brace-space-after': 'always-intermediate', // 需要单个空格或不允许在语句的右大括号后使用空格(自动修复)。@else
    'scss/at-else-empty-line-before': 'never', // 要求在 -else 之前使用空行或不允许空行(可自动修复)。@else
    'scss/at-else-if-parentheses-space-before': 'always', // 要求或不允许在括号前加空格(可自动修复)。@else if

    'scss/at-extend-no-missing-placeholder': true, // 禁止缺少占位符的 @extend

    'scss/at-function-named-arguments': 'never', // 需要或禁止在 SCSS 函数调用规则中指定参数名称 animation: animation($duration: 250ms) 或 animation: animation(250ms)
    'scss/at-function-parentheses-space-before': 'never', // 要求或不允许在括号前加空格
    'scss/at-function-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 为类似 Sass/SCSS 的函数名称指定命名规则

    'scss/at-if-closing-brace-newline-after': 'always-last-in-chain', // 要求或禁止在语句的右大括号后使用换行符
    'scss/at-if-closing-brace-space-after': 'always-intermediate', // 需要单个空格或不允许在语句的右大括号后使用空格
    'scss/at-if-no-null': true, // 检查是否等于 null 是不必要的显式，因为在 Sass 中是 falsey 即 @if $x == null 可改写为 @if not $x

    'scss/at-import-partial-extension-allowed-list': ['scss'], // 允许导入的后缀名
    'scss/at-import-partial-extension-disallowed-list': null, // 不允许导入的后缀名

    'scss/at-mixin-argumentless-call-parentheses': 'always', // 在无参数调用中要求或禁止使用括号
    'scss/at-mixin-named-arguments': 'never', // 在 @include() 调用规则中需要命名参数或不允许使用参数 @include aa($bbb: 250ms) 或者 @include aa(250ms)
    'scss/at-mixin-no-risky-nesting-selector': true,
    'scss/at-mixin-parentheses-space-before': 'never', //要求或不允许在括号前加空格
    'scss/at-mixin-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 允许@import扩展名的白名单

    'scss/at-rule-conditional-no-parentheses': true, // 不允许在@条件规则中使用括号(@if， @elsif， @while)
    'scss/at-rule-no-unknown': true, //要求或不允许在括号前加空格

    'scss/at-use-no-unnamespaced': true, // 不允许使用没有命名空间的 @use
    'scss/at-use-no-redundant-alias': true, //  禁止冗余命名空间别名（即 ）。@use "foo" as foo

    'scss/dollar-variable-colon-newline-after': 'always-multi-line', // 在 $变量声明中，冒号后需要换行符
    'scss/dollar-variable-colon-space-after': 'always-single-line', // 在$变量声明中，需要或不允许在冒号后使用空格
    'scss/dollar-variable-colon-space-before': 'never', // 在$变量声明中，需要或不允许在冒号前使用空格
    'scss/dollar-variable-default': null, // $变量声明的需要标志!default
    // 需要空行或不允许在$变量声明后使用空行
    'scss/dollar-variable-empty-line-after': [
      'always',
      {
        except: ['last-nested', 'before-comment', 'before-dollar-variable'],
        ignore: ['before-comment', 'inside-single-line-block'],
      },
    ],
    // 需要空行或不允许在$变量声明前使用空行
    'scss/dollar-variable-empty-line-before': [
      'always',
      {
        except: ['first-nested', 'after-comment', 'after-dollar-variable'],
        ignore: ['after-comment', 'inside-single-line-block', 'after-dollar-variable'],
      },
    ],
    'scss/dollar-variable-first-in-block': [true, { ignore: ['comments', 'imports'] }], //要求将 -变量声明放在块(根或规则)的第一个位置
    'scss/dollar-variable-no-missing-interpolation': true, // 禁止使用未经插值的 Sass 变量与使用自定义标识符的 CSS 功能
    'scss/dollar-variable-no-namespaced-assignment': true, // 不允许分配到命名空间变量
    'scss/dollar-variable-pattern': /^[_a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 为变量名称指定命名规则

    'scss/percent-placeholder-pattern': /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, // 为%占位符名称指定命名规则

    // 要求或禁止在双斜杠注释之前使用空行
    'scss/double-slash-comment-empty-line-before': [
      null,
      {
        except: ['first-nested', 'inside-block'],
        ignore: ['between-comments', 'stylelint-commands', 'inside-block'],
      },
    ],
    'scss/double-slash-comment-inline': null, // 要求或不允许 -注释为内联注释
    'scss/double-slash-comment-whitespace-inside': 'always', // 要求或不允许在注释后面留空格

    'scss/block-no-redundant-nesting': true, // 如果单个块可以与其父块合并，则不允许嵌套该块

    'scss/comment-no-empty': true, // 为变量名称指定命名规则
    'scss/comment-no-loud': true, // 禁止/** * */注释,而全部使用 双斜杠注释

    'scss/declaration-nested-properties': 'never', // 要求或禁止名称中包含的属性采用嵌套组的形式
    'scss/declaration-nested-properties-no-divided-groups': true, // 不允许将同一“命名空间”的嵌套属性划分为多个组

    'scss/dimension-no-non-numeric-values': true, // 用单位(例如 )插入值会产生字符串值，而不是数值。然后，此值不能在数值运算中使用。最好使用算术将单位应用于数字
    'scss/function-calculation-no-interpolation': true, //不允许在calc(),clamp(),min(),max()函数中插值。
    'scss/function-color-relative': true, // 鼓励使用刻度颜色
    'scss/function-disallowed-list': null, //定不允许的函数列表
    'scss/function-no-unknown': [true, { ignoreFunctions: ['constant'] }], // 禁止未知函数
    'scss/function-quote-no-quoted-strings-inside': true, // 不允许在引号函数中使用带引号的字符串
    'scss/function-unquote-no-unquoted-strings-inside': true, // 不允许在 unquote 函数中使用未加引号的字符串

    'scss/map-keys-quotes': 'always', // 要求在Sass中key必须加引号

    'scss/media-feature-value-dollar-variable': null, // 要求媒体功能值为 -变量或不允许媒体功能值中的 -变量

    'scss/operator-no-newline-after': true, // 禁止在 Sass 运算符之后换行
    'scss/operator-no-newline-before': true, // 禁止在 Sass 运算符之前换行
    'scss/operator-no-unspaced': true, // 禁止在 Sass 操作中使用无间隔运算符

    'scss/partial-no-import': true, // 不允许在部分文件中使用非 .CSS导入

    'scss/property-no-unknown': [
      true,
      {
        ignoreProperties: ['appPagePadding', 'appHeaderHeight', 'appSideBarShowWidth', 'appSideBarHideWidth'],
      },
    ], // 禁止未知属性.覆盖Stylelint的规则

    'scss/selector-nest-combinators': null, // 要求或禁止在选择器中嵌套组合器
    'scss/selector-no-redundant-nesting-selector': true, // 禁止冗余嵌套选择器
    'scss/selector-no-union-class-name': true, // 不允许将类名与父选择器合并

    'scss/load-no-partial-leading-underscore': true, // 禁止在@import路径中使用前缀下划线
    'scss/load-partial-extension': 'always', // 在 @import,@use,@forward 和 [meta.load-css] 命令中要求或禁止扩展。

    'scss/no-dollar-variables': null, // 不允许在样式表中使用美元变量
    'scss/no-duplicate-dollar-variables': true, // 不允许在样式表中使用重复的美元变量
    'scss/no-duplicate-mixins': true, // 禁止在样式表中使用重复的mixin
    'scss/no-global-function-names': true, // 不允许使用全局函数名称，因为这些全局函数现在位于内置 Sass 模块中
    'scss/no-unused-private-members': true, // 禁止未使用的私有成员，例如函数、mixin、变量或占位符选择器。

    // 排序
    'order/order': [
      // 排序
      'dollar-variables',
      'custom-properties',
      'at-rules',
      'declarations',
      { type: 'at-rule', name: 'supports' },
      { type: 'at-rule', name: 'media' },
      'rules',
    ],

    'order/properties-order': [
      { properties: ['all'] },
      {
        properties: ['position', 'inset', 'inset-block', 'inset-inline', 'top', 'right', 'bottom', 'left', 'z-index'],
      },
      { properties: ['box-sizing', 'display'] },
      {
        properties: ['flex', 'flex-basis', 'flex-direction', 'flex-flow', 'flex-grow', 'flex-shrink', 'flex-wrap'],
      },
      {
        properties: [
          'grid',
          'grid-area',
          'grid-template',
          'grid-template-areas',
          'grid-template-rows',
          'grid-template-columns',
          'grid-row',
          'grid-row-start',
          'grid-row-end',
          'grid-column',
          'grid-column-start',
          'grid-column-end',
          'grid-auto-rows',
          'grid-auto-columns',
          'grid-auto-flow',
          'grid-gap',
          'grid-row-gap',
          'grid-column-gap',
        ],
      },
      { properties: ['gap', 'row-gap', 'column-gap'] },
      {
        properties: [
          'place-content',
          'place-items',
          'place-self',
          'align-content',
          'align-items',
          'align-self',
          'justify-content',
          'justify-items',
          'justify-self',
        ],
      },
      { properties: ['order'] },
      {
        properties: [
          'float',
          'width',
          'min-width',
          'max-width',
          'height',
          'min-height',
          'max-height',
          'padding',
          'padding-top',
          'padding-right',
          'padding-bottom',
          'padding-left',
          'margin',
          'margin-top',
          'margin-right',
          'margin-bottom',
          'margin-left',
          'overflow',
          'overflow-x',
          'overflow-y',
          '-webkit-overflow-scrolling',
          '-ms-overflow-x',
          '-ms-overflow-y',
          '-ms-overflow-style',
          'overscroll-behavior',
          'overscroll-behavior-x',
          'overscroll-behavior-y',
          'overscroll-behavior-inline',
          'overscroll-behavior-block',
          'clip',
          'clip-path',
          'clear',
        ],
      },
      {
        properties: [
          'font',
          'font-family',
          'font-size',
          'font-style',
          'font-weight',
          'font-feature-settings',
          'font-kerning',
          'font-variant',
          'font-variant-ligatures',
          'font-variant-caps',
          'font-variant-alternates',
          'font-variant-numeric',
          'font-variant-east-asian',
          'font-variant-position',
          'font-size-adjust',
          'font-stretch',
          'font-effect',
          'font-emphasize',
          'font-emphasize-position',
          'font-emphasize-style',
          '-webkit-font-smoothing',
          '-moz-osx-font-smoothing',
          'font-smooth',
          'hyphens',
          'line-height',
          'color',
          'text-align',
          'text-align-last',
          'text-emphasis',
          'text-emphasis-color',
          'text-emphasis-style',
          'text-emphasis-position',
          'text-decoration',
          'text-decoration-line',
          'text-decoration-thickness',
          'text-decoration-style',
          'text-decoration-color',
          'text-underline-position',
          'text-underline-offset',
          'text-indent',
          'text-justify',
          'text-outline',
          '-ms-text-overflow',
          'text-overflow',
          'text-overflow-ellipsis',
          'text-overflow-mode',
          'text-shadow',
          'text-transform',
          'text-wrap',
          '-webkit-text-size-adjust',
          '-ms-text-size-adjust',
          'letter-spacing',
          'word-break',
          'word-spacing',
          'word-wrap', // Legacy name for `overflow-wrap`
          'overflow-wrap',
          'tab-size',
          'white-space',
          'vertical-align',
          'list-style',
          'list-style-position',
          'list-style-type',
          'list-style-image',
        ],
      },
      {
        properties: [
          'pointer-events',
          '-ms-touch-action',
          'touch-action',
          'cursor',
          'visibility',
          'zoom',
          'table-layout',
          'empty-cells',
          'caption-side',
          'border-spacing',
          'border-collapse',
          'content',
          'quotes',
          'counter-reset',
          'counter-increment',
          'resize',
          'user-select',
          'nav-index',
          'nav-up',
          'nav-right',
          'nav-down',
          'nav-left',
        ],
      },
      {
        properties: [
          'background',
          'background-color',
          'background-image',
          "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
          'filter:progid:DXImageTransform.Microsoft.gradient',
          'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader',
          'filter',
          'background-repeat',
          'background-attachment',
          'background-position',
          'background-position-x',
          'background-position-y',
          'background-clip',
          'background-origin',
          'background-size',
          'background-blend-mode',
          'isolation',
          'border',
          'border-color',
          'border-style',
          'border-width',
          'border-top',
          'border-top-color',
          'border-top-style',
          'border-top-width',
          'border-right',
          'border-right-color',
          'border-right-style',
          'border-right-width',
          'border-bottom',
          'border-bottom-color',
          'border-bottom-style',
          'border-bottom-width',
          'border-left',
          'border-left-color',
          'border-left-style',
          'border-left-width',
          'border-radius',
          'border-top-left-radius',
          'border-top-right-radius',
          'border-bottom-right-radius',
          'border-bottom-left-radius',
          'border-image',
          'border-image-source',
          'border-image-slice',
          'border-image-width',
          'border-image-outset',
          'border-image-repeat',
          'outline',
          'outline-width',
          'outline-style',
          'outline-color',
          'outline-offset',
          'box-shadow',
          'mix-blend-mode',
          'filter:progid:DXImageTransform.Microsoft.Alpha(Opacity',
          "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
          'opacity',
          '-ms-interpolation-mode',
        ],
      },
      {
        properties: [
          'alignment-baseline',
          'baseline-shift',
          'dominant-baseline',
          'text-anchor',
          'word-spacing',
          'writing-mode',

          'fill',
          'fill-opacity',
          'fill-rule',
          'stroke',
          'stroke-dasharray',
          'stroke-dashoffset',
          'stroke-linecap',
          'stroke-linejoin',
          'stroke-miterlimit',
          'stroke-opacity',
          'stroke-width',

          'color-interpolation',
          'color-interpolation-filters',
          'color-profile',
          'color-rendering',
          'flood-color',
          'flood-opacity',
          'image-rendering',
          'lighting-color',
          'marker-start',
          'marker-mid',
          'marker-end',
          'mask',
          'shape-rendering',
          'stop-color',
          'stop-opacity',
        ],
      },
      {
        properties: [
          'transition',
          'transition-delay',
          'transition-timing-function',
          'transition-duration',
          'transition-property',
          'transform',
          'transform-origin',
          'animation',
          'animation-name',
          'animation-duration',
          'animation-play-state',
          'animation-timing-function',
          'animation-delay',
          'animation-iteration-count',
          'animation-direction',
        ],
      },
    ],
  },
};
