@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.
Files changed (621) hide show
  1. package/dist/ThunderIDReactClient.d.ts.map +1 -1
  2. package/dist/ThunderIDReactClient.js +6 -2
  3. package/dist/ThunderIDReactClient.js.map +1 -1
  4. package/dist/api/account/getAccessibleOrganizationUnits.d.ts +27 -0
  5. package/dist/api/account/getAccessibleOrganizationUnits.d.ts.map +1 -0
  6. package/dist/api/account/getAccessibleOrganizationUnits.js +24 -0
  7. package/dist/api/account/getAccessibleOrganizationUnits.js.map +1 -0
  8. package/dist/cjs/ThunderIDReactClient.cjs +6 -2
  9. package/dist/cjs/ThunderIDReactClient.cjs.map +1 -1
  10. package/dist/cjs/api/account/getAccessibleOrganizationUnits.cjs +26 -0
  11. package/dist/cjs/api/account/getAccessibleOrganizationUnits.cjs.map +1 -0
  12. package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.cjs +214 -0
  13. package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.cjs.map +1 -0
  14. package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.cjs +184 -0
  15. package/dist/cjs/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.cjs.map +1 -0
  16. package/dist/cjs/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.cjs +139 -0
  17. package/dist/cjs/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.cjs.map +1 -0
  18. package/dist/cjs/components/auth/SignIn/SignIn.cjs +23 -20
  19. package/dist/cjs/components/auth/SignIn/SignIn.cjs.map +1 -1
  20. package/dist/cjs/components/auth/SignUp/BaseSignUp.cjs +13 -9
  21. package/dist/cjs/components/auth/SignUp/BaseSignUp.cjs.map +1 -1
  22. package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs +2 -2
  23. package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs.map +1 -1
  24. package/dist/cjs/components/common/LanguageSwitcher/BaseLanguageSwitcher.cjs +1 -1
  25. package/dist/cjs/components/{admin → management}/AgentCreate/AgentCreate.cjs +8 -7
  26. package/dist/cjs/components/management/AgentCreate/AgentCreate.cjs.map +1 -0
  27. package/dist/cjs/components/{admin → management}/AgentCreate/BaseAgentCreate.cjs +1 -1
  28. package/dist/cjs/components/management/AgentCreate/BaseAgentCreate.cjs.map +1 -0
  29. package/dist/cjs/components/{admin → management}/AgentDetails/AgentDetails.cjs +1 -1
  30. package/dist/cjs/components/management/AgentDetails/AgentDetails.cjs.map +1 -0
  31. package/dist/cjs/components/{admin → management}/AgentDetails/BaseAgentDetails.cjs +1 -1
  32. package/dist/cjs/components/management/AgentDetails/BaseAgentDetails.cjs.map +1 -0
  33. package/dist/cjs/components/{admin → management}/AgentList/AgentList.cjs +11 -6
  34. package/dist/cjs/components/management/AgentList/AgentList.cjs.map +1 -0
  35. package/dist/cjs/components/{admin → management}/AgentList/BaseAgentList.cjs +1 -1
  36. package/dist/cjs/components/management/AgentList/BaseAgentList.cjs.map +1 -0
  37. package/dist/cjs/components/{admin → management}/ApplicationCreate/ApplicationCreate.cjs +10 -5
  38. package/dist/cjs/components/management/ApplicationCreate/ApplicationCreate.cjs.map +1 -0
  39. package/dist/cjs/components/{admin → management}/ApplicationCreate/BaseApplicationCreate.cjs +1 -1
  40. package/dist/cjs/components/management/ApplicationCreate/BaseApplicationCreate.cjs.map +1 -0
  41. package/dist/cjs/components/{admin → management}/ApplicationDetails/ApplicationDetails.cjs +1 -1
  42. package/dist/cjs/components/management/ApplicationDetails/ApplicationDetails.cjs.map +1 -0
  43. package/dist/cjs/components/{admin → management}/ApplicationDetails/BaseApplicationDetails.cjs +1 -1
  44. package/dist/cjs/components/management/ApplicationDetails/BaseApplicationDetails.cjs.map +1 -0
  45. package/dist/cjs/components/{admin → management}/ApplicationList/ApplicationList.cjs +9 -4
  46. package/dist/cjs/components/management/ApplicationList/ApplicationList.cjs.map +1 -0
  47. package/dist/cjs/components/{admin → management}/ApplicationList/BaseApplicationList.cjs +1 -1
  48. package/dist/cjs/components/management/ApplicationList/BaseApplicationList.cjs.map +1 -0
  49. package/dist/cjs/components/{admin → management}/GroupCreate/BaseGroupCreate.cjs +1 -1
  50. package/dist/cjs/components/management/GroupCreate/BaseGroupCreate.cjs.map +1 -0
  51. package/dist/cjs/components/{admin → management}/GroupCreate/GroupCreate.cjs +1 -1
  52. package/dist/cjs/components/management/GroupCreate/GroupCreate.cjs.map +1 -0
  53. package/dist/cjs/components/management/GroupDetails/BaseGroupDetails.cjs +86 -0
  54. package/dist/cjs/components/management/GroupDetails/BaseGroupDetails.cjs.map +1 -0
  55. package/dist/cjs/components/management/GroupDetails/GroupDetails.cjs +60 -0
  56. package/dist/cjs/components/management/GroupDetails/GroupDetails.cjs.map +1 -0
  57. package/dist/cjs/components/{admin → management}/GroupList/BaseGroupList.cjs +1 -1
  58. package/dist/cjs/components/management/GroupList/BaseGroupList.cjs.map +1 -0
  59. package/dist/cjs/components/{admin → management}/GroupList/GroupList.cjs +1 -1
  60. package/dist/cjs/components/management/GroupList/GroupList.cjs.map +1 -0
  61. package/dist/cjs/components/{admin → management}/GroupMembers/BaseGroupMembers.cjs +1 -1
  62. package/dist/cjs/components/management/GroupMembers/BaseGroupMembers.cjs.map +1 -0
  63. package/dist/cjs/components/{admin → management}/GroupMembers/GroupMembers.cjs +1 -1
  64. package/dist/cjs/components/management/GroupMembers/GroupMembers.cjs.map +1 -0
  65. package/dist/cjs/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.cjs +140 -0
  66. package/dist/cjs/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.cjs.map +1 -0
  67. package/dist/cjs/components/management/OrganizationUnitCreate/OrganizationUnitCreate.cjs +83 -0
  68. package/dist/cjs/components/management/OrganizationUnitCreate/OrganizationUnitCreate.cjs.map +1 -0
  69. package/dist/cjs/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.cjs +276 -0
  70. package/dist/cjs/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.cjs.map +1 -0
  71. package/dist/cjs/components/management/OrganizationUnitDetails/OrganizationUnitDetails.cjs +142 -0
  72. package/dist/cjs/components/management/OrganizationUnitDetails/OrganizationUnitDetails.cjs.map +1 -0
  73. package/dist/cjs/components/management/OrganizationUnitList/BaseOrganizationUnitList.cjs +78 -0
  74. package/dist/cjs/components/management/OrganizationUnitList/BaseOrganizationUnitList.cjs.map +1 -0
  75. package/dist/cjs/components/management/OrganizationUnitList/OrganizationUnitList.cjs +69 -0
  76. package/dist/cjs/components/management/OrganizationUnitList/OrganizationUnitList.cjs.map +1 -0
  77. package/dist/cjs/components/management/ProjectCreate/BaseProjectCreate.cjs +116 -0
  78. package/dist/cjs/components/management/ProjectCreate/BaseProjectCreate.cjs.map +1 -0
  79. package/dist/cjs/components/management/ProjectCreate/ProjectCreate.cjs +43 -0
  80. package/dist/cjs/components/management/ProjectCreate/ProjectCreate.cjs.map +1 -0
  81. package/dist/cjs/components/management/ProjectDetails/BaseProjectDetails.cjs +172 -0
  82. package/dist/cjs/components/management/ProjectDetails/BaseProjectDetails.cjs.map +1 -0
  83. package/dist/cjs/components/management/ProjectDetails/ProjectDetails.cjs +68 -0
  84. package/dist/cjs/components/management/ProjectDetails/ProjectDetails.cjs.map +1 -0
  85. package/dist/cjs/components/management/ProjectList/BaseProjectList.cjs +78 -0
  86. package/dist/cjs/components/management/ProjectList/BaseProjectList.cjs.map +1 -0
  87. package/dist/cjs/components/management/ProjectList/ProjectList.cjs +51 -0
  88. package/dist/cjs/components/management/ProjectList/ProjectList.cjs.map +1 -0
  89. package/dist/cjs/components/management/ProjectSwitcher/BaseProjectSwitcher.cjs +58 -0
  90. package/dist/cjs/components/management/ProjectSwitcher/BaseProjectSwitcher.cjs.map +1 -0
  91. package/dist/cjs/components/management/ProjectSwitcher/ProjectSwitcher.cjs +72 -0
  92. package/dist/cjs/components/management/ProjectSwitcher/ProjectSwitcher.cjs.map +1 -0
  93. package/dist/cjs/components/{admin → management}/RoleAssignments/BaseRoleAssignments.cjs +1 -1
  94. package/dist/cjs/components/management/RoleAssignments/BaseRoleAssignments.cjs.map +1 -0
  95. package/dist/cjs/components/{admin → management}/RoleAssignments/RoleAssignments.cjs +1 -1
  96. package/dist/cjs/components/management/RoleAssignments/RoleAssignments.cjs.map +1 -0
  97. package/dist/cjs/components/{admin → management}/RoleCreate/BaseRoleCreate.cjs +1 -1
  98. package/dist/cjs/components/management/RoleCreate/BaseRoleCreate.cjs.map +1 -0
  99. package/dist/cjs/components/{admin → management}/RoleCreate/RoleCreate.cjs +1 -1
  100. package/dist/cjs/components/management/RoleCreate/RoleCreate.cjs.map +1 -0
  101. package/dist/cjs/components/management/RoleDetails/BaseRoleDetails.cjs +87 -0
  102. package/dist/cjs/components/management/RoleDetails/BaseRoleDetails.cjs.map +1 -0
  103. package/dist/cjs/components/management/RoleDetails/RoleDetails.cjs +68 -0
  104. package/dist/cjs/components/management/RoleDetails/RoleDetails.cjs.map +1 -0
  105. package/dist/cjs/components/{admin → management}/RoleList/BaseRoleList.cjs +1 -1
  106. package/dist/cjs/components/management/RoleList/BaseRoleList.cjs.map +1 -0
  107. package/dist/cjs/components/{admin → management}/RoleList/RoleList.cjs +1 -1
  108. package/dist/cjs/components/management/RoleList/RoleList.cjs.map +1 -0
  109. package/dist/cjs/components/management/RolePermissions/BaseRolePermissions.cjs +181 -0
  110. package/dist/cjs/components/management/RolePermissions/BaseRolePermissions.cjs.map +1 -0
  111. package/dist/cjs/components/management/RolePermissions/RolePermissions.cjs +112 -0
  112. package/dist/cjs/components/management/RolePermissions/RolePermissions.cjs.map +1 -0
  113. package/dist/cjs/components/management/SharingPolicies/BaseSharingPolicies.cjs +308 -0
  114. package/dist/cjs/components/management/SharingPolicies/BaseSharingPolicies.cjs.map +1 -0
  115. package/dist/cjs/components/management/SharingPolicies/SharingPolicies.cjs +126 -0
  116. package/dist/cjs/components/management/SharingPolicies/SharingPolicies.cjs.map +1 -0
  117. package/dist/cjs/components/{admin → management}/UserCreate/BaseUserCreate.cjs +1 -1
  118. package/dist/cjs/components/management/UserCreate/BaseUserCreate.cjs.map +1 -0
  119. package/dist/cjs/components/{admin → management}/UserCreate/UserCreate.cjs +1 -1
  120. package/dist/cjs/components/management/UserCreate/UserCreate.cjs.map +1 -0
  121. package/dist/cjs/components/{admin → management}/UserCreate/userCreateFields.cjs +1 -1
  122. package/dist/cjs/components/management/UserCreate/userCreateFields.cjs.map +1 -0
  123. package/dist/cjs/components/{admin → management}/UserDetails/BaseUserDetails.cjs +1 -1
  124. package/dist/cjs/components/management/UserDetails/BaseUserDetails.cjs.map +1 -0
  125. package/dist/cjs/components/{admin → management}/UserDetails/UserDetails.cjs +1 -1
  126. package/dist/cjs/components/management/UserDetails/UserDetails.cjs.map +1 -0
  127. package/dist/cjs/components/{admin → management}/UserList/BaseUserList.cjs +1 -1
  128. package/dist/cjs/components/management/UserList/BaseUserList.cjs.map +1 -0
  129. package/dist/cjs/components/{admin → management}/UserList/UserList.cjs +1 -1
  130. package/dist/cjs/components/management/UserList/UserList.cjs.map +1 -0
  131. package/dist/cjs/components/{admin → management}/shared/AccountLifecycleParts.cjs +1 -1
  132. package/dist/cjs/components/management/shared/AccountLifecycleParts.cjs.map +1 -0
  133. package/dist/cjs/components/{admin → management}/shared/AdminParts.cjs +1 -1
  134. package/dist/cjs/components/management/shared/AdminParts.cjs.map +1 -0
  135. package/dist/cjs/components/{admin → management}/shared/AdminParts.styles.cjs +1 -1
  136. package/dist/cjs/components/management/shared/AdminParts.styles.cjs.map +1 -0
  137. package/dist/cjs/components/{admin → management}/shared/AdminSearch.cjs +1 -1
  138. package/dist/cjs/components/management/shared/AdminSearch.cjs.map +1 -0
  139. package/dist/cjs/components/{admin → management}/shared/AdminSection.cjs +1 -1
  140. package/dist/cjs/components/management/shared/AdminSection.cjs.map +1 -0
  141. package/dist/cjs/components/{admin → management}/shared/AdminSection.styles.cjs +1 -1
  142. package/dist/cjs/components/management/shared/AdminSection.styles.cjs.map +1 -0
  143. package/dist/cjs/components/{admin → management}/shared/ApplicationFormFields.cjs +1 -1
  144. package/dist/cjs/components/management/shared/ApplicationFormFields.cjs.map +1 -0
  145. package/dist/cjs/components/{admin → management}/shared/ClientSecretNotice.cjs +1 -1
  146. package/dist/cjs/components/management/shared/ClientSecretNotice.cjs.map +1 -0
  147. package/dist/cjs/components/{admin → management}/shared/IdentityPicker.cjs +1 -1
  148. package/dist/cjs/components/management/shared/IdentityPicker.cjs.map +1 -0
  149. package/dist/cjs/components/management/shared/formatTimestamp.cjs +18 -0
  150. package/dist/cjs/components/management/shared/formatTimestamp.cjs.map +1 -0
  151. package/dist/cjs/components/{admin → management}/shared/useAdminPartStyles.cjs +1 -1
  152. package/dist/cjs/components/management/shared/useAdminPartStyles.cjs.map +1 -0
  153. package/dist/cjs/components/{admin → management}/shared/useDefaultOuId.cjs +1 -1
  154. package/dist/cjs/components/management/shared/useDefaultOuId.cjs.map +1 -0
  155. package/dist/cjs/components/management/shared/useProjectPlacement.cjs +23 -0
  156. package/dist/cjs/components/management/shared/useProjectPlacement.cjs.map +1 -0
  157. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs +5 -0
  158. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs.map +1 -1
  159. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +27 -1
  160. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
  161. package/dist/cjs/contexts/ThunderID/useCurrentProjectState.cjs +33 -0
  162. package/dist/cjs/contexts/ThunderID/useCurrentProjectState.cjs.map +1 -0
  163. package/dist/cjs/hooks/management/useManagementEndpoint.cjs.map +1 -1
  164. package/dist/cjs/index.cjs +377 -33
  165. package/dist/cjs/utils/flowTransformer.cjs +9 -0
  166. package/dist/cjs/utils/flowTransformer.cjs.map +1 -1
  167. package/dist/cjs/utils/getOrganizationUnitSwitchErrorKey.cjs +24 -0
  168. package/dist/cjs/utils/getOrganizationUnitSwitchErrorKey.cjs.map +1 -0
  169. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.d.ts +85 -0
  170. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.d.ts.map +1 -0
  171. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.js +209 -0
  172. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.js.map +1 -0
  173. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.d.ts +11 -0
  174. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.d.ts.map +1 -0
  175. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.js +184 -0
  176. package/dist/components/account/OrganizationUnitSwitcher/BaseOrganizationUnitSwitcher.styles.js.map +1 -0
  177. package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.d.ts +54 -0
  178. package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.d.ts.map +1 -0
  179. package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.js +135 -0
  180. package/dist/components/account/OrganizationUnitSwitcher/OrganizationUnitSwitcher.js.map +1 -0
  181. package/dist/components/auth/SignIn/SignIn.d.ts +5 -0
  182. package/dist/components/auth/SignIn/SignIn.d.ts.map +1 -1
  183. package/dist/components/auth/SignIn/SignIn.js +25 -22
  184. package/dist/components/auth/SignIn/SignIn.js.map +1 -1
  185. package/dist/components/auth/SignUp/BaseSignUp.d.ts.map +1 -1
  186. package/dist/components/auth/SignUp/BaseSignUp.js +14 -10
  187. package/dist/components/auth/SignUp/BaseSignUp.js.map +1 -1
  188. package/dist/components/auth/flow/AuthOptionFactory.js +2 -2
  189. package/dist/components/auth/flow/AuthOptionFactory.js.map +1 -1
  190. package/dist/components/common/LanguageSwitcher/BaseLanguageSwitcher.js +1 -1
  191. package/dist/components/{admin → management}/AgentCreate/AgentCreate.d.ts +2 -1
  192. package/dist/components/management/AgentCreate/AgentCreate.d.ts.map +1 -0
  193. package/dist/components/{admin → management}/AgentCreate/AgentCreate.js +8 -7
  194. package/dist/components/management/AgentCreate/AgentCreate.js.map +1 -0
  195. package/dist/components/management/AgentCreate/BaseAgentCreate.d.ts.map +1 -0
  196. package/dist/components/{admin → management}/AgentCreate/BaseAgentCreate.js +1 -1
  197. package/dist/components/management/AgentCreate/BaseAgentCreate.js.map +1 -0
  198. package/dist/components/management/AgentDetails/AgentDetails.d.ts.map +1 -0
  199. package/dist/components/{admin → management}/AgentDetails/AgentDetails.js +1 -1
  200. package/dist/components/management/AgentDetails/AgentDetails.js.map +1 -0
  201. package/dist/components/management/AgentDetails/BaseAgentDetails.d.ts.map +1 -0
  202. package/dist/components/{admin → management}/AgentDetails/BaseAgentDetails.js +1 -1
  203. package/dist/components/management/AgentDetails/BaseAgentDetails.js.map +1 -0
  204. package/dist/components/{admin → management}/AgentList/AgentList.d.ts +7 -1
  205. package/dist/components/management/AgentList/AgentList.d.ts.map +1 -0
  206. package/dist/components/{admin → management}/AgentList/AgentList.js +11 -6
  207. package/dist/components/management/AgentList/AgentList.js.map +1 -0
  208. package/dist/components/management/AgentList/BaseAgentList.d.ts.map +1 -0
  209. package/dist/components/{admin → management}/AgentList/BaseAgentList.js +1 -1
  210. package/dist/components/management/AgentList/BaseAgentList.js.map +1 -0
  211. package/dist/components/{admin → management}/ApplicationCreate/ApplicationCreate.d.ts +2 -1
  212. package/dist/components/management/ApplicationCreate/ApplicationCreate.d.ts.map +1 -0
  213. package/dist/components/{admin → management}/ApplicationCreate/ApplicationCreate.js +10 -5
  214. package/dist/components/management/ApplicationCreate/ApplicationCreate.js.map +1 -0
  215. package/dist/components/management/ApplicationCreate/BaseApplicationCreate.d.ts.map +1 -0
  216. package/dist/components/{admin → management}/ApplicationCreate/BaseApplicationCreate.js +1 -1
  217. package/dist/components/management/ApplicationCreate/BaseApplicationCreate.js.map +1 -0
  218. package/dist/components/management/ApplicationDetails/ApplicationDetails.d.ts.map +1 -0
  219. package/dist/components/{admin → management}/ApplicationDetails/ApplicationDetails.js +1 -1
  220. package/dist/components/management/ApplicationDetails/ApplicationDetails.js.map +1 -0
  221. package/dist/components/management/ApplicationDetails/BaseApplicationDetails.d.ts.map +1 -0
  222. package/dist/components/{admin → management}/ApplicationDetails/BaseApplicationDetails.js +1 -1
  223. package/dist/components/management/ApplicationDetails/BaseApplicationDetails.js.map +1 -0
  224. package/dist/components/{admin → management}/ApplicationList/ApplicationList.d.ts +7 -1
  225. package/dist/components/management/ApplicationList/ApplicationList.d.ts.map +1 -0
  226. package/dist/components/{admin → management}/ApplicationList/ApplicationList.js +9 -4
  227. package/dist/components/management/ApplicationList/ApplicationList.js.map +1 -0
  228. package/dist/components/management/ApplicationList/BaseApplicationList.d.ts.map +1 -0
  229. package/dist/components/{admin → management}/ApplicationList/BaseApplicationList.js +1 -1
  230. package/dist/components/management/ApplicationList/BaseApplicationList.js.map +1 -0
  231. package/dist/components/management/GroupCreate/BaseGroupCreate.d.ts.map +1 -0
  232. package/dist/components/{admin → management}/GroupCreate/BaseGroupCreate.js +1 -1
  233. package/dist/components/management/GroupCreate/BaseGroupCreate.js.map +1 -0
  234. package/dist/components/management/GroupCreate/GroupCreate.d.ts.map +1 -0
  235. package/dist/components/{admin → management}/GroupCreate/GroupCreate.js +1 -1
  236. package/dist/components/management/GroupCreate/GroupCreate.js.map +1 -0
  237. package/dist/components/management/GroupDetails/BaseGroupDetails.d.ts +47 -0
  238. package/dist/components/management/GroupDetails/BaseGroupDetails.d.ts.map +1 -0
  239. package/dist/components/management/GroupDetails/BaseGroupDetails.js +84 -0
  240. package/dist/components/management/GroupDetails/BaseGroupDetails.js.map +1 -0
  241. package/dist/components/management/GroupDetails/GroupDetails.d.ts +37 -0
  242. package/dist/components/management/GroupDetails/GroupDetails.d.ts.map +1 -0
  243. package/dist/components/management/GroupDetails/GroupDetails.js +57 -0
  244. package/dist/components/management/GroupDetails/GroupDetails.js.map +1 -0
  245. package/dist/components/management/GroupList/BaseGroupList.d.ts.map +1 -0
  246. package/dist/components/{admin → management}/GroupList/BaseGroupList.js +1 -1
  247. package/dist/components/management/GroupList/BaseGroupList.js.map +1 -0
  248. package/dist/components/management/GroupList/GroupList.d.ts.map +1 -0
  249. package/dist/components/{admin → management}/GroupList/GroupList.js +1 -1
  250. package/dist/components/management/GroupList/GroupList.js.map +1 -0
  251. package/dist/components/management/GroupMembers/BaseGroupMembers.d.ts.map +1 -0
  252. package/dist/components/{admin → management}/GroupMembers/BaseGroupMembers.js +1 -1
  253. package/dist/components/management/GroupMembers/BaseGroupMembers.js.map +1 -0
  254. package/dist/components/management/GroupMembers/GroupMembers.d.ts.map +1 -0
  255. package/dist/components/{admin → management}/GroupMembers/GroupMembers.js +1 -1
  256. package/dist/components/management/GroupMembers/GroupMembers.js.map +1 -0
  257. package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.d.ts +85 -0
  258. package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.d.ts.map +1 -0
  259. package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.js +137 -0
  260. package/dist/components/management/OrganizationUnitCreate/BaseOrganizationUnitCreate.js.map +1 -0
  261. package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.d.ts +21 -0
  262. package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.d.ts.map +1 -0
  263. package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.js +79 -0
  264. package/dist/components/management/OrganizationUnitCreate/OrganizationUnitCreate.js.map +1 -0
  265. package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.d.ts +105 -0
  266. package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.d.ts.map +1 -0
  267. package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.js +273 -0
  268. package/dist/components/management/OrganizationUnitDetails/BaseOrganizationUnitDetails.js.map +1 -0
  269. package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.d.ts +42 -0
  270. package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.d.ts.map +1 -0
  271. package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.js +139 -0
  272. package/dist/components/management/OrganizationUnitDetails/OrganizationUnitDetails.js.map +1 -0
  273. package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.d.ts +54 -0
  274. package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.d.ts.map +1 -0
  275. package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.js +76 -0
  276. package/dist/components/management/OrganizationUnitList/BaseOrganizationUnitList.js.map +1 -0
  277. package/dist/components/management/OrganizationUnitList/OrganizationUnitList.d.ts +19 -0
  278. package/dist/components/management/OrganizationUnitList/OrganizationUnitList.d.ts.map +1 -0
  279. package/dist/components/management/OrganizationUnitList/OrganizationUnitList.js +65 -0
  280. package/dist/components/management/OrganizationUnitList/OrganizationUnitList.js.map +1 -0
  281. package/dist/components/management/ProjectCreate/BaseProjectCreate.d.ts +60 -0
  282. package/dist/components/management/ProjectCreate/BaseProjectCreate.d.ts.map +1 -0
  283. package/dist/components/management/ProjectCreate/BaseProjectCreate.js +113 -0
  284. package/dist/components/management/ProjectCreate/BaseProjectCreate.js.map +1 -0
  285. package/dist/components/management/ProjectCreate/ProjectCreate.d.ts +20 -0
  286. package/dist/components/management/ProjectCreate/ProjectCreate.d.ts.map +1 -0
  287. package/dist/components/management/ProjectCreate/ProjectCreate.js +40 -0
  288. package/dist/components/management/ProjectCreate/ProjectCreate.js.map +1 -0
  289. package/dist/components/management/ProjectDetails/BaseProjectDetails.d.ts +60 -0
  290. package/dist/components/management/ProjectDetails/BaseProjectDetails.d.ts.map +1 -0
  291. package/dist/components/management/ProjectDetails/BaseProjectDetails.js +169 -0
  292. package/dist/components/management/ProjectDetails/BaseProjectDetails.js.map +1 -0
  293. package/dist/components/management/ProjectDetails/ProjectDetails.d.ts +36 -0
  294. package/dist/components/management/ProjectDetails/ProjectDetails.d.ts.map +1 -0
  295. package/dist/components/management/ProjectDetails/ProjectDetails.js +65 -0
  296. package/dist/components/management/ProjectDetails/ProjectDetails.js.map +1 -0
  297. package/dist/components/management/ProjectList/BaseProjectList.d.ts +53 -0
  298. package/dist/components/management/ProjectList/BaseProjectList.d.ts.map +1 -0
  299. package/dist/components/management/ProjectList/BaseProjectList.js +76 -0
  300. package/dist/components/management/ProjectList/BaseProjectList.js.map +1 -0
  301. package/dist/components/management/ProjectList/ProjectList.d.ts +14 -0
  302. package/dist/components/management/ProjectList/ProjectList.d.ts.map +1 -0
  303. package/dist/components/management/ProjectList/ProjectList.js +47 -0
  304. package/dist/components/management/ProjectList/ProjectList.js.map +1 -0
  305. package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.d.ts +69 -0
  306. package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.d.ts.map +1 -0
  307. package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.js +55 -0
  308. package/dist/components/management/ProjectSwitcher/BaseProjectSwitcher.js.map +1 -0
  309. package/dist/components/management/ProjectSwitcher/ProjectSwitcher.d.ts +25 -0
  310. package/dist/components/management/ProjectSwitcher/ProjectSwitcher.d.ts.map +1 -0
  311. package/dist/components/management/ProjectSwitcher/ProjectSwitcher.js +68 -0
  312. package/dist/components/management/ProjectSwitcher/ProjectSwitcher.js.map +1 -0
  313. package/dist/components/management/RoleAssignments/BaseRoleAssignments.d.ts.map +1 -0
  314. package/dist/components/{admin → management}/RoleAssignments/BaseRoleAssignments.js +1 -1
  315. package/dist/components/management/RoleAssignments/BaseRoleAssignments.js.map +1 -0
  316. package/dist/components/management/RoleAssignments/RoleAssignments.d.ts.map +1 -0
  317. package/dist/components/{admin → management}/RoleAssignments/RoleAssignments.js +1 -1
  318. package/dist/components/management/RoleAssignments/RoleAssignments.js.map +1 -0
  319. package/dist/components/management/RoleCreate/BaseRoleCreate.d.ts.map +1 -0
  320. package/dist/components/{admin → management}/RoleCreate/BaseRoleCreate.js +1 -1
  321. package/dist/components/management/RoleCreate/BaseRoleCreate.js.map +1 -0
  322. package/dist/components/management/RoleCreate/RoleCreate.d.ts.map +1 -0
  323. package/dist/components/{admin → management}/RoleCreate/RoleCreate.js +1 -1
  324. package/dist/components/management/RoleCreate/RoleCreate.js.map +1 -0
  325. package/dist/components/management/RoleDetails/BaseRoleDetails.d.ts +51 -0
  326. package/dist/components/management/RoleDetails/BaseRoleDetails.d.ts.map +1 -0
  327. package/dist/components/management/RoleDetails/BaseRoleDetails.js +85 -0
  328. package/dist/components/management/RoleDetails/BaseRoleDetails.js.map +1 -0
  329. package/dist/components/management/RoleDetails/RoleDetails.d.ts +39 -0
  330. package/dist/components/management/RoleDetails/RoleDetails.d.ts.map +1 -0
  331. package/dist/components/management/RoleDetails/RoleDetails.js +65 -0
  332. package/dist/components/management/RoleDetails/RoleDetails.js.map +1 -0
  333. package/dist/components/management/RoleList/BaseRoleList.d.ts.map +1 -0
  334. package/dist/components/{admin → management}/RoleList/BaseRoleList.js +1 -1
  335. package/dist/components/management/RoleList/BaseRoleList.js.map +1 -0
  336. package/dist/components/management/RoleList/RoleList.d.ts.map +1 -0
  337. package/dist/components/{admin → management}/RoleList/RoleList.js +1 -1
  338. package/dist/components/management/RoleList/RoleList.js.map +1 -0
  339. package/dist/components/management/RolePermissions/BaseRolePermissions.d.ts +104 -0
  340. package/dist/components/management/RolePermissions/BaseRolePermissions.d.ts.map +1 -0
  341. package/dist/components/management/RolePermissions/BaseRolePermissions.js +178 -0
  342. package/dist/components/management/RolePermissions/BaseRolePermissions.js.map +1 -0
  343. package/dist/components/management/RolePermissions/RolePermissions.d.ts +29 -0
  344. package/dist/components/management/RolePermissions/RolePermissions.d.ts.map +1 -0
  345. package/dist/components/management/RolePermissions/RolePermissions.js +108 -0
  346. package/dist/components/management/RolePermissions/RolePermissions.js.map +1 -0
  347. package/dist/components/management/SharingPolicies/BaseSharingPolicies.d.ts +124 -0
  348. package/dist/components/management/SharingPolicies/BaseSharingPolicies.d.ts.map +1 -0
  349. package/dist/components/management/SharingPolicies/BaseSharingPolicies.js +304 -0
  350. package/dist/components/management/SharingPolicies/BaseSharingPolicies.js.map +1 -0
  351. package/dist/components/management/SharingPolicies/SharingPolicies.d.ts +36 -0
  352. package/dist/components/management/SharingPolicies/SharingPolicies.d.ts.map +1 -0
  353. package/dist/components/management/SharingPolicies/SharingPolicies.js +122 -0
  354. package/dist/components/management/SharingPolicies/SharingPolicies.js.map +1 -0
  355. package/dist/components/management/UserCreate/BaseUserCreate.d.ts.map +1 -0
  356. package/dist/components/{admin → management}/UserCreate/BaseUserCreate.js +1 -1
  357. package/dist/components/management/UserCreate/BaseUserCreate.js.map +1 -0
  358. package/dist/components/management/UserCreate/UserCreate.d.ts.map +1 -0
  359. package/dist/components/{admin → management}/UserCreate/UserCreate.js +1 -1
  360. package/dist/components/management/UserCreate/UserCreate.js.map +1 -0
  361. package/dist/components/management/UserCreate/userCreateFields.d.ts.map +1 -0
  362. package/dist/components/{admin → management}/UserCreate/userCreateFields.js +1 -1
  363. package/dist/components/management/UserCreate/userCreateFields.js.map +1 -0
  364. package/dist/components/management/UserDetails/BaseUserDetails.d.ts.map +1 -0
  365. package/dist/components/{admin → management}/UserDetails/BaseUserDetails.js +1 -1
  366. package/dist/components/management/UserDetails/BaseUserDetails.js.map +1 -0
  367. package/dist/components/management/UserDetails/UserDetails.d.ts.map +1 -0
  368. package/dist/components/{admin → management}/UserDetails/UserDetails.js +1 -1
  369. package/dist/components/management/UserDetails/UserDetails.js.map +1 -0
  370. package/dist/components/management/UserList/BaseUserList.d.ts.map +1 -0
  371. package/dist/components/{admin → management}/UserList/BaseUserList.js +1 -1
  372. package/dist/components/management/UserList/BaseUserList.js.map +1 -0
  373. package/dist/components/management/UserList/UserList.d.ts.map +1 -0
  374. package/dist/components/{admin → management}/UserList/UserList.js +1 -1
  375. package/dist/components/management/UserList/UserList.js.map +1 -0
  376. package/dist/components/management/shared/AccountLifecycleParts.d.ts.map +1 -0
  377. package/dist/components/{admin → management}/shared/AccountLifecycleParts.js +1 -1
  378. package/dist/components/management/shared/AccountLifecycleParts.js.map +1 -0
  379. package/dist/components/management/shared/AdminListRenderProps.d.ts.map +1 -0
  380. package/dist/components/management/shared/AdminParts.d.ts.map +1 -0
  381. package/dist/components/{admin → management}/shared/AdminParts.js +1 -1
  382. package/dist/components/management/shared/AdminParts.js.map +1 -0
  383. package/dist/components/management/shared/AdminParts.styles.d.ts.map +1 -0
  384. package/dist/components/{admin → management}/shared/AdminParts.styles.js +1 -1
  385. package/dist/components/management/shared/AdminParts.styles.js.map +1 -0
  386. package/dist/components/management/shared/AdminSearch.d.ts.map +1 -0
  387. package/dist/components/{admin → management}/shared/AdminSearch.js +1 -1
  388. package/dist/components/management/shared/AdminSearch.js.map +1 -0
  389. package/dist/components/management/shared/AdminSection.d.ts.map +1 -0
  390. package/dist/components/{admin → management}/shared/AdminSection.js +1 -1
  391. package/dist/components/management/shared/AdminSection.js.map +1 -0
  392. package/dist/components/management/shared/AdminSection.styles.d.ts.map +1 -0
  393. package/dist/components/{admin → management}/shared/AdminSection.styles.js +1 -1
  394. package/dist/components/management/shared/AdminSection.styles.js.map +1 -0
  395. package/dist/components/management/shared/ApplicationFormFields.d.ts.map +1 -0
  396. package/dist/components/{admin → management}/shared/ApplicationFormFields.js +1 -1
  397. package/dist/components/management/shared/ApplicationFormFields.js.map +1 -0
  398. package/dist/components/management/shared/ClientSecretNotice.d.ts.map +1 -0
  399. package/dist/components/{admin → management}/shared/ClientSecretNotice.js +1 -1
  400. package/dist/components/management/shared/ClientSecretNotice.js.map +1 -0
  401. package/dist/components/management/shared/IdentityPicker.d.ts.map +1 -0
  402. package/dist/components/{admin → management}/shared/IdentityPicker.js +1 -1
  403. package/dist/components/management/shared/IdentityPicker.js.map +1 -0
  404. package/dist/components/management/shared/formatTimestamp.d.ts +9 -0
  405. package/dist/components/management/shared/formatTimestamp.d.ts.map +1 -0
  406. package/dist/components/management/shared/formatTimestamp.js +17 -0
  407. package/dist/components/management/shared/formatTimestamp.js.map +1 -0
  408. package/dist/components/management/shared/useAdminPartStyles.d.ts.map +1 -0
  409. package/dist/components/{admin → management}/shared/useAdminPartStyles.js +1 -1
  410. package/dist/components/management/shared/useAdminPartStyles.js.map +1 -0
  411. package/dist/components/management/shared/useDefaultOuId.d.ts.map +1 -0
  412. package/dist/components/{admin → management}/shared/useDefaultOuId.js +1 -1
  413. package/dist/components/management/shared/useDefaultOuId.js.map +1 -0
  414. package/dist/components/management/shared/useProjectPlacement.d.ts +26 -0
  415. package/dist/components/management/shared/useProjectPlacement.d.ts.map +1 -0
  416. package/dist/components/management/shared/useProjectPlacement.js +23 -0
  417. package/dist/components/management/shared/useProjectPlacement.js.map +1 -0
  418. package/dist/contexts/ThunderID/ThunderIDContext.d.ts +27 -1
  419. package/dist/contexts/ThunderID/ThunderIDContext.d.ts.map +1 -1
  420. package/dist/contexts/ThunderID/ThunderIDContext.js +5 -0
  421. package/dist/contexts/ThunderID/ThunderIDContext.js.map +1 -1
  422. package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
  423. package/dist/contexts/ThunderID/ThunderIDProvider.js +28 -2
  424. package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
  425. package/dist/contexts/ThunderID/useCurrentProjectState.d.ts +26 -0
  426. package/dist/contexts/ThunderID/useCurrentProjectState.d.ts.map +1 -0
  427. package/dist/contexts/ThunderID/useCurrentProjectState.js +30 -0
  428. package/dist/contexts/ThunderID/useCurrentProjectState.js.map +1 -0
  429. package/dist/hooks/management/useManagementEndpoint.d.ts +1 -1
  430. package/dist/hooks/management/useManagementEndpoint.d.ts.map +1 -1
  431. package/dist/hooks/management/useManagementEndpoint.js.map +1 -1
  432. package/dist/index.d.ts +120 -69
  433. package/dist/index.d.ts.map +1 -1
  434. package/dist/index.js +59 -34
  435. package/dist/utils/flowTransformer.d.ts +7 -0
  436. package/dist/utils/flowTransformer.d.ts.map +1 -1
  437. package/dist/utils/flowTransformer.js +9 -1
  438. package/dist/utils/flowTransformer.js.map +1 -1
  439. package/dist/utils/getOrganizationUnitSwitchErrorKey.d.ts +11 -0
  440. package/dist/utils/getOrganizationUnitSwitchErrorKey.d.ts.map +1 -0
  441. package/dist/utils/getOrganizationUnitSwitchErrorKey.js +22 -0
  442. package/dist/utils/getOrganizationUnitSwitchErrorKey.js.map +1 -0
  443. package/package.json +2 -2
  444. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs.map +0 -1
  445. package/dist/cjs/components/admin/AgentCreate/BaseAgentCreate.cjs.map +0 -1
  446. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs.map +0 -1
  447. package/dist/cjs/components/admin/AgentDetails/BaseAgentDetails.cjs.map +0 -1
  448. package/dist/cjs/components/admin/AgentList/AgentList.cjs.map +0 -1
  449. package/dist/cjs/components/admin/AgentList/BaseAgentList.cjs.map +0 -1
  450. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs.map +0 -1
  451. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs.map +0 -1
  452. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs.map +0 -1
  453. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs.map +0 -1
  454. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs.map +0 -1
  455. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs.map +0 -1
  456. package/dist/cjs/components/admin/GroupCreate/BaseGroupCreate.cjs.map +0 -1
  457. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs.map +0 -1
  458. package/dist/cjs/components/admin/GroupList/BaseGroupList.cjs.map +0 -1
  459. package/dist/cjs/components/admin/GroupList/GroupList.cjs.map +0 -1
  460. package/dist/cjs/components/admin/GroupMembers/BaseGroupMembers.cjs.map +0 -1
  461. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs.map +0 -1
  462. package/dist/cjs/components/admin/RoleAssignments/BaseRoleAssignments.cjs.map +0 -1
  463. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs.map +0 -1
  464. package/dist/cjs/components/admin/RoleCreate/BaseRoleCreate.cjs.map +0 -1
  465. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs.map +0 -1
  466. package/dist/cjs/components/admin/RoleList/BaseRoleList.cjs.map +0 -1
  467. package/dist/cjs/components/admin/RoleList/RoleList.cjs.map +0 -1
  468. package/dist/cjs/components/admin/RolePermissions/BaseRolePermissions.cjs +0 -69
  469. package/dist/cjs/components/admin/RolePermissions/BaseRolePermissions.cjs.map +0 -1
  470. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs +0 -40
  471. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs.map +0 -1
  472. package/dist/cjs/components/admin/UserCreate/BaseUserCreate.cjs.map +0 -1
  473. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs.map +0 -1
  474. package/dist/cjs/components/admin/UserCreate/userCreateFields.cjs.map +0 -1
  475. package/dist/cjs/components/admin/UserDetails/BaseUserDetails.cjs.map +0 -1
  476. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs.map +0 -1
  477. package/dist/cjs/components/admin/UserList/BaseUserList.cjs.map +0 -1
  478. package/dist/cjs/components/admin/UserList/UserList.cjs.map +0 -1
  479. package/dist/cjs/components/admin/shared/AccountLifecycleParts.cjs.map +0 -1
  480. package/dist/cjs/components/admin/shared/AdminParts.cjs.map +0 -1
  481. package/dist/cjs/components/admin/shared/AdminParts.styles.cjs.map +0 -1
  482. package/dist/cjs/components/admin/shared/AdminSearch.cjs.map +0 -1
  483. package/dist/cjs/components/admin/shared/AdminSection.cjs.map +0 -1
  484. package/dist/cjs/components/admin/shared/AdminSection.styles.cjs.map +0 -1
  485. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs.map +0 -1
  486. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs.map +0 -1
  487. package/dist/cjs/components/admin/shared/IdentityPicker.cjs.map +0 -1
  488. package/dist/cjs/components/admin/shared/useAdminPartStyles.cjs.map +0 -1
  489. package/dist/cjs/components/admin/shared/useDefaultOuId.cjs.map +0 -1
  490. package/dist/components/admin/AgentCreate/AgentCreate.d.ts.map +0 -1
  491. package/dist/components/admin/AgentCreate/AgentCreate.js.map +0 -1
  492. package/dist/components/admin/AgentCreate/BaseAgentCreate.d.ts.map +0 -1
  493. package/dist/components/admin/AgentCreate/BaseAgentCreate.js.map +0 -1
  494. package/dist/components/admin/AgentDetails/AgentDetails.d.ts.map +0 -1
  495. package/dist/components/admin/AgentDetails/AgentDetails.js.map +0 -1
  496. package/dist/components/admin/AgentDetails/BaseAgentDetails.d.ts.map +0 -1
  497. package/dist/components/admin/AgentDetails/BaseAgentDetails.js.map +0 -1
  498. package/dist/components/admin/AgentList/AgentList.d.ts.map +0 -1
  499. package/dist/components/admin/AgentList/AgentList.js.map +0 -1
  500. package/dist/components/admin/AgentList/BaseAgentList.d.ts.map +0 -1
  501. package/dist/components/admin/AgentList/BaseAgentList.js.map +0 -1
  502. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts.map +0 -1
  503. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js.map +0 -1
  504. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts.map +0 -1
  505. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js.map +0 -1
  506. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts.map +0 -1
  507. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js.map +0 -1
  508. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts.map +0 -1
  509. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js.map +0 -1
  510. package/dist/components/admin/ApplicationList/ApplicationList.d.ts.map +0 -1
  511. package/dist/components/admin/ApplicationList/ApplicationList.js.map +0 -1
  512. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts.map +0 -1
  513. package/dist/components/admin/ApplicationList/BaseApplicationList.js.map +0 -1
  514. package/dist/components/admin/GroupCreate/BaseGroupCreate.d.ts.map +0 -1
  515. package/dist/components/admin/GroupCreate/BaseGroupCreate.js.map +0 -1
  516. package/dist/components/admin/GroupCreate/GroupCreate.d.ts.map +0 -1
  517. package/dist/components/admin/GroupCreate/GroupCreate.js.map +0 -1
  518. package/dist/components/admin/GroupList/BaseGroupList.d.ts.map +0 -1
  519. package/dist/components/admin/GroupList/BaseGroupList.js.map +0 -1
  520. package/dist/components/admin/GroupList/GroupList.d.ts.map +0 -1
  521. package/dist/components/admin/GroupList/GroupList.js.map +0 -1
  522. package/dist/components/admin/GroupMembers/BaseGroupMembers.d.ts.map +0 -1
  523. package/dist/components/admin/GroupMembers/BaseGroupMembers.js.map +0 -1
  524. package/dist/components/admin/GroupMembers/GroupMembers.d.ts.map +0 -1
  525. package/dist/components/admin/GroupMembers/GroupMembers.js.map +0 -1
  526. package/dist/components/admin/RoleAssignments/BaseRoleAssignments.d.ts.map +0 -1
  527. package/dist/components/admin/RoleAssignments/BaseRoleAssignments.js.map +0 -1
  528. package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts.map +0 -1
  529. package/dist/components/admin/RoleAssignments/RoleAssignments.js.map +0 -1
  530. package/dist/components/admin/RoleCreate/BaseRoleCreate.d.ts.map +0 -1
  531. package/dist/components/admin/RoleCreate/BaseRoleCreate.js.map +0 -1
  532. package/dist/components/admin/RoleCreate/RoleCreate.d.ts.map +0 -1
  533. package/dist/components/admin/RoleCreate/RoleCreate.js.map +0 -1
  534. package/dist/components/admin/RoleList/BaseRoleList.d.ts.map +0 -1
  535. package/dist/components/admin/RoleList/BaseRoleList.js.map +0 -1
  536. package/dist/components/admin/RoleList/RoleList.d.ts.map +0 -1
  537. package/dist/components/admin/RoleList/RoleList.js.map +0 -1
  538. package/dist/components/admin/RolePermissions/BaseRolePermissions.d.ts +0 -42
  539. package/dist/components/admin/RolePermissions/BaseRolePermissions.d.ts.map +0 -1
  540. package/dist/components/admin/RolePermissions/BaseRolePermissions.js +0 -67
  541. package/dist/components/admin/RolePermissions/BaseRolePermissions.js.map +0 -1
  542. package/dist/components/admin/RolePermissions/RolePermissions.d.ts +0 -16
  543. package/dist/components/admin/RolePermissions/RolePermissions.d.ts.map +0 -1
  544. package/dist/components/admin/RolePermissions/RolePermissions.js +0 -37
  545. package/dist/components/admin/RolePermissions/RolePermissions.js.map +0 -1
  546. package/dist/components/admin/UserCreate/BaseUserCreate.d.ts.map +0 -1
  547. package/dist/components/admin/UserCreate/BaseUserCreate.js.map +0 -1
  548. package/dist/components/admin/UserCreate/UserCreate.d.ts.map +0 -1
  549. package/dist/components/admin/UserCreate/UserCreate.js.map +0 -1
  550. package/dist/components/admin/UserCreate/userCreateFields.d.ts.map +0 -1
  551. package/dist/components/admin/UserCreate/userCreateFields.js.map +0 -1
  552. package/dist/components/admin/UserDetails/BaseUserDetails.d.ts.map +0 -1
  553. package/dist/components/admin/UserDetails/BaseUserDetails.js.map +0 -1
  554. package/dist/components/admin/UserDetails/UserDetails.d.ts.map +0 -1
  555. package/dist/components/admin/UserDetails/UserDetails.js.map +0 -1
  556. package/dist/components/admin/UserList/BaseUserList.d.ts.map +0 -1
  557. package/dist/components/admin/UserList/BaseUserList.js.map +0 -1
  558. package/dist/components/admin/UserList/UserList.d.ts.map +0 -1
  559. package/dist/components/admin/UserList/UserList.js.map +0 -1
  560. package/dist/components/admin/shared/AccountLifecycleParts.d.ts.map +0 -1
  561. package/dist/components/admin/shared/AccountLifecycleParts.js.map +0 -1
  562. package/dist/components/admin/shared/AdminListRenderProps.d.ts.map +0 -1
  563. package/dist/components/admin/shared/AdminParts.d.ts.map +0 -1
  564. package/dist/components/admin/shared/AdminParts.js.map +0 -1
  565. package/dist/components/admin/shared/AdminParts.styles.d.ts.map +0 -1
  566. package/dist/components/admin/shared/AdminParts.styles.js.map +0 -1
  567. package/dist/components/admin/shared/AdminSearch.d.ts.map +0 -1
  568. package/dist/components/admin/shared/AdminSearch.js.map +0 -1
  569. package/dist/components/admin/shared/AdminSection.d.ts.map +0 -1
  570. package/dist/components/admin/shared/AdminSection.js.map +0 -1
  571. package/dist/components/admin/shared/AdminSection.styles.d.ts.map +0 -1
  572. package/dist/components/admin/shared/AdminSection.styles.js.map +0 -1
  573. package/dist/components/admin/shared/ApplicationFormFields.d.ts.map +0 -1
  574. package/dist/components/admin/shared/ApplicationFormFields.js.map +0 -1
  575. package/dist/components/admin/shared/ClientSecretNotice.d.ts.map +0 -1
  576. package/dist/components/admin/shared/ClientSecretNotice.js.map +0 -1
  577. package/dist/components/admin/shared/IdentityPicker.d.ts.map +0 -1
  578. package/dist/components/admin/shared/IdentityPicker.js.map +0 -1
  579. package/dist/components/admin/shared/useAdminPartStyles.d.ts.map +0 -1
  580. package/dist/components/admin/shared/useAdminPartStyles.js.map +0 -1
  581. package/dist/components/admin/shared/useDefaultOuId.d.ts.map +0 -1
  582. package/dist/components/admin/shared/useDefaultOuId.js.map +0 -1
  583. /package/dist/components/{admin → management}/AgentCreate/BaseAgentCreate.d.ts +0 -0
  584. /package/dist/components/{admin → management}/AgentDetails/AgentDetails.d.ts +0 -0
  585. /package/dist/components/{admin → management}/AgentDetails/BaseAgentDetails.d.ts +0 -0
  586. /package/dist/components/{admin → management}/AgentList/BaseAgentList.d.ts +0 -0
  587. /package/dist/components/{admin → management}/ApplicationCreate/BaseApplicationCreate.d.ts +0 -0
  588. /package/dist/components/{admin → management}/ApplicationDetails/ApplicationDetails.d.ts +0 -0
  589. /package/dist/components/{admin → management}/ApplicationDetails/BaseApplicationDetails.d.ts +0 -0
  590. /package/dist/components/{admin → management}/ApplicationList/BaseApplicationList.d.ts +0 -0
  591. /package/dist/components/{admin → management}/GroupCreate/BaseGroupCreate.d.ts +0 -0
  592. /package/dist/components/{admin → management}/GroupCreate/GroupCreate.d.ts +0 -0
  593. /package/dist/components/{admin → management}/GroupList/BaseGroupList.d.ts +0 -0
  594. /package/dist/components/{admin → management}/GroupList/GroupList.d.ts +0 -0
  595. /package/dist/components/{admin → management}/GroupMembers/BaseGroupMembers.d.ts +0 -0
  596. /package/dist/components/{admin → management}/GroupMembers/GroupMembers.d.ts +0 -0
  597. /package/dist/components/{admin → management}/RoleAssignments/BaseRoleAssignments.d.ts +0 -0
  598. /package/dist/components/{admin → management}/RoleAssignments/RoleAssignments.d.ts +0 -0
  599. /package/dist/components/{admin → management}/RoleCreate/BaseRoleCreate.d.ts +0 -0
  600. /package/dist/components/{admin → management}/RoleCreate/RoleCreate.d.ts +0 -0
  601. /package/dist/components/{admin → management}/RoleList/BaseRoleList.d.ts +0 -0
  602. /package/dist/components/{admin → management}/RoleList/RoleList.d.ts +0 -0
  603. /package/dist/components/{admin → management}/UserCreate/BaseUserCreate.d.ts +0 -0
  604. /package/dist/components/{admin → management}/UserCreate/UserCreate.d.ts +0 -0
  605. /package/dist/components/{admin → management}/UserCreate/userCreateFields.d.ts +0 -0
  606. /package/dist/components/{admin → management}/UserDetails/BaseUserDetails.d.ts +0 -0
  607. /package/dist/components/{admin → management}/UserDetails/UserDetails.d.ts +0 -0
  608. /package/dist/components/{admin → management}/UserList/BaseUserList.d.ts +0 -0
  609. /package/dist/components/{admin → management}/UserList/UserList.d.ts +0 -0
  610. /package/dist/components/{admin → management}/shared/AccountLifecycleParts.d.ts +0 -0
  611. /package/dist/components/{admin → management}/shared/AdminListRenderProps.d.ts +0 -0
  612. /package/dist/components/{admin → management}/shared/AdminParts.d.ts +0 -0
  613. /package/dist/components/{admin → management}/shared/AdminParts.styles.d.ts +0 -0
  614. /package/dist/components/{admin → management}/shared/AdminSearch.d.ts +0 -0
  615. /package/dist/components/{admin → management}/shared/AdminSection.d.ts +0 -0
  616. /package/dist/components/{admin → management}/shared/AdminSection.styles.d.ts +0 -0
  617. /package/dist/components/{admin → management}/shared/ApplicationFormFields.d.ts +0 -0
  618. /package/dist/components/{admin → management}/shared/ClientSecretNotice.d.ts +0 -0
  619. /package/dist/components/{admin → management}/shared/IdentityPicker.d.ts +0 -0
  620. /package/dist/components/{admin → management}/shared/useAdminPartStyles.d.ts +0 -0
  621. /package/dist/components/{admin → management}/shared/useDefaultOuId.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharingPolicies.js","names":["SharingPolicies: FC<SharingPoliciesProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","operations: SharingPolicyOperations","policies: ResourceQueryResult<SharingPolicyListResponse>","useResourceQuery","overlay: ResourceQueryResult<ResolvedOverlay>","change: ResourceMutationResult<SharingPolicy | undefined, PolicyChange>","useResourceMutation","BaseSharingPolicies"],"sources":["../../../../src/components/management/SharingPolicies/SharingPolicies.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ResolvedOverlay,\n SHARING_POLICY_ERROR_KEYS,\n SHARING_RESOURCE_COLLECTIONS,\n SharingPolicy,\n SharingPolicyListResponse,\n SharingPolicyOperations,\n SharingPolicyQueryKeys,\n SharingPolicyRequest,\n SharingPolicyUpdateRequest,\n SharingResourceType,\n getSharingPolicyOperations,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseSharingPolicies, {BaseSharingPoliciesProps} from './BaseSharingPolicies';\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\ntype PolicyChange =\n | {kind: 'create'; request: SharingPolicyRequest}\n | {kind: 'delete'; policy: SharingPolicy}\n | {kind: 'update'; policy: SharingPolicy; request: SharingPolicyUpdateRequest};\n\nexport type SharingPoliciesProps = Omit<\n BaseSharingPoliciesProps,\n | 'error'\n | 'isLoading'\n | 'isLoadingOverlay'\n | 'isSubmitting'\n | 'mutationError'\n | 'offset'\n | 'onCreate'\n | 'onDelete'\n | 'onPageChange'\n | 'onUpdate'\n | 'overlay'\n | 'overlayError'\n | 'overlayOuId'\n | 'policies'\n | 'totalResults'\n> & {\n /**\n * Whether policies can be added, edited and deleted from this view. Deleting asks for confirmation.\n * @default false\n */\n editable?: boolean;\n /**\n * Shows the overlay rules that apply to the resource in this organization unit, read only.\n */\n ouId?: string;\n /**\n * Identifier of the user, application, role or flow.\n */\n resourceId: string;\n /**\n * The kind of resource whose sharing policies are shown.\n */\n resourceType: SharingResourceType;\n};\n\n/**\n * Lists the sharing policies of a user, an application, a role or a flow, and lets the signed-in user\n * add, edit and delete them when `editable`. With `ouId`, also shows the overlay rules the policies\n * resolve to in that organization unit. `UserDetails`, `ApplicationDetails` and `RoleDetails` do not\n * embed it: place it where the app needs it.\n *\n * @example\n * ```tsx\n * <SharingPolicies resourceType=\"role\" resourceId={roleId} editable />\n * ```\n */\nconst SharingPolicies: FC<SharingPoliciesProps> = ({\n editable = false,\n limit = 20,\n ouId,\n preferences,\n resourceId,\n resourceType,\n ...rest\n}: SharingPoliciesProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const [lastChange, setLastChange] = useState<PolicyChange['kind']>('create');\n const endpoint: ManagementEndpoint = useManagementEndpoint(SHARING_RESOURCE_COLLECTIONS[resourceType]);\n const operations: SharingPolicyOperations = getSharingPolicyOperations(resourceType);\n const policies: ResourceQueryResult<SharingPolicyListResponse> = useResourceQuery(\n [SharingPolicyQueryKeys.SHARING_POLICIES, resourceType, resourceId, {limit, offset}],\n (fetcher) => operations.list({...endpoint, fetcher, limit, offset, resourceId}),\n {enabled: Boolean(resourceId)},\n );\n const overlay: ResourceQueryResult<ResolvedOverlay> = useResourceQuery(\n [SharingPolicyQueryKeys.OVERLAY_RULES, resourceType, resourceId, ouId],\n (fetcher) => operations.getOverlayRules({...endpoint, fetcher, ouId: ouId ?? '', resourceId}),\n {enabled: Boolean(resourceId && ouId)},\n );\n const change: ResourceMutationResult<SharingPolicy | undefined, PolicyChange> = useResourceMutation(\n async (variables: PolicyChange, fetcher): Promise<SharingPolicy | undefined> => {\n if (variables.kind === 'create') {\n return operations.create({...endpoint, fetcher, payload: variables.request, resourceId});\n }\n\n if (variables.kind === 'update') {\n return operations.update({\n ...endpoint,\n fetcher,\n payload: variables.request,\n policyId: variables.policy.id ?? '',\n resourceId,\n });\n }\n\n await operations.delete({...endpoint, fetcher, policyId: variables.policy.id ?? '', resourceId});\n\n return undefined;\n },\n () => [\n [SharingPolicyQueryKeys.SHARING_POLICIES, resourceType, resourceId],\n [SharingPolicyQueryKeys.OVERLAY_RULES, resourceType, resourceId],\n ],\n );\n\n const run = (variables: PolicyChange): void => {\n setLastChange(variables.kind);\n void change.mutate(variables);\n };\n\n return (\n <BaseSharingPolicies\n policies={policies.data?.policies ?? []}\n totalResults={policies.data?.totalResults}\n isLoading={policies.isLoading}\n error={toManagementErrorMessage(t, policies.error, 'admin.sharing.error')}\n mutationError={toManagementErrorMessage(\n t,\n change.error,\n lastChange === 'delete' ? 'admin.sharing.errors.delete' : 'admin.sharing.errors.save',\n SHARING_POLICY_ERROR_KEYS,\n )}\n isSubmitting={change.isLoading}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n overlay={overlay.data}\n overlayOuId={ouId}\n isLoadingOverlay={Boolean(ouId) && overlay.isLoading}\n overlayError={toManagementErrorMessage(t, overlay.error, 'admin.sharing.overlay.error')}\n onCreate={editable ? (request: SharingPolicyRequest): void => run({kind: 'create', request}) : undefined}\n onUpdate={\n editable\n ? (policy: SharingPolicy, request: SharingPolicyUpdateRequest): void => run({kind: 'update', policy, request})\n : undefined\n }\n onDelete={editable ? (policy: SharingPolicy): void => run({kind: 'delete', policy}) : undefined}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default SharingPolicies;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA6EA,MAAMA,mBAA6C,EACjD,WAAW,OACX,QAAQ,IACR,MACA,aACA,YACA,aACA,GAAG,WACqC;CACxC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAM,CAAC,YAAY,iBAAiB,SAA+B,SAAS;CAC5E,MAAMC,WAA+BC,8BAAsB,6BAA6B,cAAc;CACtG,MAAMC,aAAsC,2BAA2B,aAAa;CACpF,MAAMC,WAA2DC,yBAC/D;EAAC,uBAAuB;EAAkB;EAAc;EAAY;GAAC;GAAO;GAAO;EAAC,GACnF,YAAY,WAAW,KAAK;EAAC,GAAG;EAAU;EAAS;EAAO;EAAQ;EAAW,CAAC,EAC/E,EAAC,SAAS,QAAQ,WAAW,EAAC,CAC/B;CACD,MAAMC,UAAgDD,yBACpD;EAAC,uBAAuB;EAAe;EAAc;EAAY;EAAK,GACrE,YAAY,WAAW,gBAAgB;EAAC,GAAG;EAAU;EAAS,MAAM,QAAQ;EAAI;EAAW,CAAC,EAC7F,EAAC,SAAS,QAAQ,cAAc,KAAK,EAAC,CACvC;CACD,MAAME,SAA0EC,4BAC9E,OAAO,WAAyB,YAAgD;AAC9E,MAAI,UAAU,SAAS,SACrB,QAAO,WAAW,OAAO;GAAC,GAAG;GAAU;GAAS,SAAS,UAAU;GAAS;GAAW,CAAC;AAG1F,MAAI,UAAU,SAAS,SACrB,QAAO,WAAW,OAAO;GACvB,GAAG;GACH;GACA,SAAS,UAAU;GACnB,UAAU,UAAU,OAAO,MAAM;GACjC;GACD,CAAC;AAGJ,QAAM,WAAW,OAAO;GAAC,GAAG;GAAU;GAAS,UAAU,UAAU,OAAO,MAAM;GAAI;GAAW,CAAC;UAI5F,CACJ;EAAC,uBAAuB;EAAkB;EAAc;EAAW,EACnE;EAAC,uBAAuB;EAAe;EAAc;EAAW,CACjE,CACF;CAED,MAAM,OAAO,cAAkC;AAC7C,gBAAc,UAAU,KAAK;AAC7B,EAAK,OAAO,OAAO,UAAU;;AAG/B,QACE,oBAACC;EACC,UAAU,SAAS,MAAM,YAAY,EAAE;EACvC,cAAc,SAAS,MAAM;EAC7B,WAAW,SAAS;EACpB,OAAO,yBAAyB,GAAG,SAAS,OAAO,sBAAsB;EACzE,eAAe,yBACb,GACA,OAAO,OACP,eAAe,WAAW,gCAAgC,6BAC1D,0BACD;EACD,cAAc,OAAO;EACd;EACC;EACR,cAAc;EACd,SAAS,QAAQ;EACjB,aAAa;EACb,kBAAkB,QAAQ,KAAK,IAAI,QAAQ;EAC3C,cAAc,yBAAyB,GAAG,QAAQ,OAAO,8BAA8B;EACvF,UAAU,YAAY,YAAwC,IAAI;GAAC,MAAM;GAAU;GAAQ,CAAC,GAAG;EAC/F,UACE,YACK,QAAuB,YAA8C,IAAI;GAAC,MAAM;GAAU;GAAQ;GAAQ,CAAC,GAC5G;EAEN,UAAU,YAAY,WAAgC,IAAI;GAAC,MAAM;GAAU;GAAO,CAAC,GAAG;EACzE;EACb,GAAI;GACJ;;AAIN,8BAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUserCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserCreate/BaseUserCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAc,EAAE,EAA2B,SAAS,EAAW,MAAM,OAAO,CAAC;AACpF,OAAO,EAA6B,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAU/E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B;;OAEG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD;;OAEG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,SAAS,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,QAAA,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA8G3C,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -10,7 +10,7 @@ import { DEFAULT_USER_CREATE_FIELDS } from "./userCreateFields.js";
10
10
  import { useState } from "react";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
12
12
 
13
- //#region src/components/admin/UserCreate/BaseUserCreate.tsx
13
+ //#region src/components/management/UserCreate/BaseUserCreate.tsx
14
14
  /**
15
15
  * A form that collects a new user's type and attributes. Holds no data of its own: pass the user
16
16
  * types and handle the submission.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUserCreate.js","names":["BaseUserCreate: FC<BaseUserCreateProps>","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,SAAS,4BACT,eAAe,OACf,UACA,UACA,aACA,OACA,gBACuC;CACvC,MAAM,EAAC,OAAO,gBAAeC,kBAAU;CACvC,MAAMC,SAAiCC,4BAAU,OAAO,YAAY;CACpE,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,YAAY,WAAW,SAAiB,GAAG;CAClD,MAAMC,OAAe,eAAe,UAAU,IAAI,SAAS;CAC3D,MAAM,CAAC,QAAQ,aAAa,SAAiC,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,oBAAC;EAAe;YACb,SAAS;GACR;GACA;GACA,mBAAmB;GACnB,cAAc;GACd,kBAAkB;GAClB;GACA,SAAS;GACT;GACA;GACA;GACA;GACD,CAAC;GACE;AAIV,QACE,oBAACC;EACC,OAAM;EACK;EACX,OAAO,SAAS,EAAE,2BAA2B;EAChC;EACA;YAEb,qBAAC;GAAK,WAAW,OAAO;GAAS,UAAU;GAAc;;IACtD,SACC,oBAACC;KAAM,SAAQ;KAAQ,MAAK;eACzB;MACK;IAEV,oBAACC;KACC,OAAO,EAAE,iCAAiC;KAC1C,MAAK;KACL;KACA,OAAO;KACP,SAAS;KACT,WAAW,UAAgD,QAAQ,MAAM,OAAO,MAAM;MACtF;IACD,OAAO,KAAK,UACX,oBAACC;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,qBAAC;KAAI,WAAW,OAAO;gBACpB,YACC,oBAACC;MAAO,MAAK;MAAS,SAAQ;MAAO,SAAS;MAAU,UAAU;gBAC/D,EAAE,8BAA8B;OAC1B,EAEX,oBAACA;MAAO,MAAK;MAAS,SAAS;MAAc,UAAU,CAAC,cAAc;gBACnE,EAAE,4BAA4B;OACxB;MACL;;IACD;GACM;;AAInB,6BAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserCreate/UserCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,WAAW,EAQZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAChD,OAAuB,EAAC,mBAAmB,EAAuB,MAAM,kBAAkB,CAAC;AAK3F,OAAmB,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAC;AAG7E,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG;IAC7G;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAwDnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -9,7 +9,7 @@ import { UserQueryKeys, createUser, getUserTypes, toManagementErrorMessage } fro
9
9
  import { useMemo } from "react";
10
10
  import { jsx } from "react/jsx-runtime";
11
11
 
12
- //#region src/components/admin/UserCreate/UserCreate.tsx
12
+ //#region src/components/management/UserCreate/UserCreate.tsx
13
13
  /**
14
14
  * Adds a user, either directly through the management API or by inviting them through the invite
15
15
  * user flow.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserCreate.js","names":["UserCreate: FC<UserCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","usersEndpoint: ManagementEndpoint","useManagementEndpoint","userTypesEndpoint: ManagementEndpoint","useResourceQuery","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,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAMC,gBAAoCC,8BAAsB,QAAQ;CACxE,MAAMC,oBAAwCD,8BAAsB,YAAY;CAChF,MAAM,EAAC,MAAM,cAA+DE,yBAC1E,CAAC,cAAc,YAAY,EAAC,OAAO,KAAI,CAAC,GACvC,YAAY,aAAa;EAAC,GAAG;EAAmB;EAAS,OAAO;EAAI,CAAC,EACtE,EAAC,SAAS,SAAS,OAAM,CAC1B;CACD,MAAM,EAAC,OAAO,WAAW,WAAyEC,6BAC/F,SAAmC,YAAY,WAAW;EAAC,GAAG;EAAe;EAAS;EAAQ,CAAC,QAC1F,CAAC,CAAC,cAAc,MAAM,CAAC,EAC7B,EAAC,WAAW,WAAU,CACvB;CAED,MAAMC,UAA0B,eAE3B,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,oBAACC,sBAAW,GAAI,cAAe;CAGxC,MAAM,gBAAgB,EAAC,YAAY,WAAsC;AACvE,MAAI,CAAC,aACH;AAGF,EAAK,OAAO;GAAC;GAAY,MAAM;GAAc;GAAK,CAAC;;AAGrD,QACE,oBAACC;EACC,WAAW;EACX,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,2BAA2B,GAAG,EAAE,4BAA4B;EAEnG;EACb,GAAI;GACJ;;AAIN,yBAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userCreateFields.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserCreate/userCreateFields.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,eAAe,EAMvD,CAAC"}
@@ -1,4 +1,4 @@
1
- //#region src/components/admin/UserCreate/userCreateFields.ts
1
+ //#region src/components/management/UserCreate/userCreateFields.ts
2
2
  /**
3
3
  * The attributes `UserCreate` collects when no `fields` are given.
4
4
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userCreateFields.js","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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUserDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserDetails/BaseUserDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EAEtB,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAc,EAAE,EAAgB,SAAS,EAAW,MAAM,OAAO,CAAC;AAYzE;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB,EAAE,OAAO,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC5C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAUD;;;GAGG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAqL7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -12,7 +12,7 @@ import { resolveManagedIdentityName } from "@thunderid/browser";
12
12
  import { useState } from "react";
13
13
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
14
14
 
15
- //#region src/components/admin/UserDetails/BaseUserDetails.tsx
15
+ //#region src/components/management/UserDetails/BaseUserDetails.tsx
16
16
  const stringify = (value) => {
17
17
  if (value === null || value === void 0) return "";
18
18
  return typeof value === "object" ? JSON.stringify(value) : String(value);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUserDetails.js","names":["BaseUserDetails: FC<BaseUserDetailsProps>","useTranslation","styles: Record<string, string>","useAdminPartStyles","isWritable: boolean","AdminSection","Spinner","Alert","displayName: string","attributes: [string, unknown][]","editableAttributes: [string, string][]","Button","TextField"],"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,uBAAe,aAAa,KAAK;CAC7C,MAAMC,SAAiCC,4BAAoB;CAC3D,MAAM,CAAC,OAAO,YAAY,SAAwC,KAAK;AAEvE,KAAI,UAAU;EACZ,MAAMC,aAAsB,QAAQ,KAAK,IAAI,CAAC,MAAM;AAEpD,SACE,oBAAC;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,OAAO,2BAA2B,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,oBAACC;EAAa,OAAM;EAA0B;EAAwB;YACpE,qBAAC;GAAK,WAAW,OAAO;GAAU,MAAK;;IACrC,oBAACC,mBAAQ,MAAK,UAAU;;IAAE,EAAE,uBAAuB;;IAC9C;GACM;AAInB,KAAI,CAAC,KACH,QACE,oBAACD;EAAa,OAAM;EAA0B;EAAwB;YACpE,oBAACE;GAAM,SAAQ;GAAQ,MAAK;aACzB,SAAS,EAAE,gCAAgC;IACtC;GACK;CAInB,MAAMC,cAAsB,2BAA2B,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,qBAACL;EACC,OAAM;EACK;EACX,OAAO;EACP,aAAa,EAAE,gCAAgC,EAAC,MAAM,KAAK,MAAK,CAAC;EACpD;EACb,SACE;GACG;GACA,qBACC,oBAAC;IACC,SAAS;IACT;IACA,WAAW;IACX,MAAM;IACN,UAAU;KACV;GAEH,YAAY,CAAC,KAAK,cACjB,oBAAC;IACC,aAAa,EAAE,sCAAsC,EAAC,MAAM,aAAY,CAAC;IACzE,WAAW;IACX,WAAW;cAEV,EAAE,oCAAoC;KACzB;MAEjB;;GAGJ,SACC,oBAACE;IAAM,SAAQ;IAAQ,MAAK;cACzB;KACK;GAEV,qBAAC;IAAI,WAAW,OAAO;;KACrB,oBAAC;MAAO,MAAM;MAAa,MAAM;OAAM;KACvC,oBAAC;MAAK,WAAW,OAAO;gBAAW,KAAK,YAAY,KAAK;OAAY;KACrE,oBAAC,qBAAkB,QAAQ,KAAK,QAAQ,QAAS;;KAC7C;GACN,oBAAC;IACC,OAAO,EAAE,iCAAiC;IAC1C,SACE,YAAY,CAAC,KAAK,cAAc,CAAC,SAAS,mBAAmB,SAAS,IACpE,oBAACI;KACC,SAAQ;KACR,MAAK;KACL,eAAqB,SAAS,OAAO,YAAY,mBAAmB,CAAC;eAEpE,EAAE,kCAAkC;MAC9B,GACP;cAGL,QACC,qBAAC;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,oBAACC;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,qBAAC;MAAI,WAAW,OAAO;MAAQ,OAAO,EAAC,gBAAgB,YAAW;iBAChE,oBAACD;OAAO,MAAK;OAAS,SAAQ;OAAO,UAAU;OAAY,eAAqB,SAAS,KAAK;iBAC3F,EAAE,8BAA8B;QAC1B,EACT,oBAACA;OAAO,MAAK;OAAS,SAAS;OAAY,UAAU;iBAClD,EAAE,gCAAgC;QAC5B;OACL;MACD,GACL,WAAW,SAAS,IACtB,oBAAC,cACC,OAAO,WAAW,KAAK,CAAC,MAAM,YAA+B;KAAC,OAAO;KAAM,OAAO,UAAU,MAAM;KAAC,EAAE,GACrG,GAEF,oBAAC;KAAK,WAAW,OAAO;eAAW,EAAE,oCAAoC;MAAQ;KAE7E;GACR,oBAAC;IAAM,OAAO,EAAE,6BAA6B;cAC3C,oBAAC;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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserDetails/UserDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAWnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAwB,EAAC,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAYxE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,oBAAoB,EAClB,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,0BAA0B,GAC1B,YAAY,GACZ,kBAAkB,GAClB,UAAU,GACV,mBAAmB,GACnB,UAAU,GACV,MAAM,CACT,GAAG;IACF;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAoErC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -7,7 +7,7 @@ import useAccountLifecycle_default from "../../../hooks/management/useAccountLif
7
7
  import { GroupQueryKeys, UserQueryKeys, deleteUser, getUser, getUserGroups, toManagementErrorMessage, updateUser } from "@thunderid/browser";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
 
10
- //#region src/components/admin/UserDetails/UserDetails.tsx
10
+ //#region src/components/management/UserDetails/UserDetails.tsx
11
11
  /**
12
12
  * Shows a user and the groups they belong to, and optionally lets the signed-in user delete them.
13
13
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserDetails.js","names":["UserDetails: FC<UserDetailsProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","user: ResourceQueryResult<ManagedUser>","useResourceQuery","groups: ResourceQueryResult<MembershipGroupListResponse>","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,uBAAe,aAAa,KAAK;CAC7C,MAAMC,WAA+BC,8BAAsB,QAAQ;CACnE,MAAMC,OAAyCC,yBAC7C,CAAC,cAAc,MAAM,OAAO,GAC3B,YAAY,QAAQ;EAAC,GAAG;EAAU;EAAS;EAAO,CAAC,EACpD,EAAC,SAAS,QAAQ,OAAO,EAAC,CAC3B;CACD,MAAMC,SAA2DD,yBAC/D;EAAC,eAAe;EAAa;EAAQ;EAAQ,EAAC,OAAO,KAAI;EAAC,GACzD,YAAY,cAAc;EAAC,GAAG;EAAU;EAAS,OAAO;EAAK;EAAO,CAAC,EACtE,EAAC,SAAS,QAAQ,OAAO,EAAC,CAC3B;CACD,MAAME,WAAiDC,6BACpD,IAAY,YAAY,WAAW;EAAC,GAAG;EAAU;EAAoB;EAAS,QAAQ;EAAG,CAAC,QACrF,CAAC,CAAC,cAAc,MAAM,CAAC,EAC7B,EAAC,WAAW,WAAU,CACvB;CACD,MAAMC,SAAmED,6BACtE,EAAC,MAAM,QAAQ,MAA0B,YAAY,WAAW;EAAC,GAAG;EAAU;EAAS,SAAS;EAAM,QAAQ;EAAG,CAAC,GAClH,EAAC,QAAQ,SAA6B,CAAC,CAAC,cAAc,MAAM,GAAG,EAAE,CAAC,cAAc,MAAM,CAAC,CACzF;CAED,MAAME,YAAmCC,4BAAoB;EAC3D,SAAS;EACT,iBAAiB,CAAC,CAAC,cAAc,MAAM,OAAO,EAAE,CAAC,cAAc,MAAM,CAAC;EACtE,MAAM;EACN,QAAQ,KAAK,MAAM,QAAQ;EAC3B,SAAS;EACV,CAAC;AAEF,QACE,oBAACC;EACC,MAAM,KAAK;EACX,QAAQ,OAAO,MAAM;EACrB,WAAW,KAAK;EAChB,OACE,yBAAyB,GAAG,KAAK,OAAO,4BAA4B,IACpE,yBAAyB,GAAG,SAAS,OAAO,mCAAmC,IAC/E,yBAAyB,GAAG,OAAO,OAAO,iCAAiC,IAC3E,yBAAyB,GAAG,UAAU,OAAO,+BAA+B,IAC5E,yBAAyB,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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUserList.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserList/BaseUserList.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA6B,WAAW,EAAE,WAAW,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAC,MAAM,OAAO,CAAC;AAIlD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAoB,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAGpE;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,WAAW,CAAC,GAAG;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAC,CAAC;AAEjG,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,SAAS,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;OAEG;IACH,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,QAAA,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAsGvC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -6,7 +6,7 @@ import AdminSection_default from "../shared/AdminSection.js";
6
6
  import { resolveManagedIdentityName } from "@thunderid/browser";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
 
9
- //#region src/components/admin/UserList/BaseUserList.tsx
9
+ //#region src/components/management/UserList/BaseUserList.tsx
10
10
  /**
11
11
  * Lists users with their type and organization unit. Holds no data of its own: pass the page of
12
12
  * users and handle selection and pagination.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUserList.js","names":["BaseUserList: FC<BaseUserListProps>","useTranslation","columns: DataTableColumn<ManagedUser>[]","name: string","email: unknown","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,uBAAe,aAAa,KAAK;CAE7C,MAAMC,UAA0C;EAC9C;GACE,QAAQ,EAAE,gCAAgC;GAC1C,IAAI;GACJ,SAAS,SAAiC;IACxC,MAAMC,OAAe,2BAA2B,KAAK;IACrD,MAAMC,QAAiB,KAAK,aAAa;AAEzC,WACE,qBAAC;KAAK,OAAO;MAAC,YAAY;MAAU,SAAS;MAAe,KAAK;MAAS;gBACxE,oBAAC;MAAa;MAAM,MAAM;OAAM,EAChC,qBAAC;MAAK,OAAO;OAAC,SAAS;OAAe,eAAe;OAAU,KAAK;OAAU,WAAW;OAAQ;iBAC/F,oBAAC;OAAK,OAAO,EAAC,YAAY,KAAI;iBAAG;QAAY,EAC5C,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,UAAU,QAC1D,oBAAC;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,oBAAC;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,qBAACC;EACC,OAAM;EACK;EACX,OAAO,SAAS,EAAE,yBAAyB;EAC9B;EACJ;EACI;aAEZ,YAAY,kBAAkB,SAC7B,oBAACC;GAAY,YAAY;GAA0B;GAAkB;IAAY,GAC/E,MACJ,oBAACC;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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserList.d.ts","sourceRoot":"","sources":["../../../../src/components/management/UserList/UserList.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAAqB,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAM/D,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,iBAAiB,EACjB,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CACrG,GAAG;IACF;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CA8C/B,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -6,7 +6,7 @@ import { UserQueryKeys, getUsers, toEqualityFilter, toManagementErrorMessage } f
6
6
  import { useState } from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
 
9
- //#region src/components/admin/UserList/UserList.tsx
9
+ //#region src/components/management/UserList/UserList.tsx
10
10
  /**
11
11
  * Lists the users the signed-in user is allowed to see, a page at a time.
12
12
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserList.js","names":["UserList: FC<UserListProps>","useTranslation","attributes: SelectOption[]","endpoint: ManagementEndpoint","useManagementEndpoint","queryFilter: string | undefined","useResourceQuery","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,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAM,CAAC,QAAQ,aAAa,SAAkC,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,8BAAsB,QAAQ;CACnE,MAAMC,cACJ,WAAW,SAAS,iBAAiB,OAAO,WAAW,OAAO,MAAM,GAAG;CACzE,MAAM,EAAC,MAAM,OAAO,cAA2DC,yBAC7E,CAAC,cAAc,OAAO;EAAC,QAAQ;EAAa;EAAO;EAAO,CAAC,GAC1D,YAAY,SAAS;EAAC,GAAG;EAAU;EAAS,QAAQ;EAAa;EAAO;EAAO,CAAC,CAClF;AAED,QACE,oBAACC;EACC,OAAO,MAAM,SAAS,EAAE;EACxB,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountLifecycleParts.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AccountLifecycleParts.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,iBAAiB,EAAE,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAc,EAAE,EAAyB,MAAM,OAAO,CAAC;AAW9D,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAiBxD,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3E;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CAkFpE,CAAC"}
@@ -5,7 +5,7 @@ import useAdminPartStyles_default from "./useAdminPartStyles.js";
5
5
  import { useState } from "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
- //#region src/components/admin/shared/AccountLifecycleParts.tsx
8
+ //#region src/components/management/shared/AccountLifecycleParts.tsx
9
9
  /**
10
10
  * Matches the server's limit on an operator note.
11
11
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountLifecycleParts.js","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,4BAAoB;CAC3D,MAAM,EAAC,MAAKC,wBAAgB;AAE5B,KAAI,CAAC,OACH,QAAO;CAGT,MAAMC,SAA4C;EAChD,QAAQ,EAAE,6BAA6B;EACvC,QAAQ,EAAE,6BAA6B;EACvC,WAAW,EAAE,gCAAgC;EAC9C;AAED,QAAO,oBAAC;EAAK,WAAW,OAAO;YAAU,OAAO,WAAW;GAAc;;;;;;AAwB3E,MAAaC,2BAA6D,EACxE,SACA,uBAAuB,OACvB,YAAY,OACZ,MACA,eACuD;CACvD,MAAMJ,SAAiCC,4BAAoB;CAC3D,MAAM,EAAC,MAAKC,wBAAgB;CAC5B,MAAM,CAAC,YAAY,iBAAiB,SAAwC,KAAK;CACjF,MAAM,CAAC,cAAc,mBAAmB,SAAiB,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,qBAAC;GAAK,WAAW,OAAO;GAAY,MAAK;GAAQ,cAAY;;IAC3D,oBAAC,oBAAM,WAAgB;IACtB,YACC,oBAACC;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,oBAACC;KAAO,SAAQ;KAAO,MAAK;KAAQ,UAAU;KAAW,SAAS;eAC/D,EAAE,8BAA8B;MAC1B;IACT,oBAACA;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,4CACG,QAAQ,KAAK,WACZ,oBAACA;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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminListRenderProps.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AdminListRenderProps.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,eAAe,EAAC,MAAM,sCAAsC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC;;;OAGG;IACH,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;OAEG;IACH,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminParts.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AdminParts.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAW,MAAM,OAAO,CAAC;AAK5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAa1C,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAYhC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;CACnF;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAqBtC,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA8BhD,CAAC"}
@@ -4,7 +4,7 @@ import useAdminPartStyles_default from "./useAdminPartStyles.js";
4
4
  import { useState } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
 
7
- //#region src/components/admin/shared/AdminParts.tsx
7
+ //#region src/components/management/shared/AdminParts.tsx
8
8
  /**
9
9
  * Renders label and value pairs as a description list.
10
10
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminParts.js","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,4BAAoB;AAE3D,QACE,oBAAC;EAAG,WAAW,OAAO;YACnB,MAAM,KAAK,SACV,qBAAC;GAAqB,OAAO,EAAC,SAAS,YAAW;cAChD,oBAAC;IAAG,WAAW,OAAO;cAAiB,KAAK;KAAW,EACvD,oBAAC;IAAG,WAAW,OAAO;cAAiB,KAAK;KAAW;KAF/C,KAAK,MAGT,CACN;GACC;;;;;AAaT,MAAaC,SAAyB,EAAC,SAAS,UAAU,YAAqC;CAC7F,MAAMF,SAAiCC,4BAAoB;AAE3D,QACE,qBAAC;EAAQ,WAAW,OAAO;aACzB,qBAAC;GAAI,WAAW,OAAO;GAAQ,OAAO,EAAC,gBAAgB,iBAAgB;cACrE,oBAAC;IAAG,WAAW,OAAO;cAAgB;KAAW,EAChD;IACG,EACL;GACO;;;;;AAmBd,MAAaE,YAA+B,EAAC,WAAW,OAAO,YAAwC;CACrG,MAAMH,SAAiCC,4BAAoB;AAE3D,KAAI,MAAM,WAAW,EACnB,QAAO,oBAAC;EAAK,WAAW,OAAO;YAAW;GAAiB;AAG7D,QACE,oBAAC;EAAG,WAAW,OAAO;EAAa,cAAY;YAC5C,MAAM,KAAK,SACV,qBAAC;GAAiB,WAAW,OAAO;cACjC,KAAK,OACL,KAAK,YACJ,oBAACG;IAAO,SAAQ;IAAO,MAAK;IAAQ,cAAY,KAAK;IAAa,SAAS,KAAK;cAC9E,oBAAC;KAAK,eAAY;eAAO;MAAQ;KAC1B;KALJ,KAAK,GAOT,CACL;GACC;;;;;AAqBT,MAAaC,iBAAyC,EACpD,UACA,aACA,WAAW,OACX,YAAY,OACZ,gBACsC;CACtC,MAAML,SAAiCC,4BAAoB;CAC3D,MAAM,EAAC,MAAKK,wBAAgB;CAC5B,MAAM,CAAC,cAAc,mBAAmB,SAAkB,MAAM;AAEhE,KAAI,CAAC,aACH,QACE,oBAACF;EAAO,SAAQ;EAAU,OAAM;EAAkB;EAAU,eAAqB,gBAAgB,KAAK;EACnG;GACM;AAIb,QACE,qBAAC;EAAK,WAAW,OAAO;EAAY,MAAK;EAAQ,cAAY;;GAC3D,oBAAC,oBAAM,cAAmB;GAC1B,oBAACA;IAAO,SAAQ;IAAO,MAAK;IAAQ,UAAU;IAAW,eAAqB,gBAAgB,MAAM;cACjG,EAAE,8BAA8B;KAC1B;GACT,oBAACA;IAAO,OAAM;IAAQ,MAAK;IAAQ,SAAS;IAAW,UAAU;IAAW,SAAS;cAClF,EAAE,+BAA+B;KAC3B;;GACJ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminParts.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AdminParts.styles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAIzC;;;;;;;GAOG;AACH,QAAA,MAAM,SAAS,GAAI,OAAO,KAAK,EAAE,aAAa,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAuElD,CAAC;AAE3B,eAAe,SAAS,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { css } from "../../../styles/emotion.js";
2
2
  import { useMemo } from "react";
3
3
 
4
- //#region src/components/admin/shared/AdminParts.styles.ts
4
+ //#region src/components/management/shared/AdminParts.styles.ts
5
5
  /**
6
6
  * Creates the styles for the detail list, chip list and inline confirmation used by the admin
7
7
  * components.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminParts.styles.js","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,gBAC/B,cAAc;CACZ,MAAMA,OAAe,MAAM,KAAK,QAAQ;AAExC,QAAO;EACL,MAAM,GAAG;;;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,GAAG;;;eAGJ,KAAK;;;;;EAKd,SAAS,GAAG;;;;eAIH,KAAK;qBACC,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,QAAQ,GAAG;;;eAGF,KAAK,QAAQ,KAAK;;qBAEZ,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,aAAa,GAAG;iBACL,MAAM,KAAK,OAAO,KAAK,UAAU;;EAE5C,aAAa,GAAG;;iBAEL,MAAM,KAAK,OAAO,KAAK,QAAQ;;;EAG1C,OAAO,GAAG;iBACC,MAAM,KAAK,OAAO,KAAK,UAAU;qBAC7B,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,OAAO,GAAG;;;oBAGI,KAAK;wBACD,KAAK;4BACD,MAAM,KAAK,OAAO,OAAO;yBAC5B,MAAM,KAAK,aAAa,MAAM;sBACjC,MAAM,KAAK,OAAO,WAAW,QAAQ;;EAErD,YAAY,GAAG;;qBAEA,MAAM,KAAK,WAAW,UAAU,GAAG;uBACjC,MAAM,KAAK,WAAW,YAAY,SAAS;;EAE5D,KAAK,GAAG;;;;oBAIM,KAAK;;EAEpB;GACA,CAAC,OAAO,YAAY,CAAC;AAE1B,gCAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSearch.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AdminSearch.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAyB,YAAY,EAAW,MAAM,OAAO,CAAC;AAOrE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B;;OAEG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAClC;AAED;;;GAGG;AACH,QAAA,MAAM,WAAW,GAAI,kCAAuC,gBAAgB,KAAG,YAiD9E,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -6,7 +6,7 @@ import useAdminPartStyles_default from "./useAdminPartStyles.js";
6
6
  import { useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
 
9
- //#region src/components/admin/shared/AdminSearch.tsx
9
+ //#region src/components/management/shared/AdminSearch.tsx
10
10
  /**
11
11
  * Searches an admin list by one attribute. The server matches the whole value, so the search runs when
12
12
  * submitted rather than on every keystroke.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSearch.js","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,4BAAoB;CAC3D,MAAM,EAAC,MAAKC,wBAAgB;CAC5B,MAAM,CAAC,WAAW,gBAAgB,SAAiB,QAAQ,aAAa,WAAW,IAAI,SAAS,GAAG;CACnG,MAAM,CAAC,OAAO,YAAY,SAAiB,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,qBAAC;EAAK,WAAW,OAAO;EAAQ,UAAU;EAAc,MAAK;EAAS,OAAO,EAAC,YAAY,YAAW;;GAClG,WAAW,SAAS,KACnB,oBAACC;IACC,OAAO,EAAE,gCAAgC;IACzC,MAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW,UAAgD,aAAa,MAAM,OAAO,MAAM;KAC3F;GAEJ,oBAACC;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,oBAACC;IAAO,MAAK;IAAS,SAAQ;cAC3B,EAAE,6BAA6B;KACzB;GACR,UACC,oBAACA;IACC,MAAK;IACL,SAAQ;IACR,eAAqB;AACnB,cAAS,GAAG;AACZ,cAAS,KAAK;;cAGf,EAAE,4BAA4B;KACxB;;GAEN;;AAIX,0BAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSection.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AdminSection.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAgC,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAC,MAAM,OAAO,CAAC;AAMlD,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,QAAA,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAkCvC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -5,7 +5,7 @@ import AdminSection_styles_default from "./AdminSection.styles.js";
5
5
  import { bem, withVendorCSSClassPrefix } from "@thunderid/browser";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
- //#region src/components/admin/shared/AdminSection.tsx
8
+ //#region src/components/management/shared/AdminSection.tsx
9
9
  /**
10
10
  * Frames an admin component with a title, a description and actions.
11
11
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSection.js","names":["AdminSection: FC<AdminSectionProps>","useTheme","styles: Record<string, string>","useStyles","Heading: `h${typeof headingLevel}`","content: ReactElement","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,kBAAU;CACvC,MAAMC,SAAiCC,4BAAU,OAAO,YAAY;CACpE,MAAMC,UAAqC,IAAI;CAE/C,MAAMC,UACJ,qBAAC;EAAQ,WAAW,GAAG,yBAAyB,IAAI,MAAM,CAAC,EAAE,OAAO,SAAS,UAAU;cACnF,QAAQ,MAAM,IAAI,QAAQ,QAAQ,KAClC,qBAAC;GAAI,WAAW,GAAG,yBAAyB,IAAI,OAAO,SAAS,CAAC,EAAE,OAAO,UAAU;cAClF,qBAAC,oBACE,SAAS,oBAAC;IAAQ,WAAW,OAAO;cAAW;KAAgB,EAC/D,eAAe,oBAAC;IAAE,WAAW,OAAO;cAAiB;KAAgB,IAClE,EACL,WAAW,oBAAC;IAAI,WAAW,OAAO;cAAa;KAAc;IAC1D,EAEP;GACO;AAGZ,QAAO,cACL,oBAACC,oCAA4B;EAAS,OAAO;YAAc;GAA+C,GAE1G;;AAIJ,2BAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSection.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/AdminSection.styles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAIzC;;;;;;GAMG;AACH,QAAA,MAAM,SAAS,GAAI,OAAO,KAAK,EAAE,aAAa,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CA8ClD,CAAC;AAE3B,eAAe,SAAS,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { css } from "../../../styles/emotion.js";
2
2
  import { useMemo } from "react";
3
3
 
4
- //#region src/components/admin/shared/AdminSection.styles.ts
4
+ //#region src/components/management/shared/AdminSection.styles.ts
5
5
  /**
6
6
  * Creates the styles shared by the admin components: the section frame and the create forms.
7
7
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSection.styles.js","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,gBAC/B,cAAc;CACZ,MAAMA,OAAe,MAAM,KAAK,QAAQ;AAExC,QAAO;EACL,SAAS,GAAG;;;eAGH,KAAK;;EAEd,aAAa,GAAG;uBACC,KAAK;iBACX,MAAM,KAAK,OAAO,KAAK,UAAU;qBAC7B,MAAM,KAAK,WAAW,UAAU,GAAG;;EAElD,MAAM,GAAG;;;oBAGK,KAAK;;;EAGnB,aAAa,GAAG;;eAEP,KAAK;;;EAGd,QAAQ,GAAG;;;;;oBAKG,KAAK;;EAEnB,MAAM,GAAG;;;oBAGK,KAAK;uBACF,MAAM,KAAK,WAAW,WAAW;iBACvC,MAAM,KAAK,OAAO,KAAK,QAAQ;;EAE1C,OAAO,GAAG;;qBAEK,MAAM,KAAK,WAAW,UAAU,GAAG;uBACjC,MAAM,KAAK,WAAW,YAAY,OAAO;;EAE3D;GACA,CAAC,OAAO,YAAY,CAAC;AAE1B,kCAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationFormFields.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/ApplicationFormFields.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA0B,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAc,EAAE,EAAe,MAAM,OAAO,CAAC;AAMpD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,CAAC;AAE/F;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED;;GAEG;AACH,QAAA,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CA0DzD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -5,7 +5,7 @@ import useAdminPartStyles_default from "./useAdminPartStyles.js";
5
5
  import { APPLICATION_GRANT_TYPES } from "@thunderid/browser";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
- //#region src/components/admin/shared/ApplicationFormFields.tsx
8
+ //#region src/components/management/shared/ApplicationFormFields.tsx
9
9
  /**
10
10
  * The general fields and OAuth basics of an application, shared by the create form and the edit form.
11
11
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationFormFields.js","names":["ApplicationFormFields: FC<ApplicationFormFieldsProps>","styles: Record<string, string>","useAdminPartStyles","useTranslation","TextField","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,4BAAoB;CAC3D,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAE7C,MAAM,QAAQ,OAA6B,OAAe,QAAmD,EAAE,KAC7G,oBAACC;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,qBAAC;GAAS,WAAW,OAAO;GAAQ,OAAO;IAAC,QAAQ;IAAG,UAAU;IAAQ,QAAQ;IAAG,SAAS;IAAE;cAC7F,oBAAC;IAAO,WAAW,OAAO;cAAW,EAAE,wCAAwC;KAAU,EACxF,wBAAwB,KAAK,cAC5B,oBAACC;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,oBAACA;GACC,MAAK;GACL,OAAO,EAAE,0CAA0C;GACnD,SAAS,OAAO;GAChB,WAAW,UAA+C,qBAAqB,MAAM,OAAO,QAAQ;IACpG;KAEH;;AAIP,oCAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSecretNotice.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/ClientSecretNotice.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AAOvC,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,QAAA,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAqBnD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -5,7 +5,7 @@ import CopyableText_default from "../../primitives/CopyableText/CopyableText.js"
5
5
  import useAdminPartStyles_default from "./useAdminPartStyles.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
- //#region src/components/admin/shared/ClientSecretNotice.tsx
8
+ //#region src/components/management/shared/ClientSecretNotice.tsx
9
9
  /**
10
10
  * Shows a client secret the one time it can be read, masked until revealed, with a copy button.
11
11
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSecretNotice.js","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,4BAAoB;CAC3D,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;AAE7C,QACE,qBAAC;EAAI,WAAW,OAAO;EAAQ,OAAO;GAAC,YAAY;GAAW,eAAe;GAAS;;GACpF,oBAACC;IAAM,SAAQ;IAAU,MAAK;cAC3B,EAAE,mCAAmC;KAChC;GACR,oBAACC;IAAa,OAAO,EAAE,kCAAkC;IAAE,OAAO;IAAQ;KAAS;GAClF,aACC,oBAAC;IAAI,WAAW,OAAO;IAAQ,OAAO,EAAC,gBAAgB,YAAW;cAChE,oBAACC;KAAO,SAAS;eAAY,EAAE,iCAAiC;MAAU;KACtE;;GAEJ;;AAIV,iCAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentityPicker.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/IdentityPicker.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAyB,YAAY,EAAW,MAAM,OAAO,CAAC;AAMrE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,MAAM;IACvD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxD;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,CAAC,QAAQ,EAAE;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAC,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,KAAK,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAC,EAAE,CAAC;CACxC;AAED;;GAEG;AACH,QAAA,MAAM,cAAc,GAAI,KAAK,SAAS,MAAM,EAAE,oEAO3C,mBAAmB,CAAC,KAAK,CAAC,KAAG,YA6C/B,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -5,7 +5,7 @@ import useAdminPartStyles_default from "./useAdminPartStyles.js";
5
5
  import { useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
- //#region src/components/admin/shared/IdentityPicker.tsx
8
+ //#region src/components/management/shared/IdentityPicker.tsx
9
9
  /**
10
10
  * Picks one identity of a chosen type and adds it, for example as a group member or a role assignee.
11
11
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentityPicker.js","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,4BAAoB;CAC3D,MAAM,EAAC,MAAKC,wBAAgB;CAC5B,MAAM,CAAC,MAAM,WAAW,SAAgB,MAAM,IAAI,MAAM;CACxD,MAAM,CAAC,YAAY,iBAAiB,SAAiB,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,qBAAC;EAAK,WAAW,OAAO;EAAQ,UAAU;EAAc,OAAO,EAAC,YAAY,YAAW;;GACrF,oBAACC;IACC,OAAO,EAAE,oCAAoC;IAC7C,MAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW,UAAgD;AACzD,aAAQ,MAAM,OAAO,MAAe;AACpC,mBAAc,GAAG;;KAEnB;GACF,oBAACA;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,oBAACC;IAAO,MAAK;IAAS,SAAS;IAAc,UAAU,CAAC,cAAc;cACnE;KACM;;GACJ;;AAIX,6BAAe"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Formats an ISO timestamp for display in the user's locale, leaving it as it is when it cannot be read.
3
+ *
4
+ * @param value - The timestamp.
5
+ * @returns The formatted timestamp, or `undefined` when there is none.
6
+ */
7
+ declare const formatTimestamp: (value?: string) => string | undefined;
8
+ export default formatTimestamp;
9
+ //# sourceMappingURL=formatTimestamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatTimestamp.d.ts","sourceRoot":"","sources":["../../../../src/components/management/shared/formatTimestamp.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,QAAA,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAQlD,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,17 @@
1
+ //#region src/components/management/shared/formatTimestamp.ts
2
+ /**
3
+ * Formats an ISO timestamp for display in the user's locale, leaving it as it is when it cannot be read.
4
+ *
5
+ * @param value - The timestamp.
6
+ * @returns The formatted timestamp, or `undefined` when there is none.
7
+ */
8
+ const formatTimestamp = (value) => {
9
+ if (!value) return;
10
+ const date = new Date(value);
11
+ return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
12
+ };
13
+ var formatTimestamp_default = formatTimestamp;
14
+
15
+ //#endregion
16
+ export { formatTimestamp_default as default };
17
+ //# sourceMappingURL=formatTimestamp.js.map