@backstage-community/plugin-rbac 1.32.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/CHANGELOG.md +761 -0
  2. package/README.md +106 -0
  3. package/app-config.yaml +19 -0
  4. package/dist/api/LicensedUsersClient.esm.js +45 -0
  5. package/dist/api/LicensedUsersClient.esm.js.map +1 -0
  6. package/dist/api/RBACBackendClient.esm.js +337 -0
  7. package/dist/api/RBACBackendClient.esm.js.map +1 -0
  8. package/dist/components/Administration.esm.js +23 -0
  9. package/dist/components/Administration.esm.js.map +1 -0
  10. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +23 -0
  11. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -0
  12. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +149 -0
  13. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -0
  14. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +62 -0
  15. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -0
  16. package/dist/components/ConditionalAccess/ConditionRule.esm.js +34 -0
  17. package/dist/components/ConditionalAccess/ConditionRule.esm.js.map +1 -0
  18. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +93 -0
  19. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -0
  20. package/dist/components/ConditionalAccess/ConditionsForm.esm.js +204 -0
  21. package/dist/components/ConditionalAccess/ConditionsForm.esm.js.map +1 -0
  22. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +459 -0
  23. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -0
  24. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +209 -0
  25. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -0
  26. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js +33 -0
  27. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js.map +1 -0
  28. package/dist/components/ConditionalAccess/CustomArrayField.esm.js +47 -0
  29. package/dist/components/ConditionalAccess/CustomArrayField.esm.js.map +1 -0
  30. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js +24 -0
  31. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js.map +1 -0
  32. package/dist/components/ConditionalAccess/const.esm.js +21 -0
  33. package/dist/components/ConditionalAccess/const.esm.js.map +1 -0
  34. package/dist/components/ConditionalAccess/types.esm.js +8 -0
  35. package/dist/components/ConditionalAccess/types.esm.js.map +1 -0
  36. package/dist/components/CreateRole/AddMembersForm.esm.js +94 -0
  37. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -0
  38. package/dist/components/CreateRole/AddedMembersTable.esm.js +31 -0
  39. package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -0
  40. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +77 -0
  41. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -0
  42. package/dist/components/CreateRole/CreateRolePage.esm.js +53 -0
  43. package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -0
  44. package/dist/components/CreateRole/EditRolePage.esm.js +65 -0
  45. package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -0
  46. package/dist/components/CreateRole/MembersDropdownOption.esm.js +40 -0
  47. package/dist/components/CreateRole/MembersDropdownOption.esm.js.map +1 -0
  48. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +144 -0
  49. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -0
  50. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +179 -0
  51. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -0
  52. package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js +76 -0
  53. package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js.map +1 -0
  54. package/dist/components/CreateRole/ReviewStep.esm.js +50 -0
  55. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -0
  56. package/dist/components/CreateRole/ReviewStepTable.esm.js +29 -0
  57. package/dist/components/CreateRole/ReviewStepTable.esm.js.map +1 -0
  58. package/dist/components/CreateRole/RoleDetailsForm.esm.js +57 -0
  59. package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -0
  60. package/dist/components/CreateRole/RoleForm.esm.js +271 -0
  61. package/dist/components/CreateRole/RoleForm.esm.js.map +1 -0
  62. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js +34 -0
  63. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -0
  64. package/dist/components/CreateRole/const.esm.js +14 -0
  65. package/dist/components/CreateRole/const.esm.js.map +1 -0
  66. package/dist/components/DownloadUserStatistics.esm.js +51 -0
  67. package/dist/components/DownloadUserStatistics.esm.js.map +1 -0
  68. package/dist/components/EditRole.esm.js +30 -0
  69. package/dist/components/EditRole.esm.js.map +1 -0
  70. package/dist/components/RbacPage.esm.js +18 -0
  71. package/dist/components/RbacPage.esm.js.map +1 -0
  72. package/dist/components/RoleOverview/AboutCard.esm.js +89 -0
  73. package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -0
  74. package/dist/components/RoleOverview/MembersCard.esm.js +87 -0
  75. package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -0
  76. package/dist/components/RoleOverview/MembersListColumns.esm.js +48 -0
  77. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -0
  78. package/dist/components/RoleOverview/PermissionsCard.esm.js +99 -0
  79. package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -0
  80. package/dist/components/RoleOverview/PermissionsListColumns.esm.js +43 -0
  81. package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -0
  82. package/dist/components/RoleOverview/RoleOverviewPage.esm.js +49 -0
  83. package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -0
  84. package/dist/components/RolesList/DeleteRole.esm.js +32 -0
  85. package/dist/components/RolesList/DeleteRole.esm.js.map +1 -0
  86. package/dist/components/RolesList/DeleteRoleDialog.esm.js +142 -0
  87. package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -0
  88. package/dist/components/RolesList/RolesList.esm.js +102 -0
  89. package/dist/components/RolesList/RolesList.esm.js.map +1 -0
  90. package/dist/components/RolesList/RolesListColumns.esm.js +76 -0
  91. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -0
  92. package/dist/components/RolesList/RolesListToolbar.esm.js +48 -0
  93. package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -0
  94. package/dist/components/Router.esm.js +57 -0
  95. package/dist/components/Router.esm.js.map +1 -0
  96. package/dist/components/SnackbarAlert.esm.js +23 -0
  97. package/dist/components/SnackbarAlert.esm.js.map +1 -0
  98. package/dist/components/ToastContext.esm.js +19 -0
  99. package/dist/components/ToastContext.esm.js.map +1 -0
  100. package/dist/components/index.esm.js +5 -0
  101. package/dist/components/index.esm.js.map +1 -0
  102. package/dist/hooks/useCheckIfLicensePluginEnabled.esm.js +20 -0
  103. package/dist/hooks/useCheckIfLicensePluginEnabled.esm.js.map +1 -0
  104. package/dist/hooks/useConditionRules.esm.js +64 -0
  105. package/dist/hooks/useConditionRules.esm.js.map +1 -0
  106. package/dist/hooks/useLocationToast.esm.js +15 -0
  107. package/dist/hooks/useLocationToast.esm.js.map +1 -0
  108. package/dist/hooks/useMembers.esm.js +92 -0
  109. package/dist/hooks/useMembers.esm.js.map +1 -0
  110. package/dist/hooks/usePermissionPolicies.esm.js +80 -0
  111. package/dist/hooks/usePermissionPolicies.esm.js.map +1 -0
  112. package/dist/hooks/useRole.esm.js +23 -0
  113. package/dist/hooks/useRole.esm.js.map +1 -0
  114. package/dist/hooks/useRoles.esm.js +169 -0
  115. package/dist/hooks/useRoles.esm.js.map +1 -0
  116. package/dist/hooks/useSelectedMembers.esm.js +39 -0
  117. package/dist/hooks/useSelectedMembers.esm.js.map +1 -0
  118. package/dist/index.d.ts +17 -0
  119. package/dist/index.esm.js +4 -0
  120. package/dist/index.esm.js.map +1 -0
  121. package/dist/plugin.esm.js +49 -0
  122. package/dist/plugin.esm.js.map +1 -0
  123. package/dist/routes.esm.js +23 -0
  124. package/dist/routes.esm.js.map +1 -0
  125. package/dist/utils/conditional-access-utils.esm.js +268 -0
  126. package/dist/utils/conditional-access-utils.esm.js.map +1 -0
  127. package/dist/utils/create-role-utils.esm.js +231 -0
  128. package/dist/utils/create-role-utils.esm.js.map +1 -0
  129. package/dist/utils/rbac-utils.esm.js +256 -0
  130. package/dist/utils/rbac-utils.esm.js.map +1 -0
  131. package/dist/utils/role-form-utils.esm.js +66 -0
  132. package/dist/utils/role-form-utils.esm.js.map +1 -0
  133. package/package.json +120 -0
@@ -0,0 +1,459 @@
1
+ import React from 'react';
2
+ import { useTheme, RadioGroup, FormControlLabel, Radio, IconButton } from '@material-ui/core';
3
+ import AddIcon from '@mui/icons-material/Add';
4
+ import RemoveIcon from '@mui/icons-material/Remove';
5
+ import Box from '@mui/material/Box';
6
+ import Button from '@mui/material/Button';
7
+ import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
8
+ import { makeConditionsFormRowStyles, extractNestedConditions, getDefaultRule, ruleOptionDisabled, isNestedConditionRule, resetErrors, isSimpleRule, getSimpleRulesCount, getNestedConditionSimpleRulesCount, nestedConditionButtons } from '../../utils/conditional-access-utils.esm.js';
9
+ import { AddNestedConditionButton } from './AddNestedConditionButton.esm.js';
10
+ import { ComplexConditionRow } from './ComplexConditionRow.esm.js';
11
+ import { ComplexConditionRowButtons } from './ComplexConditionRowButtons.esm.js';
12
+ import { ConditionRule } from './ConditionRule.esm.js';
13
+ import { ConditionsFormRowFields } from './ConditionsFormRowFields.esm.js';
14
+ import { criterias, conditionButtons } from './const.esm.js';
15
+ import { CriteriaToggleButton } from './CriteriaToggleButton.esm.js';
16
+ import { NotConditionType } from './types.esm.js';
17
+
18
+ const ConditionsFormRow = ({
19
+ conditionRulesData,
20
+ conditionRow,
21
+ selPluginResourceType,
22
+ criteria,
23
+ onRuleChange,
24
+ setCriteria,
25
+ setErrors,
26
+ setRemoveAllClicked
27
+ }) => {
28
+ const classes = makeConditionsFormRowStyles();
29
+ const theme = useTheme();
30
+ const [nestedConditionRow, setNestedConditionRow] = React.useState([]);
31
+ const [notConditionType, setNotConditionType] = React.useState(NotConditionType.SimpleCondition);
32
+ React.useEffect(() => {
33
+ const nestedConditions = [];
34
+ const criteriaTypes = [criterias.allOf, criterias.anyOf, criterias.not];
35
+ switch (criteria) {
36
+ case criterias.allOf:
37
+ extractNestedConditions(
38
+ conditionRow.allOf || [],
39
+ criteriaTypes,
40
+ nestedConditions
41
+ );
42
+ break;
43
+ case criterias.anyOf:
44
+ extractNestedConditions(
45
+ conditionRow.anyOf || [],
46
+ criteriaTypes,
47
+ nestedConditions
48
+ );
49
+ break;
50
+ case criterias.not:
51
+ if (conditionRow.not && criteriaTypes.includes(
52
+ Object.keys(conditionRow.not)[0]
53
+ )) {
54
+ nestedConditions.push(conditionRow.not);
55
+ setNotConditionType(NotConditionType.NestedCondition);
56
+ }
57
+ break;
58
+ }
59
+ setNestedConditionRow(nestedConditions);
60
+ }, [conditionRow, criteria]);
61
+ const handleCriteriaChange = (val) => {
62
+ setCriteria(val);
63
+ setErrors(resetErrors(val));
64
+ const defaultRule = getDefaultRule(selPluginResourceType);
65
+ const ruleMap = {
66
+ [criterias.condition]: { condition: defaultRule },
67
+ [criterias.allOf]: { allOf: [defaultRule] },
68
+ [criterias.anyOf]: { anyOf: [defaultRule] },
69
+ [criterias.not]: { not: defaultRule }
70
+ };
71
+ if (val === criterias.not) {
72
+ setNotConditionType(NotConditionType.SimpleCondition);
73
+ }
74
+ const ruleChange = ruleMap[val];
75
+ if (ruleChange) {
76
+ onRuleChange(ruleChange);
77
+ }
78
+ };
79
+ const updateRules = (updatedNestedConditionRow) => {
80
+ const existingSimpleCondition = criteria !== criterias.not ? conditionRow[criteria]?.filter(
81
+ (con) => isSimpleRule(con)
82
+ ) || [] : [];
83
+ const newCondition = Array.isArray(updatedNestedConditionRow) ? [...existingSimpleCondition, ...updatedNestedConditionRow] : [...existingSimpleCondition, updatedNestedConditionRow];
84
+ if (criteria === criterias.anyOf || criteria === criterias.allOf) {
85
+ onRuleChange({
86
+ [criteria]: newCondition
87
+ });
88
+ } else if (criteria === criterias.not && !Array.isArray(updatedNestedConditionRow)) {
89
+ onRuleChange({
90
+ not: updatedNestedConditionRow
91
+ });
92
+ }
93
+ };
94
+ const handleNestedConditionCriteriaChange = (val, nestedConditionIndex) => {
95
+ const defaultRule = getDefaultRule(selPluginResourceType);
96
+ const nestedConditionMap = {
97
+ [criterias.not]: { [val]: defaultRule },
98
+ [criterias.allOf]: { [val]: [defaultRule] },
99
+ [criterias.anyOf]: { [val]: [defaultRule] },
100
+ [criterias.condition]: { [val]: [defaultRule] }
101
+ };
102
+ const newCondition = nestedConditionMap[val] || { [val]: [defaultRule] };
103
+ setErrors((prevErrors) => {
104
+ const updatedErrors = { ...prevErrors };
105
+ if (updatedErrors[criteria] !== void 0) {
106
+ if (criteria === criterias.not) {
107
+ updatedErrors[criteria] = val !== criterias.not ? { [val]: [""] } : { [val]: "" };
108
+ return updatedErrors;
109
+ }
110
+ const criteriaErrors = updatedErrors[criteria];
111
+ const simpleRuleErrors = criteriaErrors.filter(
112
+ (err) => typeof err === "string"
113
+ );
114
+ const nestedConditionErrors = criteriaErrors.filter((err) => typeof err !== "string");
115
+ nestedConditionErrors[nestedConditionIndex] = val !== criterias.not ? { [val]: [""] } : { [val]: "" };
116
+ updatedErrors[criteria] = [
117
+ ...simpleRuleErrors,
118
+ ...nestedConditionErrors
119
+ ];
120
+ }
121
+ return updatedErrors;
122
+ });
123
+ if (criteria === criterias.not) {
124
+ updateRules(newCondition);
125
+ } else {
126
+ const updatedNestedConditionRow = nestedConditionRow.map((c, index) => {
127
+ if (index === nestedConditionIndex) {
128
+ return newCondition;
129
+ }
130
+ return c;
131
+ });
132
+ updateRules(updatedNestedConditionRow);
133
+ }
134
+ };
135
+ const handleAddNestedCondition = (currentCriteria) => {
136
+ const newNestedCondition = {
137
+ [criterias.allOf]: [getDefaultRule(selPluginResourceType)]
138
+ };
139
+ const updatedNestedConditionRow = [
140
+ ...nestedConditionRow,
141
+ newNestedCondition
142
+ ];
143
+ updateRules(
144
+ currentCriteria === criterias.not ? newNestedCondition : updatedNestedConditionRow
145
+ );
146
+ setErrors((prevErrors) => {
147
+ const updatedErrors = { ...prevErrors };
148
+ if (updatedErrors[currentCriteria]) {
149
+ const criteriaErrors = updatedErrors[currentCriteria];
150
+ if (Array.isArray(criteriaErrors)) {
151
+ criteriaErrors.push({ [criterias.allOf]: [""] });
152
+ } else {
153
+ updatedErrors[currentCriteria] = {
154
+ [criterias.allOf]: [""]
155
+ };
156
+ }
157
+ }
158
+ return updatedErrors;
159
+ });
160
+ };
161
+ const handleNotConditionTypeChange = (val) => {
162
+ setNotConditionType(val);
163
+ setErrors(resetErrors(criteria, val));
164
+ if (val === "nested-condition") {
165
+ handleAddNestedCondition(criterias.not);
166
+ } else {
167
+ onRuleChange({
168
+ not: getDefaultRule(selPluginResourceType)
169
+ });
170
+ }
171
+ };
172
+ const handleAddRuleInNestedCondition = (nestedConditionCriteria, nestedConditionIndex) => {
173
+ const updatedNestedConditionRow = [];
174
+ nestedConditionRow.forEach((c, index) => {
175
+ if (index === nestedConditionIndex) {
176
+ updatedNestedConditionRow.push({
177
+ [nestedConditionCriteria]: [
178
+ ...c[nestedConditionCriteria] || [],
179
+ getDefaultRule(selPluginResourceType)
180
+ ]
181
+ });
182
+ } else {
183
+ updatedNestedConditionRow.push(c);
184
+ }
185
+ });
186
+ updateRules(
187
+ criteria === criterias.not ? updatedNestedConditionRow[0] : updatedNestedConditionRow
188
+ );
189
+ setErrors((prevErrors) => {
190
+ const updatedErrors = { ...prevErrors };
191
+ if (updatedErrors[criteria] !== void 0) {
192
+ const criteriaErrors = updatedErrors[criteria];
193
+ if (criteria === criterias.not && notConditionType === "nested-condition") {
194
+ criteriaErrors[nestedConditionCriteria].push("");
195
+ return updatedErrors;
196
+ }
197
+ const simpleRuleErrors = criteriaErrors.filter(
198
+ (err) => typeof err === "string"
199
+ );
200
+ const nestedConditionErrors = criteriaErrors.filter((err) => typeof err !== "string");
201
+ (nestedConditionErrors[nestedConditionIndex][nestedConditionCriteria] || []).push("");
202
+ updatedErrors[criteria] = [
203
+ ...simpleRuleErrors,
204
+ ...nestedConditionErrors
205
+ ];
206
+ }
207
+ return updatedErrors;
208
+ });
209
+ };
210
+ const handleRemoveNestedCondition = (nestedConditionIndex) => {
211
+ const updatedNestedConditionRow = nestedConditionRow.filter(
212
+ (_, index) => index !== nestedConditionIndex
213
+ );
214
+ updateRules(updatedNestedConditionRow);
215
+ setErrors((prevErrors) => {
216
+ const updatedErrors = { ...prevErrors };
217
+ if (updatedErrors[criteria] !== void 0) {
218
+ const criteriaErrors = updatedErrors[criteria];
219
+ const simpleRuleErrors = criteriaErrors.filter(
220
+ (err) => typeof err === "string"
221
+ );
222
+ const nestedConditionErrors = criteriaErrors.filter(
223
+ (err) => typeof err !== "string"
224
+ );
225
+ nestedConditionErrors.splice(nestedConditionIndex, 1);
226
+ updatedErrors[criteria] = [
227
+ ...simpleRuleErrors,
228
+ ...nestedConditionErrors
229
+ ];
230
+ }
231
+ return updatedErrors;
232
+ });
233
+ };
234
+ const updateErrors = (_index) => {
235
+ setErrors((prevErrors) => {
236
+ const updatedErrors = { ...prevErrors };
237
+ if (!Array.isArray(updatedErrors[criteria])) {
238
+ updatedErrors[criteria] = [];
239
+ }
240
+ const firstNestedConditionErrorIndex = updatedErrors[criteria].findIndex(
241
+ (e) => typeof e !== "string"
242
+ ) || 0;
243
+ updatedErrors[criteria].splice(
244
+ firstNestedConditionErrorIndex,
245
+ 0,
246
+ ""
247
+ );
248
+ return updatedErrors;
249
+ });
250
+ };
251
+ const renderNestedConditionRow = (nc, nestedConditionIndex) => {
252
+ const selectedNestedConditionCriteria = Object.keys(nc)[0];
253
+ const simpleRulesCount = getSimpleRulesCount(conditionRow, criteria);
254
+ const nestedConditionsCount = nestedConditionRow.length;
255
+ const nestedConditionSimpleRulesCount = getNestedConditionSimpleRulesCount(
256
+ nc,
257
+ selectedNestedConditionCriteria
258
+ );
259
+ return nestedConditionSimpleRulesCount > 0 && /* @__PURE__ */ React.createElement(
260
+ Box,
261
+ {
262
+ mt: 2,
263
+ className: classes.nestedConditionRow,
264
+ key: `nestedCondition-${nestedConditionIndex}`
265
+ },
266
+ /* @__PURE__ */ React.createElement("div", { style: { display: "flex", justifyContent: "space-between" } }, /* @__PURE__ */ React.createElement(
267
+ ToggleButtonGroup,
268
+ {
269
+ exclusive: true,
270
+ value: selectedNestedConditionCriteria,
271
+ onChange: (_event, newNestedCriteria) => handleNestedConditionCriteriaChange(
272
+ newNestedCriteria,
273
+ nestedConditionIndex
274
+ ),
275
+ className: classes.nestedConditioncriteriaButtonGroup
276
+ },
277
+ nestedConditionButtons.map(({ val, label }) => /* @__PURE__ */ React.createElement(
278
+ CriteriaToggleButton,
279
+ {
280
+ key: `nested-criteria-${val}`,
281
+ val,
282
+ label,
283
+ selectedCriteria: selectedNestedConditionCriteria,
284
+ theme
285
+ }
286
+ ))
287
+ ), criteria !== criterias.not && /* @__PURE__ */ React.createElement(
288
+ IconButton,
289
+ {
290
+ title: "Remove nested condition",
291
+ className: classes.removeNestedRuleButton,
292
+ disabled: simpleRulesCount === 0 && nestedConditionsCount === 1,
293
+ onClick: () => handleRemoveNestedCondition(nestedConditionIndex)
294
+ },
295
+ /* @__PURE__ */ React.createElement(RemoveIcon, { "data-testid": "remove-nested-condition" })
296
+ )),
297
+ /* @__PURE__ */ React.createElement(Box, null, selectedNestedConditionCriteria !== criterias.not && nc[selectedNestedConditionCriteria].map((c, ncrIndex) => /* @__PURE__ */ React.createElement(
298
+ ComplexConditionRow,
299
+ {
300
+ key: `nested-condition-${nestedConditionIndex}-${ncrIndex}`,
301
+ conditionRow,
302
+ nestedConditionRow,
303
+ criteria,
304
+ onRuleChange,
305
+ updateRules,
306
+ setErrors,
307
+ setRemoveAllClicked,
308
+ conditionRulesData,
309
+ notConditionType,
310
+ classes,
311
+ currentCondition: c,
312
+ ruleIndex: ncrIndex,
313
+ isNestedCondition: true,
314
+ nestedConditionIndex,
315
+ activeNestedCriteria: selectedNestedConditionCriteria
316
+ }
317
+ )), selectedNestedConditionCriteria === criterias.not && nc.not.resourceType && /* @__PURE__ */ React.createElement(
318
+ ConditionsFormRowFields,
319
+ {
320
+ oldCondition: nc.not ?? getDefaultRule(selPluginResourceType),
321
+ onRuleChange,
322
+ conditionRow,
323
+ criteria,
324
+ conditionRulesData,
325
+ setErrors,
326
+ optionDisabled: (ruleOption) => ruleOptionDisabled(
327
+ ruleOption,
328
+ nc.not ? [nc.not] : void 0
329
+ ),
330
+ setRemoveAllClicked,
331
+ nestedConditionRow,
332
+ nestedConditionCriteria: selectedNestedConditionCriteria,
333
+ nestedConditionIndex,
334
+ updateRules
335
+ }
336
+ ), selectedNestedConditionCriteria !== criterias.not && /* @__PURE__ */ React.createElement(
337
+ Button,
338
+ {
339
+ className: classes.addRuleButton,
340
+ size: "small",
341
+ onClick: () => handleAddRuleInNestedCondition(
342
+ selectedNestedConditionCriteria,
343
+ nestedConditionIndex
344
+ )
345
+ },
346
+ /* @__PURE__ */ React.createElement(AddIcon, { fontSize: "small" }),
347
+ "Add rule"
348
+ ))
349
+ );
350
+ };
351
+ return /* @__PURE__ */ React.createElement(Box, { className: classes.conditionRow, "data-testid": "conditions-row" }, /* @__PURE__ */ React.createElement(
352
+ ToggleButtonGroup,
353
+ {
354
+ exclusive: true,
355
+ value: criteria,
356
+ onChange: (_event, newCriteria) => handleCriteriaChange(newCriteria),
357
+ className: classes.criteriaButtonGroup
358
+ },
359
+ conditionButtons.map(({ val, label }) => /* @__PURE__ */ React.createElement(
360
+ CriteriaToggleButton,
361
+ {
362
+ key: `criteria-${val}`,
363
+ val,
364
+ label,
365
+ selectedCriteria: criteria,
366
+ theme
367
+ }
368
+ ))
369
+ ), /* @__PURE__ */ React.createElement(
370
+ ConditionRule,
371
+ {
372
+ conditionRow,
373
+ selPluginResourceType,
374
+ onRuleChange,
375
+ criteria,
376
+ conditionRulesData,
377
+ setErrors,
378
+ setRemoveAllClicked
379
+ }
380
+ ), criteria !== criterias.condition && /* @__PURE__ */ React.createElement(Box, null, criteria !== criterias.not && conditionRow[criteria]?.map(
381
+ (c, srIndex) => /* @__PURE__ */ React.createElement(
382
+ ComplexConditionRow,
383
+ {
384
+ key: `${criteria}-simple-condition-${srIndex}`,
385
+ conditionRow,
386
+ nestedConditionRow,
387
+ criteria,
388
+ onRuleChange,
389
+ updateRules,
390
+ setErrors,
391
+ setRemoveAllClicked,
392
+ conditionRulesData,
393
+ notConditionType,
394
+ classes,
395
+ currentCondition: c,
396
+ ruleIndex: srIndex,
397
+ activeCriteria: criteria
398
+ }
399
+ )
400
+ ), criteria === criterias.not && /* @__PURE__ */ React.createElement(
401
+ RadioGroup,
402
+ {
403
+ className: classes.radioGroup,
404
+ value: notConditionType,
405
+ onChange: (_event, value) => handleNotConditionTypeChange(value)
406
+ },
407
+ /* @__PURE__ */ React.createElement(
408
+ FormControlLabel,
409
+ {
410
+ value: NotConditionType.SimpleCondition,
411
+ control: /* @__PURE__ */ React.createElement(Radio, { color: "primary" }),
412
+ label: "Add rule",
413
+ className: classes.radioLabel
414
+ }
415
+ ),
416
+ notConditionType === NotConditionType.SimpleCondition && /* @__PURE__ */ React.createElement(
417
+ ConditionsFormRowFields,
418
+ {
419
+ oldCondition: conditionRow.not ?? getDefaultRule(selPluginResourceType),
420
+ onRuleChange,
421
+ conditionRow,
422
+ criteria,
423
+ conditionRulesData,
424
+ setErrors,
425
+ optionDisabled: (ruleOption) => ruleOptionDisabled(
426
+ ruleOption,
427
+ conditionRow.not ? [conditionRow.not] : void 0
428
+ ),
429
+ setRemoveAllClicked
430
+ }
431
+ ),
432
+ /* @__PURE__ */ React.createElement(
433
+ FormControlLabel,
434
+ {
435
+ value: NotConditionType.NestedCondition,
436
+ control: /* @__PURE__ */ React.createElement(Radio, { color: "primary" }),
437
+ label: /* @__PURE__ */ React.createElement(AddNestedConditionButton, null),
438
+ className: classes.radioLabel
439
+ }
440
+ )
441
+ ), /* @__PURE__ */ React.createElement(
442
+ ComplexConditionRowButtons,
443
+ {
444
+ conditionRow,
445
+ onRuleChange,
446
+ criteria,
447
+ classes,
448
+ selPluginResourceType,
449
+ updateErrors,
450
+ isNestedConditionRule,
451
+ handleAddNestedCondition
452
+ }
453
+ ), nestedConditionRow?.length > 0 && nestedConditionRow.map(
454
+ (nc, nestedConditionIndex) => renderNestedConditionRow(nc, nestedConditionIndex)
455
+ )));
456
+ };
457
+
458
+ export { ConditionsFormRow };
459
+ //# sourceMappingURL=ConditionsFormRow.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConditionsFormRow.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionsFormRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport {\n FormControlLabel,\n IconButton,\n Radio,\n RadioGroup,\n useTheme,\n} from '@material-ui/core';\nimport AddIcon from '@mui/icons-material/Add';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\n\nimport {\n extractNestedConditions,\n getDefaultRule,\n getNestedConditionSimpleRulesCount,\n getSimpleRulesCount,\n isNestedConditionRule,\n isSimpleRule,\n makeConditionsFormRowStyles,\n nestedConditionButtons,\n resetErrors,\n ruleOptionDisabled,\n} from '../../utils/conditional-access-utils';\nimport { AddNestedConditionButton } from './AddNestedConditionButton';\nimport { ComplexConditionRow } from './ComplexConditionRow';\nimport { ComplexConditionRowButtons } from './ComplexConditionRowButtons';\nimport { ConditionRule } from './ConditionRule';\nimport { ConditionsFormRowFields } from './ConditionsFormRowFields';\nimport { conditionButtons, criterias } from './const';\nimport { CriteriaToggleButton } from './CriteriaToggleButton';\nimport {\n ComplexErrors,\n Condition,\n ConditionFormRowProps,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n} from './types';\n\nexport const ConditionsFormRow = ({\n conditionRulesData,\n conditionRow,\n selPluginResourceType,\n criteria,\n onRuleChange,\n setCriteria,\n setErrors,\n setRemoveAllClicked,\n}: ConditionFormRowProps) => {\n const classes = makeConditionsFormRowStyles();\n const theme = useTheme();\n const [nestedConditionRow, setNestedConditionRow] = React.useState<\n Condition[]\n >([]);\n const [notConditionType, setNotConditionType] =\n React.useState<NotConditionType>(NotConditionType.SimpleCondition);\n\n React.useEffect(() => {\n const nestedConditions: Condition[] = [];\n const criteriaTypes = [criterias.allOf, criterias.anyOf, criterias.not];\n switch (criteria) {\n case criterias.allOf:\n extractNestedConditions(\n conditionRow.allOf || [],\n criteriaTypes,\n nestedConditions,\n );\n break;\n case criterias.anyOf:\n extractNestedConditions(\n conditionRow.anyOf || [],\n criteriaTypes,\n nestedConditions,\n );\n break;\n case criterias.not:\n if (\n conditionRow.not &&\n criteriaTypes.includes(\n Object.keys(conditionRow.not)[0] as keyof ConditionsData,\n )\n ) {\n nestedConditions.push(conditionRow.not);\n setNotConditionType(NotConditionType.NestedCondition);\n }\n break;\n default:\n break;\n }\n\n setNestedConditionRow(nestedConditions);\n }, [conditionRow, criteria]);\n\n const handleCriteriaChange = (val: keyof ConditionsData) => {\n setCriteria(val);\n setErrors(resetErrors(val));\n\n const defaultRule = getDefaultRule(selPluginResourceType);\n\n const ruleMap = {\n [criterias.condition]: { condition: defaultRule },\n [criterias.allOf]: { allOf: [defaultRule] },\n [criterias.anyOf]: { anyOf: [defaultRule] },\n [criterias.not]: { not: defaultRule },\n };\n\n if (val === criterias.not) {\n setNotConditionType(NotConditionType.SimpleCondition);\n }\n\n const ruleChange = ruleMap[val];\n if (ruleChange) {\n onRuleChange(ruleChange);\n }\n };\n\n const updateRules = (updatedNestedConditionRow: Condition[] | Condition) => {\n const existingSimpleCondition =\n criteria !== criterias.not\n ? (conditionRow[criteria as keyof Condition] as Condition[])?.filter(\n con => isSimpleRule(con),\n ) || []\n : [];\n\n const newCondition: Condition[] = Array.isArray(updatedNestedConditionRow)\n ? [...existingSimpleCondition, ...updatedNestedConditionRow]\n : [...existingSimpleCondition, updatedNestedConditionRow];\n\n if (criteria === criterias.anyOf || criteria === criterias.allOf) {\n onRuleChange({\n [criteria]: newCondition,\n });\n } else if (\n criteria === criterias.not &&\n !Array.isArray(updatedNestedConditionRow)\n ) {\n onRuleChange({\n not: updatedNestedConditionRow,\n });\n }\n };\n\n const handleNestedConditionCriteriaChange = (\n val: string,\n nestedConditionIndex: number,\n ) => {\n const defaultRule = getDefaultRule(selPluginResourceType);\n\n const nestedConditionMap = {\n [criterias.not]: { [val]: defaultRule },\n [criterias.allOf]: { [val]: [defaultRule] },\n [criterias.anyOf]: { [val]: [defaultRule] },\n [criterias.condition]: { [val]: [defaultRule] },\n };\n\n const newCondition = nestedConditionMap[val] || { [val]: [defaultRule] };\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[criteria] !== undefined) {\n if (criteria === criterias.not) {\n (updatedErrors[criteria] as ComplexErrors) =\n val !== criterias.not ? { [val]: [''] } : { [val]: '' };\n return updatedErrors;\n }\n const criteriaErrors = updatedErrors[criteria];\n const simpleRuleErrors = (criteriaErrors as ComplexErrors[]).filter(\n (err: ComplexErrors) => typeof err === 'string',\n );\n const nestedConditionErrors = (\n criteriaErrors as ComplexErrors[]\n ).filter((err: ComplexErrors) => typeof err !== 'string');\n nestedConditionErrors[nestedConditionIndex] =\n val !== criterias.not ? { [val]: [''] } : { [val]: '' };\n updatedErrors[criteria] = [\n ...simpleRuleErrors,\n ...nestedConditionErrors,\n ];\n }\n\n return updatedErrors;\n });\n\n if (criteria === criterias.not) {\n updateRules(newCondition);\n } else {\n const updatedNestedConditionRow = nestedConditionRow.map((c, index) => {\n if (index === nestedConditionIndex) {\n return newCondition;\n }\n return c;\n });\n updateRules(updatedNestedConditionRow);\n }\n };\n\n const handleAddNestedCondition = (currentCriteria: string) => {\n const newNestedCondition = {\n [criterias.allOf]: [getDefaultRule(selPluginResourceType)],\n };\n const updatedNestedConditionRow = [\n ...nestedConditionRow,\n newNestedCondition,\n ];\n updateRules(\n currentCriteria === criterias.not\n ? newNestedCondition\n : updatedNestedConditionRow,\n );\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n if (updatedErrors[currentCriteria]) {\n const criteriaErrors = updatedErrors[\n currentCriteria\n ] as ComplexErrors[];\n if (Array.isArray(criteriaErrors)) {\n criteriaErrors.push({ [criterias.allOf]: [''] });\n } else {\n (updatedErrors[currentCriteria] as ComplexErrors) = {\n [criterias.allOf]: [''],\n };\n }\n }\n return updatedErrors;\n });\n };\n\n const handleNotConditionTypeChange = (val: NotConditionType) => {\n setNotConditionType(val);\n setErrors(resetErrors(criteria, val));\n if (val === 'nested-condition') {\n handleAddNestedCondition(criterias.not);\n } else {\n onRuleChange({\n not: getDefaultRule(selPluginResourceType),\n });\n }\n };\n\n const handleAddRuleInNestedCondition = (\n nestedConditionCriteria: string,\n nestedConditionIndex: number,\n ) => {\n const updatedNestedConditionRow: Condition[] = [];\n\n nestedConditionRow.forEach((c, index) => {\n if (index === nestedConditionIndex) {\n updatedNestedConditionRow.push({\n [nestedConditionCriteria as keyof Condition]: [\n ...((c[\n nestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]) || []),\n getDefaultRule(selPluginResourceType),\n ],\n });\n } else {\n updatedNestedConditionRow.push(c);\n }\n });\n updateRules(\n criteria === criterias.not\n ? updatedNestedConditionRow[0]\n : updatedNestedConditionRow,\n );\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n if (updatedErrors[criteria] !== undefined) {\n const criteriaErrors = updatedErrors[criteria];\n if (\n criteria === criterias.not &&\n notConditionType === 'nested-condition'\n ) {\n (\n (criteriaErrors as NestedCriteriaErrors)[\n nestedConditionCriteria\n ] as string[]\n ).push('');\n return updatedErrors;\n }\n const simpleRuleErrors = (criteriaErrors as ComplexErrors[]).filter(\n (err: ComplexErrors) => typeof err === 'string',\n );\n const nestedConditionErrors = (\n criteriaErrors as ComplexErrors[]\n ).filter((err: ComplexErrors) => typeof err !== 'string');\n\n (\n ((\n nestedConditionErrors[nestedConditionIndex] as NestedCriteriaErrors\n )[nestedConditionCriteria] as string[]) || []\n ).push('');\n updatedErrors[criteria] = [\n ...simpleRuleErrors,\n ...nestedConditionErrors,\n ];\n }\n return updatedErrors;\n });\n };\n\n const handleRemoveNestedCondition = (nestedConditionIndex: number) => {\n const updatedNestedConditionRow = nestedConditionRow.filter(\n (_, index) => index !== nestedConditionIndex,\n );\n\n updateRules(updatedNestedConditionRow);\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[criteria] !== undefined) {\n const criteriaErrors = updatedErrors[criteria] as ComplexErrors[];\n const simpleRuleErrors = criteriaErrors.filter(\n (err: ComplexErrors) => typeof err === 'string',\n );\n const nestedConditionErrors = criteriaErrors.filter(\n (err: ComplexErrors) => typeof err !== 'string',\n );\n nestedConditionErrors.splice(nestedConditionIndex, 1);\n\n updatedErrors[criteria] = [\n ...simpleRuleErrors,\n ...nestedConditionErrors,\n ];\n }\n\n return updatedErrors;\n });\n };\n\n const updateErrors = (_index: number) => {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (!Array.isArray(updatedErrors[criteria])) {\n updatedErrors[criteria] = [];\n }\n\n const firstNestedConditionErrorIndex =\n (updatedErrors[criteria] as ComplexErrors[]).findIndex(\n e => typeof e !== 'string',\n ) || 0;\n\n (updatedErrors[criteria] as ComplexErrors[]).splice(\n firstNestedConditionErrorIndex,\n 0,\n '',\n );\n\n return updatedErrors;\n });\n };\n\n const renderNestedConditionRow = (\n nc: Condition,\n nestedConditionIndex: number,\n ) => {\n const selectedNestedConditionCriteria = Object.keys(nc)[0];\n const simpleRulesCount = getSimpleRulesCount(conditionRow, criteria);\n const nestedConditionsCount = nestedConditionRow.length;\n const nestedConditionSimpleRulesCount = getNestedConditionSimpleRulesCount(\n nc,\n selectedNestedConditionCriteria,\n );\n return (\n nestedConditionSimpleRulesCount > 0 && (\n <Box\n mt={2}\n className={classes.nestedConditionRow}\n key={`nestedCondition-${nestedConditionIndex}`}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <ToggleButtonGroup\n exclusive\n value={selectedNestedConditionCriteria}\n onChange={(_event, newNestedCriteria) =>\n handleNestedConditionCriteriaChange(\n newNestedCriteria,\n nestedConditionIndex,\n )\n }\n className={classes.nestedConditioncriteriaButtonGroup}\n >\n {nestedConditionButtons.map(({ val, label }) => (\n <CriteriaToggleButton\n key={`nested-criteria-${val}`}\n val={val}\n label={label}\n selectedCriteria={selectedNestedConditionCriteria}\n theme={theme}\n />\n ))}\n </ToggleButtonGroup>\n {criteria !== criterias.not && (\n <IconButton\n title=\"Remove nested condition\"\n className={classes.removeNestedRuleButton}\n disabled={simpleRulesCount === 0 && nestedConditionsCount === 1} // 0 simple rules and this is the only 1 nested condition\n onClick={() =>\n handleRemoveNestedCondition(nestedConditionIndex)\n }\n >\n <RemoveIcon data-testid=\"remove-nested-condition\" />\n </IconButton>\n )}\n </div>\n <Box>\n {selectedNestedConditionCriteria !== criterias.not &&\n (\n nc[\n selectedNestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]\n ).map((c, ncrIndex) => (\n <ComplexConditionRow\n key={`nested-condition-${nestedConditionIndex}-${ncrIndex}`}\n conditionRow={conditionRow}\n nestedConditionRow={nestedConditionRow}\n criteria={criteria}\n onRuleChange={onRuleChange}\n updateRules={updateRules}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n conditionRulesData={conditionRulesData}\n notConditionType={notConditionType}\n classes={classes}\n currentCondition={c}\n ruleIndex={ncrIndex}\n isNestedCondition\n nestedConditionIndex={nestedConditionIndex}\n activeNestedCriteria={\n selectedNestedConditionCriteria as 'allOf' | 'anyOf'\n }\n />\n ))}\n {selectedNestedConditionCriteria === criterias.not &&\n ((nc as ConditionsData).not as PermissionCondition)\n .resourceType && (\n <ConditionsFormRowFields\n oldCondition={\n (nc as ConditionsData).not ??\n getDefaultRule(selPluginResourceType)\n }\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n optionDisabled={ruleOption =>\n ruleOptionDisabled(\n ruleOption,\n (nc as ConditionsData).not\n ? [(nc as ConditionsData).not as PermissionCondition]\n : undefined,\n )\n }\n setRemoveAllClicked={setRemoveAllClicked}\n nestedConditionRow={nestedConditionRow}\n nestedConditionCriteria={selectedNestedConditionCriteria}\n nestedConditionIndex={nestedConditionIndex}\n updateRules={updateRules}\n />\n )}\n {selectedNestedConditionCriteria !== criterias.not && (\n <Button\n className={classes.addRuleButton}\n size=\"small\"\n onClick={() =>\n handleAddRuleInNestedCondition(\n selectedNestedConditionCriteria,\n nestedConditionIndex,\n )\n }\n >\n <AddIcon fontSize=\"small\" />\n Add rule\n </Button>\n )}\n </Box>\n </Box>\n )\n );\n };\n\n return (\n <Box className={classes.conditionRow} data-testid=\"conditions-row\">\n <ToggleButtonGroup\n exclusive\n value={criteria}\n onChange={(_event, newCriteria) => handleCriteriaChange(newCriteria)}\n className={classes.criteriaButtonGroup}\n >\n {conditionButtons.map(({ val, label }) => (\n <CriteriaToggleButton\n key={`criteria-${val}`}\n val={val}\n label={label}\n selectedCriteria={criteria}\n theme={theme}\n />\n ))}\n </ToggleButtonGroup>\n <ConditionRule\n conditionRow={conditionRow}\n selPluginResourceType={selPluginResourceType}\n onRuleChange={onRuleChange}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n />\n {criteria !== criterias.condition && (\n <Box>\n {criteria !== criterias.not &&\n (conditionRow[criteria] as PermissionCondition[])?.map(\n (c, srIndex) => (\n <ComplexConditionRow\n key={`${criteria}-simple-condition-${srIndex}`}\n conditionRow={conditionRow}\n nestedConditionRow={nestedConditionRow}\n criteria={criteria}\n onRuleChange={onRuleChange}\n updateRules={updateRules}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n conditionRulesData={conditionRulesData}\n notConditionType={notConditionType}\n classes={classes}\n currentCondition={c}\n ruleIndex={srIndex}\n activeCriteria={criteria as 'allOf' | 'anyOf'}\n />\n ),\n )}\n {criteria === criterias.not && (\n <RadioGroup\n className={classes.radioGroup}\n value={notConditionType}\n onChange={(_event, value) =>\n handleNotConditionTypeChange(value as NotConditionType)\n }\n >\n <FormControlLabel\n value={NotConditionType.SimpleCondition}\n control={<Radio color=\"primary\" />}\n label=\"Add rule\"\n className={classes.radioLabel}\n />\n {notConditionType === NotConditionType.SimpleCondition && (\n <ConditionsFormRowFields\n oldCondition={\n conditionRow.not ?? getDefaultRule(selPluginResourceType)\n }\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n optionDisabled={ruleOption =>\n ruleOptionDisabled(\n ruleOption,\n conditionRow.not\n ? [conditionRow.not as PermissionCondition]\n : undefined,\n )\n }\n setRemoveAllClicked={setRemoveAllClicked}\n />\n )}\n <FormControlLabel\n value={NotConditionType.NestedCondition}\n control={<Radio color=\"primary\" />}\n label={<AddNestedConditionButton />}\n className={classes.radioLabel}\n />\n </RadioGroup>\n )}\n <ComplexConditionRowButtons\n conditionRow={conditionRow}\n onRuleChange={onRuleChange}\n criteria={criteria}\n classes={classes}\n selPluginResourceType={selPluginResourceType}\n updateErrors={updateErrors}\n isNestedConditionRule={isNestedConditionRule}\n handleAddNestedCondition={handleAddNestedCondition}\n />\n {nestedConditionRow?.length > 0 &&\n nestedConditionRow.map((nc, nestedConditionIndex) =>\n renderNestedConditionRow(nc, nestedConditionIndex),\n )}\n </Box>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA4DO,MAAM,oBAAoB,CAAC;AAAA,EAChC,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,mBAAA;AACF,CAA6B,KAAA;AAC3B,EAAA,MAAM,UAAU,2BAA4B,EAAA,CAAA;AAC5C,EAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AACvB,EAAA,MAAM,CAAC,kBAAoB,EAAA,qBAAqB,IAAI,KAAM,CAAA,QAAA,CAExD,EAAE,CAAA,CAAA;AACJ,EAAA,MAAM,CAAC,gBAAkB,EAAA,mBAAmB,IAC1C,KAAM,CAAA,QAAA,CAA2B,iBAAiB,eAAe,CAAA,CAAA;AAEnE,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,mBAAgC,EAAC,CAAA;AACvC,IAAA,MAAM,gBAAgB,CAAC,SAAA,CAAU,OAAO,SAAU,CAAA,KAAA,EAAO,UAAU,GAAG,CAAA,CAAA;AACtE,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAK,SAAU,CAAA,KAAA;AACb,QAAA,uBAAA;AAAA,UACE,YAAA,CAAa,SAAS,EAAC;AAAA,UACvB,aAAA;AAAA,UACA,gBAAA;AAAA,SACF,CAAA;AACA,QAAA,MAAA;AAAA,MACF,KAAK,SAAU,CAAA,KAAA;AACb,QAAA,uBAAA;AAAA,UACE,YAAA,CAAa,SAAS,EAAC;AAAA,UACvB,aAAA;AAAA,UACA,gBAAA;AAAA,SACF,CAAA;AACA,QAAA,MAAA;AAAA,MACF,KAAK,SAAU,CAAA,GAAA;AACb,QACE,IAAA,YAAA,CAAa,OACb,aAAc,CAAA,QAAA;AAAA,UACZ,MAAO,CAAA,IAAA,CAAK,YAAa,CAAA,GAAG,EAAE,CAAC,CAAA;AAAA,SAEjC,EAAA;AACA,UAAiB,gBAAA,CAAA,IAAA,CAAK,aAAa,GAAG,CAAA,CAAA;AACtC,UAAA,mBAAA,CAAoB,iBAAiB,eAAe,CAAA,CAAA;AAAA,SACtD;AACA,QAAA,MAAA;AAEA,KACJ;AAEA,IAAA,qBAAA,CAAsB,gBAAgB,CAAA,CAAA;AAAA,GACrC,EAAA,CAAC,YAAc,EAAA,QAAQ,CAAC,CAAA,CAAA;AAE3B,EAAM,MAAA,oBAAA,GAAuB,CAAC,GAA8B,KAAA;AAC1D,IAAA,WAAA,CAAY,GAAG,CAAA,CAAA;AACf,IAAU,SAAA,CAAA,WAAA,CAAY,GAAG,CAAC,CAAA,CAAA;AAE1B,IAAM,MAAA,WAAA,GAAc,eAAe,qBAAqB,CAAA,CAAA;AAExD,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,CAAC,SAAU,CAAA,SAAS,GAAG,EAAE,WAAW,WAAY,EAAA;AAAA,MAChD,CAAC,UAAU,KAAK,GAAG,EAAE,KAAO,EAAA,CAAC,WAAW,CAAE,EAAA;AAAA,MAC1C,CAAC,UAAU,KAAK,GAAG,EAAE,KAAO,EAAA,CAAC,WAAW,CAAE,EAAA;AAAA,MAC1C,CAAC,SAAU,CAAA,GAAG,GAAG,EAAE,KAAK,WAAY,EAAA;AAAA,KACtC,CAAA;AAEA,IAAI,IAAA,GAAA,KAAQ,UAAU,GAAK,EAAA;AACzB,MAAA,mBAAA,CAAoB,iBAAiB,eAAe,CAAA,CAAA;AAAA,KACtD;AAEA,IAAM,MAAA,UAAA,GAAa,QAAQ,GAAG,CAAA,CAAA;AAC9B,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,KACzB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,yBAAuD,KAAA;AAC1E,IAAA,MAAM,0BACJ,QAAa,KAAA,SAAA,CAAU,GAClB,GAAA,YAAA,CAAa,QAA2B,CAAmB,EAAA,MAAA;AAAA,MAC1D,CAAA,GAAA,KAAO,aAAa,GAAG,CAAA;AAAA,KACzB,IAAK,EAAC,GACN,EAAC,CAAA;AAEP,IAAA,MAAM,YAA4B,GAAA,KAAA,CAAM,OAAQ,CAAA,yBAAyB,IACrE,CAAC,GAAG,uBAAyB,EAAA,GAAG,yBAAyB,CAAA,GACzD,CAAC,GAAG,yBAAyB,yBAAyB,CAAA,CAAA;AAE1D,IAAA,IAAI,QAAa,KAAA,SAAA,CAAU,KAAS,IAAA,QAAA,KAAa,UAAU,KAAO,EAAA;AAChE,MAAa,YAAA,CAAA;AAAA,QACX,CAAC,QAAQ,GAAG,YAAA;AAAA,OACb,CAAA,CAAA;AAAA,KACH,MAAA,IACE,aAAa,SAAU,CAAA,GAAA,IACvB,CAAC,KAAM,CAAA,OAAA,CAAQ,yBAAyB,CACxC,EAAA;AACA,MAAa,YAAA,CAAA;AAAA,QACX,GAAK,EAAA,yBAAA;AAAA,OACN,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,mCAAA,GAAsC,CAC1C,GAAA,EACA,oBACG,KAAA;AACH,IAAM,MAAA,WAAA,GAAc,eAAe,qBAAqB,CAAA,CAAA;AAExD,IAAA,MAAM,kBAAqB,GAAA;AAAA,MACzB,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,WAAY,EAAA;AAAA,MACtC,CAAC,SAAU,CAAA,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,CAAE,EAAA;AAAA,MAC1C,CAAC,SAAU,CAAA,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,CAAE,EAAA;AAAA,MAC1C,CAAC,SAAU,CAAA,SAAS,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,CAAE,EAAA;AAAA,KAChD,CAAA;AAEA,IAAM,MAAA,YAAA,GAAe,kBAAmB,CAAA,GAAG,CAAK,IAAA,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,CAAE,EAAA,CAAA;AAEvE,IAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,MAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA,CAAA;AAEtC,MAAI,IAAA,aAAA,CAAc,QAAQ,CAAA,KAAM,KAAW,CAAA,EAAA;AACzC,QAAI,IAAA,QAAA,KAAa,UAAU,GAAK,EAAA;AAC9B,UAAC,cAAc,QAAQ,CAAA,GACrB,QAAQ,SAAU,CAAA,GAAA,GAAM,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAE,EAAA,GAAI,EAAE,CAAC,GAAG,GAAG,EAAG,EAAA,CAAA;AACxD,UAAO,OAAA,aAAA,CAAA;AAAA,SACT;AACA,QAAM,MAAA,cAAA,GAAiB,cAAc,QAAQ,CAAA,CAAA;AAC7C,QAAA,MAAM,mBAAoB,cAAmC,CAAA,MAAA;AAAA,UAC3D,CAAC,GAAuB,KAAA,OAAO,GAAQ,KAAA,QAAA;AAAA,SACzC,CAAA;AACA,QAAA,MAAM,wBACJ,cACA,CAAA,MAAA,CAAO,CAAC,GAAuB,KAAA,OAAO,QAAQ,QAAQ,CAAA,CAAA;AACxD,QAAA,qBAAA,CAAsB,oBAAoB,CACxC,GAAA,GAAA,KAAQ,SAAU,CAAA,GAAA,GAAM,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAE,EAAA,GAAI,EAAE,CAAC,GAAG,GAAG,EAAG,EAAA,CAAA;AACxD,QAAA,aAAA,CAAc,QAAQ,CAAI,GAAA;AAAA,UACxB,GAAG,gBAAA;AAAA,UACH,GAAG,qBAAA;AAAA,SACL,CAAA;AAAA,OACF;AAEA,MAAO,OAAA,aAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAED,IAAI,IAAA,QAAA,KAAa,UAAU,GAAK,EAAA;AAC9B,MAAA,WAAA,CAAY,YAAY,CAAA,CAAA;AAAA,KACnB,MAAA;AACL,MAAA,MAAM,yBAA4B,GAAA,kBAAA,CAAmB,GAAI,CAAA,CAAC,GAAG,KAAU,KAAA;AACrE,QAAA,IAAI,UAAU,oBAAsB,EAAA;AAClC,UAAO,OAAA,YAAA,CAAA;AAAA,SACT;AACA,QAAO,OAAA,CAAA,CAAA;AAAA,OACR,CAAA,CAAA;AACD,MAAA,WAAA,CAAY,yBAAyB,CAAA,CAAA;AAAA,KACvC;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,wBAAA,GAA2B,CAAC,eAA4B,KAAA;AAC5D,IAAA,MAAM,kBAAqB,GAAA;AAAA,MACzB,CAAC,SAAU,CAAA,KAAK,GAAG,CAAC,cAAA,CAAe,qBAAqB,CAAC,CAAA;AAAA,KAC3D,CAAA;AACA,IAAA,MAAM,yBAA4B,GAAA;AAAA,MAChC,GAAG,kBAAA;AAAA,MACH,kBAAA;AAAA,KACF,CAAA;AACA,IAAA,WAAA;AAAA,MACE,eAAA,KAAoB,SAAU,CAAA,GAAA,GAC1B,kBACA,GAAA,yBAAA;AAAA,KACN,CAAA;AAEA,IAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,MAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA,CAAA;AACtC,MAAI,IAAA,aAAA,CAAc,eAAe,CAAG,EAAA;AAClC,QAAM,MAAA,cAAA,GAAiB,cACrB,eACF,CAAA,CAAA;AACA,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,cAAc,CAAG,EAAA;AACjC,UAAe,cAAA,CAAA,IAAA,CAAK,EAAE,CAAC,SAAA,CAAU,KAAK,GAAG,CAAC,EAAE,CAAA,EAAG,CAAA,CAAA;AAAA,SAC1C,MAAA;AACL,UAAC,aAAA,CAAc,eAAe,CAAsB,GAAA;AAAA,YAClD,CAAC,SAAA,CAAU,KAAK,GAAG,CAAC,EAAE,CAAA;AAAA,WACxB,CAAA;AAAA,SACF;AAAA,OACF;AACA,MAAO,OAAA,aAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,4BAAA,GAA+B,CAAC,GAA0B,KAAA;AAC9D,IAAA,mBAAA,CAAoB,GAAG,CAAA,CAAA;AACvB,IAAU,SAAA,CAAA,WAAA,CAAY,QAAU,EAAA,GAAG,CAAC,CAAA,CAAA;AACpC,IAAA,IAAI,QAAQ,kBAAoB,EAAA;AAC9B,MAAA,wBAAA,CAAyB,UAAU,GAAG,CAAA,CAAA;AAAA,KACjC,MAAA;AACL,MAAa,YAAA,CAAA;AAAA,QACX,GAAA,EAAK,eAAe,qBAAqB,CAAA;AAAA,OAC1C,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,8BAAA,GAAiC,CACrC,uBAAA,EACA,oBACG,KAAA;AACH,IAAA,MAAM,4BAAyC,EAAC,CAAA;AAEhD,IAAmB,kBAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAU,KAAA;AACvC,MAAA,IAAI,UAAU,oBAAsB,EAAA;AAClC,QAAA,yBAAA,CAA0B,IAAK,CAAA;AAAA,UAC7B,CAAC,uBAA0C,GAAG;AAAA,YAC5C,GAAK,CAAA,CACH,uBACF,CAAA,IAA+B,EAAC;AAAA,YAChC,eAAe,qBAAqB,CAAA;AAAA,WACtC;AAAA,SACD,CAAA,CAAA;AAAA,OACI,MAAA;AACL,QAAA,yBAAA,CAA0B,KAAK,CAAC,CAAA,CAAA;AAAA,OAClC;AAAA,KACD,CAAA,CAAA;AACD,IAAA,WAAA;AAAA,MACE,QAAa,KAAA,SAAA,CAAU,GACnB,GAAA,yBAAA,CAA0B,CAAC,CAC3B,GAAA,yBAAA;AAAA,KACN,CAAA;AAEA,IAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,MAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA,CAAA;AACtC,MAAI,IAAA,aAAA,CAAc,QAAQ,CAAA,KAAM,KAAW,CAAA,EAAA;AACzC,QAAM,MAAA,cAAA,GAAiB,cAAc,QAAQ,CAAA,CAAA;AAC7C,QAAA,IACE,QAAa,KAAA,SAAA,CAAU,GACvB,IAAA,gBAAA,KAAqB,kBACrB,EAAA;AACA,UACG,cACC,CAAA,uBACF,CACA,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AACT,UAAO,OAAA,aAAA,CAAA;AAAA,SACT;AACA,QAAA,MAAM,mBAAoB,cAAmC,CAAA,MAAA;AAAA,UAC3D,CAAC,GAAuB,KAAA,OAAO,GAAQ,KAAA,QAAA;AAAA,SACzC,CAAA;AACA,QAAA,MAAM,wBACJ,cACA,CAAA,MAAA,CAAO,CAAC,GAAuB,KAAA,OAAO,QAAQ,QAAQ,CAAA,CAAA;AAExD,QAEI,CAAA,qBAAA,CAAsB,oBAAoB,CAC1C,CAAA,uBAAuB,KAAkB,EAAC,EAC5C,KAAK,EAAE,CAAA,CAAA;AACT,QAAA,aAAA,CAAc,QAAQ,CAAI,GAAA;AAAA,UACxB,GAAG,gBAAA;AAAA,UACH,GAAG,qBAAA;AAAA,SACL,CAAA;AAAA,OACF;AACA,MAAO,OAAA,aAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,2BAAA,GAA8B,CAAC,oBAAiC,KAAA;AACpE,IAAA,MAAM,4BAA4B,kBAAmB,CAAA,MAAA;AAAA,MACnD,CAAC,CAAG,EAAA,KAAA,KAAU,KAAU,KAAA,oBAAA;AAAA,KAC1B,CAAA;AAEA,IAAA,WAAA,CAAY,yBAAyB,CAAA,CAAA;AACrC,IAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,MAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA,CAAA;AAEtC,MAAI,IAAA,aAAA,CAAc,QAAQ,CAAA,KAAM,KAAW,CAAA,EAAA;AACzC,QAAM,MAAA,cAAA,GAAiB,cAAc,QAAQ,CAAA,CAAA;AAC7C,QAAA,MAAM,mBAAmB,cAAe,CAAA,MAAA;AAAA,UACtC,CAAC,GAAuB,KAAA,OAAO,GAAQ,KAAA,QAAA;AAAA,SACzC,CAAA;AACA,QAAA,MAAM,wBAAwB,cAAe,CAAA,MAAA;AAAA,UAC3C,CAAC,GAAuB,KAAA,OAAO,GAAQ,KAAA,QAAA;AAAA,SACzC,CAAA;AACA,QAAsB,qBAAA,CAAA,MAAA,CAAO,sBAAsB,CAAC,CAAA,CAAA;AAEpD,QAAA,aAAA,CAAc,QAAQ,CAAI,GAAA;AAAA,UACxB,GAAG,gBAAA;AAAA,UACH,GAAG,qBAAA;AAAA,SACL,CAAA;AAAA,OACF;AAEA,MAAO,OAAA,aAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,MAAmB,KAAA;AACvC,IAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,MAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA,CAAA;AAEtC,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,aAAc,CAAA,QAAQ,CAAC,CAAG,EAAA;AAC3C,QAAc,aAAA,CAAA,QAAQ,IAAI,EAAC,CAAA;AAAA,OAC7B;AAEA,MAAM,MAAA,8BAAA,GACH,aAAc,CAAA,QAAQ,CAAsB,CAAA,SAAA;AAAA,QAC3C,CAAA,CAAA,KAAK,OAAO,CAAM,KAAA,QAAA;AAAA,OACf,IAAA,CAAA,CAAA;AAEP,MAAC,aAAA,CAAc,QAAQ,CAAsB,CAAA,MAAA;AAAA,QAC3C,8BAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,OACF,CAAA;AAEA,MAAO,OAAA,aAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,wBAAA,GAA2B,CAC/B,EAAA,EACA,oBACG,KAAA;AACH,IAAA,MAAM,+BAAkC,GAAA,MAAA,CAAO,IAAK,CAAA,EAAE,EAAE,CAAC,CAAA,CAAA;AACzD,IAAM,MAAA,gBAAA,GAAmB,mBAAoB,CAAA,YAAA,EAAc,QAAQ,CAAA,CAAA;AACnE,IAAA,MAAM,wBAAwB,kBAAmB,CAAA,MAAA,CAAA;AACjD,IAAA,MAAM,+BAAkC,GAAA,kCAAA;AAAA,MACtC,EAAA;AAAA,MACA,+BAAA;AAAA,KACF,CAAA;AACA,IAAA,OACE,kCAAkC,CAChC,oBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA,CAAA;AAAA,QACJ,WAAW,OAAQ,CAAA,kBAAA;AAAA,QACnB,GAAA,EAAK,mBAAmB,oBAAoB,CAAA,CAAA;AAAA,OAAA;AAAA,sBAE5C,KAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,EAAE,SAAS,MAAQ,EAAA,cAAA,EAAgB,iBAC7C,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAS,EAAA,IAAA;AAAA,UACT,KAAO,EAAA,+BAAA;AAAA,UACP,QAAA,EAAU,CAAC,MAAA,EAAQ,iBACjB,KAAA,mCAAA;AAAA,YACE,iBAAA;AAAA,YACA,oBAAA;AAAA,WACF;AAAA,UAEF,WAAW,OAAQ,CAAA,kCAAA;AAAA,SAAA;AAAA,QAElB,uBAAuB,GAAI,CAAA,CAAC,EAAE,GAAA,EAAK,OAClC,qBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,mBAAmB,GAAG,CAAA,CAAA;AAAA,YAC3B,GAAA;AAAA,YACA,KAAA;AAAA,YACA,gBAAkB,EAAA,+BAAA;AAAA,YAClB,KAAA;AAAA,WAAA;AAAA,SAEH,CAAA;AAAA,OACH,EACC,QAAa,KAAA,SAAA,CAAU,GACtB,oBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAM,EAAA,yBAAA;AAAA,UACN,WAAW,OAAQ,CAAA,sBAAA;AAAA,UACnB,QAAA,EAAU,gBAAqB,KAAA,CAAA,IAAK,qBAA0B,KAAA,CAAA;AAAA,UAC9D,OAAA,EAAS,MACP,2BAAA,CAA4B,oBAAoB,CAAA;AAAA,SAAA;AAAA,wBAGlD,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,aAAA,EAAY,yBAA0B,EAAA,CAAA;AAAA,OAGxD,CAAA;AAAA,sBACA,KAAA,CAAA,aAAA,CAAC,GACE,EAAA,IAAA,EAAA,+BAAA,KAAoC,SAAU,CAAA,GAAA,IAE3C,EACE,CAAA,+BACF,CACA,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,QACR,qBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,GAAK,EAAA,CAAA,iBAAA,EAAoB,oBAAoB,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,UACzD,YAAA;AAAA,UACA,kBAAA;AAAA,UACA,QAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA;AAAA,UACA,mBAAA;AAAA,UACA,kBAAA;AAAA,UACA,gBAAA;AAAA,UACA,OAAA;AAAA,UACA,gBAAkB,EAAA,CAAA;AAAA,UAClB,SAAW,EAAA,QAAA;AAAA,UACX,iBAAiB,EAAA,IAAA;AAAA,UACjB,oBAAA;AAAA,UACA,oBACE,EAAA,+BAAA;AAAA,SAAA;AAAA,OAGL,CACF,EAAA,+BAAA,KAAoC,UAAU,GAC3C,IAAA,EAAA,CAAsB,IACrB,YACD,oBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,YACG,EAAA,EAAA,CAAsB,GACvB,IAAA,cAAA,CAAe,qBAAqB,CAAA;AAAA,UAEtC,YAAA;AAAA,UACA,YAAA;AAAA,UACA,QAAA;AAAA,UACA,kBAAA;AAAA,UACA,SAAA;AAAA,UACA,gBAAgB,CACd,UAAA,KAAA,kBAAA;AAAA,YACE,UAAA;AAAA,YACC,EAAsB,CAAA,GAAA,GACnB,CAAE,EAAA,CAAsB,GAA0B,CAClD,GAAA,KAAA,CAAA;AAAA,WACN;AAAA,UAEF,mBAAA;AAAA,UACA,kBAAA;AAAA,UACA,uBAAyB,EAAA,+BAAA;AAAA,UACzB,oBAAA;AAAA,UACA,WAAA;AAAA,SAAA;AAAA,OACF,EAEH,+BAAoC,KAAA,SAAA,CAAU,GAC7C,oBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAQ,CAAA,aAAA;AAAA,UACnB,IAAK,EAAA,OAAA;AAAA,UACL,SAAS,MACP,8BAAA;AAAA,YACE,+BAAA;AAAA,YACA,oBAAA;AAAA,WACF;AAAA,SAAA;AAAA,wBAGF,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAAE,UAAA;AAAA,OAIlC,CAAA;AAAA,KACF,CAAA;AAAA,GAGN,CAAA;AAEA,EAAA,2CACG,GAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,YAAA,EAAc,eAAY,gBAChD,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA,QAAA;AAAA,MACP,QAAU,EAAA,CAAC,MAAQ,EAAA,WAAA,KAAgB,qBAAqB,WAAW,CAAA;AAAA,MACnE,WAAW,OAAQ,CAAA,mBAAA;AAAA,KAAA;AAAA,IAElB,iBAAiB,GAAI,CAAA,CAAC,EAAE,GAAA,EAAK,OAC5B,qBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAY,GAAG,CAAA,CAAA;AAAA,QACpB,GAAA;AAAA,QACA,KAAA;AAAA,QACA,gBAAkB,EAAA,QAAA;AAAA,QAClB,KAAA;AAAA,OAAA;AAAA,KAEH,CAAA;AAAA,GAEH,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,YAAA;AAAA,MACA,qBAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,kBAAA;AAAA,MACA,SAAA;AAAA,MACA,mBAAA;AAAA,KAAA;AAAA,GACF,EACC,QAAa,KAAA,SAAA,CAAU,SACtB,oBAAA,KAAA,CAAA,aAAA,CAAC,GACE,EAAA,IAAA,EAAA,QAAA,KAAa,SAAU,CAAA,GAAA,IACrB,YAAa,CAAA,QAAQ,CAA6B,EAAA,GAAA;AAAA,IACjD,CAAC,GAAG,OACF,qBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,CAAA,EAAG,QAAQ,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA;AAAA,QAC5C,YAAA;AAAA,QACA,kBAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA,mBAAA;AAAA,QACA,kBAAA;AAAA,QACA,gBAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAkB,EAAA,CAAA;AAAA,QAClB,SAAW,EAAA,OAAA;AAAA,QACX,cAAgB,EAAA,QAAA;AAAA,OAAA;AAAA,KAClB;AAAA,GAEJ,EACD,QAAa,KAAA,SAAA,CAAU,GACtB,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,UAAA;AAAA,MACnB,KAAO,EAAA,gBAAA;AAAA,MACP,QAAU,EAAA,CAAC,MAAQ,EAAA,KAAA,KACjB,6BAA6B,KAAyB,CAAA;AAAA,KAAA;AAAA,oBAGxD,KAAA,CAAA,aAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAO,gBAAiB,CAAA,eAAA;AAAA,QACxB,OAAS,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAM,EAAA,EAAA,KAAA,EAAM,SAAU,EAAA,CAAA;AAAA,QAChC,KAAM,EAAA,UAAA;AAAA,QACN,WAAW,OAAQ,CAAA,UAAA;AAAA,OAAA;AAAA,KACrB;AAAA,IACC,gBAAA,KAAqB,iBAAiB,eACrC,oBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,YACE,EAAA,YAAA,CAAa,GAAO,IAAA,cAAA,CAAe,qBAAqB,CAAA;AAAA,QAE1D,YAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA,kBAAA;AAAA,QACA,SAAA;AAAA,QACA,gBAAgB,CACd,UAAA,KAAA,kBAAA;AAAA,UACE,UAAA;AAAA,UACA,YAAa,CAAA,GAAA,GACT,CAAC,YAAA,CAAa,GAA0B,CACxC,GAAA,KAAA,CAAA;AAAA,SACN;AAAA,QAEF,mBAAA;AAAA,OAAA;AAAA,KACF;AAAA,oBAEF,KAAA,CAAA,aAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAO,gBAAiB,CAAA,eAAA;AAAA,QACxB,OAAS,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAM,EAAA,EAAA,KAAA,EAAM,SAAU,EAAA,CAAA;AAAA,QAChC,KAAA,sCAAQ,wBAAyB,EAAA,IAAA,CAAA;AAAA,QACjC,WAAW,OAAQ,CAAA,UAAA;AAAA,OAAA;AAAA,KACrB;AAAA,GAGJ,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,0BAAA;AAAA,IAAA;AAAA,MACC,YAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,qBAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA,wBAAA;AAAA,KAAA;AAAA,GAED,EAAA,kBAAA,EAAoB,MAAS,GAAA,CAAA,IAC5B,kBAAmB,CAAA,GAAA;AAAA,IAAI,CAAC,EAAA,EAAI,oBAC1B,KAAA,wBAAA,CAAyB,IAAI,oBAAoB,CAAA;AAAA,GAEvD,CAEJ,CAAA,CAAA;AAEJ;;;;"}