@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,83 @@
1
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
+ const require_emotion = require('../../../styles/emotion.cjs');
3
+ let react = require("react");
4
+ react = require_rolldown_runtime.__toESM(react);
5
+
6
+ //#region src/components/auth/flow/ConsentDetailText.styles.ts
7
+ /**
8
+ * Creates styles for the ConsentDetailToggle component.
9
+ * @param theme - The theme object containing design tokens
10
+ * @param colorScheme - The current color scheme (used for memoization)
11
+ * @returns Object containing CSS class names for component styling
12
+ */
13
+ const useToggleStyles = (theme, colorScheme) => (0, react.useMemo)(() => ({ toggle: require_emotion.css({
14
+ background: "transparent",
15
+ border: "none",
16
+ borderRadius: "4px",
17
+ color: theme.vars.colors.primary.main,
18
+ cursor: "pointer",
19
+ font: "inherit",
20
+ fontSize: "0.8125rem",
21
+ padding: "2px 4px",
22
+ "&:hover": { textDecoration: "underline" },
23
+ "&:focus-visible": {
24
+ outline: `2px solid ${theme.vars.colors.primary.main}`,
25
+ outlineOffset: "1px"
26
+ }
27
+ }) }), [theme, colorScheme]);
28
+ /**
29
+ * Creates styles for the ConsentDetailText component.
30
+ * @param theme - The theme object containing design tokens
31
+ * @param colorScheme - The current color scheme (used for memoization)
32
+ * @param align - Alignment of the text
33
+ * @param monospace - Whether the text is shown as a preformatted monospace block
34
+ * @param maxLines - Number of lines the text is clamped to
35
+ * @returns Object containing CSS class names for component styling
36
+ */
37
+ const useStyles = (theme, colorScheme, align, monospace, maxLines) => (0, react.useMemo)(() => ({
38
+ clamp: require_emotion.css({
39
+ display: "-webkit-box",
40
+ overflow: "hidden",
41
+ WebkitBoxOrient: "vertical",
42
+ WebkitLineClamp: maxLines
43
+ }),
44
+ container: require_emotion.css({
45
+ alignItems: align === "right" ? "flex-end" : "flex-start",
46
+ display: "flex",
47
+ flexDirection: "column",
48
+ gap: "2px",
49
+ maxWidth: "100%",
50
+ minWidth: 0
51
+ }),
52
+ monospace: require_emotion.css({
53
+ background: theme.vars.colors.action.hover,
54
+ border: `1px solid ${theme.vars.colors.border}`,
55
+ borderRadius: "4px",
56
+ boxSizing: "border-box",
57
+ fontFamily: "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
58
+ fontSize: "0.75rem",
59
+ padding: "6px 8px",
60
+ width: "100%"
61
+ }),
62
+ text: require_emotion.css({
63
+ lineHeight: 1.45,
64
+ margin: 0,
65
+ maxWidth: "100%",
66
+ overflowWrap: "anywhere",
67
+ textAlign: align,
68
+ whiteSpace: monospace ? "pre-wrap" : "normal",
69
+ wordBreak: "normal"
70
+ })
71
+ }), [
72
+ theme,
73
+ colorScheme,
74
+ align,
75
+ monospace,
76
+ maxLines
77
+ ]);
78
+ var ConsentDetailText_styles_default = useStyles;
79
+
80
+ //#endregion
81
+ exports.default = ConsentDetailText_styles_default;
82
+ exports.useToggleStyles = useToggleStyles;
83
+ //# sourceMappingURL=ConsentDetailText.styles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsentDetailText.styles.cjs","names":["css"],"sources":["../../../../../src/components/auth/flow/ConsentDetailText.styles.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\nimport {css} from '../../../styles/emotion';\n\n/**\n * Creates styles for the ConsentDetailToggle component.\n * @param theme - The theme object containing design tokens\n * @param colorScheme - The current color scheme (used for memoization)\n * @returns Object containing CSS class names for component styling\n */\nexport const useToggleStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(\n () => ({\n toggle: css({\n background: 'transparent',\n border: 'none',\n borderRadius: '4px',\n color: theme.vars.colors.primary.main,\n cursor: 'pointer',\n font: 'inherit',\n fontSize: '0.8125rem',\n padding: '2px 4px',\n '&:hover': {textDecoration: 'underline'},\n '&:focus-visible': {outline: `2px solid ${theme.vars.colors.primary.main}`, outlineOffset: '1px'},\n }),\n }),\n [theme, colorScheme],\n );\n\n/**\n * Creates styles for the ConsentDetailText component.\n * @param theme - The theme object containing design tokens\n * @param colorScheme - The current color scheme (used for memoization)\n * @param align - Alignment of the text\n * @param monospace - Whether the text is shown as a preformatted monospace block\n * @param maxLines - Number of lines the text is clamped to\n * @returns Object containing CSS class names for component styling\n */\nconst useStyles = (\n theme: Theme,\n colorScheme: string,\n align: 'left' | 'right',\n monospace: boolean,\n maxLines: number,\n): Record<string, string> =>\n useMemo(\n () => ({\n clamp: css({\n display: '-webkit-box',\n overflow: 'hidden',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: maxLines,\n }),\n container: css({\n alignItems: align === 'right' ? 'flex-end' : 'flex-start',\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n maxWidth: '100%',\n minWidth: 0,\n }),\n monospace: css({\n background: theme.vars.colors.action.hover,\n border: `1px solid ${theme.vars.colors.border}`,\n borderRadius: '4px',\n boxSizing: 'border-box',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: '0.75rem',\n padding: '6px 8px',\n width: '100%',\n }),\n text: css({\n lineHeight: 1.45,\n margin: 0,\n maxWidth: '100%',\n overflowWrap: 'anywhere',\n textAlign: align,\n whiteSpace: monospace ? 'pre-wrap' : 'normal',\n wordBreak: 'normal',\n }),\n }),\n [theme, colorScheme, align, monospace, maxLines],\n );\n\nexport default useStyles;\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,mBAAmB,OAAc,0CAEnC,EACL,QAAQA,oBAAI;CACV,YAAY;CACZ,QAAQ;CACR,cAAc;CACd,OAAO,MAAM,KAAK,OAAO,QAAQ;CACjC,QAAQ;CACR,MAAM;CACN,UAAU;CACV,SAAS;CACT,WAAW,EAAC,gBAAgB,aAAY;CACxC,mBAAmB;EAAC,SAAS,aAAa,MAAM,KAAK,OAAO,QAAQ;EAAQ,eAAe;EAAM;CAClG,CAAC,EACH,GACD,CAAC,OAAO,YAAY,CACrB;;;;;;;;;;AAWH,MAAM,aACJ,OACA,aACA,OACA,WACA,uCAGS;CACL,OAAOA,oBAAI;EACT,SAAS;EACT,UAAU;EACV,iBAAiB;EACjB,iBAAiB;EAClB,CAAC;CACF,WAAWA,oBAAI;EACb,YAAY,UAAU,UAAU,aAAa;EAC7C,SAAS;EACT,eAAe;EACf,KAAK;EACL,UAAU;EACV,UAAU;EACX,CAAC;CACF,WAAWA,oBAAI;EACb,YAAY,MAAM,KAAK,OAAO,OAAO;EACrC,QAAQ,aAAa,MAAM,KAAK,OAAO;EACvC,cAAc;EACd,WAAW;EACX,YAAY;EACZ,UAAU;EACV,SAAS;EACT,OAAO;EACR,CAAC;CACF,MAAMA,oBAAI;EACR,YAAY;EACZ,QAAQ;EACR,UAAU;EACV,cAAc;EACd,WAAW;EACX,YAAY,YAAY,aAAa;EACrC,WAAW;EACZ,CAAC;CACH,GACD;CAAC;CAAO;CAAa;CAAO;CAAW;CAAS,CACjD;AAEH,uCAAe"}
@@ -1,8 +1,8 @@
1
1
  const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
+ const require_TextField = require('../../primitives/TextField/TextField.cjs');
2
3
  const require_Checkbox = require('../../primitives/Checkbox/Checkbox.cjs');
3
4
  const require_DatePicker = require('../../primitives/DatePicker/DatePicker.cjs');
4
5
  const require_OtpField = require('../../primitives/OtpField/OtpField.cjs');
5
- const require_TextField = require('../../primitives/TextField/TextField.cjs');
6
6
  const require_PasswordField = require('../../primitives/PasswordField/PasswordField.cjs');
7
7
  const require_Select = require('../../primitives/Select/Select.cjs');
8
8
  let __thunderid_browser = require("@thunderid/browser");
@@ -0,0 +1,25 @@
1
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
+ let __thunderid_browser = require("@thunderid/browser");
3
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
4
+
5
+ //#region src/components/auth/flow/resolveConsentText.ts
6
+ /**
7
+ * Resolves a consent screen string through the given translator, falling back to the SDK's default
8
+ * bundle when there is no translator or it has no entry for the key.
9
+ *
10
+ * @param t - Translator, when the screen has one.
11
+ * @param key - Translation key.
12
+ * @param params - Values to substitute into the text.
13
+ * @returns The resolved text.
14
+ */
15
+ const resolveConsentText = (t, key, params) => {
16
+ const translated = t?.(key, params);
17
+ if (translated && translated !== key) return translated;
18
+ const fallback = (0, __thunderid_browser.getDefaultI18nBundles)()[__thunderid_browser.TranslationBundleConstants.FALLBACK_LOCALE]?.translations[key];
19
+ return (0, __thunderid_browser.substituteTranslationParams)(fallback ?? key, params);
20
+ };
21
+ var resolveConsentText_default = resolveConsentText;
22
+
23
+ //#endregion
24
+ exports.default = resolveConsentText_default;
25
+ //# sourceMappingURL=resolveConsentText.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveConsentText.cjs","names":["translated: string | undefined","fallback: string | undefined","TranslationBundleConstants"],"sources":["../../../../../src/components/auth/flow/resolveConsentText.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n getDefaultI18nBundles,\n I18nBundle,\n substituteTranslationParams,\n TranslationBundleConstants,\n} from '@thunderid/browser';\nimport {UseTranslation} from '../../../hooks/useTranslation';\n\n/**\n * Resolves a consent screen string through the given translator, falling back to the SDK's default\n * bundle when there is no translator or it has no entry for the key.\n *\n * @param t - Translator, when the screen has one.\n * @param key - Translation key.\n * @param params - Values to substitute into the text.\n * @returns The resolved text.\n */\nconst resolveConsentText = (\n t: UseTranslation['t'] | undefined,\n key: string,\n params?: Record<string, string | number>,\n): string => {\n const translated: string | undefined = t?.(key, params);\n if (translated && translated !== key) {\n return translated;\n }\n const bundle: I18nBundle | undefined = getDefaultI18nBundles()[TranslationBundleConstants.FALLBACK_LOCALE];\n const fallback: string | undefined = bundle?.translations[key as keyof I18nBundle['translations']];\n\n return substituteTranslationParams(fallback ?? key, params);\n};\n\nexport default resolveConsentText;\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,sBACJ,GACA,KACA,WACW;CACX,MAAMA,aAAiC,IAAI,KAAK,OAAO;AACvD,KAAI,cAAc,eAAe,IAC/B,QAAO;CAGT,MAAMC,2DADwD,CAACC,+CAA2B,kBAC7C,aAAa;AAE1D,6DAAmC,YAAY,KAAK,OAAO;;AAG7D,iCAAe"}
@@ -1,9 +1,9 @@
1
1
  const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
2
  const require_emotion = require('../../../styles/emotion.cjs');
3
3
  const require_useTheme = require('../../../contexts/Theme/useTheme.cjs');
4
+ const require_TextField = require('../TextField/TextField.cjs');
4
5
  const require_Plus = require('../Icons/Plus.cjs');
5
6
  const require_X = require('../Icons/X.cjs');
6
- const require_TextField = require('../TextField/TextField.cjs');
7
7
  const require_KeyValueInput_styles = require('./KeyValueInput.styles.cjs');
8
8
  let __thunderid_browser = require("@thunderid/browser");
9
9
  __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
@@ -3,9 +3,9 @@ const require_emotion = require('../../../styles/emotion.cjs');
3
3
  const require_useTheme = require('../../../contexts/Theme/useTheme.cjs');
4
4
  const require_FormControl = require('../FormControl/FormControl.cjs');
5
5
  const require_InputLabel = require('../InputLabel/InputLabel.cjs');
6
+ const require_TextField = require('../TextField/TextField.cjs');
6
7
  const require_Checkbox = require('../Checkbox/Checkbox.cjs');
7
8
  const require_DatePicker = require('../DatePicker/DatePicker.cjs');
8
- const require_TextField = require('../TextField/TextField.cjs');
9
9
  const require_MultiInput_styles = require('./MultiInput.styles.cjs');
10
10
  let __thunderid_browser = require("@thunderid/browser");
11
11
  __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
@@ -1,10 +1,10 @@
1
1
  const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
2
  const require_emotion = require('../../../styles/emotion.cjs');
3
3
  const require_useTheme = require('../../../contexts/Theme/useTheme.cjs');
4
+ const require_TextField = require('../TextField/TextField.cjs');
4
5
  const require_Eye = require('../Icons/Eye.cjs');
5
6
  const require_EyeOff = require('../Icons/EyeOff.cjs');
6
7
  const require_PasswordField_styles = require('./PasswordField.styles.cjs');
7
- const require_TextField = require('../TextField/TextField.cjs');
8
8
  let __thunderid_browser = require("@thunderid/browser");
9
9
  __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
10
10
  let react = require("react");
@@ -0,0 +1,357 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_resolveConsentText = require('../../components/auth/flow/resolveConsentText.cjs');
3
+ const require_getConsentDetailListDisplay = require('../../utils/getConsentDetailListDisplay.cjs');
4
+ const require_isConsentDetailPlainList = require('../../utils/isConsentDetailPlainList.cjs');
5
+ let __thunderid_browser = require("@thunderid/browser");
6
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
7
+ let react = require("react");
8
+ react = require_rolldown_runtime.__toESM(react);
9
+
10
+ //#region src/hooks/auth/useConsentDetailField.ts
11
+ const DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
12
+ /**
13
+ * Reports whether a value the user entered for an authorization detail field stays within the value
14
+ * that was shown, in the direction the field may move.
15
+ *
16
+ * @param modification - `decrease` or `increase`.
17
+ * @param candidate - Value the user entered.
18
+ * @param shown - Value that was shown.
19
+ * @returns Whether the candidate is allowed.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * isWithinConsentBound('decrease', 20, 35) // returns true
24
+ * isWithinConsentBound('decrease', 40, 35) // returns false
25
+ * ```
26
+ */
27
+ const isWithinConsentBound = (modification, candidate, shown) => modification === "decrease" ? candidate <= shown : candidate >= shown;
28
+ /**
29
+ * Checks the text a user entered for an authorization detail field that may be decreased or increased: a
30
+ * number, or a date in `YYYY-MM-DD` form. The text must be a value of the field's kind and stay within the
31
+ * value that was shown, in the direction the field may move.
32
+ *
33
+ * @param row - The field, carrying the shown value and its modification.
34
+ * @param text - The text the user entered.
35
+ * @returns The error to show, or `undefined` when the text may be submitted.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * getConsentDetailInputError({label: 'Amount', modification: 'decrease', path: 'amount', value: 35}, '50')
40
+ * // returns {key: 'consent.authorization_details.number_max', params: {value: '35'}}
41
+ * ```
42
+ */
43
+ const getConsentDetailInputError = (row, text) => {
44
+ const modification = row.modification ?? "";
45
+ const params = { value: String(row.value) };
46
+ if (typeof row.value === "number") {
47
+ const entered = Number(text);
48
+ if (text.trim() === "" || !Number.isFinite(entered)) return {
49
+ key: "consent.authorization_details.invalid_number",
50
+ params
51
+ };
52
+ if (!isWithinConsentBound(modification, entered, row.value)) return {
53
+ key: modification === "decrease" ? "consent.authorization_details.number_max" : "consent.authorization_details.number_min",
54
+ params
55
+ };
56
+ return;
57
+ }
58
+ if (!DATE_PATTERN.test(text) || Number.isNaN(Date.parse(text))) return {
59
+ key: "consent.authorization_details.invalid_date",
60
+ params
61
+ };
62
+ if (!isWithinConsentBound(modification, text, String(row.value))) return {
63
+ key: modification === "decrease" ? "consent.authorization_details.date_max" : "consent.authorization_details.date_min",
64
+ params
65
+ };
66
+ };
67
+ /**
68
+ * Tells how the user may change one field of an authorization detail on the consent screen. A number may
69
+ * be lowered or raised, a date in `YYYY-MM-DD` form moved earlier or later, and items of a plain list
70
+ * removed (when it has more than one) or added. A date and time is never changed by the user.
71
+ *
72
+ * @param row - The field.
73
+ * @returns The kind of input the field takes, or `undefined` when the field is read-only.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * getConsentDetailInputKind({label: 'Amount', modification: 'decrease', path: 'amount', value: 35}) // returns 'number'
78
+ * ```
79
+ */
80
+ const getConsentDetailInputKind = (row) => {
81
+ const isOrdered = row.modification === "decrease" || row.modification === "increase";
82
+ if (isOrdered && typeof row.value === "number") return "number";
83
+ if (isOrdered && row.as === "date" && typeof row.value === "string" && DATE_PATTERN.test(row.value)) return "date";
84
+ if (row.modification === "removeItems" && require_isConsentDetailPlainList.default(row.value) && row.value.length > 1) return "removeItems";
85
+ if (row.modification === "addItems" && require_isConsentDetailPlainList.default(row.value)) return "addItems";
86
+ };
87
+ /**
88
+ * Gives the text a `number` or `date` authorization detail field shows when the user is not typing into it:
89
+ * the value the user chose, or the value that was shown when the user has not changed it.
90
+ *
91
+ * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.
92
+ * @param detailId - The identifier of the authorization detail, its consent element name.
93
+ * @param row - The field.
94
+ * @param formValues - Form values, holding the JSON text of each changed field under its modified key.
95
+ * @returns The text to show.
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * getConsentDetailInputText('p1', 'd-1', amountRow, {'__consent_modified__p1__d-1__amount': '20'}) // returns '20'
100
+ * ```
101
+ */
102
+ const getConsentDetailInputText = (purposeId, detailId, row, formValues) => {
103
+ const raw = formValues[(0, __thunderid_browser.getConsentModifiedKey)(purposeId, detailId, row.path)];
104
+ if (typeof raw === "string" && raw !== "") try {
105
+ const value = JSON.parse(raw);
106
+ if (typeof value === "number" || typeof value === "string") return String(value);
107
+ } catch {}
108
+ return String(row.value);
109
+ };
110
+ /**
111
+ * Turns the text a user entered into a `number` or `date` authorization detail field into the form values
112
+ * to write. Text within the field's bound becomes the field's modified value. Any other text clears the
113
+ * modified value, so a value entered earlier is never submitted in its place, and marks the field invalid,
114
+ * which blocks approval until the user corrects it.
115
+ *
116
+ * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.
117
+ * @param detailId - The identifier of the authorization detail, its consent element name.
118
+ * @param row - The field, carrying the shown value and its modification.
119
+ * @param text - The text the user entered.
120
+ * @returns The error, if any, and the form values to write.
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * parseConsentDetailInput('p1', 'd-1', amountRow, '20')
125
+ * // returns {isValid: true, formValues: {'__consent_modified__p1__d-1__amount': '20', '__consent_invalid__p1__d-1__amount': ''}}
126
+ * ```
127
+ */
128
+ const parseConsentDetailInput = (purposeId, detailId, row, text) => {
129
+ const modifiedKey = (0, __thunderid_browser.getConsentModifiedKey)(purposeId, detailId, row.path);
130
+ const invalidKey = (0, __thunderid_browser.getConsentInvalidKey)(purposeId, detailId, row.path);
131
+ const error = getConsentDetailInputError(row, text);
132
+ if (error) return {
133
+ error,
134
+ formValues: {
135
+ [invalidKey]: "true",
136
+ [modifiedKey]: ""
137
+ },
138
+ isValid: false
139
+ };
140
+ const value = typeof row.value === "number" ? Number(text) : text;
141
+ return {
142
+ formValues: {
143
+ [invalidKey]: "",
144
+ [modifiedKey]: JSON.stringify(value)
145
+ },
146
+ isValid: true
147
+ };
148
+ };
149
+ /**
150
+ * Gives the form values that return an authorization detail field to the value that was shown: no
151
+ * modified value and no invalid marker. A field the user left empty is reset this way when it loses focus.
152
+ *
153
+ * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.
154
+ * @param detailId - The identifier of the authorization detail, its consent element name.
155
+ * @param path - Dot-separated location of the field within the detail.
156
+ * @returns The form values to write, keyed by form key.
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * resetConsentDetailInput('p1', 'd-1', 'amount')
161
+ * // returns {'__consent_modified__p1__d-1__amount': '', '__consent_invalid__p1__d-1__amount': ''}
162
+ * ```
163
+ */
164
+ const resetConsentDetailInput = (purposeId, detailId, path) => ({
165
+ [(0, __thunderid_browser.getConsentInvalidKey)(purposeId, detailId, path)]: "",
166
+ [(0, __thunderid_browser.getConsentModifiedKey)(purposeId, detailId, path)]: ""
167
+ });
168
+ /**
169
+ * Lists the items of a `removeItems` or `addItems` authorization detail field as the consent screen offers
170
+ * them. For `removeItems`, every shown item is listed, selected while kept; a kept item can be removed
171
+ * unless it is the last one, and a removed item can be added back. For `addItems`, the shown items are
172
+ * selected and fixed, the items the user added are selected and can be taken out again, and the values the
173
+ * type allows are offered unselected.
174
+ *
175
+ * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.
176
+ * @param detailId - The identifier of the authorization detail, its consent element name.
177
+ * @param row - The list field.
178
+ * @param formValues - Form values, holding the JSON text of each changed field under its modified key.
179
+ * @returns The items, in display order.
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * getConsentDetailListItems('p1', 'd-1', {label: 'Actions', modification: 'removeItems', path: 'actions', value: ['a', 'b']}, {})
184
+ * // returns [{origin: 'shown', selected: true, toggleable: true, value: 'a'}, {origin: 'shown', selected: true, toggleable: true, value: 'b'}]
185
+ * ```
186
+ */
187
+ const getConsentDetailListItems = (purposeId, detailId, row, formValues) => {
188
+ const shown = require_isConsentDetailPlainList.default(row.value) ? row.value : [];
189
+ let current = shown;
190
+ const raw = formValues[(0, __thunderid_browser.getConsentModifiedKey)(purposeId, detailId, row.path)];
191
+ if (typeof raw === "string" && raw !== "") try {
192
+ const parsed = JSON.parse(raw);
193
+ if (require_isConsentDetailPlainList.default(parsed)) current = parsed;
194
+ } catch {}
195
+ if (row.modification === "removeItems") {
196
+ const keptCount = shown.filter((item) => current.includes(item)).length;
197
+ return shown.map((value) => {
198
+ const selected = current.includes(value);
199
+ return {
200
+ origin: "shown",
201
+ selected,
202
+ toggleable: !selected || keptCount > 1,
203
+ value
204
+ };
205
+ });
206
+ }
207
+ const added = current.filter((item) => !shown.includes(item));
208
+ const offered = (require_isConsentDetailPlainList.default(row.options) ? row.options : []).filter((option) => !shown.includes(option) && !added.includes(option));
209
+ return [
210
+ ...shown.map((value) => ({
211
+ origin: "shown",
212
+ selected: true,
213
+ toggleable: false,
214
+ value
215
+ })),
216
+ ...added.map((value) => ({
217
+ origin: "added",
218
+ selected: true,
219
+ toggleable: true,
220
+ value
221
+ })),
222
+ ...offered.map((value) => ({
223
+ origin: "offered",
224
+ selected: false,
225
+ toggleable: true,
226
+ value
227
+ }))
228
+ ];
229
+ };
230
+ /**
231
+ * Toggles one item of a `removeItems` or `addItems` authorization detail field: a selected item is taken
232
+ * out and an unselected one put in, within what the field's rule allows.
233
+ *
234
+ * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.
235
+ * @param detailId - The identifier of the authorization detail, its consent element name.
236
+ * @param row - The list field.
237
+ * @param formValues - Form values, holding the JSON text of each changed field under its modified key.
238
+ * @param item - The item to toggle.
239
+ * @returns The form values to write, keyed by form key, or `undefined` when the item cannot be toggled.
240
+ *
241
+ * @example
242
+ * ```typescript
243
+ * toggleConsentDetailListItem('p1', 'd-1', actionsRow, {}, 'status') // returns {'__consent_modified__p1__d-1__actions': '["initiate"]'}
244
+ * ```
245
+ */
246
+ const toggleConsentDetailListItem = (purposeId, detailId, row, formValues, item) => {
247
+ const items = getConsentDetailListItems(purposeId, detailId, row, formValues);
248
+ const target = items.find((entry) => entry.value === item);
249
+ if (!target?.toggleable) return void 0;
250
+ const next = items.filter((entry) => entry === target ? !entry.selected : entry.selected).map((entry) => entry.value);
251
+ return { [(0, __thunderid_browser.getConsentModifiedKey)(purposeId, detailId, row.path)]: JSON.stringify(next) };
252
+ };
253
+ /**
254
+ * Adds a typed value to an `addItems` authorization detail field whose type allows any value. The text is
255
+ * trimmed, and read as a number when every shown item is a number.
256
+ *
257
+ * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.
258
+ * @param detailId - The identifier of the authorization detail, its consent element name.
259
+ * @param row - The list field.
260
+ * @param formValues - Form values, holding the JSON text of each changed field under its modified key.
261
+ * @param text - The text the user typed.
262
+ * @returns The form values to write, keyed by form key, or `undefined` when the text is empty, not a
263
+ * number where one is needed, already listed, or the field does not take typed values.
264
+ *
265
+ * @example
266
+ * ```typescript
267
+ * addConsentDetailListItem('p1', 'd-1', blockedRow, {}, ' y ') // returns {'__consent_modified__p1__d-1__blocked': '["x","y"]'}
268
+ * ```
269
+ */
270
+ const addConsentDetailListItem = (purposeId, detailId, row, formValues, text) => {
271
+ if (row.modification !== "addItems" || row.options !== void 0 || !Array.isArray(row.value)) return void 0;
272
+ const trimmed = text.trim();
273
+ if (!trimmed) return void 0;
274
+ const numeric = row.value.length > 0 && row.value.every((item) => typeof item === "number");
275
+ const value = numeric ? Number(trimmed) : trimmed;
276
+ const selected = getConsentDetailListItems(purposeId, detailId, row, formValues).filter((entry) => entry.selected).map((entry) => entry.value);
277
+ if (numeric && !Number.isFinite(value) || selected.includes(value)) return void 0;
278
+ return { [(0, __thunderid_browser.getConsentModifiedKey)(purposeId, detailId, row.path)]: JSON.stringify([...selected, value]) };
279
+ };
280
+ /**
281
+ * Headless state of one authorization detail field on the consent screen. A `number` or `date` field keeps
282
+ * the text the user typed, writes it to the decision only while it stays within the field's bound, and
283
+ * otherwise clears the field's modification and marks the field invalid, which blocks approval (see
284
+ * `isConsentApprovalBlocked`). A list field exposes its items and toggles them as its rule allows.
285
+ *
286
+ * @param props - The field and the consent form state.
287
+ * @returns The field's state and handlers.
288
+ *
289
+ * @example
290
+ * ```tsx
291
+ * const field = useConsentDetailField({purposeId, detailId, row, formValues, onInputChange});
292
+ * <input value={field.text} onChange={(e) => field.handleChange(e.target.value)} onBlur={field.handleBlur} />
293
+ * ```
294
+ */
295
+ const useConsentDetailField = ({ detailId, formValues, onInputChange, purposeId, row, t }) => {
296
+ const [draft, setDraft] = (0, react.useState)(void 0);
297
+ const [isListExpanded, setListExpanded] = (0, react.useState)(false);
298
+ const kind = getConsentDetailInputKind(row);
299
+ const isScalar = kind === "number" || kind === "date";
300
+ const isList = kind === "removeItems" || kind === "addItems";
301
+ const items = isList ? getConsentDetailListItems(purposeId, detailId, row, formValues) : [];
302
+ const isPlainList = require_isConsentDetailPlainList.default(row.value);
303
+ let listCount = 0;
304
+ if (isList) listCount = items.length;
305
+ else if (require_isConsentDetailPlainList.default(row.value)) listCount = row.value.length;
306
+ const find = (item) => items.find((entry) => entry.value === item);
307
+ const write = (values) => {
308
+ Object.entries(values ?? {}).forEach(([name, value]) => onInputChange(name, value));
309
+ };
310
+ const inputError = isScalar && draft !== void 0 ? getConsentDetailInputError(row, draft) : void 0;
311
+ return {
312
+ error: inputError && {
313
+ ...inputError,
314
+ message: require_resolveConsentText.default(t, inputError.key, inputError.params)
315
+ },
316
+ handleAdd: (text) => {
317
+ const values = addConsentDetailListItem(purposeId, detailId, row, formValues, text);
318
+ write(values);
319
+ if (values) setDraft(void 0);
320
+ return Boolean(values);
321
+ },
322
+ handleBlur: () => {
323
+ if (!isScalar || draft === void 0) return;
324
+ if (draft.trim() === "") {
325
+ write(resetConsentDetailInput(purposeId, detailId, row.path));
326
+ setDraft(void 0);
327
+ } else if (!getConsentDetailInputError(row, draft)) setDraft(void 0);
328
+ },
329
+ handleChange: (text) => {
330
+ setDraft(text);
331
+ if (isScalar) write(parseConsentDetailInput(purposeId, detailId, row, text).formValues);
332
+ },
333
+ handleListToggle: setListExpanded,
334
+ handleToggle: (item) => {
335
+ write(toggleConsentDetailListItem(purposeId, detailId, row, formValues, item));
336
+ },
337
+ inputId: `consent_modify_${purposeId}_${detailId}_${row.path}`,
338
+ isListExpanded,
339
+ isPlainList,
340
+ isSelected: (item) => Boolean(find(item)?.selected),
341
+ isToggleable: (item) => Boolean(find(item)?.toggleable),
342
+ isTypedItemAllowed: kind === "addItems" && row.options === void 0,
343
+ isValid: !inputError,
344
+ items,
345
+ kind,
346
+ label: row.label || row.path,
347
+ listDisplay: require_getConsentDetailListDisplay.default(listCount, isListExpanded),
348
+ max: isScalar && row.modification === "decrease" ? String(row.value) : void 0,
349
+ min: isScalar && row.modification === "increase" ? String(row.value) : void 0,
350
+ text: draft ?? (isScalar ? getConsentDetailInputText(purposeId, detailId, row, formValues) : "")
351
+ };
352
+ };
353
+ var useConsentDetailField_default = useConsentDetailField;
354
+
355
+ //#endregion
356
+ exports.default = useConsentDetailField_default;
357
+ //# sourceMappingURL=useConsentDetailField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConsentDetailField.cjs","names":["modification: string","params: Record<string, string>","isOrdered: boolean","isConsentDetailPlainList","raw: unknown","value: unknown","modifiedKey: string","invalidKey: string","error: ConsentDetailInputError | undefined","value: number | string","shown: PlainItem[]","current: PlainItem[]","parsed: unknown","keptCount: number","selected: boolean","added: PlainItem[]","offered: PlainItem[]","items: ConsentDetailListItem[]","target: ConsentDetailListItem | undefined","next: (string | number | boolean)[]","trimmed: string","numeric: boolean","value: string | number","selected: (string | number | boolean)[]","kind: ConsentDetailInputKind | undefined","isScalar: boolean","isList: boolean","isPlainList: boolean","inputError: ConsentDetailInputError | undefined","resolveConsentText","values: Record<string, string> | undefined","getConsentDetailListDisplay"],"sources":["../../../../src/hooks/auth/useConsentDetailField.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {type ConsentDetailRow, getConsentInvalidKey, getConsentModifiedKey} from '@thunderid/browser';\nimport {useState} from 'react';\nimport resolveConsentText from '../../components/auth/flow/resolveConsentText';\nimport getConsentDetailListDisplay, {type ConsentDetailListDisplay} from '../../utils/getConsentDetailListDisplay';\nimport isConsentDetailPlainList from '../../utils/isConsentDetailPlainList';\nimport {UseTranslation} from '../useTranslation';\n\n/**\n * How the user may change one field of an authorization detail on the consent screen: type a lower or\n * higher `number` or `date`, or toggle items of a list whose rule is `removeItems` or `addItems`.\n *\n * @experimental This type may change in future versions\n */\nexport type ConsentDetailInputKind = 'number' | 'date' | 'removeItems' | 'addItems';\n\n/**\n * Error shown for text a user entered into an authorization detail field, as a translation key and the\n * values to substitute into its text.\n *\n * @experimental This interface may change in future versions\n */\nexport interface ConsentDetailInputError {\n /** Translation key of the message. */\n key: string;\n /** Values to substitute into the message: `value` is the value that was shown. */\n params: Record<string, string>;\n}\n\n/**\n * Outcome of the text a user entered into a `number` or `date` authorization detail field.\n *\n * @experimental This interface may change in future versions\n */\ninterface ConsentDetailInputResult {\n /** Why the text cannot be submitted, absent when it can. */\n error?: ConsentDetailInputError;\n /**\n * Form values to write, keyed by form key: the field's modified value, cleared when the text cannot be\n * submitted, and its invalid marker.\n */\n formValues: Record<string, string>;\n /** Whether the text may be submitted. */\n isValid: boolean;\n}\n\n/**\n * One item of a list field of an authorization detail, as the consent screen offers it.\n *\n * @experimental This interface may change in future versions\n */\nexport interface ConsentDetailListItem {\n /**\n * Where the item comes from: `shown` in the requested detail, `added` by the user, or `offered` by the\n * type for the user to add.\n */\n origin: 'shown' | 'added' | 'offered';\n /** Whether the item is part of the value that would be granted. */\n selected: boolean;\n /** Whether the user may toggle the item. */\n toggleable: boolean;\n /** The item. */\n value: string | number | boolean;\n}\n\nconst DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\ntype PlainItem = string | number | boolean;\n\n/**\n * Reports whether a value the user entered for an authorization detail field stays within the value\n * that was shown, in the direction the field may move.\n *\n * @param modification - `decrease` or `increase`.\n * @param candidate - Value the user entered.\n * @param shown - Value that was shown.\n * @returns Whether the candidate is allowed.\n *\n * @example\n * ```typescript\n * isWithinConsentBound('decrease', 20, 35) // returns true\n * isWithinConsentBound('decrease', 40, 35) // returns false\n * ```\n */\nconst isWithinConsentBound = <T extends number | string>(modification: string, candidate: T, shown: T): boolean =>\n modification === 'decrease' ? candidate <= shown : candidate >= shown;\n\n/**\n * Checks the text a user entered for an authorization detail field that may be decreased or increased: a\n * number, or a date in `YYYY-MM-DD` form. The text must be a value of the field's kind and stay within the\n * value that was shown, in the direction the field may move.\n *\n * @param row - The field, carrying the shown value and its modification.\n * @param text - The text the user entered.\n * @returns The error to show, or `undefined` when the text may be submitted.\n *\n * @example\n * ```typescript\n * getConsentDetailInputError({label: 'Amount', modification: 'decrease', path: 'amount', value: 35}, '50')\n * // returns {key: 'consent.authorization_details.number_max', params: {value: '35'}}\n * ```\n */\nconst getConsentDetailInputError = (row: ConsentDetailRow, text: string): ConsentDetailInputError | undefined => {\n const modification: string = row.modification ?? '';\n const params: Record<string, string> = {value: String(row.value)};\n\n if (typeof row.value === 'number') {\n const entered = Number(text);\n if (text.trim() === '' || !Number.isFinite(entered)) {\n return {key: 'consent.authorization_details.invalid_number', params};\n }\n if (!isWithinConsentBound(modification, entered, row.value)) {\n return {\n key:\n modification === 'decrease'\n ? 'consent.authorization_details.number_max'\n : 'consent.authorization_details.number_min',\n params,\n };\n }\n\n return undefined;\n }\n\n if (!DATE_PATTERN.test(text) || Number.isNaN(Date.parse(text))) {\n return {key: 'consent.authorization_details.invalid_date', params};\n }\n if (!isWithinConsentBound(modification, text, String(row.value))) {\n return {\n key:\n modification === 'decrease'\n ? 'consent.authorization_details.date_max'\n : 'consent.authorization_details.date_min',\n params,\n };\n }\n\n return undefined;\n};\n\n/**\n * Tells how the user may change one field of an authorization detail on the consent screen. A number may\n * be lowered or raised, a date in `YYYY-MM-DD` form moved earlier or later, and items of a plain list\n * removed (when it has more than one) or added. A date and time is never changed by the user.\n *\n * @param row - The field.\n * @returns The kind of input the field takes, or `undefined` when the field is read-only.\n *\n * @example\n * ```typescript\n * getConsentDetailInputKind({label: 'Amount', modification: 'decrease', path: 'amount', value: 35}) // returns 'number'\n * ```\n */\nconst getConsentDetailInputKind = (row: ConsentDetailRow): ConsentDetailInputKind | undefined => {\n const isOrdered: boolean = row.modification === 'decrease' || row.modification === 'increase';\n\n if (isOrdered && typeof row.value === 'number') return 'number';\n if (isOrdered && row.as === 'date' && typeof row.value === 'string' && DATE_PATTERN.test(row.value)) return 'date';\n if (row.modification === 'removeItems' && isConsentDetailPlainList(row.value) && row.value.length > 1)\n return 'removeItems';\n if (row.modification === 'addItems' && isConsentDetailPlainList(row.value)) return 'addItems';\n\n return undefined;\n};\n\n/**\n * Gives the text a `number` or `date` authorization detail field shows when the user is not typing into it:\n * the value the user chose, or the value that was shown when the user has not changed it.\n *\n * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.\n * @param detailId - The identifier of the authorization detail, its consent element name.\n * @param row - The field.\n * @param formValues - Form values, holding the JSON text of each changed field under its modified key.\n * @returns The text to show.\n *\n * @example\n * ```typescript\n * getConsentDetailInputText('p1', 'd-1', amountRow, {'__consent_modified__p1__d-1__amount': '20'}) // returns '20'\n * ```\n */\nconst getConsentDetailInputText = (\n purposeId: string,\n detailId: string,\n row: ConsentDetailRow,\n formValues: Record<string, unknown>,\n): string => {\n const raw: unknown = formValues[getConsentModifiedKey(purposeId, detailId, row.path)];\n if (typeof raw === 'string' && raw !== '') {\n try {\n const value: unknown = JSON.parse(raw);\n if (typeof value === 'number' || typeof value === 'string') return String(value);\n } catch {\n // Not a value the field wrote; show the value that was shown instead.\n }\n }\n\n return String(row.value);\n};\n\n/**\n * Turns the text a user entered into a `number` or `date` authorization detail field into the form values\n * to write. Text within the field's bound becomes the field's modified value. Any other text clears the\n * modified value, so a value entered earlier is never submitted in its place, and marks the field invalid,\n * which blocks approval until the user corrects it.\n *\n * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.\n * @param detailId - The identifier of the authorization detail, its consent element name.\n * @param row - The field, carrying the shown value and its modification.\n * @param text - The text the user entered.\n * @returns The error, if any, and the form values to write.\n *\n * @example\n * ```typescript\n * parseConsentDetailInput('p1', 'd-1', amountRow, '20')\n * // returns {isValid: true, formValues: {'__consent_modified__p1__d-1__amount': '20', '__consent_invalid__p1__d-1__amount': ''}}\n * ```\n */\nconst parseConsentDetailInput = (\n purposeId: string,\n detailId: string,\n row: ConsentDetailRow,\n text: string,\n): ConsentDetailInputResult => {\n const modifiedKey: string = getConsentModifiedKey(purposeId, detailId, row.path);\n const invalidKey: string = getConsentInvalidKey(purposeId, detailId, row.path);\n const error: ConsentDetailInputError | undefined = getConsentDetailInputError(row, text);\n\n if (error) {\n return {error, formValues: {[invalidKey]: 'true', [modifiedKey]: ''}, isValid: false};\n }\n\n const value: number | string = typeof row.value === 'number' ? Number(text) : text;\n\n return {formValues: {[invalidKey]: '', [modifiedKey]: JSON.stringify(value)}, isValid: true};\n};\n\n/**\n * Gives the form values that return an authorization detail field to the value that was shown: no\n * modified value and no invalid marker. A field the user left empty is reset this way when it loses focus.\n *\n * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.\n * @param detailId - The identifier of the authorization detail, its consent element name.\n * @param path - Dot-separated location of the field within the detail.\n * @returns The form values to write, keyed by form key.\n *\n * @example\n * ```typescript\n * resetConsentDetailInput('p1', 'd-1', 'amount')\n * // returns {'__consent_modified__p1__d-1__amount': '', '__consent_invalid__p1__d-1__amount': ''}\n * ```\n */\nconst resetConsentDetailInput = (purposeId: string, detailId: string, path: string): Record<string, string> => ({\n [getConsentInvalidKey(purposeId, detailId, path)]: '',\n [getConsentModifiedKey(purposeId, detailId, path)]: '',\n});\n\n/**\n * Lists the items of a `removeItems` or `addItems` authorization detail field as the consent screen offers\n * them. For `removeItems`, every shown item is listed, selected while kept; a kept item can be removed\n * unless it is the last one, and a removed item can be added back. For `addItems`, the shown items are\n * selected and fixed, the items the user added are selected and can be taken out again, and the values the\n * type allows are offered unselected.\n *\n * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.\n * @param detailId - The identifier of the authorization detail, its consent element name.\n * @param row - The list field.\n * @param formValues - Form values, holding the JSON text of each changed field under its modified key.\n * @returns The items, in display order.\n *\n * @example\n * ```typescript\n * getConsentDetailListItems('p1', 'd-1', {label: 'Actions', modification: 'removeItems', path: 'actions', value: ['a', 'b']}, {})\n * // returns [{origin: 'shown', selected: true, toggleable: true, value: 'a'}, {origin: 'shown', selected: true, toggleable: true, value: 'b'}]\n * ```\n */\nconst getConsentDetailListItems = (\n purposeId: string,\n detailId: string,\n row: ConsentDetailRow,\n formValues: Record<string, unknown>,\n): ConsentDetailListItem[] => {\n const shown: PlainItem[] = isConsentDetailPlainList(row.value) ? row.value : [];\n let current: PlainItem[] = shown;\n const raw: unknown = formValues[getConsentModifiedKey(purposeId, detailId, row.path)];\n if (typeof raw === 'string' && raw !== '') {\n try {\n const parsed: unknown = JSON.parse(raw);\n if (isConsentDetailPlainList(parsed)) current = parsed;\n } catch {\n // Not a list the field wrote; the shown list stands.\n }\n }\n\n if (row.modification === 'removeItems') {\n const keptCount: number = shown.filter((item: PlainItem) => current.includes(item)).length;\n return shown.map((value: PlainItem) => {\n const selected: boolean = current.includes(value);\n return {origin: 'shown', selected, toggleable: !selected || keptCount > 1, value};\n });\n }\n\n const added: PlainItem[] = current.filter((item: PlainItem) => !shown.includes(item));\n const offered: PlainItem[] = (isConsentDetailPlainList(row.options) ? row.options : []).filter(\n (option: PlainItem) => !shown.includes(option) && !added.includes(option),\n );\n\n return [\n ...shown.map(\n (value: PlainItem): ConsentDetailListItem => ({origin: 'shown', selected: true, toggleable: false, value}),\n ),\n ...added.map(\n (value: PlainItem): ConsentDetailListItem => ({origin: 'added', selected: true, toggleable: true, value}),\n ),\n ...offered.map(\n (value: PlainItem): ConsentDetailListItem => ({origin: 'offered', selected: false, toggleable: true, value}),\n ),\n ];\n};\n\n/**\n * Toggles one item of a `removeItems` or `addItems` authorization detail field: a selected item is taken\n * out and an unselected one put in, within what the field's rule allows.\n *\n * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.\n * @param detailId - The identifier of the authorization detail, its consent element name.\n * @param row - The list field.\n * @param formValues - Form values, holding the JSON text of each changed field under its modified key.\n * @param item - The item to toggle.\n * @returns The form values to write, keyed by form key, or `undefined` when the item cannot be toggled.\n *\n * @example\n * ```typescript\n * toggleConsentDetailListItem('p1', 'd-1', actionsRow, {}, 'status') // returns {'__consent_modified__p1__d-1__actions': '[\"initiate\"]'}\n * ```\n */\nconst toggleConsentDetailListItem = (\n purposeId: string,\n detailId: string,\n row: ConsentDetailRow,\n formValues: Record<string, unknown>,\n item: string | number | boolean,\n): Record<string, string> | undefined => {\n const items: ConsentDetailListItem[] = getConsentDetailListItems(purposeId, detailId, row, formValues);\n const target: ConsentDetailListItem | undefined = items.find((entry: ConsentDetailListItem) => entry.value === item);\n if (!target?.toggleable) return undefined;\n\n const next: (string | number | boolean)[] = items\n .filter((entry: ConsentDetailListItem) => (entry === target ? !entry.selected : entry.selected))\n .map((entry: ConsentDetailListItem) => entry.value);\n\n return {[getConsentModifiedKey(purposeId, detailId, row.path)]: JSON.stringify(next)};\n};\n\n/**\n * Adds a typed value to an `addItems` authorization detail field whose type allows any value. The text is\n * trimmed, and read as a number when every shown item is a number.\n *\n * @param purposeId - The identifier of the consent purpose the authorization detail belongs to.\n * @param detailId - The identifier of the authorization detail, its consent element name.\n * @param row - The list field.\n * @param formValues - Form values, holding the JSON text of each changed field under its modified key.\n * @param text - The text the user typed.\n * @returns The form values to write, keyed by form key, or `undefined` when the text is empty, not a\n * number where one is needed, already listed, or the field does not take typed values.\n *\n * @example\n * ```typescript\n * addConsentDetailListItem('p1', 'd-1', blockedRow, {}, ' y ') // returns {'__consent_modified__p1__d-1__blocked': '[\"x\",\"y\"]'}\n * ```\n */\nconst addConsentDetailListItem = (\n purposeId: string,\n detailId: string,\n row: ConsentDetailRow,\n formValues: Record<string, unknown>,\n text: string,\n): Record<string, string> | undefined => {\n if (row.modification !== 'addItems' || row.options !== undefined || !Array.isArray(row.value)) return undefined;\n const trimmed: string = text.trim();\n if (!trimmed) return undefined;\n\n const numeric: boolean = row.value.length > 0 && row.value.every((item: unknown) => typeof item === 'number');\n const value: string | number = numeric ? Number(trimmed) : trimmed;\n const selected: (string | number | boolean)[] = getConsentDetailListItems(purposeId, detailId, row, formValues)\n .filter((entry: ConsentDetailListItem) => entry.selected)\n .map((entry: ConsentDetailListItem) => entry.value);\n if ((numeric && !Number.isFinite(value)) || selected.includes(value)) return undefined;\n\n return {[getConsentModifiedKey(purposeId, detailId, row.path)]: JSON.stringify([...selected, value])};\n};\n\n/**\n * Props for the useConsentDetailField hook.\n */\nexport interface UseConsentDetailFieldProps {\n /** The identifier of the consent purpose the authorization detail belongs to. */\n purposeId: string;\n /** The identifier of the authorization detail the field belongs to, its consent element name. */\n detailId: string;\n /** Current consent form values. */\n formValues: Record<string, string>;\n /** Callback that writes one consent form value. */\n onInputChange: (name: string, value: string) => void;\n /** The field. */\n row: ConsentDetailRow;\n /** Translator for the error message; the SDK's default bundle is used without one. */\n t?: UseTranslation['t'];\n}\n\n/**\n * Error of a field, with its message resolved.\n */\nexport interface ConsentDetailFieldError extends ConsentDetailInputError {\n /** Translated message. */\n message: string;\n}\n\n/**\n * State and handlers of one authorization detail field, for drawing it in any UI.\n */\nexport interface UseConsentDetailFieldResult {\n /** Why the text shown cannot be submitted, absent when it can. */\n error?: ConsentDetailFieldError;\n /** Adds a typed item to an `addItems` list that takes typed values; returns whether it was added. */\n handleAdd: (text: string) => boolean;\n /** Call when the field loses focus: an empty field returns to the value that was shown. */\n handleBlur: () => void;\n /** Call with the text the user entered into a `number` or `date` field, or the item typed into a list. */\n handleChange: (text: string) => void;\n /** Expands or collapses the field's list. */\n handleListToggle: (expanded: boolean) => void;\n /** Toggles an item of a list field, within what its rule allows. */\n handleToggle: (item: string | number | boolean) => void;\n /** Identifier for the field's input element. */\n inputId: string;\n /** Whether the user expanded the field's list past `CONSENT_DETAIL_DISPLAY_LIMITS.listItems`. */\n isListExpanded: boolean;\n /** Whether the field's value is a list of plain values, shown as a list rather than as structured JSON. */\n isPlainList: boolean;\n /** Whether an item of a list field is part of the value that would be granted. */\n isSelected: (item: string | number | boolean) => boolean;\n /** Whether the user may toggle an item of a list field. */\n isToggleable: (item: string | number | boolean) => boolean;\n /** Whether the field takes typed items: an `addItems` list whose type offers no fixed values. */\n isTypedItemAllowed: boolean;\n /** Whether the field's text may be submitted. Always true for a list or a read-only field. */\n isValid: boolean;\n /** Items of a list field, in display order; empty for any other field. */\n items: ConsentDetailListItem[];\n /** How the user may change the field, or `undefined` when it is read-only. */\n kind?: ConsentDetailInputKind;\n /** Label of the field. */\n label: string;\n /**\n * How many items of the field's list to show and hide: the items of a list the user may change, or the\n * values of a read-only plain list. Nothing is hidden for any other field.\n */\n listDisplay: ConsentDetailListDisplay;\n /** Upper bound of a `number` or `date` field that may be decreased. */\n max?: string;\n /** Lower bound of a `number` or `date` field that may be increased. */\n min?: string;\n /** Text to show: the typed text of a `number` or `date` field, or the item being typed into a list. */\n text: string;\n}\n\n/**\n * Headless state of one authorization detail field on the consent screen. A `number` or `date` field keeps\n * the text the user typed, writes it to the decision only while it stays within the field's bound, and\n * otherwise clears the field's modification and marks the field invalid, which blocks approval (see\n * `isConsentApprovalBlocked`). A list field exposes its items and toggles them as its rule allows.\n *\n * @param props - The field and the consent form state.\n * @returns The field's state and handlers.\n *\n * @example\n * ```tsx\n * const field = useConsentDetailField({purposeId, detailId, row, formValues, onInputChange});\n * <input value={field.text} onChange={(e) => field.handleChange(e.target.value)} onBlur={field.handleBlur} />\n * ```\n */\nconst useConsentDetailField = ({\n detailId,\n formValues,\n onInputChange,\n purposeId,\n row,\n t,\n}: UseConsentDetailFieldProps): UseConsentDetailFieldResult => {\n // The text the user typed, kept as typed even when it cannot be submitted.\n const [draft, setDraft] = useState<string | undefined>(undefined);\n const [isListExpanded, setListExpanded] = useState<boolean>(false);\n const kind: ConsentDetailInputKind | undefined = getConsentDetailInputKind(row);\n const isScalar: boolean = kind === 'number' || kind === 'date';\n const isList: boolean = kind === 'removeItems' || kind === 'addItems';\n const items: ConsentDetailListItem[] = isList ? getConsentDetailListItems(purposeId, detailId, row, formValues) : [];\n const isPlainList: boolean = isConsentDetailPlainList(row.value);\n let listCount = 0;\n if (isList) {\n listCount = items.length;\n } else if (isConsentDetailPlainList(row.value)) {\n listCount = row.value.length;\n }\n const find = (item: string | number | boolean): ConsentDetailListItem | undefined =>\n items.find((entry: ConsentDetailListItem) => entry.value === item);\n\n const write = (values: Record<string, string> | undefined): void => {\n Object.entries(values ?? {}).forEach(([name, value]: [string, string]) => onInputChange(name, value));\n };\n\n const inputError: ConsentDetailInputError | undefined =\n isScalar && draft !== undefined ? getConsentDetailInputError(row, draft) : undefined;\n\n return {\n error: inputError && {...inputError, message: resolveConsentText(t, inputError.key, inputError.params)},\n handleAdd: (text: string): boolean => {\n const values: Record<string, string> | undefined = addConsentDetailListItem(\n purposeId,\n detailId,\n row,\n formValues,\n text,\n );\n write(values);\n if (values) setDraft(undefined);\n return Boolean(values);\n },\n handleBlur: (): void => {\n if (!isScalar || draft === undefined) return;\n if (draft.trim() === '') {\n write(resetConsentDetailInput(purposeId, detailId, row.path));\n setDraft(undefined);\n } else if (!getConsentDetailInputError(row, draft)) {\n setDraft(undefined);\n }\n },\n handleChange: (text: string): void => {\n setDraft(text);\n if (isScalar) write(parseConsentDetailInput(purposeId, detailId, row, text).formValues);\n },\n handleListToggle: setListExpanded,\n handleToggle: (item: string | number | boolean): void => {\n write(toggleConsentDetailListItem(purposeId, detailId, row, formValues, item));\n },\n inputId: `consent_modify_${purposeId}_${detailId}_${row.path}`,\n isListExpanded,\n isPlainList,\n isSelected: (item: string | number | boolean): boolean => Boolean(find(item)?.selected),\n isToggleable: (item: string | number | boolean): boolean => Boolean(find(item)?.toggleable),\n isTypedItemAllowed: kind === 'addItems' && row.options === undefined,\n isValid: !inputError,\n items,\n kind,\n label: row.label || row.path,\n listDisplay: getConsentDetailListDisplay(listCount, isListExpanded),\n max: isScalar && row.modification === 'decrease' ? String(row.value) : undefined,\n min: isScalar && row.modification === 'increase' ? String(row.value) : undefined,\n text: draft ?? (isScalar ? getConsentDetailInputText(purposeId, detailId, row, formValues) : ''),\n };\n};\n\nexport default useConsentDetailField;\n"],"mappings":"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"}