@perplex-digital/stylelint-config 2.0.1 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -15
- package/package.json +70 -67
- package/{index.js → src/index.js} +17 -8
- package/src/order.js +362 -0
- package/{groups.js → src/property-groups.js} +571 -389
- package/declarations.js +0 -119
package/README.md
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
# Perplex
|
|
1
|
+
# Perplex CSS Order & Property Sorter [<img src="https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/2872758/stylelint-icon-black.svg" alt="StyleLint" width="90" height="90" align="right">][stylelint]
|
|
2
2
|
|
|
3
3
|
[![npm version][npm-img]][npm-url]
|
|
4
4
|
[![npm downloads][npm-dls]][npm-url]
|
|
5
5
|
[![github issues][issues-img]][issues-url]
|
|
6
6
|
|
|
7
|
-
A heavily opinionated [Stylelint][] config that
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
🗂️ A heavily opinionated [Stylelint][] config that:
|
|
8
|
+
- Supports linting `.vue` files
|
|
9
|
+
- Orders CSS the way [Perplex][] does
|
|
10
|
+
- Supports Tailwind 4 directives like `@apply` and `@variant`
|
|
11
|
+
- Sorts CSS properties the way [Concentric-CSS][] did but with:
|
|
12
|
+
- 'Box sizing' and 'Overflow' modules above the 'Box model - Margin' module
|
|
13
|
+
- `outline` grouped with the 'Borders' module
|
|
14
|
+
- 'Backgrounds and box-shadow' module below the 'Box model - Padding' module
|
|
15
|
+
- 'Positioning' and 'Anchor positioning' modules above the 'Transforms' module
|
|
10
16
|
|
|
11
17
|
## Usage
|
|
12
18
|
|
|
@@ -27,16 +33,18 @@ A heavily opinionated [Stylelint][] config that also sorts CSS declarations and
|
|
|
27
33
|
## Advanced
|
|
28
34
|
|
|
29
35
|
The default setup applies these rules:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
- `stylelint-config-standard`
|
|
37
|
+
- `stylelint-config-recommended-vue`
|
|
38
|
+
- `@stylistic/stylelint-plugin`,
|
|
39
|
+
- `stylelint-use-logical-spec`
|
|
40
|
+
- `stylelint-high-performance-animation`
|
|
41
|
+
- [Some overrides][] of these rules
|
|
42
|
+
- `order/order` with the [Perplex][] order.
|
|
43
|
+
- `order/properties-order` with the various [property groups][]. If you need to configure other options for this rule,
|
|
34
44
|
the groups can be imported separately and the rule configured to your needs.
|
|
35
|
-
* `stylelint-use-logical-spec`
|
|
36
|
-
* `stylelint-high-performance-animation`
|
|
37
45
|
|
|
38
46
|
```js
|
|
39
|
-
import propertyGroups from '@perplex-digital/stylelint-config/groups';
|
|
47
|
+
import propertyGroups from '@perplex-digital/stylelint-config/property-groups';
|
|
40
48
|
|
|
41
49
|
export default {
|
|
42
50
|
extends: [], // Do not extend the config here.
|
|
@@ -61,7 +69,9 @@ export default {
|
|
|
61
69
|
[issues-url]: https://github.com/PerplexDigital/stylelint-config/issues
|
|
62
70
|
[issues-img]: https://img.shields.io/github/issues/PerplexDigital/stylelint-config.svg?style=flat-square
|
|
63
71
|
[stylelint]: https://github.com/stylelint/stylelint
|
|
64
|
-
[
|
|
65
|
-
[
|
|
66
|
-
[
|
|
67
|
-
[
|
|
72
|
+
[stylelint-order]: https://github.com/hudochenkov/stylelint-order
|
|
73
|
+
[concentric-css]: https://github.com/brandon-rhodes/Concentric-CSS/
|
|
74
|
+
[some overrides]: https://github.com/PerplexDigital/stylelint-config/blob/main/src/index.js
|
|
75
|
+
[perplex]: https://github.com/PerplexDigital/stylelint-config/blob/main/src/order.js
|
|
76
|
+
[property groups]: https://github.com/PerplexDigital/stylelint-config/blob/main/src/property-groups.js
|
|
77
|
+
[mdo-order]: https://markdotto.com/blog/css-property-order/
|
package/package.json
CHANGED
|
@@ -1,69 +1,72 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
"name": "@perplex-digital/stylelint-config",
|
|
3
|
+
"version": "8.0.1",
|
|
4
|
+
"description": "Order and Concentric-based property sorting for Stylelint.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"tailwind",
|
|
7
|
+
"logical properties",
|
|
8
|
+
"properties-order",
|
|
9
|
+
"property order",
|
|
10
|
+
"concentric",
|
|
11
|
+
"stylelint",
|
|
12
|
+
"stylelint-config",
|
|
13
|
+
"stylelint-order"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://github.com/PerplexDigital/stylelint-config",
|
|
16
|
+
"bugs": "https://github.com/PerplexDigital/stylelint-config/issues",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/PerplexDigital/stylelint-config.git"
|
|
20
|
+
},
|
|
21
|
+
"license": "ISC",
|
|
22
|
+
"author": "Tobias Boekwijt (https://perplex.nl/en/about-perplex/the-perplexers#tobias-boekwijt)",
|
|
23
|
+
"type": "module",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": "./src/index.js",
|
|
26
|
+
"./order": "./src/order.js",
|
|
27
|
+
"./property-groups": "./src/property-groups.js"
|
|
28
|
+
},
|
|
29
|
+
"main": "src/index.js",
|
|
30
|
+
"files": [
|
|
31
|
+
"src/index.js",
|
|
32
|
+
"src/order.js",
|
|
33
|
+
"src/property-groups.js"
|
|
34
|
+
],
|
|
35
|
+
"lint-staged": {
|
|
36
|
+
"*.js": [
|
|
37
|
+
"eslint --fix",
|
|
38
|
+
"prettier --write"
|
|
13
39
|
],
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"stylelint-config-recommended-vue": "^1.6.0",
|
|
48
|
-
"stylelint-config-standard": "^36.0.1",
|
|
49
|
-
"stylelint-high-performance-animation": "^1.11.0",
|
|
50
|
-
"stylelint-order": "^6.0.4",
|
|
51
|
-
"stylelint-use-logical-spec": "^5.0.1"
|
|
52
|
-
},
|
|
53
|
-
"devDependencies": {
|
|
54
|
-
"@changesets/cli": "^2.28.1",
|
|
55
|
-
"@commitlint/cli": "^19.8.0",
|
|
56
|
-
"@commitlint/config-conventional": "^19.8.0",
|
|
57
|
-
"@nuxt/eslint-config": "^1.2.0",
|
|
58
|
-
"@zazen/changesets-changelog": "^2.0.3",
|
|
59
|
-
"eslint": "^9.23.0",
|
|
60
|
-
"husky": "^9.1.7",
|
|
61
|
-
"lint-staged": "^15.5.0",
|
|
62
|
-
"prettier": "^3.5.3",
|
|
63
|
-
"stylelint": "^16.16.0",
|
|
64
|
-
"typescript": "^5.8.2"
|
|
65
|
-
},
|
|
66
|
-
"peerDependencies": {
|
|
67
|
-
"stylelint": ">=16"
|
|
68
|
-
}
|
|
69
|
-
}
|
|
40
|
+
"package.json": "prettier --write"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@stylistic/stylelint-plugin": "^4.0.0",
|
|
44
|
+
"stylelint-config-recommended-vue": "^1.6.1",
|
|
45
|
+
"stylelint-config-standard": "^38.0.0",
|
|
46
|
+
"stylelint-high-performance-animation": "^1.11.0",
|
|
47
|
+
"stylelint-order": "^7.0.0",
|
|
48
|
+
"stylelint-use-logical-spec": "^5.0.1"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@changesets/cli": "^2.29.6",
|
|
52
|
+
"@commitlint/cli": "^19.8.1",
|
|
53
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
54
|
+
"@zazen/changesets-changelog": "^2.0.3",
|
|
55
|
+
"@nuxt/eslint-config": "^1.9.0",
|
|
56
|
+
"eslint": "^9.34.0",
|
|
57
|
+
"husky": "^9.1.7",
|
|
58
|
+
"lint-staged": "^16.1.5",
|
|
59
|
+
"prettier": "^3.6.2",
|
|
60
|
+
"stylelint": "^16.23.1",
|
|
61
|
+
"typescript": "^5.9.2"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"stylelint": ">=16.23"
|
|
65
|
+
},
|
|
66
|
+
"scripts": {
|
|
67
|
+
"lint": "eslint '**/*.js'",
|
|
68
|
+
"fix": "eslint '**/*.js' --fix",
|
|
69
|
+
"release": "changeset publish",
|
|
70
|
+
"test": "node --test"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import propertyGroups from './groups.js';
|
|
1
|
+
import order from './order.js';
|
|
2
|
+
import propertyGroups from './property-groups.js';
|
|
3
3
|
|
|
4
4
|
const config = {
|
|
5
5
|
extends: ['stylelint-config-standard', 'stylelint-config-recommended-vue'],
|
|
@@ -9,7 +9,7 @@ const config = {
|
|
|
9
9
|
'stylelint-use-logical-spec',
|
|
10
10
|
'stylelint-high-performance-animation',
|
|
11
11
|
],
|
|
12
|
-
ignoreFiles: ['*.min.css'
|
|
12
|
+
ignoreFiles: ['*.min.css'],
|
|
13
13
|
rules: {
|
|
14
14
|
'at-rule-empty-line-before': [
|
|
15
15
|
'always',
|
|
@@ -22,7 +22,6 @@ const config = {
|
|
|
22
22
|
'at-rule-no-unknown': null,
|
|
23
23
|
'color-no-hex': true,
|
|
24
24
|
'comment-empty-line-before': null,
|
|
25
|
-
'custom-media-pattern': null,
|
|
26
25
|
'custom-property-pattern': null,
|
|
27
26
|
'declaration-block-no-redundant-longhand-properties': [
|
|
28
27
|
true,
|
|
@@ -31,6 +30,7 @@ const config = {
|
|
|
31
30
|
},
|
|
32
31
|
],
|
|
33
32
|
'declaration-empty-line-before': 'never',
|
|
33
|
+
'declaration-property-value-no-unknown': null,
|
|
34
34
|
'font-weight-notation': [
|
|
35
35
|
'numeric',
|
|
36
36
|
{
|
|
@@ -40,7 +40,6 @@ const config = {
|
|
|
40
40
|
'function-no-unknown': null,
|
|
41
41
|
'import-notation': 'string',
|
|
42
42
|
'no-descending-specificity': null,
|
|
43
|
-
'no-duplicate-selectors': true,
|
|
44
43
|
'no-empty-source': [
|
|
45
44
|
true,
|
|
46
45
|
{
|
|
@@ -48,7 +47,12 @@ const config = {
|
|
|
48
47
|
},
|
|
49
48
|
],
|
|
50
49
|
'number-max-precision': null,
|
|
51
|
-
'selector-class-pattern':
|
|
50
|
+
'selector-class-pattern': [
|
|
51
|
+
'^[a-z0-9]+(?:-[a-z0-9]+)*(?:__(?:[a-z0-9]+(?:-[a-z0-9]+)*))*(?:--(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$',
|
|
52
|
+
{
|
|
53
|
+
message: (selector) => `Expected class selector "${selector}" to be kebab-case or BEM`,
|
|
54
|
+
},
|
|
55
|
+
],
|
|
52
56
|
'selector-pseudo-class-no-unknown': [
|
|
53
57
|
true,
|
|
54
58
|
{
|
|
@@ -56,11 +60,16 @@ const config = {
|
|
|
56
60
|
},
|
|
57
61
|
],
|
|
58
62
|
// Plugin rules
|
|
59
|
-
'liberty/use-logical-spec': [
|
|
63
|
+
'liberty/use-logical-spec': [
|
|
64
|
+
'always',
|
|
65
|
+
{
|
|
66
|
+
except: [/width/i, /height/i],
|
|
67
|
+
},
|
|
68
|
+
],
|
|
60
69
|
'@stylistic/block-closing-brace-newline-before': 'always',
|
|
61
70
|
'@stylistic/block-opening-brace-newline-after': 'always',
|
|
62
71
|
'@stylistic/declaration-block-semicolon-newline-after': 'always',
|
|
63
|
-
'order/order':
|
|
72
|
+
'order/order': order,
|
|
64
73
|
'order/properties-order': propertyGroups,
|
|
65
74
|
'plugin/no-low-performance-animation-properties': [
|
|
66
75
|
true,
|
package/src/order.js
ADDED
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
const order = [
|
|
2
|
+
[
|
|
3
|
+
'custom-properties',
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @property
|
|
7
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@property
|
|
8
|
+
*/
|
|
9
|
+
{
|
|
10
|
+
type: 'at-rule',
|
|
11
|
+
name: 'property',
|
|
12
|
+
hasBlock: true,
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @function
|
|
17
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@function
|
|
18
|
+
*/
|
|
19
|
+
{
|
|
20
|
+
type: 'at-rule',
|
|
21
|
+
name: 'function',
|
|
22
|
+
hasBlock: true,
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @layer
|
|
27
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@layer
|
|
28
|
+
*/
|
|
29
|
+
{
|
|
30
|
+
type: 'at-rule',
|
|
31
|
+
name: 'layer',
|
|
32
|
+
hasBlock: true,
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Tailwind's @apply directive
|
|
37
|
+
* @see https://tailwindcss.com/docs/functions-and-directives#apply-directive
|
|
38
|
+
*/
|
|
39
|
+
{
|
|
40
|
+
type: 'at-rule',
|
|
41
|
+
name: 'apply',
|
|
42
|
+
hasBlock: false,
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
'declarations',
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Tree-structural` :root` pseudo-class
|
|
49
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/:root
|
|
50
|
+
*/
|
|
51
|
+
{
|
|
52
|
+
type: 'rule',
|
|
53
|
+
selector: '^&:root',
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Shadow-structural pseudo-classes
|
|
58
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#shadow-structural_pseudo-classes
|
|
59
|
+
*/
|
|
60
|
+
{
|
|
61
|
+
type: 'rule',
|
|
62
|
+
selector: '^&:(host|host-context|has-slotted)',
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Typographic pseudo-elements
|
|
67
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#typographic_pseudo_elements
|
|
68
|
+
*/
|
|
69
|
+
{
|
|
70
|
+
type: 'rule',
|
|
71
|
+
selector: '^&::(first-line|first-letter|cue)',
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Highlight pseudo-elements
|
|
76
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#highlight_pseudo_elements
|
|
77
|
+
*/
|
|
78
|
+
{
|
|
79
|
+
type: 'rule',
|
|
80
|
+
selector: '^&::(selection|target-text|spelling-error|grammar-error|highlight)',
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Tree-abiding pseudo-element '&::before'
|
|
85
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/::before
|
|
86
|
+
*/
|
|
87
|
+
{
|
|
88
|
+
type: 'rule',
|
|
89
|
+
selector: '^&::before',
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Tree-abiding pseudo-element '&::after'
|
|
94
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/::after
|
|
95
|
+
*/
|
|
96
|
+
{
|
|
97
|
+
type: 'rule',
|
|
98
|
+
selector: '^&::after',
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* All other tree-abiding pseudo-elements
|
|
103
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#tree-abiding_pseudo-elements
|
|
104
|
+
*/
|
|
105
|
+
{
|
|
106
|
+
type: 'rule',
|
|
107
|
+
selector: '^&::(column|marker|backdrop|scroll-button|scroll-marker|scroll-marker-group)',
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Element-backed pseudo-elements
|
|
112
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#element-backed_pseudo_elements
|
|
113
|
+
*/
|
|
114
|
+
{
|
|
115
|
+
type: 'rule',
|
|
116
|
+
selector: '^&::(details-content|part|slotted)',
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Form-related pseudo-elements
|
|
121
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#form-related_pseudo_elements
|
|
122
|
+
*/
|
|
123
|
+
{
|
|
124
|
+
type: 'rule',
|
|
125
|
+
selector: '^&::(checkmark|file-selector-button|picker|picker-icon|placeholder)',
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* View-transition pseudo-elements
|
|
130
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#view-transition_pseudo_elements
|
|
131
|
+
*/
|
|
132
|
+
{
|
|
133
|
+
type: 'rule',
|
|
134
|
+
selector:
|
|
135
|
+
'^&::(view-transition|view-transition-image-pair|view-transition-group|view-transition-new|view-transition-old)',
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Universal selectors '*'
|
|
140
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors
|
|
141
|
+
*/
|
|
142
|
+
{
|
|
143
|
+
type: 'rule',
|
|
144
|
+
selector: '^\\*',
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Child-elements like '.example'
|
|
149
|
+
*/
|
|
150
|
+
{
|
|
151
|
+
type: 'rule',
|
|
152
|
+
selector: '^[^&\\+~]*[^:&]$',
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Next-sibling combinator like '+ .example'
|
|
157
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Next-sibling_combinator
|
|
158
|
+
*/
|
|
159
|
+
{
|
|
160
|
+
type: 'rule',
|
|
161
|
+
selector: '^\\+',
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Subsequent-sibling combinator like '~ .example'
|
|
166
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Subsequent-sibling_combinator
|
|
167
|
+
*/
|
|
168
|
+
{
|
|
169
|
+
type: 'rule',
|
|
170
|
+
selector: '^~',
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Elemental pseudo-classes
|
|
175
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#elemental_pseudo_classes
|
|
176
|
+
*/
|
|
177
|
+
{
|
|
178
|
+
type: 'rule',
|
|
179
|
+
selector: '^&:(defined|heading)',
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Element display state pseudo-classes
|
|
184
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#element_display_state_pseudo_classes
|
|
185
|
+
*/
|
|
186
|
+
{
|
|
187
|
+
type: 'rule',
|
|
188
|
+
selector: '^&:(open|popover-open|modal|fullscreen|picture-in-picture)',
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Input pseudo-classes
|
|
193
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#input_pseudo_classes
|
|
194
|
+
*/
|
|
195
|
+
{
|
|
196
|
+
type: 'rule',
|
|
197
|
+
selector:
|
|
198
|
+
'^&:(enabled|disabled|read-only|read-write|placeholder-shown|autofill|default|checked|indeterminate|blank|valid|invalid|in-range|out-of-range|required|optional|user-valid|user-invalid)',
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Linguistic pseudo-classes
|
|
203
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#linguistic_pseudo_classes
|
|
204
|
+
*/
|
|
205
|
+
{
|
|
206
|
+
type: 'rule',
|
|
207
|
+
selector: '^&:(dir|lang)',
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Location pseudo-classes
|
|
212
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#location_pseudo_classes
|
|
213
|
+
*/
|
|
214
|
+
{
|
|
215
|
+
type: 'rule',
|
|
216
|
+
selector: '^&:(any-link|link|visited|local-link|target|target-within|scope)',
|
|
217
|
+
},
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Resource state pseudo-classes
|
|
221
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#resource_state_pseudo_classes
|
|
222
|
+
*/
|
|
223
|
+
{
|
|
224
|
+
type: 'rule',
|
|
225
|
+
selector: '^&:(playing|paused|seeking|buffering|stalled|muted|volume-locked)',
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Time-dimensional pseudo-classes
|
|
230
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#time-dimensional_pseudo_classes
|
|
231
|
+
*/
|
|
232
|
+
{
|
|
233
|
+
type: 'rule',
|
|
234
|
+
selector: '^&:(current|past|future)',
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* User action pseudo-classes
|
|
239
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#user_action_pseudo_classes
|
|
240
|
+
*/
|
|
241
|
+
{
|
|
242
|
+
type: 'rule',
|
|
243
|
+
selector: '^&:(hover|active|focus|focus-visible|focus-within|target-current)',
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* User action pseudo-classes like '@variant hoverfocus', '@variant mouse' and '@variant touch'
|
|
248
|
+
* @see https://github.com/argyleink/open-props/blob/main/src/props.media.css
|
|
249
|
+
* @see https://tailwindcss.com/docs/hover-focus-and-other-states#registering-a-custom-variant
|
|
250
|
+
*/
|
|
251
|
+
{
|
|
252
|
+
type: 'at-rule',
|
|
253
|
+
name: 'variant',
|
|
254
|
+
parameter: '(hover|focus|hoverfocus|mouse|touch)',
|
|
255
|
+
hasBlock: true,
|
|
256
|
+
},
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Modifiers like '&.example' and tree-structural and functional pseudo-classes
|
|
260
|
+
* Although `:root` is technically part of tree-structural pseudo-classes,
|
|
261
|
+
* it is placed above the shadow-structural pseudo-classes.
|
|
262
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#tree-structural_pseudo_classes
|
|
263
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#functional_pseudo_classes
|
|
264
|
+
*/
|
|
265
|
+
{
|
|
266
|
+
type: 'rule',
|
|
267
|
+
selector:
|
|
268
|
+
'^&((\\.|\\[)|(.*(empty|nth-child|nth-last-child|first-child|last-child|nth-of-type|nth-last-of-type|first-of-type|last-of-type|only-of-type|is|not|where|has)).*)',
|
|
269
|
+
},
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Custom state pseudo-classes
|
|
273
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#custom_state_pseudo_classes
|
|
274
|
+
*/
|
|
275
|
+
{
|
|
276
|
+
type: 'rule',
|
|
277
|
+
selector: '^&:(state)',
|
|
278
|
+
},
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Page pseudo-classes
|
|
282
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#page_pseudo_classes
|
|
283
|
+
*/
|
|
284
|
+
{
|
|
285
|
+
type: 'rule',
|
|
286
|
+
selector: '^&:(left|right|first|blank)',
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* View transition pseudo-classes
|
|
291
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#view_transition_pseudo_classes
|
|
292
|
+
*/
|
|
293
|
+
{
|
|
294
|
+
type: 'rule',
|
|
295
|
+
selector: '^&:(active-view-transition|active-view-transition-type)',
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Parent-modifiers like '.example &'
|
|
300
|
+
*/
|
|
301
|
+
{
|
|
302
|
+
type: 'rule',
|
|
303
|
+
selector: '&$',
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Keyframes
|
|
308
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes
|
|
309
|
+
*/
|
|
310
|
+
{
|
|
311
|
+
type: 'at-rule',
|
|
312
|
+
name: 'keyframes',
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Container queries like '@container scroll-state(stuck: top)'
|
|
317
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries
|
|
318
|
+
*/
|
|
319
|
+
{
|
|
320
|
+
type: 'at-rule',
|
|
321
|
+
name: 'container',
|
|
322
|
+
hasBlock: true,
|
|
323
|
+
},
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* @scope
|
|
327
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@scope
|
|
328
|
+
*/
|
|
329
|
+
{
|
|
330
|
+
type: 'at-rule',
|
|
331
|
+
name: 'scope',
|
|
332
|
+
hasBlock: true,
|
|
333
|
+
},
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Tailwind media-queries like '@variant xl' and '@variant motionOK'
|
|
337
|
+
* @see https://tailwindcss.com/docs/responsive-design
|
|
338
|
+
* @see https://tailwindcss.com/docs/hover-focus-and-other-states#registering-a-custom-variant
|
|
339
|
+
*/
|
|
340
|
+
{
|
|
341
|
+
type: 'at-rule',
|
|
342
|
+
name: 'variant',
|
|
343
|
+
parameter: '(?!hover|focus|hoverfocus|mouse|touch)',
|
|
344
|
+
hasBlock: true,
|
|
345
|
+
},
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* All other media queries like '@media (width > 1472px)'
|
|
349
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries
|
|
350
|
+
*/
|
|
351
|
+
{
|
|
352
|
+
type: 'at-rule',
|
|
353
|
+
name: 'media',
|
|
354
|
+
hasBlock: true,
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
{
|
|
358
|
+
unspecified: 'ignore',
|
|
359
|
+
},
|
|
360
|
+
];
|
|
361
|
+
|
|
362
|
+
export default order;
|