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.
- package/README.md +8 -0
- package/dist/_internal/grid-placement-analysis.d.ts +20 -0
- package/dist/_internal/grid-placement-analysis.d.ts.map +1 -0
- package/dist/_internal/grid-placement-analysis.js +59 -0
- package/dist/_internal/grid-placement-analysis.js.map +1 -0
- package/dist/_internal/grid-template-analysis.d.ts +2 -0
- package/dist/_internal/grid-template-analysis.d.ts.map +1 -1
- package/dist/_internal/grid-template-analysis.js +4 -0
- package/dist/_internal/grid-template-analysis.js.map +1 -1
- package/dist/_internal/rules-registry.d.ts.map +1 -1
- package/dist/_internal/rules-registry.js +16 -0
- package/dist/_internal/rules-registry.js.map +1 -1
- package/dist/plugin.cjs +893 -285
- package/dist/plugin.cjs.map +4 -4
- package/dist/rules/no-conflicting-placement.d.ts +8 -0
- package/dist/rules/no-conflicting-placement.d.ts.map +1 -0
- package/dist/rules/no-conflicting-placement.js +70 -0
- package/dist/rules/no-conflicting-placement.js.map +1 -0
- package/dist/rules/no-ineffective-container-properties.d.ts +8 -0
- package/dist/rules/no-ineffective-container-properties.d.ts.map +1 -0
- package/dist/rules/no-ineffective-container-properties.js +97 -0
- package/dist/rules/no-ineffective-container-properties.js.map +1 -0
- package/dist/rules/no-invalid-repeat-count.d.ts +8 -0
- package/dist/rules/no-invalid-repeat-count.d.ts.map +1 -0
- package/dist/rules/no-invalid-repeat-count.js +75 -0
- package/dist/rules/no-invalid-repeat-count.js.map +1 -0
- package/dist/rules/no-invalid-span.d.ts +8 -0
- package/dist/rules/no-invalid-span.d.ts.map +1 -0
- package/dist/rules/no-invalid-span.js +49 -0
- package/dist/rules/no-invalid-span.js.map +1 -0
- package/dist/rules/no-reversed-placement-lines.d.ts +8 -0
- package/dist/rules/no-reversed-placement-lines.d.ts.map +1 -0
- package/dist/rules/no-reversed-placement-lines.js +129 -0
- package/dist/rules/no-reversed-placement-lines.js.map +1 -0
- package/dist/rules/no-zero-grid-lines.d.ts +8 -0
- package/dist/rules/no-zero-grid-lines.d.ts.map +1 -0
- package/dist/rules/no-zero-grid-lines.js +48 -0
- package/dist/rules/no-zero-grid-lines.js.map +1 -0
- package/dist/rules/prefer-minmax-zero-fr.d.ts +8 -0
- package/dist/rules/prefer-minmax-zero-fr.d.ts.map +1 -0
- package/dist/rules/prefer-minmax-zero-fr.js +56 -0
- package/dist/rules/prefer-minmax-zero-fr.js.map +1 -0
- package/dist/rules/require-explicit-tracks-with-areas.d.ts +12 -0
- package/dist/rules/require-explicit-tracks-with-areas.d.ts.map +1 -0
- package/dist/rules/require-explicit-tracks-with-areas.js +65 -0
- package/dist/rules/require-explicit-tracks-with-areas.js.map +1 -0
- package/docs/rules/configs/grid-all.md +8 -0
- package/docs/rules/configs/grid-recommended.md +6 -0
- package/docs/rules/configs/index.md +8 -0
- package/docs/rules/no-conflicting-placement.md +59 -0
- package/docs/rules/no-ineffective-container-properties.md +63 -0
- package/docs/rules/no-invalid-repeat-count.md +56 -0
- package/docs/rules/no-invalid-span.md +55 -0
- package/docs/rules/no-reversed-placement-lines.md +56 -0
- package/docs/rules/no-zero-grid-lines.md +53 -0
- package/docs/rules/prefer-minmax-zero-fr.md +49 -0
- package/docs/rules/require-explicit-tracks-with-areas.md +80 -0
- 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":"AAAA,OAAO,SAAS,EAAE,EAAiB,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EACH,mBAAmB,GAEtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACH,sBAAsB,EACtB,mBAAmB,GACtB,MAAM,wCAAwC,CAAC;AAChD,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,yBAAyB,CAAC,CAAC;AAC3D,MAAM,QAAQ,GAA4C,YAAY,CAClE,QAAQ,EACR;IACI,QAAQ,EAAE,CAAC,KAAa,EAAU,EAAE,CAChC,0CAA0C,KAAK,6CAA6C;CACnG,CACJ,CAAC;AAEF,MAAM,IAAI,GAAG;IACT,WAAW,EACP,mEAAmE;IACvE,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,iBAAiB,CAAC,yBAAyB,CAAC;CAC3C,CAAC;AAEX,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC;IACzD,uBAAuB;IACvB,oBAAoB;CACvB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IACtD,WAAW;IACX,UAAU;CACb,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD,SAAS,qBAAqB,CAAC,UAAkB;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAElE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAE5C,IAAI,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC/D,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IACzC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,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,IACI,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAClE,CAAC;YACC,OAAO;QACX,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,sBAAsB,CAC3C,WAAW,CAAC,KAAK,EACjB,QAAQ,CACX,EAAE,CAAC;YACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE5D,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC;oBACH,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;oBACxC,IAAI,EAAE,WAAW;oBACjB,MAAM;oBACN,QAAQ;oBACR,IAAI,EAAE,YAAY;iBACrB,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: (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"}
|