stylelint-plugin-grid 1.0.0 → 1.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 (58) hide show
  1. package/README.md +8 -0
  2. package/dist/_internal/grid-placement-analysis.d.ts +20 -0
  3. package/dist/_internal/grid-placement-analysis.d.ts.map +1 -0
  4. package/dist/_internal/grid-placement-analysis.js +59 -0
  5. package/dist/_internal/grid-placement-analysis.js.map +1 -0
  6. package/dist/_internal/grid-template-analysis.d.ts +2 -0
  7. package/dist/_internal/grid-template-analysis.d.ts.map +1 -1
  8. package/dist/_internal/grid-template-analysis.js +4 -0
  9. package/dist/_internal/grid-template-analysis.js.map +1 -1
  10. package/dist/_internal/rules-registry.d.ts.map +1 -1
  11. package/dist/_internal/rules-registry.js +16 -0
  12. package/dist/_internal/rules-registry.js.map +1 -1
  13. package/dist/plugin.cjs +893 -285
  14. package/dist/plugin.cjs.map +4 -4
  15. package/dist/rules/no-conflicting-placement.d.ts +8 -0
  16. package/dist/rules/no-conflicting-placement.d.ts.map +1 -0
  17. package/dist/rules/no-conflicting-placement.js +70 -0
  18. package/dist/rules/no-conflicting-placement.js.map +1 -0
  19. package/dist/rules/no-ineffective-container-properties.d.ts +8 -0
  20. package/dist/rules/no-ineffective-container-properties.d.ts.map +1 -0
  21. package/dist/rules/no-ineffective-container-properties.js +97 -0
  22. package/dist/rules/no-ineffective-container-properties.js.map +1 -0
  23. package/dist/rules/no-invalid-repeat-count.d.ts +8 -0
  24. package/dist/rules/no-invalid-repeat-count.d.ts.map +1 -0
  25. package/dist/rules/no-invalid-repeat-count.js +75 -0
  26. package/dist/rules/no-invalid-repeat-count.js.map +1 -0
  27. package/dist/rules/no-invalid-span.d.ts +8 -0
  28. package/dist/rules/no-invalid-span.d.ts.map +1 -0
  29. package/dist/rules/no-invalid-span.js +49 -0
  30. package/dist/rules/no-invalid-span.js.map +1 -0
  31. package/dist/rules/no-reversed-placement-lines.d.ts +8 -0
  32. package/dist/rules/no-reversed-placement-lines.d.ts.map +1 -0
  33. package/dist/rules/no-reversed-placement-lines.js +129 -0
  34. package/dist/rules/no-reversed-placement-lines.js.map +1 -0
  35. package/dist/rules/no-zero-grid-lines.d.ts +8 -0
  36. package/dist/rules/no-zero-grid-lines.d.ts.map +1 -0
  37. package/dist/rules/no-zero-grid-lines.js +48 -0
  38. package/dist/rules/no-zero-grid-lines.js.map +1 -0
  39. package/dist/rules/prefer-minmax-zero-fr.d.ts +8 -0
  40. package/dist/rules/prefer-minmax-zero-fr.d.ts.map +1 -0
  41. package/dist/rules/prefer-minmax-zero-fr.js +56 -0
  42. package/dist/rules/prefer-minmax-zero-fr.js.map +1 -0
  43. package/dist/rules/require-explicit-tracks-with-areas.d.ts +12 -0
  44. package/dist/rules/require-explicit-tracks-with-areas.d.ts.map +1 -0
  45. package/dist/rules/require-explicit-tracks-with-areas.js +65 -0
  46. package/dist/rules/require-explicit-tracks-with-areas.js.map +1 -0
  47. package/docs/rules/configs/grid-all.md +8 -0
  48. package/docs/rules/configs/grid-recommended.md +6 -0
  49. package/docs/rules/configs/index.md +8 -0
  50. package/docs/rules/no-conflicting-placement.md +59 -0
  51. package/docs/rules/no-ineffective-container-properties.md +63 -0
  52. package/docs/rules/no-invalid-repeat-count.md +56 -0
  53. package/docs/rules/no-invalid-span.md +55 -0
  54. package/docs/rules/no-reversed-placement-lines.md +56 -0
  55. package/docs/rules/no-zero-grid-lines.md +53 -0
  56. package/docs/rules/prefer-minmax-zero-fr.md +49 -0
  57. package/docs/rules/require-explicit-tracks-with-areas.md +80 -0
  58. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: (propertyName: string, previousPropertyName: string) => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=no-conflicting-placement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-conflicting-placement.d.ts","sourceRoot":"","sources":["../../src/rules/no-conflicting-placement.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAa/C,QAAA,MAAM,QAAQ,EAAE;IACZ,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,KAAK,MAAM,CAAC;CAI3E,CAAC;AAqEH,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,70 @@
1
+ import stylelint, {} from "stylelint";
2
+ import { isDefined } from "ts-extras";
3
+ import { createStylelintRule, } from "../_internal/create-stylelint-rule.js";
4
+ import { getDirectDeclarations, isGridPlacementDeclaration, } from "../_internal/grid-placement-analysis.js";
5
+ import { createRuleDocsUrl, createRuleName, } from "../_internal/plugin-constants.js";
6
+ const { report, ruleMessages, validateOptions } = stylelint.utils;
7
+ const ruleName = createRuleName("no-conflicting-placement");
8
+ const messages = ruleMessages(ruleName, {
9
+ rejected: (propertyName, previousPropertyName) => `Avoid conflicting Grid placement declarations; \`${propertyName}\` writes the same placement slot as earlier \`${previousPropertyName}\` in this block.`,
10
+ });
11
+ const docs = {
12
+ description: "Disallow same-block CSS Grid placement declarations that write the same placement slot.",
13
+ recommended: true,
14
+ url: createRuleDocsUrl("no-conflicting-placement"),
15
+ };
16
+ const propertySlots = {
17
+ "grid-area": [
18
+ "row-start",
19
+ "column-start",
20
+ "row-end",
21
+ "column-end",
22
+ ],
23
+ "grid-column": ["column-start", "column-end"],
24
+ "grid-column-end": ["column-end"],
25
+ "grid-column-start": ["column-start"],
26
+ "grid-row": ["row-start", "row-end"],
27
+ "grid-row-end": ["row-end"],
28
+ "grid-row-start": ["row-start"],
29
+ };
30
+ const ruleFunction = (primary) => (root, result) => {
31
+ if (!validateOptions(result, ruleName, {
32
+ actual: primary,
33
+ possible: [true],
34
+ })) {
35
+ return;
36
+ }
37
+ root.walkRules((ruleNode) => {
38
+ const slotDeclarations = new Map();
39
+ for (const declaration of getDirectDeclarations(ruleNode)) {
40
+ if (isGridPlacementDeclaration(declaration)) {
41
+ const propertyName = declaration.prop.toLowerCase();
42
+ const slots = propertySlots[propertyName] ?? [];
43
+ const previousDeclaration = slots
44
+ .map((slot) => slotDeclarations.get(slot))
45
+ .find(isDefined);
46
+ if (isDefined(previousDeclaration)) {
47
+ report({
48
+ message: messages.rejected(propertyName, previousDeclaration.prop),
49
+ node: declaration,
50
+ result,
51
+ ruleName,
52
+ word: declaration.prop,
53
+ });
54
+ }
55
+ for (const slot of slots) {
56
+ slotDeclarations.set(slot, declaration);
57
+ }
58
+ }
59
+ }
60
+ });
61
+ };
62
+ /** Public Stylelint rule definition. */
63
+ const rule = createStylelintRule({
64
+ docs,
65
+ messages,
66
+ rule: ruleFunction,
67
+ ruleName,
68
+ });
69
+ export default rule;
70
+ //# sourceMappingURL=no-conflicting-placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-conflicting-placement.js","sourceRoot":"","sources":["../../src/rules/no-conflicting-placement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: (propertyName: string, display: string) => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=no-ineffective-container-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-ineffective-container-properties.d.ts","sourceRoot":"","sources":["../../src/rules/no-ineffective-container-properties.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAU/C,QAAA,MAAM,QAAQ,EAAE;IACZ,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAI9D,CAAC;AAwGH,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,97 @@
1
+ import stylelint, {} from "stylelint";
2
+ import { isDefined, setHas } from "ts-extras";
3
+ import { createStylelintRule, } from "../_internal/create-stylelint-rule.js";
4
+ import { getDirectDeclarations } from "../_internal/grid-placement-analysis.js";
5
+ import { createRuleDocsUrl, createRuleName, } from "../_internal/plugin-constants.js";
6
+ const { report, ruleMessages, validateOptions } = stylelint.utils;
7
+ const ruleName = createRuleName("no-ineffective-container-properties");
8
+ const messages = ruleMessages(ruleName, {
9
+ rejected: (propertyName, display) => `\`${propertyName}\` has no grid-container effect when the final same-block \`display\` value is \`${display}\`; use \`grid\` or \`inline-grid\`, or remove the grid container declaration.`,
10
+ });
11
+ const docs = {
12
+ description: "Disallow CSS Grid container declarations in blocks whose final literal display value is not grid-capable.",
13
+ recommended: true,
14
+ url: createRuleDocsUrl("no-ineffective-container-properties"),
15
+ };
16
+ const gridContainerProperties = new Set([
17
+ "grid",
18
+ "grid-auto-columns",
19
+ "grid-auto-flow",
20
+ "grid-auto-rows",
21
+ "grid-template",
22
+ "grid-template-areas",
23
+ "grid-template-columns",
24
+ "grid-template-rows",
25
+ ]);
26
+ const gridDisplayValues = new Set(["grid", "inline-grid"]);
27
+ const nonGridDisplayValues = new Set([
28
+ "block",
29
+ "contents",
30
+ "flex",
31
+ "flow-root",
32
+ "inline",
33
+ "inline-block",
34
+ "inline-flex",
35
+ "inline-table",
36
+ "list-item",
37
+ "none",
38
+ "table",
39
+ ]);
40
+ function getLastLiteralDisplay(declarations) {
41
+ return declarations.findLast((declaration) => declaration.prop.toLowerCase() === "display" &&
42
+ isDefined(getLiteralDisplayValue(declaration.value)));
43
+ }
44
+ function getLiteralDisplayValue(value) {
45
+ const normalizedValue = value.trim().toLowerCase();
46
+ if (normalizedValue.includes("(") || normalizedValue.includes(")")) {
47
+ return undefined;
48
+ }
49
+ return normalizedValue;
50
+ }
51
+ const ruleFunction = (primary) => (root, result) => {
52
+ if (!validateOptions(result, ruleName, {
53
+ actual: primary,
54
+ possible: [true],
55
+ })) {
56
+ return;
57
+ }
58
+ root.walkRules((ruleNode) => {
59
+ const declarations = getDirectDeclarations(ruleNode);
60
+ const displayDeclaration = getLastLiteralDisplay(declarations);
61
+ const displayValue = isDefined(displayDeclaration)
62
+ ? getLiteralDisplayValue(displayDeclaration.value)
63
+ : undefined;
64
+ const isGridCapableDisplay = isDefined(displayValue)
65
+ ? setHas(gridDisplayValues, displayValue)
66
+ : false;
67
+ const isKnownNonGridDisplay = isDefined(displayValue)
68
+ ? setHas(nonGridDisplayValues, displayValue)
69
+ : false;
70
+ if (!isDefined(displayValue) ||
71
+ isGridCapableDisplay ||
72
+ !isKnownNonGridDisplay) {
73
+ return;
74
+ }
75
+ for (const declaration of declarations) {
76
+ const propertyName = declaration.prop.toLowerCase();
77
+ if (setHas(gridContainerProperties, propertyName)) {
78
+ report({
79
+ message: messages.rejected(propertyName, displayValue),
80
+ node: declaration,
81
+ result,
82
+ ruleName,
83
+ word: declaration.prop,
84
+ });
85
+ }
86
+ }
87
+ });
88
+ };
89
+ /** Public Stylelint rule definition. */
90
+ const rule = createStylelintRule({
91
+ docs,
92
+ messages,
93
+ rule: ruleFunction,
94
+ ruleName,
95
+ });
96
+ export default rule;
97
+ //# sourceMappingURL=no-ineffective-container-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-ineffective-container-properties.js","sourceRoot":"","sources":["../../src/rules/no-ineffective-container-properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: (count: string) => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=no-invalid-repeat-count.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-invalid-repeat-count.d.ts","sourceRoot":"","sources":["../../src/rules/no-invalid-repeat-count.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAa/C,QAAA,MAAM,QAAQ,EAAE;IAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAMpD,CAAC;AAiFF,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,75 @@
1
+ import stylelint, {} from "stylelint";
2
+ import { arrayFirst, isDefined, setHas } from "ts-extras";
3
+ import { createStylelintRule, } from "../_internal/create-stylelint-rule.js";
4
+ import { findValueFunctionCalls, splitTopLevelCommas, } from "../_internal/grid-template-analysis.js";
5
+ import { createRuleDocsUrl, createRuleName, } from "../_internal/plugin-constants.js";
6
+ const { report, ruleMessages, validateOptions } = stylelint.utils;
7
+ const ruleName = createRuleName("no-invalid-repeat-count");
8
+ const messages = ruleMessages(ruleName, {
9
+ rejected: (count) => `Use a positive integer repeat count; \`${count}\` is not a valid fixed \`repeat()\` count.`,
10
+ });
11
+ const docs = {
12
+ description: "Disallow invalid fixed repeat counts in CSS Grid track templates.",
13
+ recommended: true,
14
+ url: createRuleDocsUrl("no-invalid-repeat-count"),
15
+ };
16
+ const trackTemplateProperties = new Set([
17
+ "grid-template-columns",
18
+ "grid-template-rows",
19
+ ]);
20
+ const nonFixedRepeatCounts = new Set([
21
+ "auto-fill",
22
+ "auto-fit",
23
+ ]);
24
+ const integerPattern = /^\+?\d+$/v;
25
+ const numericPattern = /^[+\-]?(?:\d+|\d*\.\d+)$/v;
26
+ function getInvalidRepeatCount(repeatBody) {
27
+ const count = arrayFirst(splitTopLevelCommas(repeatBody))?.trim();
28
+ if (!isDefined(count)) {
29
+ return undefined;
30
+ }
31
+ const normalizedCount = count.toLowerCase();
32
+ if (setHas(nonFixedRepeatCounts, normalizedCount)) {
33
+ return undefined;
34
+ }
35
+ return numericPattern.test(count) && !isPositiveIntegerToken(count)
36
+ ? count
37
+ : undefined;
38
+ }
39
+ function isPositiveIntegerToken(value) {
40
+ return integerPattern.test(value) && Number.parseInt(value, 10) > 0;
41
+ }
42
+ const ruleFunction = (primary) => (root, result) => {
43
+ if (!validateOptions(result, ruleName, {
44
+ actual: primary,
45
+ possible: [true],
46
+ })) {
47
+ return;
48
+ }
49
+ root.walkDecls((declaration) => {
50
+ if (!setHas(trackTemplateProperties, declaration.prop.toLowerCase())) {
51
+ return;
52
+ }
53
+ for (const repeatCall of findValueFunctionCalls(declaration.value, "repeat")) {
54
+ const invalidCount = getInvalidRepeatCount(repeatCall.body);
55
+ if (isDefined(invalidCount)) {
56
+ report({
57
+ message: messages.rejected(invalidCount),
58
+ node: declaration,
59
+ result,
60
+ ruleName,
61
+ word: invalidCount,
62
+ });
63
+ }
64
+ }
65
+ });
66
+ };
67
+ /** Public Stylelint rule definition. */
68
+ const rule = createStylelintRule({
69
+ docs,
70
+ messages,
71
+ rule: ruleFunction,
72
+ ruleName,
73
+ });
74
+ export default rule;
75
+ //# sourceMappingURL=no-invalid-repeat-count.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-invalid-repeat-count.js","sourceRoot":"","sources":["../../src/rules/no-invalid-repeat-count.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: (span: number) => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=no-invalid-span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-invalid-span.d.ts","sourceRoot":"","sources":["../../src/rules/no-invalid-span.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAc/C,QAAA,MAAM,QAAQ,EAAE;IAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAMnD,CAAC;AAyCF,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,49 @@
1
+ import stylelint, {} from "stylelint";
2
+ import { createStylelintRule, } from "../_internal/create-stylelint-rule.js";
3
+ import { getGridLineSpanCounts, getGridPlacementSlots, isGridPlacementDeclaration, } from "../_internal/grid-placement-analysis.js";
4
+ import { createRuleDocsUrl, createRuleName, } from "../_internal/plugin-constants.js";
5
+ const { report, ruleMessages, validateOptions } = stylelint.utils;
6
+ const ruleName = createRuleName("no-invalid-span");
7
+ const messages = ruleMessages(ruleName, {
8
+ rejected: (span) => `Use a positive Grid span count; \`span ${String(span)}\` cannot place a grid item.`,
9
+ });
10
+ const docs = {
11
+ description: "Disallow non-positive `span` counts in CSS Grid placement declarations.",
12
+ recommended: true,
13
+ url: createRuleDocsUrl("no-invalid-span"),
14
+ };
15
+ const ruleFunction = (primary) => (root, result) => {
16
+ if (!validateOptions(result, ruleName, {
17
+ actual: primary,
18
+ possible: [true],
19
+ })) {
20
+ return;
21
+ }
22
+ root.walkDecls((declaration) => {
23
+ if (!isGridPlacementDeclaration(declaration)) {
24
+ return;
25
+ }
26
+ for (const slot of getGridPlacementSlots(declaration.value)) {
27
+ for (const span of getGridLineSpanCounts(slot)) {
28
+ if (span <= 0) {
29
+ report({
30
+ message: messages.rejected(span),
31
+ node: declaration,
32
+ result,
33
+ ruleName,
34
+ word: String(span),
35
+ });
36
+ }
37
+ }
38
+ }
39
+ });
40
+ };
41
+ /** Public Stylelint rule definition. */
42
+ const rule = createStylelintRule({
43
+ docs,
44
+ messages,
45
+ rule: ruleFunction,
46
+ ruleName,
47
+ });
48
+ export default rule;
49
+ //# sourceMappingURL=no-invalid-span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-invalid-span.js","sourceRoot":"","sources":["../../src/rules/no-invalid-span.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAiB,MAAM,WAAW,CAAC;AAErD,OAAO,EACH,mBAAmB,GAEtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACH,iBAAiB,EACjB,cAAc,GACjB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;AAElE,MAAM,QAAQ,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,QAAQ,GAA2C,YAAY,CACjE,QAAQ,EACR;IACI,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAC/B,0CAA0C,MAAM,CAAC,IAAI,CAAC,8BAA8B;CAC3F,CACJ,CAAC;AAEF,MAAM,IAAI,GAAG;IACT,WAAW,EACP,yEAAyE;IAC7E,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;CACnC,CAAC;AAEX,MAAM,YAAY,GACd,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;IAC1B,IACI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE;QAC/B,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,CAAC,IAAI,CAAC;KACnB,CAAC,EACJ,CAAC;QACC,OAAO;IACX,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;QAC3B,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;oBACZ,MAAM,CAAC;wBACH,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAChC,IAAI,EAAE,WAAW;wBACjB,MAAM;wBACN,QAAQ;wBACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;qBACrB,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEN,wCAAwC;AACxC,MAAM,IAAI,GACN,mBAAmB,CAAsC;IACrD,IAAI;IACJ,QAAQ;IACR,IAAI,EAAE,YAAY;IAClB,QAAQ;CACX,CAAC,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: (propertyName: string, start: number, end: number) => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=no-reversed-placement-lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-reversed-placement-lines.d.ts","sourceRoot":"","sources":["../../src/rules/no-reversed-placement-lines.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAc/C,QAAA,MAAM,QAAQ,EAAE;IACZ,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAIzE,CAAC;AAuKH,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,129 @@
1
+ import stylelint, {} from "stylelint";
2
+ import { arrayAt, arrayFirst, isDefined, setHas } from "ts-extras";
3
+ import { createStylelintRule, } from "../_internal/create-stylelint-rule.js";
4
+ import { getDirectDeclarations, getGridPlacementSlots, parseStandaloneGridLineInteger, } from "../_internal/grid-placement-analysis.js";
5
+ import { createRuleDocsUrl, createRuleName, } from "../_internal/plugin-constants.js";
6
+ const { report, ruleMessages, validateOptions } = stylelint.utils;
7
+ const ruleName = createRuleName("no-reversed-placement-lines");
8
+ const messages = ruleMessages(ruleName, {
9
+ rejected: (propertyName, start, end) => `Use an end line after the start line for \`${propertyName}\`; \`${String(end)}\` is not after \`${String(start)}\`.`,
10
+ });
11
+ const docs = {
12
+ description: "Disallow reversed or zero-width numeric CSS Grid placement line ranges.",
13
+ recommended: true,
14
+ url: createRuleDocsUrl("no-reversed-placement-lines"),
15
+ };
16
+ const shorthandProperties = new Set([
17
+ "grid-column",
18
+ "grid-row",
19
+ ]);
20
+ const gridAreaPropertyName = "grid-area";
21
+ const longhandPairs = [
22
+ {
23
+ end: "grid-column-end",
24
+ name: "grid-column",
25
+ start: "grid-column-start",
26
+ },
27
+ {
28
+ end: "grid-row-end",
29
+ name: "grid-row",
30
+ start: "grid-row-start",
31
+ },
32
+ ];
33
+ function getComparableLinePair(startValue, endValue) {
34
+ const start = parseStandaloneGridLineInteger(startValue);
35
+ const end = parseStandaloneGridLineInteger(endValue);
36
+ if (!isDefined(start) || !isDefined(end) || start === 0 || end === 0) {
37
+ return undefined;
38
+ }
39
+ if (Math.sign(start) !== Math.sign(end)) {
40
+ return undefined;
41
+ }
42
+ return [start, end];
43
+ }
44
+ function isReversedOrZeroWidth(pair) {
45
+ const [start, end] = pair;
46
+ return end <= start;
47
+ }
48
+ const ruleFunction = (primary) => (root, result) => {
49
+ if (!validateOptions(result, ruleName, {
50
+ actual: primary,
51
+ possible: [true],
52
+ })) {
53
+ return;
54
+ }
55
+ root.walkDecls((declaration) => {
56
+ const propertyName = declaration.prop.toLowerCase();
57
+ if (!setHas(shorthandProperties, propertyName) &&
58
+ propertyName !== gridAreaPropertyName) {
59
+ return;
60
+ }
61
+ const slots = getGridPlacementSlots(declaration.value);
62
+ const shorthandPairs = propertyName === gridAreaPropertyName
63
+ ? [
64
+ {
65
+ endValue: arrayAt(slots, 2),
66
+ propertyName: "grid-row",
67
+ startValue: arrayFirst(slots),
68
+ },
69
+ {
70
+ endValue: arrayAt(slots, 3),
71
+ propertyName: "grid-column",
72
+ startValue: arrayAt(slots, 1),
73
+ },
74
+ ]
75
+ : [
76
+ {
77
+ endValue: arrayAt(slots, 1),
78
+ propertyName,
79
+ startValue: arrayFirst(slots),
80
+ },
81
+ ];
82
+ for (const shorthandPair of shorthandPairs) {
83
+ const { endValue, propertyName: pairName, startValue, } = shorthandPair;
84
+ if (isDefined(startValue) && isDefined(endValue)) {
85
+ const pair = getComparableLinePair(startValue, endValue);
86
+ if (isDefined(pair) && isReversedOrZeroWidth(pair)) {
87
+ const [start, end] = pair;
88
+ report({
89
+ message: messages.rejected(pairName, start, end),
90
+ node: declaration,
91
+ result,
92
+ ruleName,
93
+ word: endValue,
94
+ });
95
+ }
96
+ }
97
+ }
98
+ });
99
+ root.walkRules((ruleNode) => {
100
+ const declarations = getDirectDeclarations(ruleNode);
101
+ for (const pair of longhandPairs) {
102
+ const startDeclaration = declarations.find((declaration) => declaration.prop.toLowerCase() === pair.start);
103
+ const endDeclaration = declarations.find((declaration) => declaration.prop.toLowerCase() === pair.end);
104
+ if (isDefined(startDeclaration) && isDefined(endDeclaration)) {
105
+ const linePair = getComparableLinePair(startDeclaration.value, endDeclaration.value);
106
+ if (isDefined(linePair) &&
107
+ isReversedOrZeroWidth(linePair)) {
108
+ const [start, end] = linePair;
109
+ report({
110
+ message: messages.rejected(pair.name, start, end),
111
+ node: endDeclaration,
112
+ result,
113
+ ruleName,
114
+ word: endDeclaration.value,
115
+ });
116
+ }
117
+ }
118
+ }
119
+ });
120
+ };
121
+ /** Public Stylelint rule definition. */
122
+ const rule = createStylelintRule({
123
+ docs,
124
+ messages,
125
+ rule: ruleFunction,
126
+ ruleName,
127
+ });
128
+ export default rule;
129
+ //# sourceMappingURL=no-reversed-placement-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-reversed-placement-lines.js","sourceRoot":"","sources":["../../src/rules/no-reversed-placement-lines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: () => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=no-zero-grid-lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-zero-grid-lines.d.ts","sourceRoot":"","sources":["../../src/rules/no-zero-grid-lines.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAc/C,QAAA,MAAM,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;CAGtC,CAAC;AAsCH,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,48 @@
1
+ import stylelint, {} from "stylelint";
2
+ import { arrayIncludes } from "ts-extras";
3
+ import { createStylelintRule, } from "../_internal/create-stylelint-rule.js";
4
+ import { getGridLineIntegerTokens, getGridPlacementSlots, isGridPlacementDeclaration, } from "../_internal/grid-placement-analysis.js";
5
+ import { createRuleDocsUrl, createRuleName, } from "../_internal/plugin-constants.js";
6
+ const { report, ruleMessages, validateOptions } = stylelint.utils;
7
+ const ruleName = createRuleName("no-zero-grid-lines");
8
+ const messages = ruleMessages(ruleName, {
9
+ rejected: () => "Do not use Grid line `0`; CSS Grid line numbering starts at `1` and `-1`.",
10
+ });
11
+ const docs = {
12
+ description: "Disallow line `0` in CSS Grid placement declarations.",
13
+ recommended: true,
14
+ url: createRuleDocsUrl("no-zero-grid-lines"),
15
+ };
16
+ const ruleFunction = (primary) => (root, result) => {
17
+ if (!validateOptions(result, ruleName, {
18
+ actual: primary,
19
+ possible: [true],
20
+ })) {
21
+ return;
22
+ }
23
+ root.walkDecls((declaration) => {
24
+ if (!isGridPlacementDeclaration(declaration)) {
25
+ return;
26
+ }
27
+ for (const slot of getGridPlacementSlots(declaration.value)) {
28
+ if (arrayIncludes(getGridLineIntegerTokens(slot), 0)) {
29
+ report({
30
+ message: messages.rejected(),
31
+ node: declaration,
32
+ result,
33
+ ruleName,
34
+ word: "0",
35
+ });
36
+ }
37
+ }
38
+ });
39
+ };
40
+ /** Public Stylelint rule definition. */
41
+ const rule = createStylelintRule({
42
+ docs,
43
+ messages,
44
+ rule: ruleFunction,
45
+ ruleName,
46
+ });
47
+ export default rule;
48
+ //# sourceMappingURL=no-zero-grid-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-zero-grid-lines.js","sourceRoot":"","sources":["../../src/rules/no-zero-grid-lines.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAiB,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACH,mBAAmB,GAEtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,GAC7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACH,iBAAiB,EACjB,cAAc,GACjB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;AAElE,MAAM,QAAQ,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AACtD,MAAM,QAAQ,GAA+B,YAAY,CAAC,QAAQ,EAAE;IAChE,QAAQ,EAAE,GAAW,EAAE,CACnB,2EAA2E;CAClF,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG;IACT,WAAW,EAAE,uDAAuD;IACpE,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,iBAAiB,CAAC,oBAAoB,CAAC;CACtC,CAAC;AAEX,MAAM,YAAY,GACd,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;IAC1B,IACI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE;QAC/B,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,CAAC,IAAI,CAAC;KACnB,CAAC,EACJ,CAAC;QACC,OAAO;IACX,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;QAC3B,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,IAAI,aAAa,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC;oBACH,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE;oBAC5B,IAAI,EAAE,WAAW;oBACjB,MAAM;oBACN,QAAQ;oBACR,IAAI,EAAE,GAAG;iBACZ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEN,wCAAwC;AACxC,MAAM,IAAI,GACN,mBAAmB,CAAsC;IACrD,IAAI;IACJ,QAAQ;IACR,IAAI,EAAE,YAAY;IAClB,QAAQ;CACX,CAAC,CAAC;AAEP,eAAe,IAAI,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type StylelintPluginRule } from "../_internal/create-stylelint-rule.js";
2
+ declare const messages: {
3
+ rejected: (track: string) => string;
4
+ };
5
+ /** Public Stylelint rule definition. */
6
+ declare const rule: StylelintPluginRule<boolean, undefined, typeof messages>;
7
+ export default rule;
8
+ //# sourceMappingURL=prefer-minmax-zero-fr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-minmax-zero-fr.d.ts","sourceRoot":"","sources":["../../src/rules/prefer-minmax-zero-fr.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,uCAAuC,CAAC;AAU/C,QAAA,MAAM,QAAQ,EAAE;IAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAMpD,CAAC;AAoDF,wCAAwC;AACxC,QAAA,MAAM,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,QAAQ,CAM7D,CAAC;AAEP,eAAe,IAAI,CAAC"}