@perplex-digital/stylelint-config 2.0.2 → 8.0.2

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 CHANGED
@@ -1,12 +1,18 @@
1
- # Perplex Property Order [<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]
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 also sorts CSS declarations and properties the way [Perplex][] does.
8
-
9
- \*With some modifications & additions for modern properties.
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
- * `stylelint-config-standard`
31
- * `stylelint-config-recommended-vue`
32
- * `order/order` with the various [custom properties and declarations][].
33
- * `order/properties-order` with the various [property groups][]. If you need to configure other options for this rule,
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
- [perplex]: https://perplex.nl/en
65
- [mdo-order]: http://markdotto.com/2011/11/29/css-property-order/
66
- [custom properties and declarations]: https://github.com/PerplexDigital/stylelint-config/blob/main/declarations.js
67
- [property groups]: https://github.com/PerplexDigital/stylelint-config/blob/main/groups.js
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,67 +1,72 @@
1
1
  {
2
- "name": "@perplex-digital/stylelint-config",
3
- "version": "2.0.2",
4
- "description": "Box model-based property sort order for Stylelint.",
5
- "keywords": [
6
- "logical properties",
7
- "properties-order",
8
- "property order",
9
- "box model",
10
- "stylelint",
11
- "stylelint-config",
12
- "stylelint-order"
2
+ "name": "@perplex-digital/stylelint-config",
3
+ "version": "8.0.2",
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
- "homepage": "https://github.com/PerplexDigital/stylelint-config",
15
- "bugs": "https://github.com/PerplexDigital/stylelint-config/issues",
16
- "repository": "PerplexDigital/stylelint-config",
17
- "license": "ISC",
18
- "author": "Tobias Boekwijt (https://perplex.nl/en/about-perplex/the-perplexers#tobias-boekwijt)",
19
- "type": "module",
20
- "exports": {
21
- ".": "./index.js",
22
- "./declarations": "./declarations.js",
23
- "./groups": "./groups.js"
24
- },
25
- "main": "index.js",
26
- "files": [
27
- "index.js",
28
- "declarations.js",
29
- "groups.js"
30
- ],
31
- "scripts": {
32
- "changeset": "changeset add",
33
- "lint": "eslint '**/*.js'",
34
- "prepare": "husky",
35
- "release": "changeset publish",
36
- "test": "node --test"
37
- },
38
- "lint-staged": {
39
- "*.js": [
40
- "eslint --fix",
41
- "prettier --write"
42
- ],
43
- "package.json": "prettier --write"
44
- },
45
- "dependencies": {
46
- "@stylistic/stylelint-plugin": "^3.1.2",
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
- "@commitlint/cli": "^19.8.1",
55
- "@commitlint/config-conventional": "^19.8.1",
56
- "@nuxt/eslint-config": "^1.4.1",
57
- "eslint": "^9.27.0",
58
- "husky": "^9.1.7",
59
- "lint-staged": "^16.1.0",
60
- "prettier": "^3.5.3",
61
- "stylelint": "^16.20.0",
62
- "typescript": "^5.8.3"
63
- },
64
- "peerDependencies": {
65
- "stylelint": ">=16"
66
- }
67
- }
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 declarations from './declarations.js';
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', 'wwwroot/css/*.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': null,
50
+ 'selector-class-pattern': [
51
+ '^[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': ['always', { except: [/width/i, /height/i] }],
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': declarations,
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;