@spotify/backstage-plugin-rbac 0.7.7 → 0.7.9

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 (94) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/alpha/pages.esm.js +1 -1
  3. package/dist/alpha.d.ts +7 -6
  4. package/dist/api.esm.js +1 -1
  5. package/dist/components/Auth/Authorized.esm.js +1 -1
  6. package/dist/components/ConfirmationDialog/ConfirmationDialog.esm.js +1 -1
  7. package/dist/components/DecisionDialog/ConditionalDecisionForm/AddConditionSelector.esm.js +1 -1
  8. package/dist/components/DecisionDialog/ConditionalDecisionForm/ConditionCard.esm.js +1 -1
  9. package/dist/components/DecisionDialog/ConditionalDecisionForm/ConditionTree.esm.js +1 -1
  10. package/dist/components/DecisionDialog/ConditionalDecisionForm/ConditionTypeSelector.esm.js +1 -1
  11. package/dist/components/DecisionDialog/ConditionalDecisionForm/ConditionalDecisionForm.esm.js +1 -1
  12. package/dist/components/DecisionDialog/ConditionalDecisionForm/CriteriaSummary/ConditionLevelSummary.esm.js +1 -1
  13. package/dist/components/DecisionDialog/ConditionalDecisionForm/CriteriaSummary/ConditionSummary.esm.js +1 -1
  14. package/dist/components/DecisionDialog/ConditionalDecisionForm/CriteriaSummary/ConditionalDecisionBox.esm.js +1 -1
  15. package/dist/components/DecisionDialog/ConditionalDecisionForm/CriteriaSummary/CriteriaSummary.esm.js +1 -1
  16. package/dist/components/DecisionDialog/ConditionalDecisionForm/CriteriaSummary/Indent.esm.js +1 -1
  17. package/dist/components/DecisionDialog/ConditionalDecisionForm/CriteriaSummary/MonospaceText.esm.js +1 -1
  18. package/dist/components/DecisionDialog/DecisionDialog.esm.js +1 -1
  19. package/dist/components/DecisionDialog/MatchByActions.esm.js +1 -1
  20. package/dist/components/DecisionDialog/MatchByName.esm.js +1 -1
  21. package/dist/components/DecisionDialog/MatchByResourceType.esm.js +1 -1
  22. package/dist/components/DecisionDialog/ParamsForm/ParamsForm.esm.js +1 -1
  23. package/dist/components/DecisionDialog/ParamsForm/ParamsFormArrayInput.esm.js +1 -1
  24. package/dist/components/DecisionDialog/ParamsForm/ParamsFormBooleanInput.esm.js +1 -1
  25. package/dist/components/DecisionDialog/ParamsForm/ParamsFormInput.esm.js +1 -1
  26. package/dist/components/DecisionDialog/ParamsForm/ParamsFormInputRouter.esm.js +1 -1
  27. package/dist/components/DecisionDialog/ParamsForm/ParamsFormJSONEditor.esm.js +1 -1
  28. package/dist/components/DecisionDialog/ParamsForm/ParamsFormStandard.esm.js +1 -1
  29. package/dist/components/DecisionDialog/ToggleButtonGroup.esm.js +1 -1
  30. package/dist/components/DecisionDialog/VerticalSelection.esm.js +1 -1
  31. package/dist/components/Diffing/DiffBadge.esm.js +1 -1
  32. package/dist/components/Diffing/DiffSummary.esm.js +1 -1
  33. package/dist/components/EditableInput/EditableInput.esm.js +1 -1
  34. package/dist/components/Home/HomePage.esm.js +1 -1
  35. package/dist/components/Home/HomePageContent.esm.js +1 -1
  36. package/dist/components/Home/HomePageEmptyState.esm.js +1 -1
  37. package/dist/components/Layout/Breadcrumbs.esm.js +1 -1
  38. package/dist/components/Layout/EmptyStateImageWrapper.esm.js +1 -1
  39. package/dist/components/Layout/PageWrapper.esm.js +1 -1
  40. package/dist/components/Layout/Title.esm.js +1 -1
  41. package/dist/components/Members/MemberLabel.esm.js +1 -1
  42. package/dist/components/Members/MemberOptionsProvider.esm.js +1 -1
  43. package/dist/components/Members/MembersAutocomplete.esm.js +1 -1
  44. package/dist/components/Members/MembersAutocompleteListBox.esm.js +1 -1
  45. package/dist/components/Members/MembersTable.esm.js +1 -1
  46. package/dist/components/Members/MembersTableBody.esm.js +1 -1
  47. package/dist/components/Permission/PermissionName.esm.js +1 -1
  48. package/dist/components/Permissions/PermissionsMetadataContext.esm.js +1 -1
  49. package/dist/components/Permissions/PermissionsTable.esm.js +1 -1
  50. package/dist/components/Policies/PoliciesProvider.esm.js +1 -1
  51. package/dist/components/Policies/PoliciesTable.esm.js +1 -1
  52. package/dist/components/Policy/EmptyRolesCard.esm.js +1 -1
  53. package/dist/components/Policy/PolicyCard.esm.js +1 -1
  54. package/dist/components/Policy/PolicyConflictDialog.esm.js +1 -1
  55. package/dist/components/Policy/PolicyImportButton.esm.js +1 -1
  56. package/dist/components/Policy/PolicyInvalidDialog.esm.js +1 -1
  57. package/dist/components/Policy/PolicyMenu.esm.js +1 -1
  58. package/dist/components/Policy/PolicyOptionCard.esm.js +1 -1
  59. package/dist/components/Policy/PolicyOptionsPage.esm.js +1 -1
  60. package/dist/components/Policy/PolicyPage.esm.js +1 -1
  61. package/dist/components/Policy/PolicyProvider.esm.js +1 -1
  62. package/dist/components/Policy/PolicyPublishButton.esm.js +1 -1
  63. package/dist/components/Policy/PolicyPublishConfirmationDialog.esm.js +1 -1
  64. package/dist/components/Policy/PolicyPublishSuccessDialog.esm.js +1 -1
  65. package/dist/components/Policy/PolicyStatusChip.esm.js +1 -1
  66. package/dist/components/Policy/useDuplicatePolicy.esm.js +1 -1
  67. package/dist/components/PolicyTester/DecisionBreakdownTable/CellText.esm.js +1 -1
  68. package/dist/components/PolicyTester/DecisionBreakdownTable/DecidingRoleCell.esm.js +1 -1
  69. package/dist/components/PolicyTester/DecisionBreakdownTable/DecisionBreakdownTable.esm.js +1 -1
  70. package/dist/components/PolicyTester/DecisionBreakdownTable/DecisionCell.esm.js +1 -1
  71. package/dist/components/PolicyTester/DecisionBreakdownTable/PermissionNameCell.esm.js +1 -1
  72. package/dist/components/PolicyTester/DecisionBreakdownTable/RoleNameCell.esm.js +1 -1
  73. package/dist/components/PolicyTester/DecisionBreakdownTable/TableHeaderCell.esm.js +1 -1
  74. package/dist/components/PolicyTester/DecisionBreakdownTable/UserIconCell.esm.js +1 -1
  75. package/dist/components/PolicyTester/DecisionIcon.esm.js +1 -1
  76. package/dist/components/PolicyTester/DecisionInfo.esm.js +1 -1
  77. package/dist/components/PolicyTester/PolicyTestResultDetails.esm.js +1 -1
  78. package/dist/components/PolicyTester/PolicyTester.esm.js +1 -1
  79. package/dist/components/PolicyTester/PolicyTesterFieldset.esm.js +1 -1
  80. package/dist/components/PolicyTester/PolicyTesterPermissionSelect.esm.js +1 -1
  81. package/dist/components/PolicyTester/PolicyTesterResultRow.esm.js +1 -1
  82. package/dist/components/PolicyTester/PolicyTesterResults.esm.js +1 -1
  83. package/dist/components/PolicyTester/PolicyTesterRoleSelect.esm.js +1 -1
  84. package/dist/components/PolicyTester/StatusChip.esm.js +1 -1
  85. package/dist/components/RBACSidebarItem.esm.js +1 -1
  86. package/dist/components/RelativeTime/RelativeTime.esm.js +1 -1
  87. package/dist/components/ReorderControls/ReorderControls.esm.js +1 -1
  88. package/dist/components/ReorderControls/ReorderInfo.esm.js +1 -1
  89. package/dist/components/Role/RolePage.esm.js +1 -1
  90. package/dist/components/Roles/RolesTable.esm.js +1 -1
  91. package/dist/components/Root.esm.js +1 -1
  92. package/dist/hooks/useFeatureFlag.esm.js +2 -0
  93. package/dist/index.d.ts +1 -2
  94. package/package.json +21 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @spotify/backstage-plugin-rbac
2
2
 
3
+ ## 0.7.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed a bug that could cause the RBAC UI to crash when attempting to add a conditional permission decision to one or more resource permissions which have no associated rules.
8
+ - Updated dependency `@types/jest` to `^30.0.0`.
9
+ - Updated dependency `backstage` to `1.41.1`.
10
+ - Updated dependencies
11
+ - Updated dependencies
12
+ - Updated dependencies
13
+ - @spotify/backstage-plugin-core@0.8.9
14
+ - @spotify/backstage-plugin-rbac-common@0.6.8
15
+
16
+ ## 0.7.8
17
+
18
+ ### Patch Changes
19
+
20
+ - Instrumented the Insights and RBAC plugins with additional analytics events.
21
+ - Updated dependencies
22
+ - @spotify/backstage-plugin-core@0.8.8
23
+
3
24
  ## 0.7.7
4
25
 
5
26
  ### Patch Changes
@@ -1,2 +1,2 @@
1
- import{convertLegacyRouteRef as e,compatWrapper as r}from"@backstage/core-compat-api";import{PageBlueprint as t}from"@backstage/frontend-plugin-api";import a from"react";import{rootRouteRef as m}from"../routes.esm.js";const p=t.make({params:{routeRef:e(m),defaultPath:"/rbac",loader:()=>import("../components/Root.esm.js").then(o=>r(a.createElement(o.RBACRoot,null)))}});export{p as rbacPage};
1
+ import{jsx as r}from"react/jsx-runtime";import{convertLegacyRouteRef as t,compatWrapper as e}from"@backstage/core-compat-api";import{PageBlueprint as a}from"@backstage/frontend-plugin-api";import{rootRouteRef as m}from"../routes.esm.js";const p=a.make({params:{routeRef:t(m),defaultPath:"/rbac",loader:()=>import("../components/Root.esm.js").then(o=>e(r(o.RBACRoot,{})))}});export{p as rbacPage};
2
2
  //# sourceMappingURL=pages.esm.js.map
package/dist/alpha.d.ts CHANGED
@@ -1,22 +1,23 @@
1
- import * as React from 'react';
1
+ import * as react from 'react';
2
2
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
3
+ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
3
4
 
4
5
  /**
5
6
  * @public
6
7
  */
7
8
  declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
8
- "api:rbac": _backstage_frontend_plugin_api.ExtensionDefinition<{
9
+ [x: `api:${string}`]: _backstage_frontend_plugin_api.ExtensionDefinition<{
9
10
  kind: "api";
10
11
  name: undefined;
11
12
  config: {};
12
13
  configInput: {};
13
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
14
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
14
15
  inputs: {};
15
16
  params: {
16
- factory: _backstage_frontend_plugin_api.AnyApiFactory;
17
+ factory: _backstage_core_plugin_api.AnyApiFactory;
17
18
  };
18
19
  }>;
19
- "page:rbac": _backstage_frontend_plugin_api.ExtensionDefinition<{
20
+ [x: `page:${string}`]: _backstage_frontend_plugin_api.ExtensionDefinition<{
20
21
  kind: "page";
21
22
  name: undefined;
22
23
  config: {
@@ -25,7 +26,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
25
26
  configInput: {
26
27
  path?: string | undefined;
27
28
  };
28
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
29
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
29
30
  optional: true;
30
31
  }>;
31
32
  inputs: {};
package/dist/api.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiRef as p}from"@backstage/core-plugin-api";import{ResponseError as h}from"@backstage/errors";import{PolicyResponseParser as l,PolicyParser as c,SearchMemberResponseParser as y,AuthorizeResponseParser as f,DraftResponseParser as o,TestPolicyDecisionResponseParser as d}from"@spotify/backstage-plugin-rbac-common";const w=p({id:"plugin.rbac"});class A{fetchApi;discoveryApi;constructor(i){this.fetchApi=i.fetchApi,this.discoveryApi=i.discoveryApi}async getPolicies(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/policies`),s=await this.#i(t);return l.parse(s)}async getPolicy(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}`),e=await this.#i(s);return c.parse(e)}async getActivePolicy(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/active`),s=await this.#i(t);return c.parse(s)}async getFallbackPolicy(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/fallback`);if(t.status!==404)return await this.#i(t)}async searchMembers(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/members?query=${encodeURIComponent(i.query)}`),e=await this.#i(s);return y.parse(e)}async authorize(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/authorize`),s=await this.#i(t);return f.parse(s)}async createDraft(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/policies`,{method:"POST",body:JSON.stringify(i),headers:{"Content-Type":"application/json"}}),e=await this.#i(s);return o.parse(e)}async updateDraft(i,t){const{fetch:s}=this.fetchApi,e=await s(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}`,{method:"PATCH",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}}),a=await this.#i(e);return o.parse(a)}async deleteDraft(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}`,{method:"DELETE"});return await this.#i(s)}async publishPolicy(i,t){const{fetch:s}=this.fetchApi,e=await s(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}/publish`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return await this.#i(e)}async testPolicyDecisions(i){return await Promise.all(i.map(async t=>{const{policyConfig:s,roleIds:e,permission:a}=t,{decision:r,decisionOrigin:n}=await this.#t(s,e,a);return{decision:r,permission:a,decisionOrigin:n}}))}async#t(i,t,s){const{fetch:e}=this.fetchApi,a=await e(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/test-policy-decision`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({policyConfig:i,roleIds:t,permission:s})}),r=await this.#i(a);return d.parse(r)}async fetchAllPermissionMetadata(i){const t=await Promise.all(i.map(s=>this.#s(s)));return{permissions:t.flatMap(({permissions:s})=>s),rules:t.flatMap(({rules:s})=>s)}}async#s(i){const t=await this.discoveryApi.getBaseUrl(i);let s;try{const r=await this.fetchApi.fetch(`${t}/.well-known/backstage/permissions/metadata`);s=await this.#i(r)}catch{return{permissions:[],rules:[]}}const e=s.permissions?.filter(Boolean)??[],a=s.rules?.filter(Boolean)??[];return{permissions:e,rules:a.map(r=>({...r,pluginId:i}))}}async#i(i){if(i.ok)return i.status===204?void 0:i.json();const t=await h.fromResponse(i);throw t.message=t.body.error.message??t.message??"Unknown error",t}}export{A as RBACApi,w as rbacApiRef};
1
+ import{createApiRef as p}from"@backstage/core-plugin-api";import{ResponseError as h}from"@backstage/errors";import{PolicyResponseParser as l,PolicyParser as o,SearchMemberResponseParser as y,AuthorizeResponseParser as f,DraftResponseParser as c,TestPolicyDecisionResponseParser as d}from"@spotify/backstage-plugin-rbac-common";const w=p({id:"plugin.rbac"});class A{fetchApi;discoveryApi;constructor(i){this.fetchApi=i.fetchApi,this.discoveryApi=i.discoveryApi}async getPolicies(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/policies`),s=await this.#i(t);return l.parse(s)}async getPolicy(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}`),e=await this.#i(s);return o.parse(e)}async getActivePolicy(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/active`),s=await this.#i(t);return o.parse(s)}async getFallbackPolicy(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/fallback`);if(t.status!==404)return await this.#i(t)}async searchMembers(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/members?query=${encodeURIComponent(i.query)}`),e=await this.#i(s);return y.parse(e)}async authorize(){const{fetch:i}=this.fetchApi,t=await i(`${await this.discoveryApi.getBaseUrl("rbac")}/authorize`),s=await this.#i(t);return f.parse(s)}async createDraft(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/policies`,{method:"POST",body:JSON.stringify(i),headers:{"Content-Type":"application/json"}}),e=await this.#i(s);return c.parse(e)}async updateDraft(i,t){const{fetch:s}=this.fetchApi,e=await s(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}`,{method:"PATCH",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}}),r=await this.#i(e);return c.parse(r)}async deleteDraft(i){const{fetch:t}=this.fetchApi,s=await t(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}`,{method:"DELETE"});return await this.#i(s)}async publishPolicy(i,t){const{fetch:s}=this.fetchApi,e=await s(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/${i}/publish`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return await this.#i(e)}async testPolicyDecisions(i){return await Promise.all(i.map(async t=>{const{policyConfig:s,roleIds:e,permission:r}=t,{decision:a,decisionOrigin:n}=await this.#t(s,e,r);return{decision:a,permission:r,decisionOrigin:n}}))}async#t(i,t,s){const{fetch:e}=this.fetchApi,r=await e(`${await this.discoveryApi.getBaseUrl("rbac")}/policies/test-policy-decision`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({policyConfig:i,roleIds:t,permission:s})}),a=await this.#i(r);return d.parse(a)}async fetchAllPermissionMetadata(i){const t=await Promise.all(i.map(s=>this.#s(s)));return{permissions:t.flatMap(({permissions:s})=>s),rules:t.flatMap(({rules:s})=>s)}}async#s(i){const t=await this.discoveryApi.getBaseUrl(i);let s;try{const a=await this.fetchApi.fetch(`${t}/.well-known/backstage/permissions/metadata`);s=await this.#i(a)}catch{return{permissions:[],rules:[]}}const e=s.permissions?.filter(Boolean)??[],r=s.rules?.filter(Boolean)??[];return{permissions:e.map(a=>({...a,pluginId:i})),rules:r.map(a=>({...a,pluginId:i}))}}async#i(i){if(i.ok)return i.status===204?void 0:i.json();const t=await h.fromResponse(i);throw t.message=t.body.error.message??t.message??"Unknown error",t}}export{A as RBACApi,w as rbacApiRef};
2
2
  //# sourceMappingURL=api.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as i}from"@backstage/core-plugin-api";import e from"react";import m from"react-use/lib/useAsync";import{rbacApiRef as u}from"../../api.esm.js";function a({children:t,loading:n=null,unauthorized:o=null}){const l=i(u),r=m(()=>l.authorize(),[]);return r.loading?e.createElement(e.Fragment,null,n):r.value?.authorized?e.createElement(e.Fragment,null,t):e.createElement(e.Fragment,null,o)}export{a as Authorized};
1
+ import{jsx as r,Fragment as i}from"react/jsx-runtime";import{useApi as u}from"@backstage/core-plugin-api";import d from"react-use/lib/useAsync";import{rbacApiRef as m}from"../../api.esm.js";function a({children:e,loading:n=null,unauthorized:t=null}){const l=u(m),o=d(()=>l.authorize(),[]);return o.loading?r(i,{children:n}):o.value?.authorized?r(i,{children:e}):r(i,{children:t})}export{a as Authorized};
2
2
  //# sourceMappingURL=Authorized.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Dialog as s,DialogTitle as g,Box as u,DialogContent as E,DialogContentText as f,DialogActions as p,Button as l}from"@material-ui/core";import e,{useState as D}from"react";const d=({children:o,onConfirm:a,message:i,title:r})=>{const[c,t]=D(!1),n=()=>t(!1),m=()=>t(!0),C=()=>{a(),n()};return e.createElement(e.Fragment,null,o({onClick:m}),e.createElement(s,{open:c,onClose:n},e.createElement(g,null,e.createElement(u,{display:"flex",justifyContent:"space-between",alignItems:"center"},r)),e.createElement(E,null,e.createElement(f,null,i)),e.createElement(p,null,e.createElement(l,{"aria-label":"Cancel action",color:"primary",onClick:n},"Cancel"),e.createElement(l,{"aria-label":"Confirm action",color:"secondary",onClick:C,variant:"contained"},"Confirm"))))};export{d as ConfirmationDialog};
1
+ import{jsxs as o,Fragment as d,jsx as n}from"react/jsx-runtime";import{Dialog as g,DialogTitle as h,Box as f,DialogContent as p,DialogContentText as x,DialogActions as D,Button as l}from"@material-ui/core";import{useState as u}from"react";const y=({children:r,onConfirm:t,message:a,title:c})=>{const[s,e]=u(!1),i=()=>e(!1),m=()=>e(!0),C=()=>{t(),i()};return o(d,{children:[r({onClick:m}),o(g,{open:s,onClose:i,children:[n(h,{children:n(f,{display:"flex",justifyContent:"space-between",alignItems:"center",children:c})}),n(p,{children:n(x,{children:a})}),o(D,{children:[n(l,{"aria-label":"Cancel action",color:"primary",onClick:i,children:"Cancel"}),n(l,{"aria-label":"Confirm action",color:"secondary",onClick:C,variant:"contained",children:"Confirm"})]})]})]})};export{y as ConfirmationDialog};
2
2
  //# sourceMappingURL=ConfirmationDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as d,Button as m,Menu as u,MenuItem as i}from"@material-ui/core";import t,{useRef as p,useState as s}from"react";import{CONDITION_TYPES as f,CONDITION_TYPE_DISPLAY_TEXT as E}from"../conditionConstants.esm.js";const I=d(()=>({addButton:{paddingLeft:40,paddingRight:40}}));function T({onSelect:a}){const l=I(),n=p(null),[c,o]=s(!1),r=()=>{o(e=>!e)};return t.createElement("div",null,t.createElement(m,{className:l.addButton,variant:"outlined",color:"primary",onClick:r,ref:n},"Add"),t.createElement(u,{anchorEl:n.current,open:c,onClose:r,BackdropProps:{}},f.map(e=>t.createElement(i,{key:e,onClick:()=>{a?.(e),o(!1)}},E[e]))))}export{T as default};
1
+ import{jsxs as a,jsx as o}from"react/jsx-runtime";import{makeStyles as c,Button as s,Menu as m,MenuItem as u}from"@material-ui/core";import{useRef as p,useState as f}from"react";import{CONDITION_TYPES as I,CONDITION_TYPE_DISPLAY_TEXT as T}from"../conditionConstants.esm.js";const h=c(()=>({addButton:{paddingLeft:40,paddingRight:40}}));function C({onSelect:d}){const i=h(),t=p(null),[l,r]=f(!1),e=()=>{r(n=>!n)};return a("div",{children:[o(s,{className:i.addButton,variant:"outlined",color:"primary",onClick:e,ref:t,children:"Add"}),o(m,{anchorEl:t.current,open:l,onClose:e,BackdropProps:{},children:I.map(n=>o(u,{onClick:()=>{d?.(n),r(!1)},children:T[n]},n))})]})}export{C as default};
2
2
  //# sourceMappingURL=AddConditionSelector.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as g,Box as a,Card as f,CardContent as C,InputLabel as y,TextField as h,Typography as i,Popper as x,IconButton as b}from"@material-ui/core";import v from"@material-ui/icons/Delete";import{Autocomplete as k}from"@material-ui/lab";import e,{useCallback as B}from"react";import{useAggregatedRules as I}from"../../Permissions/PermissionsMetadataContext.esm.js";import{ParamsForm as N}from"../ParamsForm/ParamsForm.esm.js";const S=g(n=>({conditionCard:{minWidth:n.spacing(63)},conditionCardBar:{height:n.spacing(1),backgroundColor:n.palette.primary.main},autocomplete:{flex:1}}));function T({ruleName:n,parameters:p,resourceType:u,onChange:r,onDelete:s}){const o=S(),m=I()?.filter(t=>t.resourceType===u)??[],c=m.find(t=>t.name===n),d=t=>{r(t,{})},E=B(t=>{r(n,t)},[r,n]);return e.createElement(a,{display:"flex",alignItems:"center"},e.createElement(f,{className:o.conditionCard},e.createElement("div",{className:o.conditionCardBar}),e.createElement(C,null,e.createElement(a,null,e.createElement(a,null,e.createElement(k,{className:o.autocomplete,"data-testid":"rule-select",getOptionLabel:t=>t.name,getOptionSelected:(t,l)=>t.name===l.name,options:m,onChange:(t,l)=>d(l?l.name:null),renderInput:t=>e.createElement(e.Fragment,null,e.createElement(a,{marginBottom:2},e.createElement(y,null,"Rule")),e.createElement(h,{...t,placeholder:"Select",variant:"outlined",size:"small",name:"rule"})),renderOption:t=>e.createElement(a,null,e.createElement(i,{variant:"body2"},t.name),e.createElement(i,{noWrap:!0,variant:"caption"},t.description)),value:c||null,PopperComponent:t=>e.createElement(x,{...t,style:{width:"auto"},placement:"bottom-start"})})),e.createElement(a,{flex:"1"},e.createElement(a,{display:"flex",flexDirection:"column"},e.createElement(N,{rule:c,onChange:E,value:p})))))),e.createElement(a,{ml:1},e.createElement(b,{"aria-label":"delete",onClick:s,size:"small"},e.createElement(v,null))))}export{T as default};
1
+ import{jsxs as a,jsx as r,Fragment as f}from"react/jsx-runtime";import{makeStyles as C,Box as n,Card as x,CardContent as y,InputLabel as b,TextField as v,Typography as m,Popper as B,IconButton as I}from"@material-ui/core";import k from"@material-ui/icons/Delete";import{Autocomplete as N}from"@material-ui/lab";import{useCallback as S}from"react";import{useAggregatedRules as T}from"../../Permissions/PermissionsMetadataContext.esm.js";import{ParamsForm as D}from"../ParamsForm/ParamsForm.esm.js";const F=C(t=>({conditionCard:{minWidth:t.spacing(63)},conditionCardBar:{height:t.spacing(1),backgroundColor:t.palette.primary.main},autocomplete:{flex:1}}));function O({ruleName:t,parameters:p,resourceType:s,onChange:l,onDelete:u}){const i=F(),c=T()?.filter(e=>e.resourceType===s)??[],d=c.find(e=>e.name===t),h=e=>{l(e,{})},g=S(e=>{l(t,e)},[l,t]);return a(n,{display:"flex",alignItems:"center",children:[a(x,{className:i.conditionCard,children:[r("div",{className:i.conditionCardBar}),r(y,{children:a(n,{children:[r(n,{children:r(N,{className:i.autocomplete,"data-testid":"rule-select",getOptionLabel:e=>e.name,getOptionSelected:(e,o)=>e.name===o.name,options:c,onChange:(e,o)=>h(o?o.name:null),renderInput:e=>a(f,{children:[r(n,{marginBottom:2,children:r(b,{children:"Rule"})}),r(v,{...e,placeholder:"Select",variant:"outlined",size:"small",name:"rule"})]}),renderOption:e=>a(n,{children:[r(m,{variant:"body2",children:e.name}),r(m,{noWrap:!0,variant:"caption",children:e.description})]}),value:d||null,PopperComponent:e=>r(B,{...e,style:{width:"auto"},placement:"bottom-start"})})}),r(n,{flex:"1",children:r(n,{display:"flex",flexDirection:"column",children:r(D,{rule:d,onChange:g,value:p})})})]})})]}),r(n,{ml:1,children:r(I,{"aria-label":"delete",onClick:u,size:"small",children:r(k,{})})})]})}export{O as default};
2
2
  //# sourceMappingURL=ConditionCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as H,Box as c}from"@material-ui/core";import l,{useCallback as p,useMemo as v,Fragment as S}from"react";import{v4 as C}from"uuid";import{isConditionLevel as V,isNestedConditionType as z}from"../conditionConstants.esm.js";import F from"./AddConditionSelector.esm.js";import $ from"./ConditionCard.esm.js";import L from"./ConditionTypeSelector.esm.js";import{getNewCondition as f}from"./utils.esm.js";const k=H(e=>({treeVerticalSpacer:{width:e.spacing(2),borderLeft:`1px solid ${e.palette.status.aborted}`},treeHorizontalSpacer:{height:e.spacing(3),borderLeft:`1px solid ${e.palette.status.aborted}`},treeVerticalBranchHalf:{position:"absolute",height:"50%",borderLeft:`1px solid ${e.palette.status.aborted}`,alignSelf:"flex-start"},treeVerticalBranchFull:{borderLeft:`1px solid ${e.palette.status.aborted}`,alignSelf:"stretch"},treeHorizontalBranch:{width:e.spacing(2),borderTop:`1px solid ${e.palette.status.aborted}`}}));function E({level:e,resourceType:s,onChange:n,parentConditionType:h,isRoot:m=!1}){const a=k(),d=p((t,r)=>{const o=[...e.children];return o.splice(t,1,r),o},[e]),i=p(t=>{n({...e,children:t})},[n,e]),y=p(t=>{t===null?n(null):t==="not"&&e.children.length>1?n({...e,levelType:t,children:e.children.slice(0,1)}):n({...e,levelType:t})},[n,e]),u=p((t,r)=>{i(t===null?g(e.children,r):d(r,t))},[e,i,d]),N=t=>{const r=C();t==="condition"?i([...e.children,f()]):t==="not"?i([...e.children,{id:r,levelType:t,children:[]}]):z(t)&&i([...e.children,{id:r,levelType:t,children:[f()]}])},T=t=>{i(g(e.children,t))},b=v(()=>e.children.map((t,r)=>(o,x)=>{i(d(r,{...t,ruleName:o,parameters:x}))}),[e.children,i,d]),B=v(()=>e.children.map((t,r)=>o=>u(o,r)),[e.children,u]);return l.createElement("div",null,!m&&l.createElement("div",{className:a.treeHorizontalSpacer}),l.createElement(c,{display:"flex",alignItems:"center",position:"relative"},!m&&l.createElement(l.Fragment,null,l.createElement("div",{className:h==="not"?a.treeVerticalBranchHalf:a.treeVerticalBranchFull}),l.createElement("div",{className:a.treeHorizontalBranch})),l.createElement(L,{level:e,onSelect:y})),l.createElement(c,{display:"flex"},m||h==="not"?l.createElement(c,{pl:2}):l.createElement("div",{className:a.treeVerticalSpacer}),!m&&l.createElement(c,{pl:2}),l.createElement("div",null,e.children.map((t,r)=>V(t)?l.createElement(c,{key:t.id},l.createElement(E,{level:t,resourceType:s,parentConditionType:e.levelType,onChange:B[r]})):l.createElement(S,{key:t.id},l.createElement("div",{className:a.treeHorizontalSpacer}),l.createElement(c,{display:"flex",alignItems:"center",position:"relative"},l.createElement("div",{className:e.levelType==="not"?a.treeVerticalBranchHalf:a.treeVerticalBranchFull}),l.createElement("div",{className:a.treeHorizontalBranch}),l.createElement($,{ruleName:t.ruleName,parameters:t.parameters,resourceType:s,onChange:b[r],onDelete:()=>T(r)})))),!(e.levelType==="not"&&e.children.length>=1)&&l.createElement(l.Fragment,null,l.createElement("div",{className:a.treeHorizontalSpacer}),l.createElement(c,{display:"flex",alignItems:"center",position:"relative"},l.createElement("div",{className:a.treeVerticalBranchHalf}),l.createElement("div",{className:a.treeHorizontalBranch}),l.createElement(F,{onSelect:N}))))))}function g(e,s){const n=[...e];return n.splice(s,1),n}export{E as default};
1
+ import{jsxs as n,jsx as r,Fragment as u}from"react/jsx-runtime";import{makeStyles as V,Box as c}from"@material-ui/core";import{useCallback as m,useMemo as g,Fragment as z}from"react";import{v4 as $}from"uuid";import{isConditionLevel as F,isNestedConditionType as L}from"../conditionConstants.esm.js";import w from"./AddConditionSelector.esm.js";import I from"./ConditionCard.esm.js";import j from"./ConditionTypeSelector.esm.js";import{getNewCondition as y}from"./utils.esm.js";const k=V(e=>({treeVerticalSpacer:{width:e.spacing(2),borderLeft:`1px solid ${e.palette.status.aborted}`},treeHorizontalSpacer:{height:e.spacing(3),borderLeft:`1px solid ${e.palette.status.aborted}`},treeVerticalBranchHalf:{position:"absolute",height:"50%",borderLeft:`1px solid ${e.palette.status.aborted}`,alignSelf:"flex-start"},treeVerticalBranchFull:{borderLeft:`1px solid ${e.palette.status.aborted}`,alignSelf:"stretch"},treeHorizontalBranch:{width:e.spacing(2),borderTop:`1px solid ${e.palette.status.aborted}`}}));function N({level:e,resourceType:d,onChange:a,parentConditionType:f,isRoot:p=!1}){const i=k(),h=m((l,t)=>{const s=[...e.children];return s.splice(l,1,t),s},[e]),o=m(l=>{a({...e,children:l})},[a,e]),x=m(l=>{l===null?a(null):l==="not"&&e.children.length>1?a({...e,levelType:l,children:e.children.slice(0,1)}):a({...e,levelType:l})},[a,e]),v=m((l,t)=>{o(l===null?T(e.children,t):h(t,l))},[e,o,h]),b=l=>{const t=$();l==="condition"?o([...e.children,y()]):l==="not"?o([...e.children,{id:t,levelType:l,children:[]}]):L(l)&&o([...e.children,{id:t,levelType:l,children:[y()]}])},B=l=>{o(T(e.children,l))},H=g(()=>e.children.map((l,t)=>(s,C)=>{o(h(t,{...l,ruleName:s,parameters:C}))}),[e.children,o,h]),S=g(()=>e.children.map((l,t)=>s=>v(s,t)),[e.children,v]);return n("div",{children:[!p&&r("div",{className:i.treeHorizontalSpacer}),n(c,{display:"flex",alignItems:"center",position:"relative",children:[!p&&n(u,{children:[r("div",{className:f==="not"?i.treeVerticalBranchHalf:i.treeVerticalBranchFull}),r("div",{className:i.treeHorizontalBranch})]}),r(j,{level:e,onSelect:x})]}),n(c,{display:"flex",children:[p||f==="not"?r(c,{pl:2}):r("div",{className:i.treeVerticalSpacer}),!p&&r(c,{pl:2}),n("div",{children:[e.children.map((l,t)=>F(l)?r(c,{children:r(N,{level:l,resourceType:d,parentConditionType:e.levelType,onChange:S[t]})},l.id):n(z,{children:[r("div",{className:i.treeHorizontalSpacer}),n(c,{display:"flex",alignItems:"center",position:"relative",children:[r("div",{className:e.levelType==="not"?i.treeVerticalBranchHalf:i.treeVerticalBranchFull}),r("div",{className:i.treeHorizontalBranch}),r(I,{ruleName:l.ruleName,parameters:l.parameters,resourceType:d,onChange:H[t],onDelete:()=>B(t)})]})]},l.id)),!(e.levelType==="not"&&e.children.length>=1)&&n(u,{children:[r("div",{className:i.treeHorizontalSpacer}),n(c,{display:"flex",alignItems:"center",position:"relative",children:[r("div",{className:i.treeVerticalBranchHalf}),r("div",{className:i.treeHorizontalBranch}),r(w,{onSelect:b})]})]})]})]})]})}function T(e,d){const a=[...e];return a.splice(d,1),a}export{N as default};
2
2
  //# sourceMappingURL=ConditionTree.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as c,Box as a,FormControl as i,Select as f,MenuItem as l,IconButton as s}from"@material-ui/core";import u from"@material-ui/icons/Delete";import e from"react";const y=c(t=>({conditionTypeFormControl:{minWidth:80,marginLeft:t.spacing(1)}}));function p({level:t,onSelect:n}){const o=y(),r=t.children.length>1;return e.createElement(a,{display:"flex",alignItems:"center"},e.createElement(i,{className:o.conditionTypeFormControl},e.createElement(f,{value:t.levelType,onChange:m=>n?.(m.target.value)},e.createElement(l,{key:"anyOf",value:"anyOf"},"Any of"),e.createElement(l,{key:"allOf",value:"allOf"},"All of"),e.createElement(l,{key:"not",value:"not",disabled:r},"Not"))),e.createElement(a,{ml:1},e.createElement(s,{"aria-label":"delete",onClick:()=>n?.(null),size:"small"},e.createElement(u,null))))}export{p as default};
1
+ import{jsxs as t,jsx as e}from"react/jsx-runtime";import{makeStyles as d,Box as r,FormControl as m,Select as s,MenuItem as n,IconButton as f}from"@material-ui/core";import h from"@material-ui/icons/Delete";const u=d(l=>({conditionTypeFormControl:{minWidth:80,marginLeft:l.spacing(1)}}));function p({level:l,onSelect:o}){const i=u(),a=l.children.length>1;return t(r,{display:"flex",alignItems:"center",children:[e(m,{className:i.conditionTypeFormControl,children:t(s,{value:l.levelType,onChange:c=>o?.(c.target.value),children:[e(n,{value:"anyOf",children:"Any of"},"anyOf"),e(n,{value:"allOf",children:"All of"},"allOf"),e(n,{value:"not",disabled:a,children:"Not"},"not")]})}),e(r,{ml:1,children:e(f,{"aria-label":"delete",onClick:()=>o?.(null),size:"small",children:e(h,{})})})]})}export{p as default};
2
2
  //# sourceMappingURL=ConditionTypeSelector.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as C,Paper as y}from"@material-ui/core";import a,{useCallback as i}from"react";import{v4 as v}from"uuid";import{isCondition as T,isConditionLevel as h}from"../conditionConstants.esm.js";import E from"./AddConditionSelector.esm.js";import N from"./ConditionCard.esm.js";import k from"./ConditionTree.esm.js";import{CriteriaSummary as S}from"./CriteriaSummary/CriteriaSummary.esm.js";import{getNewCondition as p}from"./utils.esm.js";const b=C(e=>({paper:{backgroundColor:e.palette.background.default,padding:e.spacing(3),marginBottom:e.spacing(3),minHeight:e.spacing(48)}}));function D({permissionCriteria:e,resourceType:m,onUpdate:o,readonly:c=!1}){const s=b(),l=i(r=>{o(t=>({...t,...r}))},[o]),u=i(r=>{const t=v();l(r==="condition"?p():r==="not"?{id:t,levelType:r,children:[]}:{id:t,levelType:r,children:[p()]})},[l]),d=i((r,t)=>{o(g=>({...g,ruleName:r,parameters:t}))},[o]),f=i(()=>{o(null)},[o]);let n;return c?n=a.createElement(S,{permissionCriteria:e}):e===null?n=a.createElement(E,{onSelect:u}):T(e)?n=a.createElement(N,{ruleName:e.ruleName,parameters:e.parameters,resourceType:m,onChange:d,onDelete:f}):h(e)&&(n=a.createElement(k,{level:e,resourceType:m,onChange:o,isRoot:!0})),a.createElement(y,{variant:"outlined",className:s.paper},n)}export{D as default};
1
+ import{jsx as n}from"react/jsx-runtime";import{makeStyles as C,Paper as y}from"@material-ui/core";import{useCallback as a}from"react";import{v4 as h}from"uuid";import{isCondition as v,isConditionLevel as N}from"../conditionConstants.esm.js";import T from"./AddConditionSelector.esm.js";import k from"./ConditionCard.esm.js";import S from"./ConditionTree.esm.js";import{CriteriaSummary as b}from"./CriteriaSummary/CriteriaSummary.esm.js";import{getNewCondition as l}from"./utils.esm.js";const D=C(r=>({paper:{backgroundColor:r.palette.background.default,padding:r.spacing(3),marginBottom:r.spacing(3),minHeight:r.spacing(48)}}));function x({permissionCriteria:r,resourceType:m,onUpdate:o,readonly:s=!1}){const c=D(),p=a(e=>{o(i=>({...i,...e}))},[o]),d=a(e=>{const i=h();p(e==="condition"?l():e==="not"?{id:i,levelType:e,children:[]}:{id:i,levelType:e,children:[l()]})},[p]),u=a((e,i)=>{o(g=>({...g,ruleName:e,parameters:i}))},[o]),f=a(()=>{o(null)},[o]);let t;return s?t=n(b,{permissionCriteria:r}):r===null?t=n(T,{onSelect:d}):v(r)?t=n(k,{ruleName:r.ruleName,parameters:r.parameters,resourceType:m,onChange:u,onDelete:f}):N(r)&&(t=n(S,{level:r,resourceType:m,onChange:o,isRoot:!0})),n(y,{variant:"outlined",className:c.paper,children:t})}export{x as default};
2
2
  //# sourceMappingURL=ConditionalDecisionForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import e from"react";import{CONDITION_TYPE_DISPLAY_TEXT as n,isConditionLevel as m}from"../../conditionConstants.esm.js";import a from"./ConditionSummary.esm.js";import{Indent as i}from"./Indent.esm.js";import{MonospaceText as c}from"./MonospaceText.esm.js";function o({level:r}){return e.createElement(e.Fragment,null,e.createElement(c,null,n[r.levelType]),e.createElement(i,null,r.children.map((t,l)=>m(t)?e.createElement(o,{key:l,level:t}):e.createElement(a,{key:l,condition:t}))))}export{o as default};
1
+ import{jsxs as l,Fragment as t,jsx as e}from"react/jsx-runtime";import{CONDITION_TYPE_DISPLAY_TEXT as m,isConditionLevel as p}from"../../conditionConstants.esm.js";import d from"./ConditionSummary.esm.js";import{Indent as c}from"./Indent.esm.js";import{MonospaceText as f}from"./MonospaceText.esm.js";function n({level:r}){return l(t,{children:[e(f,{children:m[r.levelType]}),e(c,{children:r.children.map((o,i)=>p(o)?e(n,{level:o},i):e(d,{condition:o},i))})]})}export{n as default};
2
2
  //# sourceMappingURL=ConditionLevelSummary.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as o,Box as a}from"@material-ui/core";import t from"react";import{MonospaceText as l}from"./MonospaceText.esm.js";const n=o(e=>({rule:{color:e.palette.type==="light"?"#EB0014":"#FF8F9C"},parameters:{color:e.palette.type==="light"?"#E22134":"#EE96A0"}}));function m({condition:e}){const r=n();return t.createElement(l,null,t.createElement(a,{component:"span",className:r.rule},e.ruleName,"(",t.createElement(a,{component:"span",className:r.parameters},JSON.stringify(e.parameters,null,1)),")"))}export{m as default};
1
+ import{jsx as o,jsxs as a}from"react/jsx-runtime";import{makeStyles as l,Box as r}from"@material-ui/core";import{MonospaceText as n}from"./MonospaceText.esm.js";const s=l(e=>({rule:{color:e.palette.type==="light"?"#EB0014":"#FF8F9C"},parameters:{color:e.palette.type==="light"?"#E22134":"#EE96A0"}}));function p({condition:e}){const t=s();return o(n,{children:a(r,{component:"span",className:t.rule,children:[e.ruleName,"(",o(r,{component:"span",className:t.parameters,children:JSON.stringify(e.parameters,null,1)}),")"]})})}export{p as default};
2
2
  //# sourceMappingURL=ConditionSummary.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as i,Box as t}from"@material-ui/core";import r from"react";import{isCondition as n,isConditionLevel as s}from"../../conditionConstants.esm.js";import m from"./ConditionLevelSummary.esm.js";import a from"./ConditionSummary.esm.js";const l=i(e=>({resultsBox:{border:`1px solid ${e.palette.border}`,borderRadius:e.shape.borderRadius,padding:e.spacing(2)}}));function d({permissionCriteria:e}){const o=l();return r.createElement(t,{className:o.resultsBox},n(e)&&r.createElement(a,{condition:e}),s(e)&&r.createElement(m,{level:e}))}export{d as ConditionalDecisionBox};
1
+ import{jsxs as e,jsx as o}from"react/jsx-runtime";import{makeStyles as s,Box as t}from"@material-ui/core";import{isCondition as n,isConditionLevel as d}from"../../conditionConstants.esm.js";import m from"./ConditionLevelSummary.esm.js";import a from"./ConditionSummary.esm.js";const l=s(i=>({resultsBox:{border:`1px solid ${i.palette.border}`,borderRadius:i.shape.borderRadius,padding:i.spacing(2)}}));function p({permissionCriteria:i}){const r=l();return e(t,{className:r.resultsBox,children:[n(i)&&o(a,{condition:i}),d(i)&&o(m,{level:i})]})}export{p as ConditionalDecisionBox};
2
2
  //# sourceMappingURL=ConditionalDecisionBox.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as i,Typography as n}from"@material-ui/core";import t from"react";import{ConditionalDecisionBox as r}from"./ConditionalDecisionBox.esm.js";const a=i(e=>({conditionResultText:{color:e.palette.success.main},conditionDecisionText:{padding:`0 0 ${e.spacing(3)}px`}}));function s({permissionCriteria:e}){const o=a();return t.createElement("div",null,t.createElement(n,{component:"p",variant:"body1",className:o.conditionDecisionText},"If the below conditions are met then the action is"," ",t.createElement("strong",{className:o.conditionResultText},"allowed.")),t.createElement(r,{permissionCriteria:e}))}export{s as CriteriaSummary};
1
+ import{jsxs as e,jsx as n}from"react/jsx-runtime";import{makeStyles as t,Typography as r}from"@material-ui/core";import{ConditionalDecisionBox as s}from"./ConditionalDecisionBox.esm.js";const c=t(i=>({conditionResultText:{color:i.palette.success.main},conditionDecisionText:{padding:`0 0 ${i.spacing(3)}px`}}));function a({permissionCriteria:i}){const o=c();return e("div",{children:[e(r,{component:"p",variant:"body1",className:o.conditionDecisionText,children:["If the below conditions are met then the action is"," ",n("strong",{className:o.conditionResultText,children:"allowed."})]}),n(s,{permissionCriteria:i})]})}export{a as CriteriaSummary};
2
2
  //# sourceMappingURL=CriteriaSummary.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Box as e}from"@material-ui/core";import r from"react";const t=({children:o})=>r.createElement(e,{pl:2},o);export{t as Indent};
1
+ import{jsx as r}from"react/jsx-runtime";import{Box as n}from"@material-ui/core";const t=({children:o})=>r(n,{pl:2,children:o});export{t as Indent};
2
2
  //# sourceMappingURL=Indent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as r,Typography as e}from"@material-ui/core";import a from"react";const n=r(()=>({root:{fontFamily:"monospace"}})),m=({children:o})=>{const t=n();return a.createElement(e,{variant:"body2",className:t.root},o)};export{m as MonospaceText};
1
+ import{jsx as t}from"react/jsx-runtime";import{makeStyles as e,Typography as n}from"@material-ui/core";const a=e(()=>({root:{fontFamily:"monospace"}})),s=({children:o})=>{const r=a();return t(n,{variant:"body2",className:r.root,children:o})};export{s as MonospaceText};
2
2
  //# sourceMappingURL=MonospaceText.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as B,Dialog as W,DialogTitle as A,Typography as F,Button as x,DialogContent as j,Box as r,Divider as k,FormHelperText as M,Tooltip as V}from"@material-ui/core";import G from"@material-ui/icons/Close";import H from"@material-ui/icons/Info";import{ToggleButton as T}from"@material-ui/lab";import e,{useState as C,useMemo as g,useEffect as L}from"react";import{usePermissions as O,useAggregatedRules as U,useResourceTypeInfo as Y}from"../Permissions/PermissionsMetadataContext.esm.js";import q from"./computeMatchResult.esm.js";import z from"./ConditionalDecisionForm/ConditionalDecisionForm.esm.js";import{getInitialValues as J,validateCriteria as K,toRolePermission as Q,getConditions as X}from"./decisionDataMappers.esm.js";import Z from"./MatchByActions.esm.js";import _ from"./MatchByName.esm.js";import ee from"./MatchByResourceType.esm.js";import oe from"./ToggleButtonGroup.esm.js";import{VerticalSelection as ie}from"./VerticalSelection.esm.js";const ne=B(a=>({dialogTitle:{display:"flex",alignItems:"center",justifyContent:"space-between"},fullWidth:{width:"100%","& > *":{flexGrow:1}},infoIcon:{position:"absolute",right:a.spacing(3)},content:{padding:a.spacing(7)},saveButton:{paddingLeft:a.spacing(5),paddingRight:a.spacing(5)},contentContainerConditional:{display:"flex",gap:a.spacing(5),maxWidth:1480}})),te={specificPermission:"Choose a specific permission",filter:"Filter by permission properties",all:"Match all permissions"},R="Choose the name of a resource permission or filter by resource type to set a conditional decision.";function ae({rolePermission:a,readonly:t=!1,onClose:b,onSave:D}){const s=ne(),{permissions:c}=O(),v=U(),y=Y(),p=J(a),[o,d]=C(p.match),[l,f]=C(p.decisionType),[u,I]=C(p.criteria),i=g(()=>q(c,o),[c,o]),m=l==="conditional",w=m?"xl":"sm";L(()=>{m&&c&&!i.commonResourceType&&f("allow")},[m,c,i.commonResourceType,f]);const N=n=>{n!==null&&f(n)},h=g(()=>o.method==="specificPermission"&&!o.name||o.method==="filter"&&!o.resourceType&&!o.actions,[o]),P=g(()=>i.permissions.length===0?!1:!h,[i,h]),S=g(()=>l!=="conditional"?!0:!(!i.commonResourceType||!y?.[i.commonResourceType].pluginId||!K(u,v)),[l,i,y,u,v]),$=()=>{D?.(Q(p.id,o,l==="conditional"?{resourceType:i.commonResourceType,pluginId:y[i.commonResourceType].pluginId,conditions:X(u)}:l))};return e.createElement(W,{open:!0,maxWidth:w,onClose:b,fullWidth:!0},e.createElement(A,{disableTypography:!0,className:s.dialogTitle},e.createElement(F,{variant:"h4",component:"h2"},t?"":"New"," Permission Decision"),e.createElement(x,{startIcon:e.createElement(G,null),onClick:b},"Close")),e.createElement(j,{dividers:!0,className:s.content},e.createElement(r,{className:m?s.contentContainerConditional:void 0},e.createElement(r,{mb:5,flex:1},e.createElement(ie,{options:Object.entries(te).map(([n,E])=>({id:n,displayText:E})),selected:o.method,onChange:n=>d({method:n}),readonly:t})),e.createElement(r,{mb:5,height:189,flex:1},o.method==="specificPermission"&&e.createElement(_,{name:o.name,readonly:t,onNameChange:n=>d({...o,name:n})}),o.method==="filter"&&e.createElement(e.Fragment,null,e.createElement(ee,{resourceType:o.resourceType,readonly:t,onResourceTypeChange:n=>d({...o,resourceType:n})}),e.createElement(Z,{actions:o.actions,readonly:t,resourceSelected:o.resourceType!==void 0,onActionsChange:n=>d({...o,actions:n.length?n:void 0})}),h?null:e.createElement(e.Fragment,null,e.createElement(r,{marginY:2},e.createElement(k,{variant:"middle"})),e.createElement(M,null,`Matched ${i.permissions.length} ${i.permissions.length===1?"permission":"permissions"}`)))),e.createElement(r,{mb:5,flex:1},e.createElement(r,{display:"flex",alignItems:"center"},e.createElement(oe,{value:l,exclusive:!0,fullWidth:!0,"aria-label":"Decision result",onChange:(n,E)=>N(E)},e.createElement(T,{value:"allow","aria-label":"Decision allowed",disabled:t},"Allow"),e.createElement(T,{value:"deny","aria-label":"Decision denied",disabled:t},"Deny"),e.createElement(T,{value:"conditional","aria-label":"Decision conditionally allowed",disabled:!i.commonResourceType||t},"Conditional")),!m&&!t&&e.createElement(V,{title:R},e.createElement(H,{className:s.infoIcon,"aria-label":R}))))),l==="conditional"&&!!i.commonResourceType&&e.createElement(z,{permissionCriteria:u,resourceType:i.commonResourceType,onUpdate:I,readonly:t}),!t&&e.createElement(r,{display:"flex",justifyContent:"flex-end"},e.createElement(x,{variant:"contained",color:"primary",className:s.saveButton,onClick:$,disabled:!P||!S},"Save"))))}export{ae as DecisionDialog};
1
+ import{jsxs as l,jsx as o,Fragment as D}from"react/jsx-runtime";import{makeStyles as k,Dialog as F,DialogTitle as M,Typography as V,Button as I,DialogContent as E,Box as t,Divider as G,FormHelperText as H,Tooltip as L}from"@material-ui/core";import O from"@material-ui/icons/Close";import U from"@material-ui/icons/Info";import{ToggleButton as b}from"@material-ui/lab";import{useState as v,useMemo as m,useEffect as Y}from"react";import{usePermissions as q,useAggregatedRules as z,useResourceTypeInfo as J}from"../Permissions/PermissionsMetadataContext.esm.js";import K from"./computeMatchResult.esm.js";import Q from"./ConditionalDecisionForm/ConditionalDecisionForm.esm.js";import{getInitialValues as X,validateCriteria as Z,toRolePermission as _,getConditions as ee}from"./decisionDataMappers.esm.js";import oe from"./MatchByActions.esm.js";import ie from"./MatchByName.esm.js";import ne from"./MatchByResourceType.esm.js";import re from"./ToggleButtonGroup.esm.js";import{VerticalSelection as le}from"./VerticalSelection.esm.js";const se=k(s=>({dialogTitle:{display:"flex",alignItems:"center",justifyContent:"space-between"},fullWidth:{width:"100%","& > *":{flexGrow:1}},infoIcon:{position:"absolute",right:s.spacing(3)},content:{padding:s.spacing(7)},saveButton:{paddingLeft:s.spacing(5),paddingRight:s.spacing(5)},contentContainerConditional:{display:"flex",gap:s.spacing(5),maxWidth:1480}})),ae={specificPermission:"Choose a specific permission",filter:"Filter by permission properties",all:"Match all permissions"},w="Choose the name of a resource permission or filter by resource type to set a conditional decision.";function te({rolePermission:s,readonly:r=!1,onClose:R,onSave:N}){const c=se(),{permissions:p}=q(),h=z(),g=J(),u=X(s),[e,y]=v(u.match),[a,T]=v(u.decisionType),[f,P]=v(u.criteria),i=m(()=>K(p,e),[p,e]),d=a==="conditional",S=d?"xl":"sm";Y(()=>{d&&p&&!i.commonResourceType&&T("allow")},[d,p,i.commonResourceType,T]);const $=n=>{n!==null&&T(n)},C=m(()=>e.method==="specificPermission"&&!e.name||e.method==="filter"&&!e.resourceType&&!e.actions,[e]),j=m(()=>i.permissions.length===0?!1:!C,[i,C]),B=m(()=>i.commonResourceType!==void 0&&h?.findIndex(n=>n.resourceType===i.commonResourceType)!==-1,[i,h]),W=m(()=>a!=="conditional"?!0:!(!i.commonResourceType||!g?.[i.commonResourceType].pluginId||!Z(f,h)),[a,i,g,f,h]),A=()=>{N?.(_(u.id,e,a==="conditional"?{resourceType:i.commonResourceType,pluginId:g[i.commonResourceType].pluginId,conditions:ee(f)}:a))};return l(F,{open:!0,maxWidth:S,onClose:R,fullWidth:!0,children:[l(M,{disableTypography:!0,className:c.dialogTitle,children:[l(V,{variant:"h4",component:"h2",children:[r?"":"New"," Permission Decision"]}),o(I,{startIcon:o(O,{}),onClick:R,children:"Close"})]}),l(E,{dividers:!0,className:c.content,children:[l(t,{className:d?c.contentContainerConditional:void 0,children:[o(t,{mb:5,flex:1,children:o(le,{options:Object.entries(ae).map(([n,x])=>({id:n,displayText:x})),selected:e.method,onChange:n=>y({method:n}),readonly:r})}),l(t,{mb:5,height:189,flex:1,children:[e.method==="specificPermission"&&o(ie,{name:e.name,readonly:r,onNameChange:n=>y({...e,name:n})}),e.method==="filter"&&l(D,{children:[o(ne,{resourceType:e.resourceType,readonly:r,onResourceTypeChange:n=>y({...e,resourceType:n})}),o(oe,{actions:e.actions,readonly:r,resourceSelected:e.resourceType!==void 0,onActionsChange:n=>y({...e,actions:n.length?n:void 0})}),C?null:l(D,{children:[o(t,{marginY:2,children:o(G,{variant:"middle"})}),o(H,{children:`Matched ${i.permissions.length} ${i.permissions.length===1?"permission":"permissions"}`})]})]})]}),o(t,{mb:5,flex:1,children:l(t,{display:"flex",alignItems:"center",children:[l(re,{value:a,exclusive:!0,fullWidth:!0,"aria-label":"Decision result",onChange:(n,x)=>$(x),children:[o(b,{value:"allow","aria-label":"Decision allowed",disabled:r,children:"Allow"}),o(b,{value:"deny","aria-label":"Decision denied",disabled:r,children:"Deny"}),o(b,{value:"conditional","aria-label":"Decision conditionally allowed",disabled:!B||r,children:"Conditional"})]}),!d&&!r&&o(L,{title:w,children:o(U,{className:c.infoIcon,"aria-label":w})})]})})]}),a==="conditional"&&!!i.commonResourceType&&o(Q,{permissionCriteria:f,resourceType:i.commonResourceType,onUpdate:P,readonly:r}),!r&&o(t,{display:"flex",justifyContent:"flex-end",children:o(I,{variant:"contained",color:"primary",className:c.saveButton,onClick:A,disabled:!j||!W,children:"Save"})})]})]})}export{te as DecisionDialog};
2
2
  //# sourceMappingURL=DecisionDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- import{TextField as c}from"@material-ui/core";import{Autocomplete as d}from"@material-ui/lab";import t from"react";const m="Action";function p({actions:o,readonly:r,resourceSelected:n,onActionsChange:a}){const l=[...n?[]:["create"],"read","update","delete"];return t.createElement(d,{multiple:!0,id:"match-by-attribute-dropdown",options:l,getOptionLabel:e=>e,value:o??[],onChange:(e,i)=>a?.(i),filterSelectedOptions:!0,renderInput:e=>t.createElement(c,{...e,variant:"outlined",label:m,placeholder:"Choose attributes",margin:"normal"}),disabled:r})}export{p as default};
1
+ import{jsx as t}from"react/jsx-runtime";import{TextField as d}from"@material-ui/core";import{Autocomplete as c}from"@material-ui/lab";const p="Action";function s({actions:o,readonly:r,resourceSelected:n,onActionsChange:a}){const i=[...n?[]:["create"],"read","update","delete"];return t(c,{multiple:!0,id:"match-by-attribute-dropdown",options:i,getOptionLabel:e=>e,value:o??[],onChange:(e,l)=>a?.(l),filterSelectedOptions:!0,renderInput:e=>t(d,{...e,variant:"outlined",label:p,placeholder:"Choose attributes",margin:"normal"}),disabled:r})}export{s as default};
2
2
  //# sourceMappingURL=MatchByActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as i,FormControl as s,InputLabel as d,Select as c,MenuItem as u}from"@material-ui/core";import a from"react";import{usePermissions as h}from"../Permissions/PermissionsMetadataContext.esm.js";const p=i(()=>({fullWidth:{width:"100%","& > *":{flexGrow:1}}})),n="Permission name";function f({name:m="",readonly:l,onNameChange:o}){const r=p(),{permissions:t}=h();return a.createElement(s,{className:r.fullWidth,variant:"outlined",disabled:l,"data-testid":"match-by-name-select"},a.createElement(d,{id:"match-by-name-dropdown"},n),a.createElement(c,{labelId:"match-by-name-dropdown",label:n,value:t?m:"",onChange:e=>o?.(e.target.value)},t?.map(e=>a.createElement(u,{key:e.name,value:e.name},e.name))))}export{f as default};
1
+ import{jsxs as i,jsx as a}from"react/jsx-runtime";import{makeStyles as s,FormControl as d,InputLabel as c,Select as h,MenuItem as u}from"@material-ui/core";import{usePermissions as p}from"../Permissions/PermissionsMetadataContext.esm.js";const f=s(()=>({fullWidth:{width:"100%","& > *":{flexGrow:1}}})),t="Permission name";function b({name:l="",readonly:m,onNameChange:o}){const r=f(),{permissions:n}=p();return i(d,{className:r.fullWidth,variant:"outlined",disabled:m,"data-testid":"match-by-name-select",children:[a(c,{id:"match-by-name-dropdown",children:t}),a(h,{labelId:"match-by-name-dropdown",label:t,value:n?l:"",onChange:e=>o?.(e.target.value),children:n?.map(e=>a(u,{value:e.name,children:e.name},e.name))})]})}export{b as default};
2
2
  //# sourceMappingURL=MatchByName.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as m,FormControl as s,InputLabel as d,Select as i,MenuItem as a}from"@material-ui/core";import t from"react";import{useResourceTypeOptions as p}from"../Permissions/PermissionsMetadataContext.esm.js";const y=m(()=>({fullWidth:{width:"100%","& > *":{flexGrow:1}}})),l="Resource type";function b({resourceType:o="",readonly:n,onResourceTypeChange:c}){const u=y(),r=p();return t.createElement(s,{className:u.fullWidth,variant:"outlined",disabled:n,"data-testid":"match-by-resource-select"},t.createElement(d,{id:"match-by-resource-dropdown"},l),t.createElement(i,{labelId:"match-by-resource-dropdown",label:l,value:r?o:"",onChange:e=>c?.(e.target.value),displayEmpty:!0},t.createElement(a,{key:"all",value:void 0},"(all)"),r?.map(e=>t.createElement(a,{key:e,value:e},e))))}export{b as default};
1
+ import{jsxs as o,jsx as l}from"react/jsx-runtime";import{makeStyles as i,FormControl as u,InputLabel as m,Select as p,MenuItem as t}from"@material-ui/core";import{useResourceTypeOptions as h}from"../Permissions/PermissionsMetadataContext.esm.js";const y=i(()=>({fullWidth:{width:"100%","& > *":{flexGrow:1}}})),a="Resource type";function b({resourceType:d="",readonly:n,onResourceTypeChange:c}){const s=y(),r=h();return o(u,{className:s.fullWidth,variant:"outlined",disabled:n,"data-testid":"match-by-resource-select",children:[l(m,{id:"match-by-resource-dropdown",children:a}),o(p,{labelId:"match-by-resource-dropdown",label:a,value:r?d:"",onChange:e=>c?.(e.target.value),displayEmpty:!0,children:[l(t,{value:void 0,children:"(all)"},"all"),r?.map(e=>l(t,{value:e,children:e},e))]})]})}export{b as default};
2
2
  //# sourceMappingURL=MatchByResourceType.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Button as d,Box as n,InputLabel as f,Tooltip as E}from"@material-ui/core";import e,{useState as g}from"react";import{isSupportedType as h}from"./ParamsFormInputRouter.esm.js";import{AdvancedParamsForm as v}from"./ParamsFormJSONEditor.esm.js";import{StandardParamsForm as x}from"./ParamsFormStandard.esm.js";const S=t=>!!t&&"properties"in t;function C({onChange:t,rule:i,value:m}){const[s,c]=g(!1),{paramsSchema:r}=i??{},p=()=>c(u=>!u);if(!S(r))return null;const a=!y(r),l=a||s,o=e.createElement(d,{size:"small",onClick:p,disabled:a},l?"Close editor":"Edit as JSON");return e.createElement(n,{marginTop:2},e.createElement("form",null,l?e.createElement(v,{onChange:t,schema:r,value:m}):e.createElement(e.Fragment,null,e.createElement(n,{marginBottom:2},e.createElement(f,null,"Parameters")),e.createElement(x,{onChange:t,schema:r,value:m}))),e.createElement(n,{display:"flex",flexDirection:"column",alignItems:"flex-end",marginTop:1},a?e.createElement(E,{title:"Only JSON editing is supported for this parameter",arrow:!0},e.createElement("span",null,o)):o))}function y(t){return Object.values(t.properties).every(h)}export{C as ParamsForm};
1
+ import{jsx as r,jsxs as l,Fragment as h}from"react/jsx-runtime";import{Button as f,Box as i,InputLabel as g,Tooltip as x}from"@material-ui/core";import{useState as v}from"react";import{isSupportedType as S}from"./ParamsFormInputRouter.esm.js";import{AdvancedParamsForm as C}from"./ParamsFormJSONEditor.esm.js";import{StandardParamsForm as y}from"./ParamsFormStandard.esm.js";const F=e=>!!e&&"properties"in e;function O({onChange:e,rule:s,value:a}){const[p,c]=v(!1),{paramsSchema:n}=s??{},d=()=>c(u=>!u);if(!F(n))return null;const o=!P(n),t=o||p,m=r(f,{size:"small",onClick:d,disabled:o,children:t?"Close editor":"Edit as JSON"});return l(i,{marginTop:2,children:[r("form",{children:t?r(C,{onChange:e,schema:n,value:a}):l(h,{children:[r(i,{marginBottom:2,children:r(g,{children:"Parameters"})}),r(y,{onChange:e,schema:n,value:a})]})}),r(i,{display:"flex",flexDirection:"column",alignItems:"flex-end",marginTop:1,children:o?r(x,{title:"Only JSON editing is supported for this parameter",arrow:!0,children:r("span",{children:m})}):m})]})}function P(e){return Object.values(e.properties).every(S)}export{O as ParamsForm};
2
2
  //# sourceMappingURL=ParamsForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{IconButton as h,Box as s,FormControlLabel as I,Checkbox as B,Tooltip as F}from"@material-ui/core";import P from"@material-ui/icons/Add";import v from"@material-ui/icons/Remove";import{BackstageUserPlaceholder as u}from"@spotify/backstage-plugin-rbac-common";import e,{useCallback as w,useEffect as z}from"react";import{ParamsFormInputRouter as O}from"./ParamsFormInputRouter.esm.js";const S=[];function T(m){const{onChange:n,schema:f,name:g}=m,{description:d,items:c}=f,[y,p]=e.useState(!1),t=Array.isArray(m.value)?m.value:S,r=t.includes(u),E=(a,l)=>{if(!Array.isArray(l)){const o=[...t];o[a]=l||"",n(o)}},i=w(()=>{n([...t,""])},[n,t]),C=a=>{n(t.filter((l,o)=>o!==a))},k=()=>{n(r?[]:[u])},b=()=>{r&&p(!0)},x=()=>{p(!1)};return z(()=>{t.length?r&&t.length>1&&n([u]):i()},[i,n,t,r]),!c||!("type"in c)?null:e.createElement(e.Fragment,null,(t??[]).map((a,l,{length:o})=>e.createElement(O,{allowEmptyStrings:!0,key:l,onChange:A=>E(l,A),name:l===0?g:"",schema:{description:l===o-1?d:"",type:c.type},value:a,controls:e.createElement(h,{size:"small",onClick:()=>C(l)},e.createElement(v,null))})),!!t?.length&&e.createElement(s,{alignItems:"center",display:"flex",flexDirection:"row",justifyContent:"space-between"},e.createElement(s,null,e.createElement(I,{control:e.createElement(B,{checked:r,onChange:k,name:"checkedB",color:"primary"}),label:"Use the claims from the logged in users token"})),e.createElement(s,null,e.createElement(F,{onClose:x,onOpen:b,open:y,title:"To add additional entries you must uncheck using the claims from the logged in user."},e.createElement("span",null,e.createElement(h,{disabled:r,size:"small",onClick:i},e.createElement(P,null)))))))}export{T as ParamsFormArrayInput};
1
+ import{jsxs as d,Fragment as F,jsx as e}from"react/jsx-runtime";import{IconButton as u,Box as m,FormControlLabel as P,Checkbox as j,Tooltip as v}from"@material-ui/core";import w from"@material-ui/icons/Add";import S from"@material-ui/icons/Remove";import{BackstageUserPlaceholder as h}from"@spotify/backstage-plugin-rbac-common";import{useState as z,useCallback as D,useEffect as E}from"react";import{ParamsFormInputRouter as T}from"./ParamsFormInputRouter.esm.js";const U=[];function L(a){const{onChange:o,schema:f,name:g}=a,{description:y,items:s}=f,[C,p]=z(!1),r=Array.isArray(a.value)?a.value:U,t=r.includes(h),k=(l,n)=>{if(!Array.isArray(n)){const i=[...r];i[l]=n||"",o(i)}},c=D(()=>{o([...r,""])},[o,r]),b=l=>{o(r.filter((n,i)=>i!==l))},x=()=>{o(t?[]:[h])},A=()=>{t&&p(!0)},I=()=>{p(!1)};return E(()=>{r.length?t&&r.length>1&&o([h]):c()},[c,o,r,t]),!s||!("type"in s)?null:d(F,{children:[(r??[]).map((l,n,{length:i})=>e(T,{allowEmptyStrings:!0,onChange:B=>k(n,B),name:n===0?g:"",schema:{description:n===i-1?y:"",type:s.type},value:l,controls:e(u,{size:"small",onClick:()=>b(n),children:e(S,{})})},n)),!!r?.length&&d(m,{alignItems:"center",display:"flex",flexDirection:"row",justifyContent:"space-between",children:[e(m,{children:e(P,{control:e(j,{checked:t,onChange:x,name:"checkedB",color:"primary"}),label:"Use the claims from the logged in users token"})}),e(m,{children:e(v,{onClose:I,onOpen:A,open:C,title:"To add additional entries you must uncheck using the claims from the logged in user.",children:e("span",{children:e(u,{disabled:t,size:"small",onClick:c,children:e(w,{})})})})})]})]})}export{L as ParamsFormArrayInput};
2
2
  //# sourceMappingURL=ParamsFormArrayInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Box as l,FormControlLabel as p,Checkbox as i,Typography as h}from"@material-ui/core";import e from"react";function b(t){const{onChange:a,schema:n,name:o,value:c}=t,{description:r}=n;return e.createElement(l,{mb:1},e.createElement(p,{control:e.createElement(i,{checked:c===!0,onChange:m=>{a(m.target.checked)},name:o,color:"primary"}),label:o}),r&&e.createElement(h,{display:"block",variant:"caption",color:"textSecondary"},r))}export{b as ParamsFormBooleanInput};
1
+ import{jsxs as m,jsx as o}from"react/jsx-runtime";import{Box as i,FormControlLabel as p,Checkbox as h,Typography as s}from"@material-ui/core";function d(a){const{onChange:n,schema:c,name:r,value:t}=a,{description:e}=c;return m(i,{mb:1,children:[o(p,{control:o(h,{checked:t===!0,onChange:l=>{n(l.target.checked)},name:r,color:"primary"}),label:r}),e&&o(s,{display:"block",variant:"caption",color:"textSecondary",children:e})]})}export{d as ParamsFormBooleanInput};
2
2
  //# sourceMappingURL=ParamsFormBooleanInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Box as a,TextField as d,Typography as p}from"@material-ui/core";import{BackstageUserPlaceholder as u}from"@spotify/backstage-plugin-rbac-common";import r from"react";function g({allowEmptyStrings:e,controls:t,name:o,onChange:c,schema:l,value:n}){const m=s=>{c(v({value:s.currentTarget.value,type:l.type}))};return r.createElement(a,{mb:1},r.createElement(a,{display:"flex",gridGap:6},r.createElement(d,{fullWidth:!0,id:o,label:o,placeholder:"Enter",variant:"outlined",size:"small",value:f(n,e),onChange:i(n,e)?void 0:m,disabled:i(n,e)}),t&&r.createElement(a,{alignSelf:"center"},t)),l.description&&r.createElement(p,{variant:"caption",color:"textSecondary"},l.description,i(n)&&!e&&r.createElement(r.Fragment,null," (switch to JSON editor to edit)")))}function i(e,t=!1){return!t&&e===""||e===null||e===u}function f(e,t=!1){return!t&&e===""?"[empty string]":e===null?"[null]":e===u?"[BackstageUserClaims]":e||""}function v({value:e,type:t}){switch(t){case"string":return e===""?void 0:e;case"number":case"integer":return Number.isNaN(Number(e))?void 0:Number(e);case"null":return e==="null"?null:void 0;default:return}}export{g as ParamsFormInput};
1
+ import{jsxs as l,jsx as i,Fragment as p}from"react/jsx-runtime";import{Box as a,TextField as h,Typography as g}from"@material-ui/core";import{BackstageUserPlaceholder as c}from"@spotify/backstage-plugin-rbac-common";function f({allowEmptyStrings:r,controls:e,name:u,onChange:s,schema:n,value:t}){const d=m=>{s(y({value:m.currentTarget.value,type:n.type}))};return l(a,{mb:1,children:[l(a,{display:"flex",gridGap:6,children:[i(h,{fullWidth:!0,id:u,label:u,placeholder:"Enter",variant:"outlined",size:"small",value:v(t,r),onChange:o(t,r)?void 0:d,disabled:o(t,r)}),e&&i(a,{alignSelf:"center",children:e})]}),n.description&&l(g,{variant:"caption",color:"textSecondary",children:[n.description,o(t)&&!r&&i(p,{children:" (switch to JSON editor to edit)"})]})]})}function o(r,e=!1){return!e&&r===""||r===null||r===c}function v(r,e=!1){return!e&&r===""?"[empty string]":r===null?"[null]":r===c?"[BackstageUserClaims]":r||""}function y({value:r,type:e}){switch(e){case"string":return r===""?void 0:r;case"number":case"integer":return Number.isNaN(Number(r))?void 0:Number(r);case"null":return r==="null"?null:void 0;default:return}}export{f as ParamsFormInput};
2
2
  //# sourceMappingURL=ParamsFormInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import e from"react";import{ParamsFormArrayInput as o}from"./ParamsFormArrayInput.esm.js";import{ParamsFormBooleanInput as p}from"./ParamsFormBooleanInput.esm.js";import{ParamsFormInput as y}from"./ParamsFormInput.esm.js";function n(r){return!!r&&"type"in r&&(r.type==="array"||r.type==="boolean"||r.type==="null"||r.type==="number"||r.type==="integer"||r.type==="string")}function a(r){return"type"in r&&r.type==="array"}function m(r){return"type"in r&&r.type==="boolean"}function u({schema:r,...t}){return n(r)?a(r)?e.createElement(o,{...t,schema:r}):m(r)?e.createElement(p,{...t,schema:r}):e.createElement(y,{...t,schema:r}):null}export{u as ParamsFormInputRouter,a as isArraySchemaType,m as isBooleanSchemaType,n as isSupportedType};
1
+ import{jsx as n}from"react/jsx-runtime";import{ParamsFormArrayInput as m}from"./ParamsFormArrayInput.esm.js";import{ParamsFormBooleanInput as e}from"./ParamsFormBooleanInput.esm.js";import{ParamsFormInput as y}from"./ParamsFormInput.esm.js";function o(r){return!!r&&"type"in r&&(r.type==="array"||r.type==="boolean"||r.type==="null"||r.type==="number"||r.type==="integer"||r.type==="string")}function p(r){return"type"in r&&r.type==="array"}function a(r){return"type"in r&&r.type==="boolean"}function u({schema:r,...t}){return o(r)?p(r)?n(m,{...t,schema:r}):a(r)?n(e,{...t,schema:r}):n(y,{...t,schema:r}):null}export{u as ParamsFormInputRouter,p as isArraySchemaType,a as isBooleanSchemaType,o as isSupportedType};
2
2
  //# sourceMappingURL=ParamsFormInputRouter.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as c,TextField as u}from"@material-ui/core";import p from"ajv";import f,{useState as d,useMemo as h}from"react";const v=new p({allErrors:!0}),y=c({textarea:{fontFamily:"monospace"}});function g({onChange:a,schema:e,value:n}){const i=y(),[m,t]=d(!1),s=h(()=>v.compile(e),[e]);return f.createElement(u,{InputProps:{classes:{input:i.textarea}},multiline:!0,fullWidth:!0,variant:"outlined",minRows:3,error:m,defaultValue:JSON.stringify(n,void 0,2),onChange:l=>{const o=l.target.value;if(o)try{const r=JSON.parse(o);s(r)&&(t(!1),a(r))}catch{t(!0)}}})}export{g as AdvancedParamsForm};
1
+ import{jsx as u}from"react/jsx-runtime";import{makeStyles as c,TextField as p}from"@material-ui/core";import f from"ajv";import{useState as d,useMemo as h}from"react";const v=new f({allErrors:!0}),x=c({textarea:{fontFamily:"monospace"}});function y({onChange:a,schema:t,value:n}){const i=x(),[m,e]=d(!1),s=h(()=>v.compile(t),[t]);return u(p,{InputProps:{classes:{input:i.textarea}},multiline:!0,fullWidth:!0,variant:"outlined",minRows:3,error:m,defaultValue:JSON.stringify(n,void 0,2),onChange:l=>{const o=l.target.value;if(o)try{const r=JSON.parse(o);s(r)&&(e(!1),a(r))}catch{e(!0)}}})}export{y as AdvancedParamsForm};
2
2
  //# sourceMappingURL=ParamsFormJSONEditor.esm.js.map
@@ -1,2 +1,2 @@
1
- import{FormHelperText as c}from"@material-ui/core";import u from"ajv";import t,{useMemo as n}from"react";import{ParamsFormInputRouter as f}from"./ParamsFormInputRouter.esm.js";const d=new u({allErrors:!0});function g({onChange:s,schema:r,value:m}){const o=n(()=>d.compile(r),[r]),i=n(()=>o(m),[o,m]),l=Object.entries(r.properties),p=e=>a=>{s({...m,[e]:a})};return t.createElement(t.Fragment,null,l.map(([e,a])=>t.createElement(f,{isRequired:r.required?.includes(e)||!1,key:e,name:e,onChange:p(e),schema:a,value:m?.[e]})),t.createElement(c,{error:!i},o.errors?.[0].message))}export{g as StandardParamsForm};
1
+ import{jsxs as u,Fragment as l,jsx as s}from"react/jsx-runtime";import{FormHelperText as d}from"@material-ui/core";import f from"ajv";import{useMemo as t}from"react";import{ParamsFormInputRouter as h}from"./ParamsFormInputRouter.esm.js";const g=new f({allErrors:!0});function x({onChange:a,schema:e,value:m}){const o=t(()=>g.compile(e),[e]),i=t(()=>o(m),[o,m]),p=Object.entries(e.properties),c=r=>n=>{a({...m,[r]:n})};return u(l,{children:[p.map(([r,n])=>s(h,{isRequired:e.required?.includes(r)||!1,name:r,onChange:c(r),schema:n,value:m?.[r]},r)),s(d,{error:!i,children:o.errors?.[0].message})]})}export{x as StandardParamsForm};
2
2
  //# sourceMappingURL=ParamsFormStandard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as r}from"@material-ui/core";import{ToggleButtonGroup as m}from"@material-ui/lab";import f from"react";const u=r({fullWidth:{width:"100%","& > *":{flexGrow:1}}});function a({className:t,fullWidth:o,...e}){const l=u();return f.createElement(m,{className:`${o?l.fullWidth:""} ${t}`,...e})}export{a as default};
1
+ import{jsx as s}from"react/jsx-runtime";import{makeStyles as e}from"@material-ui/core";import{ToggleButtonGroup as f}from"@material-ui/lab";const m=e({fullWidth:{width:"100%","& > *":{flexGrow:1}}});function u({className:t,fullWidth:o,...l}){const r=m();return s(f,{className:`${o?r.fullWidth:""} ${t}`,...l})}export{u as default};
2
2
  //# sourceMappingURL=ToggleButtonGroup.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as c,Tabs as d,Tab as m}from"@material-ui/core";import a from"react";import{getSelectedColor as s}from"./utils.esm.js";const p=c(e=>({indicator:{right:"unset",backgroundColor:e.palette.text.primary},tab:{maxWidth:"none","&.Mui-selected":{backgroundColor:s(e)}}}));function b({options:e,selected:r,onChange:i,readonly:n=!1}){const o=p();return a.createElement(d,{orientation:"vertical",value:e.map(({id:t})=>t).indexOf(r),onChange:(t,l)=>i(e[l].id),indicatorColor:"primary",TabIndicatorProps:{className:o.indicator}},e.map(t=>a.createElement(m,{key:t.id,label:t.displayText.toUpperCase(),className:o.tab,disabled:n})))}export{b as VerticalSelection};
1
+ import{jsx as a}from"react/jsx-runtime";import{makeStyles as d,Tabs as c,Tab as s}from"@material-ui/core";import{getSelectedColor as p}from"./utils.esm.js";const m=d(o=>({indicator:{right:"unset",backgroundColor:o.palette.text.primary},tab:{maxWidth:"none","&.Mui-selected":{backgroundColor:p(o)}}}));function b({options:o,selected:r,onChange:i,readonly:n=!1}){const e=m();return a(c,{orientation:"vertical",value:o.map(({id:t})=>t).indexOf(r),onChange:(t,l)=>i(o[l].id),indicatorColor:"primary",TabIndicatorProps:{className:e.indicator},children:o.map(t=>a(s,{label:t.displayText.toUpperCase(),className:e.tab,disabled:n},t.id))})}export{b as VerticalSelection};
2
2
  //# sourceMappingURL=VerticalSelection.esm.js.map
@@ -1,2 +1,2 @@
1
- import t from"react";import{StatusChip as r}from"../PolicyTester/StatusChip.esm.js";import{getTextFromDiffOperation as i,getSeverityFromDiffOperation as n}from"./utils.esm.js";const p=e=>{const o=i(e.operation);return!e.operation||e.operation==="UNCHANGED"?null:t.createElement(r,{size:e.size,text:o,severity:n(e.operation),outlined:!0})};export{p as DiffBadge};
1
+ import{jsx as i}from"react/jsx-runtime";import{StatusChip as r}from"../PolicyTester/StatusChip.esm.js";import{getTextFromDiffOperation as t,getSeverityFromDiffOperation as n}from"./utils.esm.js";const p=o=>{const e=t(o.operation);return!o.operation||o.operation==="UNCHANGED"?null:i(r,{size:o.size,text:e,severity:n(o.operation),outlined:!0})};export{p as DiffBadge};
2
2
  //# sourceMappingURL=DiffBadge.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as M,Box as f,Typography as N}from"@material-ui/core";import e,{Fragment as s}from"react";import{getMatchBy as d}from"../Permissions/utils.esm.js";import{usePolicyDiff as R}from"./usePolicyDiff.esm.js";import{getColorFromDiffOperation as V}from"./utils.esm.js";const C=M(m=>({root:({operation:r})=>({color:V(m,r)})})),o=m=>e.createElement(N,{...m,variant:"body2"}),t=m=>{const r=C(m);return e.createElement(f,{...m,className:r.root,component:"span",fontWeight:"fontWeightBold"})},P=({policy:m})=>{const r=R(m),D=r?.policy.operation==="CHANGED"||Object.values(r?.roles??{}).some(a=>a.role.operation!=="UNCHANGED")||r?.options?.resolutionStrategy.operation==="CHANGED";if(!r||!D)return e.createElement(f,null,"No changes");const b=!!r.policy.before&&!!r.policy.after&&r.policy.before.name!==r.policy.after.name,y=r.options.resolutionStrategy.operation==="CHANGED",A=({before:a,after:n})=>a&&n&&a.name!==n.name,h=({before:a,after:n})=>a&&n&&a.description!==n.description,g=({operation:a})=>a!=="ADDED"&&a!=="REMOVED";return e.createElement(f,null,b&&e.createElement(o,null,"Policy name ",e.createElement(t,{operation:"CHANGED"},"changed")," from"," ",e.createElement(t,null,'"',r.policy.before?.name,'"')," to"," ",e.createElement(t,null,'"',r.policy.after?.name,'"')),y&&e.createElement(o,null,"Resolution Strategy ",e.createElement(t,{operation:"CHANGED"},"changed")," ","from ",e.createElement(t,null,'"',r.options.resolutionStrategy.before,'"')," to"," ",e.createElement(t,null,'"',r.options.resolutionStrategy.after,'"')),Object.entries(r.roles).map(([a,{role:n,permissions:O,members:x}])=>e.createElement(s,{key:a},n.operation==="ADDED"&&e.createElement(o,null,"Role ",e.createElement(t,null,'"',n.after?.name,'"')," has been"," ",e.createElement(t,{operation:"ADDED"},"added")),n.operation==="REMOVED"&&e.createElement(o,null,"Role ",e.createElement(t,null,'"',n.before?.name,'"')," has been"," ",e.createElement(t,{operation:"REMOVED"},"removed")),A(n)&&e.createElement(o,null,"Role name changed from ",e.createElement(t,null,'"',n.before?.name,'"')," ","to ",e.createElement(t,null,'"',n.after?.name,'"')),h(n)&&e.createElement(o,null,"Role description changed from"," ",e.createElement(t,null,'"',n.before?.description,'"')," to"," ",e.createElement(t,null,'"',n.after?.description,'"')),n.indexAfter>n.indexBefore&&n.indexBefore!==-1&&e.createElement(o,null,"Role ",e.createElement(t,null,'"',n.after?.name,'"')," has been"," ",e.createElement(t,{operation:"MOVED_DOWN"},"moved down")," in priority"),n.indexAfter<n.indexBefore&&n.indexAfter!==-1&&e.createElement(o,null,"Role ",e.createElement(t,null,'"',n.after?.name,'"')," has been"," ",e.createElement(t,{operation:"MOVED_UP"},"moved up")," in priority"),g(n)&&e.createElement(e.Fragment,null,Object.entries(O).map(([E,l])=>{const{before:p,after:u}=l,c=p&&d(p),i=u&&d(u);return e.createElement(s,{key:E},l.operation==="ADDED"&&l.after&&e.createElement(o,null,"Permission decision"," ",e.createElement(t,null,'"',i,'"')," has been"," ",e.createElement(t,{operation:"ADDED"},"added")," to"," ",e.createElement(t,null,'"',n.after?.name,'"')),l.operation==="REMOVED"&&l.before&&e.createElement(o,null,"Permission decision"," ",e.createElement(t,null,'"',c,'"')," has been"," ",e.createElement(t,{operation:"REMOVED"},"removed")," ","from ",e.createElement(t,null,'"',n.after?.name,'"')),l.operation==="CHANGED"&&e.createElement(o,null,c!==i?e.createElement(e.Fragment,null,"Permission decision"," ",e.createElement(t,null,'"',c,'"')," has been"," ",e.createElement(t,{operation:"CHANGED"},"updated")," ","to ",e.createElement(t,null,'"',i,'"')):e.createElement(e.Fragment,null,"Permission decision"," ",e.createElement(t,null,'"',c,'"')," has been"," ",e.createElement(t,{operation:"CHANGED"},"updated"))," ","in ",e.createElement(t,null,'"',n.after?.name,'"')),l.indexAfter>l.indexBefore&&l.indexBefore!==-1&&e.createElement(o,null,"Permission decision"," ",e.createElement(t,null,'"',i,'"')," has been"," ",e.createElement(t,{operation:"MOVED_DOWN"},"moved down")," ","in priority in"," ",e.createElement(t,null,'"',n.after?.name,'"')),l.indexAfter<l.indexBefore&&l.indexAfter!==-1&&e.createElement(o,null,"Permission decision"," ",e.createElement(t,null,'"',i,'"')," has been"," ",e.createElement(t,{operation:"MOVED_UP"},"moved up")," ","in priority in"," ",e.createElement(t,null,'"',n.after?.name,'"')))}),Object.entries(x).map(([E,l])=>e.createElement(s,{key:E},l.operation==="ADDED"&&l.after&&e.createElement(o,null,"Member ",e.createElement(t,null,'"',l.after,'"')," has been"," ",e.createElement(t,{operation:"ADDED"},"added")," to"," ",e.createElement(t,null,'"',n.after?.name,'"')),l.operation==="REMOVED"&&l.before&&e.createElement(o,null,"Member ",e.createElement(t,null,'"',l.before,'"')," has been"," ",e.createElement(t,{operation:"REMOVED"},"removed")," from"," ",e.createElement(t,null,'"',n.after?.name,'"'))))))))};export{P as DiffSummary};
1
+ import{jsx as t,jsxs as e,Fragment as m}from"react/jsx-runtime";import{makeStyles as R,Box as f,Typography as P}from"@material-ui/core";import{Fragment as p}from"react";import{getMatchBy as b}from"../Permissions/utils.esm.js";import{usePolicyDiff as V}from"./usePolicyDiff.esm.js";import{getColorFromDiffOperation as C}from"./utils.esm.js";const v=R(c=>({root:({operation:n})=>({color:C(c,n)})})),a=c=>t(P,{...c,variant:"body2"}),o=c=>{const n=v(c);return t(f,{...c,className:n.root,component:"span",fontWeight:"fontWeightBold"})},B=({policy:c})=>{const n=V(c),y=n?.policy.operation==="CHANGED"||Object.values(n?.roles??{}).some(d=>d.role.operation!=="UNCHANGED")||n?.options?.resolutionStrategy.operation==="CHANGED";if(!n||!y)return t(f,{children:"No changes"});const A=!!n.policy.before&&!!n.policy.after&&n.policy.before.name!==n.policy.after.name,g=n.options.resolutionStrategy.operation==="CHANGED",O=({before:d,after:r})=>d&&r&&d.name!==r.name,u=({before:d,after:r})=>d&&r&&d.description!==r.description,x=({operation:d})=>d!=="ADDED"&&d!=="REMOVED";return e(f,{children:[A&&e(a,{children:["Policy name ",t(o,{operation:"CHANGED",children:"changed"})," from"," ",e(o,{children:['"',n.policy.before?.name,'"']})," to"," ",e(o,{children:['"',n.policy.after?.name,'"']})]}),g&&e(a,{children:["Resolution Strategy ",t(o,{operation:"CHANGED",children:"changed"})," ","from ",e(o,{children:['"',n.options.resolutionStrategy.before,'"']})," to"," ",e(o,{children:['"',n.options.resolutionStrategy.after,'"']})]}),Object.entries(n.roles).map(([d,{role:r,permissions:M,members:N}])=>e(p,{children:[r.operation==="ADDED"&&e(a,{children:["Role ",e(o,{children:['"',r.after?.name,'"']})," has been"," ",t(o,{operation:"ADDED",children:"added"})]}),r.operation==="REMOVED"&&e(a,{children:["Role ",e(o,{children:['"',r.before?.name,'"']})," has been"," ",t(o,{operation:"REMOVED",children:"removed"})]}),O(r)&&e(a,{children:["Role name changed from ",e(o,{children:['"',r.before?.name,'"']})," ","to ",e(o,{children:['"',r.after?.name,'"']})]}),u(r)&&e(a,{children:["Role description changed from"," ",e(o,{children:['"',r.before?.description,'"']})," to"," ",e(o,{children:['"',r.after?.description,'"']})]}),r.indexAfter>r.indexBefore&&r.indexBefore!==-1&&e(a,{children:["Role ",e(o,{children:['"',r.after?.name,'"']})," has been"," ",t(o,{operation:"MOVED_DOWN",children:"moved down"})," in priority"]}),r.indexAfter<r.indexBefore&&r.indexAfter!==-1&&e(a,{children:["Role ",e(o,{children:['"',r.after?.name,'"']})," has been"," ",t(o,{operation:"MOVED_UP",children:"moved up"})," in priority"]}),x(r)&&e(m,{children:[Object.entries(M).map(([s,i])=>{const{before:D,after:E}=i,h=D&&b(D),l=E&&b(E);return e(p,{children:[i.operation==="ADDED"&&i.after&&e(a,{children:["Permission decision"," ",e(o,{children:['"',l,'"']})," has been"," ",t(o,{operation:"ADDED",children:"added"})," to"," ",e(o,{children:['"',r.after?.name,'"']})]}),i.operation==="REMOVED"&&i.before&&e(a,{children:["Permission decision"," ",e(o,{children:['"',h,'"']})," has been"," ",t(o,{operation:"REMOVED",children:"removed"})," ","from ",e(o,{children:['"',r.after?.name,'"']})]}),i.operation==="CHANGED"&&e(a,{children:[h!==l?e(m,{children:["Permission decision"," ",e(o,{children:['"',h,'"']})," has been"," ",t(o,{operation:"CHANGED",children:"updated"})," ","to ",e(o,{children:['"',l,'"']})]}):e(m,{children:["Permission decision"," ",e(o,{children:['"',h,'"']})," has been"," ",t(o,{operation:"CHANGED",children:"updated"})]})," ","in ",e(o,{children:['"',r.after?.name,'"']})]}),i.indexAfter>i.indexBefore&&i.indexBefore!==-1&&e(a,{children:["Permission decision"," ",e(o,{children:['"',l,'"']})," has been"," ",t(o,{operation:"MOVED_DOWN",children:"moved down"})," ","in priority in"," ",e(o,{children:['"',r.after?.name,'"']})]}),i.indexAfter<i.indexBefore&&i.indexAfter!==-1&&e(a,{children:["Permission decision"," ",e(o,{children:['"',l,'"']})," has been"," ",t(o,{operation:"MOVED_UP",children:"moved up"})," ","in priority in"," ",e(o,{children:['"',r.after?.name,'"']})]})]},s)}),Object.entries(N).map(([s,i])=>e(p,{children:[i.operation==="ADDED"&&i.after&&e(a,{children:["Member ",e(o,{children:['"',i.after,'"']})," has been"," ",t(o,{operation:"ADDED",children:"added"})," to"," ",e(o,{children:['"',r.after?.name,'"']})]}),i.operation==="REMOVED"&&i.before&&e(a,{children:["Member ",e(o,{children:['"',i.before,'"']})," has been"," ",t(o,{operation:"REMOVED",children:"removed"})," from"," ",e(o,{children:['"',r.after?.name,'"']})]})]},s))]})]},d))]})};export{B as DiffSummary};
2
2
  //# sourceMappingURL=DiffSummary.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as y,IconButton as E}from"@material-ui/core";import v from"@material-ui/icons/Check";import S from"@material-ui/icons/Edit";import e,{useState as p,useRef as k,useEffect as C,useLayoutEffect as W}from"react";const w=y(t=>({container:{display:"flex",position:"relative",alignItems:"center",gap:t.spacing(1),flexShrink:1,maxWidth:"100%",minWidth:0},input:({invalid:r})=>({boxSizing:"content-box",display:"block",maxWidth:"100%",padding:0,borderWidth:2,borderStyle:"solid",borderColor:r?t.palette.error.main:"transparent",borderRadius:t.shape.borderRadius,backgroundColor:"transparent",color:t.palette.textContrast,fontFamily:"inherit",fontSize:"inherit",lineHeight:"inherit",fontWeight:"inherit",textOverflow:"ellipsis"}),hiddenSpan:{position:"absolute",top:0,left:0,borderWidth:1,whiteSpace:"pre",opacity:0,pointerEvents:"none"}}));function R({invalid:t,name:r,value:a,onTextChange:f}){const o=w({invalid:t}),[u,s]=p(!1),[c,b]=p(null),n=k(null),[i,d]=p(a);C(()=>{d(a)},[a]),W(()=>{n.current&&c&&n.current.style.setProperty("width",`max(${c.getBoundingClientRect().width}px, 3ch)`)},[c,i]);const g=()=>{s(!1),d(a)},m=()=>{s(!1),f?.(i)},h=()=>{u?m():(s(!0),n.current?.focus())},x=l=>{l.key==="Enter"&&n.current?.blur(),l.key==="Escape"&&g()};return e.createElement(e.Fragment,null,e.createElement("div",{className:o.container},e.createElement("input",{"aria-label":r,className:o.input,name:r,ref:n,onChange:l=>d(l.target.value),onFocus:h,onBlur:m,onKeyDown:x,value:i}),e.createElement("span",{"aria-hidden":"true",className:o.hiddenSpan,ref:b},i),e.createElement(E,{onClick:h,size:"small"},u?e.createElement(v,{"aria-label":"Save title"}):e.createElement(S,{"aria-label":"Edit title"}))))}export{R as default};
1
+ import{jsx as t,Fragment as y,jsxs as v}from"react/jsx-runtime";import{makeStyles as S,IconButton as k}from"@material-ui/core";import C from"@material-ui/icons/Check";import W from"@material-ui/icons/Edit";import{useState as p,useRef as E,useEffect as w,useLayoutEffect as R}from"react";const z=S(e=>({container:{display:"flex",position:"relative",alignItems:"center",gap:e.spacing(1),flexShrink:1,maxWidth:"100%",minWidth:0},input:({invalid:i})=>({boxSizing:"content-box",display:"block",maxWidth:"100%",padding:0,borderWidth:2,borderStyle:"solid",borderColor:i?e.palette.error.main:"transparent",borderRadius:e.shape.borderRadius,backgroundColor:"transparent",color:e.palette.textContrast,fontFamily:"inherit",fontSize:"inherit",lineHeight:"inherit",fontWeight:"inherit",textOverflow:"ellipsis"}),hiddenSpan:{position:"absolute",top:0,left:0,borderWidth:1,whiteSpace:"pre",opacity:0,pointerEvents:"none"}}));function B({invalid:e,name:i,value:r,onTextChange:f}){const l=z({invalid:e}),[u,s]=p(!1),[d,b]=p(null),n=E(null),[a,c]=p(r);w(()=>{c(r)},[r]),R(()=>{n.current&&d&&n.current.style.setProperty("width",`max(${d.getBoundingClientRect().width}px, 3ch)`)},[d,a]);const g=()=>{s(!1),c(r)},h=()=>{s(!1),f?.(a)},m=()=>{u?h():(s(!0),n.current?.focus())},x=o=>{o.key==="Enter"&&n.current?.blur(),o.key==="Escape"&&g()};return t(y,{children:v("div",{className:l.container,children:[t("input",{"aria-label":i,className:l.input,name:i,ref:n,onChange:o=>c(o.target.value),onFocus:m,onBlur:h,onKeyDown:x,value:a}),t("span",{"aria-hidden":"true",className:l.hiddenSpan,ref:b,children:a}),t(k,{onClick:m,size:"small",children:u?t(C,{"aria-label":"Save title"}):t(W,{"aria-label":"Edit title"})})]})})}export{B as default};
2
2
  //# sourceMappingURL=EditableInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Progress as c,ErrorPanel as a,ContentHeader as p}from"@backstage/core-components";import{Grid as s,Typography as f}from"@material-ui/core";import e from"react";import E from"react-use/lib/useMount";import{PageWrapper as g}from"../Layout/PageWrapper.esm.js";import{usePoliciesContext as P}from"../Policies/PoliciesProvider.esm.js";import{useFetchPolicies as u}from"../Policies/useFetchPolicies.esm.js";import{PolicyImportButton as h}from"../Policy/PolicyImportButton.esm.js";import m from"./HomePageContent.esm.js";import d from"./HomePageEmptyState.esm.js";function y(){const{fallbackPolicy:o,policies:r}=P(),{loading:l,error:i,fetchPolicies:n}=u();E(()=>{r||n()});let t;return l?t=e.createElement(s,{item:!0,xs:12},e.createElement(c,null)):i?t=e.createElement(a,{error:i}):o&&(!r||r.length===0)?t=e.createElement(m,{policies:[o]}):!r||r.length===0?t=e.createElement(d,null):t=e.createElement(m,{policies:r}),e.createElement(g,{pages:void 0,header:e.createElement(p,{titleComponent:e.createElement(f,{variant:"h2"},"RBAC Policies")},e.createElement(h,null))},t)}export{y as HomePage};
1
+ import{jsx as o}from"react/jsx-runtime";import{Progress as n,ErrorPanel as c,ContentHeader as s}from"@backstage/core-components";import{Grid as a,Typography as f}from"@material-ui/core";import h from"react-use/lib/useMount";import{PageWrapper as P}from"../Layout/PageWrapper.esm.js";import{usePoliciesContext as d}from"../Policies/PoliciesProvider.esm.js";import{useFetchPolicies as g}from"../Policies/useFetchPolicies.esm.js";import{PolicyImportButton as u}from"../Policy/PolicyImportButton.esm.js";import m from"./HomePageContent.esm.js";import x from"./HomePageEmptyState.esm.js";function y(){const{fallbackPolicy:i,policies:r}=d(),{loading:p,error:t,fetchPolicies:l}=g();h(()=>{r||l()});let e;return p?e=o(a,{item:!0,xs:12,children:o(n,{})}):t?e=o(c,{error:t}):i&&(!r||r.length===0)?e=o(m,{policies:[i]}):!r||r.length===0?e=o(x,{}):e=o(m,{policies:r}),o(P,{pages:void 0,header:o(s,{titleComponent:o(f,{variant:"h2",children:"RBAC Policies"}),children:o(u,{})}),children:e})}export{y as HomePage};
2
2
  //# sourceMappingURL=HomePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Grid as o,Button as a}from"@material-ui/core";import e from"react";import{useNavigate as f}from"react-router-dom";import{PoliciesTable as E}from"../Policies/PoliciesTable.esm.js";import{PolicyCard as c}from"../Policy/PolicyCard.esm.js";import{PolicyProvider as y}from"../Policy/PolicyProvider.esm.js";import{PolicyPublishButton as P}from"../Policy/PolicyPublishButton.esm.js";import{useDeleteDraftPolicy as v}from"../Policy/useDeleteDraftPolicy.esm.js";import{useDuplicatePolicy as D}from"../Policy/useDuplicatePolicy.esm.js";function g({policies:i}){const t=i.find(l=>l.status==="draft"),r=i.find(l=>l.status==="active"),[n,m]=D(),[s,d]=v(t),p=f(),u=b(i);return e.createElement(o,{container:!0,spacing:4},r?e.createElement(o,{item:!0,xs:12,md:6},e.createElement(c,{policy:r,to:`./versions/${r.id}`,actions:e.createElement(a,{color:"primary",disabled:n.loading||!!t,onClick:()=>m(r)},"Duplicate")})):null,t?e.createElement(o,{item:!0,xs:12,md:6},e.createElement(c,{policy:t,to:`./versions/${t.id}`,actions:e.createElement(e.Fragment,null,e.createElement(a,{onClick:()=>p(`versions/${t.id}`),color:"primary"},"Edit"),e.createElement(a,{color:"primary",disabled:s.loading,onClick:d},"Delete Draft"),e.createElement(y,{policyId:t.id},e.createElement(P,{color:"primary"})))})):null,e.createElement(o,{item:!0,xs:12},e.createElement(E,{data:u,canDuplicate:!t})))}function b(i){return i.filter(({status:t})=>t==="inactive")}export{g as default};
1
+ import{jsxs as n,jsx as i,Fragment as y}from"react/jsx-runtime";import{Grid as e,Button as c}from"@material-ui/core";import{useNavigate as h}from"react-router-dom";import{PoliciesTable as P}from"../Policies/PoliciesTable.esm.js";import{PolicyCard as a}from"../Policy/PolicyCard.esm.js";import{PolicyProvider as v}from"../Policy/PolicyProvider.esm.js";import{PolicyPublishButton as D}from"../Policy/PolicyPublishButton.esm.js";import{useDeleteDraftPolicy as x}from"../Policy/useDeleteDraftPolicy.esm.js";import{useDuplicatePolicy as g}from"../Policy/useDuplicatePolicy.esm.js";function C({policies:o}){const r=o.find(l=>l.status==="draft"),t=o.find(l=>l.status==="active"),[d,s]=g(),[m,p]=x(r),u=h(),f=b(o);return n(e,{container:!0,spacing:4,children:[t?i(e,{item:!0,xs:12,md:6,children:i(a,{policy:t,to:`./versions/${t.id}`,actions:i(c,{color:"primary",disabled:d.loading||!!r,onClick:()=>s(t),children:"Duplicate"})})}):null,r?i(e,{item:!0,xs:12,md:6,children:i(a,{policy:r,to:`./versions/${r.id}`,actions:n(y,{children:[i(c,{onClick:()=>u(`versions/${r.id}`),color:"primary",children:"Edit"}),i(c,{color:"primary",disabled:m.loading,onClick:p,children:"Delete Draft"}),i(v,{policyId:r.id,children:i(D,{color:"primary"})})]})})}):null,i(e,{item:!0,xs:12,children:i(P,{data:f,canDuplicate:!r})})]})}function b(o){return o.filter(({status:r})=>r==="inactive")}export{C as default};
2
2
  //# sourceMappingURL=HomePageContent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{EmptyState as l}from"@backstage/core-components";import{useApi as c}from"@backstage/core-plugin-api";import{makeStyles as s,Card as m,CardContent as p,Box as a,Button as u}from"@material-ui/core";import e,{useEffect as d}from"react";import{useNavigate as f}from"react-router-dom";import y from"react-use/lib/useAsyncFn";import{rbacApiRef as b}from"../../api.esm.js";const g=s(o=>({cardContent:{padding:o.spacing(6,3),"& > *":{background:"transparent"}}}));function v(){const o=g(),n=c(b),r=f(),[t,i]=y(async()=>n.createDraft({roles:[],options:{resolutionStrategy:"any-allow"}}),[n]);return d(()=>{t.value&&r(`./versions/${t.value.id}`)},[r,t.value]),e.createElement(m,null,e.createElement(p,{className:o.cardContent},e.createElement(l,{missing:"content",title:"No policy configured",description:e.createElement(e.Fragment,null,e.createElement(a,{component:"span",display:"block",pb:2},"Until you've configured your policy, authorization will be denied for all permissions."),e.createElement(a,{component:"span",display:"block"},"Click the button below to create the first version of your policy.")),action:e.createElement(u,{variant:"contained",color:"primary",disabled:t.loading,onClick:i},"New version")})))}export{v as default};
1
+ import{jsx as o,jsxs as c,Fragment as l}from"react/jsx-runtime";import{EmptyState as s}from"@backstage/core-components";import{useApi as p}from"@backstage/core-plugin-api";import{makeStyles as d,Card as m,CardContent as f,Box as n,Button as u}from"@material-ui/core";import{useEffect as y}from"react";import{useNavigate as b}from"react-router-dom";import g from"react-use/lib/useAsyncFn";import{rbacApiRef as v}from"../../api.esm.js";const h=d(t=>({cardContent:{padding:t.spacing(6,3),"& > *":{background:"transparent"}}}));function C(){const t=h(),e=p(v),i=b(),[r,a]=g(async()=>e.createDraft({roles:[],options:{resolutionStrategy:"any-allow"}}),[e]);return y(()=>{r.value&&i(`./versions/${r.value.id}`)},[i,r.value]),o(m,{children:o(f,{className:t.cardContent,children:o(s,{missing:"content",title:"No policy configured",description:c(l,{children:[o(n,{component:"span",display:"block",pb:2,children:"Until you've configured your policy, authorization will be denied for all permissions."}),o(n,{component:"span",display:"block",children:"Click the button below to create the first version of your policy."})]}),action:o(u,{variant:"contained",color:"primary",disabled:r.loading,onClick:a,children:"New version"})})})})}export{C as default};
2
2
  //# sourceMappingURL=HomePageEmptyState.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Breadcrumbs as p,Link as o}from"@backstage/core-components";import{useRouteRef as n}from"@backstage/core-plugin-api";import{makeStyles as i,Typography as u}from"@material-ui/core";import e from"react";import{rootRouteRef as f}from"../../routes.esm.js";const l=i(r=>({breadcrumbs:{marginBottom:r.spacing(4)}}));function b({pages:r}){const a=n(f),c=l();return e.createElement(p,{className:c.breadcrumbs},e.createElement(o,{to:a()},"Home"),r.map(({title:m,path:t},s)=>t?e.createElement(o,{to:t,key:t,relative:"path"},m):e.createElement(u,{key:`${s}`},m)))}export{b as Breadcrumbs};
1
+ import{jsxs as c,jsx as e}from"react/jsx-runtime";import{Breadcrumbs as p,Link as t}from"@backstage/core-components";import{useRouteRef as n}from"@backstage/core-plugin-api";import{makeStyles as u,Typography as d}from"@material-ui/core";import{rootRouteRef as f}from"../../routes.esm.js";const l=u(r=>({breadcrumbs:{marginBottom:r.spacing(4)}}));function b({pages:r}){const a=n(f),s=l();return c(p,{className:s.breadcrumbs,children:[e(t,{to:a(),children:"Home"}),r.map(({title:m,path:o},i)=>o?e(t,{to:o,relative:"path",children:m},o):e(d,{children:m},`${i}`))]})}export{b as Breadcrumbs};
2
2
  //# sourceMappingURL=Breadcrumbs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as m}from"@material-ui/core";import r from"react";const o=m(()=>({emptyStateImage:{width:"95%",zIndex:2,position:"relative",left:"50%",top:"50%",transform:"translate(-50%, 15%)"}}));function n({src:t,alt:e}){const a=o();return r.createElement("img",{src:t,className:`${a.emptyStateImage} `,alt:e})}export{n as EmptyStateImageWrapper};
1
+ import{jsx as r}from"react/jsx-runtime";import{makeStyles as m}from"@material-ui/core";const o=m(()=>({emptyStateImage:{width:"95%",zIndex:2,position:"relative",left:"50%",top:"50%",transform:"translate(-50%, 15%)"}}));function s({src:t,alt:e}){const a=o();return r("img",{src:t,className:`${a.emptyStateImage} `,alt:e})}export{s as EmptyStateImageWrapper};
2
2
  //# sourceMappingURL=EmptyStateImageWrapper.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Page as o,Header as i,Content as l}from"@backstage/core-components";import{Container as c,Grid as n}from"@material-ui/core";import{SpotifyLicenseBanner as m}from"@spotify/backstage-plugin-core";import e from"react";import{Breadcrumbs as p}from"./Breadcrumbs.esm.js";function s({children:r,header:a,pages:t}){return e.createElement(o,{themeId:"tool"},e.createElement(m,{backend:"rbac",invalidLicenseMessage:"Your existing policy will continue to apply, but you will be unable to make any changes until you enter a valid license."}),e.createElement(i,{title:"Role Based Access Control"}),e.createElement(l,null,e.createElement(c,{maxWidth:"lg"},e.createElement(n,{container:!0,spacing:4},e.createElement(n,{item:!0,xs:12},t&&e.createElement(p,{pages:t}),a),r))))}export{s as PageWrapper};
1
+ import{jsxs as i,jsx as e}from"react/jsx-runtime";import{Page as a,Header as l,Content as c}from"@backstage/core-components";import{Container as s,Grid as n}from"@material-ui/core";import{SpotifyLicenseBanner as d}from"@spotify/backstage-plugin-core";import{Breadcrumbs as m}from"./Breadcrumbs.esm.js";function p({children:o,header:t,pages:r}){return i(a,{themeId:"tool",children:[e(d,{backend:"rbac",invalidLicenseMessage:"Your existing policy will continue to apply, but you will be unable to make any changes until you enter a valid license."}),e(l,{title:"Role Based Access Control"}),e(c,{children:e(s,{maxWidth:"lg",children:i(n,{container:!0,spacing:4,children:[i(n,{item:!0,xs:12,children:[r&&e(m,{pages:r}),t]}),o]})})})]})}export{p as PageWrapper};
2
2
  //# sourceMappingURL=PageWrapper.esm.js.map