stylelint-plugin-grid 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/LICENSE +21 -0
  3. package/README.md +93 -0
  4. package/dist/_internal/create-stylelint-rule.d.ts +49 -0
  5. package/dist/_internal/create-stylelint-rule.d.ts.map +1 -0
  6. package/dist/_internal/create-stylelint-rule.js +34 -0
  7. package/dist/_internal/create-stylelint-rule.js.map +1 -0
  8. package/dist/_internal/grid-template-analysis.d.ts +62 -0
  9. package/dist/_internal/grid-template-analysis.d.ts.map +1 -0
  10. package/dist/_internal/grid-template-analysis.js +346 -0
  11. package/dist/_internal/grid-template-analysis.js.map +1 -0
  12. package/dist/_internal/plugin-constants.d.ts +30 -0
  13. package/dist/_internal/plugin-constants.d.ts.map +1 -0
  14. package/dist/_internal/plugin-constants.js +47 -0
  15. package/dist/_internal/plugin-constants.js.map +1 -0
  16. package/dist/_internal/rules-registry.d.ts +10 -0
  17. package/dist/_internal/rules-registry.d.ts.map +1 -0
  18. package/dist/_internal/rules-registry.js +31 -0
  19. package/dist/_internal/rules-registry.js.map +1 -0
  20. package/dist/configs/grid-all.cjs +3 -0
  21. package/dist/configs/grid-all.d.cts +3 -0
  22. package/dist/configs/grid-all.d.ts +9 -0
  23. package/dist/configs/grid-all.d.ts.map +1 -0
  24. package/dist/configs/grid-all.js +9 -0
  25. package/dist/configs/grid-all.js.map +1 -0
  26. package/dist/configs/grid-recommended.cjs +3 -0
  27. package/dist/configs/grid-recommended.d.cts +3 -0
  28. package/dist/configs/grid-recommended.d.ts +9 -0
  29. package/dist/configs/grid-recommended.d.ts.map +1 -0
  30. package/dist/configs/grid-recommended.js +9 -0
  31. package/dist/configs/grid-recommended.js.map +1 -0
  32. package/dist/plugin.cjs +1268 -0
  33. package/dist/plugin.cjs.map +7 -0
  34. package/dist/plugin.d.cts +45 -0
  35. package/dist/plugin.d.ts +45 -0
  36. package/dist/plugin.d.ts.map +1 -0
  37. package/dist/plugin.js +78 -0
  38. package/dist/plugin.js.map +1 -0
  39. package/dist/rules/consistent-area-naming.d.ts +12 -0
  40. package/dist/rules/consistent-area-naming.d.ts.map +1 -0
  41. package/dist/rules/consistent-area-naming.js +86 -0
  42. package/dist/rules/consistent-area-naming.js.map +1 -0
  43. package/dist/rules/no-dense-auto-flow.d.ts +8 -0
  44. package/dist/rules/no-dense-auto-flow.d.ts.map +1 -0
  45. package/dist/rules/no-dense-auto-flow.js +44 -0
  46. package/dist/rules/no-dense-auto-flow.js.map +1 -0
  47. package/dist/rules/no-invalid-areas.d.ts +8 -0
  48. package/dist/rules/no-invalid-areas.d.ts.map +1 -0
  49. package/dist/rules/no-invalid-areas.js +42 -0
  50. package/dist/rules/no-invalid-areas.js.map +1 -0
  51. package/dist/rules/no-invalid-auto-repeat.d.ts +8 -0
  52. package/dist/rules/no-invalid-auto-repeat.d.ts.map +1 -0
  53. package/dist/rules/no-invalid-auto-repeat.js +189 -0
  54. package/dist/rules/no-invalid-auto-repeat.js.map +1 -0
  55. package/dist/rules/no-invalid-minmax.d.ts +8 -0
  56. package/dist/rules/no-invalid-minmax.d.ts.map +1 -0
  57. package/dist/rules/no-invalid-minmax.js +58 -0
  58. package/dist/rules/no-invalid-minmax.js.map +1 -0
  59. package/dist/rules/no-mismatched-template-rows.d.ts +8 -0
  60. package/dist/rules/no-mismatched-template-rows.d.ts.map +1 -0
  61. package/dist/rules/no-mismatched-template-rows.js +50 -0
  62. package/dist/rules/no-mismatched-template-rows.js.map +1 -0
  63. package/dist/rules/no-overlapping-areas.d.ts +8 -0
  64. package/dist/rules/no-overlapping-areas.d.ts.map +1 -0
  65. package/dist/rules/no-overlapping-areas.js +48 -0
  66. package/dist/rules/no-overlapping-areas.js.map +1 -0
  67. package/dist/rules/no-unknown-areas.d.ts +8 -0
  68. package/dist/rules/no-unknown-areas.d.ts.map +1 -0
  69. package/dist/rules/no-unknown-areas.js +47 -0
  70. package/dist/rules/no-unknown-areas.js.map +1 -0
  71. package/dist/rules/no-unused-areas.d.ts +8 -0
  72. package/dist/rules/no-unused-areas.d.ts.map +1 -0
  73. package/dist/rules/no-unused-areas.js +48 -0
  74. package/dist/rules/no-unused-areas.js.map +1 -0
  75. package/dist/rules/prefer-gap-properties.d.ts +8 -0
  76. package/dist/rules/prefer-gap-properties.d.ts.map +1 -0
  77. package/dist/rules/prefer-gap-properties.js +58 -0
  78. package/dist/rules/prefer-gap-properties.js.map +1 -0
  79. package/dist/rules/require-explicit-rows-with-column-flow.d.ts +8 -0
  80. package/dist/rules/require-explicit-rows-with-column-flow.d.ts.map +1 -0
  81. package/dist/rules/require-explicit-rows-with-column-flow.js +52 -0
  82. package/dist/rules/require-explicit-rows-with-column-flow.js.map +1 -0
  83. package/dist/rules/validate-area-shapes.d.ts +8 -0
  84. package/dist/rules/validate-area-shapes.d.ts.map +1 -0
  85. package/dist/rules/validate-area-shapes.js +47 -0
  86. package/dist/rules/validate-area-shapes.js.map +1 -0
  87. package/dist/rules/validate-track-counts.d.ts +9 -0
  88. package/dist/rules/validate-track-counts.d.ts.map +1 -0
  89. package/dist/rules/validate-track-counts.js +67 -0
  90. package/dist/rules/validate-track-counts.js.map +1 -0
  91. package/docs/rules/configs/grid-all.md +42 -0
  92. package/docs/rules/configs/grid-recommended.md +37 -0
  93. package/docs/rules/configs/index.md +46 -0
  94. package/docs/rules/consistent-area-naming.md +41 -0
  95. package/docs/rules/getting-started.md +55 -0
  96. package/docs/rules/guides/current-status.md +44 -0
  97. package/docs/rules/no-dense-auto-flow.md +57 -0
  98. package/docs/rules/no-invalid-areas.md +55 -0
  99. package/docs/rules/no-invalid-auto-repeat.md +58 -0
  100. package/docs/rules/no-invalid-minmax.md +57 -0
  101. package/docs/rules/no-mismatched-template-rows.md +36 -0
  102. package/docs/rules/no-overlapping-areas.md +40 -0
  103. package/docs/rules/no-unknown-areas.md +39 -0
  104. package/docs/rules/no-unused-areas.md +44 -0
  105. package/docs/rules/overview.md +54 -0
  106. package/docs/rules/prefer-gap-properties.md +45 -0
  107. package/docs/rules/require-explicit-rows-with-column-flow.md +56 -0
  108. package/docs/rules/validate-area-shapes.md +46 -0
  109. package/docs/rules/validate-track-counts.md +39 -0
  110. package/package.json +355 -0
package/CHANGELOG.md ADDED
File without changes
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nick2bad4u
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # stylelint-plugin-grid
2
+
3
+ [![npm license.](https://flat.badgen.net/npm/license/stylelint-plugin-grid?color=0f766e)](https://github.com/Nick2bad4u/stylelint-plugin-grid/blob/main/LICENSE) [![npm total downloads.](https://flat.badgen.net/npm/dt/stylelint-plugin-grid?color=f43f5e)](https://www.npmjs.com/package/stylelint-plugin-grid) [![latest GitHub release.](https://flat.badgen.net/github/release/Nick2bad4u/stylelint-plugin-grid?color=22d3ee)](https://github.com/Nick2bad4u/stylelint-plugin-grid/releases) [![GitHub stars.](https://flat.badgen.net/github/stars/Nick2bad4u/stylelint-plugin-grid?color=f59e0b)](https://github.com/Nick2bad4u/stylelint-plugin-grid/stargazers) [![GitHub forks.](https://flat.badgen.net/github/forks/Nick2bad4u/stylelint-plugin-grid?color=84cc16)](https://github.com/Nick2bad4u/stylelint-plugin-grid/forks) [![GitHub open issues.](https://flat.badgen.net/github/open-issues/Nick2bad4u/stylelint-plugin-grid?color=d946ef)](https://github.com/Nick2bad4u/stylelint-plugin-grid/issues) [![codecov.](https://flat.badgen.net/codecov/github/Nick2bad4u/stylelint-plugin-grid?color=0ea5e9)](https://codecov.io/gh/Nick2bad4u/stylelint-plugin-grid)
4
+
5
+ Stylelint rules for CSS Grid correctness, safer named-area patterns, and common
6
+ layout bug prevention.
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ npm install --save-dev stylelint stylelint-plugin-grid
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ Use the recommended config:
17
+
18
+ ```js
19
+ import { gridPluginConfigs } from "stylelint-plugin-grid";
20
+
21
+ export default gridPluginConfigs["grid-recommended"];
22
+ ```
23
+
24
+ Or use the subpath config:
25
+
26
+ ```js
27
+ export default {
28
+ extends: ["stylelint-plugin-grid/configs/grid-recommended"]
29
+ };
30
+ ```
31
+
32
+ Enable individual rules directly:
33
+
34
+ ```js
35
+ export default {
36
+ plugins: ["stylelint-plugin-grid"],
37
+ rules: {
38
+ "grid/no-invalid-areas": true,
39
+ "grid/validate-area-shapes": true,
40
+ "grid/validate-track-counts": true
41
+ }
42
+ };
43
+ ```
44
+
45
+ ## Exports
46
+
47
+ - default plugin pack export
48
+ - `gridPluginConfigs`
49
+ - `configNames`, `ruleNames`, `ruleIds`, `rules`, and `meta`
50
+ - `stylelint-plugin-grid/configs/grid-recommended`
51
+ - `stylelint-plugin-grid/configs/grid-all`
52
+
53
+ ## Configs
54
+
55
+ | Config | Purpose |
56
+ | --------------------------------------- | ----------------------------------------------------------------------------- |
57
+ | `gridPluginConfigs["grid-recommended"]` | Low-noise correctness checks for authored Grid templates and area references. |
58
+ | `gridPluginConfigs["grid-all"]` | Every public rule, including stricter same-stylesheet checks. |
59
+
60
+ ## Rules
61
+
62
+ **Fix legend:**
63
+
64
+ - 🔧 = autofixable
65
+ - — = report only
66
+
67
+ **Preset key legend:**
68
+
69
+ - [🟢](./docs/rules/configs/grid-recommended.md) — `gridPluginConfigs["grid-recommended"]`
70
+ - [🟣](./docs/rules/configs/grid-all.md) — `gridPluginConfigs["grid-all"]`
71
+
72
+ | Rule | Fix | Preset key | Description |
73
+ | --- | :-: | --- | --- |
74
+ | [`consistent-area-naming`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/consistent-area-naming) | — | [🟣](./docs/rules/configs/grid-all.md) | Require consistent naming for `grid-template-areas` and single-name `grid-area` identifiers. |
75
+ | [`no-dense-auto-flow`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-dense-auto-flow) | — | [🟣](./docs/rules/configs/grid-all.md) | Disallow `grid-auto-flow: dense` because it can reorder auto-placed grid items visually. |
76
+ | [`no-invalid-areas`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-invalid-areas) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Disallow malformed `grid-template-areas` declarations. |
77
+ | [`no-invalid-auto-repeat`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-invalid-auto-repeat) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Disallow definitely invalid CSS Grid auto-repeat track sizes. |
78
+ | [`no-invalid-minmax`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-invalid-minmax) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Disallow flexible `fr` values as the minimum argument in CSS Grid `minmax()` track sizes. |
79
+ | [`no-mismatched-template-rows`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-mismatched-template-rows) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Require `grid-template-rows` track count to match `grid-template-areas` row count. |
80
+ | [`no-overlapping-areas`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-overlapping-areas) | — | [🟣](./docs/rules/configs/grid-all.md) | Disallow multiple selectors assigning the same single-name `grid-area` value in one stylesheet. |
81
+ | [`no-unknown-areas`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-unknown-areas) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Disallow single-name `grid-area` references that do not match any named area declared in the same stylesheet. |
82
+ | [`no-unused-areas`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/no-unused-areas) | — | [🟣](./docs/rules/configs/grid-all.md) | Disallow named template areas that are never referenced by a single-name `grid-area` declaration in the same stylesheet. |
83
+ | [`prefer-gap-properties`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/prefer-gap-properties) | 🔧 | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Prefer modern `gap`, `row-gap`, and `column-gap` properties over legacy grid gap aliases. |
84
+ | [`require-explicit-rows-with-column-flow`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/require-explicit-rows-with-column-flow) | — | [🟣](./docs/rules/configs/grid-all.md) | Require explicit row sizing when a rule uses `grid-auto-flow: column`. |
85
+ | [`validate-area-shapes`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/validate-area-shapes) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Require every named grid template area to form one contiguous rectangle. |
86
+ | [`validate-track-counts`](https://nick2bad4u.github.io/stylelint-plugin-grid/docs/rules/validate-track-counts) | — | [🟢](./docs/rules/configs/grid-recommended.md) [🟣](./docs/rules/configs/grid-all.md) | Require template row and column track counts to match `grid-template-areas` dimensions. |
87
+
88
+ ## Documentation
89
+
90
+ - [Overview](./docs/rules/overview.md)
91
+ - [Getting Started](./docs/rules/getting-started.md)
92
+ - [Current Status](./docs/rules/guides/current-status.md)
93
+ - [Configs](./docs/rules/configs/index.md)
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared helper for authoring statically typed Stylelint rules in this template.
4
+ */
5
+ import type { Except } from "type-fest";
6
+ import stylelint, { type Rule, type RuleBase, type RuleMessages, type RuleMeta } from "stylelint";
7
+ /** Input contract for the shared Stylelint rule creator. */
8
+ export type CreateStylelintRuleOptions<P = unknown, S = Readonly<Record<string, never>> | undefined, M extends RuleMessages = RuleMessages> = Readonly<{
9
+ docs: StylelintRuleDocs;
10
+ messages: M;
11
+ meta?: Readonly<Except<RuleMeta, "url"> & {
12
+ url?: string;
13
+ }>;
14
+ primaryOptionArray?: boolean;
15
+ rule: RuleBase<P, S>;
16
+ ruleName: string;
17
+ }>;
18
+ /** Fully assembled plugin object shape used by this template's rule registry. */
19
+ export type StylelintPluginRule<P = unknown, S = Readonly<Record<string, never>> | undefined, M extends RuleMessages = RuleMessages> = Readonly<{
20
+ docs: StylelintRuleDocs;
21
+ messages: M;
22
+ meta: Readonly<{
23
+ docs: StylelintRuleDocs;
24
+ }> & RuleMeta;
25
+ rule: Rule<P, S, M>;
26
+ ruleName: string;
27
+ }> & ReturnType<typeof stylelint.createPlugin>;
28
+ /** Nongeneric public rule contract used for heterogeneous runtime registries. */
29
+ export type StylelintPluginRuleContract = Readonly<{
30
+ docs: StylelintRuleDocs;
31
+ messages: RuleMessages;
32
+ meta: Readonly<{
33
+ docs: StylelintRuleDocs;
34
+ }> & RuleMeta;
35
+ rule: Rule;
36
+ ruleName: string;
37
+ }> & ReturnType<typeof stylelint.createPlugin>;
38
+ /** Static authored docs metadata carried alongside each rule definition. */
39
+ export type StylelintRuleDocs = Readonly<{
40
+ description: string;
41
+ recommended: boolean;
42
+ url: string;
43
+ }>;
44
+ /**
45
+ * Create a Stylelint plugin object while stamping the static runtime metadata
46
+ * that Stylelint and this template expect.
47
+ */
48
+ export declare const createStylelintRule: <P = unknown, S = Readonly<Record<string, never>> | undefined, M extends RuleMessages = RuleMessages>(options: CreateStylelintRuleOptions<P, S, M>) => StylelintPluginRule<P, S, M>;
49
+ //# sourceMappingURL=create-stylelint-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-stylelint-rule.d.ts","sourceRoot":"","sources":["../../src/_internal/create-stylelint-rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,SAAS,EAAE,EACd,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,EAChB,MAAM,WAAW,CAAC;AAEnB,4DAA4D;AAC5D,MAAM,MAAM,0BAA0B,CAClC,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,EAC/C,CAAC,SAAS,YAAY,GAAG,YAAY,IACrC,QAAQ,CAAC;IACT,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,MAAM,mBAAmB,CAC3B,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,EAC/C,CAAC,SAAS,YAAY,GAAG,YAAY,IACrC,QAAQ,CAAC;IACT,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;QAAE,IAAI,EAAE,iBAAiB,CAAA;KAAE,CAAC,GAAG,QAAQ,CAAC;IACvD,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,GACE,UAAU,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,CAAC;AAE9C,iFAAiF;AACjF,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAC/C,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;QAAE,IAAI,EAAE,iBAAiB,CAAA;KAAE,CAAC,GAAG,QAAQ,CAAC;IACvD,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,GACE,UAAU,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,CAAC;AAE9C,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC5B,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,EAC/C,CAAC,SAAS,YAAY,GAAG,YAAY,EAErC,SAAS,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7C,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CA8B7B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import stylelint, {} from "stylelint";
2
+ /**
3
+ * Create a Stylelint plugin object while stamping the static runtime metadata
4
+ * that Stylelint and this template expect.
5
+ */
6
+ export const createStylelintRule = (options) => {
7
+ const { docs, messages, rule, ruleName } = options;
8
+ const baseMeta = {
9
+ ...options.meta,
10
+ url: options.meta?.url ?? docs.url,
11
+ };
12
+ const meta = {
13
+ ...baseMeta,
14
+ docs,
15
+ };
16
+ const typedRule = Object.assign(rule, {
17
+ messages,
18
+ meta,
19
+ ruleName,
20
+ });
21
+ if (options.primaryOptionArray === true) {
22
+ typedRule.primaryOptionArray = true;
23
+ }
24
+ const plugin = stylelint.createPlugin(ruleName, typedRule);
25
+ return {
26
+ ...plugin,
27
+ docs,
28
+ messages,
29
+ meta,
30
+ rule: typedRule,
31
+ ruleName,
32
+ };
33
+ };
34
+ //# sourceMappingURL=create-stylelint-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-stylelint-rule.js","sourceRoot":"","sources":["../../src/_internal/create-stylelint-rule.ts"],"names":[],"mappings":"AAMA,OAAO,SAAS,EAAE,EAKjB,MAAM,WAAW,CAAC;AA+CnB;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAK/B,OAA4C,EAChB,EAAE;IAC9B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,QAAQ,GAAa;QACvB,GAAG,OAAO,CAAC,IAAI;QACf,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG;KACrC,CAAC;IACF,MAAM,IAAI,GAAqD;QAC3D,GAAG,QAAQ;QACX,IAAI;KACP,CAAC;IACF,MAAM,SAAS,GAAkB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QACjD,QAAQ;QACR,IAAI;QACJ,QAAQ;KACX,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACtC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE3D,OAAO;QACH,GAAG,MAAM;QACT,IAAI;QACJ,QAAQ;QACR,IAAI;QACJ,IAAI,EAAE,SAAS;QACf,QAAQ;KACX,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared CSS Grid declaration analysis for public rules.
4
+ */
5
+ import type { Declaration, Root } from "postcss";
6
+ /** One named area rectangle computed from a parsed template. */
7
+ export type GridAreaShape = Readonly<{
8
+ bottom: number;
9
+ left: number;
10
+ name: string;
11
+ right: number;
12
+ top: number;
13
+ }>;
14
+ /** One `grid-area: <custom-ident>` usage. */
15
+ export type GridAreaUsage = Readonly<{
16
+ declaration: Declaration;
17
+ name: string;
18
+ selector?: string;
19
+ }>;
20
+ /** One parsed `grid-template-areas` declaration. */
21
+ export type GridTemplateAreas = Readonly<{
22
+ areaNames: readonly string[];
23
+ declaration: Declaration;
24
+ diagnostics: readonly GridTemplateDiagnostic[];
25
+ rows: readonly (readonly string[])[];
26
+ }>;
27
+ /** One structural issue found while parsing `grid-template-areas`. */
28
+ export type GridTemplateDiagnostic = Readonly<{
29
+ message: string;
30
+ token?: string;
31
+ }>;
32
+ /** One CSS function call found in a declaration value. */
33
+ export type GridValueFunctionCall = Readonly<{
34
+ body: string;
35
+ name: string;
36
+ source: string;
37
+ }>;
38
+ /** Collect all single-name `grid-area` usages in source order. */
39
+ export declare function collectGridAreaUsages(root: Root): readonly GridAreaUsage[];
40
+ /** Collect parsed `grid-template-areas` declarations in source order. */
41
+ export declare function collectGridTemplateAreas(root: Root): readonly GridTemplateAreas[];
42
+ /** Count top-level CSS Grid tracks, or return undefined for dynamic lists. */
43
+ export declare function countGridTracks(value: string): number | undefined;
44
+ /** Find a sibling declaration on the same rule/atrule block. */
45
+ export declare function findSiblingDeclaration(declaration: Readonly<Declaration>, propertyName: string): Declaration | undefined;
46
+ /** Find balanced function calls by name inside one declaration value. */
47
+ export declare function findValueFunctionCalls(value: string, functionName: string): readonly GridValueFunctionCall[];
48
+ /** Return each named area's bounding box from a parsed template. */
49
+ export declare function getAreaShapes(template: Readonly<GridTemplateAreas>): readonly GridAreaShape[];
50
+ /** Return whether a token is a valid blank cell marker. */
51
+ export declare function isBlankAreaToken(token: string): boolean;
52
+ /** Return whether a token is accepted as a conservative CSS custom ident. */
53
+ export declare function isGridAreaName(token: string): boolean;
54
+ /** Return whether a named area fills its full rectangle. */
55
+ export declare function isRectangularArea(template: Readonly<GridTemplateAreas>, shape: Readonly<GridAreaShape>): boolean;
56
+ /** Parse one `grid-template-areas` declaration. */
57
+ export declare function parseGridTemplateAreas(declaration: Declaration): GridTemplateAreas;
58
+ /** Split one comma-separated CSS value at top-level commas only. */
59
+ export declare function splitTopLevelCommas(value: string): readonly string[];
60
+ /** Split one CSS value at top-level whitespace only. */
61
+ export declare function splitTopLevelWhitespace(value: string): readonly string[];
62
+ //# sourceMappingURL=grid-template-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-template-analysis.d.ts","sourceRoot":"","sources":["../../src/_internal/grid-template-analysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAa,WAAW,EAAE,IAAI,EAAQ,MAAM,SAAS,CAAC;AAWlE,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC/C,IAAI,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAeH,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,aAAa,EAAE,CAoB1E;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,IAAI,GACX,SAAS,iBAAiB,EAAE,CAY9B;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBjE;AAED,gEAAgE;AAChE,wBAAgB,sBAAsB,CAClC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAClC,YAAY,EAAE,MAAM,GACrB,WAAW,GAAG,SAAS,CAWzB;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACrB,SAAS,qBAAqB,EAAE,CAyClC;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CACzB,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACtC,SAAS,aAAa,EAAE,CAkC1B;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC/B,OAAO,CAoBT;AAED,mDAAmD;AACnD,wBAAgB,sBAAsB,CAClC,WAAW,EAAE,WAAW,GACzB,iBAAiB,CA6DnB;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAEpE;AAED,wDAAwD;AACxD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAExE"}
@@ -0,0 +1,346 @@
1
+ import { arrayFirst, isDefined, isEmpty, isInteger, safeCastTo, setHas, } from "ts-extras";
2
+ const cssWideKeywords = new Set([
3
+ "inherit",
4
+ "initial",
5
+ "revert",
6
+ "revert-layer",
7
+ "unset",
8
+ ]);
9
+ const reservedGridAreaIdents = new Set(["auto", "span"]);
10
+ const customIdentPattern = /^-?[A-Z_a-z][\w\-]*$/v;
11
+ const blankAreaPattern = /^\.+$/v;
12
+ /** Collect all single-name `grid-area` usages in source order. */
13
+ export function collectGridAreaUsages(root) {
14
+ const usages = [];
15
+ root.walkDecls("grid-area", (declaration) => {
16
+ const name = parseSingleGridAreaName(declaration.value);
17
+ if (!isDefined(name)) {
18
+ return;
19
+ }
20
+ const selector = getOwningRule(declaration)?.selector;
21
+ usages.push({
22
+ declaration,
23
+ name,
24
+ ...(isDefined(selector) ? { selector } : {}),
25
+ });
26
+ });
27
+ return usages;
28
+ }
29
+ /** Collect parsed `grid-template-areas` declarations in source order. */
30
+ export function collectGridTemplateAreas(root) {
31
+ const templates = [];
32
+ root.walkDecls("grid-template-areas", (declaration) => {
33
+ const template = parseGridTemplateAreas(declaration);
34
+ if (template.rows.length > 0 || template.diagnostics.length > 0) {
35
+ templates.push(template);
36
+ }
37
+ });
38
+ return templates;
39
+ }
40
+ /** Count top-level CSS Grid tracks, or return undefined for dynamic lists. */
41
+ export function countGridTracks(value) {
42
+ const tokens = [];
43
+ let count = 0;
44
+ for (const token of splitTopLevelWhitespace(value)) {
45
+ if (!isLineNameList(token)) {
46
+ tokens.push(token);
47
+ }
48
+ }
49
+ for (const token of tokens) {
50
+ const repeatCount = countRepeatTracks(token);
51
+ if (!isDefined(repeatCount) && token.startsWith("repeat(")) {
52
+ return undefined;
53
+ }
54
+ count += repeatCount ?? 1;
55
+ }
56
+ return count;
57
+ }
58
+ /** Find a sibling declaration on the same rule/atrule block. */
59
+ export function findSiblingDeclaration(declaration, propertyName) {
60
+ const parent = safeCastTo(declaration.parent);
61
+ let match;
62
+ parent?.walkDecls(propertyName, (candidate) => {
63
+ if (candidate.parent === parent) {
64
+ match = candidate;
65
+ }
66
+ });
67
+ return match;
68
+ }
69
+ /** Find balanced function calls by name inside one declaration value. */
70
+ export function findValueFunctionCalls(value, functionName) {
71
+ const calls = [];
72
+ const normalizedFunctionName = functionName.toLowerCase();
73
+ let index = 0;
74
+ while (index < value.length) {
75
+ const openParenthesisIndex = value.indexOf("(", index);
76
+ if (openParenthesisIndex === -1) {
77
+ break;
78
+ }
79
+ const nameStartIndex = findFunctionNameStart(value, openParenthesisIndex);
80
+ const name = value.slice(nameStartIndex, openParenthesisIndex);
81
+ const closeParenthesisIndex = findMatchingParenthesis(value, openParenthesisIndex);
82
+ if (closeParenthesisIndex < 0) {
83
+ break;
84
+ }
85
+ if (name.toLowerCase() === normalizedFunctionName) {
86
+ calls.push({
87
+ body: value.slice(openParenthesisIndex + 1, closeParenthesisIndex),
88
+ name,
89
+ source: value.slice(nameStartIndex, closeParenthesisIndex + 1),
90
+ });
91
+ }
92
+ index = closeParenthesisIndex + 1;
93
+ }
94
+ return calls;
95
+ }
96
+ /** Return each named area's bounding box from a parsed template. */
97
+ export function getAreaShapes(template) {
98
+ const shapes = new Map();
99
+ for (const [rowIndex, row] of template.rows.entries()) {
100
+ for (const [columnIndex, token] of row.entries()) {
101
+ if (!isBlankAreaToken(token) && isGridAreaName(token)) {
102
+ const current = shapes.get(token);
103
+ shapes.set(token, isDefined(current)
104
+ ? {
105
+ ...current,
106
+ bottom: Math.max(current.bottom, rowIndex),
107
+ left: Math.min(current.left, columnIndex),
108
+ right: Math.max(current.right, columnIndex),
109
+ top: Math.min(current.top, rowIndex),
110
+ }
111
+ : {
112
+ bottom: rowIndex,
113
+ left: columnIndex,
114
+ name: token,
115
+ right: columnIndex,
116
+ top: rowIndex,
117
+ });
118
+ }
119
+ }
120
+ }
121
+ // eslint-disable-next-line canonical/no-use-extend-native -- The repo already targets Array#toSorted; this avoids mutating the collected shape list.
122
+ return [...shapes.values()].toSorted((left, right) => left.name.localeCompare(right.name));
123
+ }
124
+ /** Return whether a token is a valid blank cell marker. */
125
+ export function isBlankAreaToken(token) {
126
+ return blankAreaPattern.test(token);
127
+ }
128
+ /** Return whether a token is accepted as a conservative CSS custom ident. */
129
+ export function isGridAreaName(token) {
130
+ return (customIdentPattern.test(token) &&
131
+ !setHas(cssWideKeywords, token.toLowerCase()) &&
132
+ !setHas(reservedGridAreaIdents, token.toLowerCase()));
133
+ }
134
+ /** Return whether a named area fills its full rectangle. */
135
+ export function isRectangularArea(template, shape) {
136
+ for (let rowIndex = shape.top; rowIndex <= shape.bottom; rowIndex += 1) {
137
+ const row = template.rows[rowIndex];
138
+ if (!isDefined(row)) {
139
+ return false;
140
+ }
141
+ for (let columnIndex = shape.left; columnIndex <= shape.right; columnIndex += 1) {
142
+ if (row[columnIndex] !== shape.name) {
143
+ return false;
144
+ }
145
+ }
146
+ }
147
+ return true;
148
+ }
149
+ /** Parse one `grid-template-areas` declaration. */
150
+ export function parseGridTemplateAreas(declaration) {
151
+ const trimmedValue = declaration.value.trim();
152
+ if (trimmedValue === "" || trimmedValue.toLowerCase() === "none") {
153
+ return {
154
+ areaNames: [],
155
+ declaration,
156
+ diagnostics: [],
157
+ rows: [],
158
+ };
159
+ }
160
+ const rowTexts = extractCssStringLiterals(trimmedValue);
161
+ const diagnostics = [];
162
+ if (isEmpty(rowTexts)) {
163
+ diagnostics.push({
164
+ message: "`grid-template-areas` must contain one or more quoted row strings.",
165
+ });
166
+ }
167
+ const rows = rowTexts.map((rowText) => rowText.trim().match(/\S+/gv) ?? [""]);
168
+ for (const [rowIndex, row] of rows.entries()) {
169
+ if (row.length === 1 && arrayFirst(row) === "") {
170
+ diagnostics.push({
171
+ message: `Grid template row ${String(rowIndex + 1)} is empty.`,
172
+ });
173
+ }
174
+ else {
175
+ for (const token of row) {
176
+ if (!isBlankAreaToken(token) && !isGridAreaName(token)) {
177
+ diagnostics.push({
178
+ message: `Grid area token "${token}" is not a valid area name or blank "." marker.`,
179
+ token,
180
+ });
181
+ }
182
+ }
183
+ }
184
+ }
185
+ const expectedWidth = arrayFirst(rows)?.length;
186
+ if (isDefined(expectedWidth)) {
187
+ for (const [rowIndex, row] of rows.entries()) {
188
+ if (row.length !== expectedWidth) {
189
+ diagnostics.push({
190
+ message: `Grid template row ${String(rowIndex + 1)} has ${String(row.length)} columns, but row 1 has ${String(expectedWidth)}.`,
191
+ });
192
+ }
193
+ }
194
+ }
195
+ return {
196
+ areaNames: getAreaNames(rows),
197
+ declaration,
198
+ diagnostics,
199
+ rows,
200
+ };
201
+ }
202
+ /** Split one comma-separated CSS value at top-level commas only. */
203
+ export function splitTopLevelCommas(value) {
204
+ return splitTopLevel(value, /,/v);
205
+ }
206
+ /** Split one CSS value at top-level whitespace only. */
207
+ export function splitTopLevelWhitespace(value) {
208
+ return splitTopLevel(value, /\s/v);
209
+ }
210
+ function countRepeatTracks(token) {
211
+ if (!token.startsWith("repeat(") || !token.endsWith(")")) {
212
+ return undefined;
213
+ }
214
+ const body = token.slice("repeat(".length, -1);
215
+ const [repeatText, trackListText] = splitTopLevelCommas(body);
216
+ const repeat = Number.parseInt(repeatText?.trim() ?? "", 10);
217
+ if (!isInteger(repeat) ||
218
+ repeat < 0 ||
219
+ String(repeat) !== repeatText?.trim() ||
220
+ !isDefined(trackListText)) {
221
+ return undefined;
222
+ }
223
+ const innerTrackCount = countGridTracks(trackListText);
224
+ return isDefined(innerTrackCount) ? repeat * innerTrackCount : undefined;
225
+ }
226
+ function extractCssStringLiterals(value) {
227
+ const rows = [];
228
+ const stringPattern = /"(?<doubleQuotedRow>(?:\\.|[^"\\])*)"|'(?<singleQuotedRow>(?:\\.|[^'\\])*)'/vy;
229
+ let index = 0;
230
+ while (index < value.length) {
231
+ while (/\s/v.test(value[index] ?? "")) {
232
+ index += 1;
233
+ }
234
+ stringPattern.lastIndex = index;
235
+ const match = stringPattern.exec(value);
236
+ if (match === null) {
237
+ return rows;
238
+ }
239
+ rows.push(match.groups?.["doubleQuotedRow"] ??
240
+ match.groups?.["singleQuotedRow"] ??
241
+ "");
242
+ index = stringPattern.lastIndex;
243
+ }
244
+ return rows;
245
+ }
246
+ function findFunctionNameStart(value, openParenthesisIndex) {
247
+ let index = openParenthesisIndex - 1;
248
+ while (index >= 0 && isFunctionNameCharacter(value[index] ?? "")) {
249
+ index -= 1;
250
+ }
251
+ return index + 1;
252
+ }
253
+ function findMatchingParenthesis(value, openParenthesisIndex) {
254
+ let parenthesisDepth = 0;
255
+ for (let index = openParenthesisIndex; index < value.length; index += 1) {
256
+ const character = value[index];
257
+ if (character === "(") {
258
+ parenthesisDepth += 1;
259
+ }
260
+ else if (character === ")") {
261
+ parenthesisDepth -= 1;
262
+ if (parenthesisDepth === 0) {
263
+ return index;
264
+ }
265
+ }
266
+ }
267
+ return -1;
268
+ }
269
+ function getAreaNames(rows) {
270
+ const names = new Set();
271
+ for (const row of rows) {
272
+ for (const token of row) {
273
+ if (!isBlankAreaToken(token) && isGridAreaName(token)) {
274
+ names.add(token);
275
+ }
276
+ }
277
+ }
278
+ // eslint-disable-next-line canonical/no-use-extend-native -- The repo already targets Array#toSorted; this keeps the returned area-name list immutable.
279
+ return [...names].toSorted((left, right) => left.localeCompare(right));
280
+ }
281
+ function getOwningRule(declaration) {
282
+ return declaration.parent?.type === "rule" ? declaration.parent : undefined;
283
+ }
284
+ function isFunctionNameCharacter(character) {
285
+ return (character === "-" ||
286
+ character === "_" ||
287
+ (character >= "0" && character <= "9") ||
288
+ (character >= "A" && character <= "Z") ||
289
+ (character >= "a" && character <= "z"));
290
+ }
291
+ function isLineNameList(token) {
292
+ return token.startsWith("[") && token.endsWith("]");
293
+ }
294
+ function parseSingleGridAreaName(value) {
295
+ const name = value.trim();
296
+ if (name.includes("/") ||
297
+ name.includes("(") ||
298
+ name.includes(")") ||
299
+ !isGridAreaName(name)) {
300
+ return undefined;
301
+ }
302
+ return name;
303
+ }
304
+ function splitTopLevel(value, separatorPattern) {
305
+ const tokens = [];
306
+ let bracketDepth = 0;
307
+ let parenthesisDepth = 0;
308
+ let tokenStart = 0;
309
+ for (let index = 0; index < value.length; index += 1) {
310
+ const character = value[index] ?? "";
311
+ switch (character) {
312
+ case "(": {
313
+ parenthesisDepth += 1;
314
+ break;
315
+ }
316
+ case ")": {
317
+ parenthesisDepth = Math.max(0, parenthesisDepth - 1);
318
+ break;
319
+ }
320
+ case "[": {
321
+ bracketDepth += 1;
322
+ break;
323
+ }
324
+ case "]": {
325
+ bracketDepth = Math.max(0, bracketDepth - 1);
326
+ break;
327
+ }
328
+ // No default
329
+ }
330
+ if (bracketDepth === 0 &&
331
+ parenthesisDepth === 0 &&
332
+ separatorPattern.test(character)) {
333
+ const token = value.slice(tokenStart, index).trim();
334
+ if (token.length > 0) {
335
+ tokens.push(token);
336
+ }
337
+ tokenStart = index + 1;
338
+ }
339
+ }
340
+ const finalToken = value.slice(tokenStart).trim();
341
+ if (finalToken.length > 0) {
342
+ tokens.push(finalToken);
343
+ }
344
+ return tokens;
345
+ }
346
+ //# sourceMappingURL=grid-template-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-template-analysis.js","sourceRoot":"","sources":["../../src/_internal/grid-template-analysis.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,EACV,MAAM,GACT,MAAM,WAAW,CAAC;AAuCnB,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACjD,SAAS;IACT,SAAS;IACT,QAAQ;IACR,cAAc;IACd,OAAO;CACV,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9E,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AACnD,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAElC,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CAAC,IAAU;IAC5C,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,uBAAuB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAExD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;QAEtD,MAAM,CAAC,IAAI,CAAC;YACR,WAAW;YACX,IAAI;YACJ,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,wBAAwB,CACpC,IAAU;IAEV,MAAM,SAAS,GAAwB,EAAE,CAAC;IAE1C,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,WAAW,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAErD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,KAAK,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,KAAK,IAAI,WAAW,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,sBAAsB,CAClC,WAAkC,EAClC,YAAoB;IAEpB,MAAM,MAAM,GAAG,UAAU,CAAwB,WAAW,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,KAA8B,CAAC;IAEnC,MAAM,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE;QAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,KAAK,GAAG,SAAS,CAAC;QACtB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,sBAAsB,CAClC,KAAa,EACb,YAAoB;IAEpB,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,MAAM,sBAAsB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEvD,IAAI,oBAAoB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9B,MAAM;QACV,CAAC;QAED,MAAM,cAAc,GAAG,qBAAqB,CACxC,KAAK,EACL,oBAAoB,CACvB,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAC/D,MAAM,qBAAqB,GAAG,uBAAuB,CACjD,KAAK,EACL,oBAAoB,CACvB,CAAC;QAEF,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM;QACV,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,sBAAsB,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,KAAK,CAAC,KAAK,CACb,oBAAoB,GAAG,CAAC,EACxB,qBAAqB,CACxB;gBACD,IAAI;gBACJ,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,qBAAqB,GAAG,CAAC,CAAC;aACjE,CAAC,CAAC;QACP,CAAC;QAED,KAAK,GAAG,qBAAqB,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,aAAa,CACzB,QAAqC;IAErC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEhD,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAElC,MAAM,CAAC,GAAG,CACN,KAAK,EACL,SAAS,CAAC,OAAO,CAAC;oBACd,CAAC,CAAC;wBACI,GAAG,OAAO;wBACV,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;wBAC1C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;wBACzC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;wBAC3C,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;qBACvC;oBACH,CAAC,CAAC;wBACI,MAAM,EAAE,QAAQ;wBAChB,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,WAAW;wBAClB,GAAG,EAAE,QAAQ;qBAChB,CACV,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC;IAED,qJAAqJ;IACrJ,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACjD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACtC,CAAC;AACN,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC1C,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,OAAO,CACH,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7C,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CACvD,CAAC;AACN,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,iBAAiB,CAC7B,QAAqC,EACrC,KAA8B;IAE9B,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,KACI,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,EAC5B,WAAW,IAAI,KAAK,CAAC,KAAK,EAC1B,WAAW,IAAI,CAAC,EAClB,CAAC;YACC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,sBAAsB,CAClC,WAAwB;IAExB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAE9C,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO;YACH,SAAS,EAAE,EAAE;YACb,WAAW;YACX,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;SACX,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,WAAW,GAA6B,EAAE,CAAC;IAEjD,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpB,WAAW,CAAC,IAAI,CAAC;YACb,OAAO,EACH,oEAAoE;SAC3E,CAAC,CAAC;IACP,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CACrB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CACrD,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7C,WAAW,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,qBAAqB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,YAAY;aACjE,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,WAAW,CAAC,IAAI,CAAC;wBACb,OAAO,EAAE,oBAAoB,KAAK,iDAAiD;wBACnF,KAAK;qBACR,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAE/C,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC;oBACb,OAAO,EAAE,qBAAqB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,2BAA2B,MAAM,CAAC,aAAa,CAAC,GAAG;iBAClI,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO;QACH,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;QAC7B,WAAW;QACX,WAAW;QACX,IAAI;KACP,CAAC;AACN,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC7C,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACjD,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7D,IACI,CAAC,SAAS,CAAC,MAAM,CAAC;QAClB,MAAM,GAAG,CAAC;QACV,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,IAAI,EAAE;QACrC,CAAC,SAAS,CAAC,aAAa,CAAC,EAC3B,CAAC;QACC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEvD,OAAO,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC3C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,aAAa,GACf,+EAA+E,CAAC;IACpF,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC;QACf,CAAC;QAED,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,IAAI,CACL,KAAK,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC;YAC7B,KAAK,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC;YACjC,EAAE,CACT,CAAC;QACF,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC1B,KAAa,EACb,oBAA4B;IAE5B,IAAI,KAAK,GAAG,oBAAoB,GAAG,CAAC,CAAC;IAErC,OAAO,KAAK,IAAI,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,KAAK,IAAI,CAAC,CAAC;IACf,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,uBAAuB,CAC5B,KAAa,EACb,oBAA4B;IAE5B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,IAAI,KAAK,GAAG,oBAAoB,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACpB,gBAAgB,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC3B,gBAAgB,IAAI,CAAC,CAAC;YAEtB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,IAAoC;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACL,CAAC;IACL,CAAC;IAED,wJAAwJ;IACxJ,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,WAAkC;IACrD,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAiB;IAC9C,OAAO,CACH,SAAS,KAAK,GAAG;QACjB,SAAS,KAAK,GAAG;QACjB,CAAC,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC;QACtC,CAAC,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC;QACtC,CAAC,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,CACzC,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE1B,IACI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,CAAC,cAAc,CAAC,IAAI,CAAC,EACvB,CAAC;QACC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAClB,KAAa,EACb,gBAAwB;IAExB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAErC,QAAQ,SAAS,EAAE,CAAC;YAChB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACP,gBAAgB,IAAI,CAAC,CAAC;gBAEtB,MAAM;YACV,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACP,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBAErD,MAAM;YACV,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACP,YAAY,IAAI,CAAC,CAAC;gBAElB,MAAM;YACV,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACP,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;gBAE7C,MAAM;YACV,CAAC;YACD,aAAa;QACjB,CAAC;QAED,IACI,YAAY,KAAK,CAAC;YAClB,gBAAgB,KAAK,CAAC;YACtB,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAClC,CAAC;YACC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAEpD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}