eslint-plugin-better-tailwindcss 3.3.0 → 3.4.0

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 (164) hide show
  1. package/README.md +2 -2
  2. package/lib/cjs/configs/config.d.ts +8 -4
  3. package/lib/cjs/configs/config.d.ts.map +1 -1
  4. package/lib/cjs/configs/config.js +12 -8
  5. package/lib/cjs/configs/config.js.map +1 -1
  6. package/lib/cjs/parsers/es.d.ts +2 -1
  7. package/lib/cjs/parsers/es.d.ts.map +1 -1
  8. package/lib/cjs/parsers/es.js +14 -1
  9. package/lib/cjs/parsers/es.js.map +1 -1
  10. package/lib/cjs/rules/deprecated/multiline.d.ts +3 -0
  11. package/lib/cjs/rules/deprecated/multiline.d.ts.map +1 -0
  12. package/lib/cjs/rules/deprecated/multiline.js +27 -0
  13. package/lib/cjs/rules/deprecated/multiline.js.map +1 -0
  14. package/lib/cjs/rules/deprecated/sort-classes.d.ts +3 -0
  15. package/lib/cjs/rules/deprecated/sort-classes.d.ts.map +1 -0
  16. package/lib/cjs/rules/deprecated/sort-classes.js +26 -0
  17. package/lib/cjs/rules/deprecated/sort-classes.js.map +1 -0
  18. package/lib/cjs/rules/enforce-consistent-class-order.d.ts +19 -0
  19. package/lib/cjs/rules/enforce-consistent-class-order.d.ts.map +1 -0
  20. package/lib/cjs/rules/enforce-consistent-class-order.js +157 -0
  21. package/lib/cjs/rules/enforce-consistent-class-order.js.map +1 -0
  22. package/lib/cjs/rules/enforce-consistent-line-wrapping.d.ts +15 -0
  23. package/lib/cjs/rules/enforce-consistent-line-wrapping.d.ts.map +1 -0
  24. package/lib/cjs/rules/enforce-consistent-line-wrapping.js +566 -0
  25. package/lib/cjs/rules/enforce-consistent-line-wrapping.js.map +1 -0
  26. package/lib/cjs/rules/multiline.d.ts +1 -1
  27. package/lib/cjs/rules/no-restricted-classes.d.ts +6 -4
  28. package/lib/cjs/rules/no-restricted-classes.d.ts.map +1 -1
  29. package/lib/cjs/rules/no-restricted-classes.js +28 -3
  30. package/lib/cjs/rules/no-restricted-classes.js.map +1 -1
  31. package/lib/cjs/rules/no-unnecessary-whitespace.js +1 -1
  32. package/lib/cjs/rules/no-unnecessary-whitespace.js.map +1 -1
  33. package/lib/cjs/rules/sort-classes.d.ts.map +1 -1
  34. package/lib/cjs/rules/sort-classes.js +7 -1
  35. package/lib/cjs/rules/sort-classes.js.map +1 -1
  36. package/lib/cjs/tailwindcss/class-order.js +2 -2
  37. package/lib/cjs/tailwindcss/config.js +2 -2
  38. package/lib/cjs/tailwindcss/config.v3.js +1 -1
  39. package/lib/cjs/tailwindcss/config.v4.js +2 -2
  40. package/lib/cjs/tailwindcss/conflicting-classes.js +2 -2
  41. package/lib/cjs/tailwindcss/custom-component-classes.js +2 -2
  42. package/lib/cjs/tailwindcss/prefix.js +3 -3
  43. package/lib/cjs/tailwindcss/unregistered-classes.js +2 -2
  44. package/lib/cjs/utils/matchers.d.ts.map +1 -1
  45. package/lib/cjs/utils/matchers.js +1 -1
  46. package/lib/cjs/utils/matchers.js.map +1 -1
  47. package/lib/esm/configs/config.d.ts +8 -4
  48. package/lib/esm/configs/config.d.ts.map +1 -1
  49. package/lib/esm/configs/config.js +12 -8
  50. package/lib/esm/configs/config.js.map +1 -1
  51. package/lib/esm/parsers/es.d.ts +2 -1
  52. package/lib/esm/parsers/es.d.ts.map +1 -1
  53. package/lib/esm/parsers/es.js +13 -1
  54. package/lib/esm/parsers/es.js.map +1 -1
  55. package/lib/esm/rules/deprecated/multiline.d.ts +3 -0
  56. package/lib/esm/rules/deprecated/multiline.d.ts.map +1 -0
  57. package/lib/esm/rules/deprecated/multiline.js +24 -0
  58. package/lib/esm/rules/deprecated/multiline.js.map +1 -0
  59. package/lib/esm/rules/deprecated/sort-classes.d.ts +3 -0
  60. package/lib/esm/rules/deprecated/sort-classes.d.ts.map +1 -0
  61. package/lib/esm/rules/deprecated/sort-classes.js +23 -0
  62. package/lib/esm/rules/deprecated/sort-classes.js.map +1 -0
  63. package/lib/esm/rules/enforce-consistent-class-order.d.ts +19 -0
  64. package/lib/esm/rules/enforce-consistent-class-order.d.ts.map +1 -0
  65. package/lib/esm/rules/enforce-consistent-class-order.js +153 -0
  66. package/lib/esm/rules/enforce-consistent-class-order.js.map +1 -0
  67. package/lib/esm/rules/enforce-consistent-line-wrapping.d.ts +15 -0
  68. package/lib/esm/rules/enforce-consistent-line-wrapping.d.ts.map +1 -0
  69. package/lib/esm/rules/enforce-consistent-line-wrapping.js +563 -0
  70. package/lib/esm/rules/enforce-consistent-line-wrapping.js.map +1 -0
  71. package/lib/esm/rules/multiline.d.ts +1 -1
  72. package/lib/esm/rules/no-restricted-classes.d.ts +6 -4
  73. package/lib/esm/rules/no-restricted-classes.d.ts.map +1 -1
  74. package/lib/esm/rules/no-restricted-classes.js +29 -4
  75. package/lib/esm/rules/no-restricted-classes.js.map +1 -1
  76. package/lib/esm/rules/no-unnecessary-whitespace.js +1 -1
  77. package/lib/esm/rules/no-unnecessary-whitespace.js.map +1 -1
  78. package/lib/esm/rules/sort-classes.d.ts.map +1 -1
  79. package/lib/esm/rules/sort-classes.js +7 -1
  80. package/lib/esm/rules/sort-classes.js.map +1 -1
  81. package/lib/esm/tailwindcss/class-order.js +2 -2
  82. package/lib/esm/tailwindcss/config.js +2 -2
  83. package/lib/esm/tailwindcss/config.v3.js +1 -1
  84. package/lib/esm/tailwindcss/config.v4.js +2 -2
  85. package/lib/esm/tailwindcss/conflicting-classes.js +2 -2
  86. package/lib/esm/tailwindcss/custom-component-classes.js +2 -2
  87. package/lib/esm/tailwindcss/prefix.js +3 -3
  88. package/lib/esm/tailwindcss/unregistered-classes.js +2 -2
  89. package/lib/esm/utils/matchers.d.ts.map +1 -1
  90. package/lib/esm/utils/matchers.js +2 -2
  91. package/lib/esm/utils/matchers.js.map +1 -1
  92. package/package.json +5 -5
  93. package/lib/cjs/tailwindcss/custom-component-classes.v3.d.ts +0 -3
  94. package/lib/cjs/tailwindcss/custom-component-classes.v3.d.ts.map +0 -1
  95. package/lib/cjs/tailwindcss/custom-component-classes.v3.js +0 -7
  96. package/lib/cjs/tailwindcss/custom-component-classes.v3.js.map +0 -1
  97. package/lib/cjs/tailwindcss/custom-component-classes.v4.d.ts +0 -3
  98. package/lib/cjs/tailwindcss/custom-component-classes.v4.d.ts.map +0 -1
  99. package/lib/cjs/tailwindcss/custom-component-classes.v4.js +0 -37
  100. package/lib/cjs/tailwindcss/custom-component-classes.v4.js.map +0 -1
  101. package/lib/cjs/utils/cache.d.ts +0 -4
  102. package/lib/cjs/utils/cache.d.ts.map +0 -1
  103. package/lib/cjs/utils/cache.js +0 -29
  104. package/lib/cjs/utils/cache.js.map +0 -1
  105. package/lib/cjs/utils/fs.d.ts +0 -3
  106. package/lib/cjs/utils/fs.d.ts.map +0 -1
  107. package/lib/cjs/utils/fs.js +0 -36
  108. package/lib/cjs/utils/fs.js.map +0 -1
  109. package/lib/cjs/utils/module.d.ts +0 -3
  110. package/lib/cjs/utils/module.d.ts.map +0 -1
  111. package/lib/cjs/utils/module.js +0 -11
  112. package/lib/cjs/utils/module.js.map +0 -1
  113. package/lib/cjs/utils/platform.d.ts +0 -2
  114. package/lib/cjs/utils/platform.d.ts.map +0 -1
  115. package/lib/cjs/utils/platform.js +0 -7
  116. package/lib/cjs/utils/platform.js.map +0 -1
  117. package/lib/cjs/utils/resolvers.d.ts +0 -6
  118. package/lib/cjs/utils/resolvers.d.ts.map +0 -1
  119. package/lib/cjs/utils/resolvers.js +0 -38
  120. package/lib/cjs/utils/resolvers.js.map +0 -1
  121. package/lib/cjs/utils/version.d.ts +0 -15
  122. package/lib/cjs/utils/version.d.ts.map +0 -1
  123. package/lib/cjs/utils/version.js +0 -37
  124. package/lib/cjs/utils/version.js.map +0 -1
  125. package/lib/cjs/utils/worker.d.ts +0 -3
  126. package/lib/cjs/utils/worker.d.ts.map +0 -1
  127. package/lib/cjs/utils/worker.js +0 -13
  128. package/lib/cjs/utils/worker.js.map +0 -1
  129. package/lib/esm/tailwindcss/custom-component-classes.v3.d.ts +0 -3
  130. package/lib/esm/tailwindcss/custom-component-classes.v3.d.ts.map +0 -1
  131. package/lib/esm/tailwindcss/custom-component-classes.v3.js +0 -4
  132. package/lib/esm/tailwindcss/custom-component-classes.v3.js.map +0 -1
  133. package/lib/esm/tailwindcss/custom-component-classes.v4.d.ts +0 -3
  134. package/lib/esm/tailwindcss/custom-component-classes.v4.d.ts.map +0 -1
  135. package/lib/esm/tailwindcss/custom-component-classes.v4.js +0 -33
  136. package/lib/esm/tailwindcss/custom-component-classes.v4.js.map +0 -1
  137. package/lib/esm/utils/cache.d.ts +0 -4
  138. package/lib/esm/utils/cache.d.ts.map +0 -1
  139. package/lib/esm/utils/cache.js +0 -25
  140. package/lib/esm/utils/cache.js.map +0 -1
  141. package/lib/esm/utils/fs.d.ts +0 -3
  142. package/lib/esm/utils/fs.d.ts.map +0 -1
  143. package/lib/esm/utils/fs.js +0 -32
  144. package/lib/esm/utils/fs.js.map +0 -1
  145. package/lib/esm/utils/module.d.ts +0 -3
  146. package/lib/esm/utils/module.d.ts.map +0 -1
  147. package/lib/esm/utils/module.js +0 -7
  148. package/lib/esm/utils/module.js.map +0 -1
  149. package/lib/esm/utils/platform.d.ts +0 -2
  150. package/lib/esm/utils/platform.d.ts.map +0 -1
  151. package/lib/esm/utils/platform.js +0 -4
  152. package/lib/esm/utils/platform.js.map +0 -1
  153. package/lib/esm/utils/resolvers.d.ts +0 -6
  154. package/lib/esm/utils/resolvers.d.ts.map +0 -1
  155. package/lib/esm/utils/resolvers.js +0 -32
  156. package/lib/esm/utils/resolvers.js.map +0 -1
  157. package/lib/esm/utils/version.d.ts +0 -15
  158. package/lib/esm/utils/version.d.ts.map +0 -1
  159. package/lib/esm/utils/version.js +0 -36
  160. package/lib/esm/utils/version.js.map +0 -1
  161. package/lib/esm/utils/worker.d.ts +0 -3
  162. package/lib/esm/utils/worker.d.ts.map +0 -1
  163. package/lib/esm/utils/worker.js +0 -10
  164. package/lib/esm/utils/worker.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ import { enforceConsistentLineWrapping } from "../enforce-consistent-line-wrapping.js";
2
+ export const multiline = {
3
+ ...enforceConsistentLineWrapping,
4
+ name: "multiline",
5
+ rule: {
6
+ ...enforceConsistentLineWrapping.rule,
7
+ meta: {
8
+ ...enforceConsistentLineWrapping.rule.meta,
9
+ deprecated: {
10
+ availableUntil: "^4.0.0",
11
+ deprecatedSince: "^3.4.0",
12
+ replacedBy: [
13
+ {
14
+ message: "The rule name `multiline` is deprecated. Please use `enforce-consistent-line-wrapping` instead.",
15
+ rule: {
16
+ name: "enforce-consistent-line-wrapping"
17
+ }
18
+ }
19
+ ]
20
+ }
21
+ }
22
+ }
23
+ };
24
+ //# sourceMappingURL=multiline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiline.js","sourceRoot":"","sources":["../../../../src/rules/deprecated/multiline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,8DAA8D,CAAC;AAK7G,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,GAAG,6BAA6B;IAChC,IAAI,EAAE,WAAoB;IAC1B,IAAI,EAAE;QACJ,GAAG,6BAA6B,CAAC,IAAI;QACrC,IAAI,EAAE;YACJ,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI;YAC1C,UAAU,EAAE;gBACV,cAAc,EAAE,QAAQ;gBACxB,eAAe,EAAE,QAAQ;gBACzB,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,iGAAiG;wBAC1G,IAAI,EAAE;4BACJ,IAAI,EAAE,kCAAkC;yBACzC;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ESLintRule } from "../../types/rule.js";
2
+ export declare const sortClasses: ESLintRule;
3
+ //# sourceMappingURL=sort-classes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-classes.d.ts","sourceRoot":"","sources":["../../../../src/rules/deprecated/sort-classes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAGnE,eAAO,MAAM,WAAW,EAAE,UAoBzB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { enforceConsistentClassOrder } from "../enforce-consistent-class-order.js";
2
+ export const sortClasses = {
3
+ name: "sort-classes",
4
+ rule: {
5
+ ...enforceConsistentClassOrder.rule,
6
+ meta: {
7
+ ...enforceConsistentClassOrder.rule.meta,
8
+ deprecated: {
9
+ availableUntil: "^4.0.0",
10
+ deprecatedSince: "^3.4.0",
11
+ replacedBy: [
12
+ {
13
+ message: "The rule name `sort-classes` is deprecated. Please use `enforce-consistent-class-order` instead.",
14
+ rule: {
15
+ name: "enforce-consistent-class-order"
16
+ }
17
+ }
18
+ ]
19
+ }
20
+ }
21
+ }
22
+ };
23
+ //# sourceMappingURL=sort-classes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-classes.js","sourceRoot":"","sources":["../../../../src/rules/deprecated/sort-classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,4DAA4D,CAAC;AAKzG,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,IAAI,EAAE,cAAuB;IAC7B,IAAI,EAAE;QACJ,GAAG,2BAA2B,CAAC,IAAI;QACnC,IAAI,EAAE;YACJ,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI;YACxC,UAAU,EAAE;gBACV,cAAc,EAAE,QAAQ;gBACxB,eAAe,EAAE,QAAQ;gBACzB,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,kGAAkG;wBAC3G,IAAI,EAAE;4BACJ,IAAI,EAAE,gCAAgC;yBACvC;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Rule } from "eslint";
2
+ import type { AttributeOption, CalleeOption, ESLintRule, TagOption, VariableOption } from "../types/rule.js";
3
+ export type Options = [
4
+ Partial<AttributeOption & CalleeOption & TagOption & VariableOption & {
5
+ entryPoint?: string;
6
+ order?: "asc" | "desc" | "improved" | "official";
7
+ tailwindConfig?: string;
8
+ }>
9
+ ];
10
+ export declare const enforceConsistentClassOrder: ESLintRule<Options>;
11
+ export declare function getOptions(ctx: Rule.RuleContext): {
12
+ order: "asc" | "desc" | "improved" | "official";
13
+ attributes: any;
14
+ callees: any;
15
+ tags: any;
16
+ tailwindConfig: any;
17
+ variables: any;
18
+ };
19
+ //# sourceMappingURL=enforce-consistent-class-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-consistent-class-order.d.ts","sourceRoot":"","sources":["../../../src/rules/enforce-consistent-class-order.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACf,MAAM,kCAAkC,CAAC;AAI1C,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CACL,eAAe,GACf,YAAY,GACZ,SAAS,GACT,cAAc,GACd;QACE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;QACjD,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CACF;CACF,CAAC;AAYF,eAAO,MAAM,2BAA2B,EAAE,UAAU,CAAC,OAAO,CAwC3D,CAAC;AAmHF,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW;;;;;;;EAa/C"}
@@ -0,0 +1,153 @@
1
+ import { DEFAULT_ATTRIBUTE_NAMES, DEFAULT_CALLEE_NAMES, DEFAULT_TAG_NAMES, DEFAULT_VARIABLE_NAMES } from "../options/default-options.js";
2
+ import { ATTRIBUTE_SCHEMA, CALLEE_SCHEMA, ENTRYPOINT_SCHEMA, TAG_SCHEMA, TAILWIND_CONFIG_SCHEMA, VARIABLE_SCHEMA } from "../options/descriptions.js";
3
+ import { getClassOrder } from "../tailwindcss/class-order.js";
4
+ import { getCommonOptions } from "../utils/options.js";
5
+ import { escapeNestedQuotes } from "../utils/quotes.js";
6
+ import { createRuleListener } from "../utils/rule.js";
7
+ import { augmentMessageWithWarnings, display, splitClasses, splitWhitespaces } from "../utils/utils.js";
8
+ const defaultOptions = {
9
+ attributes: DEFAULT_ATTRIBUTE_NAMES,
10
+ callees: DEFAULT_CALLEE_NAMES,
11
+ order: "improved",
12
+ tags: DEFAULT_TAG_NAMES,
13
+ variables: DEFAULT_VARIABLE_NAMES
14
+ };
15
+ const DOCUMENTATION_URL = "https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/enforce-consistent-class-order.md";
16
+ export const enforceConsistentClassOrder = {
17
+ name: "enforce-consistent-class-order",
18
+ rule: {
19
+ create: ctx => createRuleListener(ctx, getOptions(ctx), lintLiterals),
20
+ meta: {
21
+ docs: {
22
+ category: "Stylistic Issues",
23
+ description: "Enforce a consistent order for tailwind classes.",
24
+ recommended: true,
25
+ url: DOCUMENTATION_URL
26
+ },
27
+ fixable: "code",
28
+ schema: [
29
+ {
30
+ additionalProperties: false,
31
+ properties: {
32
+ ...CALLEE_SCHEMA,
33
+ ...ATTRIBUTE_SCHEMA,
34
+ ...VARIABLE_SCHEMA,
35
+ ...TAG_SCHEMA,
36
+ ...ENTRYPOINT_SCHEMA,
37
+ ...TAILWIND_CONFIG_SCHEMA,
38
+ order: {
39
+ default: defaultOptions.order,
40
+ description: "The algorithm to use when sorting classes.",
41
+ enum: [
42
+ "asc",
43
+ "desc",
44
+ "official",
45
+ "improved"
46
+ ],
47
+ type: "string"
48
+ }
49
+ },
50
+ type: "object"
51
+ }
52
+ ],
53
+ type: "layout"
54
+ }
55
+ }
56
+ };
57
+ function lintLiterals(ctx, literals) {
58
+ for (const literal of literals) {
59
+ const classChunks = splitClasses(literal.content);
60
+ const whitespaceChunks = splitWhitespaces(literal.content);
61
+ const unsortableClasses = ["", ""];
62
+ // remove sticky classes
63
+ if (literal.closingBraces && whitespaceChunks[0] === "") {
64
+ whitespaceChunks.shift();
65
+ unsortableClasses[0] = classChunks.shift() ?? "";
66
+ }
67
+ if (literal.openingBraces && whitespaceChunks[whitespaceChunks.length - 1] === "") {
68
+ whitespaceChunks.pop();
69
+ unsortableClasses[1] = classChunks.pop() ?? "";
70
+ }
71
+ const [sortedClassChunks, warnings] = sortClassNames(ctx, classChunks);
72
+ const classes = [];
73
+ for (let i = 0; i < Math.max(sortedClassChunks.length, whitespaceChunks.length); i++) {
74
+ whitespaceChunks[i] && classes.push(whitespaceChunks[i]);
75
+ sortedClassChunks[i] && classes.push(sortedClassChunks[i]);
76
+ }
77
+ const escapedClasses = escapeNestedQuotes([
78
+ unsortableClasses[0],
79
+ ...classes,
80
+ unsortableClasses[1]
81
+ ].join(""), literal.openingQuote ?? literal.closingQuote ?? "`");
82
+ const fixedClasses = [
83
+ literal.openingQuote ?? "",
84
+ literal.type === "TemplateLiteral" && literal.closingBraces ? literal.closingBraces : "",
85
+ escapedClasses,
86
+ literal.type === "TemplateLiteral" && literal.openingBraces ? literal.openingBraces : "",
87
+ literal.closingQuote ?? ""
88
+ ].join("");
89
+ if (literal.raw === fixedClasses) {
90
+ continue;
91
+ }
92
+ ctx.report({
93
+ data: {
94
+ notSorted: display(literal.raw),
95
+ sorted: display(fixedClasses)
96
+ },
97
+ fix(fixer) {
98
+ return fixer.replaceTextRange(literal.range, fixedClasses);
99
+ },
100
+ loc: literal.loc,
101
+ message: augmentMessageWithWarnings("Incorrect class order. Expected\n\n{{ notSorted }}\n\nto be\n\n{{ sorted }}", DOCUMENTATION_URL, warnings)
102
+ });
103
+ }
104
+ }
105
+ function sortClassNames(ctx, classes) {
106
+ const { order, tailwindConfig } = getOptions(ctx);
107
+ if (order === "asc") {
108
+ return [classes.toSorted((a, b) => a.localeCompare(b))];
109
+ }
110
+ if (order === "desc") {
111
+ return [classes.toSorted((a, b) => b.localeCompare(a))];
112
+ }
113
+ const { classOrder, warnings } = getClassOrder({ classes, configPath: tailwindConfig, cwd: ctx.cwd });
114
+ const officiallySortedClasses = classOrder
115
+ .toSorted(([, a], [, z]) => {
116
+ if (a === z) {
117
+ return 0;
118
+ }
119
+ if (a === null) {
120
+ return -1;
121
+ }
122
+ if (z === null) {
123
+ return +1;
124
+ }
125
+ return +(a - z > 0n) - +(a - z < 0n);
126
+ })
127
+ .map(([className]) => className);
128
+ if (order === "official") {
129
+ return [officiallySortedClasses, warnings];
130
+ }
131
+ const groupedByVariant = new Map();
132
+ for (const className of officiallySortedClasses) {
133
+ const variant = className.match(/^.*?:/)?.[0] ?? "";
134
+ groupedByVariant.set(variant, [...groupedByVariant.get(variant) ?? [], className]);
135
+ }
136
+ return [
137
+ Array.from(groupedByVariant.entries())
138
+ .sort(([a], [b]) => a === "" ? -1 : b === "" ? 1 : 0)
139
+ .map(([, classes]) => classes)
140
+ .flat(),
141
+ warnings
142
+ ];
143
+ }
144
+ export function getOptions(ctx) {
145
+ const options = ctx.options[0] ?? {};
146
+ const common = getCommonOptions(ctx);
147
+ const order = options.order ?? defaultOptions.order;
148
+ return {
149
+ ...common,
150
+ order
151
+ };
152
+ }
153
+ //# sourceMappingURL=enforce-consistent-class-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-consistent-class-order.js","sourceRoot":"","sources":["../../../src/rules/enforce-consistent-class-order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AttributeOption, CalleeOption, ESLintRule, TagOption, VariableOption } from "../types/rule.js";
2
+ export type Options = [
3
+ Partial<AttributeOption & CalleeOption & TagOption & VariableOption & {
4
+ classesPerLine?: number;
5
+ entryPoint?: string;
6
+ group?: "emptyLine" | "never" | "newLine";
7
+ indent?: "tab" | number;
8
+ lineBreakStyle?: "unix" | "windows";
9
+ preferSingleLine?: boolean;
10
+ printWidth?: number;
11
+ tailwindConfig?: string;
12
+ }>
13
+ ];
14
+ export declare const enforceConsistentLineWrapping: ESLintRule<Options>;
15
+ //# sourceMappingURL=enforce-consistent-line-wrapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-consistent-line-wrapping.d.ts","sourceRoot":"","sources":["../../../src/rules/enforce-consistent-line-wrapping.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACf,MAAM,kCAAkC,CAAC;AAI1C,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CACL,eAAe,GACf,YAAY,GACZ,SAAS,GACT,cAAc,GACd;QACE,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CACF;CACF,CAAC;AAqBF,eAAO,MAAM,6BAA6B,EAAE,UAAU,CAAC,OAAO,CAsE7D,CAAC"}