@thunderid/react 1.7.0 → 1.9.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 (497) hide show
  1. package/dist/cjs/components/account/UserProfile/BaseUserProfile.cjs +1 -1
  2. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs +15 -4
  3. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs.map +1 -1
  4. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs +49 -10
  5. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs.map +1 -1
  6. package/dist/cjs/components/admin/AgentDetails/BaseAgentDetails.cjs +25 -7
  7. package/dist/cjs/components/admin/AgentDetails/BaseAgentDetails.cjs.map +1 -1
  8. package/dist/cjs/components/admin/AgentList/AgentList.cjs +13 -4
  9. package/dist/cjs/components/admin/AgentList/AgentList.cjs.map +1 -1
  10. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs +70 -0
  11. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs.map +1 -0
  12. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs +135 -0
  13. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs.map +1 -0
  14. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs +95 -0
  15. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs.map +1 -0
  16. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs +255 -0
  17. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs.map +1 -0
  18. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs +55 -0
  19. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs.map +1 -0
  20. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs +95 -0
  21. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs.map +1 -0
  22. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs +8 -2
  23. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs.map +1 -1
  24. package/dist/cjs/components/admin/GroupList/GroupList.cjs +10 -3
  25. package/dist/cjs/components/admin/GroupList/GroupList.cjs.map +1 -1
  26. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs +49 -11
  27. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs.map +1 -1
  28. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs +50 -15
  29. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs.map +1 -1
  30. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs +8 -2
  31. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs.map +1 -1
  32. package/dist/cjs/components/admin/RoleList/RoleList.cjs +10 -3
  33. package/dist/cjs/components/admin/RoleList/RoleList.cjs.map +1 -1
  34. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs +8 -2
  35. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs.map +1 -1
  36. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs +15 -4
  37. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs.map +1 -1
  38. package/dist/cjs/components/admin/UserDetails/BaseUserDetails.cjs +32 -14
  39. package/dist/cjs/components/admin/UserDetails/BaseUserDetails.cjs.map +1 -1
  40. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs +45 -10
  41. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs.map +1 -1
  42. package/dist/cjs/components/admin/UserList/UserList.cjs +13 -4
  43. package/dist/cjs/components/admin/UserList/UserList.cjs.map +1 -1
  44. package/dist/cjs/components/admin/shared/AccountLifecycleParts.cjs +105 -0
  45. package/dist/cjs/components/admin/shared/AccountLifecycleParts.cjs.map +1 -0
  46. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs +62 -0
  47. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs.map +1 -0
  48. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs +49 -0
  49. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs.map +1 -0
  50. package/dist/cjs/components/auth/AcceptInvite/BaseAcceptInvite.cjs +4 -5
  51. package/dist/cjs/components/auth/AcceptInvite/BaseAcceptInvite.cjs.map +1 -1
  52. package/dist/cjs/components/auth/InviteUser/InviteUser.cjs +1 -1
  53. package/dist/cjs/components/auth/SignIn/SignIn.cjs +5 -5
  54. package/dist/cjs/components/auth/SignIn/SignIn.cjs.map +1 -1
  55. package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs +4 -5
  56. package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs.map +1 -1
  57. package/dist/cjs/components/auth/flow/Consent.cjs +53 -28
  58. package/dist/cjs/components/auth/flow/Consent.cjs.map +1 -1
  59. package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.cjs +104 -0
  60. package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.cjs.map +1 -0
  61. package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.styles.cjs +59 -0
  62. package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.styles.cjs.map +1 -0
  63. package/dist/cjs/components/auth/flow/ConsentDetailField.cjs +171 -0
  64. package/dist/cjs/components/auth/flow/ConsentDetailField.cjs.map +1 -0
  65. package/dist/cjs/components/auth/flow/ConsentDetailField.styles.cjs +85 -0
  66. package/dist/cjs/components/auth/flow/ConsentDetailField.styles.cjs.map +1 -0
  67. package/dist/cjs/components/auth/flow/ConsentDetailText.cjs +63 -0
  68. package/dist/cjs/components/auth/flow/ConsentDetailText.cjs.map +1 -0
  69. package/dist/cjs/components/auth/flow/ConsentDetailText.styles.cjs +83 -0
  70. package/dist/cjs/components/auth/flow/ConsentDetailText.styles.cjs.map +1 -0
  71. package/dist/cjs/components/auth/flow/FieldFactory.cjs +1 -1
  72. package/dist/cjs/components/auth/flow/resolveConsentText.cjs +25 -0
  73. package/dist/cjs/components/auth/flow/resolveConsentText.cjs.map +1 -0
  74. package/dist/cjs/components/primitives/KeyValueInput/KeyValueInput.cjs +1 -1
  75. package/dist/cjs/components/primitives/MultiInput/MultiInput.cjs +1 -1
  76. package/dist/cjs/components/primitives/PasswordField/PasswordField.cjs +1 -1
  77. package/dist/cjs/hooks/auth/useConsentDetailField.cjs +357 -0
  78. package/dist/cjs/hooks/auth/useConsentDetailField.cjs.map +1 -0
  79. package/dist/cjs/hooks/management/useAccountLifecycle.cjs +59 -0
  80. package/dist/cjs/hooks/management/useAccountLifecycle.cjs.map +1 -0
  81. package/dist/cjs/hooks/management/useManagementEndpoint.cjs.map +1 -1
  82. package/dist/cjs/hooks/management/useManagementRequestConfig.cjs +41 -0
  83. package/dist/cjs/hooks/management/useManagementRequestConfig.cjs.map +1 -0
  84. package/dist/cjs/index.cjs +1130 -187
  85. package/dist/cjs/utils/formatConsentDetailValue.cjs +26 -0
  86. package/dist/cjs/utils/formatConsentDetailValue.cjs.map +1 -0
  87. package/dist/cjs/utils/getConsentDetailLayout.cjs +44 -0
  88. package/dist/cjs/utils/getConsentDetailLayout.cjs.map +1 -0
  89. package/dist/cjs/utils/getConsentDetailListDisplay.cjs +30 -0
  90. package/dist/cjs/utils/getConsentDetailListDisplay.cjs.map +1 -0
  91. package/dist/cjs/utils/isConsentApprovalBlocked.cjs +41 -0
  92. package/dist/cjs/utils/isConsentApprovalBlocked.cjs.map +1 -0
  93. package/dist/cjs/utils/isConsentDetailPlainList.cjs +24 -0
  94. package/dist/cjs/utils/isConsentDetailPlainList.cjs.map +1 -0
  95. package/dist/cjs/utils/isConsentDetailStructured.cjs +15 -0
  96. package/dist/cjs/utils/isConsentDetailStructured.cjs.map +1 -0
  97. package/dist/cjs/utils/isConsentDetailTextClamped.cjs +25 -0
  98. package/dist/cjs/utils/isConsentDetailTextClamped.cjs.map +1 -0
  99. package/dist/components/account/UserProfile/BaseUserProfile.js +1 -1
  100. package/dist/components/admin/AgentCreate/AgentCreate.d.ts.map +1 -1
  101. package/dist/components/admin/AgentCreate/AgentCreate.js +16 -5
  102. package/dist/components/admin/AgentCreate/AgentCreate.js.map +1 -1
  103. package/dist/components/admin/AgentDetails/AgentDetails.d.ts +8 -1
  104. package/dist/components/admin/AgentDetails/AgentDetails.d.ts.map +1 -1
  105. package/dist/components/admin/AgentDetails/AgentDetails.js +50 -11
  106. package/dist/components/admin/AgentDetails/AgentDetails.js.map +1 -1
  107. package/dist/components/admin/AgentDetails/BaseAgentDetails.d.ts +21 -1
  108. package/dist/components/admin/AgentDetails/BaseAgentDetails.d.ts.map +1 -1
  109. package/dist/components/admin/AgentDetails/BaseAgentDetails.js +25 -7
  110. package/dist/components/admin/AgentDetails/BaseAgentDetails.js.map +1 -1
  111. package/dist/components/admin/AgentList/AgentList.d.ts.map +1 -1
  112. package/dist/components/admin/AgentList/AgentList.js +14 -5
  113. package/dist/components/admin/AgentList/AgentList.js.map +1 -1
  114. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts +30 -0
  115. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts.map +1 -0
  116. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js +66 -0
  117. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js.map +1 -0
  118. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts +80 -0
  119. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts.map +1 -0
  120. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js +131 -0
  121. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js.map +1 -0
  122. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts +64 -0
  123. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts.map +1 -0
  124. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js +92 -0
  125. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js.map +1 -0
  126. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts +111 -0
  127. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts.map +1 -0
  128. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js +251 -0
  129. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js.map +1 -0
  130. package/dist/components/admin/ApplicationList/ApplicationList.d.ts +18 -0
  131. package/dist/components/admin/ApplicationList/ApplicationList.d.ts.map +1 -0
  132. package/dist/components/admin/ApplicationList/ApplicationList.js +51 -0
  133. package/dist/components/admin/ApplicationList/ApplicationList.js.map +1 -0
  134. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts +55 -0
  135. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts.map +1 -0
  136. package/dist/components/admin/ApplicationList/BaseApplicationList.js +93 -0
  137. package/dist/components/admin/ApplicationList/BaseApplicationList.js.map +1 -0
  138. package/dist/components/admin/GroupCreate/GroupCreate.d.ts.map +1 -1
  139. package/dist/components/admin/GroupCreate/GroupCreate.js +9 -3
  140. package/dist/components/admin/GroupCreate/GroupCreate.js.map +1 -1
  141. package/dist/components/admin/GroupList/GroupList.d.ts.map +1 -1
  142. package/dist/components/admin/GroupList/GroupList.js +11 -4
  143. package/dist/components/admin/GroupList/GroupList.js.map +1 -1
  144. package/dist/components/admin/GroupMembers/GroupMembers.d.ts +7 -0
  145. package/dist/components/admin/GroupMembers/GroupMembers.d.ts.map +1 -1
  146. package/dist/components/admin/GroupMembers/GroupMembers.js +50 -12
  147. package/dist/components/admin/GroupMembers/GroupMembers.js.map +1 -1
  148. package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts +7 -0
  149. package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts.map +1 -1
  150. package/dist/components/admin/RoleAssignments/RoleAssignments.js +51 -16
  151. package/dist/components/admin/RoleAssignments/RoleAssignments.js.map +1 -1
  152. package/dist/components/admin/RoleCreate/RoleCreate.d.ts.map +1 -1
  153. package/dist/components/admin/RoleCreate/RoleCreate.js +9 -3
  154. package/dist/components/admin/RoleCreate/RoleCreate.js.map +1 -1
  155. package/dist/components/admin/RoleList/RoleList.d.ts.map +1 -1
  156. package/dist/components/admin/RoleList/RoleList.js +11 -4
  157. package/dist/components/admin/RoleList/RoleList.js.map +1 -1
  158. package/dist/components/admin/RolePermissions/RolePermissions.d.ts.map +1 -1
  159. package/dist/components/admin/RolePermissions/RolePermissions.js +9 -3
  160. package/dist/components/admin/RolePermissions/RolePermissions.js.map +1 -1
  161. package/dist/components/admin/UserCreate/UserCreate.d.ts.map +1 -1
  162. package/dist/components/admin/UserCreate/UserCreate.js +16 -5
  163. package/dist/components/admin/UserCreate/UserCreate.js.map +1 -1
  164. package/dist/components/admin/UserDetails/BaseUserDetails.d.ts +22 -1
  165. package/dist/components/admin/UserDetails/BaseUserDetails.d.ts.map +1 -1
  166. package/dist/components/admin/UserDetails/BaseUserDetails.js +32 -14
  167. package/dist/components/admin/UserDetails/BaseUserDetails.js.map +1 -1
  168. package/dist/components/admin/UserDetails/UserDetails.d.ts +15 -1
  169. package/dist/components/admin/UserDetails/UserDetails.d.ts.map +1 -1
  170. package/dist/components/admin/UserDetails/UserDetails.js +46 -11
  171. package/dist/components/admin/UserDetails/UserDetails.js.map +1 -1
  172. package/dist/components/admin/UserList/UserList.d.ts.map +1 -1
  173. package/dist/components/admin/UserList/UserList.js +14 -5
  174. package/dist/components/admin/UserList/UserList.js.map +1 -1
  175. package/dist/components/admin/shared/AccountLifecycleParts.d.ts +32 -0
  176. package/dist/components/admin/shared/AccountLifecycleParts.d.ts.map +1 -0
  177. package/dist/components/admin/shared/AccountLifecycleParts.js +101 -0
  178. package/dist/components/admin/shared/AccountLifecycleParts.js.map +1 -0
  179. package/dist/components/admin/shared/ApplicationFormFields.d.ts +35 -0
  180. package/dist/components/admin/shared/ApplicationFormFields.d.ts.map +1 -0
  181. package/dist/components/admin/shared/ApplicationFormFields.js +59 -0
  182. package/dist/components/admin/shared/ApplicationFormFields.js.map +1 -0
  183. package/dist/components/admin/shared/ClientSecretNotice.d.ts +16 -0
  184. package/dist/components/admin/shared/ClientSecretNotice.d.ts.map +1 -0
  185. package/dist/components/admin/shared/ClientSecretNotice.js +47 -0
  186. package/dist/components/admin/shared/ClientSecretNotice.js.map +1 -0
  187. package/dist/components/auth/AcceptInvite/BaseAcceptInvite.d.ts.map +1 -1
  188. package/dist/components/auth/AcceptInvite/BaseAcceptInvite.js +5 -6
  189. package/dist/components/auth/AcceptInvite/BaseAcceptInvite.js.map +1 -1
  190. package/dist/components/auth/InviteUser/InviteUser.js +1 -1
  191. package/dist/components/auth/SignIn/SignIn.d.ts.map +1 -1
  192. package/dist/components/auth/SignIn/SignIn.js +6 -6
  193. package/dist/components/auth/SignIn/SignIn.js.map +1 -1
  194. package/dist/components/auth/flow/AuthOptionFactory.d.ts.map +1 -1
  195. package/dist/components/auth/flow/AuthOptionFactory.js +5 -6
  196. package/dist/components/auth/flow/AuthOptionFactory.js.map +1 -1
  197. package/dist/components/auth/flow/Consent.d.ts +6 -0
  198. package/dist/components/auth/flow/Consent.d.ts.map +1 -1
  199. package/dist/components/auth/flow/Consent.js +54 -29
  200. package/dist/components/auth/flow/Consent.js.map +1 -1
  201. package/dist/components/auth/flow/ConsentAuthorizationDetail.d.ts +68 -0
  202. package/dist/components/auth/flow/ConsentAuthorizationDetail.d.ts.map +1 -0
  203. package/dist/components/auth/flow/ConsentAuthorizationDetail.js +100 -0
  204. package/dist/components/auth/flow/ConsentAuthorizationDetail.js.map +1 -0
  205. package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.d.ts +10 -0
  206. package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.d.ts.map +1 -0
  207. package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.js +57 -0
  208. package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.js.map +1 -0
  209. package/dist/components/auth/flow/ConsentDetailField.d.ts +39 -0
  210. package/dist/components/auth/flow/ConsentDetailField.d.ts.map +1 -0
  211. package/dist/components/auth/flow/ConsentDetailField.js +168 -0
  212. package/dist/components/auth/flow/ConsentDetailField.js.map +1 -0
  213. package/dist/components/auth/flow/ConsentDetailField.styles.d.ts +11 -0
  214. package/dist/components/auth/flow/ConsentDetailField.styles.d.ts.map +1 -0
  215. package/dist/components/auth/flow/ConsentDetailField.styles.js +83 -0
  216. package/dist/components/auth/flow/ConsentDetailField.styles.js.map +1 -0
  217. package/dist/components/auth/flow/ConsentDetailText.d.ts +53 -0
  218. package/dist/components/auth/flow/ConsentDetailText.d.ts.map +1 -0
  219. package/dist/components/auth/flow/ConsentDetailText.js +58 -0
  220. package/dist/components/auth/flow/ConsentDetailText.js.map +1 -0
  221. package/dist/components/auth/flow/ConsentDetailText.styles.d.ts +20 -0
  222. package/dist/components/auth/flow/ConsentDetailText.styles.d.ts.map +1 -0
  223. package/dist/components/auth/flow/ConsentDetailText.styles.js +80 -0
  224. package/dist/components/auth/flow/ConsentDetailText.styles.js.map +1 -0
  225. package/dist/components/auth/flow/FieldFactory.js +1 -1
  226. package/dist/components/auth/flow/resolveConsentText.d.ts +13 -0
  227. package/dist/components/auth/flow/resolveConsentText.d.ts.map +1 -0
  228. package/dist/components/auth/flow/resolveConsentText.js +23 -0
  229. package/dist/components/auth/flow/resolveConsentText.js.map +1 -0
  230. package/dist/components/primitives/KeyValueInput/KeyValueInput.js +1 -1
  231. package/dist/components/primitives/MultiInput/MultiInput.js +1 -1
  232. package/dist/components/primitives/PasswordField/PasswordField.js +1 -1
  233. package/dist/hooks/auth/useConsentDetailField.d.ts +130 -0
  234. package/dist/hooks/auth/useConsentDetailField.d.ts.map +1 -0
  235. package/dist/hooks/auth/useConsentDetailField.js +354 -0
  236. package/dist/hooks/auth/useConsentDetailField.js.map +1 -0
  237. package/dist/hooks/management/useAccountLifecycle.d.ts +49 -0
  238. package/dist/hooks/management/useAccountLifecycle.d.ts.map +1 -0
  239. package/dist/hooks/management/useAccountLifecycle.js +56 -0
  240. package/dist/hooks/management/useAccountLifecycle.js.map +1 -0
  241. package/dist/hooks/management/useManagementEndpoint.d.ts +5 -1
  242. package/dist/hooks/management/useManagementEndpoint.d.ts.map +1 -1
  243. package/dist/hooks/management/useManagementEndpoint.js.map +1 -1
  244. package/dist/hooks/management/useManagementRequestConfig.d.ts +22 -0
  245. package/dist/hooks/management/useManagementRequestConfig.d.ts.map +1 -0
  246. package/dist/hooks/management/useManagementRequestConfig.js +39 -0
  247. package/dist/hooks/management/useManagementRequestConfig.js.map +1 -0
  248. package/dist/index.d.ts +35 -56
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js +21 -42
  251. package/dist/models/config.d.ts +3 -4
  252. package/dist/models/config.d.ts.map +1 -1
  253. package/dist/utils/formatConsentDetailValue.d.ts +16 -0
  254. package/dist/utils/formatConsentDetailValue.d.ts.map +1 -0
  255. package/dist/utils/formatConsentDetailValue.js +25 -0
  256. package/dist/utils/formatConsentDetailValue.js.map +1 -0
  257. package/dist/utils/getConsentDetailLayout.d.ts +32 -0
  258. package/dist/utils/getConsentDetailLayout.d.ts.map +1 -0
  259. package/dist/utils/getConsentDetailLayout.js +43 -0
  260. package/dist/utils/getConsentDetailLayout.js.map +1 -0
  261. package/dist/utils/getConsentDetailListDisplay.d.ts +30 -0
  262. package/dist/utils/getConsentDetailListDisplay.d.ts.map +1 -0
  263. package/dist/utils/getConsentDetailListDisplay.js +30 -0
  264. package/dist/utils/getConsentDetailListDisplay.js.map +1 -0
  265. package/dist/utils/isConsentApprovalBlocked.d.ts +17 -0
  266. package/dist/utils/isConsentApprovalBlocked.d.ts.map +1 -0
  267. package/dist/utils/isConsentApprovalBlocked.js +39 -0
  268. package/dist/utils/isConsentApprovalBlocked.js.map +1 -0
  269. package/dist/utils/isConsentDetailPlainList.d.ts +15 -0
  270. package/dist/utils/isConsentDetailPlainList.d.ts.map +1 -0
  271. package/dist/utils/isConsentDetailPlainList.js +23 -0
  272. package/dist/utils/isConsentDetailPlainList.js.map +1 -0
  273. package/dist/utils/isConsentDetailStructured.d.ts +10 -0
  274. package/dist/utils/isConsentDetailStructured.d.ts.map +1 -0
  275. package/dist/utils/isConsentDetailStructured.js +14 -0
  276. package/dist/utils/isConsentDetailStructured.js.map +1 -0
  277. package/dist/utils/isConsentDetailTextClamped.d.ts +20 -0
  278. package/dist/utils/isConsentDetailTextClamped.d.ts.map +1 -0
  279. package/dist/utils/isConsentDetailTextClamped.js +24 -0
  280. package/dist/utils/isConsentDetailTextClamped.js.map +1 -0
  281. package/package.json +2 -2
  282. package/dist/cjs/hooks/management/agents/useCreateAgent.cjs +0 -26
  283. package/dist/cjs/hooks/management/agents/useCreateAgent.cjs.map +0 -1
  284. package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs +0 -26
  285. package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs.map +0 -1
  286. package/dist/cjs/hooks/management/agents/useGetAgent.cjs +0 -30
  287. package/dist/cjs/hooks/management/agents/useGetAgent.cjs.map +0 -1
  288. package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs +0 -41
  289. package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs.map +0 -1
  290. package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs +0 -42
  291. package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs.map +0 -1
  292. package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs +0 -31
  293. package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs.map +0 -1
  294. package/dist/cjs/hooks/management/agents/useGetAgents.cjs +0 -33
  295. package/dist/cjs/hooks/management/agents/useGetAgents.cjs.map +0 -1
  296. package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs +0 -27
  297. package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs.map +0 -1
  298. package/dist/cjs/hooks/management/applications/useCreateApplication.cjs +0 -31
  299. package/dist/cjs/hooks/management/applications/useCreateApplication.cjs.map +0 -1
  300. package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs +0 -26
  301. package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs.map +0 -1
  302. package/dist/cjs/hooks/management/applications/useGetApplication.cjs +0 -35
  303. package/dist/cjs/hooks/management/applications/useGetApplication.cjs.map +0 -1
  304. package/dist/cjs/hooks/management/applications/useGetApplications.cjs +0 -36
  305. package/dist/cjs/hooks/management/applications/useGetApplications.cjs.map +0 -1
  306. package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs +0 -27
  307. package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs.map +0 -1
  308. package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs +0 -32
  309. package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs.map +0 -1
  310. package/dist/cjs/hooks/management/groups/useCreateGroup.cjs +0 -26
  311. package/dist/cjs/hooks/management/groups/useCreateGroup.cjs.map +0 -1
  312. package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs +0 -30
  313. package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs.map +0 -1
  314. package/dist/cjs/hooks/management/groups/useGetGroup.cjs +0 -30
  315. package/dist/cjs/hooks/management/groups/useGetGroup.cjs.map +0 -1
  316. package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs +0 -40
  317. package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs.map +0 -1
  318. package/dist/cjs/hooks/management/groups/useGetGroups.cjs +0 -31
  319. package/dist/cjs/hooks/management/groups/useGetGroups.cjs.map +0 -1
  320. package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs +0 -32
  321. package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs.map +0 -1
  322. package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs +0 -31
  323. package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs.map +0 -1
  324. package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs +0 -27
  325. package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs.map +0 -1
  326. package/dist/cjs/hooks/management/roles/useCreateRole.cjs +0 -26
  327. package/dist/cjs/hooks/management/roles/useCreateRole.cjs.map +0 -1
  328. package/dist/cjs/hooks/management/roles/useDeleteRole.cjs +0 -26
  329. package/dist/cjs/hooks/management/roles/useDeleteRole.cjs.map +0 -1
  330. package/dist/cjs/hooks/management/roles/useGetRole.cjs +0 -30
  331. package/dist/cjs/hooks/management/roles/useGetRole.cjs.map +0 -1
  332. package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs +0 -42
  333. package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs.map +0 -1
  334. package/dist/cjs/hooks/management/roles/useGetRoles.cjs +0 -31
  335. package/dist/cjs/hooks/management/roles/useGetRoles.cjs.map +0 -1
  336. package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs +0 -27
  337. package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs.map +0 -1
  338. package/dist/cjs/hooks/management/roles/useUpdateRole.cjs +0 -27
  339. package/dist/cjs/hooks/management/roles/useUpdateRole.cjs.map +0 -1
  340. package/dist/cjs/hooks/management/users/useCreateUser.cjs +0 -26
  341. package/dist/cjs/hooks/management/users/useCreateUser.cjs.map +0 -1
  342. package/dist/cjs/hooks/management/users/useDeleteUser.cjs +0 -26
  343. package/dist/cjs/hooks/management/users/useDeleteUser.cjs.map +0 -1
  344. package/dist/cjs/hooks/management/users/useGetUser.cjs +0 -30
  345. package/dist/cjs/hooks/management/users/useGetUser.cjs.map +0 -1
  346. package/dist/cjs/hooks/management/users/useGetUserGroups.cjs +0 -41
  347. package/dist/cjs/hooks/management/users/useGetUserGroups.cjs.map +0 -1
  348. package/dist/cjs/hooks/management/users/useGetUserTypes.cjs +0 -31
  349. package/dist/cjs/hooks/management/users/useGetUserTypes.cjs.map +0 -1
  350. package/dist/cjs/hooks/management/users/useGetUsers.cjs +0 -38
  351. package/dist/cjs/hooks/management/users/useGetUsers.cjs.map +0 -1
  352. package/dist/cjs/hooks/management/users/useUpdateUser.cjs +0 -27
  353. package/dist/cjs/hooks/management/users/useUpdateUser.cjs.map +0 -1
  354. package/dist/hooks/management/agents/useCreateAgent.d.ts +0 -11
  355. package/dist/hooks/management/agents/useCreateAgent.d.ts.map +0 -1
  356. package/dist/hooks/management/agents/useCreateAgent.js +0 -24
  357. package/dist/hooks/management/agents/useCreateAgent.js.map +0 -1
  358. package/dist/hooks/management/agents/useDeleteAgent.d.ts +0 -10
  359. package/dist/hooks/management/agents/useDeleteAgent.d.ts.map +0 -1
  360. package/dist/hooks/management/agents/useDeleteAgent.js +0 -24
  361. package/dist/hooks/management/agents/useDeleteAgent.js.map +0 -1
  362. package/dist/hooks/management/agents/useGetAgent.d.ts +0 -12
  363. package/dist/hooks/management/agents/useGetAgent.d.ts.map +0 -1
  364. package/dist/hooks/management/agents/useGetAgent.js +0 -28
  365. package/dist/hooks/management/agents/useGetAgent.js.map +0 -1
  366. package/dist/hooks/management/agents/useGetAgentGroups.d.ts +0 -16
  367. package/dist/hooks/management/agents/useGetAgentGroups.d.ts.map +0 -1
  368. package/dist/hooks/management/agents/useGetAgentGroups.js +0 -39
  369. package/dist/hooks/management/agents/useGetAgentGroups.js.map +0 -1
  370. package/dist/hooks/management/agents/useGetAgentRoles.d.ts +0 -17
  371. package/dist/hooks/management/agents/useGetAgentRoles.d.ts.map +0 -1
  372. package/dist/hooks/management/agents/useGetAgentRoles.js +0 -40
  373. package/dist/hooks/management/agents/useGetAgentRoles.js.map +0 -1
  374. package/dist/hooks/management/agents/useGetAgentTypes.d.ts +0 -15
  375. package/dist/hooks/management/agents/useGetAgentTypes.d.ts.map +0 -1
  376. package/dist/hooks/management/agents/useGetAgentTypes.js +0 -29
  377. package/dist/hooks/management/agents/useGetAgentTypes.js.map +0 -1
  378. package/dist/hooks/management/agents/useGetAgents.d.ts +0 -23
  379. package/dist/hooks/management/agents/useGetAgents.d.ts.map +0 -1
  380. package/dist/hooks/management/agents/useGetAgents.js +0 -31
  381. package/dist/hooks/management/agents/useGetAgents.js.map +0 -1
  382. package/dist/hooks/management/agents/useUpdateAgent.d.ts +0 -18
  383. package/dist/hooks/management/agents/useUpdateAgent.d.ts.map +0 -1
  384. package/dist/hooks/management/agents/useUpdateAgent.js +0 -25
  385. package/dist/hooks/management/agents/useUpdateAgent.js.map +0 -1
  386. package/dist/hooks/management/applications/useCreateApplication.d.ts +0 -16
  387. package/dist/hooks/management/applications/useCreateApplication.d.ts.map +0 -1
  388. package/dist/hooks/management/applications/useCreateApplication.js +0 -29
  389. package/dist/hooks/management/applications/useCreateApplication.js.map +0 -1
  390. package/dist/hooks/management/applications/useDeleteApplication.d.ts +0 -10
  391. package/dist/hooks/management/applications/useDeleteApplication.d.ts.map +0 -1
  392. package/dist/hooks/management/applications/useDeleteApplication.js +0 -24
  393. package/dist/hooks/management/applications/useDeleteApplication.js.map +0 -1
  394. package/dist/hooks/management/applications/useGetApplication.d.ts +0 -17
  395. package/dist/hooks/management/applications/useGetApplication.d.ts.map +0 -1
  396. package/dist/hooks/management/applications/useGetApplication.js +0 -33
  397. package/dist/hooks/management/applications/useGetApplication.js.map +0 -1
  398. package/dist/hooks/management/applications/useGetApplications.d.ts +0 -24
  399. package/dist/hooks/management/applications/useGetApplications.d.ts.map +0 -1
  400. package/dist/hooks/management/applications/useGetApplications.js +0 -34
  401. package/dist/hooks/management/applications/useGetApplications.js.map +0 -1
  402. package/dist/hooks/management/applications/useUpdateApplication.d.ts +0 -18
  403. package/dist/hooks/management/applications/useUpdateApplication.d.ts.map +0 -1
  404. package/dist/hooks/management/applications/useUpdateApplication.js +0 -25
  405. package/dist/hooks/management/applications/useUpdateApplication.js.map +0 -1
  406. package/dist/hooks/management/groups/useAddGroupMembers.d.ts +0 -24
  407. package/dist/hooks/management/groups/useAddGroupMembers.d.ts.map +0 -1
  408. package/dist/hooks/management/groups/useAddGroupMembers.js +0 -30
  409. package/dist/hooks/management/groups/useAddGroupMembers.js.map +0 -1
  410. package/dist/hooks/management/groups/useCreateGroup.d.ts +0 -11
  411. package/dist/hooks/management/groups/useCreateGroup.d.ts.map +0 -1
  412. package/dist/hooks/management/groups/useCreateGroup.js +0 -24
  413. package/dist/hooks/management/groups/useCreateGroup.js.map +0 -1
  414. package/dist/hooks/management/groups/useDeleteGroup.d.ts +0 -10
  415. package/dist/hooks/management/groups/useDeleteGroup.d.ts.map +0 -1
  416. package/dist/hooks/management/groups/useDeleteGroup.js +0 -28
  417. package/dist/hooks/management/groups/useDeleteGroup.js.map +0 -1
  418. package/dist/hooks/management/groups/useGetGroup.d.ts +0 -12
  419. package/dist/hooks/management/groups/useGetGroup.d.ts.map +0 -1
  420. package/dist/hooks/management/groups/useGetGroup.js +0 -28
  421. package/dist/hooks/management/groups/useGetGroup.js.map +0 -1
  422. package/dist/hooks/management/groups/useGetGroupMembers.d.ts +0 -20
  423. package/dist/hooks/management/groups/useGetGroupMembers.d.ts.map +0 -1
  424. package/dist/hooks/management/groups/useGetGroupMembers.js +0 -38
  425. package/dist/hooks/management/groups/useGetGroupMembers.js.map +0 -1
  426. package/dist/hooks/management/groups/useGetGroups.d.ts +0 -19
  427. package/dist/hooks/management/groups/useGetGroups.d.ts.map +0 -1
  428. package/dist/hooks/management/groups/useGetGroups.js +0 -29
  429. package/dist/hooks/management/groups/useGetGroups.js.map +0 -1
  430. package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts +0 -12
  431. package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts.map +0 -1
  432. package/dist/hooks/management/groups/useRemoveGroupMembers.js +0 -30
  433. package/dist/hooks/management/groups/useRemoveGroupMembers.js.map +0 -1
  434. package/dist/hooks/management/groups/useUpdateGroup.d.ts +0 -24
  435. package/dist/hooks/management/groups/useUpdateGroup.d.ts.map +0 -1
  436. package/dist/hooks/management/groups/useUpdateGroup.js +0 -29
  437. package/dist/hooks/management/groups/useUpdateGroup.js.map +0 -1
  438. package/dist/hooks/management/roles/useAddRoleAssignments.d.ts +0 -24
  439. package/dist/hooks/management/roles/useAddRoleAssignments.d.ts.map +0 -1
  440. package/dist/hooks/management/roles/useAddRoleAssignments.js +0 -25
  441. package/dist/hooks/management/roles/useAddRoleAssignments.js.map +0 -1
  442. package/dist/hooks/management/roles/useCreateRole.d.ts +0 -11
  443. package/dist/hooks/management/roles/useCreateRole.d.ts.map +0 -1
  444. package/dist/hooks/management/roles/useCreateRole.js +0 -24
  445. package/dist/hooks/management/roles/useCreateRole.js.map +0 -1
  446. package/dist/hooks/management/roles/useDeleteRole.d.ts +0 -10
  447. package/dist/hooks/management/roles/useDeleteRole.d.ts.map +0 -1
  448. package/dist/hooks/management/roles/useDeleteRole.js +0 -24
  449. package/dist/hooks/management/roles/useDeleteRole.js.map +0 -1
  450. package/dist/hooks/management/roles/useGetRole.d.ts +0 -12
  451. package/dist/hooks/management/roles/useGetRole.d.ts.map +0 -1
  452. package/dist/hooks/management/roles/useGetRole.js +0 -28
  453. package/dist/hooks/management/roles/useGetRole.js.map +0 -1
  454. package/dist/hooks/management/roles/useGetRoleAssignments.d.ts +0 -24
  455. package/dist/hooks/management/roles/useGetRoleAssignments.d.ts.map +0 -1
  456. package/dist/hooks/management/roles/useGetRoleAssignments.js +0 -40
  457. package/dist/hooks/management/roles/useGetRoleAssignments.js.map +0 -1
  458. package/dist/hooks/management/roles/useGetRoles.d.ts +0 -19
  459. package/dist/hooks/management/roles/useGetRoles.d.ts.map +0 -1
  460. package/dist/hooks/management/roles/useGetRoles.js +0 -29
  461. package/dist/hooks/management/roles/useGetRoles.js.map +0 -1
  462. package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts +0 -11
  463. package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts.map +0 -1
  464. package/dist/hooks/management/roles/useRemoveRoleAssignments.js +0 -25
  465. package/dist/hooks/management/roles/useRemoveRoleAssignments.js.map +0 -1
  466. package/dist/hooks/management/roles/useUpdateRole.d.ts +0 -24
  467. package/dist/hooks/management/roles/useUpdateRole.d.ts.map +0 -1
  468. package/dist/hooks/management/roles/useUpdateRole.js +0 -25
  469. package/dist/hooks/management/roles/useUpdateRole.js.map +0 -1
  470. package/dist/hooks/management/users/useCreateUser.d.ts +0 -11
  471. package/dist/hooks/management/users/useCreateUser.d.ts.map +0 -1
  472. package/dist/hooks/management/users/useCreateUser.js +0 -24
  473. package/dist/hooks/management/users/useCreateUser.js.map +0 -1
  474. package/dist/hooks/management/users/useDeleteUser.d.ts +0 -10
  475. package/dist/hooks/management/users/useDeleteUser.d.ts.map +0 -1
  476. package/dist/hooks/management/users/useDeleteUser.js +0 -24
  477. package/dist/hooks/management/users/useDeleteUser.js.map +0 -1
  478. package/dist/hooks/management/users/useGetUser.d.ts +0 -12
  479. package/dist/hooks/management/users/useGetUser.d.ts.map +0 -1
  480. package/dist/hooks/management/users/useGetUser.js +0 -28
  481. package/dist/hooks/management/users/useGetUser.js.map +0 -1
  482. package/dist/hooks/management/users/useGetUserGroups.d.ts +0 -16
  483. package/dist/hooks/management/users/useGetUserGroups.d.ts.map +0 -1
  484. package/dist/hooks/management/users/useGetUserGroups.js +0 -39
  485. package/dist/hooks/management/users/useGetUserGroups.js.map +0 -1
  486. package/dist/hooks/management/users/useGetUserTypes.d.ts +0 -15
  487. package/dist/hooks/management/users/useGetUserTypes.d.ts.map +0 -1
  488. package/dist/hooks/management/users/useGetUserTypes.js +0 -29
  489. package/dist/hooks/management/users/useGetUserTypes.js.map +0 -1
  490. package/dist/hooks/management/users/useGetUsers.d.ts +0 -17
  491. package/dist/hooks/management/users/useGetUsers.d.ts.map +0 -1
  492. package/dist/hooks/management/users/useGetUsers.js +0 -36
  493. package/dist/hooks/management/users/useGetUsers.js.map +0 -1
  494. package/dist/hooks/management/users/useUpdateUser.d.ts +0 -18
  495. package/dist/hooks/management/users/useUpdateUser.d.ts.map +0 -1
  496. package/dist/hooks/management/users/useUpdateUser.js +0 -25
  497. package/dist/hooks/management/users/useUpdateUser.js.map +0 -1
@@ -0,0 +1,26 @@
1
+
2
+ //#region src/utils/formatConsentDetailValue.ts
3
+ /**
4
+ * Formats an authorization detail field value for display. Strings are shown as-is, a list of
5
+ * plain values comma-separated, and any other JSON value as JSON, compact unless `indent` is given.
6
+ *
7
+ * @param value - Field value.
8
+ * @param indent - Spaces to indent structured JSON by, so it reads as a block rather than one long line.
9
+ * @returns Display text.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * formatConsentDetailValue(['initiate', 'status']) // returns 'initiate, status'
14
+ * ```
15
+ */
16
+ const formatConsentDetailValue = (value, indent) => {
17
+ if (value === null || value === void 0) return "";
18
+ if (typeof value === "string") return value;
19
+ if (Array.isArray(value) && value.every((item) => typeof item !== "object" || item === null)) return value.map((item) => String(item)).join(", ");
20
+ return JSON.stringify(value, null, indent);
21
+ };
22
+ var formatConsentDetailValue_default = formatConsentDetailValue;
23
+
24
+ //#endregion
25
+ exports.default = formatConsentDetailValue_default;
26
+ //# sourceMappingURL=formatConsentDetailValue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatConsentDetailValue.cjs","names":[],"sources":["../../../src/utils/formatConsentDetailValue.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Formats an authorization detail field value for display. Strings are shown as-is, a list of\n * plain values comma-separated, and any other JSON value as JSON, compact unless `indent` is given.\n *\n * @param value - Field value.\n * @param indent - Spaces to indent structured JSON by, so it reads as a block rather than one long line.\n * @returns Display text.\n *\n * @example\n * ```typescript\n * formatConsentDetailValue(['initiate', 'status']) // returns 'initiate, status'\n * ```\n */\nconst formatConsentDetailValue = (value: unknown, indent?: number): string => {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (Array.isArray(value) && value.every((item: unknown) => typeof item !== 'object' || item === null)) {\n return value.map((item: unknown) => String(item)).join(', ');\n }\n return JSON.stringify(value, null, indent);\n};\n\nexport default formatConsentDetailValue;\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAM,4BAA4B,OAAgB,WAA4B;AAC5E,KAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,MAAM,QAAQ,MAAM,IAAI,MAAM,OAAO,SAAkB,OAAO,SAAS,YAAY,SAAS,KAAK,CACnG,QAAO,MAAM,KAAK,SAAkB,OAAO,KAAK,CAAC,CAAC,KAAK,KAAK;AAE9D,QAAO,KAAK,UAAU,OAAO,MAAM,OAAO;;AAG5C,uCAAe"}
@@ -0,0 +1,44 @@
1
+ const require_formatConsentDetailValue = require('./formatConsentDetailValue.cjs');
2
+ const require_isConsentDetailStructured = require('./isConsentDetailStructured.cjs');
3
+
4
+ //#region src/utils/getConsentDetailLayout.ts
5
+ /**
6
+ * Limits a consent screen applies to authorization detail content so that a long or large value never
7
+ * crowds the layout. Text longer than a `*Chars` limit is clamped to its `*Lines` limit behind a toggle,
8
+ * and a list longer than `listItems` shows that many items behind a toggle.
9
+ */
10
+ const CONSENT_DETAIL_DISPLAY_LIMITS = Object.freeze({
11
+ inlineLabelChars: 32,
12
+ inlineValueChars: 32,
13
+ listItems: 8,
14
+ structuredLines: 8,
15
+ summaryChars: 160,
16
+ summaryLines: 3,
17
+ valueChars: 160,
18
+ valueLines: 4
19
+ });
20
+ /**
21
+ * Chooses how a consent screen lays out one authorization detail field. A short label and a short value
22
+ * sit side by side; a long label, a long value, a long list or a structured value is stacked, the label
23
+ * above the value, so neither squeezes the other.
24
+ *
25
+ * @param row - Field to lay out.
26
+ * @returns `inline` or `stacked`.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * getConsentDetailLayout({label: 'Pay to', path: 'creditorName', value: 'Merchant A'}) // returns 'inline'
31
+ * ```
32
+ */
33
+ const getConsentDetailLayout = (row) => {
34
+ if ((row.label || row.path).length > CONSENT_DETAIL_DISPLAY_LIMITS.inlineLabelChars || require_isConsentDetailStructured.default(row.value)) return "stacked";
35
+ const items = Array.isArray(row.value) ? [...row.value] : [row.value];
36
+ if (row.modification === "addItems" && Array.isArray(row.options)) items.push(...row.options);
37
+ return require_formatConsentDetailValue.default(items).length > CONSENT_DETAIL_DISPLAY_LIMITS.inlineValueChars ? "stacked" : "inline";
38
+ };
39
+ var getConsentDetailLayout_default = getConsentDetailLayout;
40
+
41
+ //#endregion
42
+ exports.CONSENT_DETAIL_DISPLAY_LIMITS = CONSENT_DETAIL_DISPLAY_LIMITS;
43
+ exports.default = getConsentDetailLayout_default;
44
+ //# sourceMappingURL=getConsentDetailLayout.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getConsentDetailLayout.cjs","names":["CONSENT_DETAIL_DISPLAY_LIMITS: Readonly<{\n inlineLabelChars: number;\n inlineValueChars: number;\n listItems: number;\n structuredLines: number;\n summaryChars: number;\n summaryLines: number;\n valueChars: number;\n valueLines: number;\n}>","isConsentDetailStructured","items: unknown[]","formatConsentDetailValue"],"sources":["../../../src/utils/getConsentDetailLayout.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {type ConsentDetailRow} from '@thunderid/browser';\nimport formatConsentDetailValue from './formatConsentDetailValue';\nimport isConsentDetailStructured from './isConsentDetailStructured';\n\n/**\n * Limits a consent screen applies to authorization detail content so that a long or large value never\n * crowds the layout. Text longer than a `*Chars` limit is clamped to its `*Lines` limit behind a toggle,\n * and a list longer than `listItems` shows that many items behind a toggle.\n */\nexport const CONSENT_DETAIL_DISPLAY_LIMITS: Readonly<{\n inlineLabelChars: number;\n inlineValueChars: number;\n listItems: number;\n structuredLines: number;\n summaryChars: number;\n summaryLines: number;\n valueChars: number;\n valueLines: number;\n}> = Object.freeze({\n inlineLabelChars: 32,\n inlineValueChars: 32,\n listItems: 8,\n structuredLines: 8,\n summaryChars: 160,\n summaryLines: 3,\n valueChars: 160,\n valueLines: 4,\n});\n\n/**\n * Chooses how a consent screen lays out one authorization detail field. A short label and a short value\n * sit side by side; a long label, a long value, a long list or a structured value is stacked, the label\n * above the value, so neither squeezes the other.\n *\n * @param row - Field to lay out.\n * @returns `inline` or `stacked`.\n *\n * @example\n * ```typescript\n * getConsentDetailLayout({label: 'Pay to', path: 'creditorName', value: 'Merchant A'}) // returns 'inline'\n * ```\n */\nconst getConsentDetailLayout = (row: ConsentDetailRow): 'inline' | 'stacked' => {\n const label: string = row.label || row.path;\n if (label.length > CONSENT_DETAIL_DISPLAY_LIMITS.inlineLabelChars || isConsentDetailStructured(row.value)) {\n return 'stacked';\n }\n\n const items: unknown[] = Array.isArray(row.value) ? [...(row.value as unknown[])] : [row.value];\n if (row.modification === 'addItems' && Array.isArray(row.options)) {\n items.push(...row.options);\n }\n const text: string = formatConsentDetailValue(items);\n\n return text.length > CONSENT_DETAIL_DISPLAY_LIMITS.inlineValueChars ? 'stacked' : 'inline';\n};\n\nexport default getConsentDetailLayout;\n"],"mappings":";;;;;;;;;AAYA,MAAaA,gCASR,OAAO,OAAO;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,WAAW;CACX,iBAAiB;CACjB,cAAc;CACd,cAAc;CACd,YAAY;CACZ,YAAY;CACb,CAAC;;;;;;;;;;;;;;AAeF,MAAM,0BAA0B,QAAgD;AAE9E,MADsB,IAAI,SAAS,IAAI,MAC7B,SAAS,8BAA8B,oBAAoBC,0CAA0B,IAAI,MAAM,CACvG,QAAO;CAGT,MAAMC,QAAmB,MAAM,QAAQ,IAAI,MAAM,GAAG,CAAC,GAAI,IAAI,MAAoB,GAAG,CAAC,IAAI,MAAM;AAC/F,KAAI,IAAI,iBAAiB,cAAc,MAAM,QAAQ,IAAI,QAAQ,CAC/D,OAAM,KAAK,GAAG,IAAI,QAAQ;AAI5B,QAFqBC,yCAAyB,MAAM,CAExC,SAAS,8BAA8B,mBAAmB,YAAY;;AAGpF,qCAAe"}
@@ -0,0 +1,30 @@
1
+ const require_getConsentDetailLayout = require('./getConsentDetailLayout.cjs');
2
+
3
+ //#region src/utils/getConsentDetailListDisplay.ts
4
+ /**
5
+ * Tells how many items of an authorization detail list a consent screen shows. A list longer than
6
+ * `CONSENT_DETAIL_DISPLAY_LIMITS.listItems` shows that many items while collapsed, the rest behind a toggle.
7
+ *
8
+ * @param itemCount - Number of items in the list.
9
+ * @param expanded - Whether the user expanded the list.
10
+ * @returns The items to show and hide.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * getConsentDetailListDisplay(10, false) // returns {hiddenCount: 2, isCollapsible: true, visibleCount: 8}
15
+ * ```
16
+ */
17
+ const getConsentDetailListDisplay = (itemCount, expanded) => {
18
+ const isCollapsible = itemCount > require_getConsentDetailLayout.CONSENT_DETAIL_DISPLAY_LIMITS.listItems;
19
+ const visibleCount = isCollapsible && !expanded ? require_getConsentDetailLayout.CONSENT_DETAIL_DISPLAY_LIMITS.listItems : itemCount;
20
+ return {
21
+ hiddenCount: itemCount - visibleCount,
22
+ isCollapsible,
23
+ visibleCount
24
+ };
25
+ };
26
+ var getConsentDetailListDisplay_default = getConsentDetailListDisplay;
27
+
28
+ //#endregion
29
+ exports.default = getConsentDetailListDisplay_default;
30
+ //# sourceMappingURL=getConsentDetailListDisplay.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getConsentDetailListDisplay.cjs","names":["isCollapsible: boolean","CONSENT_DETAIL_DISPLAY_LIMITS","visibleCount: number"],"sources":["../../../src/utils/getConsentDetailListDisplay.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {CONSENT_DETAIL_DISPLAY_LIMITS} from './getConsentDetailLayout';\n\n/**\n * How a consent screen shows a list of authorization detail items, given the\n * `CONSENT_DETAIL_DISPLAY_LIMITS.listItems` limit.\n *\n * @experimental This interface may change in future versions\n */\nexport interface ConsentDetailListDisplay {\n /** Number of items hidden behind the toggle; `0` while expanded or when the list fits. */\n hiddenCount: number;\n /** Whether the list is longer than the limit, so it is shown behind a toggle. */\n isCollapsible: boolean;\n /** Number of items to show. */\n visibleCount: number;\n}\n\n/**\n * Tells how many items of an authorization detail list a consent screen shows. A list longer than\n * `CONSENT_DETAIL_DISPLAY_LIMITS.listItems` shows that many items while collapsed, the rest behind a toggle.\n *\n * @param itemCount - Number of items in the list.\n * @param expanded - Whether the user expanded the list.\n * @returns The items to show and hide.\n *\n * @example\n * ```typescript\n * getConsentDetailListDisplay(10, false) // returns {hiddenCount: 2, isCollapsible: true, visibleCount: 8}\n * ```\n */\nconst getConsentDetailListDisplay = (itemCount: number, expanded: boolean): ConsentDetailListDisplay => {\n const isCollapsible: boolean = itemCount > CONSENT_DETAIL_DISPLAY_LIMITS.listItems;\n const visibleCount: number = isCollapsible && !expanded ? CONSENT_DETAIL_DISPLAY_LIMITS.listItems : itemCount;\n\n return {hiddenCount: itemCount - visibleCount, isCollapsible, visibleCount};\n};\n\nexport default getConsentDetailListDisplay;\n"],"mappings":";;;;;;;;;;;;;;;;AAiCA,MAAM,+BAA+B,WAAmB,aAAgD;CACtG,MAAMA,gBAAyB,YAAYC,6DAA8B;CACzE,MAAMC,eAAuB,iBAAiB,CAAC,WAAWD,6DAA8B,YAAY;AAEpG,QAAO;EAAC,aAAa,YAAY;EAAc;EAAe;EAAa;;AAG7E,0CAAe"}
@@ -0,0 +1,41 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_ConsentCheckboxList = require('../components/auth/flow/ConsentCheckboxList.cjs');
3
+ let __thunderid_browser = require("@thunderid/browser");
4
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
5
+
6
+ //#region src/utils/isConsentApprovalBlocked.ts
7
+ /**
8
+ * Reports whether any field the user may modify on an authorization detail element shows text that cannot
9
+ * be submitted. The element must not be approved while this holds, since its decision would not carry what
10
+ * the user sees.
11
+ *
12
+ * @param purposeId - The identifier of the consent purpose the element belongs to.
13
+ * @param element - The authorization detail element.
14
+ * @param inputs - Form values, holding the invalid marker of each field under its invalid key.
15
+ * @returns Whether a field of the element is invalid.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * hasInvalidConsentModification('p1', element, {'__consent_invalid__p1__d-1__amount': 'true'}) // returns true
20
+ * ```
21
+ */
22
+ const hasInvalidConsentModification = (purposeId, element, inputs) => (element.rows ?? []).some((row) => Boolean(row.modification) && inputs[(0, __thunderid_browser.getConsentInvalidKey)(purposeId, element.name, row.path)] === "true");
23
+ /**
24
+ * Reports whether the consent cannot be approved yet: an authorization detail the user has not declined
25
+ * shows, in a field the user may modify, text that cannot be submitted. Denying stays possible.
26
+ *
27
+ * @param purposes - The consent purposes on the screen.
28
+ * @param formValues - Form values, holding each element's approval and each field's invalid marker.
29
+ * @returns Whether approval must wait until the user corrects the field.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * isConsentApprovalBlocked(purposes, {'__consent_invalid__p1__d-1__amount': 'true'}) // returns true
34
+ * ```
35
+ */
36
+ const isConsentApprovalBlocked = (purposes, formValues) => purposes.some((purpose) => (purpose.optional ?? []).some((element) => formValues[require_ConsentCheckboxList.getConsentOptionalKey(purpose.purposeId, element.name)] !== "false" && hasInvalidConsentModification(purpose.purposeId, element, formValues)));
37
+ var isConsentApprovalBlocked_default = isConsentApprovalBlocked;
38
+
39
+ //#endregion
40
+ exports.default = isConsentApprovalBlocked_default;
41
+ //# sourceMappingURL=isConsentApprovalBlocked.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isConsentApprovalBlocked.cjs","names":["getConsentOptionalKey"],"sources":["../../../src/utils/isConsentApprovalBlocked.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n type ConsentDetailRow,\n type ConsentPurposeData,\n getConsentInvalidKey,\n type PromptElement,\n} from '@thunderid/browser';\nimport {getConsentOptionalKey} from '../components/auth/flow/ConsentCheckboxList';\n\n/**\n * Reports whether any field the user may modify on an authorization detail element shows text that cannot\n * be submitted. The element must not be approved while this holds, since its decision would not carry what\n * the user sees.\n *\n * @param purposeId - The identifier of the consent purpose the element belongs to.\n * @param element - The authorization detail element.\n * @param inputs - Form values, holding the invalid marker of each field under its invalid key.\n * @returns Whether a field of the element is invalid.\n *\n * @example\n * ```typescript\n * hasInvalidConsentModification('p1', element, {'__consent_invalid__p1__d-1__amount': 'true'}) // returns true\n * ```\n */\nconst hasInvalidConsentModification = (\n purposeId: string,\n element: PromptElement,\n inputs: Record<string, unknown>,\n): boolean =>\n (element.rows ?? []).some(\n (row: ConsentDetailRow) =>\n Boolean(row.modification) && inputs[getConsentInvalidKey(purposeId, element.name, row.path)] === 'true',\n );\n\n/**\n * Reports whether the consent cannot be approved yet: an authorization detail the user has not declined\n * shows, in a field the user may modify, text that cannot be submitted. Denying stays possible.\n *\n * @param purposes - The consent purposes on the screen.\n * @param formValues - Form values, holding each element's approval and each field's invalid marker.\n * @returns Whether approval must wait until the user corrects the field.\n *\n * @example\n * ```typescript\n * isConsentApprovalBlocked(purposes, {'__consent_invalid__p1__d-1__amount': 'true'}) // returns true\n * ```\n */\nconst isConsentApprovalBlocked = (purposes: ConsentPurposeData[], formValues: Record<string, unknown>): boolean =>\n purposes.some((purpose: ConsentPurposeData) =>\n (purpose.optional ?? []).some(\n (element: PromptElement) =>\n formValues[getConsentOptionalKey(purpose.purposeId, element.name)] !== 'false' &&\n hasInvalidConsentModification(purpose.purposeId, element, formValues),\n ),\n );\n\nexport default isConsentApprovalBlocked;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,iCACJ,WACA,SACA,YAEC,QAAQ,QAAQ,EAAE,EAAE,MAClB,QACC,QAAQ,IAAI,aAAa,IAAI,qDAA4B,WAAW,QAAQ,MAAM,IAAI,KAAK,MAAM,OACpG;;;;;;;;;;;;;;AAeH,MAAM,4BAA4B,UAAgC,eAChE,SAAS,MAAM,aACZ,QAAQ,YAAY,EAAE,EAAE,MACtB,YACC,WAAWA,kDAAsB,QAAQ,WAAW,QAAQ,KAAK,MAAM,WACvE,8BAA8B,QAAQ,WAAW,SAAS,WAAW,CACxE,CACF;AAEH,uCAAe"}
@@ -0,0 +1,24 @@
1
+
2
+ //#region src/utils/isConsentDetailPlainList.ts
3
+ /**
4
+ * Whether a field value is a list of plain values, strings, numbers or booleans, which a consent screen shows
5
+ * as a list rather than as structured JSON.
6
+ *
7
+ * @param value - Field value.
8
+ * @returns `true` when the value is a list of plain values.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * isConsentDetailPlainList(['initiate', 'status']) // returns true
13
+ * ```
14
+ */
15
+ const isConsentDetailPlainList = (value) => Array.isArray(value) && value.every((item) => [
16
+ "string",
17
+ "number",
18
+ "boolean"
19
+ ].includes(typeof item));
20
+ var isConsentDetailPlainList_default = isConsentDetailPlainList;
21
+
22
+ //#endregion
23
+ exports.default = isConsentDetailPlainList_default;
24
+ //# sourceMappingURL=isConsentDetailPlainList.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isConsentDetailPlainList.cjs","names":[],"sources":["../../../src/utils/isConsentDetailPlainList.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Whether a field value is a list of plain values, strings, numbers or booleans, which a consent screen shows\n * as a list rather than as structured JSON.\n *\n * @param value - Field value.\n * @returns `true` when the value is a list of plain values.\n *\n * @example\n * ```typescript\n * isConsentDetailPlainList(['initiate', 'status']) // returns true\n * ```\n */\nconst isConsentDetailPlainList = (value: unknown): value is (string | number | boolean)[] =>\n Array.isArray(value) && value.every((item: unknown) => ['string', 'number', 'boolean'].includes(typeof item));\n\nexport default isConsentDetailPlainList;\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAM,4BAA4B,UAChC,MAAM,QAAQ,MAAM,IAAI,MAAM,OAAO,SAAkB;CAAC;CAAU;CAAU;CAAU,CAAC,SAAS,OAAO,KAAK,CAAC;AAE/G,uCAAe"}
@@ -0,0 +1,15 @@
1
+
2
+ //#region src/utils/isConsentDetailStructured.ts
3
+ /**
4
+ * Whether a field value is structured JSON, an object or a list holding objects, rather than a plain
5
+ * value or a list of plain values.
6
+ *
7
+ * @param value - Field value.
8
+ * @returns `true` when the value is shown as a formatted JSON block.
9
+ */
10
+ const isConsentDetailStructured = (value) => typeof value === "object" && value !== null && !Array.isArray(value) || Array.isArray(value) && value.some((item) => typeof item === "object" && item !== null);
11
+ var isConsentDetailStructured_default = isConsentDetailStructured;
12
+
13
+ //#endregion
14
+ exports.default = isConsentDetailStructured_default;
15
+ //# sourceMappingURL=isConsentDetailStructured.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isConsentDetailStructured.cjs","names":[],"sources":["../../../src/utils/isConsentDetailStructured.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Whether a field value is structured JSON, an object or a list holding objects, rather than a plain\n * value or a list of plain values.\n *\n * @param value - Field value.\n * @returns `true` when the value is shown as a formatted JSON block.\n */\nconst isConsentDetailStructured = (value: unknown): boolean =>\n (typeof value === 'object' && value !== null && !Array.isArray(value)) ||\n (Array.isArray(value) && value.some((item: unknown) => typeof item === 'object' && item !== null));\n\nexport default isConsentDetailStructured;\n"],"mappings":";;;;;;;;;AAUA,MAAM,6BAA6B,UAChC,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM,IACpE,MAAM,QAAQ,MAAM,IAAI,MAAM,MAAM,SAAkB,OAAO,SAAS,YAAY,SAAS,KAAK;AAEnG,wCAAe"}
@@ -0,0 +1,25 @@
1
+
2
+ //#region src/utils/isConsentDetailTextClamped.ts
3
+ /**
4
+ * Whether authorization detail text is long enough to be clamped behind a toggle: longer than `maxChars`, or
5
+ * spanning more than `maxLines` lines.
6
+ *
7
+ * @param text - Text to show.
8
+ * @param maxChars - Number of characters above which the text is clamped, such as
9
+ * `CONSENT_DETAIL_DISPLAY_LIMITS.valueChars`.
10
+ * @param maxLines - Number of lines above which the text is clamped, such as
11
+ * `CONSENT_DETAIL_DISPLAY_LIMITS.valueLines`.
12
+ * @returns `true` when the text is clamped while collapsed.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * isConsentDetailTextClamped('Merchant A', CONSENT_DETAIL_DISPLAY_LIMITS.valueChars, CONSENT_DETAIL_DISPLAY_LIMITS.valueLines)
17
+ * // returns false
18
+ * ```
19
+ */
20
+ const isConsentDetailTextClamped = (text, maxChars, maxLines) => text.length > maxChars || text.split("\n").length > maxLines;
21
+ var isConsentDetailTextClamped_default = isConsentDetailTextClamped;
22
+
23
+ //#endregion
24
+ exports.default = isConsentDetailTextClamped_default;
25
+ //# sourceMappingURL=isConsentDetailTextClamped.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isConsentDetailTextClamped.cjs","names":[],"sources":["../../../src/utils/isConsentDetailTextClamped.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Whether authorization detail text is long enough to be clamped behind a toggle: longer than `maxChars`, or\n * spanning more than `maxLines` lines.\n *\n * @param text - Text to show.\n * @param maxChars - Number of characters above which the text is clamped, such as\n * `CONSENT_DETAIL_DISPLAY_LIMITS.valueChars`.\n * @param maxLines - Number of lines above which the text is clamped, such as\n * `CONSENT_DETAIL_DISPLAY_LIMITS.valueLines`.\n * @returns `true` when the text is clamped while collapsed.\n *\n * @example\n * ```typescript\n * isConsentDetailTextClamped('Merchant A', CONSENT_DETAIL_DISPLAY_LIMITS.valueChars, CONSENT_DETAIL_DISPLAY_LIMITS.valueLines)\n * // returns false\n * ```\n */\nconst isConsentDetailTextClamped = (text: string, maxChars: number, maxLines: number): boolean =>\n text.length > maxChars || text.split('\\n').length > maxLines;\n\nexport default isConsentDetailTextClamped;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,MAAM,8BAA8B,MAAc,UAAkB,aAClE,KAAK,SAAS,YAAY,KAAK,MAAM,KAAK,CAAC,SAAS;AAEtD,yCAAe"}
@@ -5,9 +5,9 @@ import Button_default from "../../primitives/Button/Button.js";
5
5
  import Typography_default from "../../primitives/Typography/Typography.js";
6
6
  import Alert_default from "../../primitives/Alert/Alert.js";
7
7
  import Card_default from "../../primitives/Card/Card.js";
8
+ import TextField_default from "../../primitives/TextField/TextField.js";
8
9
  import Checkbox_default from "../../primitives/Checkbox/Checkbox.js";
9
10
  import DatePicker_default from "../../primitives/DatePicker/DatePicker.js";
10
- import TextField_default from "../../primitives/TextField/TextField.js";
11
11
  import Divider_default from "../../primitives/Divider/Divider.js";
12
12
  import BaseUserProfile_styles_default from "./BaseUserProfile.styles.js";
13
13
  import getMappedUserProfileValue_default from "../../../utils/getMappedUserProfileValue.js";
@@ -1 +1 @@
1
- {"version":3,"file":"AgentCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/AgentCreate/AgentCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,EAA0B,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAChD,OAAwB,EAAwB,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAM/F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IAChH;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAuCrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"AgentCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/AgentCreate/AgentCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,EASN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAChD,OAAwB,EAAwB,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAO/F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IAChH;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAgDrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useCreateAgent_default from "../../../hooks/management/agents/useCreateAgent.js";
3
- import useGetAgentTypes_default from "../../../hooks/management/agents/useGetAgentTypes.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";
4
5
  import useDefaultOuId_default from "../shared/useDefaultOuId.js";
5
6
  import BaseAgentCreate_default from "./BaseAgentCreate.js";
6
- import { toManagementErrorMessage } from "@thunderid/browser";
7
+ import { AgentQueryKeys, createAgent, getAgentTypes, toManagementErrorMessage } from "@thunderid/browser";
7
8
  import { useMemo } from "react";
8
9
  import { jsx } from "react/jsx-runtime";
9
10
 
@@ -19,8 +20,18 @@ import { jsx } from "react/jsx-runtime";
19
20
  const AgentCreate = ({ onCreated, ouId, owner, preferences,...rest }) => {
20
21
  const { t } = useTranslation_default(preferences?.i18n);
21
22
  const resolvedOuId = useDefaultOuId_default(ouId);
22
- const { data: agentTypes } = useGetAgentTypes_default({ limit: 100 });
23
- const { error, isLoading, mutate } = useCreateAgent_default({ onSuccess: onCreated });
23
+ const agentsEndpoint = useManagementEndpoint_default("agents");
24
+ const agentTypesEndpoint = useManagementEndpoint_default("agentTypes");
25
+ const { data: agentTypes } = useResourceQuery_default([AgentQueryKeys.AGENT_TYPES, { limit: 100 }], (fetcher) => getAgentTypes({
26
+ ...agentTypesEndpoint,
27
+ fetcher,
28
+ limit: 100
29
+ }));
30
+ const { error, isLoading, mutate } = useResourceMutation_default((payload, fetcher) => createAgent({
31
+ ...agentsEndpoint,
32
+ fetcher,
33
+ payload
34
+ }), () => [[AgentQueryKeys.AGENTS]], { onSuccess: onCreated });
24
35
  const options = useMemo(() => (agentTypes?.types ?? []).map((agentType) => ({
25
36
  label: agentType.displayName,
26
37
  value: agentType.handle
@@ -1 +1 @@
1
- {"version":3,"file":"AgentCreate.js","names":["AgentCreate: FC<AgentCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","useGetAgentTypes","useCreateAgent","options: SelectOption[]","BaseAgentCreate"],"sources":["../../../../src/components/admin/AgentCreate/AgentCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {toManagementErrorMessage, Agent, AgentType, SelectOption} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo} from 'react';\nimport BaseAgentCreate, {AgentCreateSubmission, BaseAgentCreateProps} from './BaseAgentCreate';\nimport useCreateAgent from '../../../hooks/management/agents/useCreateAgent';\nimport useGetAgentTypes from '../../../hooks/management/agents/useGetAgentTypes';\nimport useTranslation from '../../../hooks/useTranslation';\nimport useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type AgentCreateProps = Omit<BaseAgentCreateProps, 'agentTypes' | 'error' | 'isSubmitting' | 'onSubmit'> & {\n /**\n * Called with the created agent.\n */\n onCreated?: (agent: Agent) => void;\n /**\n * Organization unit the agent is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n /**\n * The person responsible for the agent. Defaults to the server's choice, usually the creator.\n */\n owner?: string;\n};\n\n/**\n * Registers an agent through the management API.\n *\n * @example\n * ```tsx\n * <AgentCreate onCreated={(agent) => navigate(`/agents/${agent.id}`)} />\n * ```\n */\nconst AgentCreate: FC<AgentCreateProps> = ({\n onCreated,\n ouId,\n owner,\n preferences,\n ...rest\n}: AgentCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const {data: agentTypes} = useGetAgentTypes({limit: 100});\n const {error, isLoading, mutate} = useCreateAgent({onSuccess: onCreated});\n\n const options: SelectOption[] = useMemo(\n () =>\n (agentTypes?.types ?? []).map((agentType: AgentType) => ({\n label: agentType.displayName,\n value: agentType.handle,\n })),\n [agentTypes],\n );\n\n const handleSubmit = ({description, name, type}: AgentCreateSubmission): void => {\n if (resolvedOuId) {\n void mutate({description, name, ouId: resolvedOuId, owner, type});\n }\n };\n\n return (\n <BaseAgentCreate\n agentTypes={options}\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.agents.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default AgentCreate;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkCA,MAAMA,eAAqC,EACzC,WACA,MACA,OACA,YACA,GAAG,WACiC;CACpC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAM,EAAC,MAAM,eAAcC,yBAAiB,EAAC,OAAO,KAAI,CAAC;CACzD,MAAM,EAAC,OAAO,WAAW,WAAUC,uBAAe,EAAC,WAAW,WAAU,CAAC;CAEzE,MAAMC,UAA0B,eAE3B,YAAY,SAAS,EAAE,EAAE,KAAK,eAA0B;EACvD,OAAO,UAAU;EACjB,OAAO,UAAU;EAClB,EAAE,EACL,CAAC,WAAW,CACb;CAED,MAAM,gBAAgB,EAAC,aAAa,MAAM,WAAuC;AAC/E,MAAI,aACF,CAAK,OAAO;GAAC;GAAa;GAAM,MAAM;GAAc;GAAO;GAAK,CAAC;;AAIrE,QACE,oBAACC;EACC,YAAY;EACZ,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,4BAA4B,GAAG,EAAE,4BAA4B;EAEpG;EACb,GAAI;GACJ;;AAIN,0BAAe"}
1
+ {"version":3,"file":"AgentCreate.js","names":["AgentCreate: FC<AgentCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","agentsEndpoint: ManagementEndpoint","useManagementEndpoint","agentTypesEndpoint: ManagementEndpoint","useResourceQuery","useResourceMutation","options: SelectOption[]","BaseAgentCreate"],"sources":["../../../../src/components/admin/AgentCreate/AgentCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Agent,\n AgentQueryKeys,\n AgentType,\n AgentTypeListResponse,\n CreateAgentRequest,\n SelectOption,\n createAgent,\n getAgentTypes,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo} from 'react';\nimport BaseAgentCreate, {AgentCreateSubmission, BaseAgentCreateProps} from './BaseAgentCreate';\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 useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type AgentCreateProps = Omit<BaseAgentCreateProps, 'agentTypes' | 'error' | 'isSubmitting' | 'onSubmit'> & {\n /**\n * Called with the created agent.\n */\n onCreated?: (agent: Agent) => void;\n /**\n * Organization unit the agent is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n /**\n * The person responsible for the agent. Defaults to the server's choice, usually the creator.\n */\n owner?: string;\n};\n\n/**\n * Registers an agent through the management API.\n *\n * @example\n * ```tsx\n * <AgentCreate onCreated={(agent) => navigate(`/agents/${agent.id}`)} />\n * ```\n */\nconst AgentCreate: FC<AgentCreateProps> = ({\n onCreated,\n ouId,\n owner,\n preferences,\n ...rest\n}: AgentCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const agentsEndpoint: ManagementEndpoint = useManagementEndpoint('agents');\n const agentTypesEndpoint: ManagementEndpoint = useManagementEndpoint('agentTypes');\n const {data: agentTypes}: ResourceQueryResult<AgentTypeListResponse> = useResourceQuery(\n [AgentQueryKeys.AGENT_TYPES, {limit: 100}],\n (fetcher) => getAgentTypes({...agentTypesEndpoint, fetcher, limit: 100}),\n );\n const {error, isLoading, mutate}: ResourceMutationResult<Agent, CreateAgentRequest> = useResourceMutation(\n (payload: CreateAgentRequest, fetcher) => createAgent({...agentsEndpoint, fetcher, payload}),\n () => [[AgentQueryKeys.AGENTS]],\n {onSuccess: onCreated},\n );\n\n const options: SelectOption[] = useMemo(\n () =>\n (agentTypes?.types ?? []).map((agentType: AgentType) => ({\n label: agentType.displayName,\n value: agentType.handle,\n })),\n [agentTypes],\n );\n\n const handleSubmit = ({description, name, type}: AgentCreateSubmission): void => {\n if (resolvedOuId) {\n void mutate({description, name, ouId: resolvedOuId, owner, type});\n }\n };\n\n return (\n <BaseAgentCreate\n agentTypes={options}\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.agents.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default AgentCreate;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6CA,MAAMA,eAAqC,EACzC,WACA,MACA,OACA,YACA,GAAG,WACiC;CACpC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAMC,iBAAqCC,8BAAsB,SAAS;CAC1E,MAAMC,qBAAyCD,8BAAsB,aAAa;CAClF,MAAM,EAAC,MAAM,eAA0DE,yBACrE,CAAC,eAAe,aAAa,EAAC,OAAO,KAAI,CAAC,GACzC,YAAY,cAAc;EAAC,GAAG;EAAoB;EAAS,OAAO;EAAI,CAAC,CACzE;CACD,MAAM,EAAC,OAAO,WAAW,WAA6DC,6BACnF,SAA6B,YAAY,YAAY;EAAC,GAAG;EAAgB;EAAS;EAAQ,CAAC,QACtF,CAAC,CAAC,eAAe,OAAO,CAAC,EAC/B,EAAC,WAAW,WAAU,CACvB;CAED,MAAMC,UAA0B,eAE3B,YAAY,SAAS,EAAE,EAAE,KAAK,eAA0B;EACvD,OAAO,UAAU;EACjB,OAAO,UAAU;EAClB,EAAE,EACL,CAAC,WAAW,CACb;CAED,MAAM,gBAAgB,EAAC,aAAa,MAAM,WAAuC;AAC/E,MAAI,aACF,CAAK,OAAO;GAAC;GAAa;GAAM,MAAM;GAAc;GAAO;GAAK,CAAC;;AAIrE,QACE,oBAACC;EACC,YAAY;EACZ,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,4BAA4B,GAAG,EAAE,4BAA4B;EAEpG;EACb,GAAI;GACJ;;AAIN,0BAAe"}
@@ -1,12 +1,19 @@
1
1
  import { FC } from 'react';
2
2
  import { BaseAgentDetailsProps } from './BaseAgentDetails';
3
- export type AgentDetailsProps = Omit<BaseAgentDetailsProps, 'agent' | 'error' | 'groups' | 'isDeleting' | 'isLoading' | 'onDelete' | 'roles'> & {
3
+ export type AgentDetailsProps = Omit<BaseAgentDetailsProps, 'agent' | 'error' | 'groups' | 'isDeleting' | 'isLoading' | 'isRunningLifecycleAction' | 'lifecycleActions' | 'onDelete' | 'onLifecycleAction' | 'roles'> & {
4
4
  agentId: string;
5
5
  /**
6
6
  * Whether the agent can be deleted from this view.
7
7
  * @default false
8
8
  */
9
9
  deletable?: boolean;
10
+ /**
11
+ * Whether the agent can be suspended, unsuspended and unlocked from this view. Each action runs through its
12
+ * administration flow and is offered only when the server configures that flow. Reading the configured
13
+ * flows needs a token that may read the server configuration.
14
+ * @default false
15
+ */
16
+ lifecycleActions?: boolean;
10
17
  /**
11
18
  * Called after the agent has been deleted.
12
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AgentDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/AgentDetails/AgentDetails.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAyB,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAO3E,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,qBAAqB,EACrB,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CACjF,GAAG;IACF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA6BvC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"AgentDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/AgentDetails/AgentDetails.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAyB,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAO3E,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,qBAAqB,EACnB,OAAO,GACP,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,0BAA0B,GAC1B,kBAAkB,GAClB,UAAU,GACV,mBAAmB,GACnB,OAAO,CACV,GAAG;IACF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA4DvC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useGetAgent_default from "../../../hooks/management/agents/useGetAgent.js";
3
- import useDeleteAgent_default from "../../../hooks/management/agents/useDeleteAgent.js";
4
- import useGetAgentGroups_default from "../../../hooks/management/agents/useGetAgentGroups.js";
5
- import useGetAgentRoles_default from "../../../hooks/management/agents/useGetAgentRoles.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 useAccountLifecycle_default from "../../../hooks/management/useAccountLifecycle.js";
6
6
  import BaseAgentDetails_default from "./BaseAgentDetails.js";
7
- import { toManagementErrorMessage } from "@thunderid/browser";
7
+ import { AgentQueryKeys, GroupQueryKeys, RoleQueryKeys, deleteAgent, getAgent, getAgentGroups, getAgentRoles, toManagementErrorMessage } from "@thunderid/browser";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
 
10
10
  //#region src/components/admin/AgentDetails/AgentDetails.tsx
@@ -17,20 +17,59 @@ import { jsx } from "react/jsx-runtime";
17
17
  * <AgentDetails agentId={agentId} deletable onDeleted={() => navigate('/agents')} />
18
18
  * ```
19
19
  */
20
- const AgentDetails = ({ agentId, deletable = false, onDeleted, preferences,...rest }) => {
20
+ const AgentDetails = ({ agentId, deletable = false, lifecycleActions = false, onDeleted, preferences,...rest }) => {
21
21
  const { t } = useTranslation_default(preferences?.i18n);
22
- const agent = useGetAgent_default(agentId);
23
- const groups = useGetAgentGroups_default(agentId, { limit: 100 });
24
- const roles = useGetAgentRoles_default(agentId, { limit: 100 });
25
- const deletion = useDeleteAgent_default({ onSuccess: onDeleted });
22
+ const endpoint = useManagementEndpoint_default("agents");
23
+ const agent = useResourceQuery_default([AgentQueryKeys.AGENT, agentId], (fetcher) => getAgent({
24
+ ...endpoint,
25
+ agentId,
26
+ fetcher
27
+ }), { enabled: Boolean(agentId) });
28
+ const groups = useResourceQuery_default([
29
+ GroupQueryKeys.MEMBERSHIPS,
30
+ "agent",
31
+ agentId,
32
+ { limit: 100 }
33
+ ], (fetcher) => getAgentGroups({
34
+ ...endpoint,
35
+ agentId,
36
+ fetcher,
37
+ limit: 100
38
+ }), { enabled: Boolean(agentId) });
39
+ const roles = useResourceQuery_default([
40
+ RoleQueryKeys.ROLE_ASSIGNMENTS,
41
+ "agent",
42
+ agentId,
43
+ { limit: 100 }
44
+ ], (fetcher) => getAgentRoles({
45
+ ...endpoint,
46
+ agentId,
47
+ fetcher,
48
+ limit: 100
49
+ }), { enabled: Boolean(agentId) });
50
+ const deletion = useResourceMutation_default((id, fetcher) => deleteAgent({
51
+ ...endpoint,
52
+ agentId: id,
53
+ fetcher
54
+ }), () => [[AgentQueryKeys.AGENTS]], { onSuccess: onDeleted });
55
+ const lifecycle = useAccountLifecycle_default({
56
+ enabled: lifecycleActions,
57
+ invalidatedKeys: [[AgentQueryKeys.AGENT, agentId], [AgentQueryKeys.AGENTS]],
58
+ kind: "agent",
59
+ status: agent.data?.status?.value,
60
+ subject: agentId
61
+ });
26
62
  return /* @__PURE__ */ jsx(BaseAgentDetails_default, {
27
63
  agent: agent.data,
28
64
  groups: groups.data?.groups,
29
65
  roles: roles.data?.roles,
30
66
  isLoading: agent.isLoading,
31
- error: toManagementErrorMessage(t, agent.error, "admin.agents.details.error") ?? toManagementErrorMessage(t, deletion.error, "admin.agents.details.delete.error"),
67
+ error: toManagementErrorMessage(t, agent.error, "admin.agents.details.error") ?? toManagementErrorMessage(t, deletion.error, "admin.agents.details.delete.error") ?? toManagementErrorMessage(t, lifecycle.error, "admin.common.lifecycle.error") ?? toManagementErrorMessage(t, lifecycle.loadError, "admin.common.lifecycle.load_error"),
32
68
  isDeleting: deletion.isLoading,
33
69
  onDelete: deletable ? () => void deletion.mutate(agentId) : void 0,
70
+ lifecycleActions: lifecycle.actions,
71
+ isRunningLifecycleAction: lifecycle.isRunning,
72
+ onLifecycleAction: lifecycleActions ? lifecycle.run : void 0,
34
73
  preferences,
35
74
  ...rest
36
75
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AgentDetails.js","names":["AgentDetails: FC<AgentDetailsProps>","useTranslation","useGetAgent","useGetAgentGroups","useGetAgentRoles","useDeleteAgent","BaseAgentDetails"],"sources":["../../../../src/components/admin/AgentDetails/AgentDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseAgentDetails, {BaseAgentDetailsProps} from './BaseAgentDetails';\nimport useDeleteAgent from '../../../hooks/management/agents/useDeleteAgent';\nimport useGetAgent from '../../../hooks/management/agents/useGetAgent';\nimport useGetAgentGroups from '../../../hooks/management/agents/useGetAgentGroups';\nimport useGetAgentRoles from '../../../hooks/management/agents/useGetAgentRoles';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type AgentDetailsProps = Omit<\n BaseAgentDetailsProps,\n 'agent' | 'error' | 'groups' | 'isDeleting' | 'isLoading' | 'onDelete' | 'roles'\n> & {\n agentId: string;\n /**\n * Whether the agent can be deleted from this view.\n * @default false\n */\n deletable?: boolean;\n /**\n * Called after the agent has been deleted.\n */\n onDeleted?: () => void;\n};\n\n/**\n * Shows an agent with the groups and roles it holds, and optionally lets the signed-in user delete\n * it.\n *\n * @example\n * ```tsx\n * <AgentDetails agentId={agentId} deletable onDeleted={() => navigate('/agents')} />\n * ```\n */\nconst AgentDetails: FC<AgentDetailsProps> = ({\n agentId,\n deletable = false,\n onDeleted,\n preferences,\n ...rest\n}: AgentDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const agent = useGetAgent(agentId);\n const groups = useGetAgentGroups(agentId, {limit: 100});\n const roles = useGetAgentRoles(agentId, {limit: 100});\n const deletion = useDeleteAgent({onSuccess: onDeleted});\n\n return (\n <BaseAgentDetails\n agent={agent.data}\n groups={groups.data?.groups}\n roles={roles.data?.roles}\n isLoading={agent.isLoading}\n error={\n toManagementErrorMessage(t, agent.error, 'admin.agents.details.error') ??\n toManagementErrorMessage(t, deletion.error, 'admin.agents.details.delete.error')\n }\n isDeleting={deletion.isLoading}\n onDelete={deletable ? (): void => void deletion.mutate(agentId) : undefined}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default AgentDetails;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqCA,MAAMA,gBAAuC,EAC3C,SACA,YAAY,OACZ,WACA,YACA,GAAG,WACkC;CACrC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,QAAQC,oBAAY,QAAQ;CAClC,MAAM,SAASC,0BAAkB,SAAS,EAAC,OAAO,KAAI,CAAC;CACvD,MAAM,QAAQC,yBAAiB,SAAS,EAAC,OAAO,KAAI,CAAC;CACrD,MAAM,WAAWC,uBAAe,EAAC,WAAW,WAAU,CAAC;AAEvD,QACE,oBAACC;EACC,OAAO,MAAM;EACb,QAAQ,OAAO,MAAM;EACrB,OAAO,MAAM,MAAM;EACnB,WAAW,MAAM;EACjB,OACE,yBAAyB,GAAG,MAAM,OAAO,6BAA6B,IACtE,yBAAyB,GAAG,SAAS,OAAO,oCAAoC;EAElF,YAAY,SAAS;EACrB,UAAU,kBAAwB,KAAK,SAAS,OAAO,QAAQ,GAAG;EACrD;EACb,GAAI;GACJ;;AAIN,2BAAe"}
1
+ {"version":3,"file":"AgentDetails.js","names":["AgentDetails: FC<AgentDetailsProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","agent: ResourceQueryResult<Agent>","useResourceQuery","groups: ResourceQueryResult<MembershipGroupListResponse>","roles: ResourceQueryResult<AgentRoleListResponse>","deletion: ResourceMutationResult<void, string>","useResourceMutation","lifecycle: AccountLifecycleState","useAccountLifecycle","BaseAgentDetails"],"sources":["../../../../src/components/admin/AgentDetails/AgentDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Agent,\n AgentQueryKeys,\n AgentRoleListResponse,\n GroupQueryKeys,\n MembershipGroupListResponse,\n RoleQueryKeys,\n deleteAgent,\n getAgent,\n getAgentGroups,\n getAgentRoles,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseAgentDetails, {BaseAgentDetailsProps} from './BaseAgentDetails';\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\nexport type AgentDetailsProps = Omit<\n BaseAgentDetailsProps,\n | 'agent'\n | 'error'\n | 'groups'\n | 'isDeleting'\n | 'isLoading'\n | 'isRunningLifecycleAction'\n | 'lifecycleActions'\n | 'onDelete'\n | 'onLifecycleAction'\n | 'roles'\n> & {\n agentId: string;\n /**\n * Whether the agent can be deleted from this view.\n * @default false\n */\n deletable?: boolean;\n /**\n * Whether the agent can be suspended, unsuspended and unlocked from this view. Each action runs through its\n * administration flow and is offered only when the server configures that flow. Reading the configured\n * flows needs a token that may read the server configuration.\n * @default false\n */\n lifecycleActions?: boolean;\n /**\n * Called after the agent has been deleted.\n */\n onDeleted?: () => void;\n};\n\n/**\n * Shows an agent with the groups and roles it holds, and optionally lets the signed-in user delete\n * it.\n *\n * @example\n * ```tsx\n * <AgentDetails agentId={agentId} deletable onDeleted={() => navigate('/agents')} />\n * ```\n */\nconst AgentDetails: FC<AgentDetailsProps> = ({\n agentId,\n deletable = false,\n lifecycleActions = false,\n onDeleted,\n preferences,\n ...rest\n}: AgentDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const endpoint: ManagementEndpoint = useManagementEndpoint('agents');\n const agent: ResourceQueryResult<Agent> = useResourceQuery(\n [AgentQueryKeys.AGENT, agentId],\n (fetcher) => getAgent({...endpoint, agentId, fetcher}),\n {enabled: Boolean(agentId)},\n );\n const groups: ResourceQueryResult<MembershipGroupListResponse> = useResourceQuery(\n [GroupQueryKeys.MEMBERSHIPS, 'agent', agentId, {limit: 100}],\n (fetcher) => getAgentGroups({...endpoint, agentId, fetcher, limit: 100}),\n {enabled: Boolean(agentId)},\n );\n const roles: ResourceQueryResult<AgentRoleListResponse> = useResourceQuery(\n [RoleQueryKeys.ROLE_ASSIGNMENTS, 'agent', agentId, {limit: 100}],\n (fetcher) => getAgentRoles({...endpoint, agentId, fetcher, limit: 100}),\n {enabled: Boolean(agentId)},\n );\n const deletion: ResourceMutationResult<void, string> = useResourceMutation(\n (id: string, fetcher) => deleteAgent({...endpoint, agentId: id, fetcher}),\n () => [[AgentQueryKeys.AGENTS]],\n {onSuccess: onDeleted},\n );\n\n const lifecycle: AccountLifecycleState = useAccountLifecycle({\n enabled: lifecycleActions,\n invalidatedKeys: [[AgentQueryKeys.AGENT, agentId], [AgentQueryKeys.AGENTS]],\n kind: 'agent',\n status: agent.data?.status?.value,\n subject: agentId,\n });\n\n return (\n <BaseAgentDetails\n agent={agent.data}\n groups={groups.data?.groups}\n roles={roles.data?.roles}\n isLoading={agent.isLoading}\n error={\n toManagementErrorMessage(t, agent.error, 'admin.agents.details.error') ??\n toManagementErrorMessage(t, deletion.error, 'admin.agents.details.delete.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(agentId) : undefined}\n lifecycleActions={lifecycle.actions}\n isRunningLifecycleAction={lifecycle.isRunning}\n onLifecycleAction={lifecycleActions ? lifecycle.run : undefined}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default AgentDetails;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiEA,MAAMA,gBAAuC,EAC3C,SACA,YAAY,OACZ,mBAAmB,OACnB,WACA,YACA,GAAG,WACkC;CACrC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,WAA+BC,8BAAsB,SAAS;CACpE,MAAMC,QAAoCC,yBACxC,CAAC,eAAe,OAAO,QAAQ,GAC9B,YAAY,SAAS;EAAC,GAAG;EAAU;EAAS;EAAQ,CAAC,EACtD,EAAC,SAAS,QAAQ,QAAQ,EAAC,CAC5B;CACD,MAAMC,SAA2DD,yBAC/D;EAAC,eAAe;EAAa;EAAS;EAAS,EAAC,OAAO,KAAI;EAAC,GAC3D,YAAY,eAAe;EAAC,GAAG;EAAU;EAAS;EAAS,OAAO;EAAI,CAAC,EACxE,EAAC,SAAS,QAAQ,QAAQ,EAAC,CAC5B;CACD,MAAME,QAAoDF,yBACxD;EAAC,cAAc;EAAkB;EAAS;EAAS,EAAC,OAAO,KAAI;EAAC,GAC/D,YAAY,cAAc;EAAC,GAAG;EAAU;EAAS;EAAS,OAAO;EAAI,CAAC,EACvE,EAAC,SAAS,QAAQ,QAAQ,EAAC,CAC5B;CACD,MAAMG,WAAiDC,6BACpD,IAAY,YAAY,YAAY;EAAC,GAAG;EAAU,SAAS;EAAI;EAAQ,CAAC,QACnE,CAAC,CAAC,eAAe,OAAO,CAAC,EAC/B,EAAC,WAAW,WAAU,CACvB;CAED,MAAMC,YAAmCC,4BAAoB;EAC3D,SAAS;EACT,iBAAiB,CAAC,CAAC,eAAe,OAAO,QAAQ,EAAE,CAAC,eAAe,OAAO,CAAC;EAC3E,MAAM;EACN,QAAQ,MAAM,MAAM,QAAQ;EAC5B,SAAS;EACV,CAAC;AAEF,QACE,oBAACC;EACC,OAAO,MAAM;EACb,QAAQ,OAAO,MAAM;EACrB,OAAO,MAAM,MAAM;EACnB,WAAW,MAAM;EACjB,OACE,yBAAyB,GAAG,MAAM,OAAO,6BAA6B,IACtE,yBAAyB,GAAG,SAAS,OAAO,oCAAoC,IAChF,yBAAyB,GAAG,UAAU,OAAO,+BAA+B,IAC5E,yBAAyB,GAAG,UAAU,WAAW,oCAAoC;EAEvF,YAAY,SAAS;EACrB,UAAU,kBAAwB,KAAK,SAAS,OAAO,QAAQ,GAAG;EAClE,kBAAkB,UAAU;EAC5B,0BAA0B,UAAU;EACpC,mBAAmB,mBAAmB,UAAU,MAAM;EACzC;EACb,GAAI;GACJ;;AAIN,2BAAe"}
@@ -1,4 +1,4 @@
1
- import { Agent, MembershipGroup, Preferences } from '@thunderid/browser';
1
+ import { AccountLifecycleAction, Agent, MembershipGroup, Preferences } from '@thunderid/browser';
2
2
  import { FC, ReactNode } from 'react';
3
3
  /**
4
4
  * What {@link BaseAgentDetails} hands its `children` render function, so the agent can be shown with any UI.
@@ -9,10 +9,19 @@ export interface BaseAgentDetailsRenderProps {
9
9
  groups: MembershipGroup[];
10
10
  isDeleting: boolean;
11
11
  isLoading: boolean;
12
+ isRunningLifecycleAction: boolean;
13
+ /**
14
+ * The account lifecycle actions offered for the agent. Empty when none is allowed.
15
+ */
16
+ lifecycleActions: AccountLifecycleAction[];
12
17
  /**
13
18
  * Deletes the agent. Undefined when deletion is not allowed, including for read-only agents.
14
19
  */
15
20
  onDelete?: () => void;
21
+ /**
22
+ * Runs an account lifecycle action, with the operator's note on a suspension. Undefined when none is allowed.
23
+ */
24
+ onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;
16
25
  roles: string[];
17
26
  }
18
27
  export interface BaseAgentDetailsProps {
@@ -34,10 +43,21 @@ export interface BaseAgentDetailsProps {
34
43
  groups?: MembershipGroup[];
35
44
  isDeleting?: boolean;
36
45
  isLoading?: boolean;
46
+ isRunningLifecycleAction?: boolean;
47
+ /**
48
+ * The account lifecycle actions to offer (suspend, unsuspend, unlock), shown only with `onLifecycleAction`. They change
49
+ * only runtime state, so they apply to read-only agents too.
50
+ */
51
+ lifecycleActions?: AccountLifecycleAction[];
37
52
  /**
38
53
  * Deletes the agent. The delete action is hidden when omitted.
39
54
  */
40
55
  onDelete?: () => void;
56
+ /**
57
+ * Runs an account lifecycle action. Suspending and unsuspending ask for confirmation first, and a
58
+ * suspension takes an optional operator note.
59
+ */
60
+ onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;
41
61
  preferences?: Preferences;
42
62
  /**
43
63
  * The names of the roles the agent holds, directly or through its groups.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAgentDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/AgentDetails/BaseAgentDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAC,MAAM,OAAO,CAAC;AASlD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,SAAS,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA4G/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"BaseAgentDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/AgentDetails/BaseAgentDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAC,MAAM,OAAO,CAAC;AAUlD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,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;;OAEG;IACH,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,SAAS,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;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,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA+H/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -4,6 +4,7 @@ import Alert_default from "../../primitives/Alert/Alert.js";
4
4
  import CopyableText_default from "../../primitives/CopyableText/CopyableText.js";
5
5
  import useAdminPartStyles_default from "../shared/useAdminPartStyles.js";
6
6
  import AdminSection_default from "../shared/AdminSection.js";
7
+ import { AccessStatusBadge, AccountLifecycleButtons } from "../shared/AccountLifecycleParts.js";
7
8
  import { ChipList, ConfirmButton, DetailList, Panel } from "../shared/AdminParts.js";
8
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
10
 
@@ -12,7 +13,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
13
  * Shows an agent's type, owner, client and the groups and roles it holds. Holds no data of its own:
13
14
  * pass the agent and handle deletion.
14
15
  */
15
- const BaseAgentDetails = ({ actions, agent, children, className, error = null, groups = [], isDeleting = false, isLoading = false, onDelete, preferences, roles = [] }) => {
16
+ const BaseAgentDetails = ({ actions, agent, children, className, error = null, groups = [], isDeleting = false, isLoading = false, isRunningLifecycleAction = false, lifecycleActions = [], onDelete, onLifecycleAction, preferences, roles = [] }) => {
16
17
  const { t } = useTranslation_default(preferences?.i18n);
17
18
  const styles = useAdminPartStyles_default();
18
19
  if (children) return /* @__PURE__ */ jsx("div", {
@@ -23,7 +24,10 @@ const BaseAgentDetails = ({ actions, agent, children, className, error = null, g
23
24
  groups,
24
25
  isDeleting,
25
26
  isLoading,
27
+ isRunningLifecycleAction,
28
+ lifecycleActions: onLifecycleAction && agent ? lifecycleActions : [],
26
29
  onDelete: agent && !agent.isReadOnly ? onDelete : void 0,
30
+ onLifecycleAction: agent ? onLifecycleAction : void 0,
27
31
  roles
28
32
  })
29
33
  });
@@ -65,6 +69,10 @@ const BaseAgentDetails = ({ actions, agent, children, className, error = null, g
65
69
  value: agent.ouHandle ?? agent.ouId
66
70
  }
67
71
  ];
72
+ if (agent.status) details.push({
73
+ label: t("admin.common.columns.status"),
74
+ value: /* @__PURE__ */ jsx(AccessStatusBadge, { status: agent.status.value })
75
+ });
68
76
  if (agent.clientId) details.push({
69
77
  label: t("admin.agents.list.columns.client_id"),
70
78
  value: /* @__PURE__ */ jsx(CopyableText_default, { value: agent.clientId })
@@ -75,12 +83,22 @@ const BaseAgentDetails = ({ actions, agent, children, className, error = null, g
75
83
  title: agent.name,
76
84
  description: agent.description,
77
85
  preferences,
78
- actions: /* @__PURE__ */ jsxs(Fragment, { children: [actions, onDelete && !agent.isReadOnly && /* @__PURE__ */ jsx(ConfirmButton, {
79
- confirmText: t("admin.agents.details.delete.confirm", { name: agent.name }),
80
- isLoading: isDeleting,
81
- onConfirm: onDelete,
82
- children: t("admin.agents.details.delete.action")
83
- })] }),
86
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [
87
+ actions,
88
+ onLifecycleAction && /* @__PURE__ */ jsx(AccountLifecycleButtons, {
89
+ actions: lifecycleActions,
90
+ collectsOperatorNote: true,
91
+ isRunning: isRunningLifecycleAction,
92
+ name: agent.name,
93
+ onAction: onLifecycleAction
94
+ }),
95
+ onDelete && !agent.isReadOnly && /* @__PURE__ */ jsx(ConfirmButton, {
96
+ confirmText: t("admin.agents.details.delete.confirm", { name: agent.name }),
97
+ isLoading: isDeleting,
98
+ onConfirm: onDelete,
99
+ children: t("admin.agents.details.delete.action")
100
+ })
101
+ ] }),
84
102
  children: [
85
103
  error && /* @__PURE__ */ jsx(Alert_default, {
86
104
  variant: "error",