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
package/dist/plugin.cjs
CHANGED
|
@@ -40,7 +40,7 @@ __export(plugin_exports, {
|
|
|
40
40
|
rules: () => rules
|
|
41
41
|
});
|
|
42
42
|
module.exports = __toCommonJS(plugin_exports);
|
|
43
|
-
var
|
|
43
|
+
var import_ts_extras22 = require("ts-extras");
|
|
44
44
|
|
|
45
45
|
// dist/_internal/plugin-constants.js
|
|
46
46
|
var import_package = __toESM(require("stylelint-plugin-grid/package.json"), 1);
|
|
@@ -60,11 +60,11 @@ function isUnknownRecord(pkg) {
|
|
|
60
60
|
return typeof pkg === "object" && pkg !== null && !Array.isArray(pkg);
|
|
61
61
|
}
|
|
62
62
|
var PACKAGE_VERSION = getPackageVersion(import_package.default);
|
|
63
|
-
function createRuleDocsUrl(
|
|
64
|
-
return `${DOCS_RULES_BASE_URL}/${
|
|
63
|
+
function createRuleDocsUrl(ruleName22) {
|
|
64
|
+
return `${DOCS_RULES_BASE_URL}/${ruleName22}`;
|
|
65
65
|
}
|
|
66
|
-
function createRuleName(
|
|
67
|
-
return `${PLUGIN_NAMESPACE}/${
|
|
66
|
+
function createRuleName(ruleName22) {
|
|
67
|
+
return `${PLUGIN_NAMESPACE}/${ruleName22}`;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// dist/rules/consistent-area-naming.js
|
|
@@ -74,31 +74,31 @@ var import_ts_extras3 = require("ts-extras");
|
|
|
74
74
|
// dist/_internal/create-stylelint-rule.js
|
|
75
75
|
var import_stylelint = __toESM(require("stylelint"), 1);
|
|
76
76
|
var createStylelintRule = (options) => {
|
|
77
|
-
const { docs:
|
|
77
|
+
const { docs: docs22, messages: messages22, rule: rule22, ruleName: ruleName22 } = options;
|
|
78
78
|
const baseMeta = {
|
|
79
79
|
...options.meta,
|
|
80
|
-
url: options.meta?.url ??
|
|
80
|
+
url: options.meta?.url ?? docs22.url
|
|
81
81
|
};
|
|
82
82
|
const meta2 = {
|
|
83
83
|
...baseMeta,
|
|
84
|
-
docs:
|
|
84
|
+
docs: docs22
|
|
85
85
|
};
|
|
86
|
-
const typedRule = Object.assign(
|
|
87
|
-
messages:
|
|
86
|
+
const typedRule = Object.assign(rule22, {
|
|
87
|
+
messages: messages22,
|
|
88
88
|
meta: meta2,
|
|
89
|
-
ruleName:
|
|
89
|
+
ruleName: ruleName22
|
|
90
90
|
});
|
|
91
91
|
if (options.primaryOptionArray === true) {
|
|
92
92
|
typedRule.primaryOptionArray = true;
|
|
93
93
|
}
|
|
94
|
-
const plugin = import_stylelint.default.createPlugin(
|
|
94
|
+
const plugin = import_stylelint.default.createPlugin(ruleName22, typedRule);
|
|
95
95
|
return {
|
|
96
96
|
...plugin,
|
|
97
|
-
docs:
|
|
98
|
-
messages:
|
|
97
|
+
docs: docs22,
|
|
98
|
+
messages: messages22,
|
|
99
99
|
meta: meta2,
|
|
100
100
|
rule: typedRule,
|
|
101
|
-
ruleName:
|
|
101
|
+
ruleName: ruleName22
|
|
102
102
|
};
|
|
103
103
|
};
|
|
104
104
|
|
|
@@ -291,6 +291,9 @@ function parseGridTemplateAreas(declaration) {
|
|
|
291
291
|
function splitTopLevelCommas(value) {
|
|
292
292
|
return splitTopLevel(value, /,/v);
|
|
293
293
|
}
|
|
294
|
+
function splitTopLevelSlashes(value) {
|
|
295
|
+
return splitTopLevel(value, /\//v);
|
|
296
|
+
}
|
|
294
297
|
function splitTopLevelWhitespace(value) {
|
|
295
298
|
return splitTopLevel(value, /\s/v);
|
|
296
299
|
}
|
|
@@ -495,20 +498,137 @@ var rule = createStylelintRule({
|
|
|
495
498
|
});
|
|
496
499
|
var consistent_area_naming_default = rule;
|
|
497
500
|
|
|
498
|
-
// dist/rules/no-
|
|
501
|
+
// dist/rules/no-conflicting-placement.js
|
|
499
502
|
var import_stylelint3 = __toESM(require("stylelint"), 1);
|
|
503
|
+
var import_ts_extras5 = require("ts-extras");
|
|
504
|
+
|
|
505
|
+
// dist/_internal/grid-placement-analysis.js
|
|
506
|
+
var import_ts_extras4 = require("ts-extras");
|
|
507
|
+
var gridPlacementProperties = /* @__PURE__ */ new Set([
|
|
508
|
+
"grid-area",
|
|
509
|
+
"grid-column",
|
|
510
|
+
"grid-column-end",
|
|
511
|
+
"grid-column-start",
|
|
512
|
+
"grid-row",
|
|
513
|
+
"grid-row-end",
|
|
514
|
+
"grid-row-start"
|
|
515
|
+
]);
|
|
516
|
+
var strictIntegerPattern = /^[+\-]?\d+$/v;
|
|
517
|
+
function getDirectDeclarations(rule22) {
|
|
518
|
+
return rule22.nodes.filter((node) => node.type === "decl");
|
|
519
|
+
}
|
|
520
|
+
function getGridLineIntegerTokens(value) {
|
|
521
|
+
const integers = [];
|
|
522
|
+
for (const token of splitTopLevelWhitespace(value)) {
|
|
523
|
+
const integer = parseStrictInteger(token);
|
|
524
|
+
if ((0, import_ts_extras4.isDefined)(integer)) {
|
|
525
|
+
integers.push(integer);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
return integers;
|
|
529
|
+
}
|
|
530
|
+
function getGridLineSpanCounts(value) {
|
|
531
|
+
const tokens = splitTopLevelWhitespace(value);
|
|
532
|
+
const hasSpan = tokens.some((token) => token.toLowerCase() === "span");
|
|
533
|
+
if (!hasSpan) {
|
|
534
|
+
return [];
|
|
535
|
+
}
|
|
536
|
+
return tokens.map((token) => parseStrictInteger(token)).filter(import_ts_extras4.isDefined);
|
|
537
|
+
}
|
|
538
|
+
function getGridPlacementSlots(value) {
|
|
539
|
+
return splitTopLevelSlashes(value);
|
|
540
|
+
}
|
|
541
|
+
function isGridPlacementDeclaration(declaration) {
|
|
542
|
+
return (0, import_ts_extras4.setHas)(gridPlacementProperties, declaration.prop.toLowerCase());
|
|
543
|
+
}
|
|
544
|
+
function parseStandaloneGridLineInteger(value) {
|
|
545
|
+
const tokens = splitTopLevelWhitespace(value);
|
|
546
|
+
return tokens.length === 1 ? parseStrictInteger((0, import_ts_extras4.arrayFirst)(tokens) ?? "") : void 0;
|
|
547
|
+
}
|
|
548
|
+
function parseStrictInteger(value) {
|
|
549
|
+
if (!strictIntegerPattern.test(value)) {
|
|
550
|
+
return void 0;
|
|
551
|
+
}
|
|
552
|
+
return Number.parseInt(value, 10);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
// dist/rules/no-conflicting-placement.js
|
|
500
556
|
var { report: report2, ruleMessages: ruleMessages2, validateOptions: validateOptions2 } = import_stylelint3.default.utils;
|
|
501
|
-
var ruleName2 = createRuleName("no-
|
|
557
|
+
var ruleName2 = createRuleName("no-conflicting-placement");
|
|
502
558
|
var messages2 = ruleMessages2(ruleName2, {
|
|
503
|
-
rejected: () =>
|
|
559
|
+
rejected: (propertyName, previousPropertyName) => `Avoid conflicting Grid placement declarations; \`${propertyName}\` writes the same placement slot as earlier \`${previousPropertyName}\` in this block.`
|
|
504
560
|
});
|
|
505
561
|
var docs2 = {
|
|
562
|
+
description: "Disallow same-block CSS Grid placement declarations that write the same placement slot.",
|
|
563
|
+
recommended: true,
|
|
564
|
+
url: createRuleDocsUrl("no-conflicting-placement")
|
|
565
|
+
};
|
|
566
|
+
var propertySlots = {
|
|
567
|
+
"grid-area": [
|
|
568
|
+
"row-start",
|
|
569
|
+
"column-start",
|
|
570
|
+
"row-end",
|
|
571
|
+
"column-end"
|
|
572
|
+
],
|
|
573
|
+
"grid-column": ["column-start", "column-end"],
|
|
574
|
+
"grid-column-end": ["column-end"],
|
|
575
|
+
"grid-column-start": ["column-start"],
|
|
576
|
+
"grid-row": ["row-start", "row-end"],
|
|
577
|
+
"grid-row-end": ["row-end"],
|
|
578
|
+
"grid-row-start": ["row-start"]
|
|
579
|
+
};
|
|
580
|
+
var ruleFunction2 = (primary) => (root, result) => {
|
|
581
|
+
if (!validateOptions2(result, ruleName2, {
|
|
582
|
+
actual: primary,
|
|
583
|
+
possible: [true]
|
|
584
|
+
})) {
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
root.walkRules((ruleNode) => {
|
|
588
|
+
const slotDeclarations = /* @__PURE__ */ new Map();
|
|
589
|
+
for (const declaration of getDirectDeclarations(ruleNode)) {
|
|
590
|
+
if (isGridPlacementDeclaration(declaration)) {
|
|
591
|
+
const propertyName = declaration.prop.toLowerCase();
|
|
592
|
+
const slots = propertySlots[propertyName] ?? [];
|
|
593
|
+
const previousDeclaration = slots.map((slot) => slotDeclarations.get(slot)).find(import_ts_extras5.isDefined);
|
|
594
|
+
if ((0, import_ts_extras5.isDefined)(previousDeclaration)) {
|
|
595
|
+
report2({
|
|
596
|
+
message: messages2.rejected(propertyName, previousDeclaration.prop),
|
|
597
|
+
node: declaration,
|
|
598
|
+
result,
|
|
599
|
+
ruleName: ruleName2,
|
|
600
|
+
word: declaration.prop
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
for (const slot of slots) {
|
|
604
|
+
slotDeclarations.set(slot, declaration);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
};
|
|
610
|
+
var rule2 = createStylelintRule({
|
|
611
|
+
docs: docs2,
|
|
612
|
+
messages: messages2,
|
|
613
|
+
rule: ruleFunction2,
|
|
614
|
+
ruleName: ruleName2
|
|
615
|
+
});
|
|
616
|
+
var no_conflicting_placement_default = rule2;
|
|
617
|
+
|
|
618
|
+
// dist/rules/no-dense-auto-flow.js
|
|
619
|
+
var import_stylelint4 = __toESM(require("stylelint"), 1);
|
|
620
|
+
var { report: report3, ruleMessages: ruleMessages3, validateOptions: validateOptions3 } = import_stylelint4.default.utils;
|
|
621
|
+
var ruleName3 = createRuleName("no-dense-auto-flow");
|
|
622
|
+
var messages3 = ruleMessages3(ruleName3, {
|
|
623
|
+
rejected: () => "Avoid `grid-auto-flow: dense`; dense packing can disconnect visual order from source order."
|
|
624
|
+
});
|
|
625
|
+
var docs3 = {
|
|
506
626
|
description: "Disallow `grid-auto-flow: dense` because it can reorder auto-placed grid items visually.",
|
|
507
627
|
recommended: false,
|
|
508
628
|
url: createRuleDocsUrl("no-dense-auto-flow")
|
|
509
629
|
};
|
|
510
|
-
var
|
|
511
|
-
if (!
|
|
630
|
+
var ruleFunction3 = (primary) => (root, result) => {
|
|
631
|
+
if (!validateOptions3(result, ruleName3, {
|
|
512
632
|
actual: primary,
|
|
513
633
|
possible: [true]
|
|
514
634
|
})) {
|
|
@@ -519,37 +639,122 @@ var ruleFunction2 = (primary) => (root, result) => {
|
|
|
519
639
|
if (!hasDensePacking) {
|
|
520
640
|
return;
|
|
521
641
|
}
|
|
522
|
-
|
|
523
|
-
message:
|
|
642
|
+
report3({
|
|
643
|
+
message: messages3.rejected(),
|
|
524
644
|
node: declaration,
|
|
525
645
|
result,
|
|
526
|
-
ruleName:
|
|
646
|
+
ruleName: ruleName3,
|
|
527
647
|
word: "dense"
|
|
528
648
|
});
|
|
529
649
|
});
|
|
530
650
|
};
|
|
531
|
-
var
|
|
532
|
-
docs:
|
|
533
|
-
messages:
|
|
534
|
-
rule:
|
|
535
|
-
ruleName:
|
|
651
|
+
var rule3 = createStylelintRule({
|
|
652
|
+
docs: docs3,
|
|
653
|
+
messages: messages3,
|
|
654
|
+
rule: ruleFunction3,
|
|
655
|
+
ruleName: ruleName3
|
|
656
|
+
});
|
|
657
|
+
var no_dense_auto_flow_default = rule3;
|
|
658
|
+
|
|
659
|
+
// dist/rules/no-ineffective-container-properties.js
|
|
660
|
+
var import_stylelint5 = __toESM(require("stylelint"), 1);
|
|
661
|
+
var import_ts_extras6 = require("ts-extras");
|
|
662
|
+
var { report: report4, ruleMessages: ruleMessages4, validateOptions: validateOptions4 } = import_stylelint5.default.utils;
|
|
663
|
+
var ruleName4 = createRuleName("no-ineffective-container-properties");
|
|
664
|
+
var messages4 = ruleMessages4(ruleName4, {
|
|
665
|
+
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.`
|
|
666
|
+
});
|
|
667
|
+
var docs4 = {
|
|
668
|
+
description: "Disallow CSS Grid container declarations in blocks whose final literal display value is not grid-capable.",
|
|
669
|
+
recommended: true,
|
|
670
|
+
url: createRuleDocsUrl("no-ineffective-container-properties")
|
|
671
|
+
};
|
|
672
|
+
var gridContainerProperties = /* @__PURE__ */ new Set([
|
|
673
|
+
"grid",
|
|
674
|
+
"grid-auto-columns",
|
|
675
|
+
"grid-auto-flow",
|
|
676
|
+
"grid-auto-rows",
|
|
677
|
+
"grid-template",
|
|
678
|
+
"grid-template-areas",
|
|
679
|
+
"grid-template-columns",
|
|
680
|
+
"grid-template-rows"
|
|
681
|
+
]);
|
|
682
|
+
var gridDisplayValues = /* @__PURE__ */ new Set(["grid", "inline-grid"]);
|
|
683
|
+
var nonGridDisplayValues = /* @__PURE__ */ new Set([
|
|
684
|
+
"block",
|
|
685
|
+
"contents",
|
|
686
|
+
"flex",
|
|
687
|
+
"flow-root",
|
|
688
|
+
"inline",
|
|
689
|
+
"inline-block",
|
|
690
|
+
"inline-flex",
|
|
691
|
+
"inline-table",
|
|
692
|
+
"list-item",
|
|
693
|
+
"none",
|
|
694
|
+
"table"
|
|
695
|
+
]);
|
|
696
|
+
function getLastLiteralDisplay(declarations) {
|
|
697
|
+
return declarations.findLast((declaration) => declaration.prop.toLowerCase() === "display" && (0, import_ts_extras6.isDefined)(getLiteralDisplayValue(declaration.value)));
|
|
698
|
+
}
|
|
699
|
+
function getLiteralDisplayValue(value) {
|
|
700
|
+
const normalizedValue = value.trim().toLowerCase();
|
|
701
|
+
if (normalizedValue.includes("(") || normalizedValue.includes(")")) {
|
|
702
|
+
return void 0;
|
|
703
|
+
}
|
|
704
|
+
return normalizedValue;
|
|
705
|
+
}
|
|
706
|
+
var ruleFunction4 = (primary) => (root, result) => {
|
|
707
|
+
if (!validateOptions4(result, ruleName4, {
|
|
708
|
+
actual: primary,
|
|
709
|
+
possible: [true]
|
|
710
|
+
})) {
|
|
711
|
+
return;
|
|
712
|
+
}
|
|
713
|
+
root.walkRules((ruleNode) => {
|
|
714
|
+
const declarations = getDirectDeclarations(ruleNode);
|
|
715
|
+
const displayDeclaration = getLastLiteralDisplay(declarations);
|
|
716
|
+
const displayValue = (0, import_ts_extras6.isDefined)(displayDeclaration) ? getLiteralDisplayValue(displayDeclaration.value) : void 0;
|
|
717
|
+
const isGridCapableDisplay = (0, import_ts_extras6.isDefined)(displayValue) ? (0, import_ts_extras6.setHas)(gridDisplayValues, displayValue) : false;
|
|
718
|
+
const isKnownNonGridDisplay = (0, import_ts_extras6.isDefined)(displayValue) ? (0, import_ts_extras6.setHas)(nonGridDisplayValues, displayValue) : false;
|
|
719
|
+
if (!(0, import_ts_extras6.isDefined)(displayValue) || isGridCapableDisplay || !isKnownNonGridDisplay) {
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
for (const declaration of declarations) {
|
|
723
|
+
const propertyName = declaration.prop.toLowerCase();
|
|
724
|
+
if ((0, import_ts_extras6.setHas)(gridContainerProperties, propertyName)) {
|
|
725
|
+
report4({
|
|
726
|
+
message: messages4.rejected(propertyName, displayValue),
|
|
727
|
+
node: declaration,
|
|
728
|
+
result,
|
|
729
|
+
ruleName: ruleName4,
|
|
730
|
+
word: declaration.prop
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
});
|
|
735
|
+
};
|
|
736
|
+
var rule4 = createStylelintRule({
|
|
737
|
+
docs: docs4,
|
|
738
|
+
messages: messages4,
|
|
739
|
+
rule: ruleFunction4,
|
|
740
|
+
ruleName: ruleName4
|
|
536
741
|
});
|
|
537
|
-
var
|
|
742
|
+
var no_ineffective_container_properties_default = rule4;
|
|
538
743
|
|
|
539
744
|
// dist/rules/no-invalid-areas.js
|
|
540
|
-
var
|
|
541
|
-
var { report:
|
|
542
|
-
var
|
|
543
|
-
var
|
|
745
|
+
var import_stylelint6 = __toESM(require("stylelint"), 1);
|
|
746
|
+
var { report: report5, ruleMessages: ruleMessages5, validateOptions: validateOptions5 } = import_stylelint6.default.utils;
|
|
747
|
+
var ruleName5 = createRuleName("no-invalid-areas");
|
|
748
|
+
var messages5 = ruleMessages5(ruleName5, {
|
|
544
749
|
rejected: (message) => message
|
|
545
750
|
});
|
|
546
|
-
var
|
|
751
|
+
var docs5 = {
|
|
547
752
|
description: "Disallow malformed `grid-template-areas` declarations.",
|
|
548
753
|
recommended: true,
|
|
549
754
|
url: createRuleDocsUrl("no-invalid-areas")
|
|
550
755
|
};
|
|
551
|
-
var
|
|
552
|
-
if (!
|
|
756
|
+
var ruleFunction5 = (primary) => (root, result) => {
|
|
757
|
+
if (!validateOptions5(result, ruleName5, {
|
|
553
758
|
actual: primary,
|
|
554
759
|
possible: [true]
|
|
555
760
|
})) {
|
|
@@ -557,33 +762,33 @@ var ruleFunction3 = (primary) => (root, result) => {
|
|
|
557
762
|
}
|
|
558
763
|
for (const template of collectGridTemplateAreas(root)) {
|
|
559
764
|
for (const diagnostic of template.diagnostics) {
|
|
560
|
-
|
|
561
|
-
message:
|
|
765
|
+
report5({
|
|
766
|
+
message: messages5.rejected(diagnostic.message),
|
|
562
767
|
node: template.declaration,
|
|
563
768
|
result,
|
|
564
|
-
ruleName:
|
|
769
|
+
ruleName: ruleName5,
|
|
565
770
|
word: diagnostic.token
|
|
566
771
|
});
|
|
567
772
|
}
|
|
568
773
|
}
|
|
569
774
|
};
|
|
570
|
-
var
|
|
571
|
-
docs:
|
|
572
|
-
messages:
|
|
573
|
-
rule:
|
|
574
|
-
ruleName:
|
|
775
|
+
var rule5 = createStylelintRule({
|
|
776
|
+
docs: docs5,
|
|
777
|
+
messages: messages5,
|
|
778
|
+
rule: ruleFunction5,
|
|
779
|
+
ruleName: ruleName5
|
|
575
780
|
});
|
|
576
|
-
var no_invalid_areas_default =
|
|
781
|
+
var no_invalid_areas_default = rule5;
|
|
577
782
|
|
|
578
783
|
// dist/rules/no-invalid-auto-repeat.js
|
|
579
|
-
var
|
|
580
|
-
var
|
|
581
|
-
var { report:
|
|
582
|
-
var
|
|
583
|
-
var
|
|
784
|
+
var import_stylelint7 = __toESM(require("stylelint"), 1);
|
|
785
|
+
var import_ts_extras7 = require("ts-extras");
|
|
786
|
+
var { report: report6, ruleMessages: ruleMessages6, validateOptions: validateOptions6 } = import_stylelint7.default.utils;
|
|
787
|
+
var ruleName6 = createRuleName("no-invalid-auto-repeat");
|
|
788
|
+
var messages6 = ruleMessages6(ruleName6, {
|
|
584
789
|
rejected: (token, repeatKeyword) => `Use a fixed track size inside \`repeat(${repeatKeyword}, ...)\`; \`${token}\` can make the grid template declaration invalid.`
|
|
585
790
|
});
|
|
586
|
-
var
|
|
791
|
+
var docs6 = {
|
|
587
792
|
description: "Disallow definitely invalid CSS Grid auto-repeat track sizes.",
|
|
588
793
|
recommended: true,
|
|
589
794
|
url: createRuleDocsUrl("no-invalid-auto-repeat")
|
|
@@ -651,7 +856,7 @@ function getInvalidAutoRepeatTrack(trackList) {
|
|
|
651
856
|
for (const token of splitTopLevelWhitespace(trackList)) {
|
|
652
857
|
const normalizedToken = token.toLowerCase();
|
|
653
858
|
if (!isLineNameList2(token) && !containsRuntimeValue(token)) {
|
|
654
|
-
if ((0,
|
|
859
|
+
if ((0, import_ts_extras7.setHas)(invalidBareAutoRepeatTrackTokens, normalizedToken) || isFlexTrackBreadth(normalizedToken)) {
|
|
655
860
|
return token;
|
|
656
861
|
}
|
|
657
862
|
if (hasStringPrefix(normalizedToken, "minmax(") && isInvalidAutoRepeatMinmax(token)) {
|
|
@@ -662,18 +867,18 @@ function getInvalidAutoRepeatTrack(trackList) {
|
|
|
662
867
|
return void 0;
|
|
663
868
|
}
|
|
664
869
|
function getMinmaxArguments(token) {
|
|
665
|
-
const minmaxCall = (0,
|
|
666
|
-
if (!(0,
|
|
870
|
+
const minmaxCall = (0, import_ts_extras7.arrayFirst)(findValueFunctionCalls(token, "minmax"));
|
|
871
|
+
if (!(0, import_ts_extras7.isDefined)(minmaxCall)) {
|
|
667
872
|
return void 0;
|
|
668
873
|
}
|
|
669
874
|
const [minimum, maximum] = splitTopLevelCommas(minmaxCall.body).map((argument) => argument.trim());
|
|
670
|
-
if (!(0,
|
|
875
|
+
if (!(0, import_ts_extras7.isDefined)(minimum) || !(0, import_ts_extras7.isDefined)(maximum)) {
|
|
671
876
|
return void 0;
|
|
672
877
|
}
|
|
673
878
|
return [minimum, maximum];
|
|
674
879
|
}
|
|
675
880
|
function getRepeatKeyword(repeatBody) {
|
|
676
|
-
const repeatCount = (0,
|
|
881
|
+
const repeatCount = (0, import_ts_extras7.arrayFirst)(splitTopLevelCommas(repeatBody))?.trim().toLowerCase();
|
|
677
882
|
if (repeatCount === "auto-fill" || repeatCount === "auto-fit") {
|
|
678
883
|
return repeatCount;
|
|
679
884
|
}
|
|
@@ -692,18 +897,18 @@ function isFixedTrackBreadth(value) {
|
|
|
692
897
|
}
|
|
693
898
|
const match = lengthPercentagePattern.exec(normalizedValue);
|
|
694
899
|
const unit = match?.groups?.["unit"];
|
|
695
|
-
return unit === "%" || (0,
|
|
900
|
+
return unit === "%" || (0, import_ts_extras7.isDefined)(unit) && (0, import_ts_extras7.setHas)(cssLengthUnits, unit);
|
|
696
901
|
}
|
|
697
902
|
function isFlexTrackBreadth(value) {
|
|
698
903
|
return /^[+\-]?(?:\d+|\d*\.\d+)fr$/v.test(value);
|
|
699
904
|
}
|
|
700
905
|
function isIntrinsicTrackBreadth(value) {
|
|
701
906
|
const normalizedValue = value.toLowerCase();
|
|
702
|
-
return (0,
|
|
907
|
+
return (0, import_ts_extras7.setHas)(invalidBareAutoRepeatTrackTokens, normalizedValue);
|
|
703
908
|
}
|
|
704
909
|
function isInvalidAutoRepeatMinmax(token) {
|
|
705
910
|
const args = getMinmaxArguments(token);
|
|
706
|
-
if (!(0,
|
|
911
|
+
if (!(0, import_ts_extras7.isDefined)(args)) {
|
|
707
912
|
return false;
|
|
708
913
|
}
|
|
709
914
|
const [minimum, maximum] = args;
|
|
@@ -712,28 +917,28 @@ function isInvalidAutoRepeatMinmax(token) {
|
|
|
712
917
|
function isLineNameList2(token) {
|
|
713
918
|
return token.startsWith("[") && token.endsWith("]");
|
|
714
919
|
}
|
|
715
|
-
var
|
|
716
|
-
if (!
|
|
920
|
+
var ruleFunction6 = (primary) => (root, result) => {
|
|
921
|
+
if (!validateOptions6(result, ruleName6, {
|
|
717
922
|
actual: primary,
|
|
718
923
|
possible: [true]
|
|
719
924
|
})) {
|
|
720
925
|
return;
|
|
721
926
|
}
|
|
722
927
|
root.walkDecls((declaration) => {
|
|
723
|
-
if (!(0,
|
|
928
|
+
if (!(0, import_ts_extras7.setHas)(trackTemplateProperties, declaration.prop.toLowerCase())) {
|
|
724
929
|
return;
|
|
725
930
|
}
|
|
726
931
|
for (const repeatCall of findValueFunctionCalls(declaration.value, "repeat")) {
|
|
727
932
|
const repeatKeyword = getRepeatKeyword(repeatCall.body);
|
|
728
|
-
if ((0,
|
|
933
|
+
if ((0, import_ts_extras7.isDefined)(repeatKeyword)) {
|
|
729
934
|
const trackList = splitTopLevelCommas(repeatCall.body).slice(1).join(",");
|
|
730
935
|
const invalidTrack = getInvalidAutoRepeatTrack(trackList);
|
|
731
|
-
if ((0,
|
|
732
|
-
|
|
733
|
-
message:
|
|
936
|
+
if ((0, import_ts_extras7.isDefined)(invalidTrack)) {
|
|
937
|
+
report6({
|
|
938
|
+
message: messages6.rejected(invalidTrack, repeatKeyword),
|
|
734
939
|
node: declaration,
|
|
735
940
|
result,
|
|
736
|
-
ruleName:
|
|
941
|
+
ruleName: ruleName6,
|
|
737
942
|
word: invalidTrack
|
|
738
943
|
});
|
|
739
944
|
}
|
|
@@ -741,23 +946,23 @@ var ruleFunction4 = (primary) => (root, result) => {
|
|
|
741
946
|
}
|
|
742
947
|
});
|
|
743
948
|
};
|
|
744
|
-
var
|
|
745
|
-
docs:
|
|
746
|
-
messages:
|
|
747
|
-
rule:
|
|
748
|
-
ruleName:
|
|
949
|
+
var rule6 = createStylelintRule({
|
|
950
|
+
docs: docs6,
|
|
951
|
+
messages: messages6,
|
|
952
|
+
rule: ruleFunction6,
|
|
953
|
+
ruleName: ruleName6
|
|
749
954
|
});
|
|
750
|
-
var no_invalid_auto_repeat_default =
|
|
955
|
+
var no_invalid_auto_repeat_default = rule6;
|
|
751
956
|
|
|
752
957
|
// dist/rules/no-invalid-minmax.js
|
|
753
|
-
var
|
|
754
|
-
var
|
|
755
|
-
var { report:
|
|
756
|
-
var
|
|
757
|
-
var
|
|
958
|
+
var import_stylelint8 = __toESM(require("stylelint"), 1);
|
|
959
|
+
var import_ts_extras8 = require("ts-extras");
|
|
960
|
+
var { report: report7, ruleMessages: ruleMessages7, validateOptions: validateOptions7 } = import_stylelint8.default.utils;
|
|
961
|
+
var ruleName7 = createRuleName("no-invalid-minmax");
|
|
962
|
+
var messages7 = ruleMessages7(ruleName7, {
|
|
758
963
|
rejected: (minimum) => `Do not use flexible track breadth \`${minimum}\` as the minimum in \`minmax()\`; use an inflexible minimum such as \`0\`, a length, or a percentage.`
|
|
759
964
|
});
|
|
760
|
-
var
|
|
965
|
+
var docs7 = {
|
|
761
966
|
description: "Disallow flexible `fr` values as the minimum argument in CSS Grid `minmax()` track sizes.",
|
|
762
967
|
recommended: true,
|
|
763
968
|
url: createRuleDocsUrl("no-invalid-minmax")
|
|
@@ -771,185 +976,423 @@ var gridTrackProperties = /* @__PURE__ */ new Set([
|
|
|
771
976
|
function isFlexTrackBreadth2(value) {
|
|
772
977
|
return /^[+\-]?(?:\d+|\d*\.\d+)fr$/v.test(value.toLowerCase());
|
|
773
978
|
}
|
|
774
|
-
var
|
|
775
|
-
if (!
|
|
979
|
+
var ruleFunction7 = (primary) => (root, result) => {
|
|
980
|
+
if (!validateOptions7(result, ruleName7, {
|
|
776
981
|
actual: primary,
|
|
777
982
|
possible: [true]
|
|
778
983
|
})) {
|
|
779
984
|
return;
|
|
780
985
|
}
|
|
781
986
|
root.walkDecls((declaration) => {
|
|
782
|
-
if (!(0,
|
|
987
|
+
if (!(0, import_ts_extras8.setHas)(gridTrackProperties, declaration.prop.toLowerCase())) {
|
|
783
988
|
return;
|
|
784
989
|
}
|
|
785
990
|
for (const minmaxCall of findValueFunctionCalls(declaration.value, "minmax")) {
|
|
786
|
-
const minimum = (0,
|
|
787
|
-
if ((0,
|
|
788
|
-
|
|
789
|
-
message:
|
|
991
|
+
const minimum = (0, import_ts_extras8.arrayFirst)(splitTopLevelCommas(minmaxCall.body))?.trim();
|
|
992
|
+
if ((0, import_ts_extras8.isDefined)(minimum) && isFlexTrackBreadth2(minimum)) {
|
|
993
|
+
report7({
|
|
994
|
+
message: messages7.rejected(minimum),
|
|
790
995
|
node: declaration,
|
|
791
996
|
result,
|
|
792
|
-
ruleName:
|
|
997
|
+
ruleName: ruleName7,
|
|
793
998
|
word: minimum
|
|
794
999
|
});
|
|
795
1000
|
}
|
|
796
1001
|
}
|
|
797
1002
|
});
|
|
798
1003
|
};
|
|
799
|
-
var
|
|
800
|
-
docs:
|
|
801
|
-
messages:
|
|
802
|
-
rule:
|
|
803
|
-
ruleName:
|
|
1004
|
+
var rule7 = createStylelintRule({
|
|
1005
|
+
docs: docs7,
|
|
1006
|
+
messages: messages7,
|
|
1007
|
+
rule: ruleFunction7,
|
|
1008
|
+
ruleName: ruleName7
|
|
804
1009
|
});
|
|
805
|
-
var no_invalid_minmax_default =
|
|
1010
|
+
var no_invalid_minmax_default = rule7;
|
|
806
1011
|
|
|
807
|
-
// dist/rules/no-
|
|
808
|
-
var
|
|
809
|
-
var
|
|
810
|
-
var { report:
|
|
811
|
-
var
|
|
812
|
-
var
|
|
813
|
-
rejected: (
|
|
1012
|
+
// dist/rules/no-invalid-repeat-count.js
|
|
1013
|
+
var import_stylelint9 = __toESM(require("stylelint"), 1);
|
|
1014
|
+
var import_ts_extras9 = require("ts-extras");
|
|
1015
|
+
var { report: report8, ruleMessages: ruleMessages8, validateOptions: validateOptions8 } = import_stylelint9.default.utils;
|
|
1016
|
+
var ruleName8 = createRuleName("no-invalid-repeat-count");
|
|
1017
|
+
var messages8 = ruleMessages8(ruleName8, {
|
|
1018
|
+
rejected: (count) => `Use a positive integer repeat count; \`${count}\` is not a valid fixed \`repeat()\` count.`
|
|
814
1019
|
});
|
|
815
|
-
var
|
|
816
|
-
description: "
|
|
1020
|
+
var docs8 = {
|
|
1021
|
+
description: "Disallow invalid fixed repeat counts in CSS Grid track templates.",
|
|
817
1022
|
recommended: true,
|
|
818
|
-
url: createRuleDocsUrl("no-
|
|
1023
|
+
url: createRuleDocsUrl("no-invalid-repeat-count")
|
|
819
1024
|
};
|
|
820
|
-
var
|
|
821
|
-
|
|
1025
|
+
var trackTemplateProperties2 = /* @__PURE__ */ new Set([
|
|
1026
|
+
"grid-template-columns",
|
|
1027
|
+
"grid-template-rows"
|
|
1028
|
+
]);
|
|
1029
|
+
var nonFixedRepeatCounts = /* @__PURE__ */ new Set([
|
|
1030
|
+
"auto-fill",
|
|
1031
|
+
"auto-fit"
|
|
1032
|
+
]);
|
|
1033
|
+
var integerPattern = /^\+?\d+$/v;
|
|
1034
|
+
var numericPattern = /^[+\-]?(?:\d+|\d*\.\d+)$/v;
|
|
1035
|
+
function getInvalidRepeatCount(repeatBody) {
|
|
1036
|
+
const count = (0, import_ts_extras9.arrayFirst)(splitTopLevelCommas(repeatBody))?.trim();
|
|
1037
|
+
if (!(0, import_ts_extras9.isDefined)(count)) {
|
|
1038
|
+
return void 0;
|
|
1039
|
+
}
|
|
1040
|
+
const normalizedCount = count.toLowerCase();
|
|
1041
|
+
if ((0, import_ts_extras9.setHas)(nonFixedRepeatCounts, normalizedCount)) {
|
|
1042
|
+
return void 0;
|
|
1043
|
+
}
|
|
1044
|
+
return numericPattern.test(count) && !isPositiveIntegerToken(count) ? count : void 0;
|
|
1045
|
+
}
|
|
1046
|
+
function isPositiveIntegerToken(value) {
|
|
1047
|
+
return integerPattern.test(value) && Number.parseInt(value, 10) > 0;
|
|
1048
|
+
}
|
|
1049
|
+
var ruleFunction8 = (primary) => (root, result) => {
|
|
1050
|
+
if (!validateOptions8(result, ruleName8, {
|
|
822
1051
|
actual: primary,
|
|
823
1052
|
possible: [true]
|
|
824
1053
|
})) {
|
|
825
1054
|
return;
|
|
826
1055
|
}
|
|
827
|
-
|
|
828
|
-
if ((0,
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
1056
|
+
root.walkDecls((declaration) => {
|
|
1057
|
+
if (!(0, import_ts_extras9.setHas)(trackTemplateProperties2, declaration.prop.toLowerCase())) {
|
|
1058
|
+
return;
|
|
1059
|
+
}
|
|
1060
|
+
for (const repeatCall of findValueFunctionCalls(declaration.value, "repeat")) {
|
|
1061
|
+
const invalidCount = getInvalidRepeatCount(repeatCall.body);
|
|
1062
|
+
if ((0, import_ts_extras9.isDefined)(invalidCount)) {
|
|
1063
|
+
report8({
|
|
1064
|
+
message: messages8.rejected(invalidCount),
|
|
1065
|
+
node: declaration,
|
|
835
1066
|
result,
|
|
836
|
-
ruleName:
|
|
1067
|
+
ruleName: ruleName8,
|
|
1068
|
+
word: invalidCount
|
|
837
1069
|
});
|
|
838
1070
|
}
|
|
839
1071
|
}
|
|
840
|
-
}
|
|
1072
|
+
});
|
|
841
1073
|
};
|
|
842
|
-
var
|
|
843
|
-
docs:
|
|
844
|
-
messages:
|
|
845
|
-
rule:
|
|
846
|
-
ruleName:
|
|
1074
|
+
var rule8 = createStylelintRule({
|
|
1075
|
+
docs: docs8,
|
|
1076
|
+
messages: messages8,
|
|
1077
|
+
rule: ruleFunction8,
|
|
1078
|
+
ruleName: ruleName8
|
|
847
1079
|
});
|
|
848
|
-
var
|
|
1080
|
+
var no_invalid_repeat_count_default = rule8;
|
|
849
1081
|
|
|
850
|
-
// dist/rules/no-
|
|
851
|
-
var
|
|
852
|
-
var
|
|
853
|
-
var
|
|
854
|
-
var
|
|
855
|
-
|
|
856
|
-
rejected: (areaName, firstSelector) => `Grid area "${areaName}" is assigned by more than one selector; it may overlap the earlier "${firstSelector}" item at runtime.`
|
|
1082
|
+
// dist/rules/no-invalid-span.js
|
|
1083
|
+
var import_stylelint10 = __toESM(require("stylelint"), 1);
|
|
1084
|
+
var { report: report9, ruleMessages: ruleMessages9, validateOptions: validateOptions9 } = import_stylelint10.default.utils;
|
|
1085
|
+
var ruleName9 = createRuleName("no-invalid-span");
|
|
1086
|
+
var messages9 = ruleMessages9(ruleName9, {
|
|
1087
|
+
rejected: (span) => `Use a positive Grid span count; \`span ${String(span)}\` cannot place a grid item.`
|
|
857
1088
|
});
|
|
858
|
-
var
|
|
859
|
-
description: "Disallow
|
|
860
|
-
recommended:
|
|
861
|
-
url: createRuleDocsUrl("no-
|
|
1089
|
+
var docs9 = {
|
|
1090
|
+
description: "Disallow non-positive `span` counts in CSS Grid placement declarations.",
|
|
1091
|
+
recommended: true,
|
|
1092
|
+
url: createRuleDocsUrl("no-invalid-span")
|
|
862
1093
|
};
|
|
863
|
-
var
|
|
864
|
-
if (!
|
|
1094
|
+
var ruleFunction9 = (primary) => (root, result) => {
|
|
1095
|
+
if (!validateOptions9(result, ruleName9, {
|
|
865
1096
|
actual: primary,
|
|
866
1097
|
possible: [true]
|
|
867
1098
|
})) {
|
|
868
1099
|
return;
|
|
869
1100
|
}
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
1101
|
+
root.walkDecls((declaration) => {
|
|
1102
|
+
if (!isGridPlacementDeclaration(declaration)) {
|
|
1103
|
+
return;
|
|
1104
|
+
}
|
|
1105
|
+
for (const slot of getGridPlacementSlots(declaration.value)) {
|
|
1106
|
+
for (const span of getGridLineSpanCounts(slot)) {
|
|
1107
|
+
if (span <= 0) {
|
|
1108
|
+
report9({
|
|
1109
|
+
message: messages9.rejected(span),
|
|
1110
|
+
node: declaration,
|
|
1111
|
+
result,
|
|
1112
|
+
ruleName: ruleName9,
|
|
1113
|
+
word: String(span)
|
|
1114
|
+
});
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
});
|
|
1119
|
+
};
|
|
1120
|
+
var rule9 = createStylelintRule({
|
|
1121
|
+
docs: docs9,
|
|
1122
|
+
messages: messages9,
|
|
1123
|
+
rule: ruleFunction9,
|
|
1124
|
+
ruleName: ruleName9
|
|
1125
|
+
});
|
|
1126
|
+
var no_invalid_span_default = rule9;
|
|
1127
|
+
|
|
1128
|
+
// dist/rules/no-mismatched-template-rows.js
|
|
1129
|
+
var import_stylelint11 = __toESM(require("stylelint"), 1);
|
|
1130
|
+
var import_ts_extras10 = require("ts-extras");
|
|
1131
|
+
var { report: report10, ruleMessages: ruleMessages10, validateOptions: validateOptions10 } = import_stylelint11.default.utils;
|
|
1132
|
+
var ruleName10 = createRuleName("no-mismatched-template-rows");
|
|
1133
|
+
var messages10 = ruleMessages10(ruleName10, {
|
|
1134
|
+
rejected: (areaRows, trackRows) => `\`grid-template-areas\` defines ${String(areaRows)} rows, but sibling \`grid-template-rows\` defines ${String(trackRows)} tracks.`
|
|
1135
|
+
});
|
|
1136
|
+
var docs10 = {
|
|
1137
|
+
description: "Require `grid-template-rows` track count to match `grid-template-areas` row count.",
|
|
1138
|
+
recommended: true,
|
|
1139
|
+
url: createRuleDocsUrl("no-mismatched-template-rows")
|
|
1140
|
+
};
|
|
1141
|
+
var ruleFunction10 = (primary) => (root, result) => {
|
|
1142
|
+
if (!validateOptions10(result, ruleName10, {
|
|
1143
|
+
actual: primary,
|
|
1144
|
+
possible: [true]
|
|
1145
|
+
})) {
|
|
1146
|
+
return;
|
|
1147
|
+
}
|
|
1148
|
+
for (const template of collectGridTemplateAreas(root)) {
|
|
1149
|
+
if ((0, import_ts_extras10.isEmpty)(template.diagnostics)) {
|
|
1150
|
+
const rowsDeclaration = findSiblingDeclaration(template.declaration, "grid-template-rows");
|
|
1151
|
+
const trackRows = (0, import_ts_extras10.isDefined)(rowsDeclaration) ? countGridTracks(rowsDeclaration.value) : void 0;
|
|
1152
|
+
if ((0, import_ts_extras10.isDefined)(rowsDeclaration) && (0, import_ts_extras10.isDefined)(trackRows) && trackRows !== template.rows.length) {
|
|
1153
|
+
report10({
|
|
1154
|
+
message: messages10.rejected(template.rows.length, trackRows),
|
|
1155
|
+
node: rowsDeclaration,
|
|
1156
|
+
result,
|
|
1157
|
+
ruleName: ruleName10
|
|
1158
|
+
});
|
|
1159
|
+
}
|
|
883
1160
|
}
|
|
884
1161
|
}
|
|
885
1162
|
};
|
|
886
|
-
var
|
|
887
|
-
docs:
|
|
888
|
-
messages:
|
|
889
|
-
rule:
|
|
890
|
-
ruleName:
|
|
1163
|
+
var rule10 = createStylelintRule({
|
|
1164
|
+
docs: docs10,
|
|
1165
|
+
messages: messages10,
|
|
1166
|
+
rule: ruleFunction10,
|
|
1167
|
+
ruleName: ruleName10
|
|
1168
|
+
});
|
|
1169
|
+
var no_mismatched_template_rows_default = rule10;
|
|
1170
|
+
|
|
1171
|
+
// dist/rules/no-overlapping-areas.js
|
|
1172
|
+
var import_stylelint12 = __toESM(require("stylelint"), 1);
|
|
1173
|
+
var import_ts_extras11 = require("ts-extras");
|
|
1174
|
+
var { report: report11, ruleMessages: ruleMessages11, validateOptions: validateOptions11 } = import_stylelint12.default.utils;
|
|
1175
|
+
var ruleName11 = createRuleName("no-overlapping-areas");
|
|
1176
|
+
var messages11 = ruleMessages11(ruleName11, {
|
|
1177
|
+
rejected: (areaName, firstSelector) => `Grid area "${areaName}" is assigned by more than one selector; it may overlap the earlier "${firstSelector}" item at runtime.`
|
|
1178
|
+
});
|
|
1179
|
+
var docs11 = {
|
|
1180
|
+
description: "Disallow multiple selectors assigning the same single-name `grid-area` value in one stylesheet.",
|
|
1181
|
+
recommended: false,
|
|
1182
|
+
url: createRuleDocsUrl("no-overlapping-areas")
|
|
1183
|
+
};
|
|
1184
|
+
var ruleFunction11 = (primary) => (root, result) => {
|
|
1185
|
+
if (!validateOptions11(result, ruleName11, {
|
|
1186
|
+
actual: primary,
|
|
1187
|
+
possible: [true]
|
|
1188
|
+
})) {
|
|
1189
|
+
return;
|
|
1190
|
+
}
|
|
1191
|
+
const firstUsageByName = /* @__PURE__ */ new Map();
|
|
1192
|
+
for (const usage of collectGridAreaUsages(root)) {
|
|
1193
|
+
const firstUsage = firstUsageByName.get(usage.name);
|
|
1194
|
+
if ((0, import_ts_extras11.isDefined)(firstUsage)) {
|
|
1195
|
+
report11({
|
|
1196
|
+
message: messages11.rejected(usage.name, firstUsage.selector ?? firstUsage.name),
|
|
1197
|
+
node: usage.declaration,
|
|
1198
|
+
result,
|
|
1199
|
+
ruleName: ruleName11,
|
|
1200
|
+
word: usage.name
|
|
1201
|
+
});
|
|
1202
|
+
} else {
|
|
1203
|
+
firstUsageByName.set(usage.name, usage);
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
};
|
|
1207
|
+
var rule11 = createStylelintRule({
|
|
1208
|
+
docs: docs11,
|
|
1209
|
+
messages: messages11,
|
|
1210
|
+
rule: ruleFunction11,
|
|
1211
|
+
ruleName: ruleName11
|
|
1212
|
+
});
|
|
1213
|
+
var no_overlapping_areas_default = rule11;
|
|
1214
|
+
|
|
1215
|
+
// dist/rules/no-reversed-placement-lines.js
|
|
1216
|
+
var import_stylelint13 = __toESM(require("stylelint"), 1);
|
|
1217
|
+
var import_ts_extras12 = require("ts-extras");
|
|
1218
|
+
var { report: report12, ruleMessages: ruleMessages12, validateOptions: validateOptions12 } = import_stylelint13.default.utils;
|
|
1219
|
+
var ruleName12 = createRuleName("no-reversed-placement-lines");
|
|
1220
|
+
var messages12 = ruleMessages12(ruleName12, {
|
|
1221
|
+
rejected: (propertyName, start, end) => `Use an end line after the start line for \`${propertyName}\`; \`${String(end)}\` is not after \`${String(start)}\`.`
|
|
1222
|
+
});
|
|
1223
|
+
var docs12 = {
|
|
1224
|
+
description: "Disallow reversed or zero-width numeric CSS Grid placement line ranges.",
|
|
1225
|
+
recommended: true,
|
|
1226
|
+
url: createRuleDocsUrl("no-reversed-placement-lines")
|
|
1227
|
+
};
|
|
1228
|
+
var shorthandProperties = /* @__PURE__ */ new Set([
|
|
1229
|
+
"grid-column",
|
|
1230
|
+
"grid-row"
|
|
1231
|
+
]);
|
|
1232
|
+
var gridAreaPropertyName = "grid-area";
|
|
1233
|
+
var longhandPairs = [
|
|
1234
|
+
{
|
|
1235
|
+
end: "grid-column-end",
|
|
1236
|
+
name: "grid-column",
|
|
1237
|
+
start: "grid-column-start"
|
|
1238
|
+
},
|
|
1239
|
+
{
|
|
1240
|
+
end: "grid-row-end",
|
|
1241
|
+
name: "grid-row",
|
|
1242
|
+
start: "grid-row-start"
|
|
1243
|
+
}
|
|
1244
|
+
];
|
|
1245
|
+
function getComparableLinePair(startValue, endValue) {
|
|
1246
|
+
const start = parseStandaloneGridLineInteger(startValue);
|
|
1247
|
+
const end = parseStandaloneGridLineInteger(endValue);
|
|
1248
|
+
if (!(0, import_ts_extras12.isDefined)(start) || !(0, import_ts_extras12.isDefined)(end) || start === 0 || end === 0) {
|
|
1249
|
+
return void 0;
|
|
1250
|
+
}
|
|
1251
|
+
if (Math.sign(start) !== Math.sign(end)) {
|
|
1252
|
+
return void 0;
|
|
1253
|
+
}
|
|
1254
|
+
return [start, end];
|
|
1255
|
+
}
|
|
1256
|
+
function isReversedOrZeroWidth(pair) {
|
|
1257
|
+
const [start, end] = pair;
|
|
1258
|
+
return end <= start;
|
|
1259
|
+
}
|
|
1260
|
+
var ruleFunction12 = (primary) => (root, result) => {
|
|
1261
|
+
if (!validateOptions12(result, ruleName12, {
|
|
1262
|
+
actual: primary,
|
|
1263
|
+
possible: [true]
|
|
1264
|
+
})) {
|
|
1265
|
+
return;
|
|
1266
|
+
}
|
|
1267
|
+
root.walkDecls((declaration) => {
|
|
1268
|
+
const propertyName = declaration.prop.toLowerCase();
|
|
1269
|
+
if (!(0, import_ts_extras12.setHas)(shorthandProperties, propertyName) && propertyName !== gridAreaPropertyName) {
|
|
1270
|
+
return;
|
|
1271
|
+
}
|
|
1272
|
+
const slots = getGridPlacementSlots(declaration.value);
|
|
1273
|
+
const shorthandPairs = propertyName === gridAreaPropertyName ? [
|
|
1274
|
+
{
|
|
1275
|
+
endValue: (0, import_ts_extras12.arrayAt)(slots, 2),
|
|
1276
|
+
propertyName: "grid-row",
|
|
1277
|
+
startValue: (0, import_ts_extras12.arrayFirst)(slots)
|
|
1278
|
+
},
|
|
1279
|
+
{
|
|
1280
|
+
endValue: (0, import_ts_extras12.arrayAt)(slots, 3),
|
|
1281
|
+
propertyName: "grid-column",
|
|
1282
|
+
startValue: (0, import_ts_extras12.arrayAt)(slots, 1)
|
|
1283
|
+
}
|
|
1284
|
+
] : [
|
|
1285
|
+
{
|
|
1286
|
+
endValue: (0, import_ts_extras12.arrayAt)(slots, 1),
|
|
1287
|
+
propertyName,
|
|
1288
|
+
startValue: (0, import_ts_extras12.arrayFirst)(slots)
|
|
1289
|
+
}
|
|
1290
|
+
];
|
|
1291
|
+
for (const shorthandPair of shorthandPairs) {
|
|
1292
|
+
const { endValue, propertyName: pairName, startValue } = shorthandPair;
|
|
1293
|
+
if ((0, import_ts_extras12.isDefined)(startValue) && (0, import_ts_extras12.isDefined)(endValue)) {
|
|
1294
|
+
const pair = getComparableLinePair(startValue, endValue);
|
|
1295
|
+
if ((0, import_ts_extras12.isDefined)(pair) && isReversedOrZeroWidth(pair)) {
|
|
1296
|
+
const [start, end] = pair;
|
|
1297
|
+
report12({
|
|
1298
|
+
message: messages12.rejected(pairName, start, end),
|
|
1299
|
+
node: declaration,
|
|
1300
|
+
result,
|
|
1301
|
+
ruleName: ruleName12,
|
|
1302
|
+
word: endValue
|
|
1303
|
+
});
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
});
|
|
1308
|
+
root.walkRules((ruleNode) => {
|
|
1309
|
+
const declarations = getDirectDeclarations(ruleNode);
|
|
1310
|
+
for (const pair of longhandPairs) {
|
|
1311
|
+
const startDeclaration = declarations.find((declaration) => declaration.prop.toLowerCase() === pair.start);
|
|
1312
|
+
const endDeclaration = declarations.find((declaration) => declaration.prop.toLowerCase() === pair.end);
|
|
1313
|
+
if ((0, import_ts_extras12.isDefined)(startDeclaration) && (0, import_ts_extras12.isDefined)(endDeclaration)) {
|
|
1314
|
+
const linePair = getComparableLinePair(startDeclaration.value, endDeclaration.value);
|
|
1315
|
+
if ((0, import_ts_extras12.isDefined)(linePair) && isReversedOrZeroWidth(linePair)) {
|
|
1316
|
+
const [start, end] = linePair;
|
|
1317
|
+
report12({
|
|
1318
|
+
message: messages12.rejected(pair.name, start, end),
|
|
1319
|
+
node: endDeclaration,
|
|
1320
|
+
result,
|
|
1321
|
+
ruleName: ruleName12,
|
|
1322
|
+
word: endDeclaration.value
|
|
1323
|
+
});
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
});
|
|
1328
|
+
};
|
|
1329
|
+
var rule12 = createStylelintRule({
|
|
1330
|
+
docs: docs12,
|
|
1331
|
+
messages: messages12,
|
|
1332
|
+
rule: ruleFunction12,
|
|
1333
|
+
ruleName: ruleName12
|
|
891
1334
|
});
|
|
892
|
-
var
|
|
1335
|
+
var no_reversed_placement_lines_default = rule12;
|
|
893
1336
|
|
|
894
1337
|
// dist/rules/no-unknown-areas.js
|
|
895
|
-
var
|
|
896
|
-
var
|
|
897
|
-
var { report:
|
|
898
|
-
var
|
|
899
|
-
var
|
|
1338
|
+
var import_stylelint14 = __toESM(require("stylelint"), 1);
|
|
1339
|
+
var import_ts_extras13 = require("ts-extras");
|
|
1340
|
+
var { report: report13, ruleMessages: ruleMessages13, validateOptions: validateOptions13 } = import_stylelint14.default.utils;
|
|
1341
|
+
var ruleName13 = createRuleName("no-unknown-areas");
|
|
1342
|
+
var messages13 = ruleMessages13(ruleName13, {
|
|
900
1343
|
rejected: (areaName) => `Grid area "${areaName}" is referenced by \`grid-area\` but is not declared in any \`grid-template-areas\` template in this stylesheet.`
|
|
901
1344
|
});
|
|
902
|
-
var
|
|
1345
|
+
var docs13 = {
|
|
903
1346
|
description: "Disallow single-name `grid-area` references that do not match any named area declared in the same stylesheet.",
|
|
904
1347
|
recommended: true,
|
|
905
1348
|
url: createRuleDocsUrl("no-unknown-areas")
|
|
906
1349
|
};
|
|
907
|
-
var
|
|
908
|
-
if (!
|
|
1350
|
+
var ruleFunction13 = (primary) => (root, result) => {
|
|
1351
|
+
if (!validateOptions13(result, ruleName13, {
|
|
909
1352
|
actual: primary,
|
|
910
1353
|
possible: [true]
|
|
911
1354
|
})) {
|
|
912
1355
|
return;
|
|
913
1356
|
}
|
|
914
|
-
const declaredAreaNames = new Set(collectGridTemplateAreas(root).flatMap((template) => (0,
|
|
1357
|
+
const declaredAreaNames = new Set(collectGridTemplateAreas(root).flatMap((template) => (0, import_ts_extras13.isEmpty)(template.diagnostics) ? template.areaNames : []));
|
|
915
1358
|
if (declaredAreaNames.size === 0) {
|
|
916
1359
|
return;
|
|
917
1360
|
}
|
|
918
1361
|
for (const usage of collectGridAreaUsages(root)) {
|
|
919
|
-
if (!(0,
|
|
920
|
-
|
|
921
|
-
message:
|
|
1362
|
+
if (!(0, import_ts_extras13.setHas)(declaredAreaNames, usage.name)) {
|
|
1363
|
+
report13({
|
|
1364
|
+
message: messages13.rejected(usage.name),
|
|
922
1365
|
node: usage.declaration,
|
|
923
1366
|
result,
|
|
924
|
-
ruleName:
|
|
1367
|
+
ruleName: ruleName13,
|
|
925
1368
|
word: usage.name
|
|
926
1369
|
});
|
|
927
1370
|
}
|
|
928
1371
|
}
|
|
929
1372
|
};
|
|
930
|
-
var
|
|
931
|
-
docs:
|
|
932
|
-
messages:
|
|
933
|
-
rule:
|
|
934
|
-
ruleName:
|
|
1373
|
+
var rule13 = createStylelintRule({
|
|
1374
|
+
docs: docs13,
|
|
1375
|
+
messages: messages13,
|
|
1376
|
+
rule: ruleFunction13,
|
|
1377
|
+
ruleName: ruleName13
|
|
935
1378
|
});
|
|
936
|
-
var no_unknown_areas_default =
|
|
1379
|
+
var no_unknown_areas_default = rule13;
|
|
937
1380
|
|
|
938
1381
|
// dist/rules/no-unused-areas.js
|
|
939
|
-
var
|
|
940
|
-
var
|
|
941
|
-
var { report:
|
|
942
|
-
var
|
|
943
|
-
var
|
|
1382
|
+
var import_stylelint15 = __toESM(require("stylelint"), 1);
|
|
1383
|
+
var import_ts_extras14 = require("ts-extras");
|
|
1384
|
+
var { report: report14, ruleMessages: ruleMessages14, validateOptions: validateOptions14 } = import_stylelint15.default.utils;
|
|
1385
|
+
var ruleName14 = createRuleName("no-unused-areas");
|
|
1386
|
+
var messages14 = ruleMessages14(ruleName14, {
|
|
944
1387
|
rejected: (areaName) => `Grid template area "${areaName}" is declared but no single-name \`grid-area: ${areaName}\` declaration exists in this stylesheet.`
|
|
945
1388
|
});
|
|
946
|
-
var
|
|
1389
|
+
var docs14 = {
|
|
947
1390
|
description: "Disallow named template areas that are never referenced by a single-name `grid-area` declaration in the same stylesheet.",
|
|
948
1391
|
recommended: false,
|
|
949
1392
|
url: createRuleDocsUrl("no-unused-areas")
|
|
950
1393
|
};
|
|
951
|
-
var
|
|
952
|
-
if (!
|
|
1394
|
+
var ruleFunction14 = (primary) => (root, result) => {
|
|
1395
|
+
if (!validateOptions14(result, ruleName14, {
|
|
953
1396
|
actual: primary,
|
|
954
1397
|
possible: [true]
|
|
955
1398
|
})) {
|
|
@@ -957,14 +1400,14 @@ var ruleFunction9 = (primary) => (root, result) => {
|
|
|
957
1400
|
}
|
|
958
1401
|
const usedAreaNames = new Set(collectGridAreaUsages(root).map((usage) => usage.name));
|
|
959
1402
|
for (const template of collectGridTemplateAreas(root)) {
|
|
960
|
-
if ((0,
|
|
1403
|
+
if ((0, import_ts_extras14.isEmpty)(template.diagnostics)) {
|
|
961
1404
|
for (const areaName of template.areaNames) {
|
|
962
|
-
if (!(0,
|
|
963
|
-
|
|
964
|
-
message:
|
|
1405
|
+
if (!(0, import_ts_extras14.setHas)(usedAreaNames, areaName)) {
|
|
1406
|
+
report14({
|
|
1407
|
+
message: messages14.rejected(areaName),
|
|
965
1408
|
node: template.declaration,
|
|
966
1409
|
result,
|
|
967
|
-
ruleName:
|
|
1410
|
+
ruleName: ruleName14,
|
|
968
1411
|
word: areaName
|
|
969
1412
|
});
|
|
970
1413
|
}
|
|
@@ -972,23 +1415,68 @@ var ruleFunction9 = (primary) => (root, result) => {
|
|
|
972
1415
|
}
|
|
973
1416
|
}
|
|
974
1417
|
};
|
|
975
|
-
var
|
|
976
|
-
docs:
|
|
977
|
-
messages:
|
|
978
|
-
rule:
|
|
979
|
-
ruleName:
|
|
1418
|
+
var rule14 = createStylelintRule({
|
|
1419
|
+
docs: docs14,
|
|
1420
|
+
messages: messages14,
|
|
1421
|
+
rule: ruleFunction14,
|
|
1422
|
+
ruleName: ruleName14
|
|
1423
|
+
});
|
|
1424
|
+
var no_unused_areas_default = rule14;
|
|
1425
|
+
|
|
1426
|
+
// dist/rules/no-zero-grid-lines.js
|
|
1427
|
+
var import_stylelint16 = __toESM(require("stylelint"), 1);
|
|
1428
|
+
var import_ts_extras15 = require("ts-extras");
|
|
1429
|
+
var { report: report15, ruleMessages: ruleMessages15, validateOptions: validateOptions15 } = import_stylelint16.default.utils;
|
|
1430
|
+
var ruleName15 = createRuleName("no-zero-grid-lines");
|
|
1431
|
+
var messages15 = ruleMessages15(ruleName15, {
|
|
1432
|
+
rejected: () => "Do not use Grid line `0`; CSS Grid line numbering starts at `1` and `-1`."
|
|
980
1433
|
});
|
|
981
|
-
var
|
|
1434
|
+
var docs15 = {
|
|
1435
|
+
description: "Disallow line `0` in CSS Grid placement declarations.",
|
|
1436
|
+
recommended: true,
|
|
1437
|
+
url: createRuleDocsUrl("no-zero-grid-lines")
|
|
1438
|
+
};
|
|
1439
|
+
var ruleFunction15 = (primary) => (root, result) => {
|
|
1440
|
+
if (!validateOptions15(result, ruleName15, {
|
|
1441
|
+
actual: primary,
|
|
1442
|
+
possible: [true]
|
|
1443
|
+
})) {
|
|
1444
|
+
return;
|
|
1445
|
+
}
|
|
1446
|
+
root.walkDecls((declaration) => {
|
|
1447
|
+
if (!isGridPlacementDeclaration(declaration)) {
|
|
1448
|
+
return;
|
|
1449
|
+
}
|
|
1450
|
+
for (const slot of getGridPlacementSlots(declaration.value)) {
|
|
1451
|
+
if ((0, import_ts_extras15.arrayIncludes)(getGridLineIntegerTokens(slot), 0)) {
|
|
1452
|
+
report15({
|
|
1453
|
+
message: messages15.rejected(),
|
|
1454
|
+
node: declaration,
|
|
1455
|
+
result,
|
|
1456
|
+
ruleName: ruleName15,
|
|
1457
|
+
word: "0"
|
|
1458
|
+
});
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
});
|
|
1462
|
+
};
|
|
1463
|
+
var rule15 = createStylelintRule({
|
|
1464
|
+
docs: docs15,
|
|
1465
|
+
messages: messages15,
|
|
1466
|
+
rule: ruleFunction15,
|
|
1467
|
+
ruleName: ruleName15
|
|
1468
|
+
});
|
|
1469
|
+
var no_zero_grid_lines_default = rule15;
|
|
982
1470
|
|
|
983
1471
|
// dist/rules/prefer-gap-properties.js
|
|
984
|
-
var
|
|
985
|
-
var
|
|
986
|
-
var { report:
|
|
987
|
-
var
|
|
988
|
-
var
|
|
1472
|
+
var import_stylelint17 = __toESM(require("stylelint"), 1);
|
|
1473
|
+
var import_ts_extras16 = require("ts-extras");
|
|
1474
|
+
var { report: report16, ruleMessages: ruleMessages16, validateOptions: validateOptions16 } = import_stylelint17.default.utils;
|
|
1475
|
+
var ruleName16 = createRuleName("prefer-gap-properties");
|
|
1476
|
+
var messages16 = ruleMessages16(ruleName16, {
|
|
989
1477
|
rejected: (propertyName, replacement) => `Prefer \`${replacement}\` over legacy \`${propertyName}\`.`
|
|
990
1478
|
});
|
|
991
|
-
var
|
|
1479
|
+
var docs16 = {
|
|
992
1480
|
description: "Prefer modern `gap`, `row-gap`, and `column-gap` properties over legacy grid gap aliases.",
|
|
993
1481
|
recommended: true,
|
|
994
1482
|
url: createRuleDocsUrl("prefer-gap-properties")
|
|
@@ -1001,8 +1489,8 @@ var replacements = {
|
|
|
1001
1489
|
function getReplacement(declaration) {
|
|
1002
1490
|
return replacements[declaration.prop.toLowerCase()];
|
|
1003
1491
|
}
|
|
1004
|
-
var
|
|
1005
|
-
if (!
|
|
1492
|
+
var ruleFunction16 = (primary) => (root, result) => {
|
|
1493
|
+
if (!validateOptions16(result, ruleName16, {
|
|
1006
1494
|
actual: primary,
|
|
1007
1495
|
possible: [true]
|
|
1008
1496
|
})) {
|
|
@@ -1010,41 +1498,93 @@ var ruleFunction10 = (primary) => (root, result) => {
|
|
|
1010
1498
|
}
|
|
1011
1499
|
root.walkDecls((declaration) => {
|
|
1012
1500
|
const replacement = getReplacement(declaration);
|
|
1013
|
-
if (!(0,
|
|
1501
|
+
if (!(0, import_ts_extras16.isDefined)(replacement)) {
|
|
1014
1502
|
return;
|
|
1015
1503
|
}
|
|
1016
|
-
|
|
1504
|
+
report16({
|
|
1017
1505
|
fix: () => {
|
|
1018
1506
|
declaration.prop = replacement;
|
|
1019
1507
|
},
|
|
1020
|
-
message:
|
|
1508
|
+
message: messages16.rejected(declaration.prop, replacement),
|
|
1021
1509
|
node: declaration,
|
|
1022
1510
|
result,
|
|
1023
|
-
ruleName:
|
|
1511
|
+
ruleName: ruleName16,
|
|
1024
1512
|
word: declaration.prop
|
|
1025
1513
|
});
|
|
1026
1514
|
});
|
|
1027
1515
|
};
|
|
1028
|
-
var
|
|
1029
|
-
docs:
|
|
1030
|
-
messages:
|
|
1516
|
+
var rule16 = createStylelintRule({
|
|
1517
|
+
docs: docs16,
|
|
1518
|
+
messages: messages16,
|
|
1031
1519
|
meta: {
|
|
1032
1520
|
fixable: true
|
|
1033
1521
|
},
|
|
1034
|
-
rule:
|
|
1035
|
-
ruleName:
|
|
1522
|
+
rule: ruleFunction16,
|
|
1523
|
+
ruleName: ruleName16
|
|
1036
1524
|
});
|
|
1037
|
-
var prefer_gap_properties_default =
|
|
1525
|
+
var prefer_gap_properties_default = rule16;
|
|
1526
|
+
|
|
1527
|
+
// dist/rules/prefer-minmax-zero-fr.js
|
|
1528
|
+
var import_stylelint18 = __toESM(require("stylelint"), 1);
|
|
1529
|
+
var import_ts_extras17 = require("ts-extras");
|
|
1530
|
+
var { report: report17, ruleMessages: ruleMessages17, validateOptions: validateOptions17 } = import_stylelint18.default.utils;
|
|
1531
|
+
var ruleName17 = createRuleName("prefer-minmax-zero-fr");
|
|
1532
|
+
var messages17 = ruleMessages17(ruleName17, {
|
|
1533
|
+
rejected: (track) => `Wrap bare flexible column track \`${track}\` in \`minmax(0, ${track})\` to avoid content-driven overflow.`
|
|
1534
|
+
});
|
|
1535
|
+
var docs17 = {
|
|
1536
|
+
description: "Prefer `minmax(0, <flex>)` for bare flexible CSS Grid column tracks.",
|
|
1537
|
+
recommended: false,
|
|
1538
|
+
url: createRuleDocsUrl("prefer-minmax-zero-fr")
|
|
1539
|
+
};
|
|
1540
|
+
var ignoredTrackKeywords = /* @__PURE__ */ new Set([
|
|
1541
|
+
"masonry",
|
|
1542
|
+
"none",
|
|
1543
|
+
"subgrid"
|
|
1544
|
+
]);
|
|
1545
|
+
var flexTrackPattern = /^\+?(?:\d+|\d*\.\d+)fr$/v;
|
|
1546
|
+
function isBareFlexibleTrack(token) {
|
|
1547
|
+
const normalizedToken = token.toLowerCase();
|
|
1548
|
+
return !(0, import_ts_extras17.setHas)(ignoredTrackKeywords, normalizedToken) && flexTrackPattern.test(normalizedToken);
|
|
1549
|
+
}
|
|
1550
|
+
var ruleFunction17 = (primary) => (root, result) => {
|
|
1551
|
+
if (!validateOptions17(result, ruleName17, {
|
|
1552
|
+
actual: primary,
|
|
1553
|
+
possible: [true]
|
|
1554
|
+
})) {
|
|
1555
|
+
return;
|
|
1556
|
+
}
|
|
1557
|
+
root.walkDecls("grid-template-columns", (declaration) => {
|
|
1558
|
+
for (const token of splitTopLevelWhitespace(declaration.value)) {
|
|
1559
|
+
if (isBareFlexibleTrack(token)) {
|
|
1560
|
+
report17({
|
|
1561
|
+
message: messages17.rejected(token),
|
|
1562
|
+
node: declaration,
|
|
1563
|
+
result,
|
|
1564
|
+
ruleName: ruleName17,
|
|
1565
|
+
word: token
|
|
1566
|
+
});
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
});
|
|
1570
|
+
};
|
|
1571
|
+
var rule17 = createStylelintRule({
|
|
1572
|
+
docs: docs17,
|
|
1573
|
+
messages: messages17,
|
|
1574
|
+
rule: ruleFunction17,
|
|
1575
|
+
ruleName: ruleName17
|
|
1576
|
+
});
|
|
1577
|
+
var prefer_minmax_zero_fr_default = rule17;
|
|
1038
1578
|
|
|
1039
1579
|
// dist/rules/require-explicit-rows-with-column-flow.js
|
|
1040
|
-
var
|
|
1041
|
-
var
|
|
1042
|
-
var { report:
|
|
1043
|
-
var
|
|
1044
|
-
var
|
|
1580
|
+
var import_stylelint19 = __toESM(require("stylelint"), 1);
|
|
1581
|
+
var import_ts_extras18 = require("ts-extras");
|
|
1582
|
+
var { report: report18, ruleMessages: ruleMessages18, validateOptions: validateOptions18 } = import_stylelint19.default.utils;
|
|
1583
|
+
var ruleName18 = createRuleName("require-explicit-rows-with-column-flow");
|
|
1584
|
+
var messages18 = ruleMessages18(ruleName18, {
|
|
1045
1585
|
rejected: () => "Pair `grid-auto-flow: column` with explicit row sizing in the same block, such as `grid-template-rows` or `grid-auto-rows`."
|
|
1046
1586
|
});
|
|
1047
|
-
var
|
|
1587
|
+
var docs18 = {
|
|
1048
1588
|
description: "Require explicit row sizing when a rule uses `grid-auto-flow: column`.",
|
|
1049
1589
|
recommended: false,
|
|
1050
1590
|
url: createRuleDocsUrl("require-explicit-rows-with-column-flow")
|
|
@@ -1052,8 +1592,8 @@ var docs11 = {
|
|
|
1052
1592
|
function hasColumnFlow(value) {
|
|
1053
1593
|
return splitTopLevelWhitespace(value).some((token) => token.toLowerCase() === "column");
|
|
1054
1594
|
}
|
|
1055
|
-
var
|
|
1056
|
-
if (!
|
|
1595
|
+
var ruleFunction18 = (primary) => (root, result) => {
|
|
1596
|
+
if (!validateOptions18(result, ruleName18, {
|
|
1057
1597
|
actual: primary,
|
|
1058
1598
|
possible: [true]
|
|
1059
1599
|
})) {
|
|
@@ -1063,56 +1603,116 @@ var ruleFunction11 = (primary) => (root, result) => {
|
|
|
1063
1603
|
if (!hasColumnFlow(declaration.value)) {
|
|
1064
1604
|
return;
|
|
1065
1605
|
}
|
|
1066
|
-
const hasExplicitRows = (0,
|
|
1606
|
+
const hasExplicitRows = (0, import_ts_extras18.isDefined)(findSiblingDeclaration(declaration, "grid-template-rows")) || (0, import_ts_extras18.isDefined)(findSiblingDeclaration(declaration, "grid-auto-rows"));
|
|
1067
1607
|
if (hasExplicitRows) {
|
|
1068
1608
|
return;
|
|
1069
1609
|
}
|
|
1070
|
-
|
|
1071
|
-
message:
|
|
1610
|
+
report18({
|
|
1611
|
+
message: messages18.rejected(),
|
|
1072
1612
|
node: declaration,
|
|
1073
1613
|
result,
|
|
1074
|
-
ruleName:
|
|
1614
|
+
ruleName: ruleName18,
|
|
1075
1615
|
word: "column"
|
|
1076
1616
|
});
|
|
1077
1617
|
});
|
|
1078
1618
|
};
|
|
1079
|
-
var
|
|
1080
|
-
docs:
|
|
1081
|
-
messages:
|
|
1082
|
-
rule:
|
|
1083
|
-
ruleName:
|
|
1619
|
+
var rule18 = createStylelintRule({
|
|
1620
|
+
docs: docs18,
|
|
1621
|
+
messages: messages18,
|
|
1622
|
+
rule: ruleFunction18,
|
|
1623
|
+
ruleName: ruleName18
|
|
1084
1624
|
});
|
|
1085
|
-
var require_explicit_rows_with_column_flow_default =
|
|
1625
|
+
var require_explicit_rows_with_column_flow_default = rule18;
|
|
1626
|
+
|
|
1627
|
+
// dist/rules/require-explicit-tracks-with-areas.js
|
|
1628
|
+
var import_stylelint20 = __toESM(require("stylelint"), 1);
|
|
1629
|
+
var import_ts_extras19 = require("ts-extras");
|
|
1630
|
+
var { report: report19, ruleMessages: ruleMessages19, validateOptions: validateOptions19 } = import_stylelint20.default.utils;
|
|
1631
|
+
var ruleName19 = createRuleName("require-explicit-tracks-with-areas");
|
|
1632
|
+
var messages19 = ruleMessages19(ruleName19, {
|
|
1633
|
+
rejected: (propertyName) => `Pair \`grid-template-areas\` with \`${propertyName}\` in the same block so named areas have explicit track sizing.`
|
|
1634
|
+
});
|
|
1635
|
+
var docs19 = {
|
|
1636
|
+
description: "Require explicit track sizing alongside CSS Grid named area templates.",
|
|
1637
|
+
recommended: false,
|
|
1638
|
+
url: createRuleDocsUrl("require-explicit-tracks-with-areas")
|
|
1639
|
+
};
|
|
1640
|
+
var ruleFunction19 = (primary, secondary) => (root, result) => {
|
|
1641
|
+
if (!validateOptions19(result, ruleName19, {
|
|
1642
|
+
actual: primary,
|
|
1643
|
+
possible: [true]
|
|
1644
|
+
}, {
|
|
1645
|
+
actual: secondary,
|
|
1646
|
+
optional: true,
|
|
1647
|
+
possible: {
|
|
1648
|
+
columns: [true, false],
|
|
1649
|
+
rows: [true, false]
|
|
1650
|
+
}
|
|
1651
|
+
})) {
|
|
1652
|
+
return;
|
|
1653
|
+
}
|
|
1654
|
+
const requireColumns = secondary?.columns ?? true;
|
|
1655
|
+
const requireRows = secondary?.rows ?? false;
|
|
1656
|
+
for (const template of collectGridTemplateAreas(root)) {
|
|
1657
|
+
if ((0, import_ts_extras19.isEmpty)(template.diagnostics)) {
|
|
1658
|
+
if (requireColumns && !findSiblingDeclaration(template.declaration, "grid-template-columns")) {
|
|
1659
|
+
report19({
|
|
1660
|
+
message: messages19.rejected("grid-template-columns"),
|
|
1661
|
+
node: template.declaration,
|
|
1662
|
+
result,
|
|
1663
|
+
ruleName: ruleName19,
|
|
1664
|
+
word: template.declaration.prop
|
|
1665
|
+
});
|
|
1666
|
+
}
|
|
1667
|
+
if (requireRows && !findSiblingDeclaration(template.declaration, "grid-template-rows")) {
|
|
1668
|
+
report19({
|
|
1669
|
+
message: messages19.rejected("grid-template-rows"),
|
|
1670
|
+
node: template.declaration,
|
|
1671
|
+
result,
|
|
1672
|
+
ruleName: ruleName19,
|
|
1673
|
+
word: template.declaration.prop
|
|
1674
|
+
});
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
}
|
|
1678
|
+
};
|
|
1679
|
+
var rule19 = createStylelintRule({
|
|
1680
|
+
docs: docs19,
|
|
1681
|
+
messages: messages19,
|
|
1682
|
+
rule: ruleFunction19,
|
|
1683
|
+
ruleName: ruleName19
|
|
1684
|
+
});
|
|
1685
|
+
var require_explicit_tracks_with_areas_default = rule19;
|
|
1086
1686
|
|
|
1087
1687
|
// dist/rules/validate-area-shapes.js
|
|
1088
|
-
var
|
|
1089
|
-
var
|
|
1090
|
-
var { report:
|
|
1091
|
-
var
|
|
1092
|
-
var
|
|
1688
|
+
var import_stylelint21 = __toESM(require("stylelint"), 1);
|
|
1689
|
+
var import_ts_extras20 = require("ts-extras");
|
|
1690
|
+
var { report: report20, ruleMessages: ruleMessages20, validateOptions: validateOptions20 } = import_stylelint21.default.utils;
|
|
1691
|
+
var ruleName20 = createRuleName("validate-area-shapes");
|
|
1692
|
+
var messages20 = ruleMessages20(ruleName20, {
|
|
1093
1693
|
rejected: (areaName) => `Grid area "${areaName}" must form one contiguous rectangle in \`grid-template-areas\`.`
|
|
1094
1694
|
});
|
|
1095
|
-
var
|
|
1695
|
+
var docs20 = {
|
|
1096
1696
|
description: "Require every named grid template area to form one contiguous rectangle.",
|
|
1097
1697
|
recommended: true,
|
|
1098
1698
|
url: createRuleDocsUrl("validate-area-shapes")
|
|
1099
1699
|
};
|
|
1100
|
-
var
|
|
1101
|
-
if (!
|
|
1700
|
+
var ruleFunction20 = (primary) => (root, result) => {
|
|
1701
|
+
if (!validateOptions20(result, ruleName20, {
|
|
1102
1702
|
actual: primary,
|
|
1103
1703
|
possible: [true]
|
|
1104
1704
|
})) {
|
|
1105
1705
|
return;
|
|
1106
1706
|
}
|
|
1107
1707
|
for (const template of collectGridTemplateAreas(root)) {
|
|
1108
|
-
if ((0,
|
|
1708
|
+
if ((0, import_ts_extras20.isEmpty)(template.diagnostics)) {
|
|
1109
1709
|
for (const shape of getAreaShapes(template)) {
|
|
1110
1710
|
if (!isRectangularArea(template, shape)) {
|
|
1111
|
-
|
|
1112
|
-
message:
|
|
1711
|
+
report20({
|
|
1712
|
+
message: messages20.rejected(shape.name),
|
|
1113
1713
|
node: template.declaration,
|
|
1114
1714
|
result,
|
|
1115
|
-
ruleName:
|
|
1715
|
+
ruleName: ruleName20,
|
|
1116
1716
|
word: shape.name
|
|
1117
1717
|
});
|
|
1118
1718
|
}
|
|
@@ -1120,83 +1720,91 @@ var ruleFunction12 = (primary) => (root, result) => {
|
|
|
1120
1720
|
}
|
|
1121
1721
|
}
|
|
1122
1722
|
};
|
|
1123
|
-
var
|
|
1124
|
-
docs:
|
|
1125
|
-
messages:
|
|
1126
|
-
rule:
|
|
1127
|
-
ruleName:
|
|
1723
|
+
var rule20 = createStylelintRule({
|
|
1724
|
+
docs: docs20,
|
|
1725
|
+
messages: messages20,
|
|
1726
|
+
rule: ruleFunction20,
|
|
1727
|
+
ruleName: ruleName20
|
|
1128
1728
|
});
|
|
1129
|
-
var validate_area_shapes_default =
|
|
1729
|
+
var validate_area_shapes_default = rule20;
|
|
1130
1730
|
|
|
1131
1731
|
// dist/rules/validate-track-counts.js
|
|
1132
|
-
var
|
|
1133
|
-
var
|
|
1134
|
-
var { report:
|
|
1135
|
-
var
|
|
1136
|
-
var
|
|
1732
|
+
var import_stylelint22 = __toESM(require("stylelint"), 1);
|
|
1733
|
+
var import_ts_extras21 = require("ts-extras");
|
|
1734
|
+
var { report: report21, ruleMessages: ruleMessages21, validateOptions: validateOptions21 } = import_stylelint22.default.utils;
|
|
1735
|
+
var ruleName21 = createRuleName("validate-track-counts");
|
|
1736
|
+
var messages21 = ruleMessages21(ruleName21, {
|
|
1137
1737
|
columns: (areaColumns, trackColumns) => `\`grid-template-areas\` defines ${String(areaColumns)} columns, but sibling \`grid-template-columns\` defines ${String(trackColumns)} tracks.`,
|
|
1138
1738
|
rows: (areaRows, trackRows) => `\`grid-template-areas\` defines ${String(areaRows)} rows, but sibling \`grid-template-rows\` defines ${String(trackRows)} tracks.`
|
|
1139
1739
|
});
|
|
1140
|
-
var
|
|
1740
|
+
var docs21 = {
|
|
1141
1741
|
description: "Require template row and column track counts to match `grid-template-areas` dimensions.",
|
|
1142
1742
|
recommended: true,
|
|
1143
1743
|
url: createRuleDocsUrl("validate-track-counts")
|
|
1144
1744
|
};
|
|
1145
|
-
var
|
|
1146
|
-
if (!
|
|
1745
|
+
var ruleFunction21 = (primary) => (root, result) => {
|
|
1746
|
+
if (!validateOptions21(result, ruleName21, {
|
|
1147
1747
|
actual: primary,
|
|
1148
1748
|
possible: [true]
|
|
1149
1749
|
})) {
|
|
1150
1750
|
return;
|
|
1151
1751
|
}
|
|
1152
1752
|
for (const template of collectGridTemplateAreas(root)) {
|
|
1153
|
-
const expectedColumns = (0,
|
|
1154
|
-
if ((0,
|
|
1753
|
+
const expectedColumns = (0, import_ts_extras21.arrayFirst)(template.rows)?.length;
|
|
1754
|
+
if ((0, import_ts_extras21.isEmpty)(template.diagnostics) && (0, import_ts_extras21.isDefined)(expectedColumns)) {
|
|
1155
1755
|
const expectedRows = template.rows.length;
|
|
1156
1756
|
const rowsDeclaration = findSiblingDeclaration(template.declaration, "grid-template-rows");
|
|
1157
1757
|
const columnsDeclaration = findSiblingDeclaration(template.declaration, "grid-template-columns");
|
|
1158
|
-
const actualRows = (0,
|
|
1159
|
-
const actualColumns = (0,
|
|
1160
|
-
if ((0,
|
|
1161
|
-
|
|
1162
|
-
message:
|
|
1758
|
+
const actualRows = (0, import_ts_extras21.isDefined)(rowsDeclaration) ? countGridTracks(rowsDeclaration.value) : void 0;
|
|
1759
|
+
const actualColumns = (0, import_ts_extras21.isDefined)(columnsDeclaration) ? countGridTracks(columnsDeclaration.value) : void 0;
|
|
1760
|
+
if ((0, import_ts_extras21.isDefined)(rowsDeclaration) && (0, import_ts_extras21.isDefined)(actualRows) && actualRows !== expectedRows) {
|
|
1761
|
+
report21({
|
|
1762
|
+
message: messages21.rows(expectedRows, actualRows),
|
|
1163
1763
|
node: rowsDeclaration,
|
|
1164
1764
|
result,
|
|
1165
|
-
ruleName:
|
|
1765
|
+
ruleName: ruleName21
|
|
1166
1766
|
});
|
|
1167
1767
|
}
|
|
1168
|
-
if ((0,
|
|
1169
|
-
|
|
1170
|
-
message:
|
|
1768
|
+
if ((0, import_ts_extras21.isDefined)(columnsDeclaration) && (0, import_ts_extras21.isDefined)(actualColumns) && actualColumns !== expectedColumns) {
|
|
1769
|
+
report21({
|
|
1770
|
+
message: messages21.columns(expectedColumns, actualColumns),
|
|
1171
1771
|
node: columnsDeclaration,
|
|
1172
1772
|
result,
|
|
1173
|
-
ruleName:
|
|
1773
|
+
ruleName: ruleName21
|
|
1174
1774
|
});
|
|
1175
1775
|
}
|
|
1176
1776
|
}
|
|
1177
1777
|
}
|
|
1178
1778
|
};
|
|
1179
|
-
var
|
|
1180
|
-
docs:
|
|
1181
|
-
messages:
|
|
1182
|
-
rule:
|
|
1183
|
-
ruleName:
|
|
1779
|
+
var rule21 = createStylelintRule({
|
|
1780
|
+
docs: docs21,
|
|
1781
|
+
messages: messages21,
|
|
1782
|
+
rule: ruleFunction21,
|
|
1783
|
+
ruleName: ruleName21
|
|
1184
1784
|
});
|
|
1185
|
-
var validate_track_counts_default =
|
|
1785
|
+
var validate_track_counts_default = rule21;
|
|
1186
1786
|
|
|
1187
1787
|
// dist/_internal/rules-registry.js
|
|
1188
1788
|
var gridRules = {
|
|
1189
1789
|
"consistent-area-naming": consistent_area_naming_default,
|
|
1790
|
+
"no-conflicting-placement": no_conflicting_placement_default,
|
|
1190
1791
|
"no-dense-auto-flow": no_dense_auto_flow_default,
|
|
1792
|
+
"no-ineffective-container-properties": no_ineffective_container_properties_default,
|
|
1191
1793
|
"no-invalid-areas": no_invalid_areas_default,
|
|
1192
1794
|
"no-invalid-auto-repeat": no_invalid_auto_repeat_default,
|
|
1193
1795
|
"no-invalid-minmax": no_invalid_minmax_default,
|
|
1796
|
+
"no-invalid-repeat-count": no_invalid_repeat_count_default,
|
|
1797
|
+
"no-invalid-span": no_invalid_span_default,
|
|
1194
1798
|
"no-mismatched-template-rows": no_mismatched_template_rows_default,
|
|
1195
1799
|
"no-overlapping-areas": no_overlapping_areas_default,
|
|
1800
|
+
"no-reversed-placement-lines": no_reversed_placement_lines_default,
|
|
1196
1801
|
"no-unknown-areas": no_unknown_areas_default,
|
|
1197
1802
|
"no-unused-areas": no_unused_areas_default,
|
|
1803
|
+
"no-zero-grid-lines": no_zero_grid_lines_default,
|
|
1198
1804
|
"prefer-gap-properties": prefer_gap_properties_default,
|
|
1805
|
+
"prefer-minmax-zero-fr": prefer_minmax_zero_fr_default,
|
|
1199
1806
|
"require-explicit-rows-with-column-flow": require_explicit_rows_with_column_flow_default,
|
|
1807
|
+
"require-explicit-tracks-with-areas": require_explicit_tracks_with_areas_default,
|
|
1200
1808
|
"validate-area-shapes": validate_area_shapes_default,
|
|
1201
1809
|
"validate-track-counts": validate_track_counts_default
|
|
1202
1810
|
};
|
|
@@ -1213,29 +1821,29 @@ var meta = {
|
|
|
1213
1821
|
version: packageMetaVersion
|
|
1214
1822
|
};
|
|
1215
1823
|
var rules = runtimeRules;
|
|
1216
|
-
var ruleNames = (0,
|
|
1824
|
+
var ruleNames = (0, import_ts_extras22.objectKeys)(rules).toSorted((left, right) => left.localeCompare(right));
|
|
1217
1825
|
var gridRuleEntries = (() => {
|
|
1218
1826
|
const entries = [];
|
|
1219
|
-
for (const
|
|
1220
|
-
const
|
|
1221
|
-
if ((0,
|
|
1222
|
-
entries.push([
|
|
1827
|
+
for (const ruleName22 of ruleNames) {
|
|
1828
|
+
const rule22 = rules[ruleName22];
|
|
1829
|
+
if ((0, import_ts_extras22.isDefined)(rule22)) {
|
|
1830
|
+
entries.push([ruleName22, rule22]);
|
|
1223
1831
|
}
|
|
1224
1832
|
}
|
|
1225
1833
|
return entries;
|
|
1226
1834
|
})();
|
|
1227
|
-
function isGridRuleId(
|
|
1228
|
-
return
|
|
1835
|
+
function isGridRuleId(ruleName22) {
|
|
1836
|
+
return ruleName22.startsWith(`${PLUGIN_NAMESPACE}/`);
|
|
1229
1837
|
}
|
|
1230
|
-
function toGridRuleId(
|
|
1231
|
-
if (!isGridRuleId(
|
|
1232
|
-
throw new Error(`Unexpected Stylelint rule id "${
|
|
1838
|
+
function toGridRuleId(ruleName22) {
|
|
1839
|
+
if (!isGridRuleId(ruleName22)) {
|
|
1840
|
+
throw new Error(`Unexpected Stylelint rule id "${ruleName22}".`);
|
|
1233
1841
|
}
|
|
1234
|
-
return
|
|
1842
|
+
return ruleName22;
|
|
1235
1843
|
}
|
|
1236
|
-
var plugins = gridRuleEntries.map(([,
|
|
1237
|
-
var ruleIds = gridRuleEntries.map(([,
|
|
1238
|
-
var recommendedRuleIds = gridRuleEntries.filter(([,
|
|
1844
|
+
var plugins = gridRuleEntries.map(([, rule22]) => rule22);
|
|
1845
|
+
var ruleIds = gridRuleEntries.map(([, rule22]) => toGridRuleId(rule22.ruleName));
|
|
1846
|
+
var recommendedRuleIds = gridRuleEntries.filter(([, rule22]) => rule22.docs.recommended).map(([, rule22]) => toGridRuleId(rule22.ruleName));
|
|
1239
1847
|
function createConfig(enabledRuleIds) {
|
|
1240
1848
|
return {
|
|
1241
1849
|
plugins: [...plugins],
|