@elastic/eslint-plugin-eui 2.15.0 → 2.16.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.
- package/README.md +125 -0
- package/lib/cjs/index.js +10 -1
- package/lib/cjs/rules/a11y/no_nested_copy_tooltip.d.ts +3 -0
- package/lib/cjs/rules/a11y/no_nested_copy_tooltip.d.ts.map +1 -0
- package/lib/cjs/rules/a11y/no_nested_copy_tooltip.js +84 -0
- package/lib/cjs/rules/a11y/tooltip_button_icon_wrap.d.ts.map +1 -1
- package/lib/cjs/rules/a11y/tooltip_button_icon_wrap.js +29 -1
- package/lib/cjs/rules/a11y/tooltip_no_interactive_content.d.ts.map +1 -1
- package/lib/cjs/rules/a11y/tooltip_no_interactive_content.js +17 -45
- package/lib/cjs/rules/button_group_no_invalid_children.d.ts +3 -0
- package/lib/cjs/rules/button_group_no_invalid_children.d.ts.map +1 -0
- package/lib/cjs/rules/button_group_no_invalid_children.js +159 -0
- package/lib/cjs/rules/callout_prefer_props_for_content.d.ts.map +1 -1
- package/lib/cjs/rules/callout_prefer_props_for_content.js +93 -156
- package/lib/cjs/rules/no_deprecated_icon_aliases.d.ts +174 -0
- package/lib/cjs/rules/no_deprecated_icon_aliases.d.ts.map +1 -0
- package/lib/cjs/rules/no_deprecated_icon_aliases.js +302 -0
- package/lib/cjs/utils/flat_map.d.ts +2 -0
- package/lib/cjs/utils/flat_map.d.ts.map +1 -0
- package/lib/cjs/utils/flat_map.js +24 -0
- package/lib/cjs/utils/has_meaningful_attr.d.ts +20 -0
- package/lib/cjs/utils/has_meaningful_attr.d.ts.map +1 -0
- package/lib/cjs/utils/has_meaningful_attr.js +61 -0
- package/lib/cjs/utils/is_fragment.d.ts +8 -0
- package/lib/cjs/utils/is_fragment.d.ts.map +1 -0
- package/lib/cjs/utils/is_fragment.js +26 -0
- package/lib/cjs/utils/walk_jsx_children.d.ts +30 -0
- package/lib/cjs/utils/walk_jsx_children.d.ts.map +1 -0
- package/lib/cjs/utils/walk_jsx_children.js +210 -0
- package/lib/esm/index.js +9 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/rules/a11y/no_nested_copy_tooltip.d.ts +2 -0
- package/lib/esm/rules/a11y/no_nested_copy_tooltip.js +84 -0
- package/lib/esm/rules/a11y/no_nested_copy_tooltip.js.map +1 -0
- package/lib/esm/rules/a11y/tooltip_button_icon_wrap.js +31 -0
- package/lib/esm/rules/a11y/tooltip_button_icon_wrap.js.map +1 -1
- package/lib/esm/rules/a11y/tooltip_no_interactive_content.js +19 -42
- package/lib/esm/rules/a11y/tooltip_no_interactive_content.js.map +1 -1
- package/lib/esm/rules/button_group_no_invalid_children.d.ts +2 -0
- package/lib/esm/rules/button_group_no_invalid_children.js +198 -0
- package/lib/esm/rules/button_group_no_invalid_children.js.map +1 -0
- package/lib/esm/rules/callout_prefer_props_for_content.js +75 -112
- package/lib/esm/rules/callout_prefer_props_for_content.js.map +1 -1
- package/lib/esm/rules/no_deprecated_icon_aliases.d.ts +173 -0
- package/lib/esm/rules/no_deprecated_icon_aliases.js +307 -0
- package/lib/esm/rules/no_deprecated_icon_aliases.js.map +1 -0
- package/lib/esm/utils/flat_map.d.ts +1 -0
- package/lib/esm/utils/flat_map.js +22 -0
- package/lib/esm/utils/flat_map.js.map +1 -0
- package/lib/esm/utils/has_meaningful_attr.d.ts +19 -0
- package/lib/esm/utils/has_meaningful_attr.js +55 -0
- package/lib/esm/utils/has_meaningful_attr.js.map +1 -0
- package/lib/esm/utils/is_fragment.d.ts +7 -0
- package/lib/esm/utils/is_fragment.js +26 -0
- package/lib/esm/utils/is_fragment.js.map +1 -0
- package/lib/esm/utils/walk_jsx_children.d.ts +29 -0
- package/lib/esm/utils/walk_jsx_children.js +213 -0
- package/lib/esm/utils/walk_jsx_children.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
|
6
|
+
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
|
7
|
+
* Side Public License, v 1.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.walkJsxChildren = walkJsxChildren;
|
|
11
|
+
const flat_map_1 = require("./flat_map");
|
|
12
|
+
const is_fragment_1 = require("./is_fragment");
|
|
13
|
+
// A variable is only safely resolvable if it is never reassigned. A second
|
|
14
|
+
// write means the value at the point of use can't be determined statically.
|
|
15
|
+
function isReassigned(variable) {
|
|
16
|
+
return variable.references.filter((ref) => ref.isWrite()).length > 1;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolves an expression-context Identifier to the node its variable was
|
|
20
|
+
* initialized with (e.g. the `<EuiButton />` in `const btn = <EuiButton />`).
|
|
21
|
+
* Returns null for anything that can't be resolved safely: imports, function
|
|
22
|
+
* parameters, reassigned variables, or missing initializers.
|
|
23
|
+
*/
|
|
24
|
+
function resolveIdentifierValue(sourceCode, node) {
|
|
25
|
+
let scope = sourceCode.getScope(node);
|
|
26
|
+
while (scope) {
|
|
27
|
+
const ref = scope.references.find((r) => r.identifier === node);
|
|
28
|
+
if (ref) {
|
|
29
|
+
const variable = ref.resolved;
|
|
30
|
+
if (!variable || isReassigned(variable))
|
|
31
|
+
return null;
|
|
32
|
+
const def = variable.defs[0];
|
|
33
|
+
if (!def || def.type !== 'Variable' || !def.node.init)
|
|
34
|
+
return null;
|
|
35
|
+
return def.node.init;
|
|
36
|
+
}
|
|
37
|
+
scope = scope.upper;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Collects all return-statement arguments within a block body, recursing into
|
|
43
|
+
* `if`/`else` branches and `switch` cases. Does not recurse into nested
|
|
44
|
+
* functions - those have their own return scope. Used to validate block-body
|
|
45
|
+
* arrow functions.
|
|
46
|
+
*/
|
|
47
|
+
function collectReturnValues(node) {
|
|
48
|
+
switch (node.type) {
|
|
49
|
+
case 'BlockStatement':
|
|
50
|
+
return (0, flat_map_1.flatMap)(node.body, collectReturnValues);
|
|
51
|
+
case 'ReturnStatement':
|
|
52
|
+
return node.argument ? [node.argument] : [];
|
|
53
|
+
case 'IfStatement':
|
|
54
|
+
return [
|
|
55
|
+
...collectReturnValues(node.consequent),
|
|
56
|
+
...(node.alternate ? collectReturnValues(node.alternate) : []),
|
|
57
|
+
];
|
|
58
|
+
case 'SwitchStatement':
|
|
59
|
+
return (0, flat_map_1.flatMap)(node.cases, (c) => (0, flat_map_1.flatMap)(c.consequent, collectReturnValues));
|
|
60
|
+
default:
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolves a JSX component name (e.g. `Buttons` in `<Buttons />`) to the
|
|
66
|
+
* nodes returned by its local arrow-function definition, if one exists.
|
|
67
|
+
*
|
|
68
|
+
* Handles both expression-body (`() => <expr>`) and block-body
|
|
69
|
+
* (`() => { return <expr>; }`) arrow functions. Imports, class components,
|
|
70
|
+
* and reassigned variables return null — those stay opaque.
|
|
71
|
+
*/
|
|
72
|
+
function resolveLocalComponent(sourceCode, name, refNode) {
|
|
73
|
+
let scope = sourceCode.getScope(refNode);
|
|
74
|
+
while (scope) {
|
|
75
|
+
const variable = scope.variables.find((v) => v.name === name);
|
|
76
|
+
if (variable) {
|
|
77
|
+
if (isReassigned(variable))
|
|
78
|
+
return null;
|
|
79
|
+
const def = variable.defs[0];
|
|
80
|
+
if (!def || def.type !== 'Variable' || !def.node.init)
|
|
81
|
+
return null;
|
|
82
|
+
const init = def.node.init;
|
|
83
|
+
if (init.type !== 'ArrowFunctionExpression')
|
|
84
|
+
return null;
|
|
85
|
+
if (init.body.type !== 'BlockStatement')
|
|
86
|
+
return [init.body];
|
|
87
|
+
const returns = collectReturnValues(init.body);
|
|
88
|
+
return returns.length > 0 ? returns : null;
|
|
89
|
+
}
|
|
90
|
+
scope = scope.upper;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
function walkJsxChild(node, visit, sourceCode, visited, shouldSkip) {
|
|
95
|
+
const walk = (n) => walkJsxChild(n, visit, sourceCode, visited, shouldSkip);
|
|
96
|
+
switch (node.type) {
|
|
97
|
+
case 'JSXElement': {
|
|
98
|
+
if ((0, is_fragment_1.isFragment)(node.openingElement)) {
|
|
99
|
+
node.children.forEach(walk);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (sourceCode) {
|
|
103
|
+
const { name } = node.openingElement;
|
|
104
|
+
if (name.type === 'JSXIdentifier' && !visited.has(name.name)) {
|
|
105
|
+
const resolved = resolveLocalComponent(sourceCode, name.name, node.openingElement);
|
|
106
|
+
if (resolved !== null) {
|
|
107
|
+
visited.add(name.name);
|
|
108
|
+
resolved.forEach(walk);
|
|
109
|
+
visited.delete(name.name);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (shouldSkip?.(node)) {
|
|
115
|
+
node.children.forEach(walk);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
visit(node);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
case 'JSXFragment':
|
|
122
|
+
node.children.forEach(walk);
|
|
123
|
+
return;
|
|
124
|
+
case 'JSXExpressionContainer':
|
|
125
|
+
if (node.expression.type !== 'JSXEmptyExpression')
|
|
126
|
+
walk(node.expression);
|
|
127
|
+
return;
|
|
128
|
+
case 'LogicalExpression':
|
|
129
|
+
walk(node.left);
|
|
130
|
+
walk(node.right);
|
|
131
|
+
return;
|
|
132
|
+
case 'ConditionalExpression':
|
|
133
|
+
walk(node.consequent);
|
|
134
|
+
walk(node.alternate);
|
|
135
|
+
return;
|
|
136
|
+
case 'ArrayExpression':
|
|
137
|
+
node.elements.forEach((el) => {
|
|
138
|
+
if (el && el.type !== 'SpreadElement')
|
|
139
|
+
walk(el);
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
case 'Identifier':
|
|
143
|
+
if (sourceCode) {
|
|
144
|
+
const resolved = resolveIdentifierValue(sourceCode, node);
|
|
145
|
+
if (resolved) {
|
|
146
|
+
walk(resolved);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
case 'ArrowFunctionExpression':
|
|
152
|
+
if (node.body.type !== 'BlockStatement') {
|
|
153
|
+
walk(node.body);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
collectReturnValues(node.body).forEach(walk);
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
case 'CallExpression': {
|
|
160
|
+
const { callee, arguments: args } = node;
|
|
161
|
+
if (callee.type === 'MemberExpression' &&
|
|
162
|
+
callee.property.type === 'Identifier' &&
|
|
163
|
+
callee.property.name === 'map' &&
|
|
164
|
+
args.length >= 1 &&
|
|
165
|
+
args[0].type === 'ArrowFunctionExpression') {
|
|
166
|
+
const fn = args[0];
|
|
167
|
+
if (fn.body.type !== 'BlockStatement') {
|
|
168
|
+
walk(fn.body);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
collectReturnValues(fn.body).forEach(walk);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
case 'JSXText':
|
|
177
|
+
case 'Literal':
|
|
178
|
+
case 'TemplateLiteral':
|
|
179
|
+
case 'MemberExpression':
|
|
180
|
+
visit(node);
|
|
181
|
+
return;
|
|
182
|
+
default:
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Recursively walks JSX children, expanding structural nodes transparently
|
|
188
|
+
* and calling `visit` for each content node.
|
|
189
|
+
*
|
|
190
|
+
* Always expanded (structural nodes):
|
|
191
|
+
* - `<>...</>`, `<Fragment>`, `<React.Fragment>` (transparent grouping)
|
|
192
|
+
* - `{expr}` (JSXExpressionContainer)
|
|
193
|
+
* - `{a && b}`, `{a || b}`, `{a ?? b}` (LogicalExpression → both sides)
|
|
194
|
+
* - `{c ? a : b}` (ConditionalExpression → both branches)
|
|
195
|
+
* - `{[a, b]}` (ArrayExpression → each element)
|
|
196
|
+
* - `{(arg) => <El />}` (ArrowFunctionExpression)
|
|
197
|
+
* - `{arr.map(fn)}` (CallExpression `.map()` with arrow-fn callback)
|
|
198
|
+
*
|
|
199
|
+
* With `options.sourceCode`: Identifiers and local arrow-fn components are
|
|
200
|
+
* also expanded via scope lookup when resolvable.
|
|
201
|
+
*
|
|
202
|
+
* `options.shouldSkip` - when provided, called for each JSXElement reached
|
|
203
|
+
* (after fragment and local-component checks). Returning true skips the
|
|
204
|
+
* element itself and recurses into its children instead. Use this to make
|
|
205
|
+
* layout wrappers or non-interactive shells transparent to the visitor.
|
|
206
|
+
*
|
|
207
|
+
* `visit` is called for leaf nodes: JSXElement, JSXText, Literal,
|
|
208
|
+
* TemplateLiteral, MemberExpression.
|
|
209
|
+
*/
|
|
210
|
+
function walkJsxChildren(node, visit, options = {}) {
|
|
211
|
+
walkJsxChild(node, visit, options.sourceCode, new Set(), options.shouldSkip);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=walk_jsx_children.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk_jsx_children.js","sourceRoot":"","sources":["../../../src/utils/walk_jsx_children.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA6NH,0CAeC;AAzOD,yCAAqC;AACrC,+CAA2C;AAE3C,2EAA2E;AAC3E,4EAA4E;AAC5E,SAAS,YAAY,CAAC,QAAiC;IACrD,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAC7B,UAA+B,EAC/B,IAAyB;IAEzB,IAAI,KAAK,GAAgC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;QAChE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,CAAC;QACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,IAAmB;IAC9C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,gBAAgB;YACnB,OAAO,IAAA,kBAAO,EAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACjD,KAAK,iBAAiB;YACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,KAAK,aAAa;YAChB,OAAO;gBACL,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO,IAAA,kBAAO,EAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAC/B,IAAA,kBAAO,EAAC,CAAC,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAC3C,CAAC;QACJ;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAC5B,UAA+B,EAC/B,IAAY,EACZ,OAAsB;IAEtB,IAAI,KAAK,GAAgC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtE,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,YAAY,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB;gBAAE,OAAO,IAAI,CAAC;YACzD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,CAAC;QACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CACnB,IAAmB,EACnB,KAAoC,EACpC,UAA2C,EAC3C,OAAoB,EACpB,UAA8D;IAE9D,MAAM,IAAI,GAAG,CAAC,CAAgB,EAAE,EAAE,CAChC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAE1D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,IAAA,wBAAU,EAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;gBACrC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7D,MAAM,QAAQ,GAAG,qBAAqB,CACpC,UAAU,EACV,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,CACpB,CAAC;oBACF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACvB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC1B,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QACD,KAAK,aAAa;YAChB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;QACT,KAAK,wBAAwB;YAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,oBAAoB;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzE,OAAO;QACT,KAAK,mBAAmB;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACT,KAAK,uBAAuB;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,OAAO;QACT,KAAK,iBAAiB;YACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC3B,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe;oBAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YACH,OAAO;QACT,KAAK,YAAY;YACf,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;YACH,CAAC;YACD,OAAO;QACT,KAAK,yBAAyB;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO;QACT,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YACzC,IACE,MAAM,CAAC,IAAI,KAAK,kBAAkB;gBAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;gBACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK;gBAC9B,IAAI,CAAC,MAAM,IAAI,CAAC;gBAChB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,yBAAyB,EAC1C,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACtC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB;YACrB,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO;QACT;YACE,OAAO;IACX,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,eAAe,CAC7B,IAAmB,EACnB,KAAoC,EACpC,UAGI,EAAE;IAEN,YAAY,CACV,IAAI,EACJ,KAAK,EACL,OAAO,CAAC,UAAU,EAClB,IAAI,GAAG,EAAU,EACjB,OAAO,CAAC,UAAU,CACnB,CAAC;AACJ,CAAC"}
|