@dimensional-innovations/tool-config 5.0.0 → 5.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.
Files changed (40) hide show
  1. package/dist/astro-6WHBKQFX.js +43 -0
  2. package/dist/astro-6WHBKQFX.js.map +1 -0
  3. package/dist/chunk-HUYPX7RZ.js +125 -0
  4. package/dist/chunk-HUYPX7RZ.js.map +1 -0
  5. package/dist/chunk-ITGUBGO6.js +625 -0
  6. package/dist/chunk-ITGUBGO6.js.map +1 -0
  7. package/dist/chunk-L7IN57ZC.js +167 -0
  8. package/dist/chunk-L7IN57ZC.js.map +1 -0
  9. package/dist/chunk-LRQFF2N5.js +141 -0
  10. package/dist/chunk-LRQFF2N5.js.map +1 -0
  11. package/dist/chunk-OMQFJOZZ.js +48 -0
  12. package/dist/chunk-OMQFJOZZ.js.map +1 -0
  13. package/dist/chunk-SY42COTI.js +363 -0
  14. package/dist/chunk-SY42COTI.js.map +1 -0
  15. package/dist/chunk-SZOB6JY7.js +446 -0
  16. package/dist/chunk-SZOB6JY7.js.map +1 -0
  17. package/dist/cli/index.js +1812 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/eslint-YWWMMZDP.js +5 -0
  20. package/dist/eslint-YWWMMZDP.js.map +1 -0
  21. package/dist/index.d.ts +401 -0
  22. package/dist/index.js +69 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/prettier-EYWEBRIS.js +4 -0
  25. package/dist/prettier-EYWEBRIS.js.map +1 -0
  26. package/dist/react-YIKJI3VA.js +91 -0
  27. package/dist/react-YIKJI3VA.js.map +1 -0
  28. package/dist/semantic-release-7XCPBEKO.js +4 -0
  29. package/dist/semantic-release-7XCPBEKO.js.map +1 -0
  30. package/dist/solid-F44BEBBP.js +54 -0
  31. package/dist/solid-F44BEBBP.js.map +1 -0
  32. package/dist/stylelint-ENTCYNXG.js +5 -0
  33. package/dist/stylelint-ENTCYNXG.js.map +1 -0
  34. package/dist/svelte-XEOX6WAQ.js +56 -0
  35. package/dist/svelte-XEOX6WAQ.js.map +1 -0
  36. package/dist/typescript-ZJ7LECQN.js +4 -0
  37. package/dist/typescript-ZJ7LECQN.js.map +1 -0
  38. package/dist/vue-DP7MCMOU.js +144 -0
  39. package/dist/vue-DP7MCMOU.js.map +1 -0
  40. package/package.json +3 -2
@@ -0,0 +1,363 @@
1
+ import { getStylelintIgnores } from './chunk-OMQFJOZZ.js';
2
+ import { autoDetect, detectCssType } from './chunk-L7IN57ZC.js';
3
+
4
+ // src/tools/stylelint/presets/base.ts
5
+ var basePreset = {
6
+ extends: ["stylelint-config-standard"],
7
+ rules: {
8
+ // Color rules
9
+ "color-hex-length": "short",
10
+ "color-named": "never",
11
+ // Property rules
12
+ "declaration-block-no-redundant-longhand-properties": true,
13
+ "shorthand-property-no-redundant-values": true,
14
+ // Selector rules
15
+ "selector-max-id": 0,
16
+ "selector-no-qualifying-type": true,
17
+ "selector-class-pattern": [
18
+ "^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$",
19
+ {
20
+ message: "Expected class selector to be kebab-case or BEM format"
21
+ }
22
+ ],
23
+ // Nesting
24
+ "max-nesting-depth": 3,
25
+ // Specificity
26
+ "no-descending-specificity": null,
27
+ // At-rules
28
+ "at-rule-no-unknown": [
29
+ true,
30
+ {
31
+ ignoreAtRules: ["tailwind", "apply", "variants", "responsive", "screen"]
32
+ }
33
+ ]
34
+ }
35
+ };
36
+ var base_default = basePreset;
37
+
38
+ // src/tools/stylelint/presets/css-modules.ts
39
+ var cssModulesPreset = {
40
+ rules: {
41
+ // Allow CSS Modules pseudo-classes
42
+ "selector-pseudo-class-no-unknown": [
43
+ true,
44
+ {
45
+ ignorePseudoClasses: ["global", "local", "export", "import"]
46
+ }
47
+ ],
48
+ // Allow @value (CSS Modules constants)
49
+ "at-rule-no-unknown": [
50
+ true,
51
+ {
52
+ ignoreAtRules: ["value"]
53
+ }
54
+ ],
55
+ // Allow 'composes' property (CSS Modules composition)
56
+ "property-no-unknown": [
57
+ true,
58
+ {
59
+ ignoreProperties: ["composes", "compose-with"]
60
+ }
61
+ ],
62
+ // CSS Modules often use camelCase
63
+ "selector-class-pattern": null
64
+ // Disable pattern check for modules
65
+ }
66
+ };
67
+ var css_modules_default = cssModulesPreset;
68
+
69
+ // src/tools/stylelint/presets/frameworks/react.ts
70
+ var reactPreset = {
71
+ // No special rules needed for React/Solid CSS files
72
+ // They use standard CSS, so base preset is sufficient
73
+ rules: {}
74
+ };
75
+ var react_default = reactPreset;
76
+
77
+ // src/tools/stylelint/presets/frameworks/svelte.ts
78
+ var sveltePreset = {
79
+ extends: ["stylelint-config-standard"],
80
+ overrides: [
81
+ {
82
+ files: ["**/*.svelte"],
83
+ customSyntax: "postcss-html"
84
+ }
85
+ ],
86
+ rules: {
87
+ // Allow Svelte :global() pseudo-class
88
+ "selector-pseudo-class-no-unknown": [
89
+ true,
90
+ {
91
+ ignorePseudoClasses: ["global"]
92
+ }
93
+ ]
94
+ }
95
+ };
96
+ var svelte_default = sveltePreset;
97
+
98
+ // src/tools/stylelint/presets/frameworks/vue.ts
99
+ var vuePreset = {
100
+ extends: ["stylelint-config-standard-vue"],
101
+ overrides: [
102
+ {
103
+ files: ["**/*.vue"],
104
+ customSyntax: "postcss-html"
105
+ }
106
+ ],
107
+ rules: {
108
+ // Allow Vue-specific pseudo-classes
109
+ "selector-pseudo-class-no-unknown": [
110
+ true,
111
+ {
112
+ ignorePseudoClasses: ["deep", "global", "slotted"]
113
+ }
114
+ ],
115
+ // Allow Vue-specific pseudo-elements
116
+ "selector-pseudo-element-no-unknown": [
117
+ true,
118
+ {
119
+ ignorePseudoElements: ["v-deep", "v-global", "v-slotted"]
120
+ }
121
+ ]
122
+ }
123
+ };
124
+ var vue_default = vuePreset;
125
+
126
+ // src/tools/stylelint/presets/scss.ts
127
+ var scssPreset = {
128
+ extends: ["stylelint-config-standard-scss"],
129
+ rules: {
130
+ // Color rules
131
+ "color-hex-length": "short",
132
+ // Variables
133
+ "scss/dollar-variable-colon-space-after": "always",
134
+ "scss/dollar-variable-colon-space-before": "never",
135
+ "scss/dollar-variable-pattern": [
136
+ "^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$",
137
+ {
138
+ message: "Expected variable to be kebab-case"
139
+ }
140
+ ],
141
+ // Operators
142
+ "scss/operator-no-newline-after": true,
143
+ "scss/operator-no-unspaced": true,
144
+ // Nesting
145
+ "max-nesting-depth": 4,
146
+ // Allow one more level for SCSS
147
+ // At-rules (allow Tailwind if present)
148
+ "scss/at-rule-no-unknown": [
149
+ true,
150
+ {
151
+ ignoreAtRules: ["tailwind", "apply", "variants", "responsive", "screen", "layer"]
152
+ }
153
+ ],
154
+ // Mixins
155
+ "scss/at-mixin-pattern": [
156
+ "^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$",
157
+ {
158
+ message: "Expected mixin name to be kebab-case"
159
+ }
160
+ ],
161
+ // Functions
162
+ "scss/at-function-pattern": [
163
+ "^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$",
164
+ {
165
+ message: "Expected function name to be kebab-case"
166
+ }
167
+ ],
168
+ // Placeholder selectors
169
+ "scss/percent-placeholder-pattern": [
170
+ "^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$",
171
+ {
172
+ message: "Expected placeholder to be kebab-case"
173
+ }
174
+ ],
175
+ // Selector rules (inherit from base)
176
+ "selector-max-id": 0,
177
+ "selector-no-qualifying-type": true,
178
+ "selector-class-pattern": [
179
+ "^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$",
180
+ {
181
+ message: "Expected class selector to be kebab-case or BEM format"
182
+ }
183
+ ],
184
+ // Disable some rules that conflict with SCSS
185
+ "no-descending-specificity": null
186
+ }
187
+ };
188
+ var scss_default = scssPreset;
189
+
190
+ // src/tools/stylelint/presets/tailwind.ts
191
+ var tailwindPreset = {
192
+ // Note: We don't extend stylelint-config-tailwindcss because it's too opinionated
193
+ // Instead, we selectively disable conflicting rules
194
+ rules: {
195
+ // Allow Tailwind at-rules
196
+ "at-rule-no-unknown": [
197
+ true,
198
+ {
199
+ ignoreAtRules: ["tailwind", "apply", "layer", "variants", "responsive", "screen", "config"]
200
+ }
201
+ ],
202
+ // Allow Tailwind functions
203
+ "function-no-unknown": [
204
+ true,
205
+ {
206
+ ignoreFunctions: ["theme", "screen"]
207
+ }
208
+ ],
209
+ // Disable rules that conflict with Tailwind's utility classes
210
+ "selector-class-pattern": null,
211
+ // Tailwind uses various patterns
212
+ "selector-max-id": null,
213
+ // Allow IDs (though not recommended)
214
+ "no-descending-specificity": null,
215
+ // Utility classes have complex specificity
216
+ "declaration-block-no-redundant-longhand-properties": null,
217
+ // Utilities may look redundant
218
+ // Allow unknown properties (Tailwind CSS variables)
219
+ "property-no-unknown": [
220
+ true,
221
+ {
222
+ ignoreProperties: ["/^--/"]
223
+ // Allow CSS custom properties
224
+ }
225
+ ]
226
+ }
227
+ };
228
+ var tailwind_default = tailwindPreset;
229
+
230
+ // src/tools/stylelint/index.ts
231
+ function normalizeExtends(value) {
232
+ if (!value) return [];
233
+ return Array.isArray(value) ? value : [value];
234
+ }
235
+ function mergeArrays(target, source) {
236
+ let targetArray;
237
+ if (Array.isArray(target)) {
238
+ targetArray = target;
239
+ } else if (target) {
240
+ targetArray = [target];
241
+ } else {
242
+ targetArray = [];
243
+ }
244
+ let sourceArray;
245
+ if (Array.isArray(source)) {
246
+ sourceArray = source;
247
+ } else if (source) {
248
+ sourceArray = [source];
249
+ } else {
250
+ sourceArray = [];
251
+ }
252
+ return [...targetArray, ...sourceArray];
253
+ }
254
+ function mergePreset(config, preset) {
255
+ if (preset.extends) {
256
+ const presetExtends = normalizeExtends(preset.extends);
257
+ const configExtends = normalizeExtends(config.extends);
258
+ config.extends = [...configExtends, ...presetExtends];
259
+ }
260
+ if (preset.overrides) {
261
+ config.overrides = [...config.overrides || [], ...preset.overrides];
262
+ }
263
+ if (preset.rules) {
264
+ config.rules = { ...config.rules, ...preset.rules };
265
+ }
266
+ }
267
+ function applyUserOverrides(config, userOverrides) {
268
+ if (userOverrides.extends) {
269
+ config.extends = mergeArrays(config.extends, userOverrides.extends);
270
+ delete userOverrides.extends;
271
+ }
272
+ if (userOverrides.plugins) {
273
+ config.plugins = mergeArrays(config.plugins, userOverrides.plugins);
274
+ delete userOverrides.plugins;
275
+ }
276
+ if (userOverrides.overrides) {
277
+ config.overrides = mergeArrays(
278
+ config.overrides,
279
+ userOverrides.overrides
280
+ );
281
+ delete userOverrides.overrides;
282
+ }
283
+ if (userOverrides.rules) {
284
+ config.rules = { ...config.rules, ...userOverrides.rules };
285
+ delete userOverrides.rules;
286
+ }
287
+ Object.assign(config, userOverrides);
288
+ }
289
+ async function createStylelintConfig(options = {}) {
290
+ const {
291
+ framework: explicitFramework = "auto",
292
+ cssType: explicitCssType = "auto",
293
+ cwd = process.cwd(),
294
+ ...userOverrides
295
+ } = options;
296
+ const framework = explicitFramework === "auto" ? autoDetect(cwd).framework : explicitFramework;
297
+ const cssType = explicitCssType === "auto" ? detectCssType(cwd) : explicitCssType;
298
+ let cssTypeResult;
299
+ if (typeof cssType === "string") {
300
+ cssTypeResult = cssType === "scss" ? { preprocessor: "scss", tailwind: false, modules: false, postcss: false } : null;
301
+ } else {
302
+ cssTypeResult = cssType;
303
+ }
304
+ const config = cssTypeResult?.preprocessor === "scss" ? { ...scss_default, customSyntax: "postcss-scss" } : { ...base_default };
305
+ config.ignoreFiles = getStylelintIgnores();
306
+ if (cssTypeResult?.tailwind) {
307
+ mergePreset(config, tailwind_default);
308
+ }
309
+ if ((framework === "react" || framework === "solid") && !cssTypeResult?.tailwind) {
310
+ mergePreset(config, css_modules_default);
311
+ }
312
+ let cssTypeDesc = cssTypeResult?.preprocessor === "scss" ? "SCSS" : "CSS";
313
+ if (cssTypeResult?.tailwind) cssTypeDesc += " + Tailwind";
314
+ if ((framework === "react" || framework === "solid") && !cssTypeResult?.tailwind) {
315
+ cssTypeDesc += " Modules";
316
+ }
317
+ switch (framework) {
318
+ case "vue": {
319
+ mergePreset(config, vue_default);
320
+ console.warn(`\u{1F3A8} Stylelint: Detected Vue.js - linting .vue component styles (${cssTypeDesc})`);
321
+ break;
322
+ }
323
+ case "svelte": {
324
+ mergePreset(config, svelte_default);
325
+ console.warn(
326
+ `\u{1F3A8} Stylelint: Detected Svelte - linting .svelte component styles (${cssTypeDesc})`
327
+ );
328
+ break;
329
+ }
330
+ case "react":
331
+ case "solid": {
332
+ mergePreset(config, react_default);
333
+ console.warn(
334
+ `\u{1F3A8} Stylelint: Detected ${framework} - linting ${cssTypeDesc} (CSS-in-JS uses ESLint)`
335
+ );
336
+ break;
337
+ }
338
+ case "angular":
339
+ case "node":
340
+ case "vanilla":
341
+ case "astro": {
342
+ console.warn(`\u{1F3A8} Stylelint: Detected ${framework} - linting ${cssTypeDesc} files`);
343
+ break;
344
+ }
345
+ default: {
346
+ console.warn(`\u26A0\uFE0F Unknown framework "${framework}", using base ${cssTypeDesc} linting`);
347
+ }
348
+ }
349
+ const {
350
+ framework: _f,
351
+ cssType: _ct,
352
+ cwd: _c,
353
+ customIgnores: _ci,
354
+ ...restOverrides
355
+ } = userOverrides;
356
+ applyUserOverrides(config, restOverrides);
357
+ return config;
358
+ }
359
+ var stylelint_default = createStylelintConfig;
360
+
361
+ export { createStylelintConfig, stylelint_default };
362
+ //# sourceMappingURL=chunk-SY42COTI.js.map
363
+ //# sourceMappingURL=chunk-SY42COTI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/stylelint/presets/base.ts","../src/tools/stylelint/presets/css-modules.ts","../src/tools/stylelint/presets/frameworks/react.ts","../src/tools/stylelint/presets/frameworks/svelte.ts","../src/tools/stylelint/presets/frameworks/vue.ts","../src/tools/stylelint/presets/scss.ts","../src/tools/stylelint/presets/tailwind.ts","../src/tools/stylelint/index.ts"],"names":[],"mappings":"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","file":"chunk-SY42COTI.js","sourcesContent":["import type { StylelintConfig } from '#core/types.js'\n\n/**\n * Base Stylelint preset\n *\n * Standard CSS linting rules for all projects.\n * Focuses on code quality and best practices, NOT formatting (that's Prettier's job).\n *\n * Key principles:\n * - Use modern CSS practices\n * - Avoid common mistakes\n * - Maintain consistency\n * - Don't fight with Prettier\n */\nconst basePreset: StylelintConfig = {\n extends: ['stylelint-config-standard'],\n\n rules: {\n // Color rules\n 'color-hex-length': 'short',\n 'color-named': 'never',\n\n // Property rules\n 'declaration-block-no-redundant-longhand-properties': true,\n 'shorthand-property-no-redundant-values': true,\n\n // Selector rules\n 'selector-max-id': 0,\n 'selector-no-qualifying-type': true,\n 'selector-class-pattern': [\n '^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$',\n {\n message: 'Expected class selector to be kebab-case or BEM format'\n }\n ],\n\n // Nesting\n 'max-nesting-depth': 3,\n\n // Specificity\n 'no-descending-specificity': null,\n\n // At-rules\n 'at-rule-no-unknown': [\n true,\n {\n ignoreAtRules: ['tailwind', 'apply', 'variants', 'responsive', 'screen']\n }\n ]\n }\n}\n\nexport default basePreset\n","import type { StylelintConfig } from '#core/types.js'\n\n/**\n * CSS Modules Stylelint preset\n *\n * Configuration for projects using CSS Modules.\n * Allows CSS Modules-specific pseudo-classes and conventions.\n *\n * Key principles:\n * - Support :global() and :local() pseudo-classes\n * - Allow composition with composes\n * - Support @value imports\n * - Work alongside regular CSS/SCSS\n */\nconst cssModulesPreset: StylelintConfig = {\n rules: {\n // Allow CSS Modules pseudo-classes\n 'selector-pseudo-class-no-unknown': [\n true,\n {\n ignorePseudoClasses: ['global', 'local', 'export', 'import']\n }\n ],\n\n // Allow @value (CSS Modules constants)\n 'at-rule-no-unknown': [\n true,\n {\n ignoreAtRules: ['value']\n }\n ],\n\n // Allow 'composes' property (CSS Modules composition)\n 'property-no-unknown': [\n true,\n {\n ignoreProperties: ['composes', 'compose-with']\n }\n ],\n\n // CSS Modules often use camelCase\n 'selector-class-pattern': null // Disable pattern check for modules\n }\n}\n\nexport default cssModulesPreset\n","import type { StylelintConfig } from '#core/types.js'\n\n/**\n * React/Solid-specific Stylelint preset\n *\n * Note: Most React/Solid projects use CSS-in-JS (styled-components, emotion, etc.)\n * which is better linted by ESLint plugins, not Stylelint.\n *\n * This preset is for React/Solid projects that use separate CSS files.\n * If you're using CSS-in-JS exclusively, you don't need Stylelint.\n *\n * CSS Modules support is added conditionally in the factory function\n * when Tailwind CSS is not detected.\n */\nconst reactPreset: StylelintConfig = {\n // No special rules needed for React/Solid CSS files\n // They use standard CSS, so base preset is sufficient\n rules: {}\n}\n\nexport default reactPreset\n","import type { StylelintConfig } from '#core/types.js'\n\n/**\n * Svelte-specific Stylelint preset\n *\n * Handles <style> blocks in Svelte components (.svelte files)\n *\n * Requires: postcss-html (peer dependency)\n */\nconst sveltePreset: StylelintConfig = {\n extends: ['stylelint-config-standard'],\n\n overrides: [\n {\n files: ['**/*.svelte'],\n customSyntax: 'postcss-html'\n }\n ],\n\n rules: {\n // Allow Svelte :global() pseudo-class\n 'selector-pseudo-class-no-unknown': [\n true,\n {\n ignorePseudoClasses: ['global']\n }\n ]\n }\n}\n\nexport default sveltePreset\n","import type { StylelintConfig } from '#core/types.js'\n\n/**\n * Vue-specific Stylelint preset\n *\n * Handles <style> blocks in Vue Single File Components (.vue files)\n *\n * Requires:\n * - stylelint-config-standard-vue\n * - postcss-html (peer dependencies)\n */\nconst vuePreset: StylelintConfig = {\n extends: ['stylelint-config-standard-vue'],\n\n overrides: [\n {\n files: ['**/*.vue'],\n customSyntax: 'postcss-html'\n }\n ],\n\n rules: {\n // Allow Vue-specific pseudo-classes\n 'selector-pseudo-class-no-unknown': [\n true,\n {\n ignorePseudoClasses: ['deep', 'global', 'slotted']\n }\n ],\n\n // Allow Vue-specific pseudo-elements\n 'selector-pseudo-element-no-unknown': [\n true,\n {\n ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted']\n }\n ]\n }\n}\n\nexport default vuePreset\n","import type { StylelintConfig } from '#core/types.js'\n\n/**\n * SCSS/Sass Stylelint preset\n *\n * Standard SCSS linting rules for projects using Sass.\n * Extends the standard SCSS configuration with additional quality rules.\n *\n * Key principles:\n * - Support SCSS syntax (variables, mixins, nesting, etc.)\n * - Enforce modern SCSS practices\n * - Avoid common SCSS mistakes\n * - Maintain consistency with CSS base rules\n */\nconst scssPreset: StylelintConfig = {\n extends: ['stylelint-config-standard-scss'],\n\n rules: {\n // Color rules\n 'color-hex-length': 'short',\n\n // Variables\n 'scss/dollar-variable-colon-space-after': 'always',\n 'scss/dollar-variable-colon-space-before': 'never',\n 'scss/dollar-variable-pattern': [\n '^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$',\n {\n message: 'Expected variable to be kebab-case'\n }\n ],\n\n // Operators\n 'scss/operator-no-newline-after': true,\n 'scss/operator-no-unspaced': true,\n\n // Nesting\n 'max-nesting-depth': 4, // Allow one more level for SCSS\n\n // At-rules (allow Tailwind if present)\n 'scss/at-rule-no-unknown': [\n true,\n {\n ignoreAtRules: ['tailwind', 'apply', 'variants', 'responsive', 'screen', 'layer']\n }\n ],\n\n // Mixins\n 'scss/at-mixin-pattern': [\n '^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$',\n {\n message: 'Expected mixin name to be kebab-case'\n }\n ],\n\n // Functions\n 'scss/at-function-pattern': [\n '^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$',\n {\n message: 'Expected function name to be kebab-case'\n }\n ],\n\n // Placeholder selectors\n 'scss/percent-placeholder-pattern': [\n '^[a-z][a-zA-Z0-9]*(-[a-z][a-zA-Z0-9]*)*$',\n {\n message: 'Expected placeholder to be kebab-case'\n }\n ],\n\n // Selector rules (inherit from base)\n 'selector-max-id': 0,\n 'selector-no-qualifying-type': true,\n 'selector-class-pattern': [\n '^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$',\n {\n message: 'Expected class selector to be kebab-case or BEM format'\n }\n ],\n\n // Disable some rules that conflict with SCSS\n 'no-descending-specificity': null\n }\n}\n\nexport default scssPreset\n","import type { StylelintConfig } from '#core/types.js'\n\n/**\n * Tailwind CSS Stylelint preset\n *\n * Configuration for projects using Tailwind CSS.\n * Disables rules that conflict with Tailwind's utility-first approach.\n *\n * Key principles:\n * - Allow Tailwind directives (@tailwind, @apply, @layer, etc.)\n * - Disable rules that conflict with utility classes\n * - Support arbitrary values and variants\n * - Work alongside regular CSS/SCSS\n */\nconst tailwindPreset: StylelintConfig = {\n // Note: We don't extend stylelint-config-tailwindcss because it's too opinionated\n // Instead, we selectively disable conflicting rules\n\n rules: {\n // Allow Tailwind at-rules\n 'at-rule-no-unknown': [\n true,\n {\n ignoreAtRules: ['tailwind', 'apply', 'layer', 'variants', 'responsive', 'screen', 'config']\n }\n ],\n\n // Allow Tailwind functions\n 'function-no-unknown': [\n true,\n {\n ignoreFunctions: ['theme', 'screen']\n }\n ],\n\n // Disable rules that conflict with Tailwind's utility classes\n 'selector-class-pattern': null, // Tailwind uses various patterns\n 'selector-max-id': null, // Allow IDs (though not recommended)\n 'no-descending-specificity': null, // Utility classes have complex specificity\n 'declaration-block-no-redundant-longhand-properties': null, // Utilities may look redundant\n\n // Allow unknown properties (Tailwind CSS variables)\n 'property-no-unknown': [\n true,\n {\n ignoreProperties: ['/^--/'] // Allow CSS custom properties\n }\n ]\n }\n}\n\nexport default tailwindPreset\n","/**\n * Stylelint configuration factory\n *\n * Creates Stylelint configurations with framework-aware defaults for CSS linting.\n *\n * Note: Stylelint is for CSS files and component styles (Vue, Svelte).\n * CSS-in-JS (React styled-components, emotion) should use ESLint plugins instead.\n */\n\nimport basePreset from './presets/base.js'\nimport cssModulesPreset from './presets/css-modules.js'\nimport reactPreset from './presets/frameworks/react.js'\nimport sveltePreset from './presets/frameworks/svelte.js'\nimport vuePreset from './presets/frameworks/vue.js'\nimport scssPreset from './presets/scss.js'\nimport tailwindPreset from './presets/tailwind.js'\n\nimport { autoDetect, detectCssType } from '#core/detectors.js'\nimport { getStylelintIgnores } from '#core/ignore-patterns.js'\nimport type { CssTypeResult, Framework, StylelintConfig, StylelintOptions } from '#core/types.js'\n\n/**\n * Normalize extends to array\n */\nfunction normalizeExtends(value: string | string[] | undefined): string[] {\n if (!value) return []\n return Array.isArray(value) ? value : [value]\n}\n\n/**\n * Merge array values, ensuring both are arrays and concatenating them\n */\nfunction mergeArrays<T>(target: T | T[] | undefined, source: T | T[] | undefined): T[] {\n let targetArray: T[]\n if (Array.isArray(target)) {\n targetArray = target\n } else if (target) {\n targetArray = [target]\n } else {\n targetArray = []\n }\n\n let sourceArray: T[]\n if (Array.isArray(source)) {\n sourceArray = source\n } else if (source) {\n sourceArray = [source]\n } else {\n sourceArray = []\n }\n\n return [...targetArray, ...sourceArray]\n}\n\n/**\n * Merge framework preset into config\n */\nfunction mergePreset(config: StylelintConfig, preset: StylelintConfig): void {\n if (preset.extends) {\n const presetExtends = normalizeExtends(preset.extends)\n const configExtends = normalizeExtends(config.extends)\n config.extends = [...configExtends, ...presetExtends]\n }\n if (preset.overrides) {\n config.overrides = [...(config.overrides || []), ...preset.overrides]\n }\n if (preset.rules) {\n config.rules = { ...config.rules, ...preset.rules }\n }\n}\n\n/**\n * Apply user overrides to config\n */\nfunction applyUserOverrides(config: StylelintConfig, userOverrides: Record<string, unknown>): void {\n // Handle arrays (extends, plugins, overrides)\n if (userOverrides.extends) {\n config.extends = mergeArrays(config.extends, userOverrides.extends as string | string[])\n delete userOverrides.extends\n }\n if (userOverrides.plugins) {\n config.plugins = mergeArrays(config.plugins, userOverrides.plugins as string | string[])\n delete userOverrides.plugins\n }\n if (userOverrides.overrides) {\n config.overrides = mergeArrays(\n config.overrides,\n userOverrides.overrides as NonNullable<StylelintConfig['overrides']> | undefined\n )\n delete userOverrides.overrides\n }\n if (userOverrides.rules) {\n config.rules = { ...config.rules, ...(userOverrides.rules as Record<string, unknown>) }\n delete userOverrides.rules\n }\n\n // Merge remaining overrides\n Object.assign(config, userOverrides)\n}\n\n/**\n * Create a Stylelint configuration\n *\n * @param options - Configuration options\n * @returns Stylelint configuration object\n *\n * @example\n * // Auto-detect framework\n * export default await createStylelintConfig();\n *\n * @example\n * // Explicit framework\n * export default await createStylelintConfig({ framework: 'vue' });\n *\n * @example\n * // Explicit CSS type\n * export default await createStylelintConfig({ cssType: 'scss' });\n *\n * @example\n * // With overrides\n * export default await createStylelintConfig({\n * framework: 'vue',\n * cssType: 'scss',\n * rules: {\n * 'color-hex-length': 'long'\n * }\n * });\n */\n// eslint-disable-next-line require-await -- async for API consistency with other tools\nexport async function createStylelintConfig(\n options: StylelintOptions = {}\n): Promise<StylelintConfig> {\n const {\n framework: explicitFramework = 'auto',\n cssType: explicitCssType = 'auto',\n cwd = process.cwd(),\n ...userOverrides\n } = options\n\n // Auto-detect framework if needed\n const framework: Framework =\n explicitFramework === 'auto' ? autoDetect(cwd).framework : explicitFramework\n\n // Auto-detect CSS type if needed\n const cssType: CssTypeResult | string =\n explicitCssType === 'auto' ? detectCssType(cwd) : explicitCssType\n\n // Normalize cssType to CssTypeResult\n let cssTypeResult: CssTypeResult | null\n if (typeof cssType === 'string') {\n cssTypeResult =\n cssType === 'scss'\n ? { preprocessor: 'scss' as const, tailwind: false, modules: false, postcss: false }\n : null\n } else {\n cssTypeResult = cssType\n }\n\n // Start with appropriate base configuration (SCSS or plain CSS)\n const config: StylelintConfig =\n cssTypeResult?.preprocessor === 'scss'\n ? { ...scssPreset, customSyntax: 'postcss-scss' }\n : { ...basePreset }\n\n // Add default ignore patterns\n config.ignoreFiles = getStylelintIgnores()\n\n // Apply Tailwind preset if detected\n if (cssTypeResult?.tailwind) {\n mergePreset(config, tailwindPreset)\n }\n\n // CSS Modules support (for React/Next.js projects)\n if ((framework === 'react' || framework === 'solid') && !cssTypeResult?.tailwind) {\n mergePreset(config, cssModulesPreset)\n }\n\n // Build CSS type description\n let cssTypeDesc = cssTypeResult?.preprocessor === 'scss' ? 'SCSS' : 'CSS'\n if (cssTypeResult?.tailwind) cssTypeDesc += ' + Tailwind'\n if ((framework === 'react' || framework === 'solid') && !cssTypeResult?.tailwind) {\n cssTypeDesc += ' Modules'\n }\n\n // Apply framework-specific preset\n switch (framework) {\n case 'vue': {\n mergePreset(config, vuePreset)\n console.warn(`🎨 Stylelint: Detected Vue.js - linting .vue component styles (${cssTypeDesc})`)\n break\n }\n\n case 'svelte': {\n mergePreset(config, sveltePreset)\n console.warn(\n `🎨 Stylelint: Detected Svelte - linting .svelte component styles (${cssTypeDesc})`\n )\n break\n }\n\n case 'react':\n case 'solid': {\n mergePreset(config, reactPreset)\n console.warn(\n `🎨 Stylelint: Detected ${framework} - linting ${cssTypeDesc} (CSS-in-JS uses ESLint)`\n )\n break\n }\n\n case 'angular':\n case 'node':\n case 'vanilla':\n case 'astro': {\n console.warn(`🎨 Stylelint: Detected ${framework} - linting ${cssTypeDesc} files`)\n break\n }\n\n default: {\n console.warn(`⚠️ Unknown framework \"${framework}\", using base ${cssTypeDesc} linting`)\n }\n }\n\n // Apply user overrides (excluding internal options)\n const {\n framework: _f,\n cssType: _ct,\n cwd: _c,\n customIgnores: _ci,\n ...restOverrides\n } = userOverrides as Record<string, unknown>\n applyUserOverrides(config, restOverrides)\n\n return config\n}\n\nexport default createStylelintConfig\n"]}