@backstage-community/plugin-rbac 1.43.0 → 1.45.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 (115) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/alpha.d.ts +179 -0
  3. package/dist/alpha.esm.js +3 -0
  4. package/dist/alpha.esm.js.map +1 -0
  5. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +13 -9
  6. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  7. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +3 -1
  8. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
  9. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +5 -3
  10. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -1
  11. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +5 -3
  12. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
  13. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +7 -5
  14. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
  15. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +4 -2
  16. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
  17. package/dist/components/ConditionalAccess/const.esm.js +6 -12
  18. package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
  19. package/dist/components/CreateRole/AddMembersForm.esm.js +25 -19
  20. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
  21. package/dist/components/CreateRole/AddedMembersTable.esm.js +10 -4
  22. package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -1
  23. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +30 -28
  24. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  25. package/dist/components/CreateRole/CancelDialog.esm.js +8 -9
  26. package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -1
  27. package/dist/components/CreateRole/CreateRolePage.esm.js +8 -6
  28. package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
  29. package/dist/components/CreateRole/EditRolePage.esm.js +9 -7
  30. package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
  31. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +9 -3
  32. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
  33. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +6 -2
  34. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -1
  35. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +8 -4
  36. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
  37. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js +11 -6
  38. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js.map +1 -1
  39. package/dist/components/CreateRole/PluginsDropdown.esm.js +4 -2
  40. package/dist/components/CreateRole/PluginsDropdown.esm.js.map +1 -1
  41. package/dist/components/CreateRole/ReviewStep.esm.js +9 -7
  42. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  43. package/dist/components/CreateRole/RoleDetailsForm.esm.js +8 -6
  44. package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
  45. package/dist/components/CreateRole/RoleForm.esm.js +27 -23
  46. package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
  47. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js +24 -22
  48. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
  49. package/dist/components/DownloadUserStatistics.esm.js +4 -2
  50. package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
  51. package/dist/components/EditRole.esm.js +4 -2
  52. package/dist/components/EditRole.esm.js.map +1 -1
  53. package/dist/components/RbacPage.esm.js +4 -2
  54. package/dist/components/RbacPage.esm.js.map +1 -1
  55. package/dist/components/RoleOverview/AboutCard.esm.js +12 -8
  56. package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
  57. package/dist/components/RoleOverview/MembersCard.esm.js +18 -9
  58. package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
  59. package/dist/components/RoleOverview/MembersListColumns.esm.js +42 -40
  60. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  61. package/dist/components/RoleOverview/PermissionsCard.esm.js +27 -10
  62. package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
  63. package/dist/components/RoleOverview/PermissionsListColumns.esm.js +38 -36
  64. package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
  65. package/dist/components/RoleOverview/RoleOverviewPage.esm.js +3 -1
  66. package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
  67. package/dist/components/RolesList/DeleteRole.esm.js +4 -2
  68. package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
  69. package/dist/components/RolesList/DeleteRoleDialog.esm.js +23 -38
  70. package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
  71. package/dist/components/RolesList/RolesList.esm.js +19 -9
  72. package/dist/components/RolesList/RolesList.esm.js.map +1 -1
  73. package/dist/components/RolesList/RolesListColumns.esm.js +63 -61
  74. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  75. package/dist/components/RolesList/RolesListToolbar.esm.js +20 -10
  76. package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
  77. package/dist/components/Router.esm.js +4 -2
  78. package/dist/components/Router.esm.js.map +1 -1
  79. package/dist/components/Trans.esm.js +22 -0
  80. package/dist/components/Trans.esm.js.map +1 -0
  81. package/dist/hooks/useActionPermissionTooltip.esm.js +10 -5
  82. package/dist/hooks/useActionPermissionTooltip.esm.js.map +1 -1
  83. package/dist/hooks/useLanguage.esm.js +7 -0
  84. package/dist/hooks/useLanguage.esm.js.map +1 -0
  85. package/dist/hooks/useMembers.esm.js +16 -8
  86. package/dist/hooks/useMembers.esm.js.map +1 -1
  87. package/dist/hooks/usePermissionPolicies.esm.js +20 -9
  88. package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
  89. package/dist/hooks/useTranslation.esm.js +8 -0
  90. package/dist/hooks/useTranslation.esm.js.map +1 -0
  91. package/dist/translations/de.esm.js +176 -0
  92. package/dist/translations/de.esm.js.map +1 -0
  93. package/dist/translations/es.esm.js +176 -0
  94. package/dist/translations/es.esm.js.map +1 -0
  95. package/dist/translations/fr.esm.js +176 -0
  96. package/dist/translations/fr.esm.js.map +1 -0
  97. package/dist/translations/index.esm.js +15 -0
  98. package/dist/translations/index.esm.js.map +1 -0
  99. package/dist/translations/it.esm.js +176 -0
  100. package/dist/translations/it.esm.js.map +1 -0
  101. package/dist/translations/ref.esm.js +215 -0
  102. package/dist/translations/ref.esm.js.map +1 -0
  103. package/dist/utils/conditional-access-utils.esm.js +4 -4
  104. package/dist/utils/conditional-access-utils.esm.js.map +1 -1
  105. package/dist/utils/create-role-utils.esm.js +11 -11
  106. package/dist/utils/create-role-utils.esm.js.map +1 -1
  107. package/dist/utils/filter-table-data.esm.js +4 -3
  108. package/dist/utils/filter-table-data.esm.js.map +1 -1
  109. package/dist/utils/rbac-utils.esm.js +23 -19
  110. package/dist/utils/rbac-utils.esm.js.map +1 -1
  111. package/dist/utils/role-form-utils.esm.js +17 -12
  112. package/dist/utils/role-form-utils.esm.js.map +1 -1
  113. package/dist/utils/string-utils.esm.js +2 -2
  114. package/dist/utils/string-utils.esm.js.map +1 -1
  115. package/package.json +34 -20
@@ -13,6 +13,8 @@ import ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
13
13
  import ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
14
14
  import PermissionPoliciesFormNestedRow from './PermissionPoliciesFormNestedRow.esm.js';
15
15
  import Link from '@mui/material/Link';
16
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
17
+ import { useLanguage } from '../../hooks/useLanguage.esm.js';
16
18
 
17
19
  const PermissionPoliciesFormRow = ({
18
20
  rowData,
@@ -25,6 +27,8 @@ const PermissionPoliciesFormRow = ({
25
27
  onRemovePlugin,
26
28
  onAddConditions
27
29
  }) => {
30
+ const { t } = useTranslation();
31
+ const locale = useLanguage();
28
32
  const [currentOpen, setCurrentOpen] = useState(false);
29
33
  useEffect(() => {
30
34
  setCurrentOpen(open);
@@ -44,9 +48,9 @@ const PermissionPoliciesFormRow = ({
44
48
  };
45
49
  const getPermissionCellLabel = (plugin) => {
46
50
  if (permissionPoliciesRows.find((ppr) => ppr.plugin === plugin)) {
47
- return "Edit...";
51
+ return t("common.editCell");
48
52
  }
49
- return "Select...";
53
+ return t("common.selectCell");
50
54
  };
51
55
  return /* @__PURE__ */ jsxs(Fragment, { children: [
52
56
  /* @__PURE__ */ jsxs(TableRow, { children: [
@@ -64,7 +68,7 @@ const PermissionPoliciesFormRow = ({
64
68
  /* @__PURE__ */ jsx(
65
69
  IconButton,
66
70
  {
67
- "aria-label": "expand-row",
71
+ "aria-label": t("common.expandRow"),
68
72
  size: "small",
69
73
  onClick: () => setCurrentOpen(!currentOpen),
70
74
  "data-testid": `expand-row-${rowData.plugin}`,
@@ -90,7 +94,7 @@ const PermissionPoliciesFormRow = ({
90
94
  /* @__PURE__ */ jsx(TableCell, { align: "right", sx: { borderBottom: "none" }, children: /* @__PURE__ */ jsx(
91
95
  IconButton,
92
96
  {
93
- "aria-label": "remove",
97
+ "aria-label": t("common.remove").toLocaleLowerCase(locale ?? "en"),
94
98
  size: "small",
95
99
  onClick: () => onRemovePlugin(rowData.plugin),
96
100
  children: /* @__PURE__ */ jsx(Delete, {})
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionPoliciesFormRow.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormRow.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 type { SetStateAction, Dispatch } from 'react';\n\nimport { useState, useEffect } from 'react';\n\nimport IconButton from '@mui/material/IconButton';\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport Collapse from '@mui/material/Collapse';\nimport Box from '@mui/material/Box';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport PermissionPoliciesFormNestedRow from './PermissionPoliciesFormNestedRow';\nimport Link from '@mui/material/Link';\n\ntype PermissionPoliciesFormRowProps = {\n rowData: any;\n conditionRulesData?: ConditionRulesData;\n permissionPoliciesRows: PermissionsData[];\n open: boolean;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePermission: (index: number) => void;\n onRemovePlugin: (plugin: string) => void;\n setOpen: Dispatch<SetStateAction<boolean>>;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n};\n\nconst PermissionPoliciesFormRow = ({\n rowData,\n permissionPoliciesRows,\n conditionRulesData,\n open,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: PermissionPoliciesFormRowProps) => {\n const [currentOpen, setCurrentOpen] = useState<boolean>(false);\n\n useEffect(() => {\n setCurrentOpen(open);\n }, [open]);\n\n const getTotalRules = (conditions?: ConditionsData): number => {\n const totalRules = getRulesNumber(conditions);\n return totalRules;\n };\n\n const getPprIndex = (plugin: string, permission: string) => {\n return permissionPoliciesRows.findIndex(ppr => {\n return ppr.plugin === plugin && ppr.permission === permission;\n });\n };\n\n const getPolicies = (plugin: string, pp: any) => {\n const pprIndex = getPprIndex(plugin, pp.permission);\n return (\n permissionPoliciesRows?.[pprIndex]?.policies ||\n pp.actions.map((ac: string) => ({ policy: ac, effect: 'deny' }))\n );\n };\n\n const getPermissionCellLabel = (plugin: string) => {\n if (permissionPoliciesRows.find(ppr => ppr.plugin === plugin)) {\n return 'Edit...';\n }\n\n return 'Select...';\n };\n\n return (\n <>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n borderBottom: 'none',\n display: 'flex',\n alignItems: 'center',\n fontWeight: theme => theme.typography.fontWeightMedium,\n }}\n >\n <IconButton\n aria-label=\"expand-row\"\n size=\"small\"\n onClick={() => setCurrentOpen(!currentOpen)}\n data-testid={`expand-row-${rowData.plugin}`}\n >\n {currentOpen ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n {rowData.name}\n </TableCell>\n <TableCell align=\"left\" sx={{ borderBottom: 'none' }}>\n <Link\n sx={{\n cursor: 'pointer',\n textDecoration: 'none',\n color: theme => theme.palette.primary.main,\n }}\n onClick={() => setCurrentOpen(true)}\n >\n {getPermissionCellLabel(rowData.plugin)}\n </Link>\n </TableCell>\n <TableCell align=\"right\" sx={{ borderBottom: 'none' }}>\n <IconButton\n aria-label=\"remove\"\n size=\"small\"\n onClick={() => onRemovePlugin(rowData.plugin)}\n >\n <DeleteIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell\n sx={{ p: 0 }}\n colSpan={6}\n data-testid={`nested-row-${rowData.plugin}`}\n >\n <Collapse in={currentOpen} timeout=\"auto\" unmountOnExit>\n <Box>\n <Table size=\"small\" aria-label=\"permission-policies\">\n <TableBody>\n {rowData.permissionPolicies.map((pp: any) => (\n <PermissionPoliciesFormNestedRow\n key={pp.permission}\n plugin={rowData.plugin}\n permissionPolicy={pp}\n permissionPolicyRowIndex={getPprIndex(\n rowData.plugin,\n pp.permission,\n )}\n policies={getPolicies(rowData.plugin, pp)}\n conditionRulesLength={\n conditionRulesData?.[`${rowData.plugin}`]?.[\n `${pp.resourceType}`\n ]?.rules.length\n }\n totalRulesCount={getTotalRules(\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions,\n )}\n conditionsData={\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions\n }\n conditionRulesData={conditionRulesData}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onAddConditions={onAddConditions}\n />\n ))}\n </TableBody>\n </Table>\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </>\n );\n};\n\nexport default PermissionPoliciesFormRow;\n"],"names":["DeleteIcon"],"mappings":";;;;;;;;;;;;;;;;AA0DA,MAAM,4BAA4B,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAsC,KAAA;AACpC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,KAAK,CAAA;AAE7D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,GACrB,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAM,MAAA,aAAA,GAAgB,CAAC,UAAwC,KAAA;AAC7D,IAAM,MAAA,UAAA,GAAa,eAAe,UAAU,CAAA;AAC5C,IAAO,OAAA,UAAA;AAAA,GACT;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,MAAA,EAAgB,UAAuB,KAAA;AAC1D,IAAO,OAAA,sBAAA,CAAuB,UAAU,CAAO,GAAA,KAAA;AAC7C,MAAA,OAAO,GAAI,CAAA,MAAA,KAAW,MAAU,IAAA,GAAA,CAAI,UAAe,KAAA,UAAA;AAAA,KACpD,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,MAAA,EAAgB,EAAY,KAAA;AAC/C,IAAA,MAAM,QAAW,GAAA,WAAA,CAAY,MAAQ,EAAA,EAAA,CAAG,UAAU,CAAA;AAClD,IAAA,OACE,sBAAyB,GAAA,QAAQ,CAAG,EAAA,QAAA,IACpC,GAAG,OAAQ,CAAA,GAAA,CAAI,CAAC,EAAA,MAAgB,EAAE,MAAA,EAAQ,EAAI,EAAA,MAAA,EAAQ,QAAS,CAAA,CAAA;AAAA,GAEnE;AAEA,EAAM,MAAA,sBAAA,GAAyB,CAAC,MAAmB,KAAA;AACjD,IAAA,IAAI,uBAAuB,IAAK,CAAA,CAAA,GAAA,KAAO,GAAI,CAAA,MAAA,KAAW,MAAM,CAAG,EAAA;AAC7D,MAAO,OAAA,SAAA;AAAA;AAGT,IAAO,OAAA,WAAA;AAAA,GACT;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,QACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,KAAM,EAAA,MAAA;AAAA,UACN,EAAI,EAAA;AAAA,YACF,YAAc,EAAA,MAAA;AAAA,YACd,OAAS,EAAA,MAAA;AAAA,YACT,UAAY,EAAA,QAAA;AAAA,YACZ,UAAA,EAAY,CAAS,KAAA,KAAA,KAAA,CAAM,UAAW,CAAA;AAAA,WACxC;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,YAAW,EAAA,YAAA;AAAA,gBACX,IAAK,EAAA,OAAA;AAAA,gBACL,OAAS,EAAA,MAAM,cAAe,CAAA,CAAC,WAAW,CAAA;AAAA,gBAC1C,aAAA,EAAa,CAAc,WAAA,EAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,gBAExC,QAAc,EAAA,WAAA,mBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,CAAA,uBAAM,cAAe,EAAA,EAAA;AAAA;AAAA,aACrD;AAAA,YACC,OAAQ,CAAA;AAAA;AAAA;AAAA,OACX;AAAA,sBACA,GAAA,CAAC,aAAU,KAAM,EAAA,MAAA,EAAO,IAAI,EAAE,YAAA,EAAc,QAC1C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,EAAI,EAAA;AAAA,YACF,MAAQ,EAAA,SAAA;AAAA,YACR,cAAgB,EAAA,MAAA;AAAA,YAChB,KAAO,EAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,WACxC;AAAA,UACA,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,UAEjC,QAAA,EAAA,sBAAA,CAAuB,QAAQ,MAAM;AAAA;AAAA,OAE1C,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,aAAU,KAAM,EAAA,OAAA,EAAQ,IAAI,EAAE,YAAA,EAAc,QAC3C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,YAAW,EAAA,QAAA;AAAA,UACX,IAAK,EAAA,OAAA;AAAA,UACL,OAAS,EAAA,MAAM,cAAe,CAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,UAE5C,8BAACA,MAAW,EAAA,EAAA;AAAA;AAAA,OAEhB,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,wBACC,QACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,EAAE,CAAA,EAAG,CAAE,EAAA;AAAA,QACX,OAAS,EAAA,CAAA;AAAA,QACT,aAAA,EAAa,CAAc,WAAA,EAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,QAEzC,QAAA,kBAAA,GAAA,CAAC,YAAS,EAAI,EAAA,WAAA,EAAa,SAAQ,MAAO,EAAA,aAAA,EAAa,IACrD,EAAA,QAAA,kBAAA,GAAA,CAAC,GACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,SAAM,IAAK,EAAA,OAAA,EAAQ,cAAW,qBAC7B,EAAA,QAAA,kBAAA,GAAA,CAAC,aACE,QAAQ,EAAA,OAAA,CAAA,kBAAA,CAAmB,GAAI,CAAA,CAAC,EAC/B,qBAAA,GAAA;AAAA,UAAC,+BAAA;AAAA,UAAA;AAAA,YAEC,QAAQ,OAAQ,CAAA,MAAA;AAAA,YAChB,gBAAkB,EAAA,EAAA;AAAA,YAClB,wBAA0B,EAAA,WAAA;AAAA,cACxB,OAAQ,CAAA,MAAA;AAAA,cACR,EAAG,CAAA;AAAA,aACL;AAAA,YACA,QAAU,EAAA,WAAA,CAAY,OAAQ,CAAA,MAAA,EAAQ,EAAE,CAAA;AAAA,YACxC,oBACE,EAAA,kBAAA,GAAqB,CAAG,EAAA,OAAA,CAAQ,MAAM,CAAA,CAAE,CACtC,GAAA,CAAA,EAAG,EAAG,CAAA,YAAY,CACpB,CAAA,CAAA,EAAG,KAAM,CAAA,MAAA;AAAA,YAEX,eAAiB,EAAA,aAAA;AAAA,cACf,uBACE,WAAY,CAAA,OAAA,CAAQ,QAAQ,EAAG,CAAA,UAAU,CAC3C,CAAG,EAAA;AAAA,aACL;AAAA,YACA,cAAA,EACE,uBACE,WAAY,CAAA,OAAA,CAAQ,QAAQ,EAAG,CAAA,UAAU,CAC3C,CAAG,EAAA,UAAA;AAAA,YAEL,kBAAA;AAAA,YACA,kBAAA;AAAA,YACA,cAAA;AAAA,YACA,kBAAA;AAAA,YACA;AAAA,WAAA;AAAA,UA3BK,EAAG,CAAA;AAAA,SA6BX,CAAA,EACH,CACF,EAAA,CAAA,EACF,CACF,EAAA;AAAA;AAAA,KAEJ,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PermissionPoliciesFormRow.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormRow.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 type { SetStateAction, Dispatch } from 'react';\n\nimport { useState, useEffect } from 'react';\n\nimport IconButton from '@mui/material/IconButton';\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport Collapse from '@mui/material/Collapse';\nimport Box from '@mui/material/Box';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport PermissionPoliciesFormNestedRow from './PermissionPoliciesFormNestedRow';\nimport Link from '@mui/material/Link';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { useLanguage } from '../../hooks/useLanguage';\n\ntype PermissionPoliciesFormRowProps = {\n rowData: any;\n conditionRulesData?: ConditionRulesData;\n permissionPoliciesRows: PermissionsData[];\n open: boolean;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePermission: (index: number) => void;\n onRemovePlugin: (plugin: string) => void;\n setOpen: Dispatch<SetStateAction<boolean>>;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n};\n\nconst PermissionPoliciesFormRow = ({\n rowData,\n permissionPoliciesRows,\n conditionRulesData,\n open,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: PermissionPoliciesFormRowProps) => {\n const { t } = useTranslation();\n const locale = useLanguage();\n const [currentOpen, setCurrentOpen] = useState<boolean>(false);\n\n useEffect(() => {\n setCurrentOpen(open);\n }, [open]);\n\n const getTotalRules = (conditions?: ConditionsData): number => {\n const totalRules = getRulesNumber(conditions);\n return totalRules;\n };\n\n const getPprIndex = (plugin: string, permission: string) => {\n return permissionPoliciesRows.findIndex(ppr => {\n return ppr.plugin === plugin && ppr.permission === permission;\n });\n };\n\n const getPolicies = (plugin: string, pp: any) => {\n const pprIndex = getPprIndex(plugin, pp.permission);\n return (\n permissionPoliciesRows?.[pprIndex]?.policies ||\n pp.actions.map((ac: string) => ({ policy: ac, effect: 'deny' }))\n );\n };\n\n const getPermissionCellLabel = (plugin: string) => {\n if (permissionPoliciesRows.find(ppr => ppr.plugin === plugin)) {\n return t('common.editCell');\n }\n\n return t('common.selectCell');\n };\n\n return (\n <>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n borderBottom: 'none',\n display: 'flex',\n alignItems: 'center',\n fontWeight: theme => theme.typography.fontWeightMedium,\n }}\n >\n <IconButton\n aria-label={t('common.expandRow')}\n size=\"small\"\n onClick={() => setCurrentOpen(!currentOpen)}\n data-testid={`expand-row-${rowData.plugin}`}\n >\n {currentOpen ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n {rowData.name}\n </TableCell>\n <TableCell align=\"left\" sx={{ borderBottom: 'none' }}>\n <Link\n sx={{\n cursor: 'pointer',\n textDecoration: 'none',\n color: theme => theme.palette.primary.main,\n }}\n onClick={() => setCurrentOpen(true)}\n >\n {getPermissionCellLabel(rowData.plugin)}\n </Link>\n </TableCell>\n <TableCell align=\"right\" sx={{ borderBottom: 'none' }}>\n <IconButton\n aria-label={t('common.remove').toLocaleLowerCase(locale ?? 'en')}\n size=\"small\"\n onClick={() => onRemovePlugin(rowData.plugin)}\n >\n <DeleteIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell\n sx={{ p: 0 }}\n colSpan={6}\n data-testid={`nested-row-${rowData.plugin}`}\n >\n <Collapse in={currentOpen} timeout=\"auto\" unmountOnExit>\n <Box>\n <Table size=\"small\" aria-label=\"permission-policies\">\n <TableBody>\n {rowData.permissionPolicies.map((pp: any) => (\n <PermissionPoliciesFormNestedRow\n key={pp.permission}\n plugin={rowData.plugin}\n permissionPolicy={pp}\n permissionPolicyRowIndex={getPprIndex(\n rowData.plugin,\n pp.permission,\n )}\n policies={getPolicies(rowData.plugin, pp)}\n conditionRulesLength={\n conditionRulesData?.[`${rowData.plugin}`]?.[\n `${pp.resourceType}`\n ]?.rules.length\n }\n totalRulesCount={getTotalRules(\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions,\n )}\n conditionsData={\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions\n }\n conditionRulesData={conditionRulesData}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onAddConditions={onAddConditions}\n />\n ))}\n </TableBody>\n </Table>\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </>\n );\n};\n\nexport default PermissionPoliciesFormRow;\n"],"names":["DeleteIcon"],"mappings":"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"}
@@ -19,12 +19,14 @@ import PermissionPoliciesFormRow from './PermissionPoliciesFormRow.esm.js';
19
19
  import Box from '@mui/material/Box';
20
20
  import TextField from '@mui/material/TextField';
21
21
  import InputAdornment from '@mui/material/InputAdornment';
22
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
22
23
 
23
24
  const PermissionPoliciesFormTableToolbar = ({
24
25
  numSelected,
25
26
  search,
26
27
  setSearch
27
28
  }) => {
29
+ const { t } = useTranslation();
28
30
  return /* @__PURE__ */ jsxs(
29
31
  Toolbar,
30
32
  {
@@ -42,7 +44,9 @@ const PermissionPoliciesFormTableToolbar = ({
42
44
  variant: "h5",
43
45
  id: "tableTitle",
44
46
  component: "div",
45
- children: numSelected > 0 ? `${numSelected} plugins` : "No plugins selected"
47
+ children: numSelected > 0 ? t("permissionPolicies.pluginsSelected", {
48
+ count: `${numSelected}`
49
+ }) : t("permissionPolicies.noPluginsSelected")
46
50
  }
47
51
  ),
48
52
  /* @__PURE__ */ jsx(
@@ -50,7 +54,7 @@ const PermissionPoliciesFormTableToolbar = ({
50
54
  {
51
55
  sx: { width: "30%" },
52
56
  id: "input-with-icon-textfield",
53
- placeholder: "Search",
57
+ placeholder: t("permissionPolicies.search"),
54
58
  value: search,
55
59
  onChange: (e) => setSearch(e.target.value),
56
60
  InputProps: {
@@ -75,6 +79,7 @@ const PermissionPoliciesFormTable = ({
75
79
  onRemovePlugin,
76
80
  onAddConditions
77
81
  }) => {
82
+ const { t } = useTranslation();
78
83
  const [page, setPage] = useState(0);
79
84
  const [rowsPerPage, setRowsPerPage] = useState(5);
80
85
  const [open, setOpen] = useState(false);
@@ -125,7 +130,7 @@ const PermissionPoliciesFormTable = ({
125
130
  children: open ? /* @__PURE__ */ jsx(ArrowDownIcon, {}) : /* @__PURE__ */ jsx(ArrowRightIcon, {})
126
131
  }
127
132
  ),
128
- "Name"
133
+ t("common.name")
129
134
  ]
130
135
  }
131
136
  ),
@@ -137,7 +142,7 @@ const PermissionPoliciesFormTable = ({
137
142
  width: "60%",
138
143
  fontWeight: (theme) => theme.typography.fontWeightBold
139
144
  },
140
- children: "Permission"
145
+ children: t("permissionPolicies.permission")
141
146
  }
142
147
  ),
143
148
  /* @__PURE__ */ jsx(
@@ -148,7 +153,7 @@ const PermissionPoliciesFormTable = ({
148
153
  width: "10%",
149
154
  fontWeight: (theme) => theme.typography.fontWeightBold
150
155
  },
151
- children: "Actions"
156
+ children: t("common.actions")
152
157
  }
153
158
  )
154
159
  ] }) }),
@@ -167,7 +172,7 @@ const PermissionPoliciesFormTable = ({
167
172
  onAddConditions
168
173
  },
169
174
  row.plugin
170
- )) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 4, children: /* @__PURE__ */ jsx(Box, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: search && !filteredData.length ? "No records to display." : "Selected plugins appear here." }) }) }) })
175
+ )) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 4, children: /* @__PURE__ */ jsx(Box, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: search && !filteredData.length ? t("permissionPolicies.noRecordsToDisplay") : t("permissionPolicies.selectedPluginsAppearHere") }) }) }) })
171
176
  ] }) }),
172
177
  /* @__PURE__ */ jsx(
173
178
  TablePagination,
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionPoliciesFormTable.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormTable.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 type { SetStateAction, Dispatch, ChangeEvent } from 'react';\n\nimport { useState, useEffect } from 'react';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport IconButton from '@mui/material/IconButton';\nimport SearchIcon from '@mui/icons-material/Search';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport { PermissionsData } from '../../types';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport PermissionPoliciesFormRow from './PermissionPoliciesFormRow';\nimport Box from '@mui/material/Box';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\n\ninterface PermissionPoliciesTableToolbarProps {\n numSelected: number;\n search: string;\n setSearch: Dispatch<SetStateAction<string>>;\n}\n\nconst PermissionPoliciesFormTableToolbar = ({\n numSelected,\n search,\n setSearch,\n}: PermissionPoliciesTableToolbarProps) => {\n return (\n <Toolbar\n sx={{\n p: [4, 0, 2, 2],\n }}\n >\n <Typography\n sx={{\n flex: '1 1 100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n variant=\"h5\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {numSelected > 0 ? `${numSelected} plugins` : 'No plugins selected'}\n </Typography>\n\n <TextField\n sx={{ width: '30%' }}\n id=\"input-with-icon-textfield\"\n placeholder=\"Search\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"start\">\n <IconButton onClick={() => setSearch('')}>\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n variant=\"standard\"\n />\n </Toolbar>\n );\n};\n\nconst PermissionPoliciesFormTable = ({\n selectedPluginsCount,\n data,\n permissionPoliciesRows,\n conditionRulesData,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: {\n selectedPluginsCount: number;\n data: any;\n permissionPoliciesRows: PermissionsData[];\n conditionRulesData?: ConditionRulesData;\n onRemovePermission: (index: number) => void;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePlugin: (plugin: string) => void;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n}) => {\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(5);\n const [open, setOpen] = useState<boolean>(false);\n const [search, setSearch] = useState<string>('');\n const [filteredData, setFilteredData] = useState<any>([]);\n\n useEffect(() => {\n if (search)\n setFilteredData(\n data?.filter((row: any) => row.plugin.includes(search)) ?? [],\n );\n else setFilteredData(data);\n }, [search, data]);\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(+event.target.value);\n setPage(0);\n };\n\n return (\n <Paper sx={{ width: '100%', mb: 2, p: 2 }}>\n <PermissionPoliciesFormTableToolbar\n numSelected={selectedPluginsCount}\n search={search}\n setSearch={setSearch}\n />\n <TableContainer component={Paper} sx={{ outline: '0' }}>\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n <IconButton\n aria-label=\"expand row\"\n size=\"small\"\n onClick={() => setOpen(!open)}\n >\n {open ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n Name\n </TableCell>\n <TableCell\n align=\"left\"\n sx={{\n width: '60%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n Permission\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{\n width: '10%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n Actions\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredData.length > 0 ? (\n filteredData\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n .map((row: any) => (\n <PermissionPoliciesFormRow\n key={row.plugin}\n rowData={row}\n conditionRulesData={conditionRulesData}\n permissionPoliciesRows={permissionPoliciesRows}\n open={open}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onRemovePlugin={onRemovePlugin}\n setOpen={setOpen}\n onAddConditions={onAddConditions}\n />\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={4}>\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n {search && !filteredData.length\n ? 'No records to display.'\n : 'Selected plugins appear here.'}\n </Box>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[5, 10, 20]}\n component=\"div\"\n count={data.length}\n rowsPerPage={rowsPerPage}\n page={page}\n showFirstButton\n showLastButton\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </Paper>\n );\n};\n\nexport default PermissionPoliciesFormTable;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionPoliciesFormTable.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormTable.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 type { SetStateAction, Dispatch, ChangeEvent } from 'react';\n\nimport { useState, useEffect } from 'react';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport IconButton from '@mui/material/IconButton';\nimport SearchIcon from '@mui/icons-material/Search';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport { PermissionsData } from '../../types';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport PermissionPoliciesFormRow from './PermissionPoliciesFormRow';\nimport Box from '@mui/material/Box';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport { useTranslation } from '../../hooks/useTranslation';\n\ninterface PermissionPoliciesTableToolbarProps {\n numSelected: number;\n search: string;\n setSearch: Dispatch<SetStateAction<string>>;\n}\n\nconst PermissionPoliciesFormTableToolbar = ({\n numSelected,\n search,\n setSearch,\n}: PermissionPoliciesTableToolbarProps) => {\n const { t } = useTranslation();\n\n return (\n <Toolbar\n sx={{\n p: [4, 0, 2, 2],\n }}\n >\n <Typography\n sx={{\n flex: '1 1 100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n variant=\"h5\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {numSelected > 0\n ? t('permissionPolicies.pluginsSelected' as any, {\n count: `${numSelected}`,\n })\n : t('permissionPolicies.noPluginsSelected')}\n </Typography>\n\n <TextField\n sx={{ width: '30%' }}\n id=\"input-with-icon-textfield\"\n placeholder={t('permissionPolicies.search')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"start\">\n <IconButton onClick={() => setSearch('')}>\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n variant=\"standard\"\n />\n </Toolbar>\n );\n};\n\nconst PermissionPoliciesFormTable = ({\n selectedPluginsCount,\n data,\n permissionPoliciesRows,\n conditionRulesData,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: {\n selectedPluginsCount: number;\n data: any;\n permissionPoliciesRows: PermissionsData[];\n conditionRulesData?: ConditionRulesData;\n onRemovePermission: (index: number) => void;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePlugin: (plugin: string) => void;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n}) => {\n const { t } = useTranslation();\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(5);\n const [open, setOpen] = useState<boolean>(false);\n const [search, setSearch] = useState<string>('');\n const [filteredData, setFilteredData] = useState<any>([]);\n\n useEffect(() => {\n if (search)\n setFilteredData(\n data?.filter((row: any) => row.plugin.includes(search)) ?? [],\n );\n else setFilteredData(data);\n }, [search, data]);\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(+event.target.value);\n setPage(0);\n };\n\n return (\n <Paper sx={{ width: '100%', mb: 2, p: 2 }}>\n <PermissionPoliciesFormTableToolbar\n numSelected={selectedPluginsCount}\n search={search}\n setSearch={setSearch}\n />\n <TableContainer component={Paper} sx={{ outline: '0' }}>\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n <IconButton\n aria-label=\"expand row\"\n size=\"small\"\n onClick={() => setOpen(!open)}\n >\n {open ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n {t('common.name')}\n </TableCell>\n <TableCell\n align=\"left\"\n sx={{\n width: '60%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n {t('permissionPolicies.permission')}\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{\n width: '10%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n {t('common.actions')}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredData.length > 0 ? (\n filteredData\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n .map((row: any) => (\n <PermissionPoliciesFormRow\n key={row.plugin}\n rowData={row}\n conditionRulesData={conditionRulesData}\n permissionPoliciesRows={permissionPoliciesRows}\n open={open}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onRemovePlugin={onRemovePlugin}\n setOpen={setOpen}\n onAddConditions={onAddConditions}\n />\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={4}>\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n {search && !filteredData.length\n ? t('permissionPolicies.noRecordsToDisplay')\n : t('permissionPolicies.selectedPluginsAppearHere')}\n </Box>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[5, 10, 20]}\n component=\"div\"\n count={data.length}\n rowsPerPage={rowsPerPage}\n page={page}\n showFirstButton\n showLastButton\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </Paper>\n );\n};\n\nexport default PermissionPoliciesFormTable;\n"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import Autocomplete from '@mui/material/Autocomplete';
3
3
  import { useState, useEffect } from 'react';
4
4
  import { PluginsDropdownOption } from './PluginsDropdownOption.esm.js';
5
5
  import TextField from '@mui/material/TextField';
6
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
6
7
 
7
8
  const PluginsDropdown = ({
8
9
  allPlugins,
@@ -13,6 +14,7 @@ const PluginsDropdown = ({
13
14
  onRemoveAllPlugins,
14
15
  selectedPluginsError
15
16
  }) => {
17
+ const { t } = useTranslation();
16
18
  const [inputValue, setInputValue] = useState("");
17
19
  useEffect(() => {
18
20
  if (selectedPlugins.length === allPlugins.length - 1)
@@ -33,7 +35,7 @@ const PluginsDropdown = ({
33
35
  multiple: true,
34
36
  disableCloseOnSelect: true,
35
37
  getOptionLabel: (option) => option.label,
36
- noOptionsText: "No plugins found.",
38
+ noOptionsText: t("permissionPolicies.noPluginsFound"),
37
39
  style: { width: "30%", flexGrow: "1" },
38
40
  value: selectedPlugins || null,
39
41
  onChange: (_e, selPlugins, reason, selOption) => {
@@ -59,7 +61,7 @@ const PluginsDropdown = ({
59
61
  TextField,
60
62
  {
61
63
  ...params,
62
- label: "Select plugins",
64
+ label: t("permissionPolicies.selectPlugins"),
63
65
  variant: "outlined",
64
66
  error: !!selectedPluginsError,
65
67
  helperText: selectedPluginsError ?? "",
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsDropdown.esm.js","sources":["../../../src/components/CreateRole/PluginsDropdown.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 Autocomplete from '@mui/material/Autocomplete';\nimport type { FocusEventHandler } from 'react';\nimport { useState, useEffect } from 'react';\nimport { SelectedPlugin } from '../../types';\nimport { PluginsDropdownOption } from './PluginsDropdownOption';\nimport TextField from '@mui/material/TextField';\nimport { FormikErrors } from 'formik';\nimport { RoleFormValues } from './types';\n\ntype PluginsDropdownProps = {\n allPlugins: SelectedPlugin[];\n selectedPlugins: SelectedPlugin[];\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n handleBlur: FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n onRemoveAllPlugins: () => void;\n onRemovePlugin: (plugin: string) => void;\n selectedPluginsError: string;\n};\n\nconst PluginsDropdown = ({\n allPlugins,\n selectedPlugins,\n setFieldValue,\n handleBlur,\n onRemovePlugin,\n onRemoveAllPlugins,\n selectedPluginsError,\n}: PluginsDropdownProps) => {\n const [inputValue, setInputValue] = useState('');\n useEffect(() => {\n if (selectedPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <Autocomplete\n options={allPlugins}\n inputValue={inputValue}\n onInputChange={(_, newInputValue, reason) => {\n if (reason !== 'reset') {\n setInputValue(newInputValue);\n }\n }}\n renderTags={() => ''}\n isOptionEqualToValue={(option, value) => option.label === value.label}\n multiple\n disableCloseOnSelect\n getOptionLabel={option => option.label}\n noOptionsText=\"No plugins found.\"\n style={{ width: '30%', flexGrow: '1' }}\n value={selectedPlugins || null}\n onChange={(_e, selPlugins, reason, selOption) => {\n const pVal = selOption?.option.value;\n if (pVal === '') {\n if (reason === 'selectOption') {\n setFieldValue(`selectedPlugins`, allPlugins, true);\n } else if (reason === 'removeOption') {\n onRemoveAllPlugins();\n }\n } else if (pVal) {\n if (reason === 'removeOption') {\n onRemovePlugin(pVal);\n } else if (reason === 'selectOption') {\n if (selPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n else setFieldValue(`selectedPlugins`, selPlugins, true);\n }\n }\n }}\n renderOption={(props, option: SelectedPlugin, state) => (\n <PluginsDropdownOption props={props} option={option} state={state} />\n )}\n renderInput={(params: any) => (\n <TextField\n {...params}\n label=\"Select plugins\"\n variant=\"outlined\"\n error={!!selectedPluginsError}\n helperText={selectedPluginsError ?? ''}\n onBlur={handleBlur}\n onKeyDown={event => {\n if (event.key === 'Backspace' && params.inputProps.value === '') {\n event.stopPropagation();\n }\n }}\n required\n />\n )}\n />\n );\n};\n\nexport default PluginsDropdown;\n"],"names":[],"mappings":";;;;;;AAsCA,MAAM,kBAAkB,CAAC;AAAA,EACvB,UAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,eAAA,CAAgB,MAAW,KAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AACjD,MAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,GAErD,EAAG,EAAE,CAAA;AACL,EACE,uBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,UAAA;AAAA,MACA,aAAe,EAAA,CAAC,CAAG,EAAA,aAAA,EAAe,MAAW,KAAA;AAC3C,QAAA,IAAI,WAAW,OAAS,EAAA;AACtB,UAAA,aAAA,CAAc,aAAa,CAAA;AAAA;AAC7B,OACF;AAAA,MACA,YAAY,MAAM,EAAA;AAAA,MAClB,sBAAsB,CAAC,MAAA,EAAQ,KAAU,KAAA,MAAA,CAAO,UAAU,KAAM,CAAA,KAAA;AAAA,MAChE,QAAQ,EAAA,IAAA;AAAA,MACR,oBAAoB,EAAA,IAAA;AAAA,MACpB,cAAA,EAAgB,YAAU,MAAO,CAAA,KAAA;AAAA,MACjC,aAAc,EAAA,mBAAA;AAAA,MACd,KAAO,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,UAAU,GAAI,EAAA;AAAA,MACrC,OAAO,eAAmB,IAAA,IAAA;AAAA,MAC1B,QAAU,EAAA,CAAC,EAAI,EAAA,UAAA,EAAY,QAAQ,SAAc,KAAA;AAC/C,QAAM,MAAA,IAAA,GAAO,WAAW,MAAO,CAAA,KAAA;AAC/B,QAAA,IAAI,SAAS,EAAI,EAAA;AACf,UAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,YAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,WACnD,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,YAAmB,kBAAA,EAAA;AAAA;AACrB,mBACS,IAAM,EAAA;AACf,UAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,YAAA,cAAA,CAAe,IAAI,CAAA;AAAA,WACrB,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,YAAI,IAAA,UAAA,CAAW,MAAW,KAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAC5C,cAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,iBAC9C,aAAA,CAAc,CAAmB,eAAA,CAAA,EAAA,UAAA,EAAY,IAAI,CAAA;AAAA;AACxD;AACF,OACF;AAAA,MACA,YAAA,EAAc,CAAC,KAAO,EAAA,MAAA,EAAwB,0BAC3C,GAAA,CAAA,qBAAA,EAAA,EAAsB,KAAc,EAAA,MAAA,EAAgB,KAAc,EAAA,CAAA;AAAA,MAErE,WAAA,EAAa,CAAC,MACZ,qBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,KAAM,EAAA,gBAAA;AAAA,UACN,OAAQ,EAAA,UAAA;AAAA,UACR,KAAA,EAAO,CAAC,CAAC,oBAAA;AAAA,UACT,YAAY,oBAAwB,IAAA,EAAA;AAAA,UACpC,MAAQ,EAAA,UAAA;AAAA,UACR,WAAW,CAAS,KAAA,KAAA;AAClB,YAAA,IAAI,MAAM,GAAQ,KAAA,WAAA,IAAe,MAAO,CAAA,UAAA,CAAW,UAAU,EAAI,EAAA;AAC/D,cAAA,KAAA,CAAM,eAAgB,EAAA;AAAA;AACxB,WACF;AAAA,UACA,QAAQ,EAAA;AAAA;AAAA;AACV;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"PluginsDropdown.esm.js","sources":["../../../src/components/CreateRole/PluginsDropdown.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 Autocomplete from '@mui/material/Autocomplete';\nimport type { FocusEventHandler } from 'react';\nimport { useState, useEffect } from 'react';\nimport { SelectedPlugin } from '../../types';\nimport { PluginsDropdownOption } from './PluginsDropdownOption';\nimport TextField from '@mui/material/TextField';\nimport { FormikErrors } from 'formik';\nimport { RoleFormValues } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\ntype PluginsDropdownProps = {\n allPlugins: SelectedPlugin[];\n selectedPlugins: SelectedPlugin[];\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n handleBlur: FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n onRemoveAllPlugins: () => void;\n onRemovePlugin: (plugin: string) => void;\n selectedPluginsError: string;\n};\n\nconst PluginsDropdown = ({\n allPlugins,\n selectedPlugins,\n setFieldValue,\n handleBlur,\n onRemovePlugin,\n onRemoveAllPlugins,\n selectedPluginsError,\n}: PluginsDropdownProps) => {\n const { t } = useTranslation();\n const [inputValue, setInputValue] = useState('');\n useEffect(() => {\n if (selectedPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <Autocomplete\n options={allPlugins}\n inputValue={inputValue}\n onInputChange={(_, newInputValue, reason) => {\n if (reason !== 'reset') {\n setInputValue(newInputValue);\n }\n }}\n renderTags={() => ''}\n isOptionEqualToValue={(option, value) => option.label === value.label}\n multiple\n disableCloseOnSelect\n getOptionLabel={option => option.label}\n noOptionsText={t('permissionPolicies.noPluginsFound')}\n style={{ width: '30%', flexGrow: '1' }}\n value={selectedPlugins || null}\n onChange={(_e, selPlugins, reason, selOption) => {\n const pVal = selOption?.option.value;\n if (pVal === '') {\n if (reason === 'selectOption') {\n setFieldValue(`selectedPlugins`, allPlugins, true);\n } else if (reason === 'removeOption') {\n onRemoveAllPlugins();\n }\n } else if (pVal) {\n if (reason === 'removeOption') {\n onRemovePlugin(pVal);\n } else if (reason === 'selectOption') {\n if (selPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n else setFieldValue(`selectedPlugins`, selPlugins, true);\n }\n }\n }}\n renderOption={(props, option: SelectedPlugin, state) => (\n <PluginsDropdownOption props={props} option={option} state={state} />\n )}\n renderInput={(params: any) => (\n <TextField\n {...params}\n label={t('permissionPolicies.selectPlugins')}\n variant=\"outlined\"\n error={!!selectedPluginsError}\n helperText={selectedPluginsError ?? ''}\n onBlur={handleBlur}\n onKeyDown={event => {\n if (event.key === 'Backspace' && params.inputProps.value === '') {\n event.stopPropagation();\n }\n }}\n required\n />\n )}\n />\n );\n};\n\nexport default PluginsDropdown;\n"],"names":[],"mappings":"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"}
@@ -6,14 +6,15 @@ import { getMembers } from '../../utils/rbac-utils.esm.js';
6
6
  import { reviewStepMemebersTableColumns } from './AddedMembersTableColumn.esm.js';
7
7
  import { ReviewStepTable } from './ReviewStepTable.esm.js';
8
8
  import { selectedPermissionPoliciesColumn } from './SelectedPermissionPoliciesColumn.esm.js';
9
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
9
10
 
10
- const tableMetadata = (values) => {
11
- const membersKey = values.selectedMembers.length > 0 ? `Users and groups (${getMembers(values.selectedMembers)})` : "Users and groups";
11
+ const tableMetadata = (values, t) => {
12
+ const membersKey = values.selectedMembers.length > 0 ? `${t("table.headers.usersAndGroups")} (${getMembers(values.selectedMembers, t)})` : t("table.headers.usersAndGroups");
12
13
  const permissionPoliciesKey = `Permission policies (${getPermissionsNumber(
13
14
  values
14
15
  )})`;
15
16
  return {
16
- "Name, description, and owner of role": /* @__PURE__ */ jsxs(Fragment, { children: [
17
+ [t("roleForm.review.nameDescriptionOwner")]: /* @__PURE__ */ jsxs(Fragment, { children: [
17
18
  /* @__PURE__ */ jsx(Typography, { sx: { margin: "0px" }, children: values.name }),
18
19
  /* @__PURE__ */ jsx("br", {}),
19
20
  /* @__PURE__ */ jsx(Typography, { sx: { margin: "0px" }, children: values.description || "-" }),
@@ -24,7 +25,7 @@ const tableMetadata = (values) => {
24
25
  ReviewStepTable,
25
26
  {
26
27
  rows: values.selectedMembers,
27
- columns: reviewStepMemebersTableColumns(),
28
+ columns: reviewStepMemebersTableColumns(t),
28
29
  tableWrapperWidth: 550
29
30
  }
30
31
  ),
@@ -32,7 +33,7 @@ const tableMetadata = (values) => {
32
33
  ReviewStepTable,
33
34
  {
34
35
  rows: values.permissionPoliciesRows,
35
- columns: selectedPermissionPoliciesColumn(),
36
+ columns: selectedPermissionPoliciesColumn(t),
36
37
  tableWrapperWidth: 700
37
38
  }
38
39
  )
@@ -42,13 +43,14 @@ const ReviewStep = ({
42
43
  values,
43
44
  isEditing
44
45
  }) => {
46
+ const { t } = useTranslation();
45
47
  return /* @__PURE__ */ jsxs("div", { style: { overflow: "auto" }, children: [
46
- /* @__PURE__ */ jsx(Typography, { variant: "h6", children: isEditing ? "Review and save" : "Review and create" }),
48
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", children: isEditing ? t("roleForm.review.reviewAndSave") : t("roleForm.review.reviewAndCreate") }),
47
49
  /* @__PURE__ */ jsx(
48
50
  StructuredMetadataTable,
49
51
  {
50
52
  dense: true,
51
- metadata: tableMetadata(values),
53
+ metadata: tableMetadata(values, t),
52
54
  options: { titleFormat: (key) => key }
53
55
  }
54
56
  )
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewStep.esm.js","sources":["../../../src/components/CreateRole/ReviewStep.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 { StructuredMetadataTable } from '@backstage/core-components';\n\nimport Typography from '@mui/material/Typography';\n\nimport { getPermissionsNumber } from '../../utils/create-role-utils';\nimport { getMembers } from '../../utils/rbac-utils';\nimport { reviewStepMemebersTableColumns } from './AddedMembersTableColumn';\nimport { ReviewStepTable } from './ReviewStepTable';\nimport { selectedPermissionPoliciesColumn } from './SelectedPermissionPoliciesColumn';\nimport { RoleFormValues } from './types';\n\nconst tableMetadata = (values: RoleFormValues) => {\n const membersKey =\n values.selectedMembers.length > 0\n ? `Users and groups (${getMembers(values.selectedMembers)})`\n : 'Users and groups';\n const permissionPoliciesKey = `Permission policies (${getPermissionsNumber(\n values,\n )})`;\n return {\n 'Name, description, and owner of role': (\n <>\n <Typography sx={{ margin: '0px' }}>{values.name}</Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>\n {values.description || '-'}\n </Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>{values.owner || '-'}</Typography>\n </>\n ),\n [membersKey]: (\n <ReviewStepTable\n rows={values.selectedMembers}\n columns={reviewStepMemebersTableColumns()}\n tableWrapperWidth={550}\n />\n ),\n [permissionPoliciesKey]: (\n <ReviewStepTable\n rows={values.permissionPoliciesRows}\n columns={selectedPermissionPoliciesColumn()}\n tableWrapperWidth={700}\n />\n ),\n };\n};\n\nexport const ReviewStep = ({\n values,\n isEditing,\n}: {\n values: RoleFormValues;\n isEditing: boolean;\n}) => {\n return (\n <div style={{ overflow: 'auto' }}>\n <Typography variant=\"h6\">\n {isEditing ? 'Review and save' : 'Review and create'}\n </Typography>\n <StructuredMetadataTable\n dense\n metadata={tableMetadata(values)}\n options={{ titleFormat: (key: string) => key }}\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA0BA,MAAM,aAAA,GAAgB,CAAC,MAA2B,KAAA;AAChD,EAAM,MAAA,UAAA,GACJ,MAAO,CAAA,eAAA,CAAgB,MAAS,GAAA,CAAA,GAC5B,qBAAqB,UAAW,CAAA,MAAA,CAAO,eAAe,CAAC,CACvD,CAAA,CAAA,GAAA,kBAAA;AACN,EAAA,MAAM,wBAAwB,CAAwB,qBAAA,EAAA,oBAAA;AAAA,IACpD;AAAA,GACD,CAAA,CAAA,CAAA;AACD,EAAO,OAAA;AAAA,IACL,wDAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,iBAAO,IAAK,EAAA,CAAA;AAAA,0BAC/C,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAC7B,QAAO,EAAA,MAAA,CAAA,WAAA,IAAe,GACzB,EAAA,CAAA;AAAA,0BACC,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,QAAO,EAAA,MAAA,CAAA,KAAA,IAAS,GAAI,EAAA;AAAA,KAC1D,EAAA,CAAA;AAAA,IAEF,CAAC,UAAU,mBACT,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,eAAA;AAAA,QACb,SAAS,8BAA+B,EAAA;AAAA,QACxC,iBAAmB,EAAA;AAAA;AAAA,KACrB;AAAA,IAEF,CAAC,qBAAqB,mBACpB,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,sBAAA;AAAA,QACb,SAAS,gCAAiC,EAAA;AAAA,QAC1C,iBAAmB,EAAA;AAAA;AAAA;AACrB,GAEJ;AACF,CAAA;AAEO,MAAM,aAAa,CAAC;AAAA,EACzB,MAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAA,4BACG,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,QAAA,EAAU,QACtB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,IACjB,EAAA,QAAA,EAAA,SAAA,GAAY,oBAAoB,mBACnC,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,KAAK,EAAA,IAAA;AAAA,QACL,QAAA,EAAU,cAAc,MAAM,CAAA;AAAA,QAC9B,OAAS,EAAA,EAAE,WAAa,EAAA,CAAC,QAAgB,GAAI;AAAA;AAAA;AAC/C,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ReviewStep.esm.js","sources":["../../../src/components/CreateRole/ReviewStep.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 { StructuredMetadataTable } from '@backstage/core-components';\n\nimport Typography from '@mui/material/Typography';\n\nimport { getPermissionsNumber } from '../../utils/create-role-utils';\nimport { getMembers } from '../../utils/rbac-utils';\nimport { reviewStepMemebersTableColumns } from './AddedMembersTableColumn';\nimport { ReviewStepTable } from './ReviewStepTable';\nimport { selectedPermissionPoliciesColumn } from './SelectedPermissionPoliciesColumn';\nimport { RoleFormValues } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nconst tableMetadata = (\n values: RoleFormValues,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n const membersKey =\n values.selectedMembers.length > 0\n ? `${t('table.headers.usersAndGroups')} (${getMembers(values.selectedMembers, t)})`\n : t('table.headers.usersAndGroups');\n const permissionPoliciesKey = `Permission policies (${getPermissionsNumber(\n values,\n )})`;\n return {\n [t('roleForm.review.nameDescriptionOwner')]: (\n <>\n <Typography sx={{ margin: '0px' }}>{values.name}</Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>\n {values.description || '-'}\n </Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>{values.owner || '-'}</Typography>\n </>\n ),\n [membersKey]: (\n <ReviewStepTable\n rows={values.selectedMembers}\n columns={reviewStepMemebersTableColumns(t)}\n tableWrapperWidth={550}\n />\n ),\n [permissionPoliciesKey]: (\n <ReviewStepTable\n rows={values.permissionPoliciesRows}\n columns={selectedPermissionPoliciesColumn(t)}\n tableWrapperWidth={700}\n />\n ),\n };\n};\n\nexport const ReviewStep = ({\n values,\n isEditing,\n}: {\n values: RoleFormValues;\n isEditing: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div style={{ overflow: 'auto' }}>\n <Typography variant=\"h6\">\n {isEditing\n ? t('roleForm.review.reviewAndSave')\n : t('roleForm.review.reviewAndCreate')}\n </Typography>\n <StructuredMetadataTable\n dense\n metadata={tableMetadata(values, t)}\n options={{ titleFormat: (key: string) => key }}\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BA,MAAM,aAAA,GAAgB,CACpB,MAAA,EACA,CACG,KAAA;AACH,EAAA,MAAM,aACJ,MAAO,CAAA,eAAA,CAAgB,MAAS,GAAA,CAAA,GAC5B,GAAG,CAAE,CAAA,8BAA8B,CAAC,CAAA,EAAA,EAAK,WAAW,MAAO,CAAA,eAAA,EAAiB,CAAC,CAAC,CAAA,CAAA,CAAA,GAC9E,EAAE,8BAA8B,CAAA;AACtC,EAAA,MAAM,wBAAwB,CAAwB,qBAAA,EAAA,oBAAA;AAAA,IACpD;AAAA,GACD,CAAA,CAAA,CAAA;AACD,EAAO,OAAA;AAAA,IACL,CAAC,CAAA,CAAE,sCAAsC,CAAC,mBAEtC,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,iBAAO,IAAK,EAAA,CAAA;AAAA,0BAC/C,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAC7B,QAAO,EAAA,MAAA,CAAA,WAAA,IAAe,GACzB,EAAA,CAAA;AAAA,0BACC,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,QAAO,EAAA,MAAA,CAAA,KAAA,IAAS,GAAI,EAAA;AAAA,KAC1D,EAAA,CAAA;AAAA,IAEF,CAAC,UAAU,mBACT,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,eAAA;AAAA,QACb,OAAA,EAAS,+BAA+B,CAAC,CAAA;AAAA,QACzC,iBAAmB,EAAA;AAAA;AAAA,KACrB;AAAA,IAEF,CAAC,qBAAqB,mBACpB,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,sBAAA;AAAA,QACb,OAAA,EAAS,iCAAiC,CAAC,CAAA;AAAA,QAC3C,iBAAmB,EAAA;AAAA;AAAA;AACrB,GAEJ;AACF,CAAA;AAEO,MAAM,aAAa,CAAC;AAAA,EACzB,MAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EAAA,4BACG,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,QAAA,EAAU,QACtB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,IACjB,EAAA,QAAA,EAAA,SAAA,GACG,EAAE,+BAA+B,CAAA,GACjC,CAAE,CAAA,iCAAiC,CACzC,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,KAAK,EAAA,IAAA;AAAA,QACL,QAAA,EAAU,aAAc,CAAA,MAAA,EAAQ,CAAC,CAAA;AAAA,QACjC,OAAS,EAAA,EAAE,WAAa,EAAA,CAAC,QAAgB,GAAI;AAAA;AAAA;AAC/C,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import TextField from '@mui/material/TextField';
3
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
3
4
 
4
5
  const RoleDetailsForm = ({
5
6
  name,
@@ -9,6 +10,7 @@ const RoleDetailsForm = ({
9
10
  handleBlur,
10
11
  handleChange
11
12
  }) => {
13
+ const { t } = useTranslation();
12
14
  return /* @__PURE__ */ jsxs(
13
15
  "div",
14
16
  {
@@ -22,12 +24,12 @@ const RoleDetailsForm = ({
22
24
  TextField,
23
25
  {
24
26
  required: true,
25
- label: "Name",
27
+ label: t("roleForm.fields.name.label"),
26
28
  variant: "outlined",
27
29
  id: "role-name",
28
30
  "data-testid": "role-name",
29
31
  "aria-labelledby": "name",
30
- helperText: nameError ?? "Enter name of the role",
32
+ helperText: nameError ?? t("roleForm.fields.name.helperText"),
31
33
  value: name,
32
34
  name: "name",
33
35
  onChange: handleChange,
@@ -38,9 +40,9 @@ const RoleDetailsForm = ({
38
40
  /* @__PURE__ */ jsx(
39
41
  TextField,
40
42
  {
41
- label: "Description",
43
+ label: t("roleForm.fields.description.label"),
42
44
  variant: "outlined",
43
- helperText: "Enter a brief description about the role (The purpose of the role)",
45
+ helperText: t("roleForm.fields.description.helperText"),
44
46
  value: description,
45
47
  "data-testid": "role-description",
46
48
  id: "role-description",
@@ -54,9 +56,9 @@ const RoleDetailsForm = ({
54
56
  /* @__PURE__ */ jsx(
55
57
  TextField,
56
58
  {
57
- label: "Owner",
59
+ label: t("roleForm.fields.owner.label"),
58
60
  variant: "outlined",
59
- helperText: "Optional: Enter a user or group who will have permission to edit this role and create additional roles. In the next step, specify which users they can assign to their roles and which plugins they can grant access to. If left blank, automatically assigns the author at creation.",
61
+ helperText: t("roleForm.fields.owner.helperText"),
60
62
  value: owner,
61
63
  "data-testid": "role-owner",
62
64
  id: "role-owner",
@@ -1 +1 @@
1
- {"version":3,"file":"RoleDetailsForm.esm.js","sources":["../../../src/components/CreateRole/RoleDetailsForm.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 type { FocusEventHandler, ChangeEventHandler } from 'react';\n\nimport TextField from '@mui/material/TextField';\n\ntype RoleDetailsFormProps = {\n name: string;\n description?: string;\n owner?: string;\n nameError?: string;\n handleBlur: FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n handleChange: ChangeEventHandler<HTMLTextAreaElement | HTMLInputElement>;\n};\n\nexport const RoleDetailsForm = ({\n name,\n description,\n owner,\n nameError,\n handleBlur,\n handleChange,\n}: RoleDetailsFormProps) => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '20px',\n }}\n >\n <TextField\n required\n label=\"Name\"\n variant=\"outlined\"\n id=\"role-name\"\n data-testid=\"role-name\"\n aria-labelledby=\"name\"\n helperText={nameError ?? 'Enter name of the role'}\n value={name}\n name=\"name\"\n onChange={handleChange}\n onBlur={handleBlur}\n error={!!nameError}\n />\n <TextField\n label=\"Description\"\n variant=\"outlined\"\n helperText=\"Enter a brief description about the role (The purpose of the role)\"\n value={description}\n data-testid=\"role-description\"\n id=\"role-description\"\n name=\"description\"\n aria-labelledby=\"description\"\n onChange={handleChange}\n onBlur={handleBlur}\n multiline\n />\n <TextField\n label=\"Owner\"\n variant=\"outlined\"\n helperText=\"Optional: Enter a user or group who will have permission to edit this role and create additional roles. In the next step, specify which users they can assign to their roles and which plugins they can grant access to. If left blank, automatically assigns the author at creation.\"\n value={owner}\n data-testid=\"role-owner\"\n id=\"role-owner\"\n name=\"owner\"\n aria-labelledby=\"owner\"\n onChange={handleChange}\n onBlur={handleBlur}\n multiline\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;AA4BO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,MAAA;AAAA,QACT,aAAe,EAAA,QAAA;AAAA,QACf,GAAK,EAAA;AAAA,OACP;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,QAAQ,EAAA,IAAA;AAAA,YACR,KAAM,EAAA,MAAA;AAAA,YACN,OAAQ,EAAA,UAAA;AAAA,YACR,EAAG,EAAA,WAAA;AAAA,YACH,aAAY,EAAA,WAAA;AAAA,YACZ,iBAAgB,EAAA,MAAA;AAAA,YAChB,YAAY,SAAa,IAAA,wBAAA;AAAA,YACzB,KAAO,EAAA,IAAA;AAAA,YACP,IAAK,EAAA,MAAA;AAAA,YACL,QAAU,EAAA,YAAA;AAAA,YACV,MAAQ,EAAA,UAAA;AAAA,YACR,KAAA,EAAO,CAAC,CAAC;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAM,EAAA,aAAA;AAAA,YACN,OAAQ,EAAA,UAAA;AAAA,YACR,UAAW,EAAA,oEAAA;AAAA,YACX,KAAO,EAAA,WAAA;AAAA,YACP,aAAY,EAAA,kBAAA;AAAA,YACZ,EAAG,EAAA,kBAAA;AAAA,YACH,IAAK,EAAA,aAAA;AAAA,YACL,iBAAgB,EAAA,aAAA;AAAA,YAChB,QAAU,EAAA,YAAA;AAAA,YACV,MAAQ,EAAA,UAAA;AAAA,YACR,SAAS,EAAA;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAM,EAAA,OAAA;AAAA,YACN,OAAQ,EAAA,UAAA;AAAA,YACR,UAAW,EAAA,uRAAA;AAAA,YACX,KAAO,EAAA,KAAA;AAAA,YACP,aAAY,EAAA,YAAA;AAAA,YACZ,EAAG,EAAA,YAAA;AAAA,YACH,IAAK,EAAA,OAAA;AAAA,YACL,iBAAgB,EAAA,OAAA;AAAA,YAChB,QAAU,EAAA,YAAA;AAAA,YACV,MAAQ,EAAA,UAAA;AAAA,YACR,SAAS,EAAA;AAAA;AAAA;AACX;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"RoleDetailsForm.esm.js","sources":["../../../src/components/CreateRole/RoleDetailsForm.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 type { FocusEventHandler, ChangeEventHandler } from 'react';\n\nimport TextField from '@mui/material/TextField';\n\nimport { useTranslation } from '../../hooks/useTranslation';\n\ntype RoleDetailsFormProps = {\n name: string;\n description?: string;\n owner?: string;\n nameError?: string;\n handleBlur: FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n handleChange: ChangeEventHandler<HTMLTextAreaElement | HTMLInputElement>;\n};\n\nexport const RoleDetailsForm = ({\n name,\n description,\n owner,\n nameError,\n handleBlur,\n handleChange,\n}: RoleDetailsFormProps) => {\n const { t } = useTranslation();\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '20px',\n }}\n >\n <TextField\n required\n label={t('roleForm.fields.name.label')}\n variant=\"outlined\"\n id=\"role-name\"\n data-testid=\"role-name\"\n aria-labelledby=\"name\"\n helperText={nameError ?? t('roleForm.fields.name.helperText')}\n value={name}\n name=\"name\"\n onChange={handleChange}\n onBlur={handleBlur}\n error={!!nameError}\n />\n <TextField\n label={t('roleForm.fields.description.label')}\n variant=\"outlined\"\n helperText={t('roleForm.fields.description.helperText')}\n value={description}\n data-testid=\"role-description\"\n id=\"role-description\"\n name=\"description\"\n aria-labelledby=\"description\"\n onChange={handleChange}\n onBlur={handleBlur}\n multiline\n />\n <TextField\n label={t('roleForm.fields.owner.label')}\n variant=\"outlined\"\n helperText={t('roleForm.fields.owner.helperText')}\n value={owner}\n data-testid=\"role-owner\"\n id=\"role-owner\"\n name=\"owner\"\n aria-labelledby=\"owner\"\n onChange={handleChange}\n onBlur={handleBlur}\n multiline\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AA8BO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,MAAA;AAAA,QACT,aAAe,EAAA,QAAA;AAAA,QACf,GAAK,EAAA;AAAA,OACP;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,QAAQ,EAAA,IAAA;AAAA,YACR,KAAA,EAAO,EAAE,4BAA4B,CAAA;AAAA,YACrC,OAAQ,EAAA,UAAA;AAAA,YACR,EAAG,EAAA,WAAA;AAAA,YACH,aAAY,EAAA,WAAA;AAAA,YACZ,iBAAgB,EAAA,MAAA;AAAA,YAChB,UAAA,EAAY,SAAa,IAAA,CAAA,CAAE,iCAAiC,CAAA;AAAA,YAC5D,KAAO,EAAA,IAAA;AAAA,YACP,IAAK,EAAA,MAAA;AAAA,YACL,QAAU,EAAA,YAAA;AAAA,YACV,MAAQ,EAAA,UAAA;AAAA,YACR,KAAA,EAAO,CAAC,CAAC;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,YAC5C,OAAQ,EAAA,UAAA;AAAA,YACR,UAAA,EAAY,EAAE,wCAAwC,CAAA;AAAA,YACtD,KAAO,EAAA,WAAA;AAAA,YACP,aAAY,EAAA,kBAAA;AAAA,YACZ,EAAG,EAAA,kBAAA;AAAA,YACH,IAAK,EAAA,aAAA;AAAA,YACL,iBAAgB,EAAA,aAAA;AAAA,YAChB,QAAU,EAAA,YAAA;AAAA,YACV,MAAQ,EAAA,UAAA;AAAA,YACR,SAAS,EAAA;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,YACtC,OAAQ,EAAA,UAAA;AAAA,YACR,UAAA,EAAY,EAAE,kCAAkC,CAAA;AAAA,YAChD,KAAO,EAAA,KAAA;AAAA,YACP,aAAY,EAAA,YAAA;AAAA,YACZ,EAAG,EAAA,YAAA;AAAA,YACH,IAAK,EAAA,OAAA;AAAA,YACL,iBAAgB,EAAA,OAAA;AAAA,YAChB,QAAU,EAAA,YAAA;AAAA,YACV,MAAQ,EAAA,UAAA;AAAA,YACR,SAAS,EAAA;AAAA;AAAA;AACX;AAAA;AAAA,GACF;AAEJ;;;;"}