@backstage-community/plugin-rbac 1.48.1 → 1.50.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 (56) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +30 -0
  3. package/dist/alpha/apis.esm.js +29 -0
  4. package/dist/alpha/apis.esm.js.map +1 -0
  5. package/dist/alpha/navItems.esm.js +15 -0
  6. package/dist/alpha/navItems.esm.js.map +1 -0
  7. package/dist/alpha/pages.esm.js +14 -0
  8. package/dist/alpha/pages.esm.js.map +1 -0
  9. package/dist/{translations → alpha/translations}/de.esm.js +79 -79
  10. package/dist/alpha/translations/de.esm.js.map +1 -0
  11. package/dist/alpha/translations/es.esm.js +178 -0
  12. package/dist/alpha/translations/es.esm.js.map +1 -0
  13. package/dist/{translations → alpha/translations}/fr.esm.js +1 -0
  14. package/dist/alpha/translations/fr.esm.js.map +1 -0
  15. package/dist/alpha/translations/index.esm.js.map +1 -0
  16. package/dist/{translations → alpha/translations}/it.esm.js +1 -0
  17. package/dist/alpha/translations/it.esm.js.map +1 -0
  18. package/dist/{translations → alpha/translations}/ja.esm.js +1 -0
  19. package/dist/alpha/translations/ja.esm.js.map +1 -0
  20. package/dist/{translations → alpha/translations}/ref.esm.js +1 -0
  21. package/dist/alpha/translations/ref.esm.js.map +1 -0
  22. package/dist/alpha.d.ts +100 -1
  23. package/dist/alpha.esm.js +30 -2
  24. package/dist/alpha.esm.js.map +1 -1
  25. package/dist/components/Administration.esm.js +4 -1
  26. package/dist/components/Administration.esm.js.map +1 -1
  27. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  28. package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
  29. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
  30. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  31. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  32. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
  33. package/dist/components/RbacPage.esm.js +1 -1
  34. package/dist/components/RbacPage.esm.js.map +1 -1
  35. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  36. package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
  37. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  38. package/dist/components/Trans.esm.js.map +1 -1
  39. package/dist/hooks/useTranslation.esm.js +2 -2
  40. package/dist/hooks/useTranslation.esm.js.map +1 -1
  41. package/dist/package.json.esm.js +154 -0
  42. package/dist/package.json.esm.js.map +1 -0
  43. package/dist/utils/conditional-access-utils.esm.js.map +1 -1
  44. package/dist/utils/create-role-utils.esm.js.map +1 -1
  45. package/dist/utils/rbac-utils.esm.js.map +1 -1
  46. package/dist/utils/role-form-utils.esm.js.map +1 -1
  47. package/package.json +27 -18
  48. package/dist/translations/de.esm.js.map +0 -1
  49. package/dist/translations/es.esm.js +0 -178
  50. package/dist/translations/es.esm.js.map +0 -1
  51. package/dist/translations/fr.esm.js.map +0 -1
  52. package/dist/translations/index.esm.js.map +0 -1
  53. package/dist/translations/it.esm.js.map +0 -1
  54. package/dist/translations/ja.esm.js.map +0 -1
  55. package/dist/translations/ref.esm.js.map +0 -1
  56. /package/dist/{translations → alpha/translations}/index.esm.js +0 -0
package/dist/alpha.esm.js CHANGED
@@ -1,3 +1,31 @@
1
- export { rbacTranslations } from './translations/index.esm.js';
2
- export { rbacTranslationRef } from './translations/ref.esm.js';
1
+ import { createFrontendPlugin, createFrontendModule } from '@backstage/frontend-plugin-api';
2
+ import { TranslationBlueprint } from '@backstage/plugin-app-react';
3
+ import { rbacApi, licensedUsersApi } from './alpha/apis.esm.js';
4
+ import { rbacNavItem } from './alpha/navItems.esm.js';
5
+ import { rbacPage } from './alpha/pages.esm.js';
6
+ import { rootRouteRef } from './routes.esm.js';
7
+ import { rbacTranslations } from './alpha/translations/index.esm.js';
8
+ export { rbacTranslationRef } from './alpha/translations/ref.esm.js';
9
+
10
+ var index = createFrontendPlugin({
11
+ pluginId: "rbac",
12
+ info: { packageJson: () => import('./package.json.esm.js') },
13
+ extensions: [rbacApi, licensedUsersApi, rbacPage, rbacNavItem],
14
+ routes: {
15
+ root: rootRouteRef
16
+ }
17
+ });
18
+ const rbacTranslationsModule = createFrontendModule({
19
+ pluginId: "app",
20
+ extensions: [
21
+ TranslationBlueprint.make({
22
+ name: "rbac-translations",
23
+ params: {
24
+ resource: rbacTranslations
25
+ }
26
+ })
27
+ ]
28
+ });
29
+
30
+ export { index as default, rbacTranslations, rbacTranslationsModule };
3
31
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha/index.ts"],"sourcesContent":["/*\n * Copyright 2026 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 */\n\nimport {\n createFrontendPlugin,\n createFrontendModule,\n} from '@backstage/frontend-plugin-api';\nimport { TranslationBlueprint } from '@backstage/plugin-app-react';\nimport { rbacApi, licensedUsersApi } from './apis';\nimport rbacNavItem from './navItems';\nimport rbacPage from './pages';\nimport { rootRouteRef } from '../routes';\nimport { rbacTranslations } from './translations';\n\n/**\n * RBAC plugin\n * @alpha\n */\n\nexport default createFrontendPlugin({\n pluginId: 'rbac',\n info: { packageJson: () => import('../../package.json') },\n extensions: [rbacApi, licensedUsersApi, rbacPage, rbacNavItem],\n routes: {\n root: rootRouteRef,\n },\n});\n\n/**\n * Translation module for the rbac plugin\n * @alpha\n */\n\nconst rbacTranslationsModule = createFrontendModule({\n pluginId: 'app',\n extensions: [\n TranslationBlueprint.make({\n name: 'rbac-translations',\n params: {\n resource: rbacTranslations,\n },\n }),\n ],\n});\n\nexport { rbacTranslationsModule };\n\nexport { rbacTranslationRef, rbacTranslations } from './translations';\n"],"names":[],"mappings":";;;;;;;;;AAgCA,YAAe,oBAAqB,CAAA;AAAA,EAClC,QAAU,EAAA,MAAA;AAAA,EACV,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,uBAAoB,CAAE,EAAA;AAAA,EACxD,UAAY,EAAA,CAAC,OAAS,EAAA,gBAAA,EAAkB,UAAU,WAAW,CAAA;AAAA,EAC7D,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA;AAEV,CAAC,CAAA;AAOD,MAAM,yBAAyB,oBAAqB,CAAA;AAAA,EAClD,QAAU,EAAA,KAAA;AAAA,EACV,UAAY,EAAA;AAAA,IACV,qBAAqB,IAAK,CAAA;AAAA,MACxB,IAAM,EAAA,mBAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,QAAU,EAAA;AAAA;AACZ,KACD;AAAA;AAEL,CAAC;;;;"}
@@ -14,7 +14,10 @@ const Administration = () => {
14
14
  const config = useApi(configApiRef);
15
15
  const isRBACPluginEnabled = config.getOptionalBoolean("permission.enabled");
16
16
  if (!isUserLoading && isRBACPluginEnabled) {
17
- return result?.status === "Authorized" ? /* @__PURE__ */ jsx(SidebarItem, { text: "RBAC", to: "rbac", icon: RbacIcon }) : null;
17
+ return result?.status === "Authorized" ? (
18
+ // FIXME: improve icon type in Backstage 1.49, currently the icon type is deprecated but there is no change in the SidebarItem!?
19
+ /* @__PURE__ */ jsx(SidebarItem, { text: "RBAC", to: "rbac", icon: RbacIcon })
20
+ ) : null;
18
21
  }
19
22
  return null;
20
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Administration.esm.js","sources":["../../src/components/Administration.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 { useAsync } from 'react-use';\n\nimport { SidebarItem } from '@backstage/core-components';\nimport {\n configApiRef,\n IconComponent,\n useApi,\n} from '@backstage/core-plugin-api';\n\nimport { default as RbacIcon } from '@mui/icons-material/VpnKeyOutlined';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\n\nexport const Administration = () => {\n const rbacApi = useApi(rbacApiRef);\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n const config = useApi(configApiRef);\n const isRBACPluginEnabled = config.getOptionalBoolean('permission.enabled');\n\n if (!isUserLoading && isRBACPluginEnabled) {\n return result?.status === 'Authorized' ? (\n <SidebarItem text=\"RBAC\" to=\"rbac\" icon={RbacIcon as IconComponent} />\n ) : null;\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;AA4BO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C;AAAC,GACH;AAEA,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,kBAAA,CAAmB,oBAAoB,CAAA;AAE1E,EAAI,IAAA,CAAC,iBAAiB,mBAAqB,EAAA;AACzC,IAAO,OAAA,MAAA,EAAQ,MAAW,KAAA,YAAA,mBACvB,GAAA,CAAA,WAAA,EAAA,EAAY,IAAK,EAAA,MAAA,EAAO,EAAG,EAAA,MAAA,EAAO,IAAM,EAAA,QAAA,EAA2B,CAClE,GAAA,IAAA;AAAA;AAEN,EAAO,OAAA,IAAA;AACT;;;;"}
1
+ {"version":3,"file":"Administration.esm.js","sources":["../../src/components/Administration.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 { useAsync } from 'react-use';\n\nimport { SidebarItem } from '@backstage/core-components';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { default as RbacIcon } from '@mui/icons-material/VpnKeyOutlined';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\n\nexport const Administration = () => {\n const rbacApi = useApi(rbacApiRef);\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n const config = useApi(configApiRef);\n const isRBACPluginEnabled = config.getOptionalBoolean('permission.enabled');\n\n if (!isUserLoading && isRBACPluginEnabled) {\n return result?.status === 'Authorized' ? (\n // FIXME: improve icon type in Backstage 1.49, currently the icon type is deprecated but there is no change in the SidebarItem!?\n <SidebarItem text=\"RBAC\" to=\"rbac\" icon={RbacIcon as any} />\n ) : null;\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;AAwBO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C;AAAC,GACH;AAEA,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,kBAAA,CAAmB,oBAAoB,CAAA;AAE1E,EAAI,IAAA,CAAC,iBAAiB,mBAAqB,EAAA;AACzC,IAAA,OAAO,QAAQ,MAAW,KAAA,YAAA;AAAA;AAAA,0BAEvB,WAAY,EAAA,EAAA,IAAA,EAAK,QAAO,EAAG,EAAA,MAAA,EAAO,MAAM,QAAiB,EAAA;AAAA,QACxD,IAAA;AAAA;AAEN,EAAO,OAAA,IAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddNestedConditionButton.esm.js","sources":["../../../src/components/ConditionalAccess/AddNestedConditionButton.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 HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const tooltipTitle = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => (\n <div>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n <MarkdownContent\n content={t('conditionalAccess.nestedConditionTooltip')}\n />\n </Typography>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n {t('conditionalAccess.nestedConditionExample')}\n </Typography>\n </div>\n);\n\nexport const AddNestedConditionButton = () => {\n const { t } = useTranslation();\n\n return (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Typography variant=\"body1\" component=\"span\">\n {t('conditionalAccess.addNestedCondition')}\n </Typography>\n <Tooltip title={tooltipTitle(t)} placement=\"top\">\n <HelpOutlineIcon fontSize=\"inherit\" style={{ marginLeft: '0.25rem' }} />\n </Tooltip>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAwBO,MAAM,YAAe,GAAA,CAC1B,CAEA,qBAAA,IAAA,CAAC,KACC,EAAA,EAAA,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAAQ,SAAU,EAAA,GAAA,EAAI,OAAM,QAC9C,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,EAAE,0CAA0C;AAAA;AAAA,GAEzD,EAAA,CAAA;AAAA,kBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,KAAI,KAAM,EAAA,QAAA,EAC7C,QAAE,EAAA,CAAA,CAAA,0CAA0C,CAC/C,EAAA;AAAA,CACF,EAAA;AAGK,MAAM,2BAA2B,MAAM;AAC5C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA,QAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAAQ,WAAU,MACnC,EAAA,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAC3C,EAAA,CAAA;AAAA,4BACC,OAAQ,EAAA,EAAA,KAAA,EAAO,YAAa,CAAA,CAAC,GAAG,SAAU,EAAA,KAAA,EACzC,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA,EAAgB,UAAS,SAAU,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,SAAA,IAAa,CACxE,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"AddNestedConditionButton.esm.js","sources":["../../../src/components/ConditionalAccess/AddNestedConditionButton.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 HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const tooltipTitle = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => (\n <div>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n <MarkdownContent\n content={t('conditionalAccess.nestedConditionTooltip')}\n />\n </Typography>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n {t('conditionalAccess.nestedConditionExample')}\n </Typography>\n </div>\n);\n\nexport const AddNestedConditionButton = () => {\n const { t } = useTranslation();\n\n return (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Typography variant=\"body1\" component=\"span\">\n {t('conditionalAccess.addNestedCondition')}\n </Typography>\n <Tooltip title={tooltipTitle(t)} placement=\"top\">\n <HelpOutlineIcon fontSize=\"inherit\" style={{ marginLeft: '0.25rem' }} />\n </Tooltip>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAwBO,MAAM,YAAe,GAAA,CAC1B,CAEA,qBAAA,IAAA,CAAC,KACC,EAAA,EAAA,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAAQ,SAAU,EAAA,GAAA,EAAI,OAAM,QAC9C,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,EAAE,0CAA0C;AAAA;AAAA,GAEzD,EAAA,CAAA;AAAA,kBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,KAAI,KAAM,EAAA,QAAA,EAC7C,QAAE,EAAA,CAAA,CAAA,0CAA0C,CAC/C,EAAA;AAAA,CACF,EAAA;AAGK,MAAM,2BAA2B,MAAM;AAC5C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA,QAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAAQ,WAAU,MACnC,EAAA,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAC3C,EAAA,CAAA;AAAA,4BACC,OAAQ,EAAA,EAAA,KAAA,EAAO,YAAa,CAAA,CAAC,GAAG,SAAU,EAAA,KAAA,EACzC,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA,EAAgB,UAAS,SAAU,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,SAAA,IAAa,CACxE,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"const.esm.js","sources":["../../../src/components/ConditionalAccess/const.ts"],"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 { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { ConditionsData } from './types';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const criterias = {\n condition: 'condition' as keyof ConditionsData,\n anyOf: 'anyOf' as keyof ConditionsData,\n allOf: 'allOf' as keyof ConditionsData,\n not: 'not' as keyof ConditionsData,\n};\n\nexport const getCriteriasLabels = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => ({\n [criterias.condition]: t('conditionalAccess.condition'),\n [criterias.allOf]: t('conditionalAccess.allOf'),\n [criterias.anyOf]: t('conditionalAccess.anyOf'),\n [criterias.not]: t('conditionalAccess.not'),\n});\n\nexport const getConditionButtons = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => [\n { val: criterias.condition, label: t('conditionalAccess.condition') },\n { val: criterias.allOf, label: t('conditionalAccess.allOf') },\n { val: criterias.anyOf, label: t('conditionalAccess.anyOf') },\n { val: criterias.not, label: t('conditionalAccess.not') },\n];\n"],"names":[],"mappings":"AAmBO,MAAM,SAAY,GAAA;AAAA,EACvB,SAAW,EAAA,WAAA;AAAA,EACX,KAAO,EAAA,OAAA;AAAA,EACP,KAAO,EAAA,OAAA;AAAA,EACP,GAAK,EAAA;AACP;AAWa,MAAA,mBAAA,GAAsB,CACjC,CACG,KAAA;AAAA,EACH,EAAE,GAAK,EAAA,SAAA,CAAU,WAAW,KAAO,EAAA,CAAA,CAAE,6BAA6B,CAAE,EAAA;AAAA,EACpE,EAAE,GAAK,EAAA,SAAA,CAAU,OAAO,KAAO,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,EAC5D,EAAE,GAAK,EAAA,SAAA,CAAU,OAAO,KAAO,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,EAC5D,EAAE,GAAK,EAAA,SAAA,CAAU,KAAK,KAAO,EAAA,CAAA,CAAE,uBAAuB,CAAE;AAC1D;;;;"}
1
+ {"version":3,"file":"const.esm.js","sources":["../../../src/components/ConditionalAccess/const.ts"],"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 { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { ConditionsData } from './types';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const criterias = {\n condition: 'condition' as keyof ConditionsData,\n anyOf: 'anyOf' as keyof ConditionsData,\n allOf: 'allOf' as keyof ConditionsData,\n not: 'not' as keyof ConditionsData,\n};\n\nexport const getCriteriasLabels = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => ({\n [criterias.condition]: t('conditionalAccess.condition'),\n [criterias.allOf]: t('conditionalAccess.allOf'),\n [criterias.anyOf]: t('conditionalAccess.anyOf'),\n [criterias.not]: t('conditionalAccess.not'),\n});\n\nexport const getConditionButtons = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => [\n { val: criterias.condition, label: t('conditionalAccess.condition') },\n { val: criterias.allOf, label: t('conditionalAccess.allOf') },\n { val: criterias.anyOf, label: t('conditionalAccess.anyOf') },\n { val: criterias.not, label: t('conditionalAccess.not') },\n];\n"],"names":[],"mappings":"AAmBO,MAAM,SAAY,GAAA;AAAA,EACvB,SAAW,EAAA,WAAA;AAAA,EACX,KAAO,EAAA,OAAA;AAAA,EACP,KAAO,EAAA,OAAA;AAAA,EACP,GAAK,EAAA;AACP;AAWa,MAAA,mBAAA,GAAsB,CACjC,CACG,KAAA;AAAA,EACH,EAAE,GAAK,EAAA,SAAA,CAAU,WAAW,KAAO,EAAA,CAAA,CAAE,6BAA6B,CAAE,EAAA;AAAA,EACpE,EAAE,GAAK,EAAA,SAAA,CAAU,OAAO,KAAO,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,EAC5D,EAAE,GAAK,EAAA,SAAA,CAAU,OAAO,KAAO,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,EAC5D,EAAE,GAAK,EAAA,SAAA,CAAU,KAAK,KAAO,EAAA,CAAA,CAAE,uBAAuB,CAAE;AAC1D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddMembersForm.esm.js","sources":["../../../src/components/CreateRole/AddMembersForm.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 { useState, useEffect, useMemo } from 'react';\n\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nimport Autocomplete from '@mui/material/Autocomplete';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport TextField from '@mui/material/TextField';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport IconButton from '@mui/material/IconButton';\nimport { FormikErrors } from 'formik';\n\nimport { MemberEntity } from '../../types';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport {\n getChildGroupsCount,\n getMembersCount,\n getParentGroupsCount,\n} from '../../utils/create-role-utils';\nimport { MembersDropdownOption } from './MembersDropdownOption';\nimport { RoleFormValues, SelectedMember } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\ntype AddMembersFormProps = {\n selectedMembers: SelectedMember[];\n selectedMembersError?: string;\n membersData: { members: MemberEntity[]; loading: boolean; error: Error };\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n};\n\nconst getDescription = (\n member: MemberEntity,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n const memberCount = getMembersCount(member);\n const parentCount = getParentGroupsCount(member);\n const childCount = getChildGroupsCount(member);\n\n return member.kind === 'Group'\n ? [\n memberCount > 0\n ? t('common.membersCount' as any, { count: memberCount })\n : '',\n parentCount > 0\n ? t('common.parentGroupCount' as any, { count: parentCount })\n : '',\n childCount > 0\n ? t('common.childGroupsCount' as any, { count: childCount })\n : '',\n ]\n .filter(Boolean) // Remove any empty strings\n .join(', ')\n : undefined;\n};\n\nexport const AddMembersForm = ({\n selectedMembers,\n selectedMembersError,\n setFieldValue,\n membersData,\n}: AddMembersFormProps) => {\n const locale = useLanguage();\n const { t } = useTranslation();\n const [search, setSearch] = useState<string>('');\n const [selectedMember, setSelectedMember] =\n useState<SelectedMember[]>(selectedMembers);\n useEffect(() => {\n setSelectedMember(selectedMembers);\n }, [selectedMembers]);\n\n const membersOptions: SelectedMember[] = useMemo(() => {\n return membersData.members\n ? membersData.members.map((member: MemberEntity, index: number) => {\n const tag =\n member.metadata.etag ??\n `${member.metadata.name}-${member.kind}-${index}`;\n return {\n id: tag,\n label: member.spec?.profile?.displayName ?? member.metadata.name,\n description: getDescription(member, t),\n etag: tag,\n type: member.kind,\n namespace: member.metadata.namespace,\n members: getMembersCount(member),\n ref: stringifyEntityRef(member),\n };\n })\n : ([] as SelectedMember[]);\n }, [membersData.members, t]);\n\n const filteredMembers = useMemo(() => {\n if (search) {\n return membersOptions\n .filter(m =>\n m.label\n .toLocaleLowerCase(locale)\n .includes(search.toLocaleLowerCase(locale)),\n )\n .slice(0, 99);\n }\n\n return membersOptions.slice(0, 99);\n }, [membersOptions, search, locale]);\n\n const handleIsOptionEqualToValue = (\n option: SelectedMember,\n value: SelectedMember,\n ) =>\n value.etag\n ? option.etag === value.etag\n : selectedMember?.[0].etag === value.etag;\n\n return (\n <>\n <FormHelperText>{t('common.searchAndSelectUsersGroups')}</FormHelperText>\n <br />\n <Autocomplete\n disableCloseOnSelect\n data-testid=\"users-and-groups-autocomplete\"\n sx={{ width: '30%' }}\n multiple\n options={filteredMembers || []}\n getOptionLabel={(option: SelectedMember) => option.label ?? ''}\n isOptionEqualToValue={handleIsOptionEqualToValue}\n loading={membersData.loading}\n loadingText={<LinearProgress />}\n disableClearable\n value={selectedMember}\n onChange={(_e, value: SelectedMember[]) => {\n setSelectedMember(value);\n setFieldValue('selectedMembers', value);\n }}\n renderTags={() => ''}\n inputValue={search}\n onInputChange={(_e, newSearch: string, reason) =>\n reason === 'input' && setSearch(newSearch)\n }\n renderOption={(props, option: SelectedMember, state) => (\n <MembersDropdownOption props={props} option={option} state={state} />\n )}\n noOptionsText={t('common.noUsersAndGroupsFound')}\n clearOnEscape\n renderInput={params => (\n <TextField\n data-testid=\"users-and-groups-text-field\"\n {...params}\n name=\"add-users-and-groups\"\n variant=\"outlined\"\n label={t('common.selectUsersAndGroups')}\n error={!!selectedMembersError}\n helperText={selectedMembersError ?? ''}\n required\n onKeyDown={event => {\n if (event.key === 'Backspace' && params.inputProps.value === '') {\n event.stopPropagation();\n }\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {search && (\n <IconButton\n size=\"small\"\n onClick={() => {\n setSearch('');\n }}\n aria-label={t('common.clearSearch')}\n >\n <HighlightOffIcon fontSize=\"small\" />\n </IconButton>\n )}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n <br />\n {membersData.error?.message && (\n <FormHelperText error={!!membersData.error}>\n {t('common.errorFetchingUserGroups' as any, {\n error: membersData.error.message,\n })}\n </FormHelperText>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AddMembersForm.esm.js","sources":["../../../src/components/CreateRole/AddMembersForm.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 { useState, useEffect, useMemo } from 'react';\n\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nimport Autocomplete from '@mui/material/Autocomplete';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport TextField from '@mui/material/TextField';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport IconButton from '@mui/material/IconButton';\nimport { FormikErrors } from 'formik';\n\nimport { MemberEntity } from '../../types';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport {\n getChildGroupsCount,\n getMembersCount,\n getParentGroupsCount,\n} from '../../utils/create-role-utils';\nimport { MembersDropdownOption } from './MembersDropdownOption';\nimport { RoleFormValues, SelectedMember } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\ntype AddMembersFormProps = {\n selectedMembers: SelectedMember[];\n selectedMembersError?: string;\n membersData: { members: MemberEntity[]; loading: boolean; error: Error };\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n};\n\nconst getDescription = (\n member: MemberEntity,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n const memberCount = getMembersCount(member);\n const parentCount = getParentGroupsCount(member);\n const childCount = getChildGroupsCount(member);\n\n return member.kind === 'Group'\n ? [\n memberCount > 0\n ? t('common.membersCount' as any, { count: memberCount })\n : '',\n parentCount > 0\n ? t('common.parentGroupCount' as any, { count: parentCount })\n : '',\n childCount > 0\n ? t('common.childGroupsCount' as any, { count: childCount })\n : '',\n ]\n .filter(Boolean) // Remove any empty strings\n .join(', ')\n : undefined;\n};\n\nexport const AddMembersForm = ({\n selectedMembers,\n selectedMembersError,\n setFieldValue,\n membersData,\n}: AddMembersFormProps) => {\n const locale = useLanguage();\n const { t } = useTranslation();\n const [search, setSearch] = useState<string>('');\n const [selectedMember, setSelectedMember] =\n useState<SelectedMember[]>(selectedMembers);\n useEffect(() => {\n setSelectedMember(selectedMembers);\n }, [selectedMembers]);\n\n const membersOptions: SelectedMember[] = useMemo(() => {\n return membersData.members\n ? membersData.members.map((member: MemberEntity, index: number) => {\n const tag =\n member.metadata.etag ??\n `${member.metadata.name}-${member.kind}-${index}`;\n return {\n id: tag,\n label: member.spec?.profile?.displayName ?? member.metadata.name,\n description: getDescription(member, t),\n etag: tag,\n type: member.kind,\n namespace: member.metadata.namespace,\n members: getMembersCount(member),\n ref: stringifyEntityRef(member),\n };\n })\n : ([] as SelectedMember[]);\n }, [membersData.members, t]);\n\n const filteredMembers = useMemo(() => {\n if (search) {\n return membersOptions\n .filter(m =>\n m.label\n .toLocaleLowerCase(locale)\n .includes(search.toLocaleLowerCase(locale)),\n )\n .slice(0, 99);\n }\n\n return membersOptions.slice(0, 99);\n }, [membersOptions, search, locale]);\n\n const handleIsOptionEqualToValue = (\n option: SelectedMember,\n value: SelectedMember,\n ) =>\n value.etag\n ? option.etag === value.etag\n : selectedMember?.[0].etag === value.etag;\n\n return (\n <>\n <FormHelperText>{t('common.searchAndSelectUsersGroups')}</FormHelperText>\n <br />\n <Autocomplete\n disableCloseOnSelect\n data-testid=\"users-and-groups-autocomplete\"\n sx={{ width: '30%' }}\n multiple\n options={filteredMembers || []}\n getOptionLabel={(option: SelectedMember) => option.label ?? ''}\n isOptionEqualToValue={handleIsOptionEqualToValue}\n loading={membersData.loading}\n loadingText={<LinearProgress />}\n disableClearable\n value={selectedMember}\n onChange={(_e, value: SelectedMember[]) => {\n setSelectedMember(value);\n setFieldValue('selectedMembers', value);\n }}\n renderTags={() => ''}\n inputValue={search}\n onInputChange={(_e, newSearch: string, reason) =>\n reason === 'input' && setSearch(newSearch)\n }\n renderOption={(props, option: SelectedMember, state) => (\n <MembersDropdownOption props={props} option={option} state={state} />\n )}\n noOptionsText={t('common.noUsersAndGroupsFound')}\n clearOnEscape\n renderInput={params => (\n <TextField\n data-testid=\"users-and-groups-text-field\"\n {...params}\n name=\"add-users-and-groups\"\n variant=\"outlined\"\n label={t('common.selectUsersAndGroups')}\n error={!!selectedMembersError}\n helperText={selectedMembersError ?? ''}\n required\n onKeyDown={event => {\n if (event.key === 'Backspace' && params.inputProps.value === '') {\n event.stopPropagation();\n }\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {search && (\n <IconButton\n size=\"small\"\n onClick={() => {\n setSearch('');\n }}\n aria-label={t('common.clearSearch')}\n >\n <HighlightOffIcon fontSize=\"small\" />\n </IconButton>\n )}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n <br />\n {membersData.error?.message && (\n <FormHelperText error={!!membersData.error}>\n {t('common.errorFetchingUserGroups' as any, {\n error: membersData.error.message,\n })}\n </FormHelperText>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddedMembersTableColumn.esm.js","sources":["../../../src/components/CreateRole/AddedMembersTableColumn.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Delete from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport { FormikErrors } from 'formik';\n\nimport { RoleFormValues, SelectedMember } from './types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const reviewStepMemebersTableColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return [\n {\n title: t('common.name'),\n field: 'label',\n type: 'string',\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (mem: number) => {\n if (mem || mem === 0) return mem;\n return '-';\n },\n },\n ];\n};\n\nexport const selectedMembersColumns = (\n selectedMembers: SelectedMember[],\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<SelectedMember>[] => {\n const onRemove = (etag: string) => {\n const updatedMembers = selectedMembers.filter(\n (mem: SelectedMember) => mem.etag !== etag,\n );\n setFieldValue('selectedMembers', updatedMembers);\n };\n\n return [\n {\n title: t('common.name'),\n field: 'label',\n type: 'string',\n render: props => {\n const { kind, namespace, name } = parseEntityRef(props.ref);\n return (\n <Link to={`/catalog/${namespace}/${kind}/${name}`} target=\"blank\">\n {props.label}\n </Link>\n );\n },\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n emptyValue: '-',\n },\n {\n title: t('common.actions'),\n sorting: false,\n render: (mem: SelectedMember) => {\n return (\n <Box key={mem.etag}>\n <IconButton\n onClick={() => onRemove(mem.etag)}\n aria-label={t('common.remove')}\n title={t('common.removeMember')}\n style={{ padding: '0.5rem', borderRadius: '50%' }}\n sx={{ '&:hover': { borderRadius: '50%' } }}\n >\n <Delete />\n </IconButton>\n </Box>\n );\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;;;;;AA2Ba,MAAA,8BAAA,GAAiC,CAC5C,CACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,GAAgB,KAAA;AACvB,QAAI,IAAA,GAAA,IAAO,GAAQ,KAAA,CAAA,EAAU,OAAA,GAAA;AAC7B,QAAO,OAAA,GAAA;AAAA;AACT;AACF,GACF;AACF;AAEO,MAAM,sBAAyB,GAAA,CACpC,eACA,EAAA,aAAA,EAKA,CACkC,KAAA;AAClC,EAAM,MAAA,QAAA,GAAW,CAAC,IAAiB,KAAA;AACjC,IAAA,MAAM,iBAAiB,eAAgB,CAAA,MAAA;AAAA,MACrC,CAAC,GAAwB,KAAA,GAAA,CAAI,IAAS,KAAA;AAAA,KACxC;AACA,IAAA,aAAA,CAAc,mBAAmB,cAAc,CAAA;AAAA,GACjD;AAEA,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,CAAS,KAAA,KAAA;AACf,QAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,MAAS,GAAA,cAAA,CAAe,MAAM,GAAG,CAAA;AAC1D,QAAA,uBACG,GAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAO,EAAA,OAAA,EACvD,gBAAM,KACT,EAAA,CAAA;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,UAAY,EAAA;AAAA,KACd;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,OAAS,EAAA,KAAA;AAAA,MACT,MAAA,EAAQ,CAAC,GAAwB,KAAA;AAC/B,QAAA,2BACG,GACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAS,EAAA,MAAM,QAAS,CAAA,GAAA,CAAI,IAAI,CAAA;AAAA,YAChC,YAAA,EAAY,EAAE,eAAe,CAAA;AAAA,YAC7B,KAAA,EAAO,EAAE,qBAAqB,CAAA;AAAA,YAC9B,KAAO,EAAA,EAAE,OAAS,EAAA,QAAA,EAAU,cAAc,KAAM,EAAA;AAAA,YAChD,IAAI,EAAE,SAAA,EAAW,EAAE,YAAA,EAAc,OAAQ,EAAA;AAAA,YAEzC,8BAAC,MAAO,EAAA,EAAA;AAAA;AAAA,SACV,EAAA,EATQ,IAAI,IAUd,CAAA;AAAA;AAEJ;AACF,GACF;AACF;;;;"}
1
+ {"version":3,"file":"AddedMembersTableColumn.esm.js","sources":["../../../src/components/CreateRole/AddedMembersTableColumn.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Delete from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport { FormikErrors } from 'formik';\n\nimport { RoleFormValues, SelectedMember } from './types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const reviewStepMemebersTableColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return [\n {\n title: t('common.name'),\n field: 'label',\n type: 'string',\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (mem: number) => {\n if (mem || mem === 0) return mem;\n return '-';\n },\n },\n ];\n};\n\nexport const selectedMembersColumns = (\n selectedMembers: SelectedMember[],\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<SelectedMember>[] => {\n const onRemove = (etag: string) => {\n const updatedMembers = selectedMembers.filter(\n (mem: SelectedMember) => mem.etag !== etag,\n );\n setFieldValue('selectedMembers', updatedMembers);\n };\n\n return [\n {\n title: t('common.name'),\n field: 'label',\n type: 'string',\n render: props => {\n const { kind, namespace, name } = parseEntityRef(props.ref);\n return (\n <Link to={`/catalog/${namespace}/${kind}/${name}`} target=\"blank\">\n {props.label}\n </Link>\n );\n },\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n emptyValue: '-',\n },\n {\n title: t('common.actions'),\n sorting: false,\n render: (mem: SelectedMember) => {\n return (\n <Box key={mem.etag}>\n <IconButton\n onClick={() => onRemove(mem.etag)}\n aria-label={t('common.remove')}\n title={t('common.removeMember')}\n style={{ padding: '0.5rem', borderRadius: '50%' }}\n sx={{ '&:hover': { borderRadius: '50%' } }}\n >\n <Delete />\n </IconButton>\n </Box>\n );\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;;;;;AA2Ba,MAAA,8BAAA,GAAiC,CAC5C,CACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,GAAgB,KAAA;AACvB,QAAI,IAAA,GAAA,IAAO,GAAQ,KAAA,CAAA,EAAU,OAAA,GAAA;AAC7B,QAAO,OAAA,GAAA;AAAA;AACT;AACF,GACF;AACF;AAEO,MAAM,sBAAyB,GAAA,CACpC,eACA,EAAA,aAAA,EAKA,CACkC,KAAA;AAClC,EAAM,MAAA,QAAA,GAAW,CAAC,IAAiB,KAAA;AACjC,IAAA,MAAM,iBAAiB,eAAgB,CAAA,MAAA;AAAA,MACrC,CAAC,GAAwB,KAAA,GAAA,CAAI,IAAS,KAAA;AAAA,KACxC;AACA,IAAA,aAAA,CAAc,mBAAmB,cAAc,CAAA;AAAA,GACjD;AAEA,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,CAAS,KAAA,KAAA;AACf,QAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,MAAS,GAAA,cAAA,CAAe,MAAM,GAAG,CAAA;AAC1D,QAAA,uBACG,GAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAO,EAAA,OAAA,EACvD,gBAAM,KACT,EAAA,CAAA;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,UAAY,EAAA;AAAA,KACd;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,OAAS,EAAA,KAAA;AAAA,MACT,MAAA,EAAQ,CAAC,GAAwB,KAAA;AAC/B,QAAA,2BACG,GACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAS,EAAA,MAAM,QAAS,CAAA,GAAA,CAAI,IAAI,CAAA;AAAA,YAChC,YAAA,EAAY,EAAE,eAAe,CAAA;AAAA,YAC7B,KAAA,EAAO,EAAE,qBAAqB,CAAA;AAAA,YAC9B,KAAO,EAAA,EAAE,OAAS,EAAA,QAAA,EAAU,cAAc,KAAM,EAAA;AAAA,YAChD,IAAI,EAAE,SAAA,EAAW,EAAE,YAAA,EAAc,OAAQ,EAAA;AAAA,YAEzC,8BAAC,MAAO,EAAA,EAAA;AAAA;AAAA,SACV,EAAA,EATQ,IAAI,IAUd,CAAA;AAAA;AAEJ;AACF,GACF;AACF;;;;"}
@@ -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';\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 = t(\n 'roleForm.review.permissionPoliciesWithCount' as any,\n { count: String(getPermissionsNumber(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,qBAAwB,GAAA,CAAA;AAAA,IAC5B,6CAAA;AAAA,IACA,EAAE,KAAO,EAAA,MAAA,CAAO,oBAAqB,CAAA,MAAM,CAAC,CAAE;AAAA,GAChD;AACA,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
+ {"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 '../../alpha/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 = t(\n 'roleForm.review.permissionPoliciesWithCount' as any,\n { count: String(getPermissionsNumber(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,qBAAwB,GAAA,CAAA;AAAA,IAC5B,6CAAA;AAAA,IACA,EAAE,KAAO,EAAA,MAAA,CAAO,oBAAqB,CAAA,MAAM,CAAC,CAAE;AAAA,GAChD;AACA,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 +1 @@
1
- {"version":3,"file":"SelectedPermissionPoliciesColumn.esm.js","sources":["../../../src/components/CreateRole/SelectedPermissionPoliciesColumn.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 { getRulesNumber } from '../../utils/create-role-utils';\nimport { getPolicyString } from '../../utils/rbac-utils';\nimport { ConditionsData } from '../ConditionalAccess/types';\nimport { RowPolicy } from './types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const selectedPermissionPoliciesColumn = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policies',\n render: (policies: RowPolicy[]) => getPolicyString(policies),\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n render: (conditions: ConditionsData) => {\n const totalRules = getRulesNumber(conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAsBa,MAAA,gCAAA,GAAmC,CAC9C,CACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,UAAA;AAAA,MACP,MAAQ,EAAA,CAAC,QAA0B,KAAA,eAAA,CAAgB,QAAQ;AAAA,KAC7D;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,MAAA,EAAQ,CAAC,UAA+B,KAAA;AACtC,QAAM,MAAA,UAAA,GAAa,eAAe,UAAU,CAAA;AAC5C,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
1
+ {"version":3,"file":"SelectedPermissionPoliciesColumn.esm.js","sources":["../../../src/components/CreateRole/SelectedPermissionPoliciesColumn.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 { getRulesNumber } from '../../utils/create-role-utils';\nimport { getPolicyString } from '../../utils/rbac-utils';\nimport { ConditionsData } from '../ConditionalAccess/types';\nimport { RowPolicy } from './types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const selectedPermissionPoliciesColumn = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policies',\n render: (policies: RowPolicy[]) => getPolicyString(policies),\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n render: (conditions: ConditionsData) => {\n const totalRules = getRulesNumber(conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAsBa,MAAA,gCAAA,GAAmC,CAC9C,CACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,UAAA;AAAA,MACP,MAAQ,EAAA,CAAC,QAA0B,KAAA,eAAA,CAAgB,QAAQ;AAAA,KAC7D;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,MAAA,EAAQ,CAAC,UAA+B,KAAA;AACtC,QAAM,MAAA,UAAA,GAAa,eAAe,UAAU,CAAA;AAC5C,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
@@ -18,7 +18,7 @@ const RbacPage = ({ useHeader = true }) => {
18
18
  return result?.status === "Authorized" ? /* @__PURE__ */ jsxs(Page, { themeId: "tool", children: [
19
19
  useHeader && /* @__PURE__ */ jsx(Header, { title: t("page.title") }),
20
20
  /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(DeleteDialogContextProvider, { children: /* @__PURE__ */ jsx(RolesList, {}) }) })
21
- ] }) : /* @__PURE__ */ jsx(ErrorPage, { statusMessage: t("errors.notFound") });
21
+ ] }) : /* @__PURE__ */ jsx(ErrorPage, { status: "403", statusMessage: t("errors.notAllowed") });
22
22
  }
23
23
  return /* @__PURE__ */ jsx(Progress, {});
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RbacPage.esm.js","sources":["../../src/components/RbacPage.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 { Content, Header, Page, Progress } from '@backstage/core-components';\n\nimport { RolesList } from './RolesList/RolesList';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { useAsync } from 'react-use';\nimport { ErrorPage } from '@backstage/core-components';\nimport { DeleteDialogContextProvider } from './DeleteDialogContext';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const RbacPage = ({ useHeader = true }: { useHeader?: boolean }) => {\n const rbacApi = useApi(rbacApiRef);\n const { t } = useTranslation();\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n if (!isUserLoading) {\n return result?.status === 'Authorized' ? (\n <Page themeId=\"tool\">\n {useHeader && <Header title={t('page.title')} />}\n <Content>\n <DeleteDialogContextProvider>\n <RolesList />\n </DeleteDialogContextProvider>\n </Content>\n </Page>\n ) : (\n <ErrorPage statusMessage={t('errors.notFound')} />\n );\n }\n return <Progress />;\n};\n"],"names":[],"mappings":";;;;;;;;;AAyBO,MAAM,QAAW,GAAA,CAAC,EAAE,SAAA,GAAY,MAAoC,KAAA;AACzE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C;AAAC,GACH;AAEA,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,OAAO,QAAQ,MAAW,KAAA,YAAA,mBACvB,IAAA,CAAA,IAAA,EAAA,EAAK,SAAQ,MACX,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,oBAAc,GAAA,CAAA,MAAA,EAAA,EAAO,KAAO,EAAA,CAAA,CAAE,YAAY,CAAG,EAAA,CAAA;AAAA,0BAC7C,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,+BACC,QAAC,kBAAA,GAAA,CAAA,SAAA,EAAA,EAAU,GACb,CACF,EAAA;AAAA,KAAA,EACF,oBAEC,GAAA,CAAA,SAAA,EAAA,EAAU,aAAe,EAAA,CAAA,CAAE,iBAAiB,CAAG,EAAA,CAAA;AAAA;AAGpD,EAAA,2BAAQ,QAAS,EAAA,EAAA,CAAA;AACnB;;;;"}
1
+ {"version":3,"file":"RbacPage.esm.js","sources":["../../src/components/RbacPage.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 { Content, Header, Page, Progress } from '@backstage/core-components';\n\nimport { RolesList } from './RolesList/RolesList';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { useAsync } from 'react-use';\nimport { ErrorPage } from '@backstage/core-components';\nimport { DeleteDialogContextProvider } from './DeleteDialogContext';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const RbacPage = ({ useHeader = true }: { useHeader?: boolean }) => {\n const rbacApi = useApi(rbacApiRef);\n const { t } = useTranslation();\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n if (!isUserLoading) {\n return result?.status === 'Authorized' ? (\n <Page themeId=\"tool\">\n {useHeader && <Header title={t('page.title')} />}\n <Content>\n <DeleteDialogContextProvider>\n <RolesList />\n </DeleteDialogContextProvider>\n </Content>\n </Page>\n ) : (\n <ErrorPage status=\"403\" statusMessage={t('errors.notAllowed')} />\n );\n }\n return <Progress />;\n};\n"],"names":[],"mappings":";;;;;;;;;AAyBO,MAAM,QAAW,GAAA,CAAC,EAAE,SAAA,GAAY,MAAoC,KAAA;AACzE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C;AAAC,GACH;AAEA,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,OAAO,QAAQ,MAAW,KAAA,YAAA,mBACvB,IAAA,CAAA,IAAA,EAAA,EAAK,SAAQ,MACX,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,oBAAc,GAAA,CAAA,MAAA,EAAA,EAAO,KAAO,EAAA,CAAA,CAAE,YAAY,CAAG,EAAA,CAAA;AAAA,0BAC7C,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,+BACC,QAAC,kBAAA,GAAA,CAAA,SAAA,EAAA,EAAU,GACb,CACF,EAAA;AAAA,KACF,EAAA,CAAA,uBAEC,SAAU,EAAA,EAAA,MAAA,EAAO,OAAM,aAAe,EAAA,CAAA,CAAE,mBAAmB,CAAG,EAAA,CAAA;AAAA;AAGnE,EAAA,2BAAQ,QAAS,EAAA,EAAA,CAAA;AACnB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MembersListColumns.esm.js","sources":["../../../src/components/RoleOverview/MembersListColumns.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 { Link, TableColumn } from '@backstage/core-components';\n\nimport { MembersData } from '../../types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<MembersData>[] => {\n return [\n {\n title: t('common.name'),\n field: 'name',\n type: 'string',\n render: props => {\n return (\n <Link\n to={`/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`}\n >\n {props.name}\n </Link>\n );\n },\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (props: MembersData) => {\n return props.type === 'User' ? '-' : props.members;\n },\n customSort: (a, b) => {\n if (a.members === 0) {\n return -1;\n }\n if (b.members === 0) {\n return 1;\n }\n if (a.members === b.members) {\n return 0;\n }\n return a.members < b.members ? -1 : 1;\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAqBa,MAAA,UAAA,GAAa,CACxB,CAC+B,KAAA;AAC/B,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,CAAS,KAAA,KAAA;AACf,QACE,uBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,YAEtE,QAAM,EAAA,KAAA,CAAA;AAAA;AAAA,SACT;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,KAAuB,KAAA;AAC9B,QAAA,OAAO,KAAM,CAAA,IAAA,KAAS,MAAS,GAAA,GAAA,GAAM,KAAM,CAAA,OAAA;AAAA,OAC7C;AAAA,MACA,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,CAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,OAAY,KAAA,CAAA,CAAE,OAAS,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,GAAU,EAAK,GAAA,CAAA;AAAA;AACtC;AACF,GACF;AACF;;;;"}
1
+ {"version":3,"file":"MembersListColumns.esm.js","sources":["../../../src/components/RoleOverview/MembersListColumns.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 { Link, TableColumn } from '@backstage/core-components';\n\nimport { MembersData } from '../../types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<MembersData>[] => {\n return [\n {\n title: t('common.name'),\n field: 'name',\n type: 'string',\n render: props => {\n return (\n <Link\n to={`/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`}\n >\n {props.name}\n </Link>\n );\n },\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (props: MembersData) => {\n return props.type === 'User' ? '-' : props.members;\n },\n customSort: (a, b) => {\n if (a.members === 0) {\n return -1;\n }\n if (b.members === 0) {\n return 1;\n }\n if (a.members === b.members) {\n return 0;\n }\n return a.members < b.members ? -1 : 1;\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAqBa,MAAA,UAAA,GAAa,CACxB,CAC+B,KAAA;AAC/B,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,CAAS,KAAA,KAAA;AACf,QACE,uBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,YAEtE,QAAM,EAAA,KAAA,CAAA;AAAA;AAAA,SACT;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,KAAuB,KAAA;AAC9B,QAAA,OAAO,KAAM,CAAA,IAAA,KAAS,MAAS,GAAA,GAAA,GAAM,KAAM,CAAA,OAAA;AAAA,OAC7C;AAAA,MACA,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,CAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,OAAY,KAAA,CAAA,CAAE,OAAS,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,GAAU,EAAK,GAAA,CAAA;AAAA;AACtC;AACF,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionsListColumns.esm.js","sources":["../../../src/components/RoleOverview/PermissionsListColumns.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 { TableColumn } from '@backstage/core-components';\n\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<PermissionsData>[] => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n type: 'string',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n type: 'string',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policyString',\n type: 'string',\n customSort: (a, b) => {\n if (a.policies.length === 0) {\n return -1;\n }\n if (b.policies.length === 0) {\n return 1;\n }\n if (a.policies.length === b.policies.length) {\n return 0;\n }\n return a.policies.length < b.policies.length ? -1 : 1;\n },\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n type: 'string',\n render: (permissionsData: PermissionsData) => {\n const totalRules = getRulesNumber(permissionsData.conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;AAsBa,MAAA,UAAA,GAAa,CACxB,CACmC,KAAA;AACnC,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA,QAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,cAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,IAAI,CAAE,CAAA,QAAA,CAAS,MAAW,KAAA,CAAA,CAAE,SAAS,MAAQ,EAAA;AAC3C,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,EAAE,QAAS,CAAA,MAAA,GAAS,CAAE,CAAA,QAAA,CAAS,SAAS,EAAK,GAAA,CAAA;AAAA;AACtD,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,CAAC,eAAqC,KAAA;AAC5C,QAAM,MAAA,UAAA,GAAa,cAAe,CAAA,eAAA,CAAgB,UAAU,CAAA;AAC5D,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
1
+ {"version":3,"file":"PermissionsListColumns.esm.js","sources":["../../../src/components/RoleOverview/PermissionsListColumns.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 { TableColumn } from '@backstage/core-components';\n\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<PermissionsData>[] => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n type: 'string',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n type: 'string',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policyString',\n type: 'string',\n customSort: (a, b) => {\n if (a.policies.length === 0) {\n return -1;\n }\n if (b.policies.length === 0) {\n return 1;\n }\n if (a.policies.length === b.policies.length) {\n return 0;\n }\n return a.policies.length < b.policies.length ? -1 : 1;\n },\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n type: 'string',\n render: (permissionsData: PermissionsData) => {\n const totalRules = getRulesNumber(permissionsData.conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;AAsBa,MAAA,UAAA,GAAa,CACxB,CACmC,KAAA;AACnC,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA,QAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,cAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,IAAI,CAAE,CAAA,QAAA,CAAS,MAAW,KAAA,CAAA,CAAE,SAAS,MAAQ,EAAA;AAC3C,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,EAAE,QAAS,CAAA,MAAA,GAAS,CAAE,CAAA,QAAA,CAAS,SAAS,EAAK,GAAA,CAAA;AAAA;AACtD,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,CAAC,eAAqC,KAAA;AAC5C,QAAM,MAAA,UAAA,GAAa,cAAe,CAAA,eAAA,CAAgB,UAAU,CAAA;AAC5D,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RolesListColumns.esm.js","sources":["../../../src/components/RolesList/RolesListColumns.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { RolesData } from '../../types';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport DeleteRole from './DeleteRole';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n locale: string,\n): TableColumn<RolesData>[] => {\n return [\n {\n title: t('table.headers.name'),\n field: 'name',\n type: 'string',\n render: (props: RolesData) => {\n const { kind, namespace, name } = parseEntityRef(props.name);\n return (\n <Link to={`roles/${kind}/${namespace}/${name}`}>{props.name}</Link>\n );\n },\n },\n {\n title: t('table.headers.usersAndGroups'),\n field: 'members',\n type: 'string',\n align: 'left',\n render: props => getMembers(props.members, t),\n customSort: (a, b) => {\n if (a.members.length === 0) {\n return -1;\n }\n if (b.members.length === 0) {\n return 1;\n }\n if (a.members.length === b.members.length) {\n return 0;\n }\n return a.members.length < b.members.length ? -1 : 1;\n },\n },\n {\n title: t('table.headers.accessiblePlugins'),\n field: 'accessiblePlugins',\n type: 'string',\n align: 'left',\n render: (props: RolesData) => {\n const pls = props.accessiblePlugins.map(\n p => p[0].toLocaleUpperCase(locale) + p.slice(1),\n );\n const plsTooltip = pls.join(', ');\n const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : '';\n\n return pls.length > 0 ? (\n <Tooltip title={plsTooltip || ''} placement=\"top-start\">\n <Typography>\n {pls.length === 1\n ? `${pls[0]}`\n : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`}\n </Typography>\n </Tooltip>\n ) : (\n '-'\n );\n },\n },\n {\n title: t('table.headers.actions'),\n sorting: false,\n render: (props: RolesData) => (\n <>\n <EditRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n <DeleteRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n </>\n ),\n },\n ];\n};\n"],"names":[],"mappings":";;;;;;;;;AA4Ba,MAAA,UAAA,GAAa,CACxB,CAAA,EACA,MAC6B,KAAA;AAC7B,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,oBAAoB,CAAA;AAAA,MAC7B,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,CAAC,KAAqB,KAAA;AAC5B,QAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,MAAS,GAAA,cAAA,CAAe,MAAM,IAAI,CAAA;AAC3D,QACE,uBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAI,CAAS,MAAA,EAAA,IAAI,CAAI,CAAA,EAAA,SAAS,CAAI,CAAA,EAAA,IAAI,CAAK,CAAA,EAAA,QAAA,EAAA,KAAA,CAAM,IAAK,EAAA,CAAA;AAAA;AAEhE,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,8BAA8B,CAAA;AAAA,MACvC,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAQ,EAAA,CAAA,KAAA,KAAS,UAAW,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,MAC5C,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,OAAQ,CAAA,MAAA,KAAW,CAAG,EAAA;AAC1B,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,OAAQ,CAAA,MAAA,KAAW,CAAG,EAAA;AAC1B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,IAAI,CAAE,CAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,CAAE,QAAQ,MAAQ,EAAA;AACzC,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,EAAE,OAAQ,CAAA,MAAA,GAAS,CAAE,CAAA,OAAA,CAAQ,SAAS,EAAK,GAAA,CAAA;AAAA;AACpD,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,iCAAiC,CAAA;AAAA,MAC1C,KAAO,EAAA,mBAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,KAAqB,KAAA;AAC5B,QAAM,MAAA,GAAA,GAAM,MAAM,iBAAkB,CAAA,GAAA;AAAA,UAClC,CAAA,CAAA,KAAK,EAAE,CAAC,CAAA,CAAE,kBAAkB,MAAM,CAAA,GAAI,CAAE,CAAA,KAAA,CAAM,CAAC;AAAA,SACjD;AACA,QAAM,MAAA,UAAA,GAAa,GAAI,CAAA,IAAA,CAAK,IAAI,CAAA;AAChC,QAAM,MAAA,gBAAA,GAAmB,IAAI,MAAS,GAAA,CAAA,GAAI,KAAK,GAAI,CAAA,MAAA,GAAS,CAAC,CAAK,CAAA,GAAA,EAAA;AAElE,QAAA,OAAO,GAAI,CAAA,MAAA,GAAS,CAClB,mBAAA,GAAA,CAAC,WAAQ,KAAO,EAAA,UAAA,IAAc,EAAI,EAAA,SAAA,EAAU,WAC1C,EAAA,QAAA,kBAAA,GAAA,CAAC,UACE,EAAA,EAAA,QAAA,EAAA,GAAA,CAAI,WAAW,CACZ,GAAA,CAAA,EAAG,GAAI,CAAA,CAAC,CAAC,CAAA,CAAA,GACT,CAAG,EAAA,GAAA,CAAI,CAAC,CAAC,CAAA,EAAA,EAAK,GAAI,CAAA,CAAC,CAAC,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAA,EAC9C,GACF,CAEA,GAAA,GAAA;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,MAChC,OAAS,EAAA,KAAA;AAAA,MACT,MAAA,EAAQ,CAAC,KAAA,qBAEL,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,KAAM,CAAA,wBAAA,CAAyB,IAAK,CAAA,OAAA;AAAA,YAC7C,UAAU,KAAM,CAAA;AAAA;AAAA,SAClB;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,KAAM,CAAA,wBAAA,CAAyB,IAAK,CAAA,OAAA;AAAA,YAC7C,UAAU,KAAM,CAAA;AAAA;AAAA;AAClB,OACF,EAAA;AAAA;AAEJ,GACF;AACF;;;;"}
1
+ {"version":3,"file":"RolesListColumns.esm.js","sources":["../../../src/components/RolesList/RolesListColumns.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { RolesData } from '../../types';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport DeleteRole from './DeleteRole';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n locale: string,\n): TableColumn<RolesData>[] => {\n return [\n {\n title: t('table.headers.name'),\n field: 'name',\n type: 'string',\n render: (props: RolesData) => {\n const { kind, namespace, name } = parseEntityRef(props.name);\n return (\n <Link to={`roles/${kind}/${namespace}/${name}`}>{props.name}</Link>\n );\n },\n },\n {\n title: t('table.headers.usersAndGroups'),\n field: 'members',\n type: 'string',\n align: 'left',\n render: props => getMembers(props.members, t),\n customSort: (a, b) => {\n if (a.members.length === 0) {\n return -1;\n }\n if (b.members.length === 0) {\n return 1;\n }\n if (a.members.length === b.members.length) {\n return 0;\n }\n return a.members.length < b.members.length ? -1 : 1;\n },\n },\n {\n title: t('table.headers.accessiblePlugins'),\n field: 'accessiblePlugins',\n type: 'string',\n align: 'left',\n render: (props: RolesData) => {\n const pls = props.accessiblePlugins.map(\n p => p[0].toLocaleUpperCase(locale) + p.slice(1),\n );\n const plsTooltip = pls.join(', ');\n const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : '';\n\n return pls.length > 0 ? (\n <Tooltip title={plsTooltip || ''} placement=\"top-start\">\n <Typography>\n {pls.length === 1\n ? `${pls[0]}`\n : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`}\n </Typography>\n </Tooltip>\n ) : (\n '-'\n );\n },\n },\n {\n title: t('table.headers.actions'),\n sorting: false,\n render: (props: RolesData) => (\n <>\n <EditRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n <DeleteRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n </>\n ),\n },\n ];\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Trans.esm.js","sources":["../../src/components/Trans.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 */\n\nimport { isValidElement, Fragment } from 'react';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { rbacTranslationRef } from '../translations';\n\ntype Messages = typeof rbacTranslationRef.T;\n\ninterface TransProps<TMessages extends { [key in string]: string }> {\n message: keyof TMessages;\n params?: any;\n}\n\nexport const Trans = ({ message, params }: TransProps<Messages>) => {\n const { t } = useTranslation();\n const translatedMessage = t(message, params);\n\n if (params?.link && isValidElement(params.link)) {\n // Replace <link>...</link> in the string with the provided JSX\n const parts = translatedMessage.split(/(<link>[^<]*<\\/link>)/);\n\n return (\n <>\n {parts.map((part, index) => {\n const match = part.match(/^<link>([^<]*)<\\/link>$/);\n if (match) {\n // Replace <link> placeholder with JSX from params\n return <Fragment key={index}>{params.link}</Fragment>;\n }\n return part;\n })}\n </>\n );\n }\n\n return translatedMessage;\n};\n"],"names":["Fragment"],"mappings":";;;;AA2BO,MAAM,KAAQ,GAAA,CAAC,EAAE,OAAA,EAAS,QAAmC,KAAA;AAClE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAM,MAAA,iBAAA,GAAoB,CAAE,CAAA,OAAA,EAAS,MAAM,CAAA;AAE3C,EAAA,IAAI,MAAQ,EAAA,IAAA,IAAQ,cAAe,CAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAE/C,IAAM,MAAA,KAAA,GAAQ,iBAAkB,CAAA,KAAA,CAAM,uBAAuB,CAAA;AAE7D,IAAA,uBAEK,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,yBAAyB,CAAA;AAClD,MAAA,IAAI,KAAO,EAAA;AAET,QAAA,uBAAQA,GAAAA,CAAAA,UAAAA,EAAA,EAAsB,QAAA,EAAA,MAAA,CAAO,QAAf,KAAoB,CAAA;AAAA;AAE5C,MAAO,OAAA,IAAA;AAAA,KACR,CACH,EAAA,CAAA;AAAA;AAIJ,EAAO,OAAA,iBAAA;AACT;;;;"}
1
+ {"version":3,"file":"Trans.esm.js","sources":["../../src/components/Trans.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 */\n\nimport { isValidElement, Fragment } from 'react';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { rbacTranslationRef } from '../alpha/translations';\n\ntype Messages = typeof rbacTranslationRef.T;\n\ninterface TransProps<TMessages extends { [key in string]: string }> {\n message: keyof TMessages;\n params?: any;\n}\n\nexport const Trans = ({ message, params }: TransProps<Messages>) => {\n const { t } = useTranslation();\n const translatedMessage = t(message, params);\n\n if (params?.link && isValidElement(params.link)) {\n // Replace <link>...</link> in the string with the provided JSX\n const parts = translatedMessage.split(/(<link>[^<]*<\\/link>)/);\n\n return (\n <>\n {parts.map((part, index) => {\n const match = part.match(/^<link>([^<]*)<\\/link>$/);\n if (match) {\n // Replace <link> placeholder with JSX from params\n return <Fragment key={index}>{params.link}</Fragment>;\n }\n return part;\n })}\n </>\n );\n }\n\n return translatedMessage;\n};\n"],"names":["Fragment"],"mappings":";;;;AA2BO,MAAM,KAAQ,GAAA,CAAC,EAAE,OAAA,EAAS,QAAmC,KAAA;AAClE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAM,MAAA,iBAAA,GAAoB,CAAE,CAAA,OAAA,EAAS,MAAM,CAAA;AAE3C,EAAA,IAAI,MAAQ,EAAA,IAAA,IAAQ,cAAe,CAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAE/C,IAAM,MAAA,KAAA,GAAQ,iBAAkB,CAAA,KAAA,CAAM,uBAAuB,CAAA;AAE7D,IAAA,uBAEK,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,yBAAyB,CAAA;AAClD,MAAA,IAAI,KAAO,EAAA;AAET,QAAA,uBAAQA,GAAAA,CAAAA,UAAAA,EAAA,EAAsB,QAAA,EAAA,MAAA,CAAO,QAAf,KAAoB,CAAA;AAAA;AAE5C,MAAO,OAAA,IAAA;AAAA,KACR,CACH,EAAA,CAAA;AAAA;AAIJ,EAAO,OAAA,iBAAA;AACT;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
2
- import '../translations/index.esm.js';
3
- import { rbacTranslationRef } from '../translations/ref.esm.js';
2
+ import '../alpha/translations/index.esm.js';
3
+ import { rbacTranslationRef } from '../alpha/translations/ref.esm.js';
4
4
 
5
5
  const useTranslation = () => useTranslationRef(rbacTranslationRef);
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"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 {\n useTranslationRef,\n TranslationFunction,\n} from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../translations';\n\n/**\n * @alpha\n */\nexport const useTranslation = (): {\n t: TranslationFunction<typeof rbacTranslationRef.T>;\n} => useTranslationRef(rbacTranslationRef);\n"],"names":[],"mappings":";;;;AAwBa,MAAA,cAAA,GAAiB,MAEzB,iBAAA,CAAkB,kBAAkB;;;;"}
1
+ {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"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 {\n useTranslationRef,\n TranslationFunction,\n} from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../alpha/translations';\n\n/**\n * @alpha\n */\nexport const useTranslation = (): {\n t: TranslationFunction<typeof rbacTranslationRef.T>;\n} => useTranslationRef(rbacTranslationRef);\n"],"names":[],"mappings":";;;;AAwBa,MAAA,cAAA,GAAiB,MAEzB,iBAAA,CAAkB,kBAAkB;;;;"}
@@ -0,0 +1,154 @@
1
+ var name = "@backstage-community/plugin-rbac";
2
+ var version = "1.50.0";
3
+ var main = "src/index.ts";
4
+ var types = "src/index.ts";
5
+ var license = "Apache-2.0";
6
+ var publishConfig = {
7
+ access: "public"
8
+ };
9
+ var backstage = {
10
+ role: "frontend-plugin",
11
+ pluginId: "rbac",
12
+ pluginPackages: [
13
+ "@backstage-community/plugin-rbac",
14
+ "@backstage-community/plugin-rbac-backend",
15
+ "@backstage-community/plugin-rbac-common",
16
+ "@backstage-community/plugin-rbac-node"
17
+ ]
18
+ };
19
+ var sideEffects = false;
20
+ var exports = {
21
+ ".": "./src/index.ts",
22
+ "./alpha": "./src/alpha/index.ts",
23
+ "./package.json": "./package.json"
24
+ };
25
+ var typesVersions = {
26
+ "*": {
27
+ alpha: [
28
+ "src/alpha/index.ts"
29
+ ],
30
+ "package.json": [
31
+ "package.json"
32
+ ]
33
+ }
34
+ };
35
+ var scripts = {
36
+ build: "backstage-cli package build",
37
+ clean: "backstage-cli package clean",
38
+ "lint:check": "backstage-cli package lint",
39
+ "lint:fix": "backstage-cli package lint --fix",
40
+ postpack: "backstage-cli package postpack",
41
+ prepack: "backstage-cli package prepack",
42
+ start: "backstage-cli package start",
43
+ "start:legacy": "backstage-cli package start --entrypoint dev/legacy.tsx",
44
+ test: "backstage-cli package test --passWithNoTests --coverage",
45
+ tsc: "tsc",
46
+ "prettier:check": "prettier --ignore-unknown --check .",
47
+ "prettier:fix": "prettier --ignore-unknown --write .",
48
+ "ui-test": "start-server-and-test start localhost:3000 'playwright test'",
49
+ "ui-test:legacy": "start-server-and-test start:legacy localhost:3000 'playwright test'"
50
+ };
51
+ var dependencies = {
52
+ "@backstage-community/plugin-rbac-common": "workspace:^",
53
+ "@backstage/catalog-model": "^1.7.6",
54
+ "@backstage/core-components": "^0.18.7",
55
+ "@backstage/core-plugin-api": "^1.12.3",
56
+ "@backstage/frontend-plugin-api": "^0.14.1",
57
+ "@backstage/plugin-app-react": "^0.2.0",
58
+ "@backstage/plugin-catalog": "^1.33.1",
59
+ "@backstage/plugin-catalog-common": "^1.1.8",
60
+ "@backstage/plugin-permission-common": "^0.9.6",
61
+ "@backstage/plugin-permission-react": "^0.4.40",
62
+ "@backstage/theme": "^0.7.2",
63
+ "@mui/icons-material": "5.18.0",
64
+ "@mui/material": "^5.14.18",
65
+ "@mui/styles": "^6.1.7",
66
+ "@rjsf/core": "^5.21.2",
67
+ "@rjsf/mui": "^5.21.2",
68
+ "@rjsf/utils": "^5.21.2",
69
+ "@rjsf/validator-ajv8": "^5.21.2",
70
+ "autosuggest-highlight": "^3.3.4",
71
+ formik: "^2.4.5",
72
+ "react-use": "^17.4.0",
73
+ yup: "^1.3.2"
74
+ };
75
+ var peerDependencies = {
76
+ react: "^16.13.1 || ^17.0.0 || ^18.0.0",
77
+ "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
78
+ "react-router-dom": "^6.0.0"
79
+ };
80
+ var devDependencies = {
81
+ "@axe-core/playwright": "^4.11.0",
82
+ "@backstage/cli": "^0.35.4",
83
+ "@backstage/core-app-api": "^1.19.5",
84
+ "@backstage/dev-utils": "^1.1.20",
85
+ "@backstage/frontend-defaults": "^0.4.0",
86
+ "@backstage/test-utils": "^1.7.15",
87
+ "@backstage/ui": "^0.12.0",
88
+ "@playwright/test": "^1.56.1",
89
+ "@testing-library/dom": "^10.0.0",
90
+ "@testing-library/jest-dom": "^6.0.0",
91
+ "@testing-library/react": "^15.0.0",
92
+ "@testing-library/react-hooks": "8.0.1",
93
+ "@testing-library/user-event": "14.6.1",
94
+ "@types/autosuggest-highlight": "3.2.3",
95
+ "@types/node": "22.19.11",
96
+ "@types/react": "^18.2.58",
97
+ msw: "1.3.5",
98
+ react: "^16.13.1 || ^17.0.0 || ^18.0.0",
99
+ "react-router-dom": "^6.0.0",
100
+ "start-server-and-test": "2.1.5"
101
+ };
102
+ var files = [
103
+ "dist"
104
+ ];
105
+ var repository = {
106
+ type: "git",
107
+ url: "https://github.com/backstage/community-plugins",
108
+ directory: "workspaces/rbac/plugins/rbac"
109
+ };
110
+ var keywords = [
111
+ "backstage",
112
+ "plugin"
113
+ ];
114
+ var bugs = "https://github.com/backstage/community-plugins/issues";
115
+ var maintainers = [
116
+ "@PatAKnight"
117
+ ];
118
+ var author = "Red Hat";
119
+ var prettier = "@backstage/cli/config/prettier";
120
+ var _package = {
121
+ name: name,
122
+ version: version,
123
+ main: main,
124
+ types: types,
125
+ license: license,
126
+ publishConfig: publishConfig,
127
+ backstage: backstage,
128
+ sideEffects: sideEffects,
129
+ exports: exports,
130
+ typesVersions: typesVersions,
131
+ scripts: scripts,
132
+ dependencies: dependencies,
133
+ peerDependencies: peerDependencies,
134
+ devDependencies: devDependencies,
135
+ files: files,
136
+ repository: repository,
137
+ keywords: keywords,
138
+ bugs: bugs,
139
+ maintainers: maintainers,
140
+ author: author,
141
+ prettier: prettier,
142
+ "lint-staged": {
143
+ "*.{js,jsx,ts,tsx,mjs,cjs}": [
144
+ "eslint --fix",
145
+ "prettier --write"
146
+ ],
147
+ "*.{json,md}": [
148
+ "prettier --write"
149
+ ]
150
+ }
151
+ };
152
+
153
+ export { author, backstage, bugs, _package as default, dependencies, devDependencies, exports, files, keywords, license, main, maintainers, name, peerDependencies, prettier, publishConfig, repository, scripts, sideEffects, types, typesVersions, version };
154
+ //# sourceMappingURL=package.json.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}