@thunderid/react 1.6.0 → 1.8.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 (353) hide show
  1. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs +15 -4
  2. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs.map +1 -1
  3. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs +36 -8
  4. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs.map +1 -1
  5. package/dist/cjs/components/admin/AgentList/AgentList.cjs +13 -4
  6. package/dist/cjs/components/admin/AgentList/AgentList.cjs.map +1 -1
  7. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs +70 -0
  8. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs.map +1 -0
  9. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs +135 -0
  10. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs.map +1 -0
  11. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs +82 -0
  12. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs.map +1 -0
  13. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs +238 -0
  14. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs.map +1 -0
  15. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs +55 -0
  16. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs.map +1 -0
  17. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs +95 -0
  18. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs.map +1 -0
  19. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs +8 -2
  20. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs.map +1 -1
  21. package/dist/cjs/components/admin/GroupList/GroupList.cjs +10 -3
  22. package/dist/cjs/components/admin/GroupList/GroupList.cjs.map +1 -1
  23. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs +47 -10
  24. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs.map +1 -1
  25. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs +48 -14
  26. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs.map +1 -1
  27. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs +8 -2
  28. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs.map +1 -1
  29. package/dist/cjs/components/admin/RoleList/RoleList.cjs +10 -3
  30. package/dist/cjs/components/admin/RoleList/RoleList.cjs.map +1 -1
  31. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs +8 -2
  32. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs.map +1 -1
  33. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs +15 -4
  34. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs.map +1 -1
  35. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs +31 -8
  36. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs.map +1 -1
  37. package/dist/cjs/components/admin/UserList/UserList.cjs +13 -4
  38. package/dist/cjs/components/admin/UserList/UserList.cjs.map +1 -1
  39. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs +62 -0
  40. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs.map +1 -0
  41. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs +49 -0
  42. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs.map +1 -0
  43. package/dist/cjs/components/auth/InviteUser/InviteUser.cjs +1 -1
  44. package/dist/cjs/components/auth/flow/Consent.cjs +93 -73
  45. package/dist/cjs/components/auth/flow/Consent.cjs.map +1 -1
  46. package/dist/cjs/hooks/management/useManagementEndpoint.cjs.map +1 -1
  47. package/dist/cjs/hooks/management/useManagementRequestConfig.cjs +41 -0
  48. package/dist/cjs/hooks/management/useManagementRequestConfig.cjs.map +1 -0
  49. package/dist/cjs/index.cjs +1066 -188
  50. package/dist/components/admin/AgentCreate/AgentCreate.d.ts.map +1 -1
  51. package/dist/components/admin/AgentCreate/AgentCreate.js +16 -5
  52. package/dist/components/admin/AgentCreate/AgentCreate.js.map +1 -1
  53. package/dist/components/admin/AgentDetails/AgentDetails.d.ts.map +1 -1
  54. package/dist/components/admin/AgentDetails/AgentDetails.js +37 -9
  55. package/dist/components/admin/AgentDetails/AgentDetails.js.map +1 -1
  56. package/dist/components/admin/AgentList/AgentList.d.ts.map +1 -1
  57. package/dist/components/admin/AgentList/AgentList.js +14 -5
  58. package/dist/components/admin/AgentList/AgentList.js.map +1 -1
  59. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts +30 -0
  60. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts.map +1 -0
  61. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js +66 -0
  62. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js.map +1 -0
  63. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts +80 -0
  64. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts.map +1 -0
  65. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js +131 -0
  66. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js.map +1 -0
  67. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts +50 -0
  68. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts.map +1 -0
  69. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js +79 -0
  70. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js.map +1 -0
  71. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts +92 -0
  72. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts.map +1 -0
  73. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js +234 -0
  74. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js.map +1 -0
  75. package/dist/components/admin/ApplicationList/ApplicationList.d.ts +18 -0
  76. package/dist/components/admin/ApplicationList/ApplicationList.d.ts.map +1 -0
  77. package/dist/components/admin/ApplicationList/ApplicationList.js +51 -0
  78. package/dist/components/admin/ApplicationList/ApplicationList.js.map +1 -0
  79. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts +55 -0
  80. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts.map +1 -0
  81. package/dist/components/admin/ApplicationList/BaseApplicationList.js +93 -0
  82. package/dist/components/admin/ApplicationList/BaseApplicationList.js.map +1 -0
  83. package/dist/components/admin/GroupCreate/GroupCreate.d.ts.map +1 -1
  84. package/dist/components/admin/GroupCreate/GroupCreate.js +9 -3
  85. package/dist/components/admin/GroupCreate/GroupCreate.js.map +1 -1
  86. package/dist/components/admin/GroupList/GroupList.d.ts.map +1 -1
  87. package/dist/components/admin/GroupList/GroupList.js +11 -4
  88. package/dist/components/admin/GroupList/GroupList.js.map +1 -1
  89. package/dist/components/admin/GroupMembers/GroupMembers.d.ts.map +1 -1
  90. package/dist/components/admin/GroupMembers/GroupMembers.js +48 -11
  91. package/dist/components/admin/GroupMembers/GroupMembers.js.map +1 -1
  92. package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts.map +1 -1
  93. package/dist/components/admin/RoleAssignments/RoleAssignments.js +49 -15
  94. package/dist/components/admin/RoleAssignments/RoleAssignments.js.map +1 -1
  95. package/dist/components/admin/RoleCreate/RoleCreate.d.ts.map +1 -1
  96. package/dist/components/admin/RoleCreate/RoleCreate.js +9 -3
  97. package/dist/components/admin/RoleCreate/RoleCreate.js.map +1 -1
  98. package/dist/components/admin/RoleList/RoleList.d.ts.map +1 -1
  99. package/dist/components/admin/RoleList/RoleList.js +11 -4
  100. package/dist/components/admin/RoleList/RoleList.js.map +1 -1
  101. package/dist/components/admin/RolePermissions/RolePermissions.d.ts.map +1 -1
  102. package/dist/components/admin/RolePermissions/RolePermissions.js +9 -3
  103. package/dist/components/admin/RolePermissions/RolePermissions.js.map +1 -1
  104. package/dist/components/admin/UserCreate/UserCreate.d.ts.map +1 -1
  105. package/dist/components/admin/UserCreate/UserCreate.js +16 -5
  106. package/dist/components/admin/UserCreate/UserCreate.js.map +1 -1
  107. package/dist/components/admin/UserDetails/UserDetails.d.ts.map +1 -1
  108. package/dist/components/admin/UserDetails/UserDetails.js +32 -9
  109. package/dist/components/admin/UserDetails/UserDetails.js.map +1 -1
  110. package/dist/components/admin/UserList/UserList.d.ts.map +1 -1
  111. package/dist/components/admin/UserList/UserList.js +14 -5
  112. package/dist/components/admin/UserList/UserList.js.map +1 -1
  113. package/dist/components/admin/shared/ApplicationFormFields.d.ts +35 -0
  114. package/dist/components/admin/shared/ApplicationFormFields.d.ts.map +1 -0
  115. package/dist/components/admin/shared/ApplicationFormFields.js +59 -0
  116. package/dist/components/admin/shared/ApplicationFormFields.js.map +1 -0
  117. package/dist/components/admin/shared/ClientSecretNotice.d.ts +16 -0
  118. package/dist/components/admin/shared/ClientSecretNotice.d.ts.map +1 -0
  119. package/dist/components/admin/shared/ClientSecretNotice.js +47 -0
  120. package/dist/components/admin/shared/ClientSecretNotice.js.map +1 -0
  121. package/dist/components/auth/InviteUser/InviteUser.js +1 -1
  122. package/dist/components/auth/flow/Consent.d.ts.map +1 -1
  123. package/dist/components/auth/flow/Consent.js +94 -75
  124. package/dist/components/auth/flow/Consent.js.map +1 -1
  125. package/dist/hooks/management/useManagementEndpoint.d.ts +5 -1
  126. package/dist/hooks/management/useManagementEndpoint.d.ts.map +1 -1
  127. package/dist/hooks/management/useManagementEndpoint.js.map +1 -1
  128. package/dist/hooks/management/useManagementRequestConfig.d.ts +22 -0
  129. package/dist/hooks/management/useManagementRequestConfig.d.ts.map +1 -0
  130. package/dist/hooks/management/useManagementRequestConfig.js +39 -0
  131. package/dist/hooks/management/useManagementRequestConfig.js.map +1 -0
  132. package/dist/index.d.ts +22 -55
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +12 -41
  135. package/dist/models/config.d.ts +3 -4
  136. package/dist/models/config.d.ts.map +1 -1
  137. package/package.json +2 -2
  138. package/dist/cjs/hooks/management/agents/useCreateAgent.cjs +0 -26
  139. package/dist/cjs/hooks/management/agents/useCreateAgent.cjs.map +0 -1
  140. package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs +0 -26
  141. package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs.map +0 -1
  142. package/dist/cjs/hooks/management/agents/useGetAgent.cjs +0 -30
  143. package/dist/cjs/hooks/management/agents/useGetAgent.cjs.map +0 -1
  144. package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs +0 -41
  145. package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs.map +0 -1
  146. package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs +0 -42
  147. package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs.map +0 -1
  148. package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs +0 -31
  149. package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs.map +0 -1
  150. package/dist/cjs/hooks/management/agents/useGetAgents.cjs +0 -33
  151. package/dist/cjs/hooks/management/agents/useGetAgents.cjs.map +0 -1
  152. package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs +0 -27
  153. package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs.map +0 -1
  154. package/dist/cjs/hooks/management/applications/useCreateApplication.cjs +0 -31
  155. package/dist/cjs/hooks/management/applications/useCreateApplication.cjs.map +0 -1
  156. package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs +0 -26
  157. package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs.map +0 -1
  158. package/dist/cjs/hooks/management/applications/useGetApplication.cjs +0 -35
  159. package/dist/cjs/hooks/management/applications/useGetApplication.cjs.map +0 -1
  160. package/dist/cjs/hooks/management/applications/useGetApplications.cjs +0 -36
  161. package/dist/cjs/hooks/management/applications/useGetApplications.cjs.map +0 -1
  162. package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs +0 -27
  163. package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs.map +0 -1
  164. package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs +0 -32
  165. package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs.map +0 -1
  166. package/dist/cjs/hooks/management/groups/useCreateGroup.cjs +0 -26
  167. package/dist/cjs/hooks/management/groups/useCreateGroup.cjs.map +0 -1
  168. package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs +0 -30
  169. package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs.map +0 -1
  170. package/dist/cjs/hooks/management/groups/useGetGroup.cjs +0 -30
  171. package/dist/cjs/hooks/management/groups/useGetGroup.cjs.map +0 -1
  172. package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs +0 -40
  173. package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs.map +0 -1
  174. package/dist/cjs/hooks/management/groups/useGetGroups.cjs +0 -31
  175. package/dist/cjs/hooks/management/groups/useGetGroups.cjs.map +0 -1
  176. package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs +0 -32
  177. package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs.map +0 -1
  178. package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs +0 -31
  179. package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs.map +0 -1
  180. package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs +0 -27
  181. package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs.map +0 -1
  182. package/dist/cjs/hooks/management/roles/useCreateRole.cjs +0 -26
  183. package/dist/cjs/hooks/management/roles/useCreateRole.cjs.map +0 -1
  184. package/dist/cjs/hooks/management/roles/useDeleteRole.cjs +0 -26
  185. package/dist/cjs/hooks/management/roles/useDeleteRole.cjs.map +0 -1
  186. package/dist/cjs/hooks/management/roles/useGetRole.cjs +0 -30
  187. package/dist/cjs/hooks/management/roles/useGetRole.cjs.map +0 -1
  188. package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs +0 -42
  189. package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs.map +0 -1
  190. package/dist/cjs/hooks/management/roles/useGetRoles.cjs +0 -31
  191. package/dist/cjs/hooks/management/roles/useGetRoles.cjs.map +0 -1
  192. package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs +0 -27
  193. package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs.map +0 -1
  194. package/dist/cjs/hooks/management/roles/useUpdateRole.cjs +0 -27
  195. package/dist/cjs/hooks/management/roles/useUpdateRole.cjs.map +0 -1
  196. package/dist/cjs/hooks/management/users/useCreateUser.cjs +0 -26
  197. package/dist/cjs/hooks/management/users/useCreateUser.cjs.map +0 -1
  198. package/dist/cjs/hooks/management/users/useDeleteUser.cjs +0 -26
  199. package/dist/cjs/hooks/management/users/useDeleteUser.cjs.map +0 -1
  200. package/dist/cjs/hooks/management/users/useGetUser.cjs +0 -30
  201. package/dist/cjs/hooks/management/users/useGetUser.cjs.map +0 -1
  202. package/dist/cjs/hooks/management/users/useGetUserGroups.cjs +0 -41
  203. package/dist/cjs/hooks/management/users/useGetUserGroups.cjs.map +0 -1
  204. package/dist/cjs/hooks/management/users/useGetUserTypes.cjs +0 -31
  205. package/dist/cjs/hooks/management/users/useGetUserTypes.cjs.map +0 -1
  206. package/dist/cjs/hooks/management/users/useGetUsers.cjs +0 -38
  207. package/dist/cjs/hooks/management/users/useGetUsers.cjs.map +0 -1
  208. package/dist/cjs/hooks/management/users/useUpdateUser.cjs +0 -27
  209. package/dist/cjs/hooks/management/users/useUpdateUser.cjs.map +0 -1
  210. package/dist/hooks/management/agents/useCreateAgent.d.ts +0 -11
  211. package/dist/hooks/management/agents/useCreateAgent.d.ts.map +0 -1
  212. package/dist/hooks/management/agents/useCreateAgent.js +0 -24
  213. package/dist/hooks/management/agents/useCreateAgent.js.map +0 -1
  214. package/dist/hooks/management/agents/useDeleteAgent.d.ts +0 -10
  215. package/dist/hooks/management/agents/useDeleteAgent.d.ts.map +0 -1
  216. package/dist/hooks/management/agents/useDeleteAgent.js +0 -24
  217. package/dist/hooks/management/agents/useDeleteAgent.js.map +0 -1
  218. package/dist/hooks/management/agents/useGetAgent.d.ts +0 -12
  219. package/dist/hooks/management/agents/useGetAgent.d.ts.map +0 -1
  220. package/dist/hooks/management/agents/useGetAgent.js +0 -28
  221. package/dist/hooks/management/agents/useGetAgent.js.map +0 -1
  222. package/dist/hooks/management/agents/useGetAgentGroups.d.ts +0 -16
  223. package/dist/hooks/management/agents/useGetAgentGroups.d.ts.map +0 -1
  224. package/dist/hooks/management/agents/useGetAgentGroups.js +0 -39
  225. package/dist/hooks/management/agents/useGetAgentGroups.js.map +0 -1
  226. package/dist/hooks/management/agents/useGetAgentRoles.d.ts +0 -17
  227. package/dist/hooks/management/agents/useGetAgentRoles.d.ts.map +0 -1
  228. package/dist/hooks/management/agents/useGetAgentRoles.js +0 -40
  229. package/dist/hooks/management/agents/useGetAgentRoles.js.map +0 -1
  230. package/dist/hooks/management/agents/useGetAgentTypes.d.ts +0 -15
  231. package/dist/hooks/management/agents/useGetAgentTypes.d.ts.map +0 -1
  232. package/dist/hooks/management/agents/useGetAgentTypes.js +0 -29
  233. package/dist/hooks/management/agents/useGetAgentTypes.js.map +0 -1
  234. package/dist/hooks/management/agents/useGetAgents.d.ts +0 -23
  235. package/dist/hooks/management/agents/useGetAgents.d.ts.map +0 -1
  236. package/dist/hooks/management/agents/useGetAgents.js +0 -31
  237. package/dist/hooks/management/agents/useGetAgents.js.map +0 -1
  238. package/dist/hooks/management/agents/useUpdateAgent.d.ts +0 -18
  239. package/dist/hooks/management/agents/useUpdateAgent.d.ts.map +0 -1
  240. package/dist/hooks/management/agents/useUpdateAgent.js +0 -25
  241. package/dist/hooks/management/agents/useUpdateAgent.js.map +0 -1
  242. package/dist/hooks/management/applications/useCreateApplication.d.ts +0 -16
  243. package/dist/hooks/management/applications/useCreateApplication.d.ts.map +0 -1
  244. package/dist/hooks/management/applications/useCreateApplication.js +0 -29
  245. package/dist/hooks/management/applications/useCreateApplication.js.map +0 -1
  246. package/dist/hooks/management/applications/useDeleteApplication.d.ts +0 -10
  247. package/dist/hooks/management/applications/useDeleteApplication.d.ts.map +0 -1
  248. package/dist/hooks/management/applications/useDeleteApplication.js +0 -24
  249. package/dist/hooks/management/applications/useDeleteApplication.js.map +0 -1
  250. package/dist/hooks/management/applications/useGetApplication.d.ts +0 -17
  251. package/dist/hooks/management/applications/useGetApplication.d.ts.map +0 -1
  252. package/dist/hooks/management/applications/useGetApplication.js +0 -33
  253. package/dist/hooks/management/applications/useGetApplication.js.map +0 -1
  254. package/dist/hooks/management/applications/useGetApplications.d.ts +0 -24
  255. package/dist/hooks/management/applications/useGetApplications.d.ts.map +0 -1
  256. package/dist/hooks/management/applications/useGetApplications.js +0 -34
  257. package/dist/hooks/management/applications/useGetApplications.js.map +0 -1
  258. package/dist/hooks/management/applications/useUpdateApplication.d.ts +0 -18
  259. package/dist/hooks/management/applications/useUpdateApplication.d.ts.map +0 -1
  260. package/dist/hooks/management/applications/useUpdateApplication.js +0 -25
  261. package/dist/hooks/management/applications/useUpdateApplication.js.map +0 -1
  262. package/dist/hooks/management/groups/useAddGroupMembers.d.ts +0 -24
  263. package/dist/hooks/management/groups/useAddGroupMembers.d.ts.map +0 -1
  264. package/dist/hooks/management/groups/useAddGroupMembers.js +0 -30
  265. package/dist/hooks/management/groups/useAddGroupMembers.js.map +0 -1
  266. package/dist/hooks/management/groups/useCreateGroup.d.ts +0 -11
  267. package/dist/hooks/management/groups/useCreateGroup.d.ts.map +0 -1
  268. package/dist/hooks/management/groups/useCreateGroup.js +0 -24
  269. package/dist/hooks/management/groups/useCreateGroup.js.map +0 -1
  270. package/dist/hooks/management/groups/useDeleteGroup.d.ts +0 -10
  271. package/dist/hooks/management/groups/useDeleteGroup.d.ts.map +0 -1
  272. package/dist/hooks/management/groups/useDeleteGroup.js +0 -28
  273. package/dist/hooks/management/groups/useDeleteGroup.js.map +0 -1
  274. package/dist/hooks/management/groups/useGetGroup.d.ts +0 -12
  275. package/dist/hooks/management/groups/useGetGroup.d.ts.map +0 -1
  276. package/dist/hooks/management/groups/useGetGroup.js +0 -28
  277. package/dist/hooks/management/groups/useGetGroup.js.map +0 -1
  278. package/dist/hooks/management/groups/useGetGroupMembers.d.ts +0 -20
  279. package/dist/hooks/management/groups/useGetGroupMembers.d.ts.map +0 -1
  280. package/dist/hooks/management/groups/useGetGroupMembers.js +0 -38
  281. package/dist/hooks/management/groups/useGetGroupMembers.js.map +0 -1
  282. package/dist/hooks/management/groups/useGetGroups.d.ts +0 -19
  283. package/dist/hooks/management/groups/useGetGroups.d.ts.map +0 -1
  284. package/dist/hooks/management/groups/useGetGroups.js +0 -29
  285. package/dist/hooks/management/groups/useGetGroups.js.map +0 -1
  286. package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts +0 -12
  287. package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts.map +0 -1
  288. package/dist/hooks/management/groups/useRemoveGroupMembers.js +0 -30
  289. package/dist/hooks/management/groups/useRemoveGroupMembers.js.map +0 -1
  290. package/dist/hooks/management/groups/useUpdateGroup.d.ts +0 -24
  291. package/dist/hooks/management/groups/useUpdateGroup.d.ts.map +0 -1
  292. package/dist/hooks/management/groups/useUpdateGroup.js +0 -29
  293. package/dist/hooks/management/groups/useUpdateGroup.js.map +0 -1
  294. package/dist/hooks/management/roles/useAddRoleAssignments.d.ts +0 -24
  295. package/dist/hooks/management/roles/useAddRoleAssignments.d.ts.map +0 -1
  296. package/dist/hooks/management/roles/useAddRoleAssignments.js +0 -25
  297. package/dist/hooks/management/roles/useAddRoleAssignments.js.map +0 -1
  298. package/dist/hooks/management/roles/useCreateRole.d.ts +0 -11
  299. package/dist/hooks/management/roles/useCreateRole.d.ts.map +0 -1
  300. package/dist/hooks/management/roles/useCreateRole.js +0 -24
  301. package/dist/hooks/management/roles/useCreateRole.js.map +0 -1
  302. package/dist/hooks/management/roles/useDeleteRole.d.ts +0 -10
  303. package/dist/hooks/management/roles/useDeleteRole.d.ts.map +0 -1
  304. package/dist/hooks/management/roles/useDeleteRole.js +0 -24
  305. package/dist/hooks/management/roles/useDeleteRole.js.map +0 -1
  306. package/dist/hooks/management/roles/useGetRole.d.ts +0 -12
  307. package/dist/hooks/management/roles/useGetRole.d.ts.map +0 -1
  308. package/dist/hooks/management/roles/useGetRole.js +0 -28
  309. package/dist/hooks/management/roles/useGetRole.js.map +0 -1
  310. package/dist/hooks/management/roles/useGetRoleAssignments.d.ts +0 -24
  311. package/dist/hooks/management/roles/useGetRoleAssignments.d.ts.map +0 -1
  312. package/dist/hooks/management/roles/useGetRoleAssignments.js +0 -40
  313. package/dist/hooks/management/roles/useGetRoleAssignments.js.map +0 -1
  314. package/dist/hooks/management/roles/useGetRoles.d.ts +0 -19
  315. package/dist/hooks/management/roles/useGetRoles.d.ts.map +0 -1
  316. package/dist/hooks/management/roles/useGetRoles.js +0 -29
  317. package/dist/hooks/management/roles/useGetRoles.js.map +0 -1
  318. package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts +0 -11
  319. package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts.map +0 -1
  320. package/dist/hooks/management/roles/useRemoveRoleAssignments.js +0 -25
  321. package/dist/hooks/management/roles/useRemoveRoleAssignments.js.map +0 -1
  322. package/dist/hooks/management/roles/useUpdateRole.d.ts +0 -24
  323. package/dist/hooks/management/roles/useUpdateRole.d.ts.map +0 -1
  324. package/dist/hooks/management/roles/useUpdateRole.js +0 -25
  325. package/dist/hooks/management/roles/useUpdateRole.js.map +0 -1
  326. package/dist/hooks/management/users/useCreateUser.d.ts +0 -11
  327. package/dist/hooks/management/users/useCreateUser.d.ts.map +0 -1
  328. package/dist/hooks/management/users/useCreateUser.js +0 -24
  329. package/dist/hooks/management/users/useCreateUser.js.map +0 -1
  330. package/dist/hooks/management/users/useDeleteUser.d.ts +0 -10
  331. package/dist/hooks/management/users/useDeleteUser.d.ts.map +0 -1
  332. package/dist/hooks/management/users/useDeleteUser.js +0 -24
  333. package/dist/hooks/management/users/useDeleteUser.js.map +0 -1
  334. package/dist/hooks/management/users/useGetUser.d.ts +0 -12
  335. package/dist/hooks/management/users/useGetUser.d.ts.map +0 -1
  336. package/dist/hooks/management/users/useGetUser.js +0 -28
  337. package/dist/hooks/management/users/useGetUser.js.map +0 -1
  338. package/dist/hooks/management/users/useGetUserGroups.d.ts +0 -16
  339. package/dist/hooks/management/users/useGetUserGroups.d.ts.map +0 -1
  340. package/dist/hooks/management/users/useGetUserGroups.js +0 -39
  341. package/dist/hooks/management/users/useGetUserGroups.js.map +0 -1
  342. package/dist/hooks/management/users/useGetUserTypes.d.ts +0 -15
  343. package/dist/hooks/management/users/useGetUserTypes.d.ts.map +0 -1
  344. package/dist/hooks/management/users/useGetUserTypes.js +0 -29
  345. package/dist/hooks/management/users/useGetUserTypes.js.map +0 -1
  346. package/dist/hooks/management/users/useGetUsers.d.ts +0 -17
  347. package/dist/hooks/management/users/useGetUsers.d.ts.map +0 -1
  348. package/dist/hooks/management/users/useGetUsers.js +0 -36
  349. package/dist/hooks/management/users/useGetUsers.js.map +0 -1
  350. package/dist/hooks/management/users/useUpdateUser.d.ts +0 -18
  351. package/dist/hooks/management/users/useUpdateUser.d.ts.map +0 -1
  352. package/dist/hooks/management/users/useUpdateUser.js +0 -25
  353. package/dist/hooks/management/users/useUpdateUser.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationDetails/ApplicationDetails.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAA+B,EAE7B,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAWlC,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,2BAA2B,EACzB,aAAa,GACb,cAAc,GACd,OAAO,GACP,YAAY,GACZ,WAAW,GACX,sBAAsB,GACtB,YAAY,GACZ,UAAU,GACV,oBAAoB,GACpB,iBAAiB,GACjB,UAAU,CACb,GAAG;IACF,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAkEnD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,79 @@
1
+ import useTranslation_default from "../../../hooks/useTranslation.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
4
+ import useResourceMutation_default from "../../../hooks/management/useResourceMutation.js";
5
+ import BaseApplicationDetails_default from "./BaseApplicationDetails.js";
6
+ import { ApplicationQueryKeys, deleteApplication, getApplication, regenerateClientSecret, toManagementErrorMessage, toUpdateApplicationRequest, updateApplication } from "@thunderid/browser";
7
+ import { jsx } from "react/jsx-runtime";
8
+
9
+ //#region src/components/admin/ApplicationDetails/ApplicationDetails.tsx
10
+ /**
11
+ * Shows an application and its OAuth configuration, and optionally lets the signed-in user edit it,
12
+ * regenerate its client secret or delete it.
13
+ *
14
+ * The server guards applications with the root `system` permission, for reading and for changes alike;
15
+ * it defines no application-specific permission. Gate the view and its actions on it with
16
+ * `useGrantedPermissions().can('system')`.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * const {can} = useGrantedPermissions();
21
+ * const isAdmin = can('system');
22
+ *
23
+ * <ApplicationDetails
24
+ * applicationId={applicationId}
25
+ * editable={isAdmin}
26
+ * deletable={isAdmin}
27
+ * secretRegenerable={isAdmin}
28
+ * onDeleted={() => navigate('/applications')}
29
+ * />
30
+ * ```
31
+ */
32
+ const ApplicationDetails = ({ applicationId, deletable = false, editable = false, onDeleted, preferences, secretRegenerable = false,...rest }) => {
33
+ const { t } = useTranslation_default(preferences?.i18n);
34
+ const endpoint = useManagementEndpoint_default("applications");
35
+ const application = useResourceQuery_default([ApplicationQueryKeys.APPLICATION, applicationId], (fetcher) => getApplication({
36
+ ...endpoint,
37
+ applicationId,
38
+ fetcher
39
+ }), { enabled: Boolean(applicationId) });
40
+ const deletion = useResourceMutation_default((id, fetcher) => deleteApplication({
41
+ ...endpoint,
42
+ applicationId: id,
43
+ fetcher
44
+ }), () => [[ApplicationQueryKeys.APPLICATIONS]], { onSuccess: onDeleted });
45
+ const update = useResourceMutation_default(({ application: current, changes }, fetcher) => updateApplication({
46
+ ...endpoint,
47
+ applicationId: current.id,
48
+ fetcher,
49
+ payload: toUpdateApplicationRequest(current, changes)
50
+ }), ({ application: current }) => [[ApplicationQueryKeys.APPLICATION, current.id], [ApplicationQueryKeys.APPLICATIONS]]);
51
+ const regeneration = useResourceMutation_default((id, fetcher) => regenerateClientSecret({
52
+ ...endpoint,
53
+ applicationId: id,
54
+ fetcher
55
+ }), (id) => [[ApplicationQueryKeys.APPLICATION, id], [ApplicationQueryKeys.APPLICATIONS]]);
56
+ return /* @__PURE__ */ jsx(BaseApplicationDetails_default, {
57
+ application: application.data,
58
+ isLoading: application.isLoading,
59
+ error: toManagementErrorMessage(t, application.error, "admin.applications.details.error") ?? toManagementErrorMessage(t, deletion.error, "admin.applications.details.delete.error") ?? toManagementErrorMessage(t, update.error, "admin.applications.details.edit.error") ?? toManagementErrorMessage(t, regeneration.error, "admin.applications.details.secret.error"),
60
+ isDeleting: deletion.isLoading,
61
+ onDelete: deletable ? () => void deletion.mutate(applicationId) : void 0,
62
+ isUpdating: update.isLoading,
63
+ onUpdate: editable && application.data ? (changes) => void update.mutate({
64
+ application: application.data,
65
+ changes
66
+ }) : void 0,
67
+ isRegeneratingSecret: regeneration.isLoading,
68
+ onRegenerateSecret: secretRegenerable ? () => void regeneration.mutate(applicationId) : void 0,
69
+ clientSecret: regeneration.data?.clientSecret ?? null,
70
+ onSecretDismiss: regeneration.reset,
71
+ preferences,
72
+ ...rest
73
+ });
74
+ };
75
+ var ApplicationDetails_default = ApplicationDetails;
76
+
77
+ //#endregion
78
+ export { ApplicationDetails_default as default };
79
+ //# sourceMappingURL=ApplicationDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationDetails.js","names":["ApplicationDetails: FC<ApplicationDetailsProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","application: ResourceQueryResult<Application>","useResourceQuery","deletion: ResourceMutationResult<void, string>","useResourceMutation","update: ResourceMutationResult<Application, UpdateApplicationVariables>","regeneration: ResourceMutationResult<RegenerateClientSecretResult, string>","BaseApplicationDetails"],"sources":["../../../../src/components/admin/ApplicationDetails/ApplicationDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Application,\n ApplicationQueryKeys,\n deleteApplication,\n getApplication,\n regenerateClientSecret,\n RegenerateClientSecretResult,\n toManagementErrorMessage,\n toUpdateApplicationRequest,\n updateApplication,\n} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseApplicationDetails, {\n ApplicationUpdateSubmission,\n BaseApplicationDetailsProps,\n} from './BaseApplicationDetails';\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 UpdateApplicationVariables {\n application: Application;\n changes: ApplicationUpdateSubmission;\n}\n\nexport type ApplicationDetailsProps = Omit<\n BaseApplicationDetailsProps,\n | 'application'\n | 'clientSecret'\n | 'error'\n | 'isDeleting'\n | 'isLoading'\n | 'isRegeneratingSecret'\n | 'isUpdating'\n | 'onDelete'\n | 'onRegenerateSecret'\n | 'onSecretDismiss'\n | 'onUpdate'\n> & {\n applicationId: string;\n /**\n * Whether the application can be deleted from this view.\n * @default false\n */\n deletable?: boolean;\n /**\n * Whether the application's general fields, redirect URIs and grant types can be edited from this view.\n * @default false\n */\n editable?: boolean;\n /**\n * Called after the application has been deleted.\n */\n onDeleted?: () => void;\n /**\n * Whether the application's client secret can be regenerated from this view. The new secret is shown\n * once.\n * @default false\n */\n secretRegenerable?: boolean;\n};\n\n/**\n * Shows an application and its OAuth configuration, and optionally lets the signed-in user edit it,\n * regenerate its client secret or delete it.\n *\n * The server guards applications with the root `system` permission, for reading and for changes alike;\n * it defines no application-specific permission. Gate the view and its actions on it with\n * `useGrantedPermissions().can('system')`.\n *\n * @example\n * ```tsx\n * const {can} = useGrantedPermissions();\n * const isAdmin = can('system');\n *\n * <ApplicationDetails\n * applicationId={applicationId}\n * editable={isAdmin}\n * deletable={isAdmin}\n * secretRegenerable={isAdmin}\n * onDeleted={() => navigate('/applications')}\n * />\n * ```\n */\nconst ApplicationDetails: FC<ApplicationDetailsProps> = ({\n applicationId,\n deletable = false,\n editable = false,\n onDeleted,\n preferences,\n secretRegenerable = false,\n ...rest\n}: ApplicationDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const endpoint: ManagementEndpoint = useManagementEndpoint('applications');\n const application: ResourceQueryResult<Application> = useResourceQuery(\n [ApplicationQueryKeys.APPLICATION, applicationId],\n (fetcher) => getApplication({...endpoint, applicationId, fetcher}),\n {enabled: Boolean(applicationId)},\n );\n const deletion: ResourceMutationResult<void, string> = useResourceMutation(\n (id: string, fetcher) => deleteApplication({...endpoint, applicationId: id, fetcher}),\n () => [[ApplicationQueryKeys.APPLICATIONS]],\n {onSuccess: onDeleted},\n );\n const update: ResourceMutationResult<Application, UpdateApplicationVariables> = useResourceMutation(\n ({application: current, changes}: UpdateApplicationVariables, fetcher) =>\n updateApplication({\n ...endpoint,\n applicationId: current.id,\n fetcher,\n payload: toUpdateApplicationRequest(current, changes),\n }),\n ({application: current}: UpdateApplicationVariables) => [\n [ApplicationQueryKeys.APPLICATION, current.id],\n [ApplicationQueryKeys.APPLICATIONS],\n ],\n );\n const regeneration: ResourceMutationResult<RegenerateClientSecretResult, string> = useResourceMutation(\n (id: string, fetcher) => regenerateClientSecret({...endpoint, applicationId: id, fetcher}),\n (id: string) => [[ApplicationQueryKeys.APPLICATION, id], [ApplicationQueryKeys.APPLICATIONS]],\n );\n\n return (\n <BaseApplicationDetails\n application={application.data}\n isLoading={application.isLoading}\n error={\n toManagementErrorMessage(t, application.error, 'admin.applications.details.error') ??\n toManagementErrorMessage(t, deletion.error, 'admin.applications.details.delete.error') ??\n toManagementErrorMessage(t, update.error, 'admin.applications.details.edit.error') ??\n toManagementErrorMessage(t, regeneration.error, 'admin.applications.details.secret.error')\n }\n isDeleting={deletion.isLoading}\n onDelete={deletable ? (): void => void deletion.mutate(applicationId) : undefined}\n isUpdating={update.isLoading}\n onUpdate={\n editable && application.data\n ? (changes: ApplicationUpdateSubmission): void =>\n void update.mutate({application: application.data!, changes})\n : undefined\n }\n isRegeneratingSecret={regeneration.isLoading}\n onRegenerateSecret={secretRegenerable ? (): void => void regeneration.mutate(applicationId) : undefined}\n clientSecret={regeneration.data?.clientSecret ?? null}\n onSecretDismiss={regeneration.reset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default ApplicationDetails;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwFA,MAAMA,sBAAmD,EACvD,eACA,YAAY,OACZ,WAAW,OACX,WACA,aACA,oBAAoB,MACpB,GAAG,WACwC;CAC3C,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,WAA+BC,8BAAsB,eAAe;CAC1E,MAAMC,cAAgDC,yBACpD,CAAC,qBAAqB,aAAa,cAAc,GAChD,YAAY,eAAe;EAAC,GAAG;EAAU;EAAe;EAAQ,CAAC,EAClE,EAAC,SAAS,QAAQ,cAAc,EAAC,CAClC;CACD,MAAMC,WAAiDC,6BACpD,IAAY,YAAY,kBAAkB;EAAC,GAAG;EAAU,eAAe;EAAI;EAAQ,CAAC,QAC/E,CAAC,CAAC,qBAAqB,aAAa,CAAC,EAC3C,EAAC,WAAW,WAAU,CACvB;CACD,MAAMC,SAA0ED,6BAC7E,EAAC,aAAa,SAAS,WAAsC,YAC5D,kBAAkB;EAChB,GAAG;EACH,eAAe,QAAQ;EACvB;EACA,SAAS,2BAA2B,SAAS,QAAQ;EACtD,CAAC,GACH,EAAC,aAAa,cAAyC,CACtD,CAAC,qBAAqB,aAAa,QAAQ,GAAG,EAC9C,CAAC,qBAAqB,aAAa,CACpC,CACF;CACD,MAAME,eAA6EF,6BAChF,IAAY,YAAY,uBAAuB;EAAC,GAAG;EAAU,eAAe;EAAI;EAAQ,CAAC,GACzF,OAAe,CAAC,CAAC,qBAAqB,aAAa,GAAG,EAAE,CAAC,qBAAqB,aAAa,CAAC,CAC9F;AAED,QACE,oBAACG;EACC,aAAa,YAAY;EACzB,WAAW,YAAY;EACvB,OACE,yBAAyB,GAAG,YAAY,OAAO,mCAAmC,IAClF,yBAAyB,GAAG,SAAS,OAAO,0CAA0C,IACtF,yBAAyB,GAAG,OAAO,OAAO,wCAAwC,IAClF,yBAAyB,GAAG,aAAa,OAAO,0CAA0C;EAE5F,YAAY,SAAS;EACrB,UAAU,kBAAwB,KAAK,SAAS,OAAO,cAAc,GAAG;EACxE,YAAY,OAAO;EACnB,UACE,YAAY,YAAY,QACnB,YACC,KAAK,OAAO,OAAO;GAAC,aAAa,YAAY;GAAO;GAAQ,CAAC,GAC/D;EAEN,sBAAsB,aAAa;EACnC,oBAAoB,0BAAgC,KAAK,aAAa,OAAO,cAAc,GAAG;EAC9F,cAAc,aAAa,MAAM,gBAAgB;EACjD,iBAAiB,aAAa;EACjB;EACb,GAAI;GACJ;;AAIN,iCAAe"}
@@ -0,0 +1,92 @@
1
+ import { Application, ApplicationSubmission, OAuth2Config, Preferences } from '@thunderid/browser';
2
+ import { FC, ReactNode } from 'react';
3
+ /**
4
+ * The edited fields {@link BaseApplicationDetails} hands `onUpdate`. Whether the client is public does
5
+ * not change.
6
+ */
7
+ export type ApplicationUpdateSubmission = Omit<ApplicationSubmission, 'publicClient'>;
8
+ /**
9
+ * What {@link BaseApplicationDetails} hands its `children` render function, so the application can be
10
+ * shown with any UI.
11
+ */
12
+ export interface BaseApplicationDetailsRenderProps {
13
+ application?: Application;
14
+ /**
15
+ * The new client secret, to show once. `null` while there is none.
16
+ */
17
+ clientSecret: string | null;
18
+ error: string | null;
19
+ isDeleting: boolean;
20
+ isLoading: boolean;
21
+ isRegeneratingSecret: boolean;
22
+ isUpdating: boolean;
23
+ /**
24
+ * The application's OAuth configuration, without its client secret. Undefined when it has no OAuth client.
25
+ */
26
+ oauth?: Omit<OAuth2Config, 'clientSecret'>;
27
+ /**
28
+ * Deletes the application. Undefined when deletion is not allowed, including for read-only applications.
29
+ */
30
+ onDelete?: () => void;
31
+ /**
32
+ * Gives the application a new client secret. Undefined when not allowed, for read-only applications
33
+ * and for applications without a confidential OAuth client.
34
+ */
35
+ onRegenerateSecret?: () => void;
36
+ /**
37
+ * Hides the new client secret once it has been copied. Undefined while there is no secret.
38
+ */
39
+ onSecretDismiss?: () => void;
40
+ /**
41
+ * Saves edited fields. Undefined when editing is not allowed, including for read-only applications.
42
+ */
43
+ onUpdate?: (application: ApplicationUpdateSubmission) => void;
44
+ }
45
+ export interface BaseApplicationDetailsProps {
46
+ /**
47
+ * Controls rendered next to the application's name.
48
+ */
49
+ actions?: ReactNode;
50
+ application?: Application;
51
+ /**
52
+ * Renders custom UI in place of the default view. Receives the application, its OAuth configuration,
53
+ * the loading and error state, the actions the app allows and the new client secret to show.
54
+ */
55
+ children?: (props: BaseApplicationDetailsRenderProps) => ReactNode;
56
+ className?: string;
57
+ /**
58
+ * A client secret just generated by `onRegenerateSecret`, shown once until `onSecretDismiss` clears it.
59
+ */
60
+ clientSecret?: string | null;
61
+ error?: string | null;
62
+ isDeleting?: boolean;
63
+ isLoading?: boolean;
64
+ isRegeneratingSecret?: boolean;
65
+ isUpdating?: boolean;
66
+ /**
67
+ * Deletes the application. The delete action is hidden when omitted.
68
+ */
69
+ onDelete?: () => void;
70
+ /**
71
+ * Gives the application a new client secret. The regenerate action is hidden when omitted, and for
72
+ * public clients, which have no secret.
73
+ */
74
+ onRegenerateSecret?: () => void;
75
+ /**
76
+ * Called when the user has copied the new client secret.
77
+ */
78
+ onSecretDismiss?: () => void;
79
+ /**
80
+ * Saves the edited general fields, redirect URIs and grant types. Editing is offered only when set.
81
+ */
82
+ onUpdate?: (application: ApplicationUpdateSubmission) => void;
83
+ preferences?: Preferences;
84
+ }
85
+ /**
86
+ * Shows an application's general fields and OAuth configuration. Holds no data of its own: pass the
87
+ * application and handle editing, deletion and client secret regeneration, each offered only when its
88
+ * handler is set.
89
+ */
90
+ declare const BaseApplicationDetails: FC<BaseApplicationDetailsProps>;
91
+ export default BaseApplicationDetails;
92
+ //# sourceMappingURL=BaseApplicationDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseApplicationDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationDetails/BaseApplicationDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EAEX,qBAAqB,EAGrB,YAAY,EAEZ,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,EAAE,EAA2B,SAAS,EAAW,MAAM,OAAO,CAAC;AAYvE;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iCAAiC,KAAK,SAAS,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAsBD;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CA2O3D,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,234 @@
1
+ import useTranslation_default from "../../../hooks/useTranslation.js";
2
+ import Spinner_default from "../../primitives/Spinner/Spinner.js";
3
+ import Button_default from "../../primitives/Button/Button.js";
4
+ import Alert_default from "../../primitives/Alert/Alert.js";
5
+ import CopyableText_default from "../../primitives/CopyableText/CopyableText.js";
6
+ import useAdminPartStyles_default from "../shared/useAdminPartStyles.js";
7
+ import AdminSection_default from "../shared/AdminSection.js";
8
+ import { ChipList, ConfirmButton, DetailList, Panel } from "../shared/AdminParts.js";
9
+ import ApplicationFormFields_default from "../shared/ApplicationFormFields.js";
10
+ import ClientSecretNotice_default from "../shared/ClientSecretNotice.js";
11
+ import { APPLICATION_GRANT_TYPES, getApplicationOAuthConfig, isApplicationSubmissionValid, parseRedirectUris } from "@thunderid/browser";
12
+ import { useState } from "react";
13
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
14
+
15
+ //#region src/components/admin/ApplicationDetails/BaseApplicationDetails.tsx
16
+ const toFormValues = (application, oauth) => ({
17
+ description: application.description ?? "",
18
+ grantTypes: oauth?.grantTypes ?? [],
19
+ logoUrl: application.logoUrl ?? "",
20
+ name: application.name,
21
+ publicClient: Boolean(oauth?.publicClient),
22
+ redirectUris: (oauth?.redirectUris ?? []).join(", "),
23
+ url: application.url ?? ""
24
+ });
25
+ const toSubmission = (values) => ({
26
+ description: values.description.trim() || void 0,
27
+ grantTypes: values.grantTypes,
28
+ logoUrl: values.logoUrl.trim() || void 0,
29
+ name: values.name.trim(),
30
+ publicClient: values.publicClient,
31
+ redirectUris: parseRedirectUris(values.redirectUris),
32
+ url: values.url.trim() || void 0
33
+ });
34
+ /**
35
+ * Shows an application's general fields and OAuth configuration. Holds no data of its own: pass the
36
+ * application and handle editing, deletion and client secret regeneration, each offered only when its
37
+ * handler is set.
38
+ */
39
+ const BaseApplicationDetails = ({ actions, application, children, className, clientSecret = null, error = null, isDeleting = false, isLoading = false, isRegeneratingSecret = false, isUpdating = false, onDelete, onRegenerateSecret, onSecretDismiss, onUpdate, preferences }) => {
40
+ const { t } = useTranslation_default(preferences?.i18n);
41
+ const styles = useAdminPartStyles_default();
42
+ const [draft, setDraft] = useState(null);
43
+ const oauthConfig = getApplicationOAuthConfig(application);
44
+ const isWritable = Boolean(application) && !application?.isReadOnly;
45
+ const canRegenerate = isWritable && Boolean(oauthConfig) && !oauthConfig?.publicClient;
46
+ if (children) {
47
+ let oauth;
48
+ if (oauthConfig) {
49
+ const { clientSecret: storedSecret,...rest } = oauthConfig;
50
+ oauth = rest;
51
+ }
52
+ return /* @__PURE__ */ jsx("div", {
53
+ className,
54
+ children: children({
55
+ application,
56
+ clientSecret,
57
+ error,
58
+ isDeleting,
59
+ isLoading,
60
+ isRegeneratingSecret,
61
+ isUpdating,
62
+ oauth,
63
+ onDelete: isWritable ? onDelete : void 0,
64
+ onRegenerateSecret: canRegenerate ? onRegenerateSecret : void 0,
65
+ onSecretDismiss: clientSecret ? onSecretDismiss : void 0,
66
+ onUpdate: isWritable ? onUpdate : void 0
67
+ })
68
+ });
69
+ }
70
+ if (isLoading && !application) return /* @__PURE__ */ jsx(AdminSection_default, {
71
+ block: "application-details",
72
+ className,
73
+ preferences,
74
+ children: /* @__PURE__ */ jsxs("span", {
75
+ className: styles["muted"],
76
+ role: "status",
77
+ children: [
78
+ /* @__PURE__ */ jsx(Spinner_default, { size: "small" }),
79
+ " ",
80
+ t("admin.common.loading")
81
+ ]
82
+ })
83
+ });
84
+ if (!application) return /* @__PURE__ */ jsx(AdminSection_default, {
85
+ block: "application-details",
86
+ className,
87
+ preferences,
88
+ children: /* @__PURE__ */ jsx(Alert_default, {
89
+ variant: "error",
90
+ role: "alert",
91
+ children: error ?? t("admin.common.errors.not_found")
92
+ })
93
+ });
94
+ const notSet = t("admin.applications.details.not_set");
95
+ const overview = [
96
+ {
97
+ label: t("admin.applications.list.columns.client_id"),
98
+ value: oauthConfig?.clientId ? /* @__PURE__ */ jsx(CopyableText_default, { value: oauthConfig.clientId }) : notSet
99
+ },
100
+ {
101
+ label: t("admin.applications.details.type"),
102
+ value: application.type ?? application.template ?? notSet
103
+ },
104
+ {
105
+ label: t("admin.common.columns.organization_unit"),
106
+ value: application.ouId ?? notSet
107
+ },
108
+ {
109
+ label: t("admin.applications.fields.url"),
110
+ value: application.url ?? notSet
111
+ },
112
+ {
113
+ label: t("admin.applications.fields.logo_url"),
114
+ value: application.logoUrl ?? notSet
115
+ }
116
+ ];
117
+ const handleSave = (event) => {
118
+ event.preventDefault();
119
+ if (!draft) return;
120
+ const { publicClient,...submission } = toSubmission(draft);
121
+ onUpdate?.(submission);
122
+ setDraft(null);
123
+ };
124
+ return /* @__PURE__ */ jsxs(AdminSection_default, {
125
+ block: "application-details",
126
+ className,
127
+ title: application.name,
128
+ description: application.description,
129
+ preferences,
130
+ actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [actions, onDelete && isWritable && /* @__PURE__ */ jsx(ConfirmButton, {
131
+ confirmText: t("admin.applications.details.delete.confirm", { name: application.name }),
132
+ isLoading: isDeleting,
133
+ onConfirm: onDelete,
134
+ children: t("admin.applications.details.delete.action")
135
+ })] }),
136
+ children: [error && /* @__PURE__ */ jsx(Alert_default, {
137
+ variant: "error",
138
+ role: "alert",
139
+ children: error
140
+ }), draft ? /* @__PURE__ */ jsx(Panel, {
141
+ title: t("admin.applications.details.edit.action"),
142
+ children: /* @__PURE__ */ jsxs("form", {
143
+ className: styles["row"],
144
+ style: {
145
+ alignItems: "stretch",
146
+ flexDirection: "column"
147
+ },
148
+ onSubmit: handleSave,
149
+ noValidate: true,
150
+ children: [/* @__PURE__ */ jsx(ApplicationFormFields_default, {
151
+ preferences,
152
+ values: draft,
153
+ onInputChange: (field, value) => setDraft((previous) => previous && {
154
+ ...previous,
155
+ [field]: value
156
+ }),
157
+ onGrantTypesChange: (grantTypes) => setDraft((previous) => previous && {
158
+ ...previous,
159
+ grantTypes
160
+ })
161
+ }), /* @__PURE__ */ jsxs("div", {
162
+ className: styles["row"],
163
+ style: { justifyContent: "flex-end" },
164
+ children: [/* @__PURE__ */ jsx(Button_default, {
165
+ type: "button",
166
+ variant: "text",
167
+ disabled: isUpdating,
168
+ onClick: () => setDraft(null),
169
+ children: t("admin.common.actions.cancel")
170
+ }), /* @__PURE__ */ jsx(Button_default, {
171
+ type: "submit",
172
+ loading: isUpdating,
173
+ disabled: isUpdating || !isApplicationSubmissionValid(toSubmission(draft)),
174
+ children: t("admin.applications.details.edit.save")
175
+ })]
176
+ })]
177
+ })
178
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Panel, {
179
+ title: t("admin.applications.details.overview"),
180
+ actions: onUpdate && isWritable ? /* @__PURE__ */ jsx(Button_default, {
181
+ variant: "outline",
182
+ size: "small",
183
+ onClick: () => setDraft(toFormValues(application, oauthConfig)),
184
+ children: t("admin.applications.details.edit.action")
185
+ }) : void 0,
186
+ children: /* @__PURE__ */ jsx(DetailList, { items: overview })
187
+ }), oauthConfig && /* @__PURE__ */ jsxs(Panel, {
188
+ title: t("admin.applications.details.oauth"),
189
+ actions: onRegenerateSecret && canRegenerate && !clientSecret ? /* @__PURE__ */ jsx(ConfirmButton, {
190
+ confirmText: t("admin.applications.details.secret.confirm", { name: application.name }),
191
+ isLoading: isRegeneratingSecret,
192
+ onConfirm: onRegenerateSecret,
193
+ children: t("admin.applications.details.secret.action")
194
+ }) : void 0,
195
+ children: [clientSecret && /* @__PURE__ */ jsx(ClientSecretNotice_default, {
196
+ secret: clientSecret,
197
+ onDismiss: onSecretDismiss,
198
+ preferences
199
+ }), /* @__PURE__ */ jsx(DetailList, { items: [
200
+ {
201
+ label: t("admin.applications.fields.grant_types"),
202
+ value: /* @__PURE__ */ jsx(ChipList, {
203
+ label: t("admin.applications.fields.grant_types"),
204
+ emptyText: t("admin.applications.details.no_grant_types"),
205
+ items: (oauthConfig.grantTypes ?? []).map((grantType) => ({
206
+ id: grantType,
207
+ label: APPLICATION_GRANT_TYPES.includes(grantType) ? t(`admin.applications.grant_types.${grantType}`) : grantType
208
+ }))
209
+ })
210
+ },
211
+ {
212
+ label: t("admin.applications.fields.redirect_uris"),
213
+ value: /* @__PURE__ */ jsx(ChipList, {
214
+ label: t("admin.applications.fields.redirect_uris"),
215
+ emptyText: t("admin.applications.details.no_redirect_uris"),
216
+ items: (oauthConfig.redirectUris ?? []).map((uri) => ({
217
+ id: uri,
218
+ label: uri
219
+ }))
220
+ })
221
+ },
222
+ {
223
+ label: t("admin.applications.details.public_client"),
224
+ value: oauthConfig.publicClient ? t("admin.applications.details.yes") : t("admin.applications.details.no")
225
+ }
226
+ ] })]
227
+ })] })]
228
+ });
229
+ };
230
+ var BaseApplicationDetails_default = BaseApplicationDetails;
231
+
232
+ //#endregion
233
+ export { BaseApplicationDetails_default as default };
234
+ //# sourceMappingURL=BaseApplicationDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseApplicationDetails.js","names":["BaseApplicationDetails: FC<BaseApplicationDetailsProps>","useTranslation","styles: Record<string, string>","useAdminPartStyles","oauthConfig: OAuth2Config | undefined","isWritable: boolean","canRegenerate: boolean","oauth: Omit<OAuth2Config, 'clientSecret'> | undefined","AdminSection","Spinner","Alert","notSet: string","overview: DetailListItem[]","CopyableText","ApplicationFormFields","Button","ClientSecretNotice"],"sources":["../../../../src/components/admin/ApplicationDetails/BaseApplicationDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Application,\n APPLICATION_GRANT_TYPES,\n ApplicationSubmission,\n getApplicationOAuthConfig,\n isApplicationSubmissionValid,\n OAuth2Config,\n parseRedirectUris,\n Preferences,\n} from '@thunderid/browser';\nimport {FC, FormEvent, ReactElement, ReactNode, useState} from 'react';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Alert from '../../primitives/Alert/Alert';\nimport Button from '../../primitives/Button/Button';\nimport CopyableText from '../../primitives/CopyableText/CopyableText';\nimport Spinner from '../../primitives/Spinner/Spinner';\nimport {ChipList, ConfirmButton, DetailList, DetailListItem, Panel} from '../shared/AdminParts';\nimport AdminSection from '../shared/AdminSection';\nimport ApplicationFormFields, {ApplicationFormValues, ApplicationTextField} from '../shared/ApplicationFormFields';\nimport ClientSecretNotice from '../shared/ClientSecretNotice';\nimport useAdminPartStyles from '../shared/useAdminPartStyles';\n\n/**\n * The edited fields {@link BaseApplicationDetails} hands `onUpdate`. Whether the client is public does\n * not change.\n */\nexport type ApplicationUpdateSubmission = Omit<ApplicationSubmission, 'publicClient'>;\n\n/**\n * What {@link BaseApplicationDetails} hands its `children` render function, so the application can be\n * shown with any UI.\n */\nexport interface BaseApplicationDetailsRenderProps {\n application?: Application;\n /**\n * The new client secret, to show once. `null` while there is none.\n */\n clientSecret: string | null;\n error: string | null;\n isDeleting: boolean;\n isLoading: boolean;\n isRegeneratingSecret: boolean;\n isUpdating: boolean;\n /**\n * The application's OAuth configuration, without its client secret. Undefined when it has no OAuth client.\n */\n oauth?: Omit<OAuth2Config, 'clientSecret'>;\n /**\n * Deletes the application. Undefined when deletion is not allowed, including for read-only applications.\n */\n onDelete?: () => void;\n /**\n * Gives the application a new client secret. Undefined when not allowed, for read-only applications\n * and for applications without a confidential OAuth client.\n */\n onRegenerateSecret?: () => void;\n /**\n * Hides the new client secret once it has been copied. Undefined while there is no secret.\n */\n onSecretDismiss?: () => void;\n /**\n * Saves edited fields. Undefined when editing is not allowed, including for read-only applications.\n */\n onUpdate?: (application: ApplicationUpdateSubmission) => void;\n}\n\nexport interface BaseApplicationDetailsProps {\n /**\n * Controls rendered next to the application's name.\n */\n actions?: ReactNode;\n application?: Application;\n /**\n * Renders custom UI in place of the default view. Receives the application, its OAuth configuration,\n * the loading and error state, the actions the app allows and the new client secret to show.\n */\n children?: (props: BaseApplicationDetailsRenderProps) => ReactNode;\n className?: string;\n /**\n * A client secret just generated by `onRegenerateSecret`, shown once until `onSecretDismiss` clears it.\n */\n clientSecret?: string | null;\n error?: string | null;\n isDeleting?: boolean;\n isLoading?: boolean;\n isRegeneratingSecret?: boolean;\n isUpdating?: boolean;\n /**\n * Deletes the application. The delete action is hidden when omitted.\n */\n onDelete?: () => void;\n /**\n * Gives the application a new client secret. The regenerate action is hidden when omitted, and for\n * public clients, which have no secret.\n */\n onRegenerateSecret?: () => void;\n /**\n * Called when the user has copied the new client secret.\n */\n onSecretDismiss?: () => void;\n /**\n * Saves the edited general fields, redirect URIs and grant types. Editing is offered only when set.\n */\n onUpdate?: (application: ApplicationUpdateSubmission) => void;\n preferences?: Preferences;\n}\n\nconst toFormValues = (application: Application, oauth?: OAuth2Config): ApplicationFormValues => ({\n description: application.description ?? '',\n grantTypes: oauth?.grantTypes ?? [],\n logoUrl: application.logoUrl ?? '',\n name: application.name,\n publicClient: Boolean(oauth?.publicClient),\n redirectUris: (oauth?.redirectUris ?? []).join(', '),\n url: application.url ?? '',\n});\n\nconst toSubmission = (values: ApplicationFormValues): ApplicationSubmission => ({\n description: values.description.trim() || undefined,\n grantTypes: values.grantTypes,\n logoUrl: values.logoUrl.trim() || undefined,\n name: values.name.trim(),\n publicClient: values.publicClient,\n redirectUris: parseRedirectUris(values.redirectUris),\n url: values.url.trim() || undefined,\n});\n\n/**\n * Shows an application's general fields and OAuth configuration. Holds no data of its own: pass the\n * application and handle editing, deletion and client secret regeneration, each offered only when its\n * handler is set.\n */\nconst BaseApplicationDetails: FC<BaseApplicationDetailsProps> = ({\n actions,\n application,\n children,\n className,\n clientSecret = null,\n error = null,\n isDeleting = false,\n isLoading = false,\n isRegeneratingSecret = false,\n isUpdating = false,\n onDelete,\n onRegenerateSecret,\n onSecretDismiss,\n onUpdate,\n preferences,\n}: BaseApplicationDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const styles: Record<string, string> = useAdminPartStyles();\n const [draft, setDraft] = useState<ApplicationFormValues | null>(null);\n\n const oauthConfig: OAuth2Config | undefined = getApplicationOAuthConfig(application);\n const isWritable: boolean = Boolean(application) && !application?.isReadOnly;\n const canRegenerate: boolean = isWritable && Boolean(oauthConfig) && !oauthConfig?.publicClient;\n\n if (children) {\n let oauth: Omit<OAuth2Config, 'clientSecret'> | undefined;\n\n if (oauthConfig) {\n const {clientSecret: storedSecret, ...rest}: OAuth2Config = oauthConfig;\n void storedSecret;\n oauth = rest;\n }\n\n return (\n <div className={className}>\n {children({\n application,\n clientSecret,\n error,\n isDeleting,\n isLoading,\n isRegeneratingSecret,\n isUpdating,\n oauth,\n onDelete: isWritable ? onDelete : undefined,\n onRegenerateSecret: canRegenerate ? onRegenerateSecret : undefined,\n onSecretDismiss: clientSecret ? onSecretDismiss : undefined,\n onUpdate: isWritable ? onUpdate : undefined,\n })}\n </div>\n );\n }\n\n if (isLoading && !application) {\n return (\n <AdminSection block=\"application-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 (!application) {\n return (\n <AdminSection block=\"application-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 notSet: string = t('admin.applications.details.not_set');\n const overview: DetailListItem[] = [\n {\n label: t('admin.applications.list.columns.client_id'),\n value: oauthConfig?.clientId ? <CopyableText value={oauthConfig.clientId} /> : notSet,\n },\n {label: t('admin.applications.details.type'), value: application.type ?? application.template ?? notSet},\n {label: t('admin.common.columns.organization_unit'), value: application.ouId ?? notSet},\n {label: t('admin.applications.fields.url'), value: application.url ?? notSet},\n {label: t('admin.applications.fields.logo_url'), value: application.logoUrl ?? notSet},\n ];\n\n const handleSave = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n\n if (!draft) {\n return;\n }\n\n const {publicClient, ...submission}: ApplicationSubmission = toSubmission(draft);\n void publicClient;\n onUpdate?.(submission);\n setDraft(null);\n };\n\n return (\n <AdminSection\n block=\"application-details\"\n className={className}\n title={application.name}\n description={application.description}\n preferences={preferences}\n actions={\n <>\n {actions}\n {onDelete && isWritable && (\n <ConfirmButton\n confirmText={t('admin.applications.details.delete.confirm', {name: application.name})}\n isLoading={isDeleting}\n onConfirm={onDelete}\n >\n {t('admin.applications.details.delete.action')}\n </ConfirmButton>\n )}\n </>\n }\n >\n {error && (\n <Alert variant=\"error\" role=\"alert\">\n {error}\n </Alert>\n )}\n {draft ? (\n <Panel title={t('admin.applications.details.edit.action')}>\n <form\n className={styles['row']}\n style={{alignItems: 'stretch', flexDirection: 'column'}}\n onSubmit={handleSave}\n noValidate\n >\n <ApplicationFormFields\n preferences={preferences}\n values={draft}\n onInputChange={(field: ApplicationTextField, value: string): void =>\n setDraft((previous: ApplicationFormValues | null) => previous && {...previous, [field]: value})\n }\n onGrantTypesChange={(grantTypes: string[]): void =>\n setDraft((previous: ApplicationFormValues | null) => previous && {...previous, grantTypes})\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\n type=\"submit\"\n loading={isUpdating}\n disabled={isUpdating || !isApplicationSubmissionValid(toSubmission(draft))}\n >\n {t('admin.applications.details.edit.save')}\n </Button>\n </div>\n </form>\n </Panel>\n ) : (\n <>\n <Panel\n title={t('admin.applications.details.overview')}\n actions={\n onUpdate && isWritable ? (\n <Button\n variant=\"outline\"\n size=\"small\"\n onClick={(): void => setDraft(toFormValues(application, oauthConfig))}\n >\n {t('admin.applications.details.edit.action')}\n </Button>\n ) : undefined\n }\n >\n <DetailList items={overview} />\n </Panel>\n {oauthConfig && (\n <Panel\n title={t('admin.applications.details.oauth')}\n actions={\n onRegenerateSecret && canRegenerate && !clientSecret ? (\n <ConfirmButton\n confirmText={t('admin.applications.details.secret.confirm', {name: application.name})}\n isLoading={isRegeneratingSecret}\n onConfirm={onRegenerateSecret}\n >\n {t('admin.applications.details.secret.action')}\n </ConfirmButton>\n ) : undefined\n }\n >\n {clientSecret && (\n <ClientSecretNotice secret={clientSecret} onDismiss={onSecretDismiss} preferences={preferences} />\n )}\n <DetailList\n items={[\n {\n label: t('admin.applications.fields.grant_types'),\n value: (\n <ChipList\n label={t('admin.applications.fields.grant_types')}\n emptyText={t('admin.applications.details.no_grant_types')}\n items={(oauthConfig.grantTypes ?? []).map((grantType: string) => ({\n id: grantType,\n label: APPLICATION_GRANT_TYPES.includes(grantType)\n ? t(`admin.applications.grant_types.${grantType}`)\n : grantType,\n }))}\n />\n ),\n },\n {\n label: t('admin.applications.fields.redirect_uris'),\n value: (\n <ChipList\n label={t('admin.applications.fields.redirect_uris')}\n emptyText={t('admin.applications.details.no_redirect_uris')}\n items={(oauthConfig.redirectUris ?? []).map((uri: string) => ({id: uri, label: uri}))}\n />\n ),\n },\n {\n label: t('admin.applications.details.public_client'),\n value: oauthConfig.publicClient\n ? t('admin.applications.details.yes')\n : t('admin.applications.details.no'),\n },\n ]}\n />\n </Panel>\n )}\n </>\n )}\n </AdminSection>\n );\n};\n\nexport default BaseApplicationDetails;\n"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { FC } from 'react';
2
+ import { BaseApplicationListProps } from './BaseApplicationList';
3
+ export type ApplicationListProps = Omit<BaseApplicationListProps, 'applications' | 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'totalResults'>;
4
+ /**
5
+ * Lists the applications the signed-in user is allowed to see, a page at a time.
6
+ *
7
+ * The server guards applications with the root `system` permission, for reading and for changes alike;
8
+ * it defines no application-specific permission. Gate the view and its actions on it with
9
+ * `useGrantedPermissions().can('system')`.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * <ApplicationList onSelect={(application) => setSelectedApplicationId(application.id)} />
14
+ * ```
15
+ */
16
+ declare const ApplicationList: FC<ApplicationListProps>;
17
+ export default ApplicationList;
18
+ //# sourceMappingURL=ApplicationList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationList/ApplicationList.tsx"],"names":[],"mappings":"AASA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAA4B,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAKpF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,wBAAwB,EACxB,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,CACpF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA0B7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,51 @@
1
+ import useTranslation_default from "../../../hooks/useTranslation.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
4
+ import BaseApplicationList_default from "./BaseApplicationList.js";
5
+ import { ApplicationQueryKeys, getApplications, toManagementErrorMessage } from "@thunderid/browser";
6
+ import { useState } from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+
9
+ //#region src/components/admin/ApplicationList/ApplicationList.tsx
10
+ /**
11
+ * Lists the applications the signed-in user is allowed to see, a page at a time.
12
+ *
13
+ * The server guards applications with the root `system` permission, for reading and for changes alike;
14
+ * it defines no application-specific permission. Gate the view and its actions on it with
15
+ * `useGrantedPermissions().can('system')`.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <ApplicationList onSelect={(application) => setSelectedApplicationId(application.id)} />
20
+ * ```
21
+ */
22
+ const ApplicationList = ({ limit = 20, preferences,...rest }) => {
23
+ const { t } = useTranslation_default(preferences?.i18n);
24
+ const [offset, setOffset] = useState(0);
25
+ const endpoint = useManagementEndpoint_default("applications");
26
+ const { data, error, isLoading } = useResourceQuery_default([ApplicationQueryKeys.APPLICATIONS, {
27
+ limit,
28
+ offset
29
+ }], (fetcher) => getApplications({
30
+ ...endpoint,
31
+ fetcher,
32
+ limit,
33
+ offset
34
+ }));
35
+ return /* @__PURE__ */ jsx(BaseApplicationList_default, {
36
+ applications: data?.applications ?? [],
37
+ totalResults: data?.totalResults,
38
+ isLoading,
39
+ error: toManagementErrorMessage(t, error, "admin.applications.list.error"),
40
+ limit,
41
+ offset,
42
+ onPageChange: setOffset,
43
+ preferences,
44
+ ...rest
45
+ });
46
+ };
47
+ var ApplicationList_default = ApplicationList;
48
+
49
+ //#endregion
50
+ export { ApplicationList_default as default };
51
+ //# sourceMappingURL=ApplicationList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationList.js","names":["ApplicationList: FC<ApplicationListProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","useResourceQuery","BaseApplicationList"],"sources":["../../../../src/components/admin/ApplicationList/ApplicationList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ApplicationListResponse,\n ApplicationQueryKeys,\n getApplications,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseApplicationList, {BaseApplicationListProps} from './BaseApplicationList';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type ApplicationListProps = Omit<\n BaseApplicationListProps,\n 'applications' | 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'totalResults'\n>;\n\n/**\n * Lists the applications the signed-in user is allowed to see, a page at a time.\n *\n * The server guards applications with the root `system` permission, for reading and for changes alike;\n * it defines no application-specific permission. Gate the view and its actions on it with\n * `useGrantedPermissions().can('system')`.\n *\n * @example\n * ```tsx\n * <ApplicationList onSelect={(application) => setSelectedApplicationId(application.id)} />\n * ```\n */\nconst ApplicationList: FC<ApplicationListProps> = ({\n limit = 20,\n preferences,\n ...rest\n}: ApplicationListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const endpoint: ManagementEndpoint = useManagementEndpoint('applications');\n const {data, error, isLoading}: ResourceQueryResult<ApplicationListResponse> = useResourceQuery(\n [ApplicationQueryKeys.APPLICATIONS, {limit, offset}],\n (fetcher) => getApplications({...endpoint, fetcher, limit, offset}),\n );\n\n return (\n <BaseApplicationList\n applications={data?.applications ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.applications.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default ApplicationList;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgCA,MAAMA,mBAA6C,EACjD,QAAQ,IACR,YACA,GAAG,WACqC;CACxC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAMC,WAA+BC,8BAAsB,eAAe;CAC1E,MAAM,EAAC,MAAM,OAAO,cAA2DC,yBAC7E,CAAC,qBAAqB,cAAc;EAAC;EAAO;EAAO,CAAC,GACnD,YAAY,gBAAgB;EAAC,GAAG;EAAU;EAAS;EAAO;EAAO,CAAC,CACpE;AAED,QACE,oBAACC;EACC,cAAc,MAAM,gBAAgB,EAAE;EACtC,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,GAAG,OAAO,gCAAgC;EACnE;EACC;EACR,cAAc;EACD;EACb,GAAI;GACJ;;AAIN,8BAAe"}
@@ -0,0 +1,55 @@
1
+ import { BasicApplication, Preferences } from '@thunderid/browser';
2
+ import { FC, ReactNode } from 'react';
3
+ import { AdminListRenderProps } from '../shared/AdminListRenderProps';
4
+ /**
5
+ * What {@link BaseApplicationList} hands its `children` render function. `applications` and `rows` are
6
+ * the same array.
7
+ */
8
+ export type BaseApplicationListRenderProps = AdminListRenderProps<BasicApplication> & {
9
+ applications: BasicApplication[];
10
+ };
11
+ export interface BaseApplicationListProps {
12
+ /**
13
+ * Controls rendered next to the title, such as a button that opens `ApplicationCreate`.
14
+ */
15
+ actions?: ReactNode;
16
+ applications: BasicApplication[];
17
+ /**
18
+ * Renders custom UI in place of the default table, for example a third-party data grid. Receives
19
+ * the applications, the default columns, the loading and error state, and the pagination and
20
+ * selection handlers.
21
+ */
22
+ children?: (props: BaseApplicationListRenderProps) => ReactNode;
23
+ className?: string;
24
+ description?: string;
25
+ error?: string | null;
26
+ isLoading?: boolean;
27
+ /**
28
+ * Page size.
29
+ * @default 20
30
+ */
31
+ limit?: number;
32
+ offset?: number;
33
+ /**
34
+ * Called with the offset of the page to show. Pagination is hidden when omitted.
35
+ */
36
+ onPageChange?: (offset: number) => void;
37
+ /**
38
+ * Called when an application is chosen. Rows are selectable only when set.
39
+ */
40
+ onSelect?: (application: BasicApplication) => void;
41
+ preferences?: Preferences;
42
+ selectedApplicationId?: string;
43
+ /**
44
+ * Heading of the list. Pass an empty string to hide it.
45
+ */
46
+ title?: string;
47
+ totalResults?: number;
48
+ }
49
+ /**
50
+ * Lists applications with their client identifier, type and, when the server reports it, access status. Holds no data of its own: pass the page
51
+ * of applications and handle selection and pagination.
52
+ */
53
+ declare const BaseApplicationList: FC<BaseApplicationListProps>;
54
+ export default BaseApplicationList;
55
+ //# sourceMappingURL=BaseApplicationList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseApplicationList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationList/BaseApplicationList.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAC,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAGpE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,GAAG;IACpF,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,SAAS,CAAC;IAChE,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;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD;;;GAGG;AACH,QAAA,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CA6FrD,CAAC;AAEF,eAAe,mBAAmB,CAAC"}