@thunderid/react 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ThunderIDReactClient.d.ts.map +1 -1
- package/dist/ThunderIDReactClient.js +6 -2
- package/dist/ThunderIDReactClient.js.map +1 -1
- package/dist/api/account/getAccessibleOrganizationUnits.d.ts +27 -0
- package/dist/api/account/getAccessibleOrganizationUnits.d.ts.map +1 -0
- package/dist/api/account/getAccessibleOrganizationUnits.js +24 -0
- package/dist/api/account/getAccessibleOrganizationUnits.js.map +1 -0
- package/dist/cjs/ThunderIDReactClient.cjs +6 -2
- package/dist/cjs/ThunderIDReactClient.cjs.map +1 -1
- package/dist/cjs/api/account/getAccessibleOrganizationUnits.cjs +26 -0
- package/dist/cjs/api/account/getAccessibleOrganizationUnits.cjs.map +1 -0
- package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.cjs +214 -0
- package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.cjs.map +1 -0
- package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.cjs +184 -0
- package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.cjs.map +1 -0
- package/dist/cjs/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.cjs +139 -0
- package/dist/cjs/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.cjs.map +1 -0
- package/dist/cjs/components/auth/SignIn/SignIn.cjs +23 -20
- package/dist/cjs/components/auth/SignIn/SignIn.cjs.map +1 -1
- package/dist/cjs/components/auth/SignUp/BaseSignUp.cjs +13 -9
- package/dist/cjs/components/auth/SignUp/BaseSignUp.cjs.map +1 -1
- package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs +2 -2
- package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs.map +1 -1
- package/dist/cjs/components/common/LanguageSwitcher/BaseLanguageSwitcher.cjs +1 -1
- package/dist/cjs/components/{admin → management}/AgentCreate/AgentCreate.cjs +8 -7
- package/dist/cjs/components/management/AgentCreate/AgentCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/AgentCreate/BaseAgentCreate.cjs +1 -1
- package/dist/cjs/components/management/AgentCreate/BaseAgentCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/AgentDetails/AgentDetails.cjs +1 -1
- package/dist/cjs/components/management/AgentDetails/AgentDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/AgentDetails/BaseAgentDetails.cjs +1 -1
- package/dist/cjs/components/management/AgentDetails/BaseAgentDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/AgentList/AgentList.cjs +11 -6
- package/dist/cjs/components/management/AgentList/AgentList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/AgentList/BaseAgentList.cjs +1 -1
- package/dist/cjs/components/management/AgentList/BaseAgentList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/ApplicationCreate/ApplicationCreate.cjs +10 -5
- package/dist/cjs/components/management/ApplicationCreate/ApplicationCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/ApplicationCreate/BaseApplicationCreate.cjs +1 -1
- package/dist/cjs/components/management/ApplicationCreate/BaseApplicationCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/ApplicationDetails/ApplicationDetails.cjs +1 -1
- package/dist/cjs/components/management/ApplicationDetails/ApplicationDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/ApplicationDetails/BaseApplicationDetails.cjs +1 -1
- package/dist/cjs/components/management/ApplicationDetails/BaseApplicationDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/ApplicationList/ApplicationList.cjs +9 -4
- package/dist/cjs/components/management/ApplicationList/ApplicationList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/ApplicationList/BaseApplicationList.cjs +1 -1
- package/dist/cjs/components/management/ApplicationList/BaseApplicationList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/GroupCreate/BaseGroupCreate.cjs +1 -1
- package/dist/cjs/components/management/GroupCreate/BaseGroupCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/GroupCreate/GroupCreate.cjs +1 -1
- package/dist/cjs/components/management/GroupCreate/GroupCreate.cjs.map +1 -0
- package/dist/cjs/components/management/GroupDetails/BaseGroupDetails.cjs +86 -0
- package/dist/cjs/components/management/GroupDetails/BaseGroupDetails.cjs.map +1 -0
- package/dist/cjs/components/management/GroupDetails/GroupDetails.cjs +60 -0
- package/dist/cjs/components/management/GroupDetails/GroupDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/GroupList/BaseGroupList.cjs +1 -1
- package/dist/cjs/components/management/GroupList/BaseGroupList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/GroupList/GroupList.cjs +1 -1
- package/dist/cjs/components/management/GroupList/GroupList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/GroupMembers/BaseGroupMembers.cjs +1 -1
- package/dist/cjs/components/management/GroupMembers/BaseGroupMembers.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/GroupMembers/GroupMembers.cjs +1 -1
- package/dist/cjs/components/management/GroupMembers/GroupMembers.cjs.map +1 -0
- package/dist/cjs/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.cjs +140 -0
- package/dist/cjs/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.cjs.map +1 -0
- package/dist/cjs/components/management/OrganizationUnitCreate/OrganizationUnitCreate.cjs +83 -0
- package/dist/cjs/components/management/OrganizationUnitCreate/OrganizationUnitCreate.cjs.map +1 -0
- package/dist/cjs/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.cjs +276 -0
- package/dist/cjs/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.cjs.map +1 -0
- package/dist/cjs/components/management/OrganizationUnitDetails/OrganizationUnitDetails.cjs +142 -0
- package/dist/cjs/components/management/OrganizationUnitDetails/OrganizationUnitDetails.cjs.map +1 -0
- package/dist/cjs/components/management/OrganizationUnitList/BaseOrganizationUnitList.cjs +78 -0
- package/dist/cjs/components/management/OrganizationUnitList/BaseOrganizationUnitList.cjs.map +1 -0
- package/dist/cjs/components/management/OrganizationUnitList/OrganizationUnitList.cjs +69 -0
- package/dist/cjs/components/management/OrganizationUnitList/OrganizationUnitList.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectCreate/BaseProjectCreate.cjs +116 -0
- package/dist/cjs/components/management/ProjectCreate/BaseProjectCreate.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectCreate/ProjectCreate.cjs +43 -0
- package/dist/cjs/components/management/ProjectCreate/ProjectCreate.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectDetails/BaseProjectDetails.cjs +172 -0
- package/dist/cjs/components/management/ProjectDetails/BaseProjectDetails.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectDetails/ProjectDetails.cjs +68 -0
- package/dist/cjs/components/management/ProjectDetails/ProjectDetails.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectList/BaseProjectList.cjs +78 -0
- package/dist/cjs/components/management/ProjectList/BaseProjectList.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectList/ProjectList.cjs +51 -0
- package/dist/cjs/components/management/ProjectList/ProjectList.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectSwitcher/BaseProjectSwitcher.cjs +58 -0
- package/dist/cjs/components/management/ProjectSwitcher/BaseProjectSwitcher.cjs.map +1 -0
- package/dist/cjs/components/management/ProjectSwitcher/ProjectSwitcher.cjs +72 -0
- package/dist/cjs/components/management/ProjectSwitcher/ProjectSwitcher.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/RoleAssignments/BaseRoleAssignments.cjs +1 -1
- package/dist/cjs/components/management/RoleAssignments/BaseRoleAssignments.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/RoleAssignments/RoleAssignments.cjs +1 -1
- package/dist/cjs/components/management/RoleAssignments/RoleAssignments.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/RoleCreate/BaseRoleCreate.cjs +1 -1
- package/dist/cjs/components/management/RoleCreate/BaseRoleCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/RoleCreate/RoleCreate.cjs +1 -1
- package/dist/cjs/components/management/RoleCreate/RoleCreate.cjs.map +1 -0
- package/dist/cjs/components/management/RoleDetails/BaseRoleDetails.cjs +87 -0
- package/dist/cjs/components/management/RoleDetails/BaseRoleDetails.cjs.map +1 -0
- package/dist/cjs/components/management/RoleDetails/RoleDetails.cjs +68 -0
- package/dist/cjs/components/management/RoleDetails/RoleDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/RoleList/BaseRoleList.cjs +1 -1
- package/dist/cjs/components/management/RoleList/BaseRoleList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/RoleList/RoleList.cjs +1 -1
- package/dist/cjs/components/management/RoleList/RoleList.cjs.map +1 -0
- package/dist/cjs/components/management/RolePermissions/BaseRolePermissions.cjs +181 -0
- package/dist/cjs/components/management/RolePermissions/BaseRolePermissions.cjs.map +1 -0
- package/dist/cjs/components/management/RolePermissions/RolePermissions.cjs +112 -0
- package/dist/cjs/components/management/RolePermissions/RolePermissions.cjs.map +1 -0
- package/dist/cjs/components/management/SharingPolicies/BaseSharingPolicies.cjs +308 -0
- package/dist/cjs/components/management/SharingPolicies/BaseSharingPolicies.cjs.map +1 -0
- package/dist/cjs/components/management/SharingPolicies/SharingPolicies.cjs +126 -0
- package/dist/cjs/components/management/SharingPolicies/SharingPolicies.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserCreate/BaseUserCreate.cjs +1 -1
- package/dist/cjs/components/management/UserCreate/BaseUserCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserCreate/UserCreate.cjs +1 -1
- package/dist/cjs/components/management/UserCreate/UserCreate.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserCreate/userCreateFields.cjs +1 -1
- package/dist/cjs/components/management/UserCreate/userCreateFields.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserDetails/BaseUserDetails.cjs +1 -1
- package/dist/cjs/components/management/UserDetails/BaseUserDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserDetails/UserDetails.cjs +1 -1
- package/dist/cjs/components/management/UserDetails/UserDetails.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserList/BaseUserList.cjs +1 -1
- package/dist/cjs/components/management/UserList/BaseUserList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/UserList/UserList.cjs +1 -1
- package/dist/cjs/components/management/UserList/UserList.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/AccountLifecycleParts.cjs +1 -1
- package/dist/cjs/components/management/shared/AccountLifecycleParts.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/AdminParts.cjs +1 -1
- package/dist/cjs/components/management/shared/AdminParts.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/AdminParts.styles.cjs +1 -1
- package/dist/cjs/components/management/shared/AdminParts.styles.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/AdminSearch.cjs +1 -1
- package/dist/cjs/components/management/shared/AdminSearch.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/AdminSection.cjs +1 -1
- package/dist/cjs/components/management/shared/AdminSection.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/AdminSection.styles.cjs +1 -1
- package/dist/cjs/components/management/shared/AdminSection.styles.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/ApplicationFormFields.cjs +1 -1
- package/dist/cjs/components/management/shared/ApplicationFormFields.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/ClientSecretNotice.cjs +1 -1
- package/dist/cjs/components/management/shared/ClientSecretNotice.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/IdentityPicker.cjs +1 -1
- package/dist/cjs/components/management/shared/IdentityPicker.cjs.map +1 -0
- package/dist/cjs/components/management/shared/formatTimestamp.cjs +18 -0
- package/dist/cjs/components/management/shared/formatTimestamp.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/useAdminPartStyles.cjs +1 -1
- package/dist/cjs/components/management/shared/useAdminPartStyles.cjs.map +1 -0
- package/dist/cjs/components/{admin → management}/shared/useDefaultOuId.cjs +1 -1
- package/dist/cjs/components/management/shared/useDefaultOuId.cjs.map +1 -0
- package/dist/cjs/components/management/shared/useProjectPlacement.cjs +23 -0
- package/dist/cjs/components/management/shared/useProjectPlacement.cjs.map +1 -0
- package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs +5 -0
- package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs.map +1 -1
- package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +27 -1
- package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
- package/dist/cjs/contexts/ThunderID/useCurrentProjectState.cjs +33 -0
- package/dist/cjs/contexts/ThunderID/useCurrentProjectState.cjs.map +1 -0
- package/dist/cjs/hooks/management/useManagementEndpoint.cjs.map +1 -1
- package/dist/cjs/index.cjs +377 -33
- package/dist/cjs/utils/flowTransformer.cjs +9 -0
- package/dist/cjs/utils/flowTransformer.cjs.map +1 -1
- package/dist/cjs/utils/getOrganizationUnitSwitchErrorKey.cjs +24 -0
- package/dist/cjs/utils/getOrganizationUnitSwitchErrorKey.cjs.map +1 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.d.ts +85 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.d.ts.map +1 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.js +209 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.js.map +1 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.d.ts +11 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.d.ts.map +1 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.js +184 -0
- package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.js.map +1 -0
- package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.d.ts +54 -0
- package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.d.ts.map +1 -0
- package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.js +135 -0
- package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.js.map +1 -0
- package/dist/components/auth/SignIn/SignIn.d.ts +5 -0
- package/dist/components/auth/SignIn/SignIn.d.ts.map +1 -1
- package/dist/components/auth/SignIn/SignIn.js +25 -22
- package/dist/components/auth/SignIn/SignIn.js.map +1 -1
- package/dist/components/auth/SignUp/BaseSignUp.d.ts.map +1 -1
- package/dist/components/auth/SignUp/BaseSignUp.js +14 -10
- package/dist/components/auth/SignUp/BaseSignUp.js.map +1 -1
- package/dist/components/auth/flow/AuthOptionFactory.js +2 -2
- package/dist/components/auth/flow/AuthOptionFactory.js.map +1 -1
- package/dist/components/common/LanguageSwitcher/BaseLanguageSwitcher.js +1 -1
- package/dist/components/{admin → management}/AgentCreate/AgentCreate.d.ts +2 -1
- package/dist/components/management/AgentCreate/AgentCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/AgentCreate/AgentCreate.js +8 -7
- package/dist/components/management/AgentCreate/AgentCreate.js.map +1 -0
- package/dist/components/management/AgentCreate/BaseAgentCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/AgentCreate/BaseAgentCreate.js +1 -1
- package/dist/components/management/AgentCreate/BaseAgentCreate.js.map +1 -0
- package/dist/components/management/AgentDetails/AgentDetails.d.ts.map +1 -0
- package/dist/components/{admin → management}/AgentDetails/AgentDetails.js +1 -1
- package/dist/components/management/AgentDetails/AgentDetails.js.map +1 -0
- package/dist/components/management/AgentDetails/BaseAgentDetails.d.ts.map +1 -0
- package/dist/components/{admin → management}/AgentDetails/BaseAgentDetails.js +1 -1
- package/dist/components/management/AgentDetails/BaseAgentDetails.js.map +1 -0
- package/dist/components/{admin → management}/AgentList/AgentList.d.ts +7 -1
- package/dist/components/management/AgentList/AgentList.d.ts.map +1 -0
- package/dist/components/{admin → management}/AgentList/AgentList.js +11 -6
- package/dist/components/management/AgentList/AgentList.js.map +1 -0
- package/dist/components/management/AgentList/BaseAgentList.d.ts.map +1 -0
- package/dist/components/{admin → management}/AgentList/BaseAgentList.js +1 -1
- package/dist/components/management/AgentList/BaseAgentList.js.map +1 -0
- package/dist/components/{admin → management}/ApplicationCreate/ApplicationCreate.d.ts +2 -1
- package/dist/components/management/ApplicationCreate/ApplicationCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/ApplicationCreate/ApplicationCreate.js +10 -5
- package/dist/components/management/ApplicationCreate/ApplicationCreate.js.map +1 -0
- package/dist/components/management/ApplicationCreate/BaseApplicationCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/ApplicationCreate/BaseApplicationCreate.js +1 -1
- package/dist/components/management/ApplicationCreate/BaseApplicationCreate.js.map +1 -0
- package/dist/components/management/ApplicationDetails/ApplicationDetails.d.ts.map +1 -0
- package/dist/components/{admin → management}/ApplicationDetails/ApplicationDetails.js +1 -1
- package/dist/components/management/ApplicationDetails/ApplicationDetails.js.map +1 -0
- package/dist/components/management/ApplicationDetails/BaseApplicationDetails.d.ts.map +1 -0
- package/dist/components/{admin → management}/ApplicationDetails/BaseApplicationDetails.js +1 -1
- package/dist/components/management/ApplicationDetails/BaseApplicationDetails.js.map +1 -0
- package/dist/components/{admin → management}/ApplicationList/ApplicationList.d.ts +7 -1
- package/dist/components/management/ApplicationList/ApplicationList.d.ts.map +1 -0
- package/dist/components/{admin → management}/ApplicationList/ApplicationList.js +9 -4
- package/dist/components/management/ApplicationList/ApplicationList.js.map +1 -0
- package/dist/components/management/ApplicationList/BaseApplicationList.d.ts.map +1 -0
- package/dist/components/{admin → management}/ApplicationList/BaseApplicationList.js +1 -1
- package/dist/components/management/ApplicationList/BaseApplicationList.js.map +1 -0
- package/dist/components/management/GroupCreate/BaseGroupCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/GroupCreate/BaseGroupCreate.js +1 -1
- package/dist/components/management/GroupCreate/BaseGroupCreate.js.map +1 -0
- package/dist/components/management/GroupCreate/GroupCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/GroupCreate/GroupCreate.js +1 -1
- package/dist/components/management/GroupCreate/GroupCreate.js.map +1 -0
- package/dist/components/management/GroupDetails/BaseGroupDetails.d.ts +47 -0
- package/dist/components/management/GroupDetails/BaseGroupDetails.d.ts.map +1 -0
- package/dist/components/management/GroupDetails/BaseGroupDetails.js +84 -0
- package/dist/components/management/GroupDetails/BaseGroupDetails.js.map +1 -0
- package/dist/components/management/GroupDetails/GroupDetails.d.ts +37 -0
- package/dist/components/management/GroupDetails/GroupDetails.d.ts.map +1 -0
- package/dist/components/management/GroupDetails/GroupDetails.js +57 -0
- package/dist/components/management/GroupDetails/GroupDetails.js.map +1 -0
- package/dist/components/management/GroupList/BaseGroupList.d.ts.map +1 -0
- package/dist/components/{admin → management}/GroupList/BaseGroupList.js +1 -1
- package/dist/components/management/GroupList/BaseGroupList.js.map +1 -0
- package/dist/components/management/GroupList/GroupList.d.ts.map +1 -0
- package/dist/components/{admin → management}/GroupList/GroupList.js +1 -1
- package/dist/components/management/GroupList/GroupList.js.map +1 -0
- package/dist/components/management/GroupMembers/BaseGroupMembers.d.ts.map +1 -0
- package/dist/components/{admin → management}/GroupMembers/BaseGroupMembers.js +1 -1
- package/dist/components/management/GroupMembers/BaseGroupMembers.js.map +1 -0
- package/dist/components/management/GroupMembers/GroupMembers.d.ts.map +1 -0
- package/dist/components/{admin → management}/GroupMembers/GroupMembers.js +1 -1
- package/dist/components/management/GroupMembers/GroupMembers.js.map +1 -0
- package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.d.ts +85 -0
- package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.d.ts.map +1 -0
- package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.js +137 -0
- package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.js.map +1 -0
- package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.d.ts +21 -0
- package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.d.ts.map +1 -0
- package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.js +79 -0
- package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.js.map +1 -0
- package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.d.ts +105 -0
- package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.d.ts.map +1 -0
- package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.js +273 -0
- package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.js.map +1 -0
- package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.d.ts +42 -0
- package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.d.ts.map +1 -0
- package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.js +139 -0
- package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.js.map +1 -0
- package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.d.ts +54 -0
- package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.d.ts.map +1 -0
- package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.js +76 -0
- package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.js.map +1 -0
- package/dist/components/management/OrganizationUnitList/OrganizationUnitList.d.ts +19 -0
- package/dist/components/management/OrganizationUnitList/OrganizationUnitList.d.ts.map +1 -0
- package/dist/components/management/OrganizationUnitList/OrganizationUnitList.js +65 -0
- package/dist/components/management/OrganizationUnitList/OrganizationUnitList.js.map +1 -0
- package/dist/components/management/ProjectCreate/BaseProjectCreate.d.ts +60 -0
- package/dist/components/management/ProjectCreate/BaseProjectCreate.d.ts.map +1 -0
- package/dist/components/management/ProjectCreate/BaseProjectCreate.js +113 -0
- package/dist/components/management/ProjectCreate/BaseProjectCreate.js.map +1 -0
- package/dist/components/management/ProjectCreate/ProjectCreate.d.ts +20 -0
- package/dist/components/management/ProjectCreate/ProjectCreate.d.ts.map +1 -0
- package/dist/components/management/ProjectCreate/ProjectCreate.js +40 -0
- package/dist/components/management/ProjectCreate/ProjectCreate.js.map +1 -0
- package/dist/components/management/ProjectDetails/BaseProjectDetails.d.ts +60 -0
- package/dist/components/management/ProjectDetails/BaseProjectDetails.d.ts.map +1 -0
- package/dist/components/management/ProjectDetails/BaseProjectDetails.js +169 -0
- package/dist/components/management/ProjectDetails/BaseProjectDetails.js.map +1 -0
- package/dist/components/management/ProjectDetails/ProjectDetails.d.ts +36 -0
- package/dist/components/management/ProjectDetails/ProjectDetails.d.ts.map +1 -0
- package/dist/components/management/ProjectDetails/ProjectDetails.js +65 -0
- package/dist/components/management/ProjectDetails/ProjectDetails.js.map +1 -0
- package/dist/components/management/ProjectList/BaseProjectList.d.ts +53 -0
- package/dist/components/management/ProjectList/BaseProjectList.d.ts.map +1 -0
- package/dist/components/management/ProjectList/BaseProjectList.js +76 -0
- package/dist/components/management/ProjectList/BaseProjectList.js.map +1 -0
- package/dist/components/management/ProjectList/ProjectList.d.ts +14 -0
- package/dist/components/management/ProjectList/ProjectList.d.ts.map +1 -0
- package/dist/components/management/ProjectList/ProjectList.js +47 -0
- package/dist/components/management/ProjectList/ProjectList.js.map +1 -0
- package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.d.ts +69 -0
- package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.d.ts.map +1 -0
- package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.js +55 -0
- package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.js.map +1 -0
- package/dist/components/management/ProjectSwitcher/ProjectSwitcher.d.ts +25 -0
- package/dist/components/management/ProjectSwitcher/ProjectSwitcher.d.ts.map +1 -0
- package/dist/components/management/ProjectSwitcher/ProjectSwitcher.js +68 -0
- package/dist/components/management/ProjectSwitcher/ProjectSwitcher.js.map +1 -0
- package/dist/components/management/RoleAssignments/BaseRoleAssignments.d.ts.map +1 -0
- package/dist/components/{admin → management}/RoleAssignments/BaseRoleAssignments.js +1 -1
- package/dist/components/management/RoleAssignments/BaseRoleAssignments.js.map +1 -0
- package/dist/components/management/RoleAssignments/RoleAssignments.d.ts.map +1 -0
- package/dist/components/{admin → management}/RoleAssignments/RoleAssignments.js +1 -1
- package/dist/components/management/RoleAssignments/RoleAssignments.js.map +1 -0
- package/dist/components/management/RoleCreate/BaseRoleCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/RoleCreate/BaseRoleCreate.js +1 -1
- package/dist/components/management/RoleCreate/BaseRoleCreate.js.map +1 -0
- package/dist/components/management/RoleCreate/RoleCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/RoleCreate/RoleCreate.js +1 -1
- package/dist/components/management/RoleCreate/RoleCreate.js.map +1 -0
- package/dist/components/management/RoleDetails/BaseRoleDetails.d.ts +51 -0
- package/dist/components/management/RoleDetails/BaseRoleDetails.d.ts.map +1 -0
- package/dist/components/management/RoleDetails/BaseRoleDetails.js +85 -0
- package/dist/components/management/RoleDetails/BaseRoleDetails.js.map +1 -0
- package/dist/components/management/RoleDetails/RoleDetails.d.ts +39 -0
- package/dist/components/management/RoleDetails/RoleDetails.d.ts.map +1 -0
- package/dist/components/management/RoleDetails/RoleDetails.js +65 -0
- package/dist/components/management/RoleDetails/RoleDetails.js.map +1 -0
- package/dist/components/management/RoleList/BaseRoleList.d.ts.map +1 -0
- package/dist/components/{admin → management}/RoleList/BaseRoleList.js +1 -1
- package/dist/components/management/RoleList/BaseRoleList.js.map +1 -0
- package/dist/components/management/RoleList/RoleList.d.ts.map +1 -0
- package/dist/components/{admin → management}/RoleList/RoleList.js +1 -1
- package/dist/components/management/RoleList/RoleList.js.map +1 -0
- package/dist/components/management/RolePermissions/BaseRolePermissions.d.ts +104 -0
- package/dist/components/management/RolePermissions/BaseRolePermissions.d.ts.map +1 -0
- package/dist/components/management/RolePermissions/BaseRolePermissions.js +178 -0
- package/dist/components/management/RolePermissions/BaseRolePermissions.js.map +1 -0
- package/dist/components/management/RolePermissions/RolePermissions.d.ts +29 -0
- package/dist/components/management/RolePermissions/RolePermissions.d.ts.map +1 -0
- package/dist/components/management/RolePermissions/RolePermissions.js +108 -0
- package/dist/components/management/RolePermissions/RolePermissions.js.map +1 -0
- package/dist/components/management/SharingPolicies/BaseSharingPolicies.d.ts +124 -0
- package/dist/components/management/SharingPolicies/BaseSharingPolicies.d.ts.map +1 -0
- package/dist/components/management/SharingPolicies/BaseSharingPolicies.js +304 -0
- package/dist/components/management/SharingPolicies/BaseSharingPolicies.js.map +1 -0
- package/dist/components/management/SharingPolicies/SharingPolicies.d.ts +36 -0
- package/dist/components/management/SharingPolicies/SharingPolicies.d.ts.map +1 -0
- package/dist/components/management/SharingPolicies/SharingPolicies.js +122 -0
- package/dist/components/management/SharingPolicies/SharingPolicies.js.map +1 -0
- package/dist/components/management/UserCreate/BaseUserCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserCreate/BaseUserCreate.js +1 -1
- package/dist/components/management/UserCreate/BaseUserCreate.js.map +1 -0
- package/dist/components/management/UserCreate/UserCreate.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserCreate/UserCreate.js +1 -1
- package/dist/components/management/UserCreate/UserCreate.js.map +1 -0
- package/dist/components/management/UserCreate/userCreateFields.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserCreate/userCreateFields.js +1 -1
- package/dist/components/management/UserCreate/userCreateFields.js.map +1 -0
- package/dist/components/management/UserDetails/BaseUserDetails.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserDetails/BaseUserDetails.js +1 -1
- package/dist/components/management/UserDetails/BaseUserDetails.js.map +1 -0
- package/dist/components/management/UserDetails/UserDetails.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserDetails/UserDetails.js +1 -1
- package/dist/components/management/UserDetails/UserDetails.js.map +1 -0
- package/dist/components/management/UserList/BaseUserList.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserList/BaseUserList.js +1 -1
- package/dist/components/management/UserList/BaseUserList.js.map +1 -0
- package/dist/components/management/UserList/UserList.d.ts.map +1 -0
- package/dist/components/{admin → management}/UserList/UserList.js +1 -1
- package/dist/components/management/UserList/UserList.js.map +1 -0
- package/dist/components/management/shared/AccountLifecycleParts.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/AccountLifecycleParts.js +1 -1
- package/dist/components/management/shared/AccountLifecycleParts.js.map +1 -0
- package/dist/components/management/shared/AdminListRenderProps.d.ts.map +1 -0
- package/dist/components/management/shared/AdminParts.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/AdminParts.js +1 -1
- package/dist/components/management/shared/AdminParts.js.map +1 -0
- package/dist/components/management/shared/AdminParts.styles.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/AdminParts.styles.js +1 -1
- package/dist/components/management/shared/AdminParts.styles.js.map +1 -0
- package/dist/components/management/shared/AdminSearch.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/AdminSearch.js +1 -1
- package/dist/components/management/shared/AdminSearch.js.map +1 -0
- package/dist/components/management/shared/AdminSection.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/AdminSection.js +1 -1
- package/dist/components/management/shared/AdminSection.js.map +1 -0
- package/dist/components/management/shared/AdminSection.styles.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/AdminSection.styles.js +1 -1
- package/dist/components/management/shared/AdminSection.styles.js.map +1 -0
- package/dist/components/management/shared/ApplicationFormFields.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/ApplicationFormFields.js +1 -1
- package/dist/components/management/shared/ApplicationFormFields.js.map +1 -0
- package/dist/components/management/shared/ClientSecretNotice.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/ClientSecretNotice.js +1 -1
- package/dist/components/management/shared/ClientSecretNotice.js.map +1 -0
- package/dist/components/management/shared/IdentityPicker.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/IdentityPicker.js +1 -1
- package/dist/components/management/shared/IdentityPicker.js.map +1 -0
- package/dist/components/management/shared/formatTimestamp.d.ts +9 -0
- package/dist/components/management/shared/formatTimestamp.d.ts.map +1 -0
- package/dist/components/management/shared/formatTimestamp.js +17 -0
- package/dist/components/management/shared/formatTimestamp.js.map +1 -0
- package/dist/components/management/shared/useAdminPartStyles.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/useAdminPartStyles.js +1 -1
- package/dist/components/management/shared/useAdminPartStyles.js.map +1 -0
- package/dist/components/management/shared/useDefaultOuId.d.ts.map +1 -0
- package/dist/components/{admin → management}/shared/useDefaultOuId.js +1 -1
- package/dist/components/management/shared/useDefaultOuId.js.map +1 -0
- package/dist/components/management/shared/useProjectPlacement.d.ts +26 -0
- package/dist/components/management/shared/useProjectPlacement.d.ts.map +1 -0
- package/dist/components/management/shared/useProjectPlacement.js +23 -0
- package/dist/components/management/shared/useProjectPlacement.js.map +1 -0
- package/dist/contexts/ThunderID/ThunderIDContext.d.ts +27 -1
- package/dist/contexts/ThunderID/ThunderIDContext.d.ts.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDContext.js +5 -0
- package/dist/contexts/ThunderID/ThunderIDContext.js.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDProvider.js +28 -2
- package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
- package/dist/contexts/ThunderID/useCurrentProjectState.d.ts +26 -0
- package/dist/contexts/ThunderID/useCurrentProjectState.d.ts.map +1 -0
- package/dist/contexts/ThunderID/useCurrentProjectState.js +30 -0
- package/dist/contexts/ThunderID/useCurrentProjectState.js.map +1 -0
- package/dist/hooks/management/useManagementEndpoint.d.ts +1 -1
- package/dist/hooks/management/useManagementEndpoint.d.ts.map +1 -1
- package/dist/hooks/management/useManagementEndpoint.js.map +1 -1
- package/dist/index.d.ts +120 -69
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -34
- package/dist/utils/flowTransformer.d.ts +7 -0
- package/dist/utils/flowTransformer.d.ts.map +1 -1
- package/dist/utils/flowTransformer.js +9 -1
- package/dist/utils/flowTransformer.js.map +1 -1
- package/dist/utils/getOrganizationUnitSwitchErrorKey.d.ts +11 -0
- package/dist/utils/getOrganizationUnitSwitchErrorKey.d.ts.map +1 -0
- package/dist/utils/getOrganizationUnitSwitchErrorKey.js +22 -0
- package/dist/utils/getOrganizationUnitSwitchErrorKey.js.map +1 -0
- package/package.json +2 -2
- package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/AgentCreate/BaseAgentCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs.map +0 -1
- package/dist/cjs/components/admin/AgentDetails/BaseAgentDetails.cjs.map +0 -1
- package/dist/cjs/components/admin/AgentList/AgentList.cjs.map +0 -1
- package/dist/cjs/components/admin/AgentList/BaseAgentList.cjs.map +0 -1
- package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs.map +0 -1
- package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs.map +0 -1
- package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs.map +0 -1
- package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs.map +0 -1
- package/dist/cjs/components/admin/GroupCreate/BaseGroupCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/GroupList/BaseGroupList.cjs.map +0 -1
- package/dist/cjs/components/admin/GroupList/GroupList.cjs.map +0 -1
- package/dist/cjs/components/admin/GroupMembers/BaseGroupMembers.cjs.map +0 -1
- package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs.map +0 -1
- package/dist/cjs/components/admin/RoleAssignments/BaseRoleAssignments.cjs.map +0 -1
- package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs.map +0 -1
- package/dist/cjs/components/admin/RoleCreate/BaseRoleCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/RoleList/BaseRoleList.cjs.map +0 -1
- package/dist/cjs/components/admin/RoleList/RoleList.cjs.map +0 -1
- package/dist/cjs/components/admin/RolePermissions/BaseRolePermissions.cjs +0 -69
- package/dist/cjs/components/admin/RolePermissions/BaseRolePermissions.cjs.map +0 -1
- package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs +0 -40
- package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs.map +0 -1
- package/dist/cjs/components/admin/UserCreate/BaseUserCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/UserCreate/UserCreate.cjs.map +0 -1
- package/dist/cjs/components/admin/UserCreate/userCreateFields.cjs.map +0 -1
- package/dist/cjs/components/admin/UserDetails/BaseUserDetails.cjs.map +0 -1
- package/dist/cjs/components/admin/UserDetails/UserDetails.cjs.map +0 -1
- package/dist/cjs/components/admin/UserList/BaseUserList.cjs.map +0 -1
- package/dist/cjs/components/admin/UserList/UserList.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/AccountLifecycleParts.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/AdminParts.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/AdminParts.styles.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/AdminSearch.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/AdminSection.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/AdminSection.styles.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/IdentityPicker.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/useAdminPartStyles.cjs.map +0 -1
- package/dist/cjs/components/admin/shared/useDefaultOuId.cjs.map +0 -1
- package/dist/components/admin/AgentCreate/AgentCreate.d.ts.map +0 -1
- package/dist/components/admin/AgentCreate/AgentCreate.js.map +0 -1
- package/dist/components/admin/AgentCreate/BaseAgentCreate.d.ts.map +0 -1
- package/dist/components/admin/AgentCreate/BaseAgentCreate.js.map +0 -1
- package/dist/components/admin/AgentDetails/AgentDetails.d.ts.map +0 -1
- package/dist/components/admin/AgentDetails/AgentDetails.js.map +0 -1
- package/dist/components/admin/AgentDetails/BaseAgentDetails.d.ts.map +0 -1
- package/dist/components/admin/AgentDetails/BaseAgentDetails.js.map +0 -1
- package/dist/components/admin/AgentList/AgentList.d.ts.map +0 -1
- package/dist/components/admin/AgentList/AgentList.js.map +0 -1
- package/dist/components/admin/AgentList/BaseAgentList.d.ts.map +0 -1
- package/dist/components/admin/AgentList/BaseAgentList.js.map +0 -1
- package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts.map +0 -1
- package/dist/components/admin/ApplicationCreate/ApplicationCreate.js.map +0 -1
- package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts.map +0 -1
- package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js.map +0 -1
- package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts.map +0 -1
- package/dist/components/admin/ApplicationDetails/ApplicationDetails.js.map +0 -1
- package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts.map +0 -1
- package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js.map +0 -1
- package/dist/components/admin/ApplicationList/ApplicationList.d.ts.map +0 -1
- package/dist/components/admin/ApplicationList/ApplicationList.js.map +0 -1
- package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts.map +0 -1
- package/dist/components/admin/ApplicationList/BaseApplicationList.js.map +0 -1
- package/dist/components/admin/GroupCreate/BaseGroupCreate.d.ts.map +0 -1
- package/dist/components/admin/GroupCreate/BaseGroupCreate.js.map +0 -1
- package/dist/components/admin/GroupCreate/GroupCreate.d.ts.map +0 -1
- package/dist/components/admin/GroupCreate/GroupCreate.js.map +0 -1
- package/dist/components/admin/GroupList/BaseGroupList.d.ts.map +0 -1
- package/dist/components/admin/GroupList/BaseGroupList.js.map +0 -1
- package/dist/components/admin/GroupList/GroupList.d.ts.map +0 -1
- package/dist/components/admin/GroupList/GroupList.js.map +0 -1
- package/dist/components/admin/GroupMembers/BaseGroupMembers.d.ts.map +0 -1
- package/dist/components/admin/GroupMembers/BaseGroupMembers.js.map +0 -1
- package/dist/components/admin/GroupMembers/GroupMembers.d.ts.map +0 -1
- package/dist/components/admin/GroupMembers/GroupMembers.js.map +0 -1
- package/dist/components/admin/RoleAssignments/BaseRoleAssignments.d.ts.map +0 -1
- package/dist/components/admin/RoleAssignments/BaseRoleAssignments.js.map +0 -1
- package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts.map +0 -1
- package/dist/components/admin/RoleAssignments/RoleAssignments.js.map +0 -1
- package/dist/components/admin/RoleCreate/BaseRoleCreate.d.ts.map +0 -1
- package/dist/components/admin/RoleCreate/BaseRoleCreate.js.map +0 -1
- package/dist/components/admin/RoleCreate/RoleCreate.d.ts.map +0 -1
- package/dist/components/admin/RoleCreate/RoleCreate.js.map +0 -1
- package/dist/components/admin/RoleList/BaseRoleList.d.ts.map +0 -1
- package/dist/components/admin/RoleList/BaseRoleList.js.map +0 -1
- package/dist/components/admin/RoleList/RoleList.d.ts.map +0 -1
- package/dist/components/admin/RoleList/RoleList.js.map +0 -1
- package/dist/components/admin/RolePermissions/BaseRolePermissions.d.ts +0 -42
- package/dist/components/admin/RolePermissions/BaseRolePermissions.d.ts.map +0 -1
- package/dist/components/admin/RolePermissions/BaseRolePermissions.js +0 -67
- package/dist/components/admin/RolePermissions/BaseRolePermissions.js.map +0 -1
- package/dist/components/admin/RolePermissions/RolePermissions.d.ts +0 -16
- package/dist/components/admin/RolePermissions/RolePermissions.d.ts.map +0 -1
- package/dist/components/admin/RolePermissions/RolePermissions.js +0 -37
- package/dist/components/admin/RolePermissions/RolePermissions.js.map +0 -1
- package/dist/components/admin/UserCreate/BaseUserCreate.d.ts.map +0 -1
- package/dist/components/admin/UserCreate/BaseUserCreate.js.map +0 -1
- package/dist/components/admin/UserCreate/UserCreate.d.ts.map +0 -1
- package/dist/components/admin/UserCreate/UserCreate.js.map +0 -1
- package/dist/components/admin/UserCreate/userCreateFields.d.ts.map +0 -1
- package/dist/components/admin/UserCreate/userCreateFields.js.map +0 -1
- package/dist/components/admin/UserDetails/BaseUserDetails.d.ts.map +0 -1
- package/dist/components/admin/UserDetails/BaseUserDetails.js.map +0 -1
- package/dist/components/admin/UserDetails/UserDetails.d.ts.map +0 -1
- package/dist/components/admin/UserDetails/UserDetails.js.map +0 -1
- package/dist/components/admin/UserList/BaseUserList.d.ts.map +0 -1
- package/dist/components/admin/UserList/BaseUserList.js.map +0 -1
- package/dist/components/admin/UserList/UserList.d.ts.map +0 -1
- package/dist/components/admin/UserList/UserList.js.map +0 -1
- package/dist/components/admin/shared/AccountLifecycleParts.d.ts.map +0 -1
- package/dist/components/admin/shared/AccountLifecycleParts.js.map +0 -1
- package/dist/components/admin/shared/AdminListRenderProps.d.ts.map +0 -1
- package/dist/components/admin/shared/AdminParts.d.ts.map +0 -1
- package/dist/components/admin/shared/AdminParts.js.map +0 -1
- package/dist/components/admin/shared/AdminParts.styles.d.ts.map +0 -1
- package/dist/components/admin/shared/AdminParts.styles.js.map +0 -1
- package/dist/components/admin/shared/AdminSearch.d.ts.map +0 -1
- package/dist/components/admin/shared/AdminSearch.js.map +0 -1
- package/dist/components/admin/shared/AdminSection.d.ts.map +0 -1
- package/dist/components/admin/shared/AdminSection.js.map +0 -1
- package/dist/components/admin/shared/AdminSection.styles.d.ts.map +0 -1
- package/dist/components/admin/shared/AdminSection.styles.js.map +0 -1
- package/dist/components/admin/shared/ApplicationFormFields.d.ts.map +0 -1
- package/dist/components/admin/shared/ApplicationFormFields.js.map +0 -1
- package/dist/components/admin/shared/ClientSecretNotice.d.ts.map +0 -1
- package/dist/components/admin/shared/ClientSecretNotice.js.map +0 -1
- package/dist/components/admin/shared/IdentityPicker.d.ts.map +0 -1
- package/dist/components/admin/shared/IdentityPicker.js.map +0 -1
- package/dist/components/admin/shared/useAdminPartStyles.d.ts.map +0 -1
- package/dist/components/admin/shared/useAdminPartStyles.js.map +0 -1
- package/dist/components/admin/shared/useDefaultOuId.d.ts.map +0 -1
- package/dist/components/admin/shared/useDefaultOuId.js.map +0 -1
- /package/dist/components/{admin → management}/AgentCreate/BaseAgentCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/AgentDetails/AgentDetails.d.ts +0 -0
- /package/dist/components/{admin → management}/AgentDetails/BaseAgentDetails.d.ts +0 -0
- /package/dist/components/{admin → management}/AgentList/BaseAgentList.d.ts +0 -0
- /package/dist/components/{admin → management}/ApplicationCreate/BaseApplicationCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/ApplicationDetails/ApplicationDetails.d.ts +0 -0
- /package/dist/components/{admin → management}/ApplicationDetails/BaseApplicationDetails.d.ts +0 -0
- /package/dist/components/{admin → management}/ApplicationList/BaseApplicationList.d.ts +0 -0
- /package/dist/components/{admin → management}/GroupCreate/BaseGroupCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/GroupCreate/GroupCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/GroupList/BaseGroupList.d.ts +0 -0
- /package/dist/components/{admin → management}/GroupList/GroupList.d.ts +0 -0
- /package/dist/components/{admin → management}/GroupMembers/BaseGroupMembers.d.ts +0 -0
- /package/dist/components/{admin → management}/GroupMembers/GroupMembers.d.ts +0 -0
- /package/dist/components/{admin → management}/RoleAssignments/BaseRoleAssignments.d.ts +0 -0
- /package/dist/components/{admin → management}/RoleAssignments/RoleAssignments.d.ts +0 -0
- /package/dist/components/{admin → management}/RoleCreate/BaseRoleCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/RoleCreate/RoleCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/RoleList/BaseRoleList.d.ts +0 -0
- /package/dist/components/{admin → management}/RoleList/RoleList.d.ts +0 -0
- /package/dist/components/{admin → management}/UserCreate/BaseUserCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/UserCreate/UserCreate.d.ts +0 -0
- /package/dist/components/{admin → management}/UserCreate/userCreateFields.d.ts +0 -0
- /package/dist/components/{admin → management}/UserDetails/BaseUserDetails.d.ts +0 -0
- /package/dist/components/{admin → management}/UserDetails/UserDetails.d.ts +0 -0
- /package/dist/components/{admin → management}/UserList/BaseUserList.d.ts +0 -0
- /package/dist/components/{admin → management}/UserList/UserList.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AccountLifecycleParts.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AdminListRenderProps.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AdminParts.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AdminParts.styles.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AdminSearch.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AdminSection.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/AdminSection.styles.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/ApplicationFormFields.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/ClientSecretNotice.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/IdentityPicker.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/useAdminPartStyles.d.ts +0 -0
- /package/dist/components/{admin → management}/shared/useDefaultOuId.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseUserCreate.cjs","names":["BaseUserCreate: FC<BaseUserCreateProps>","DEFAULT_USER_CREATE_FIELDS","useTheme","styles: Record<string, string>","useStyles","useTranslation","type: string","isComplete: boolean","AdminSection","Alert","Select","TextField","Button"],"sources":["../../../../../src/components/management/UserCreate/BaseUserCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Preferences, SelectOption} from '@thunderid/browser';\nimport {ChangeEvent, FC, FormEvent, ReactElement, ReactNode, useState} from 'react';\nimport {DEFAULT_USER_CREATE_FIELDS, UserCreateField} from './userCreateFields';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Alert from '../../primitives/Alert/Alert';\nimport Button from '../../primitives/Button/Button';\nimport Select from '../../primitives/Select/Select';\nimport TextField from '../../primitives/TextField/TextField';\nimport AdminSection from '../shared/AdminSection';\nimport useStyles from '../shared/AdminSection.styles';\n\n/**\n * The user {@link BaseUserCreate} submits. The organization unit is added by the caller.\n */\nexport interface UserCreateSubmission {\n attributes: Record<string, string>;\n type: string;\n}\n\n/**\n * What {@link BaseUserCreate} hands its `children` render function, so the form can be built with any UI.\n */\nexport interface BaseUserCreateRenderProps {\n error: string | null;\n /**\n * The attributes to collect.\n */\n fields: UserCreateField[];\n /**\n * Sets one attribute.\n */\n handleInputChange: (name: string, value: string) => void;\n /**\n * Submits the chosen type and the non-empty attributes. Does nothing while they are not valid.\n */\n handleSubmit: () => void;\n /**\n * Chooses the user type.\n */\n handleTypeChange: (type: string) => void;\n isSubmitting: boolean;\n /**\n * Whether a type is chosen and every required attribute has a value.\n */\n isValid: boolean;\n onCancel?: () => void;\n /**\n * The chosen user type.\n */\n type: string;\n userTypes: SelectOption[];\n /**\n * The attribute values, keyed by attribute name.\n */\n values: Record<string, string>;\n}\n\nexport interface BaseUserCreateProps {\n /**\n * Renders custom UI in place of the default form. Receives the fields, the values and their\n * setters, the user types, the submit handler and the submission state.\n */\n children?: (props: BaseUserCreateRenderProps) => ReactNode;\n className?: string;\n description?: string;\n error?: string | null;\n /**\n * Attributes to collect.\n * @default username, email, given_name, family_name and password\n */\n fields?: UserCreateField[];\n isSubmitting?: boolean;\n onCancel?: () => void;\n onSubmit: (user: UserCreateSubmission) => void;\n preferences?: Preferences;\n title?: string;\n /**\n * The user types to choose from. The first one is selected by default.\n */\n userTypes: SelectOption[];\n}\n\n/**\n * A form that collects a new user's type and attributes. Holds no data of its own: pass the user\n * types and handle the submission.\n */\nconst BaseUserCreate: FC<BaseUserCreateProps> = ({\n children,\n className,\n description,\n error = null,\n fields = DEFAULT_USER_CREATE_FIELDS,\n isSubmitting = false,\n onCancel,\n onSubmit,\n preferences,\n title,\n userTypes,\n}: BaseUserCreateProps): ReactElement => {\n const {theme, colorScheme} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const {t} = useTranslation(preferences?.i18n);\n const [chosenType, setType] = useState<string>('');\n const type: string = chosenType || (userTypes[0]?.value ?? '');\n const [values, setValues] = useState<Record<string, string>>({});\n\n const isComplete: boolean =\n Boolean(type) && fields.every((field: UserCreateField) => !field.required || Boolean(values[field.name]?.trim()));\n\n const setValue = (name: string, value: string): void =>\n setValues((previous: Record<string, string>) => ({...previous, [name]: value}));\n\n const submit = (): void => {\n if (!isComplete) {\n return;\n }\n\n const attributes: Record<string, string> = Object.fromEntries(\n Object.entries(values).filter(([, value]: [string, string]) => value.trim() !== ''),\n );\n\n onSubmit({attributes, type});\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n submit();\n };\n\n if (children) {\n return (\n <div className={className}>\n {children({\n error,\n fields,\n handleInputChange: setValue,\n handleSubmit: submit,\n handleTypeChange: setType,\n isSubmitting,\n isValid: isComplete,\n onCancel,\n type,\n userTypes,\n values,\n })}\n </div>\n );\n }\n\n return (\n <AdminSection\n block=\"user-create\"\n className={className}\n title={title ?? t('admin.users.create.title')}\n description={description}\n preferences={preferences}\n >\n <form className={styles['form']} onSubmit={handleSubmit} noValidate>\n {error && (\n <Alert variant=\"error\" role=\"alert\">\n {error}\n </Alert>\n )}\n <Select\n label={t('admin.users.create.fields.type')}\n name=\"type\"\n required\n value={type}\n options={userTypes}\n onChange={(event: ChangeEvent<HTMLSelectElement>): void => setType(event.target.value)}\n />\n {fields.map((field: UserCreateField) => (\n <TextField\n key={field.name}\n name={field.name}\n type={field.type ?? 'text'}\n label={field.label ?? t(`admin.users.create.fields.${field.name}`)}\n required={field.required}\n autoComplete={field.type === 'password' ? 'new-password' : 'off'}\n value={values[field.name] ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>): void => setValue(field.name, event.target.value)}\n />\n ))}\n <div className={styles['formActions']}>\n {onCancel && (\n <Button type=\"button\" variant=\"text\" onClick={onCancel} disabled={isSubmitting}>\n {t('admin.common.actions.cancel')}\n </Button>\n )}\n <Button type=\"submit\" loading={isSubmitting} disabled={!isComplete || isSubmitting}>\n {t('admin.users.create.submit')}\n </Button>\n </div>\n </form>\n </AdminSection>\n );\n};\n\nexport default BaseUserCreate;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0FA,MAAMA,kBAA2C,EAC/C,UACA,WACA,aACA,QAAQ,MACR,SAASC,qDACT,eAAe,OACf,UACA,UACA,aACA,OACA,gBACuC;CACvC,MAAM,EAAC,OAAO,gBAAeC,0BAAU;CACvC,MAAMC,SAAiCC,oCAAU,OAAO,YAAY;CACpE,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,YAAY,+BAA4B,GAAG;CAClD,MAAMC,OAAe,eAAe,UAAU,IAAI,SAAS;CAC3D,MAAM,CAAC,QAAQ,iCAA8C,EAAE,CAAC;CAEhE,MAAMC,aACJ,QAAQ,KAAK,IAAI,OAAO,OAAO,UAA2B,CAAC,MAAM,YAAY,QAAQ,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC;CAEnH,MAAM,YAAY,MAAc,UAC9B,WAAW,cAAsC;EAAC,GAAG;GAAW,OAAO;EAAM,EAAE;CAEjF,MAAM,eAAqB;AACzB,MAAI,CAAC,WACH;AAOF,WAAS;GAAC,YAJiC,OAAO,YAChD,OAAO,QAAQ,OAAO,CAAC,QAAQ,GAAG,WAA6B,MAAM,MAAM,KAAK,GAAG,CACpF;GAEqB;GAAK,CAAC;;CAG9B,MAAM,gBAAgB,UAA4C;AAChE,QAAM,gBAAgB;AACtB,UAAQ;;AAGV,KAAI,SACF,QACE,2CAAC;EAAe;YACb,SAAS;GACR;GACA;GACA,mBAAmB;GACnB,cAAc;GACd,kBAAkB;GAClB;GACA,SAAS;GACT;GACA;GACA;GACA;GACD,CAAC;GACE;AAIV,QACE,2CAACC;EACC,OAAM;EACK;EACX,OAAO,SAAS,EAAE,2BAA2B;EAChC;EACA;YAEb,4CAAC;GAAK,WAAW,OAAO;GAAS,UAAU;GAAc;;IACtD,SACC,2CAACC;KAAM,SAAQ;KAAQ,MAAK;eACzB;MACK;IAEV,2CAACC;KACC,OAAO,EAAE,iCAAiC;KAC1C,MAAK;KACL;KACA,OAAO;KACP,SAAS;KACT,WAAW,UAAgD,QAAQ,MAAM,OAAO,MAAM;MACtF;IACD,OAAO,KAAK,UACX,2CAACC;KAEC,MAAM,MAAM;KACZ,MAAM,MAAM,QAAQ;KACpB,OAAO,MAAM,SAAS,EAAE,6BAA6B,MAAM,OAAO;KAClE,UAAU,MAAM;KAChB,cAAc,MAAM,SAAS,aAAa,iBAAiB;KAC3D,OAAO,OAAO,MAAM,SAAS;KAC7B,WAAW,UAA+C,SAAS,MAAM,MAAM,MAAM,OAAO,MAAM;OAP7F,MAAM,KAQX,CACF;IACF,4CAAC;KAAI,WAAW,OAAO;gBACpB,YACC,2CAACC;MAAO,MAAK;MAAS,SAAQ;MAAO,SAAS;MAAU,UAAU;gBAC/D,EAAE,8BAA8B;OAC1B,EAEX,2CAACA;MAAO,MAAK;MAAS,SAAS;MAAc,UAAU,CAAC,cAAc;gBACnE,EAAE,4BAA4B;OACxB;MACL;;IACD;GACM;;AAInB,6BAAe"}
|
|
@@ -13,7 +13,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
13
13
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
14
14
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
15
15
|
|
|
16
|
-
//#region src/components/
|
|
16
|
+
//#region src/components/management/UserCreate/UserCreate.tsx
|
|
17
17
|
/**
|
|
18
18
|
* Adds a user, either directly through the management API or by inviting them through the invite
|
|
19
19
|
* user flow.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserCreate.cjs","names":["UserCreate: FC<UserCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","usersEndpoint: ManagementEndpoint","useManagementEndpoint","userTypesEndpoint: ManagementEndpoint","useResourceQuery","UserQueryKeys","useResourceMutation","options: SelectOption[]","InviteUser","BaseUserCreate"],"sources":["../../../../../src/components/management/UserCreate/UserCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n CreateManagedUserRequest,\n ManagedUser,\n ManagedUserType,\n ManagedUserTypeListResponse,\n SelectOption,\n UserQueryKeys,\n createUser,\n getUserTypes,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo} from 'react';\nimport BaseUserCreate, {BaseUserCreateProps, UserCreateSubmission} from './BaseUserCreate';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\nimport InviteUser, {InviteUserProps} from '../../auth/InviteUser/InviteUser';\nimport useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type UserCreateProps = Omit<BaseUserCreateProps, 'error' | 'isSubmitting' | 'onSubmit' | 'userTypes'> & {\n /**\n * Props passed to `InviteUser` when `mode` is `invite`.\n */\n inviteProps?: InviteUserProps;\n /**\n * How the user is added.\n * - `api` creates the user directly through the management API.\n * - `invite` runs the invite user flow, which asks the person to finish setting up their account.\n * Only available where flows run.\n * @default 'api'\n */\n mode?: 'api' | 'invite';\n /**\n * Called with the created user. Not called in `invite` mode, where the flow reports progress\n * through `inviteProps.onFlowChange`.\n */\n onCreated?: (user: ManagedUser) => void;\n /**\n * Organization unit the user is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n};\n\n/**\n * Adds a user, either directly through the management API or by inviting them through the invite\n * user flow.\n *\n * @example\n * ```tsx\n * <UserCreate onCreated={(user) => navigate(`/users/${user.id}`)} />\n * <UserCreate mode=\"invite\" />\n * ```\n */\nconst UserCreate: FC<UserCreateProps> = ({\n inviteProps,\n mode = 'api',\n onCreated,\n ouId,\n preferences,\n ...rest\n}: UserCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const usersEndpoint: ManagementEndpoint = useManagementEndpoint('users');\n const userTypesEndpoint: ManagementEndpoint = useManagementEndpoint('userTypes');\n const {data: userTypes}: ResourceQueryResult<ManagedUserTypeListResponse> = useResourceQuery(\n [UserQueryKeys.USER_TYPES, {limit: 100}],\n (fetcher) => getUserTypes({...userTypesEndpoint, fetcher, limit: 100}),\n {enabled: mode === 'api'},\n );\n const {error, isLoading, mutate}: ResourceMutationResult<ManagedUser, CreateManagedUserRequest> = useResourceMutation(\n (payload: CreateManagedUserRequest, fetcher) => createUser({...usersEndpoint, fetcher, payload}),\n () => [[UserQueryKeys.USERS]],\n {onSuccess: onCreated},\n );\n\n const options: SelectOption[] = useMemo(\n () =>\n (userTypes?.types ?? []).map((userType: ManagedUserType) => ({\n label: userType.displayName ?? userType.handle,\n value: userType.handle,\n })),\n [userTypes],\n );\n\n if (mode === 'invite') {\n return <InviteUser {...inviteProps} />;\n }\n\n const handleSubmit = ({attributes, type}: UserCreateSubmission): void => {\n if (!resolvedOuId) {\n return;\n }\n\n void mutate({attributes, ouId: resolvedOuId, type});\n };\n\n return (\n <BaseUserCreate\n userTypes={options}\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.users.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default UserCreate;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAMA,cAAmC,EACvC,aACA,OAAO,OACP,WACA,MACA,YACA,GAAG,WACgC;CACnC,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,+BAAe,KAAK;CAC7D,MAAMC,gBAAoCC,sCAAsB,QAAQ;CACxE,MAAMC,oBAAwCD,sCAAsB,YAAY;CAChF,MAAM,EAAC,MAAM,cAA+DE,iCAC1E,CAACC,kCAAc,YAAY,EAAC,OAAO,KAAI,CAAC,GACvC,kDAAyB;EAAC,GAAG;EAAmB;EAAS,OAAO;EAAI,CAAC,EACtE,EAAC,SAAS,SAAS,OAAM,CAC1B;CACD,MAAM,EAAC,OAAO,WAAW,WAAyEC,qCAC/F,SAAmC,gDAAuB;EAAC,GAAG;EAAe;EAAS;EAAQ,CAAC,QAC1F,CAAC,CAACD,kCAAc,MAAM,CAAC,EAC7B,EAAC,WAAW,WAAU,CACvB;CAED,MAAME,oCAED,WAAW,SAAS,EAAE,EAAE,KAAK,cAA+B;EAC3D,OAAO,SAAS,eAAe,SAAS;EACxC,OAAO,SAAS;EACjB,EAAE,EACL,CAAC,UAAU,CACZ;AAED,KAAI,SAAS,SACX,QAAO,2CAACC,8BAAW,GAAI,cAAe;CAGxC,MAAM,gBAAgB,EAAC,YAAY,WAAsC;AACvE,MAAI,CAAC,aACH;AAGF,EAAK,OAAO;GAAC;GAAY,MAAM;GAAc;GAAK,CAAC;;AAGrD,QACE,2CAACC;EACC,WAAW;EACX,UAAU;EACV,cAAc;EACd,OACE,iEAAwC,GAAG,OAAO,2BAA2B,GAAG,EAAE,4BAA4B;EAEnG;EACb,GAAI;GACJ;;AAIN,yBAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userCreateFields.cjs","names":["DEFAULT_USER_CREATE_FIELDS: UserCreateField[]"],"sources":["../../../../../src/components/management/UserCreate/userCreateFields.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * A user attribute collected by {@link BaseUserCreate}.\n */\nexport interface UserCreateField {\n /**\n * Label shown for the field. Defaults to the translation of `admin.users.create.fields.<name>`.\n */\n label?: string;\n /**\n * Attribute name, as defined in the user type schema.\n */\n name: string;\n required?: boolean;\n type?: 'text' | 'email' | 'password' | 'tel';\n}\n\n/**\n * The attributes `UserCreate` collects when no `fields` are given.\n */\nexport const DEFAULT_USER_CREATE_FIELDS: UserCreateField[] = [\n {name: 'username', required: true},\n {name: 'email', required: true, type: 'email'},\n {name: 'given_name'},\n {name: 'family_name'},\n {name: 'password', type: 'password'},\n];\n"],"mappings":";;;;;AAsBA,MAAaA,6BAAgD;CAC3D;EAAC,MAAM;EAAY,UAAU;EAAK;CAClC;EAAC,MAAM;EAAS,UAAU;EAAM,MAAM;EAAQ;CAC9C,EAAC,MAAM,cAAa;CACpB,EAAC,MAAM,eAAc;CACrB;EAAC,MAAM;EAAY,MAAM;EAAW;CACrC"}
|
|
@@ -16,7 +16,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
16
16
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
17
17
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
18
18
|
|
|
19
|
-
//#region src/components/
|
|
19
|
+
//#region src/components/management/UserDetails/BaseUserDetails.tsx
|
|
20
20
|
const stringify = (value) => {
|
|
21
21
|
if (value === null || value === void 0) return "";
|
|
22
22
|
return typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseUserDetails.cjs","names":["BaseUserDetails: FC<BaseUserDetailsProps>","useTranslation","styles: Record<string, string>","useAdminPartStyles","isWritable: boolean","AdminSection","Spinner","Alert","displayName: string","attributes: [string, unknown][]","editableAttributes: [string, string][]","AccountLifecycleButtons","ConfirmButton","Avatar","AccessStatusBadge","Panel","Button","TextField","DetailList","ChipList"],"sources":["../../../../../src/components/management/UserDetails/BaseUserDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n AccountLifecycleAction,\n resolveManagedIdentityName,\n ManagedUser,\n MembershipGroup,\n Preferences,\n} from '@thunderid/browser';\nimport {ChangeEvent, FC, ReactElement, ReactNode, useState} from 'react';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Alert from '../../primitives/Alert/Alert';\nimport {Avatar} from '../../primitives/Avatar/Avatar';\nimport Button from '../../primitives/Button/Button';\nimport Spinner from '../../primitives/Spinner/Spinner';\nimport TextField from '../../primitives/TextField/TextField';\nimport {AccessStatusBadge, AccountLifecycleButtons} from '../shared/AccountLifecycleParts';\nimport {ChipList, ConfirmButton, DetailList, Panel} from '../shared/AdminParts';\nimport AdminSection from '../shared/AdminSection';\nimport useAdminPartStyles from '../shared/useAdminPartStyles';\n\n/**\n * What {@link BaseUserDetails} hands its `children` render function, so the user can be shown with any UI.\n */\nexport interface BaseUserDetailsRenderProps {\n /**\n * The user's attributes, without the hidden ones.\n */\n attributes: Record<string, unknown>;\n /**\n * The user's display name, or an empty string while there is no user.\n */\n displayName: string;\n error: string | null;\n groups: MembershipGroup[];\n isDeleting: boolean;\n isLoading: boolean;\n isRunningLifecycleAction: boolean;\n isUpdating: boolean;\n /**\n * The account lifecycle actions offered for the user. Empty when none is allowed.\n */\n lifecycleActions: AccountLifecycleAction[];\n /**\n * Deletes the user. Undefined when deletion is not allowed, including for read-only users.\n */\n onDelete?: () => void;\n /**\n * Runs an account lifecycle action, with the operator's note on a suspension. Undefined when none is\n * allowed.\n */\n onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;\n /**\n * Saves the given attributes. Undefined when editing is not allowed, including for read-only users.\n */\n onUpdate?: (attributes: Record<string, unknown>) => void;\n user?: ManagedUser;\n}\n\nexport interface BaseUserDetailsProps {\n /**\n * Controls rendered next to the user's name.\n */\n actions?: ReactNode;\n /**\n * Renders custom UI in place of the default view. Receives the user, their visible attributes and\n * groups, the loading and error state, and the delete and update handlers.\n */\n children?: (props: BaseUserDetailsRenderProps) => ReactNode;\n className?: string;\n error?: string | null;\n /**\n * The groups the user belongs to.\n */\n groups?: MembershipGroup[];\n /**\n * Attribute names that are never shown, such as credentials.\n * @default ['password']\n */\n hiddenAttributes?: string[];\n isDeleting?: boolean;\n isLoading?: boolean;\n isRunningLifecycleAction?: boolean;\n isUpdating?: boolean;\n /**\n * The account lifecycle actions to offer (suspend, unsuspend, unlock), shown only with\n * `onLifecycleAction`. They change only runtime state, so they apply to read-only users too.\n */\n lifecycleActions?: AccountLifecycleAction[];\n /**\n * Deletes the user. The delete action is hidden when omitted.\n */\n onDelete?: () => void;\n /**\n * Runs an account lifecycle action. Suspending and unsuspending ask for confirmation first, and a\n * suspension takes an optional operator note.\n */\n onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;\n /**\n * Saves edited attributes. Text attributes become editable only when set. Receives every\n * attribute, edited or not.\n */\n onUpdate?: (attributes: Record<string, unknown>) => void;\n preferences?: Preferences;\n user?: ManagedUser;\n}\n\nconst stringify = (value: unknown): string => {\n if (value === null || value === undefined) {\n return '';\n }\n\n return typeof value === 'object' ? JSON.stringify(value) : String(value as string | number | boolean);\n};\n\n/**\n * Shows a user's attributes, type, organization unit and groups. Holds no data of its own: pass the\n * user and handle deletion.\n */\nconst BaseUserDetails: FC<BaseUserDetailsProps> = ({\n actions,\n children,\n className,\n error = null,\n groups = [],\n hiddenAttributes = ['password'],\n isDeleting = false,\n isLoading = false,\n isRunningLifecycleAction = false,\n isUpdating = false,\n lifecycleActions = [],\n onDelete,\n onLifecycleAction,\n onUpdate,\n preferences,\n user,\n}: BaseUserDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const styles: Record<string, string> = useAdminPartStyles();\n const [draft, setDraft] = useState<Record<string, string> | null>(null);\n\n if (children) {\n const isWritable: boolean = Boolean(user) && !user?.isReadOnly;\n\n return (\n <div className={className}>\n {children({\n attributes: Object.fromEntries(\n Object.entries(user?.attributes ?? {}).filter(\n ([name]: [string, unknown]) => !hiddenAttributes.includes(name),\n ),\n ),\n displayName: user ? resolveManagedIdentityName(user) : '',\n error,\n groups,\n isDeleting,\n isLoading,\n isRunningLifecycleAction,\n isUpdating,\n lifecycleActions: onLifecycleAction && user ? lifecycleActions : [],\n onDelete: isWritable ? onDelete : undefined,\n onLifecycleAction: user ? onLifecycleAction : undefined,\n onUpdate: isWritable ? onUpdate : undefined,\n user,\n })}\n </div>\n );\n }\n\n if (isLoading && !user) {\n return (\n <AdminSection block=\"user-details\" className={className} preferences={preferences}>\n <span className={styles['muted']} role=\"status\">\n <Spinner size=\"small\" /> {t('admin.common.loading')}\n </span>\n </AdminSection>\n );\n }\n\n if (!user) {\n return (\n <AdminSection block=\"user-details\" className={className} preferences={preferences}>\n <Alert variant=\"error\" role=\"alert\">\n {error ?? t('admin.common.errors.not_found')}\n </Alert>\n </AdminSection>\n );\n }\n\n const displayName: string = resolveManagedIdentityName(user);\n const attributes: [string, unknown][] = Object.entries(user.attributes ?? {}).filter(\n ([name]: [string, unknown]) => !hiddenAttributes.includes(name),\n );\n const editableAttributes: [string, string][] = attributes.filter(\n (entry: [string, unknown]): entry is [string, string] => typeof entry[1] === 'string',\n );\n\n return (\n <AdminSection\n block=\"user-details\"\n className={className}\n title={displayName}\n description={t('admin.users.details.subtitle', {type: user.type})}\n preferences={preferences}\n actions={\n <>\n {actions}\n {onLifecycleAction && (\n <AccountLifecycleButtons\n actions={lifecycleActions}\n collectsOperatorNote\n isRunning={isRunningLifecycleAction}\n name={displayName}\n onAction={onLifecycleAction}\n />\n )}\n {onDelete && !user.isReadOnly && (\n <ConfirmButton\n confirmText={t('admin.users.details.delete.confirm', {name: displayName})}\n isLoading={isDeleting}\n onConfirm={onDelete}\n >\n {t('admin.users.details.delete.action')}\n </ConfirmButton>\n )}\n </>\n }\n >\n {error && (\n <Alert variant=\"error\" role=\"alert\">\n {error}\n </Alert>\n )}\n <div className={styles['row']}>\n <Avatar name={displayName} size={48} />\n <span className={styles['muted']}>{user.ouHandle ?? user.ouId}</span>\n <AccessStatusBadge status={user.status?.value} />\n </div>\n <Panel\n title={t('admin.users.details.attributes')}\n actions={\n onUpdate && !user.isReadOnly && !draft && editableAttributes.length > 0 ? (\n <Button\n variant=\"outline\"\n size=\"small\"\n onClick={(): void => setDraft(Object.fromEntries(editableAttributes))}\n >\n {t('admin.users.details.edit.action')}\n </Button>\n ) : undefined\n }\n >\n {draft ? (\n <form\n className={styles['row']}\n style={{alignItems: 'stretch', flexDirection: 'column'}}\n onSubmit={(event): void => {\n event.preventDefault();\n onUpdate?.({...(user.attributes ?? {}), ...draft});\n setDraft(null);\n }}\n >\n {Object.keys(draft).map((name: string) => (\n <TextField\n key={name}\n name={name}\n label={name}\n aria-label={name}\n value={draft[name]}\n onChange={(event: ChangeEvent<HTMLInputElement>): void =>\n setDraft((previous: Record<string, string> | null) => ({...previous, [name]: event.target.value}))\n }\n />\n ))}\n <div className={styles['row']} style={{justifyContent: 'flex-end'}}>\n <Button type=\"button\" variant=\"text\" disabled={isUpdating} onClick={(): void => setDraft(null)}>\n {t('admin.common.actions.cancel')}\n </Button>\n <Button type=\"submit\" loading={isUpdating} disabled={isUpdating}>\n {t('admin.users.details.edit.save')}\n </Button>\n </div>\n </form>\n ) : attributes.length > 0 ? (\n <DetailList\n items={attributes.map(([name, value]: [string, unknown]) => ({label: name, value: stringify(value)}))}\n />\n ) : (\n <span className={styles['muted']}>{t('admin.users.details.no_attributes')}</span>\n )}\n </Panel>\n <Panel title={t('admin.users.details.groups')}>\n <ChipList\n label={t('admin.users.details.groups')}\n emptyText={t('admin.users.details.no_groups')}\n items={groups.map((group: MembershipGroup) => ({id: group.id, label: group.name}))}\n />\n </Panel>\n </AdminSection>\n );\n};\n\nexport default BaseUserDetails;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA4GA,MAAM,aAAa,UAA2B;AAC5C,KAAI,UAAU,QAAQ,UAAU,OAC9B,QAAO;AAGT,QAAO,OAAO,UAAU,WAAW,KAAK,UAAU,MAAM,GAAG,OAAO,MAAmC;;;;;;AAOvG,MAAMA,mBAA6C,EACjD,SACA,UACA,WACA,QAAQ,MACR,SAAS,EAAE,EACX,mBAAmB,CAAC,WAAW,EAC/B,aAAa,OACb,YAAY,OACZ,2BAA2B,OAC3B,aAAa,OACb,mBAAmB,EAAE,EACrB,UACA,mBACA,UACA,aACA,WACwC;CACxC,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAC7C,MAAMC,SAAiCC,oCAAoB;CAC3D,MAAM,CAAC,OAAO,gCAAoD,KAAK;AAEvE,KAAI,UAAU;EACZ,MAAMC,aAAsB,QAAQ,KAAK,IAAI,CAAC,MAAM;AAEpD,SACE,2CAAC;GAAe;aACb,SAAS;IACR,YAAY,OAAO,YACjB,OAAO,QAAQ,MAAM,cAAc,EAAE,CAAC,CAAC,QACpC,CAAC,UAA6B,CAAC,iBAAiB,SAAS,KAAK,CAChE,CACF;IACD,aAAa,2DAAkC,KAAK,GAAG;IACvD;IACA;IACA;IACA;IACA;IACA;IACA,kBAAkB,qBAAqB,OAAO,mBAAmB,EAAE;IACnE,UAAU,aAAa,WAAW;IAClC,mBAAmB,OAAO,oBAAoB;IAC9C,UAAU,aAAa,WAAW;IAClC;IACD,CAAC;IACE;;AAIV,KAAI,aAAa,CAAC,KAChB,QACE,2CAACC;EAAa,OAAM;EAA0B;EAAwB;YACpE,4CAAC;GAAK,WAAW,OAAO;GAAU,MAAK;;IACrC,2CAACC,2BAAQ,MAAK,UAAU;;IAAE,EAAE,uBAAuB;;IAC9C;GACM;AAInB,KAAI,CAAC,KACH,QACE,2CAACD;EAAa,OAAM;EAA0B;EAAwB;YACpE,2CAACE;GAAM,SAAQ;GAAQ,MAAK;aACzB,SAAS,EAAE,gCAAgC;IACtC;GACK;CAInB,MAAMC,kEAAiD,KAAK;CAC5D,MAAMC,aAAkC,OAAO,QAAQ,KAAK,cAAc,EAAE,CAAC,CAAC,QAC3E,CAAC,UAA6B,CAAC,iBAAiB,SAAS,KAAK,CAChE;CACD,MAAMC,qBAAyC,WAAW,QACvD,UAAwD,OAAO,MAAM,OAAO,SAC9E;AAED,QACE,4CAACL;EACC,OAAM;EACK;EACX,OAAO;EACP,aAAa,EAAE,gCAAgC,EAAC,MAAM,KAAK,MAAK,CAAC;EACpD;EACb,SACE;GACG;GACA,qBACC,2CAACM;IACC,SAAS;IACT;IACA,WAAW;IACX,MAAM;IACN,UAAU;KACV;GAEH,YAAY,CAAC,KAAK,cACjB,2CAACC;IACC,aAAa,EAAE,sCAAsC,EAAC,MAAM,aAAY,CAAC;IACzE,WAAW;IACX,WAAW;cAEV,EAAE,oCAAoC;KACzB;MAEjB;;GAGJ,SACC,2CAACL;IAAM,SAAQ;IAAQ,MAAK;cACzB;KACK;GAEV,4CAAC;IAAI,WAAW,OAAO;;KACrB,2CAACM;MAAO,MAAM;MAAa,MAAM;OAAM;KACvC,2CAAC;MAAK,WAAW,OAAO;gBAAW,KAAK,YAAY,KAAK;OAAY;KACrE,2CAACC,mDAAkB,QAAQ,KAAK,QAAQ,QAAS;;KAC7C;GACN,2CAACC;IACC,OAAO,EAAE,iCAAiC;IAC1C,SACE,YAAY,CAAC,KAAK,cAAc,CAAC,SAAS,mBAAmB,SAAS,IACpE,2CAACC;KACC,SAAQ;KACR,MAAK;KACL,eAAqB,SAAS,OAAO,YAAY,mBAAmB,CAAC;eAEpE,EAAE,kCAAkC;MAC9B,GACP;cAGL,QACC,4CAAC;KACC,WAAW,OAAO;KAClB,OAAO;MAAC,YAAY;MAAW,eAAe;MAAS;KACvD,WAAW,UAAgB;AACzB,YAAM,gBAAgB;AACtB,iBAAW;OAAC,GAAI,KAAK,cAAc,EAAE;OAAG,GAAG;OAAM,CAAC;AAClD,eAAS,KAAK;;gBAGf,OAAO,KAAK,MAAM,CAAC,KAAK,SACvB,2CAACC;MAEO;MACN,OAAO;MACP,cAAY;MACZ,OAAO,MAAM;MACb,WAAW,UACT,UAAU,cAA6C;OAAC,GAAG;QAAW,OAAO,MAAM,OAAO;OAAM,EAAE;QAN/F,KAQL,CACF,EACF,4CAAC;MAAI,WAAW,OAAO;MAAQ,OAAO,EAAC,gBAAgB,YAAW;iBAChE,2CAACD;OAAO,MAAK;OAAS,SAAQ;OAAO,UAAU;OAAY,eAAqB,SAAS,KAAK;iBAC3F,EAAE,8BAA8B;QAC1B,EACT,2CAACA;OAAO,MAAK;OAAS,SAAS;OAAY,UAAU;iBAClD,EAAE,gCAAgC;QAC5B;OACL;MACD,GACL,WAAW,SAAS,IACtB,2CAACE,iCACC,OAAO,WAAW,KAAK,CAAC,MAAM,YAA+B;KAAC,OAAO;KAAM,OAAO,UAAU,MAAM;KAAC,EAAE,GACrG,GAEF,2CAAC;KAAK,WAAW,OAAO;eAAW,EAAE,oCAAoC;MAAQ;KAE7E;GACR,2CAACH;IAAM,OAAO,EAAE,6BAA6B;cAC3C,2CAACI;KACC,OAAO,EAAE,6BAA6B;KACtC,WAAW,EAAE,gCAAgC;KAC7C,OAAO,OAAO,KAAK,WAA4B;MAAC,IAAI,MAAM;MAAI,OAAO,MAAM;MAAK,EAAE;MAClF;KACI;;GACK;;AAInB,8BAAe"}
|
|
@@ -10,7 +10,7 @@ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
|
|
|
10
10
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
11
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
12
12
|
|
|
13
|
-
//#region src/components/
|
|
13
|
+
//#region src/components/management/UserDetails/UserDetails.tsx
|
|
14
14
|
/**
|
|
15
15
|
* Shows a user and the groups they belong to, and optionally lets the signed-in user delete them.
|
|
16
16
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserDetails.cjs","names":["UserDetails: FC<UserDetailsProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","user: ResourceQueryResult<ManagedUser>","useResourceQuery","UserQueryKeys","groups: ResourceQueryResult<MembershipGroupListResponse>","GroupQueryKeys","deletion: ResourceMutationResult<void, string>","useResourceMutation","update: ResourceMutationResult<ManagedUser, UpdateUserVariables>","lifecycle: AccountLifecycleState","useAccountLifecycle","BaseUserDetails"],"sources":["../../../../../src/components/management/UserDetails/UserDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n AdministrationMode,\n GroupQueryKeys,\n ManagedUser,\n MembershipGroupListResponse,\n UpdateManagedUserRequest,\n UserQueryKeys,\n deleteUser,\n getUser,\n getUserGroups,\n toManagementErrorMessage,\n updateUser,\n} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseUserDetails, {BaseUserDetailsProps} from './BaseUserDetails';\nimport useAccountLifecycle, {AccountLifecycleState} from '../../../hooks/management/useAccountLifecycle';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\n\ninterface UpdateUserVariables {\n data: UpdateManagedUserRequest;\n userId: string;\n}\n\nexport type UserDetailsProps = Omit<\n BaseUserDetailsProps,\n | 'error'\n | 'groups'\n | 'isDeleting'\n | 'isLoading'\n | 'isRunningLifecycleAction'\n | 'isUpdating'\n | 'lifecycleActions'\n | 'onDelete'\n | 'onLifecycleAction'\n | 'onUpdate'\n | 'user'\n> & {\n /**\n * How the delete runs. `flow` runs the user deletion flow the server configures, which revokes the\n * user's grants and ends their sessions before the record goes. It needs `baseUrl`.\n * @default 'native'\n */\n administrationMode?: AdministrationMode;\n /**\n * Whether the user can be deleted from this view.\n * @default false\n */\n deletable?: boolean;\n /**\n * Whether the user's text attributes can be edited from this view.\n * @default false\n */\n editable?: boolean;\n /**\n * Whether the user can be suspended, unsuspended and unlocked from this view. Each action runs\n * through its administration flow and is offered only when the server configures that flow. Reading\n * the configured flows needs a token that may read the server configuration.\n * @default false\n */\n lifecycleActions?: boolean;\n /**\n * Called after the user has been deleted.\n */\n onDeleted?: () => void;\n userId: string;\n};\n\n/**\n * Shows a user and the groups they belong to, and optionally lets the signed-in user delete them.\n *\n * @example\n * ```tsx\n * <UserDetails userId={userId} deletable onDeleted={() => navigate('/users')} />\n * ```\n */\nconst UserDetails: FC<UserDetailsProps> = ({\n administrationMode,\n deletable = false,\n editable = false,\n lifecycleActions = false,\n onDeleted,\n preferences,\n userId,\n ...rest\n}: UserDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n const user: ResourceQueryResult<ManagedUser> = useResourceQuery(\n [UserQueryKeys.USER, userId],\n (fetcher) => getUser({...endpoint, fetcher, userId}),\n {enabled: Boolean(userId)},\n );\n const groups: ResourceQueryResult<MembershipGroupListResponse> = useResourceQuery(\n [GroupQueryKeys.MEMBERSHIPS, 'user', userId, {limit: 100}],\n (fetcher) => getUserGroups({...endpoint, fetcher, limit: 100, userId}),\n {enabled: Boolean(userId)},\n );\n const deletion: ResourceMutationResult<void, string> = useResourceMutation(\n (id: string, fetcher) => deleteUser({...endpoint, administrationMode, fetcher, userId: id}),\n () => [[UserQueryKeys.USERS]],\n {onSuccess: onDeleted},\n );\n const update: ResourceMutationResult<ManagedUser, UpdateUserVariables> = useResourceMutation(\n ({data, userId: id}: UpdateUserVariables, fetcher) => updateUser({...endpoint, fetcher, payload: data, userId: id}),\n ({userId: id}: UpdateUserVariables) => [[UserQueryKeys.USER, id], [UserQueryKeys.USERS]],\n );\n\n const lifecycle: AccountLifecycleState = useAccountLifecycle({\n enabled: lifecycleActions,\n invalidatedKeys: [[UserQueryKeys.USER, userId], [UserQueryKeys.USERS]],\n kind: 'user',\n status: user.data?.status?.value,\n subject: userId,\n });\n\n return (\n <BaseUserDetails\n user={user.data}\n groups={groups.data?.groups}\n isLoading={user.isLoading}\n error={\n toManagementErrorMessage(t, user.error, 'admin.users.details.error') ??\n toManagementErrorMessage(t, deletion.error, 'admin.users.details.delete.error') ??\n toManagementErrorMessage(t, update.error, 'admin.users.details.edit.error') ??\n toManagementErrorMessage(t, lifecycle.error, 'admin.common.lifecycle.error') ??\n toManagementErrorMessage(t, lifecycle.loadError, 'admin.common.lifecycle.load_error')\n }\n isDeleting={deletion.isLoading}\n onDelete={deletable ? (): void => void deletion.mutate(userId) : undefined}\n lifecycleActions={lifecycle.actions}\n isRunningLifecycleAction={lifecycle.isRunning}\n onLifecycleAction={lifecycleActions ? lifecycle.run : undefined}\n isUpdating={update.isLoading}\n onUpdate={\n editable && user.data\n ? (attributes: Record<string, unknown>): void =>\n void update.mutate({data: {attributes, ouId: user.data!.ouId, type: user.data!.type}, userId})\n : undefined\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default UserDetails;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiFA,MAAMA,eAAqC,EACzC,oBACA,YAAY,OACZ,WAAW,OACX,mBAAmB,OACnB,WACA,aACA,OACA,GAAG,WACiC;CACpC,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAC7C,MAAMC,WAA+BC,sCAAsB,QAAQ;CACnE,MAAMC,OAAyCC,iCAC7C,CAACC,kCAAc,MAAM,OAAO,GAC3B,6CAAoB;EAAC,GAAG;EAAU;EAAS;EAAO,CAAC,EACpD,EAAC,SAAS,QAAQ,OAAO,EAAC,CAC3B;CACD,MAAMC,SAA2DF,iCAC/D;EAACG,mCAAe;EAAa;EAAQ;EAAQ,EAAC,OAAO,KAAI;EAAC,GACzD,mDAA0B;EAAC,GAAG;EAAU;EAAS,OAAO;EAAK;EAAO,CAAC,EACtE,EAAC,SAAS,QAAQ,OAAO,EAAC,CAC3B;CACD,MAAMC,WAAiDC,qCACpD,IAAY,gDAAuB;EAAC,GAAG;EAAU;EAAoB;EAAS,QAAQ;EAAG,CAAC,QACrF,CAAC,CAACJ,kCAAc,MAAM,CAAC,EAC7B,EAAC,WAAW,WAAU,CACvB;CACD,MAAMK,SAAmED,qCACtE,EAAC,MAAM,QAAQ,MAA0B,gDAAuB;EAAC,GAAG;EAAU;EAAS,SAAS;EAAM,QAAQ;EAAG,CAAC,GAClH,EAAC,QAAQ,SAA6B,CAAC,CAACJ,kCAAc,MAAM,GAAG,EAAE,CAACA,kCAAc,MAAM,CAAC,CACzF;CAED,MAAMM,YAAmCC,oCAAoB;EAC3D,SAAS;EACT,iBAAiB,CAAC,CAACP,kCAAc,MAAM,OAAO,EAAE,CAACA,kCAAc,MAAM,CAAC;EACtE,MAAM;EACN,QAAQ,KAAK,MAAM,QAAQ;EAC3B,SAAS;EACV,CAAC;AAEF,QACE,2CAACQ;EACC,MAAM,KAAK;EACX,QAAQ,OAAO,MAAM;EACrB,WAAW,KAAK;EAChB,yDAC2B,GAAG,KAAK,OAAO,4BAA4B,sDAC3C,GAAG,SAAS,OAAO,mCAAmC,sDACtD,GAAG,OAAO,OAAO,iCAAiC,sDAClD,GAAG,UAAU,OAAO,+BAA+B,sDACnD,GAAG,UAAU,WAAW,oCAAoC;EAEvF,YAAY,SAAS;EACrB,UAAU,kBAAwB,KAAK,SAAS,OAAO,OAAO,GAAG;EACjE,kBAAkB,UAAU;EAC5B,0BAA0B,UAAU;EACpC,mBAAmB,mBAAmB,UAAU,MAAM;EACtD,YAAY,OAAO;EACnB,UACE,YAAY,KAAK,QACZ,eACC,KAAK,OAAO,OAAO;GAAC,MAAM;IAAC;IAAY,MAAM,KAAK,KAAM;IAAM,MAAM,KAAK,KAAM;IAAK;GAAE;GAAO,CAAC,GAChG;EAEO;EACb,GAAI;GACJ;;AAIN,0BAAe"}
|
|
@@ -9,7 +9,7 @@ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
|
|
|
9
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
10
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
11
11
|
|
|
12
|
-
//#region src/components/
|
|
12
|
+
//#region src/components/management/UserList/BaseUserList.tsx
|
|
13
13
|
/**
|
|
14
14
|
* Lists users with their type and organization unit. Holds no data of its own: pass the page of
|
|
15
15
|
* users and handle selection and pagination.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseUserList.cjs","names":["BaseUserList: FC<BaseUserListProps>","useTranslation","columns: DataTableColumn<ManagedUser>[]","name: string","email: unknown","Avatar","AdminSection","AdminSearch","DataTable"],"sources":["../../../../../src/components/management/UserList/BaseUserList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {resolveManagedIdentityName, ManagedUser, Preferences, SelectOption} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode} from 'react';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {Avatar} from '../../primitives/Avatar/Avatar';\nimport DataTable, {DataTableColumn} from '../../primitives/DataTable/DataTable';\nimport {AdminListRenderProps} from '../shared/AdminListRenderProps';\nimport AdminSearch, {AdminSearchValue} from '../shared/AdminSearch';\nimport AdminSection from '../shared/AdminSection';\n\n/**\n * What {@link BaseUserList} hands its `children` render function. `users` and `rows` are the same array.\n */\nexport type BaseUserListRenderProps = AdminListRenderProps<ManagedUser> & {users: ManagedUser[]};\n\nexport interface BaseUserListProps {\n /**\n * Controls rendered next to the title, such as a button that opens `UserCreate`.\n */\n actions?: ReactNode;\n /**\n * Renders custom UI in place of the default table, for example a third-party data grid. Receives\n * the users, the default columns, the loading and error state, and the pagination and selection\n * handlers.\n */\n children?: (props: BaseUserListRenderProps) => ReactNode;\n className?: string;\n description?: string;\n error?: string | null;\n isLoading?: boolean;\n /**\n * Page size.\n * @default 20\n */\n limit?: number;\n offset?: number;\n /**\n * Called with the offset of the page to show. Pagination is hidden when omitted.\n */\n onPageChange?: (offset: number) => void;\n /**\n * Applies a search on the server, or clears it with `null`. The search form shows only when this and\n * `searchAttributes` are set.\n */\n onSearch?: (search: AdminSearchValue | null) => void;\n /**\n * Called when a user is chosen. Rows are selectable only when set.\n */\n onSelect?: (user: ManagedUser) => void;\n preferences?: Preferences;\n /**\n * The search currently applied, if any. While set, an empty page says nothing matched.\n */\n search?: AdminSearchValue | null;\n /**\n * The user attributes that can be searched, with translated labels.\n */\n searchAttributes?: SelectOption[];\n selectedUserId?: string;\n /**\n * Heading of the list. Pass an empty string to hide it.\n */\n title?: string;\n totalResults?: number;\n users: ManagedUser[];\n}\n\n/**\n * Lists users with their type and organization unit. Holds no data of its own: pass the page of\n * users and handle selection and pagination.\n */\nconst BaseUserList: FC<BaseUserListProps> = ({\n actions,\n children,\n className,\n description,\n error = null,\n isLoading = false,\n limit = 20,\n offset = 0,\n onPageChange,\n onSearch,\n onSelect,\n preferences,\n search = null,\n searchAttributes,\n selectedUserId,\n title,\n totalResults,\n users,\n}: BaseUserListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n\n const columns: DataTableColumn<ManagedUser>[] = [\n {\n header: t('admin.users.list.columns.name'),\n id: 'name',\n render: (user: ManagedUser): ReactNode => {\n const name: string = resolveManagedIdentityName(user);\n const email: unknown = user.attributes?.['email'];\n\n return (\n <span style={{alignItems: 'center', display: 'inline-flex', gap: '0.75em'}}>\n <Avatar name={name} size={32} />\n <span style={{display: 'inline-flex', flexDirection: 'column', gap: '0.15em', textAlign: 'start'}}>\n <span style={{fontWeight: 500}}>{name}</span>\n {typeof email === 'string' && email.length > 0 && email !== name && (\n <span style={{fontSize: '0.85em', opacity: 0.65}}>{email}</span>\n )}\n </span>\n </span>\n );\n },\n },\n {header: t('admin.users.list.columns.type'), id: 'type', render: (user: ManagedUser): ReactNode => user.type},\n {\n header: t('admin.common.columns.organization_unit'),\n id: 'ou',\n render: (user: ManagedUser): ReactNode => user.ouHandle ?? user.ouId,\n },\n ];\n\n if (children) {\n return (\n <div className={className}>\n {children({\n columns,\n error,\n isLoading,\n limit,\n offset,\n onPageChange,\n onSelect,\n onSearch,\n rows: users,\n search,\n searchAttributes,\n selectedRowId: selectedUserId,\n totalResults: totalResults ?? users.length,\n users,\n })}\n </div>\n );\n }\n\n return (\n <AdminSection\n block=\"user-list\"\n className={className}\n title={title ?? t('admin.users.list.title')}\n description={description}\n actions={actions}\n preferences={preferences}\n >\n {onSearch && searchAttributes?.length ? (\n <AdminSearch attributes={searchAttributes} search={search} onSearch={onSearch} />\n ) : null}\n <DataTable\n caption={title?.length ? title : t('admin.users.list.title')}\n columns={columns}\n rows={users}\n getRowId={(user: ManagedUser): string => user.id}\n isLoading={isLoading}\n error={error}\n emptyText={search ? t('admin.common.search.no_results', {value: search.value}) : t('admin.users.list.empty')}\n onRowClick={onSelect}\n selectedRowId={selectedUserId}\n pagination={\n onPageChange ? {limit, offset, onChange: onPageChange, total: totalResults ?? users.length} : undefined\n }\n />\n </AdminSection>\n );\n};\n\nexport default BaseUserList;\n"],"mappings":";;;;;;;;;;;;;;;;AAyEA,MAAMA,gBAAuC,EAC3C,SACA,UACA,WACA,aACA,QAAQ,MACR,YAAY,OACZ,QAAQ,IACR,SAAS,GACT,cACA,UACA,UACA,aACA,SAAS,MACT,kBACA,gBACA,OACA,cACA,YACqC;CACrC,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAE7C,MAAMC,UAA0C;EAC9C;GACE,QAAQ,EAAE,gCAAgC;GAC1C,IAAI;GACJ,SAAS,SAAiC;IACxC,MAAMC,2DAA0C,KAAK;IACrD,MAAMC,QAAiB,KAAK,aAAa;AAEzC,WACE,4CAAC;KAAK,OAAO;MAAC,YAAY;MAAU,SAAS;MAAe,KAAK;MAAS;gBACxE,2CAACC;MAAa;MAAM,MAAM;OAAM,EAChC,4CAAC;MAAK,OAAO;OAAC,SAAS;OAAe,eAAe;OAAU,KAAK;OAAU,WAAW;OAAQ;iBAC/F,2CAAC;OAAK,OAAO,EAAC,YAAY,KAAI;iBAAG;QAAY,EAC5C,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,UAAU,QAC1D,2CAAC;OAAK,OAAO;QAAC,UAAU;QAAU,SAAS;QAAK;iBAAG;QAAa;OAE7D;MACF;;GAGZ;EACD;GAAC,QAAQ,EAAE,gCAAgC;GAAE,IAAI;GAAQ,SAAS,SAAiC,KAAK;GAAK;EAC7G;GACE,QAAQ,EAAE,yCAAyC;GACnD,IAAI;GACJ,SAAS,SAAiC,KAAK,YAAY,KAAK;GACjE;EACF;AAED,KAAI,SACF,QACE,2CAAC;EAAe;YACb,SAAS;GACR;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,MAAM;GACN;GACA;GACA,eAAe;GACf,cAAc,gBAAgB,MAAM;GACpC;GACD,CAAC;GACE;AAIV,QACE,4CAACC;EACC,OAAM;EACK;EACX,OAAO,SAAS,EAAE,yBAAyB;EAC9B;EACJ;EACI;aAEZ,YAAY,kBAAkB,SAC7B,2CAACC;GAAY,YAAY;GAA0B;GAAkB;IAAY,GAC/E,MACJ,2CAACC;GACC,SAAS,OAAO,SAAS,QAAQ,EAAE,yBAAyB;GACnD;GACT,MAAM;GACN,WAAW,SAA8B,KAAK;GACnC;GACJ;GACP,WAAW,SAAS,EAAE,kCAAkC,EAAC,OAAO,OAAO,OAAM,CAAC,GAAG,EAAE,yBAAyB;GAC5G,YAAY;GACZ,eAAe;GACf,YACE,eAAe;IAAC;IAAO;IAAQ,UAAU;IAAc,OAAO,gBAAgB,MAAM;IAAO,GAAG;IAEhG;GACW;;AAInB,2BAAe"}
|
|
@@ -10,7 +10,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
10
10
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
11
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
12
12
|
|
|
13
|
-
//#region src/components/
|
|
13
|
+
//#region src/components/management/UserList/UserList.tsx
|
|
14
14
|
/**
|
|
15
15
|
* Lists the users the signed-in user is allowed to see, a page at a time.
|
|
16
16
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserList.cjs","names":["UserList: FC<UserListProps>","useTranslation","attributes: SelectOption[]","endpoint: ManagementEndpoint","useManagementEndpoint","queryFilter: string | undefined","useResourceQuery","UserQueryKeys","BaseUserList"],"sources":["../../../../../src/components/management/UserList/UserList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ManagedUserListResponse,\n SelectOption,\n UserQueryKeys,\n getUsers,\n toEqualityFilter,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseUserList, {BaseUserListProps} from './BaseUserList';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {AdminSearchValue} from '../shared/AdminSearch';\n\nexport type UserListProps = Omit<\n BaseUserListProps,\n 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'onSearch' | 'search' | 'totalResults' | 'users'\n> & {\n /**\n * Server-side filter expression, for example `username eq \"ada\"`. Hides the search form, since the\n * server takes one expression.\n */\n filter?: string;\n /**\n * Whether to show the search form. The server matches the whole value of the chosen attribute.\n * @default true\n */\n searchable?: boolean;\n};\n\n/**\n * Lists the users the signed-in user is allowed to see, a page at a time.\n *\n * @example\n * ```tsx\n * <UserList onSelect={(user) => setSelectedUserId(user.id)} />\n * ```\n */\nconst UserList: FC<UserListProps> = ({\n filter,\n limit = 20,\n preferences,\n searchable = true,\n searchAttributes,\n ...rest\n}: UserListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const [search, setSearch] = useState<AdminSearchValue | null>(null);\n const attributes: SelectOption[] = searchAttributes ?? [\n {label: t('admin.users.list.search.username'), value: 'username'},\n {label: t('admin.users.list.search.email'), value: 'email'},\n ];\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n const queryFilter: string | undefined =\n filter ?? (search ? toEqualityFilter(search.attribute, search.value) : undefined);\n const {data, error, isLoading}: ResourceQueryResult<ManagedUserListResponse> = useResourceQuery(\n [UserQueryKeys.USERS, {filter: queryFilter, limit, offset}],\n (fetcher) => getUsers({...endpoint, fetcher, filter: queryFilter, limit, offset}),\n );\n\n return (\n <BaseUserList\n users={data?.users ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.users.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n search={search}\n searchAttributes={attributes}\n onSearch={\n searchable && !filter\n ? (next: AdminSearchValue | null): void => {\n setSearch(next);\n setOffset(0);\n }\n : undefined\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default UserList;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,YAA+B,EACnC,QACA,QAAQ,IACR,aACA,aAAa,MACb,iBACA,GAAG,WAC8B;CACjC,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,iCAA8B,EAAE;CAC/C,MAAM,CAAC,QAAQ,iCAA+C,KAAK;CACnE,MAAMC,aAA6B,oBAAoB,CACrD;EAAC,OAAO,EAAE,mCAAmC;EAAE,OAAO;EAAW,EACjE;EAAC,OAAO,EAAE,gCAAgC;EAAE,OAAO;EAAQ,CAC5D;CACD,MAAMC,WAA+BC,sCAAsB,QAAQ;CACnE,MAAMC,cACJ,WAAW,mDAA0B,OAAO,WAAW,OAAO,MAAM,GAAG;CACzE,MAAM,EAAC,MAAM,OAAO,cAA2DC,iCAC7E,CAACC,kCAAc,OAAO;EAAC,QAAQ;EAAa;EAAO;EAAO,CAAC,GAC1D,8CAAqB;EAAC,GAAG;EAAU;EAAS,QAAQ;EAAa;EAAO;EAAO,CAAC,CAClF;AAED,QACE,2CAACC;EACC,OAAO,MAAM,SAAS,EAAE;EACxB,cAAc,MAAM;EACT;EACX,yDAAgC,GAAG,OAAO,yBAAyB;EAC5D;EACC;EACR,cAAc;EACN;EACR,kBAAkB;EAClB,UACE,cAAc,CAAC,UACV,SAAwC;AACvC,aAAU,KAAK;AACf,aAAU,EAAE;MAEd;EAEO;EACb,GAAI;GACJ;;AAIN,uBAAe"}
|
|
@@ -8,7 +8,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
10
10
|
|
|
11
|
-
//#region src/components/
|
|
11
|
+
//#region src/components/management/shared/AccountLifecycleParts.tsx
|
|
12
12
|
/**
|
|
13
13
|
* Matches the server's limit on an operator note.
|
|
14
14
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountLifecycleParts.cjs","names":["AccessStatusBadge: FC<AccessStatusBadgeProps>","styles: Record<string, string>","useAdminPartStyles","useTranslation","labels: Record<AccessStatusValue, string>","AccountLifecycleButtons: FC<AccountLifecycleButtonsProps>","labels: Record<AccountLifecycleAction, string>","question: string","withNote: boolean","TextField","Button"],"sources":["../../../../../src/components/management/shared/AccountLifecycleParts.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {AccessStatusValue, AccountLifecycleAction} from '@thunderid/browser';\nimport {ChangeEvent, FC, ReactElement, useState} from 'react';\nimport useAdminPartStyles from './useAdminPartStyles';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Button from '../../primitives/Button/Button';\nimport TextField from '../../primitives/TextField/TextField';\n\n/**\n * Matches the server's limit on an operator note.\n */\nconst OPERATOR_NOTE_MAX_LENGTH = 100;\n\nexport interface AccessStatusBadgeProps {\n status?: AccessStatusValue;\n}\n\n/**\n * The translated access status of an identity, or its raw value when the status is one this SDK does\n * not know. Renders nothing when the server reports no status.\n */\nexport const AccessStatusBadge: FC<AccessStatusBadgeProps> = ({\n status,\n}: AccessStatusBadgeProps): ReactElement | null => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation();\n\n if (!status) {\n return null;\n }\n\n const labels: Record<AccessStatusValue, string> = {\n ACTIVE: t('admin.common.status.active'),\n LOCKED: t('admin.common.status.locked'),\n SUSPENDED: t('admin.common.status.suspended'),\n };\n\n return <span className={styles['chip']}>{labels[status] ?? status}</span>;\n};\n\nexport interface AccountLifecycleButtonsProps {\n /**\n * The actions to offer, most expected first.\n */\n actions: AccountLifecycleAction[];\n /**\n * Whether a suspension asks for an optional operator note. The note is recorded by the flow.\n */\n collectsOperatorNote?: boolean;\n isRunning?: boolean;\n /**\n * Name of the identity, already resolved, used in the confirmation question.\n */\n name: string;\n onAction: (action: AccountLifecycleAction, operatorNote?: string) => void;\n}\n\n/**\n * One button per account lifecycle action. Suspending and unsuspending ask for confirmation inline;\n * unlocking is remedial and runs straight away.\n */\nexport const AccountLifecycleButtons: FC<AccountLifecycleButtonsProps> = ({\n actions,\n collectsOperatorNote = false,\n isRunning = false,\n name,\n onAction,\n}: AccountLifecycleButtonsProps): ReactElement | null => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation();\n const [confirming, setConfirming] = useState<AccountLifecycleAction | null>(null);\n const [operatorNote, setOperatorNote] = useState<string>('');\n\n if (actions.length === 0) {\n return null;\n }\n\n const labels: Record<AccountLifecycleAction, string> = {\n suspend: t('admin.common.lifecycle.suspend'),\n unlock: t('admin.common.lifecycle.unlock'),\n unsuspend: t('admin.common.lifecycle.unsuspend'),\n };\n\n if (confirming && actions.includes(confirming)) {\n const question: string =\n confirming === 'suspend'\n ? t('admin.common.lifecycle.suspend_confirm', {name})\n : t('admin.common.lifecycle.unsuspend_confirm', {name});\n const withNote: boolean = collectsOperatorNote && confirming === 'suspend';\n const close = (): void => {\n setConfirming(null);\n setOperatorNote('');\n };\n\n return (\n <span className={styles['confirm']} role=\"group\" aria-label={question}>\n <span>{question}</span>\n {withNote && (\n <TextField\n name=\"operatorNote\"\n label={t('admin.common.lifecycle.operator_note')}\n aria-label={t('admin.common.lifecycle.operator_note')}\n value={operatorNote}\n maxLength={OPERATOR_NOTE_MAX_LENGTH}\n disabled={isRunning}\n onChange={(event: ChangeEvent<HTMLInputElement>): void => setOperatorNote(event.target.value)}\n />\n )}\n <Button variant=\"text\" size=\"small\" disabled={isRunning} onClick={close}>\n {t('admin.common.actions.cancel')}\n </Button>\n <Button\n color={confirming === 'suspend' ? 'error' : 'primary'}\n size=\"small\"\n loading={isRunning}\n disabled={isRunning}\n onClick={(): void => {\n onAction(confirming, withNote ? operatorNote.trim() || undefined : undefined);\n close();\n }}\n >\n {labels[confirming]}\n </Button>\n </span>\n );\n }\n\n return (\n <>\n {actions.map((action: AccountLifecycleAction) => (\n <Button\n key={action}\n variant=\"outline\"\n color={action === 'suspend' ? 'error' : 'primary'}\n disabled={isRunning}\n loading={isRunning && action === 'unlock'}\n onClick={(): void => (action === 'unlock' ? onAction(action) : setConfirming(action))}\n >\n {labels[action]}\n </Button>\n ))}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAM,2BAA2B;;;;;AAUjC,MAAaA,qBAAiD,EAC5D,aACiD;CACjD,MAAMC,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKC,gCAAgB;AAE5B,KAAI,CAAC,OACH,QAAO;CAGT,MAAMC,SAA4C;EAChD,QAAQ,EAAE,6BAA6B;EACvC,QAAQ,EAAE,6BAA6B;EACvC,WAAW,EAAE,gCAAgC;EAC9C;AAED,QAAO,2CAAC;EAAK,WAAW,OAAO;YAAU,OAAO,WAAW;GAAc;;;;;;AAwB3E,MAAaC,2BAA6D,EACxE,SACA,uBAAuB,OACvB,YAAY,OACZ,MACA,eACuD;CACvD,MAAMJ,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKC,gCAAgB;CAC5B,MAAM,CAAC,YAAY,qCAAyD,KAAK;CACjF,MAAM,CAAC,cAAc,uCAAoC,GAAG;AAE5D,KAAI,QAAQ,WAAW,EACrB,QAAO;CAGT,MAAMG,SAAiD;EACrD,SAAS,EAAE,iCAAiC;EAC5C,QAAQ,EAAE,gCAAgC;EAC1C,WAAW,EAAE,mCAAmC;EACjD;AAED,KAAI,cAAc,QAAQ,SAAS,WAAW,EAAE;EAC9C,MAAMC,WACJ,eAAe,YACX,EAAE,0CAA0C,EAAC,MAAK,CAAC,GACnD,EAAE,4CAA4C,EAAC,MAAK,CAAC;EAC3D,MAAMC,WAAoB,wBAAwB,eAAe;EACjE,MAAM,cAAoB;AACxB,iBAAc,KAAK;AACnB,mBAAgB,GAAG;;AAGrB,SACE,4CAAC;GAAK,WAAW,OAAO;GAAY,MAAK;GAAQ,cAAY;;IAC3D,2CAAC,oBAAM,WAAgB;IACtB,YACC,2CAACC;KACC,MAAK;KACL,OAAO,EAAE,uCAAuC;KAChD,cAAY,EAAE,uCAAuC;KACrD,OAAO;KACP,WAAW;KACX,UAAU;KACV,WAAW,UAA+C,gBAAgB,MAAM,OAAO,MAAM;MAC7F;IAEJ,2CAACC;KAAO,SAAQ;KAAO,MAAK;KAAQ,UAAU;KAAW,SAAS;eAC/D,EAAE,8BAA8B;MAC1B;IACT,2CAACA;KACC,OAAO,eAAe,YAAY,UAAU;KAC5C,MAAK;KACL,SAAS;KACT,UAAU;KACV,eAAqB;AACnB,eAAS,YAAY,WAAW,aAAa,MAAM,IAAI,SAAY,OAAU;AAC7E,aAAO;;eAGR,OAAO;MACD;;IACJ;;AAIX,QACE,mFACG,QAAQ,KAAK,WACZ,2CAACA;EAEC,SAAQ;EACR,OAAO,WAAW,YAAY,UAAU;EACxC,UAAU;EACV,SAAS,aAAa,WAAW;EACjC,eAAsB,WAAW,WAAW,SAAS,OAAO,GAAG,cAAc,OAAO;YAEnF,OAAO;IAPH,OAQE,CACT,GACD"}
|
|
@@ -7,7 +7,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
9
9
|
|
|
10
|
-
//#region src/components/
|
|
10
|
+
//#region src/components/management/shared/AdminParts.tsx
|
|
11
11
|
/**
|
|
12
12
|
* Renders label and value pairs as a description list.
|
|
13
13
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminParts.cjs","names":["DetailList: FC<DetailListProps>","styles: Record<string, string>","useAdminPartStyles","Panel: FC<PanelProps>","ChipList: FC<ChipListProps>","Button","ConfirmButton: FC<ConfirmButtonProps>","useTranslation"],"sources":["../../../../../src/components/management/shared/AdminParts.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {FC, ReactElement, ReactNode, useState} from 'react';\nimport useAdminPartStyles from './useAdminPartStyles';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Button from '../../primitives/Button/Button';\n\n/**\n * One label and value pair of a {@link DetailList}.\n */\nexport interface DetailListItem {\n label: string;\n value: ReactNode;\n}\n\nexport interface DetailListProps {\n items: DetailListItem[];\n}\n\n/**\n * Renders label and value pairs as a description list.\n */\nexport const DetailList: FC<DetailListProps> = ({items}: DetailListProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n\n return (\n <dl className={styles['detail']}>\n {items.map((item: DetailListItem) => (\n <div key={item.label} style={{display: 'contents'}}>\n <dt className={styles['detailLabel']}>{item.label}</dt>\n <dd className={styles['detailValue']}>{item.value}</dd>\n </div>\n ))}\n </dl>\n );\n};\n\nexport interface PanelProps {\n actions?: ReactNode;\n children?: ReactNode;\n title: string;\n}\n\n/**\n * A bordered block with a heading, used to group parts of a details view.\n */\nexport const Panel: FC<PanelProps> = ({actions, children, title}: PanelProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n\n return (\n <section className={styles['panel']}>\n <div className={styles['row']} style={{justifyContent: 'space-between'}}>\n <h3 className={styles['panelTitle']}>{title}</h3>\n {actions}\n </div>\n {children}\n </section>\n );\n};\n\nexport interface ChipListProps {\n /**\n * Accessible name of the list, already translated.\n */\n label: string;\n /**\n * Message shown when there are no items, already translated.\n */\n emptyText: string;\n items: {id: string; label: string; onRemove?: () => void; removeLabel?: string}[];\n}\n\n/**\n * Renders a list of named items, each optionally removable.\n */\nexport const ChipList: FC<ChipListProps> = ({emptyText, items, label}: ChipListProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n\n if (items.length === 0) {\n return <span className={styles['muted']}>{emptyText}</span>;\n }\n\n return (\n <ul className={styles['chipList']} aria-label={label}>\n {items.map((item: ChipListProps['items'][number]) => (\n <li key={item.id} className={styles['chip']}>\n {item.label}\n {item.onRemove && (\n <Button variant=\"icon\" size=\"small\" aria-label={item.removeLabel} onClick={item.onRemove}>\n <span aria-hidden=\"true\">×</span>\n </Button>\n )}\n </li>\n ))}\n </ul>\n );\n};\n\nexport interface ConfirmButtonProps {\n /**\n * Label of the button that starts the action, already translated.\n */\n children: ReactNode;\n /**\n * Question asked before the action runs, already translated.\n */\n confirmText: string;\n disabled?: boolean;\n isLoading?: boolean;\n onConfirm: () => void;\n}\n\n/**\n * A destructive action that asks for confirmation inline before it runs.\n */\nexport const ConfirmButton: FC<ConfirmButtonProps> = ({\n children,\n confirmText,\n disabled = false,\n isLoading = false,\n onConfirm,\n}: ConfirmButtonProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation();\n const [isConfirming, setIsConfirming] = useState<boolean>(false);\n\n if (!isConfirming) {\n return (\n <Button variant=\"outline\" color=\"error\" disabled={disabled} onClick={(): void => setIsConfirming(true)}>\n {children}\n </Button>\n );\n }\n\n return (\n <span className={styles['confirm']} role=\"group\" aria-label={confirmText}>\n <span>{confirmText}</span>\n <Button variant=\"text\" size=\"small\" disabled={isLoading} onClick={(): void => setIsConfirming(false)}>\n {t('admin.common.actions.cancel')}\n </Button>\n <Button color=\"error\" size=\"small\" loading={isLoading} disabled={isLoading} onClick={onConfirm}>\n {t('admin.common.actions.confirm')}\n </Button>\n </span>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAuBA,MAAaA,cAAmC,EAAC,YAA0C;CACzF,MAAMC,SAAiCC,oCAAoB;AAE3D,QACE,2CAAC;EAAG,WAAW,OAAO;YACnB,MAAM,KAAK,SACV,4CAAC;GAAqB,OAAO,EAAC,SAAS,YAAW;cAChD,2CAAC;IAAG,WAAW,OAAO;cAAiB,KAAK;KAAW,EACvD,2CAAC;IAAG,WAAW,OAAO;cAAiB,KAAK;KAAW;KAF/C,KAAK,MAGT,CACN;GACC;;;;;AAaT,MAAaC,SAAyB,EAAC,SAAS,UAAU,YAAqC;CAC7F,MAAMF,SAAiCC,oCAAoB;AAE3D,QACE,4CAAC;EAAQ,WAAW,OAAO;aACzB,4CAAC;GAAI,WAAW,OAAO;GAAQ,OAAO,EAAC,gBAAgB,iBAAgB;cACrE,2CAAC;IAAG,WAAW,OAAO;cAAgB;KAAW,EAChD;IACG,EACL;GACO;;;;;AAmBd,MAAaE,YAA+B,EAAC,WAAW,OAAO,YAAwC;CACrG,MAAMH,SAAiCC,oCAAoB;AAE3D,KAAI,MAAM,WAAW,EACnB,QAAO,2CAAC;EAAK,WAAW,OAAO;YAAW;GAAiB;AAG7D,QACE,2CAAC;EAAG,WAAW,OAAO;EAAa,cAAY;YAC5C,MAAM,KAAK,SACV,4CAAC;GAAiB,WAAW,OAAO;cACjC,KAAK,OACL,KAAK,YACJ,2CAACG;IAAO,SAAQ;IAAO,MAAK;IAAQ,cAAY,KAAK;IAAa,SAAS,KAAK;cAC9E,2CAAC;KAAK,eAAY;eAAO;MAAQ;KAC1B;KALJ,KAAK,GAOT,CACL;GACC;;;;;AAqBT,MAAaC,iBAAyC,EACpD,UACA,aACA,WAAW,OACX,YAAY,OACZ,gBACsC;CACtC,MAAML,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKK,gCAAgB;CAC5B,MAAM,CAAC,cAAc,uCAAqC,MAAM;AAEhE,KAAI,CAAC,aACH,QACE,2CAACF;EAAO,SAAQ;EAAU,OAAM;EAAkB;EAAU,eAAqB,gBAAgB,KAAK;EACnG;GACM;AAIb,QACE,4CAAC;EAAK,WAAW,OAAO;EAAY,MAAK;EAAQ,cAAY;;GAC3D,2CAAC,oBAAM,cAAmB;GAC1B,2CAACA;IAAO,SAAQ;IAAO,MAAK;IAAQ,UAAU;IAAW,eAAqB,gBAAgB,MAAM;cACjG,EAAE,8BAA8B;KAC1B;GACT,2CAACA;IAAO,OAAM;IAAQ,MAAK;IAAQ,SAAS;IAAW,UAAU;IAAW,SAAS;cAClF,EAAE,+BAA+B;KAC3B;;GACJ"}
|
|
@@ -3,7 +3,7 @@ const require_emotion = require('../../../styles/emotion.cjs');
|
|
|
3
3
|
let react = require("react");
|
|
4
4
|
react = require_rolldown_runtime.__toESM(react);
|
|
5
5
|
|
|
6
|
-
//#region src/components/
|
|
6
|
+
//#region src/components/management/shared/AdminParts.styles.ts
|
|
7
7
|
/**
|
|
8
8
|
* Creates the styles for the detail list, chip list and inline confirmation used by the admin
|
|
9
9
|
* components.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminParts.styles.cjs","names":["unit: string"],"sources":["../../../../../src/components/management/shared/AdminParts.styles.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\nimport {css} from '../../../styles/emotion';\n\n/**\n * Creates the styles for the detail list, chip list and inline confirmation used by the admin\n * components.\n *\n * @param theme - The theme object containing design tokens.\n * @param colorScheme - The current color scheme, used for memoization.\n * @returns The CSS class names for each part.\n */\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const unit: string = theme.vars.spacing.unit;\n\n return {\n chip: css`\n display: inline-flex;\n align-items: center;\n gap: calc(${unit} / 2);\n padding: calc(${unit} / 2) ${unit};\n border-radius: 999px;\n border: 1px solid ${theme.vars.colors.border};\n background: ${theme.vars.colors.background.surface};\n font-size: ${theme.vars.typography.fontSizes.sm};\n color: ${theme.vars.colors.text.primary};\n `,\n chipList: css`\n display: flex;\n flex-wrap: wrap;\n gap: ${unit};\n margin: 0;\n padding: 0;\n list-style: none;\n `,\n confirm: css`\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: ${unit};\n font-size: ${theme.vars.typography.fontSizes.sm};\n `,\n detail: css`\n display: grid;\n grid-template-columns: fit-content(200px) minmax(0, 1fr);\n gap: ${unit} calc(${unit} * 2);\n margin: 0;\n font-size: ${theme.vars.typography.fontSizes.sm};\n `,\n detailLabel: css`\n color: ${theme.vars.colors.text.secondary};\n `,\n detailValue: css`\n margin: 0;\n color: ${theme.vars.colors.text.primary};\n overflow-wrap: anywhere;\n `,\n muted: css`\n color: ${theme.vars.colors.text.secondary};\n font-size: ${theme.vars.typography.fontSizes.sm};\n `,\n panel: css`\n display: flex;\n flex-direction: column;\n gap: calc(${unit} * 1.5);\n padding: calc(${unit} * 2);\n border: 1px solid ${theme.vars.colors.border};\n border-radius: ${theme.vars.borderRadius.large};\n background: ${theme.vars.colors.background.surface};\n `,\n panelTitle: css`\n margin: 0;\n font-size: ${theme.vars.typography.fontSizes.md};\n font-weight: ${theme.vars.typography.fontWeights.semibold};\n `,\n row: css`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: calc(${unit} * 1.5);\n `,\n };\n }, [theme, colorScheme]);\n\nexport default useStyles;\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAM,aAAa,OAAc,yCACjB;CACZ,MAAMA,OAAe,MAAM,KAAK,QAAQ;AAExC,QAAO;EACL,MAAM,mBAAG;;;oBAGK,KAAK;wBACD,KAAK,QAAQ,KAAK;;4BAEd,MAAM,KAAK,OAAO,OAAO;sBAC/B,MAAM,KAAK,OAAO,WAAW,QAAQ;qBACtC,MAAM,KAAK,WAAW,UAAU,GAAG;iBACvC,MAAM,KAAK,OAAO,KAAK,QAAQ;;EAE1C,UAAU,mBAAG;;;eAGJ,KAAK;;;;;EAKd,SAAS,mBAAG;;;;eAIH,KAAK;qBACC,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,QAAQ,mBAAG;;;eAGF,KAAK,QAAQ,KAAK;;qBAEZ,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,aAAa,mBAAG;iBACL,MAAM,KAAK,OAAO,KAAK,UAAU;;EAE5C,aAAa,mBAAG;;iBAEL,MAAM,KAAK,OAAO,KAAK,QAAQ;;;EAG1C,OAAO,mBAAG;iBACC,MAAM,KAAK,OAAO,KAAK,UAAU;qBAC7B,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,OAAO,mBAAG;;;oBAGI,KAAK;wBACD,KAAK;4BACD,MAAM,KAAK,OAAO,OAAO;yBAC5B,MAAM,KAAK,aAAa,MAAM;sBACjC,MAAM,KAAK,OAAO,WAAW,QAAQ;;EAErD,YAAY,mBAAG;;qBAEA,MAAM,KAAK,WAAW,UAAU,GAAG;uBACjC,MAAM,KAAK,WAAW,YAAY,SAAS;;EAE5D,KAAK,mBAAG;;;;oBAIM,KAAK;;EAEpB;GACA,CAAC,OAAO,YAAY,CAAC;AAE1B,gCAAe"}
|
|
@@ -9,7 +9,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
9
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
10
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
11
11
|
|
|
12
|
-
//#region src/components/
|
|
12
|
+
//#region src/components/management/shared/AdminSearch.tsx
|
|
13
13
|
/**
|
|
14
14
|
* Searches an admin list by one attribute. The server matches the whole value, so the search runs when
|
|
15
15
|
* submitted rather than on every keystroke.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminSearch.cjs","names":["styles: Record<string, string>","useAdminPartStyles","useTranslation","label: string","Select","TextField","Button"],"sources":["../../../../../src/components/management/shared/AdminSearch.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {SelectOption} from '@thunderid/browser';\nimport {ChangeEvent, FormEvent, ReactElement, useState} from 'react';\nimport useAdminPartStyles from './useAdminPartStyles';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Button from '../../primitives/Button/Button';\nimport Select from '../../primitives/Select/Select';\nimport TextField from '../../primitives/TextField/TextField';\n\n/**\n * A search an admin list applies on the server: the attribute to match and the value it must equal.\n */\nexport interface AdminSearchValue {\n attribute: string;\n value: string;\n}\n\nexport interface AdminSearchProps {\n /**\n * The attributes that can be searched, with translated labels. The attribute select is hidden when\n * there is only one.\n */\n attributes: SelectOption[];\n /**\n * Called with the search to apply when the form is submitted, or `null` when it is cleared.\n */\n onSearch: (search: AdminSearchValue | null) => void;\n /**\n * The search currently applied.\n */\n search?: AdminSearchValue | null;\n}\n\n/**\n * Searches an admin list by one attribute. The server matches the whole value, so the search runs when\n * submitted rather than on every keystroke.\n */\nconst AdminSearch = ({attributes, onSearch, search = null}: AdminSearchProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation();\n const [attribute, setAttribute] = useState<string>(search?.attribute ?? attributes[0]?.value ?? '');\n const [value, setValue] = useState<string>(search?.value ?? '');\n const label: string = attributes.find((option: SelectOption) => option.value === attribute)?.label ?? attribute;\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n onSearch(value.trim() ? {attribute, value: value.trim()} : null);\n };\n\n return (\n <form className={styles['row']} onSubmit={handleSubmit} role=\"search\" style={{alignItems: 'flex-end'}}>\n {attributes.length > 1 && (\n <Select\n label={t('admin.common.search.attribute')}\n name=\"searchAttribute\"\n value={attribute}\n options={attributes}\n onChange={(event: ChangeEvent<HTMLSelectElement>): void => setAttribute(event.target.value)}\n />\n )}\n <TextField\n name=\"search\"\n type=\"search\"\n label={attributes.length > 1 ? undefined : label}\n aria-label={label}\n placeholder={t('admin.common.search.placeholder', {attribute: label.toLowerCase()})}\n value={value}\n onChange={(event: ChangeEvent<HTMLInputElement>): void => setValue(event.target.value)}\n />\n <Button type=\"submit\" variant=\"outline\">\n {t('admin.common.search.submit')}\n </Button>\n {search && (\n <Button\n type=\"button\"\n variant=\"text\"\n onClick={(): void => {\n setValue('');\n onSearch(null);\n }}\n >\n {t('admin.common.search.clear')}\n </Button>\n )}\n </form>\n );\n};\n\nexport default AdminSearch;\n"],"mappings":";;;;;;;;;;;;;;;;AAuCA,MAAM,eAAe,EAAC,YAAY,UAAU,SAAS,WAA0C;CAC7F,MAAMA,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKC,gCAAgB;CAC5B,MAAM,CAAC,WAAW,oCAAiC,QAAQ,aAAa,WAAW,IAAI,SAAS,GAAG;CACnG,MAAM,CAAC,OAAO,gCAA6B,QAAQ,SAAS,GAAG;CAC/D,MAAMC,QAAgB,WAAW,MAAM,WAAyB,OAAO,UAAU,UAAU,EAAE,SAAS;CAEtG,MAAM,gBAAgB,UAA4C;AAChE,QAAM,gBAAgB;AACtB,WAAS,MAAM,MAAM,GAAG;GAAC;GAAW,OAAO,MAAM,MAAM;GAAC,GAAG,KAAK;;AAGlE,QACE,4CAAC;EAAK,WAAW,OAAO;EAAQ,UAAU;EAAc,MAAK;EAAS,OAAO,EAAC,YAAY,YAAW;;GAClG,WAAW,SAAS,KACnB,2CAACC;IACC,OAAO,EAAE,gCAAgC;IACzC,MAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW,UAAgD,aAAa,MAAM,OAAO,MAAM;KAC3F;GAEJ,2CAACC;IACC,MAAK;IACL,MAAK;IACL,OAAO,WAAW,SAAS,IAAI,SAAY;IAC3C,cAAY;IACZ,aAAa,EAAE,mCAAmC,EAAC,WAAW,MAAM,aAAa,EAAC,CAAC;IAC5E;IACP,WAAW,UAA+C,SAAS,MAAM,OAAO,MAAM;KACtF;GACF,2CAACC;IAAO,MAAK;IAAS,SAAQ;cAC3B,EAAE,6BAA6B;KACzB;GACR,UACC,2CAACA;IACC,MAAK;IACL,SAAQ;IACR,eAAqB;AACnB,cAAS,GAAG;AACZ,cAAS,KAAK;;cAGf,EAAE,4BAA4B;KACxB;;GAEN;;AAIX,0BAAe"}
|
|
@@ -8,7 +8,7 @@ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
|
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
10
10
|
|
|
11
|
-
//#region src/components/
|
|
11
|
+
//#region src/components/management/shared/AdminSection.tsx
|
|
12
12
|
/**
|
|
13
13
|
* Frames an admin component with a title, a description and actions.
|
|
14
14
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminSection.cjs","names":["AdminSection: FC<AdminSectionProps>","useTheme","styles: Record<string, string>","useStyles","Heading: `h${typeof headingLevel}`","content: ReactElement","cx","ComponentPreferencesContext"],"sources":["../../../../../src/components/management/shared/AdminSection.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Preferences, bem, withVendorCSSClassPrefix} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode} from 'react';\nimport useStyles from './AdminSection.styles';\nimport ComponentPreferencesContext from '../../../contexts/I18n/ComponentPreferencesContext';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport {cx} from '../../../styles/emotion';\n\nexport interface AdminSectionProps {\n /**\n * Controls rendered next to the title, such as a create button.\n */\n actions?: ReactNode;\n /**\n * BEM block name of the component that renders the section, used for its CSS class.\n */\n block: string;\n children?: ReactNode;\n className?: string;\n description?: string;\n /**\n * Heading level of the title.\n * @default 2\n */\n headingLevel?: 2 | 3 | 4;\n /**\n * Component-level preferences, applied to this section and everything rendered inside it.\n */\n preferences?: Preferences;\n title?: string;\n}\n\n/**\n * Frames an admin component with a title, a description and actions.\n */\nconst AdminSection: FC<AdminSectionProps> = ({\n actions,\n block,\n children,\n className,\n description,\n headingLevel = 2,\n preferences,\n title,\n}: AdminSectionProps): ReactElement => {\n const {theme, colorScheme} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const Heading: `h${typeof headingLevel}` = `h${headingLevel}`;\n\n const content: ReactElement = (\n <section className={cx(withVendorCSSClassPrefix(bem(block)), styles['root'], className)}>\n {(Boolean(title) || Boolean(actions)) && (\n <div className={cx(withVendorCSSClassPrefix(bem(block, 'header')), styles['header'])}>\n <div>\n {title && <Heading className={styles['title']}>{title}</Heading>}\n {description && <p className={styles['description']}>{description}</p>}\n </div>\n {actions && <div className={styles['actions']}>{actions}</div>}\n </div>\n )}\n {children}\n </section>\n );\n\n return preferences ? (\n <ComponentPreferencesContext.Provider value={preferences}>{content}</ComponentPreferencesContext.Provider>\n ) : (\n content\n );\n};\n\nexport default AdminSection;\n"],"mappings":";;;;;;;;;;;;;;AAqCA,MAAMA,gBAAuC,EAC3C,SACA,OACA,UACA,WACA,aACA,eAAe,GACf,aACA,YACqC;CACrC,MAAM,EAAC,OAAO,gBAAeC,0BAAU;CACvC,MAAMC,SAAiCC,oCAAU,OAAO,YAAY;CACpE,MAAMC,UAAqC,IAAI;CAE/C,MAAMC,UACJ,4CAAC;EAAQ,WAAWC,kGAAgC,MAAM,CAAC,EAAE,OAAO,SAAS,UAAU;cACnF,QAAQ,MAAM,IAAI,QAAQ,QAAQ,KAClC,4CAAC;GAAI,WAAWA,kGAAgC,OAAO,SAAS,CAAC,EAAE,OAAO,UAAU;cAClF,4CAAC,oBACE,SAAS,2CAAC;IAAQ,WAAW,OAAO;cAAW;KAAgB,EAC/D,eAAe,2CAAC;IAAE,WAAW,OAAO;cAAiB;KAAgB,IAClE,EACL,WAAW,2CAAC;IAAI,WAAW,OAAO;cAAa;KAAc;IAC1D,EAEP;GACO;AAGZ,QAAO,cACL,2CAACC,4CAA4B;EAAS,OAAO;YAAc;GAA+C,GAE1G;;AAIJ,2BAAe"}
|
|
@@ -3,7 +3,7 @@ const require_emotion = require('../../../styles/emotion.cjs');
|
|
|
3
3
|
let react = require("react");
|
|
4
4
|
react = require_rolldown_runtime.__toESM(react);
|
|
5
5
|
|
|
6
|
-
//#region src/components/
|
|
6
|
+
//#region src/components/management/shared/AdminSection.styles.ts
|
|
7
7
|
/**
|
|
8
8
|
* Creates the styles shared by the admin components: the section frame and the create forms.
|
|
9
9
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminSection.styles.cjs","names":["unit: string"],"sources":["../../../../../src/components/management/shared/AdminSection.styles.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\nimport {css} from '../../../styles/emotion';\n\n/**\n * Creates the styles shared by the admin components: the section frame and the create forms.\n *\n * @param theme - The theme object containing design tokens.\n * @param colorScheme - The current color scheme, used for memoization.\n * @returns The CSS class names for each part.\n */\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const unit: string = theme.vars.spacing.unit;\n\n return {\n actions: css`\n display: flex;\n flex-wrap: wrap;\n gap: ${unit};\n `,\n description: css`\n margin: calc(${unit} / 2) 0 0;\n color: ${theme.vars.colors.text.secondary};\n font-size: ${theme.vars.typography.fontSizes.sm};\n `,\n form: css`\n display: flex;\n flex-direction: column;\n gap: calc(${unit} * 2);\n max-width: 560px;\n `,\n formActions: css`\n display: flex;\n gap: ${unit};\n justify-content: flex-end;\n `,\n header: css`\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n justify-content: space-between;\n gap: calc(${unit} * 1.5);\n `,\n root: css`\n display: flex;\n flex-direction: column;\n gap: calc(${unit} * 2);\n font-family: ${theme.vars.typography.fontFamily};\n color: ${theme.vars.colors.text.primary};\n `,\n title: css`\n margin: 0;\n font-size: ${theme.vars.typography.fontSizes.xl};\n font-weight: ${theme.vars.typography.fontWeights.normal};\n `,\n };\n }, [theme, colorScheme]);\n\nexport default useStyles;\n"],"mappings":";;;;;;;;;;;;;AAcA,MAAM,aAAa,OAAc,yCACjB;CACZ,MAAMA,OAAe,MAAM,KAAK,QAAQ;AAExC,QAAO;EACL,SAAS,mBAAG;;;eAGH,KAAK;;EAEd,aAAa,mBAAG;uBACC,KAAK;iBACX,MAAM,KAAK,OAAO,KAAK,UAAU;qBAC7B,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,MAAM,mBAAG;;;oBAGK,KAAK;;;EAGnB,aAAa,mBAAG;;eAEP,KAAK;;;EAGd,QAAQ,mBAAG;;;;;oBAKG,KAAK;;EAEnB,MAAM,mBAAG;;;oBAGK,KAAK;uBACF,MAAM,KAAK,WAAW,WAAW;iBACvC,MAAM,KAAK,OAAO,KAAK,QAAQ;;EAE1C,OAAO,mBAAG;;qBAEK,MAAM,KAAK,WAAW,UAAU,GAAG;uBACjC,MAAM,KAAK,WAAW,YAAY,OAAO;;EAE3D;GACA,CAAC,OAAO,YAAY,CAAC;AAE1B,kCAAe"}
|
|
@@ -8,7 +8,7 @@ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
|
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
10
10
|
|
|
11
|
-
//#region src/components/
|
|
11
|
+
//#region src/components/management/shared/ApplicationFormFields.tsx
|
|
12
12
|
/**
|
|
13
13
|
* The general fields and OAuth basics of an application, shared by the create form and the edit form.
|
|
14
14
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationFormFields.cjs","names":["ApplicationFormFields: FC<ApplicationFormFieldsProps>","styles: Record<string, string>","useAdminPartStyles","useTranslation","TextField","APPLICATION_GRANT_TYPES","Checkbox"],"sources":["../../../../../src/components/management/shared/ApplicationFormFields.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {APPLICATION_GRANT_TYPES, Preferences} from '@thunderid/browser';\nimport {ChangeEvent, FC, ReactElement} from 'react';\nimport useAdminPartStyles from './useAdminPartStyles';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Checkbox from '../../primitives/Checkbox/Checkbox';\nimport TextField from '../../primitives/TextField/TextField';\n\n/**\n * The text fields of the application forms.\n */\nexport type ApplicationTextField = 'description' | 'logoUrl' | 'name' | 'redirectUris' | 'url';\n\n/**\n * The values of the application forms. `redirectUris` is the text of the field, URIs separated by\n * commas.\n */\nexport interface ApplicationFormValues {\n description: string;\n grantTypes: string[];\n logoUrl: string;\n name: string;\n publicClient: boolean;\n redirectUris: string;\n url: string;\n}\n\nexport interface ApplicationFormFieldsProps {\n onGrantTypesChange: (grantTypes: string[]) => void;\n onInputChange: (field: ApplicationTextField, value: string) => void;\n /**\n * Shows the public client choice. Omit it where the client type cannot change.\n */\n onPublicClientChange?: (publicClient: boolean) => void;\n preferences?: Preferences;\n values: ApplicationFormValues;\n}\n\n/**\n * The general fields and OAuth basics of an application, shared by the create form and the edit form.\n */\nconst ApplicationFormFields: FC<ApplicationFormFieldsProps> = ({\n onGrantTypesChange,\n onInputChange,\n onPublicClientChange,\n preferences,\n values,\n}: ApplicationFormFieldsProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation(preferences?.i18n);\n\n const text = (field: ApplicationTextField, label: string, extra: {helperText?: string; required?: boolean} = {}) => (\n <TextField\n name={field}\n label={label}\n value={values[field]}\n autoComplete=\"off\"\n onChange={(event: ChangeEvent<HTMLInputElement>): void => onInputChange(field, event.target.value)}\n {...extra}\n />\n );\n\n return (\n <>\n {text('name', t('admin.applications.fields.name'), {required: true})}\n {text('description', t('admin.applications.fields.description'))}\n {text('url', t('admin.applications.fields.url'))}\n {text('logoUrl', t('admin.applications.fields.logo_url'))}\n {text('redirectUris', t('admin.applications.fields.redirect_uris'), {\n helperText: t('admin.applications.fields.redirect_uris_hint'),\n })}\n <fieldset className={styles['row']} style={{border: 0, flexWrap: 'wrap', margin: 0, padding: 0}}>\n <legend className={styles['muted']}>{t('admin.applications.fields.grant_types')}</legend>\n {APPLICATION_GRANT_TYPES.map((grantType: string) => (\n <Checkbox\n key={grantType}\n name={`grantType-${grantType}`}\n label={t(`admin.applications.grant_types.${grantType}`)}\n checked={values.grantTypes.includes(grantType)}\n onChange={(event: ChangeEvent<HTMLInputElement>): void =>\n onGrantTypesChange(\n event.target.checked\n ? [...values.grantTypes, grantType]\n : values.grantTypes.filter((value: string) => value !== grantType),\n )\n }\n />\n ))}\n </fieldset>\n {onPublicClientChange && (\n <Checkbox\n name=\"publicClient\"\n label={t('admin.applications.fields.public_client')}\n checked={values.publicClient}\n onChange={(event: ChangeEvent<HTMLInputElement>): void => onPublicClientChange(event.target.checked)}\n />\n )}\n </>\n );\n};\n\nexport default ApplicationFormFields;\n"],"mappings":";;;;;;;;;;;;;;AA2CA,MAAMA,yBAAyD,EAC7D,oBACA,eACA,sBACA,aACA,aAC8C;CAC9C,MAAMC,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAE7C,MAAM,QAAQ,OAA6B,OAAe,QAAmD,EAAE,KAC7G,2CAACC;EACC,MAAM;EACC;EACP,OAAO,OAAO;EACd,cAAa;EACb,WAAW,UAA+C,cAAc,OAAO,MAAM,OAAO,MAAM;EAClG,GAAI;GACJ;AAGJ,QACE;EACG,KAAK,QAAQ,EAAE,iCAAiC,EAAE,EAAC,UAAU,MAAK,CAAC;EACnE,KAAK,eAAe,EAAE,wCAAwC,CAAC;EAC/D,KAAK,OAAO,EAAE,gCAAgC,CAAC;EAC/C,KAAK,WAAW,EAAE,qCAAqC,CAAC;EACxD,KAAK,gBAAgB,EAAE,0CAA0C,EAAE,EAClE,YAAY,EAAE,+CAA+C,EAC9D,CAAC;EACF,4CAAC;GAAS,WAAW,OAAO;GAAQ,OAAO;IAAC,QAAQ;IAAG,UAAU;IAAQ,QAAQ;IAAG,SAAS;IAAE;cAC7F,2CAAC;IAAO,WAAW,OAAO;cAAW,EAAE,wCAAwC;KAAU,EACxFC,4CAAwB,KAAK,cAC5B,2CAACC;IAEC,MAAM,aAAa;IACnB,OAAO,EAAE,kCAAkC,YAAY;IACvD,SAAS,OAAO,WAAW,SAAS,UAAU;IAC9C,WAAW,UACT,mBACE,MAAM,OAAO,UACT,CAAC,GAAG,OAAO,YAAY,UAAU,GACjC,OAAO,WAAW,QAAQ,UAAkB,UAAU,UAAU,CACrE;MATE,UAWL,CACF;IACO;EACV,wBACC,2CAACA;GACC,MAAK;GACL,OAAO,EAAE,0CAA0C;GACnD,SAAS,OAAO;GAChB,WAAW,UAA+C,qBAAqB,MAAM,OAAO,QAAQ;IACpG;KAEH;;AAIP,oCAAe"}
|
|
@@ -7,7 +7,7 @@ const require_useAdminPartStyles = require('./useAdminPartStyles.cjs');
|
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
9
9
|
|
|
10
|
-
//#region src/components/
|
|
10
|
+
//#region src/components/management/shared/ClientSecretNotice.tsx
|
|
11
11
|
/**
|
|
12
12
|
* Shows a client secret the one time it can be read, masked until revealed, with a copy button.
|
|
13
13
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientSecretNotice.cjs","names":["ClientSecretNotice: FC<ClientSecretNoticeProps>","styles: Record<string, string>","useAdminPartStyles","useTranslation","Alert","CopyableText","Button"],"sources":["../../../../../src/components/management/shared/ClientSecretNotice.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Preferences} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport useAdminPartStyles from './useAdminPartStyles';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Alert from '../../primitives/Alert/Alert';\nimport Button from '../../primitives/Button/Button';\nimport CopyableText from '../../primitives/CopyableText/CopyableText';\n\nexport interface ClientSecretNoticeProps {\n /**\n * Called once the secret has been copied, after which it cannot be read again.\n */\n onDismiss?: () => void;\n preferences?: Preferences;\n secret: string;\n}\n\n/**\n * Shows a client secret the one time it can be read, masked until revealed, with a copy button.\n */\nconst ClientSecretNotice: FC<ClientSecretNoticeProps> = ({\n onDismiss,\n preferences,\n secret,\n}: ClientSecretNoticeProps): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation(preferences?.i18n);\n\n return (\n <div className={styles['row']} style={{alignItems: 'stretch', flexDirection: 'column'}}>\n <Alert variant=\"warning\" role=\"status\">\n {t('admin.applications.secret.notice')}\n </Alert>\n <CopyableText label={t('admin.applications.secret.title')} value={secret} masked />\n {onDismiss && (\n <div className={styles['row']} style={{justifyContent: 'flex-end'}}>\n <Button onClick={onDismiss}>{t('admin.applications.secret.done')}</Button>\n </div>\n )}\n </div>\n );\n};\n\nexport default ClientSecretNotice;\n"],"mappings":";;;;;;;;;;;;;AAuBA,MAAMA,sBAAmD,EACvD,WACA,aACA,aAC2C;CAC3C,MAAMC,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;AAE7C,QACE,4CAAC;EAAI,WAAW,OAAO;EAAQ,OAAO;GAAC,YAAY;GAAW,eAAe;GAAS;;GACpF,2CAACC;IAAM,SAAQ;IAAU,MAAK;cAC3B,EAAE,mCAAmC;KAChC;GACR,2CAACC;IAAa,OAAO,EAAE,kCAAkC;IAAE,OAAO;IAAQ;KAAS;GAClF,aACC,2CAAC;IAAI,WAAW,OAAO;IAAQ,OAAO,EAAC,gBAAgB,YAAW;cAChE,2CAACC;KAAO,SAAS;eAAY,EAAE,iCAAiC;MAAU;KACtE;;GAEJ;;AAIV,iCAAe"}
|
|
@@ -8,7 +8,7 @@ react = require_rolldown_runtime.__toESM(react);
|
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
10
10
|
|
|
11
|
-
//#region src/components/
|
|
11
|
+
//#region src/components/management/shared/IdentityPicker.tsx
|
|
12
12
|
/**
|
|
13
13
|
* Picks one identity of a chosen type and adds it, for example as a group member or a role assignee.
|
|
14
14
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdentityPicker.cjs","names":["styles: Record<string, string>","useAdminPartStyles","useTranslation","options: SelectOption[]","Select","Button"],"sources":["../../../../../src/components/management/shared/IdentityPicker.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {SelectOption} from '@thunderid/browser';\nimport {ChangeEvent, FormEvent, ReactElement, useState} from 'react';\nimport useAdminPartStyles from './useAdminPartStyles';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Button from '../../primitives/Button/Button';\nimport Select from '../../primitives/Select/Select';\n\n/**\n * An identity that can be picked, such as a user, agent or group.\n */\nexport interface IdentityCandidate {\n id: string;\n label: string;\n}\n\nexport interface IdentityPickerProps<TType extends string> {\n /**\n * Label of the add button, already translated.\n */\n addLabel: string;\n /**\n * The identities to choose from, keyed by identity type.\n */\n candidates: Partial<Record<TType, IdentityCandidate[]>>;\n /**\n * Identifiers to leave out, such as current members.\n */\n excludedIds?: string[];\n isSubmitting?: boolean;\n onAdd: (identity: {id: string; type: TType}) => void;\n /**\n * The identity types to choose from, with translated labels.\n */\n types: {label: string; value: TType}[];\n}\n\n/**\n * Picks one identity of a chosen type and adds it, for example as a group member or a role assignee.\n */\nconst IdentityPicker = <TType extends string>({\n addLabel,\n candidates,\n excludedIds = [],\n isSubmitting = false,\n onAdd,\n types,\n}: IdentityPickerProps<TType>): ReactElement => {\n const styles: Record<string, string> = useAdminPartStyles();\n const {t} = useTranslation();\n const [type, setType] = useState<TType>(types[0]?.value);\n const [identityId, setIdentityId] = useState<string>('');\n\n const options: SelectOption[] = (candidates[type] ?? [])\n .filter((candidate: IdentityCandidate) => !excludedIds.includes(candidate.id))\n .map((candidate: IdentityCandidate) => ({label: candidate.label, value: candidate.id}));\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n\n if (identityId) {\n onAdd({id: identityId, type});\n setIdentityId('');\n }\n };\n\n return (\n <form className={styles['row']} onSubmit={handleSubmit} style={{alignItems: 'flex-end'}}>\n <Select\n label={t('admin.common.fields.identity_type')}\n name=\"identityType\"\n value={type}\n options={types}\n onChange={(event: ChangeEvent<HTMLSelectElement>): void => {\n setType(event.target.value as TType);\n setIdentityId('');\n }}\n />\n <Select\n label={t('admin.common.fields.identity')}\n name=\"identity\"\n value={identityId}\n placeholder={t('admin.common.fields.identity_placeholder')}\n emptyText={t('admin.common.fields.identity_empty')}\n options={options}\n onChange={(event: ChangeEvent<HTMLSelectElement>): void => setIdentityId(event.target.value)}\n />\n <Button type=\"submit\" loading={isSubmitting} disabled={!identityId || isSubmitting}>\n {addLabel}\n </Button>\n </form>\n );\n};\n\nexport default IdentityPicker;\n"],"mappings":";;;;;;;;;;;;;;AA0CA,MAAM,kBAAwC,EAC5C,UACA,YACA,cAAc,EAAE,EAChB,eAAe,OACf,OACA,YAC8C;CAC9C,MAAMA,SAAiCC,oCAAoB;CAC3D,MAAM,EAAC,MAAKC,gCAAgB;CAC5B,MAAM,CAAC,MAAM,+BAA2B,MAAM,IAAI,MAAM;CACxD,MAAM,CAAC,YAAY,qCAAkC,GAAG;CAExD,MAAMC,WAA2B,WAAW,SAAS,EAAE,EACpD,QAAQ,cAAiC,CAAC,YAAY,SAAS,UAAU,GAAG,CAAC,CAC7E,KAAK,eAAkC;EAAC,OAAO,UAAU;EAAO,OAAO,UAAU;EAAG,EAAE;CAEzF,MAAM,gBAAgB,UAA4C;AAChE,QAAM,gBAAgB;AAEtB,MAAI,YAAY;AACd,SAAM;IAAC,IAAI;IAAY;IAAK,CAAC;AAC7B,iBAAc,GAAG;;;AAIrB,QACE,4CAAC;EAAK,WAAW,OAAO;EAAQ,UAAU;EAAc,OAAO,EAAC,YAAY,YAAW;;GACrF,2CAACC;IACC,OAAO,EAAE,oCAAoC;IAC7C,MAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW,UAAgD;AACzD,aAAQ,MAAM,OAAO,MAAe;AACpC,mBAAc,GAAG;;KAEnB;GACF,2CAACA;IACC,OAAO,EAAE,+BAA+B;IACxC,MAAK;IACL,OAAO;IACP,aAAa,EAAE,2CAA2C;IAC1D,WAAW,EAAE,qCAAqC;IACzC;IACT,WAAW,UAAgD,cAAc,MAAM,OAAO,MAAM;KAC5F;GACF,2CAACC;IAAO,MAAK;IAAS,SAAS;IAAc,UAAU,CAAC,cAAc;cACnE;KACM;;GACJ;;AAIX,6BAAe"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/components/management/shared/formatTimestamp.ts
|
|
3
|
+
/**
|
|
4
|
+
* Formats an ISO timestamp for display in the user's locale, leaving it as it is when it cannot be read.
|
|
5
|
+
*
|
|
6
|
+
* @param value - The timestamp.
|
|
7
|
+
* @returns The formatted timestamp, or `undefined` when there is none.
|
|
8
|
+
*/
|
|
9
|
+
const formatTimestamp = (value) => {
|
|
10
|
+
if (!value) return;
|
|
11
|
+
const date = new Date(value);
|
|
12
|
+
return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
|
|
13
|
+
};
|
|
14
|
+
var formatTimestamp_default = formatTimestamp;
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
exports.default = formatTimestamp_default;
|
|
18
|
+
//# sourceMappingURL=formatTimestamp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatTimestamp.cjs","names":["date: Date"],"sources":["../../../../../src/components/management/shared/formatTimestamp.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Formats an ISO timestamp for display in the user's locale, leaving it as it is when it cannot be read.\n *\n * @param value - The timestamp.\n * @returns The formatted timestamp, or `undefined` when there is none.\n */\nconst formatTimestamp = (value?: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n const date: Date = new Date(value);\n\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n};\n\nexport default formatTimestamp;\n"],"mappings":";;;;;;;;AASA,MAAM,mBAAmB,UAAuC;AAC9D,KAAI,CAAC,MACH;CAGF,MAAMA,OAAa,IAAI,KAAK,MAAM;AAElC,QAAO,OAAO,MAAM,KAAK,SAAS,CAAC,GAAG,QAAQ,KAAK,gBAAgB;;AAGrE,8BAAe"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_useTheme = require('../../../contexts/Theme/useTheme.cjs');
|
|
2
2
|
const require_AdminParts_styles = require('./AdminParts.styles.cjs');
|
|
3
3
|
|
|
4
|
-
//#region src/components/
|
|
4
|
+
//#region src/components/management/shared/useAdminPartStyles.ts
|
|
5
5
|
/**
|
|
6
6
|
* Returns the shared admin part styles for the active theme.
|
|
7
7
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAdminPartStyles.cjs","names":["useTheme","useStyles"],"sources":["../../../../../src/components/management/shared/useAdminPartStyles.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport useStyles from './AdminParts.styles';\nimport useTheme from '../../../contexts/Theme/useTheme';\n\n/**\n * Returns the shared admin part styles for the active theme.\n *\n * @returns The CSS class names of the admin parts.\n */\nconst useAdminPartStyles = (): Record<string, string> => {\n const {theme, colorScheme} = useTheme();\n\n return useStyles(theme, colorScheme);\n};\n\nexport default useAdminPartStyles;\n"],"mappings":";;;;;;;;;AAWA,MAAM,2BAAmD;CACvD,MAAM,EAAC,OAAO,gBAAeA,0BAAU;AAEvC,QAAOC,kCAAU,OAAO,YAAY;;AAGtC,iCAAe"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_useUser = require('../../../contexts/User/useUser.cjs');
|
|
2
2
|
|
|
3
|
-
//#region src/components/
|
|
3
|
+
//#region src/components/management/shared/useDefaultOuId.ts
|
|
4
4
|
/**
|
|
5
5
|
* Resolves the organization unit a new resource is created in: the one passed in, otherwise the
|
|
6
6
|
* signed-in user's own organization unit.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDefaultOuId.cjs","names":["useUser","fromProfile: unknown"],"sources":["../../../../../src/components/management/shared/useDefaultOuId.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport useUser from '../../../contexts/User/useUser';\n\n/**\n * Resolves the organization unit a new resource is created in: the one passed in, otherwise the\n * signed-in user's own organization unit.\n *\n * @param ouId - The organization unit chosen by the caller.\n * @returns The organization unit identifier, or `undefined` when neither is known.\n */\nconst useDefaultOuId = (ouId?: string): string | undefined => {\n const {profile, flattenedProfile} = useUser();\n const source: Record<string, unknown> = (flattenedProfile ?? profile ?? {}) as Record<string, unknown>;\n const fromProfile: unknown = source['ouId'];\n\n return ouId ?? (typeof fromProfile === 'string' ? fromProfile : undefined);\n};\n\nexport default useDefaultOuId;\n"],"mappings":";;;;;;;;;;AAYA,MAAM,kBAAkB,SAAsC;CAC5D,MAAM,EAAC,SAAS,qBAAoBA,yBAAS;CAE7C,MAAMC,eADmC,oBAAoB,WAAW,EAAE,EACtC;AAEpC,QAAO,SAAS,OAAO,gBAAgB,WAAW,cAAc;;AAGlE,6BAAe"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
|
|
2
|
+
const require_useDefaultOuId = require('./useDefaultOuId.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/components/management/shared/useProjectPlacement.ts
|
|
5
|
+
/**
|
|
6
|
+
* Resolves where a new application or agent is created: the organization unit passed in, otherwise the
|
|
7
|
+
* current project (see `ProjectSwitcher`), otherwise the signed-in user's own organization unit. A
|
|
8
|
+
* project's identifier is not an organization unit's, so it is sent as `projectId`, never as `ouId`.
|
|
9
|
+
*
|
|
10
|
+
* @param ouId - The organization unit chosen by the caller.
|
|
11
|
+
* @returns The placement, empty when nothing is known.
|
|
12
|
+
*/
|
|
13
|
+
const useProjectPlacement = (ouId) => {
|
|
14
|
+
const { currentProject } = require_useThunderID.default();
|
|
15
|
+
const defaultOuId = require_useDefaultOuId.default(ouId);
|
|
16
|
+
if (!ouId && currentProject?.id) return { projectId: currentProject.id };
|
|
17
|
+
return defaultOuId ? { ouId: defaultOuId } : {};
|
|
18
|
+
};
|
|
19
|
+
var useProjectPlacement_default = useProjectPlacement;
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
exports.default = useProjectPlacement_default;
|
|
23
|
+
//# sourceMappingURL=useProjectPlacement.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProjectPlacement.cjs","names":["useThunderID","defaultOuId: string | undefined","useDefaultOuId"],"sources":["../../../../../src/components/management/shared/useProjectPlacement.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport useDefaultOuId from './useDefaultOuId';\nimport useThunderID from '../../../contexts/ThunderID/useThunderID';\n\n/**\n * Where a new application or agent is placed, the two resources the server lets an app place by\n * project.\n */\nexport interface ProjectPlacement {\n /**\n * The organization unit, when the app passed one or no project is chosen.\n */\n ouId?: string;\n /**\n * The current project, when one is chosen and the app passed no organization unit. The server\n * places the resource in the project's root organization unit.\n */\n projectId?: string;\n}\n\n/**\n * Resolves where a new application or agent is created: the organization unit passed in, otherwise the\n * current project (see `ProjectSwitcher`), otherwise the signed-in user's own organization unit. A\n * project's identifier is not an organization unit's, so it is sent as `projectId`, never as `ouId`.\n *\n * @param ouId - The organization unit chosen by the caller.\n * @returns The placement, empty when nothing is known.\n */\nconst useProjectPlacement = (ouId?: string): ProjectPlacement => {\n const {currentProject} = useThunderID();\n const defaultOuId: string | undefined = useDefaultOuId(ouId);\n\n if (!ouId && currentProject?.id) {\n return {projectId: currentProject.id};\n }\n\n return defaultOuId ? {ouId: defaultOuId} : {};\n};\n\nexport default useProjectPlacement;\n"],"mappings":";;;;;;;;;;;;AA8BA,MAAM,uBAAuB,SAAoC;CAC/D,MAAM,EAAC,mBAAkBA,8BAAc;CACvC,MAAMC,cAAkCC,+BAAe,KAAK;AAE5D,KAAI,CAAC,QAAQ,gBAAgB,GAC3B,QAAO,EAAC,WAAW,eAAe,IAAG;AAGvC,QAAO,cAAc,EAAC,MAAM,aAAY,GAAG,EAAE;;AAG/C,kCAAe"}
|
|
@@ -14,8 +14,13 @@ const ThunderIDContext = (0, react.createContext)({
|
|
|
14
14
|
baseUrl: void 0,
|
|
15
15
|
clearSession: () => {},
|
|
16
16
|
clientId: void 0,
|
|
17
|
+
currentOrganizationUnit: null,
|
|
18
|
+
currentProject: null,
|
|
19
|
+
getCurrentOrganizationUnit: () => Promise.resolve(null),
|
|
17
20
|
preferences: void 0,
|
|
21
|
+
switchOrganizationUnit: () => Promise.resolve(void 0),
|
|
18
22
|
scopes: void 0,
|
|
23
|
+
setCurrentProject: () => void 0,
|
|
19
24
|
discovery: { wellKnown: null },
|
|
20
25
|
exchangeToken: null,
|
|
21
26
|
getAccessToken: null,
|