@thunderid/react 0.12.0 → 0.13.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 (356) hide show
  1. package/dist/cjs/components/actions/SignInButton/BaseSignInButton.cjs +2 -3
  2. package/dist/cjs/components/actions/SignInButton/BaseSignInButton.cjs.map +1 -1
  3. package/dist/cjs/components/actions/SignOutButton/BaseSignOutButton.cjs +2 -3
  4. package/dist/cjs/components/actions/SignOutButton/BaseSignOutButton.cjs.map +1 -1
  5. package/dist/cjs/components/actions/SignUpButton/BaseSignUpButton.cjs +2 -3
  6. package/dist/cjs/components/actions/SignUpButton/BaseSignUpButton.cjs.map +1 -1
  7. package/dist/cjs/components/adapters/Consent.cjs +34 -27
  8. package/dist/cjs/components/adapters/Consent.cjs.map +1 -1
  9. package/dist/cjs/components/adapters/ConsentCheckboxList.cjs +7 -8
  10. package/dist/cjs/components/adapters/ConsentCheckboxList.cjs.map +1 -1
  11. package/dist/cjs/components/adapters/ConsentCheckboxList.styles.cjs +8 -9
  12. package/dist/cjs/components/adapters/ConsentCheckboxList.styles.cjs.map +1 -1
  13. package/dist/cjs/components/adapters/ImageComponent.cjs +13 -9
  14. package/dist/cjs/components/adapters/ImageComponent.cjs.map +1 -1
  15. package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.cjs +3 -4
  16. package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.cjs.map +1 -1
  17. package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.cjs +11 -12
  18. package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.cjs.map +1 -1
  19. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs +12 -16
  20. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs.map +1 -1
  21. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.styles.cjs +18 -15
  22. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.styles.cjs.map +1 -1
  23. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.cjs +5 -6
  24. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.cjs.map +1 -1
  25. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.styles.cjs +25 -26
  26. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.styles.cjs.map +1 -1
  27. package/dist/cjs/components/presentation/auth/AcceptInvite/BaseAcceptInvite.cjs +10 -31
  28. package/dist/cjs/components/presentation/auth/AcceptInvite/BaseAcceptInvite.cjs.map +1 -1
  29. package/dist/cjs/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.cjs +41 -9
  30. package/dist/cjs/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.cjs.map +1 -1
  31. package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs +75 -71
  32. package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs.map +1 -1
  33. package/dist/cjs/components/presentation/auth/InviteUser/BaseInviteUser.cjs +9 -22
  34. package/dist/cjs/components/presentation/auth/InviteUser/BaseInviteUser.cjs.map +1 -1
  35. package/dist/cjs/components/presentation/auth/InviteUser/BaseInviteUser.styles.cjs +22 -9
  36. package/dist/cjs/components/presentation/auth/InviteUser/BaseInviteUser.styles.cjs.map +1 -1
  37. package/dist/cjs/components/presentation/auth/Recovery/BaseRecovery.cjs +11 -12
  38. package/dist/cjs/components/presentation/auth/Recovery/BaseRecovery.cjs.map +1 -1
  39. package/dist/cjs/components/presentation/auth/SignIn/BaseSignIn.cjs +11 -16
  40. package/dist/cjs/components/presentation/auth/SignIn/BaseSignIn.cjs.map +1 -1
  41. package/dist/cjs/components/presentation/auth/SignIn/BaseSignIn.styles.cjs +32 -27
  42. package/dist/cjs/components/presentation/auth/SignIn/BaseSignIn.styles.cjs.map +1 -1
  43. package/dist/cjs/components/presentation/auth/SignUp/BaseSignUp.cjs +11 -12
  44. package/dist/cjs/components/presentation/auth/SignUp/BaseSignUp.cjs.map +1 -1
  45. package/dist/cjs/components/presentation/auth/SignUp/BaseSignUp.styles.cjs +25 -26
  46. package/dist/cjs/components/presentation/auth/SignUp/BaseSignUp.styles.cjs.map +1 -1
  47. package/dist/cjs/components/primitives/AffixedField/AffixedField.cjs +6 -7
  48. package/dist/cjs/components/primitives/AffixedField/AffixedField.cjs.map +1 -1
  49. package/dist/cjs/components/primitives/AffixedField/AffixedField.styles.cjs +9 -10
  50. package/dist/cjs/components/primitives/AffixedField/AffixedField.styles.cjs.map +1 -1
  51. package/dist/cjs/components/primitives/Alert/Alert.cjs +6 -7
  52. package/dist/cjs/components/primitives/Alert/Alert.cjs.map +1 -1
  53. package/dist/cjs/components/primitives/Alert/Alert.styles.cjs +10 -11
  54. package/dist/cjs/components/primitives/Alert/Alert.styles.cjs.map +1 -1
  55. package/dist/cjs/components/primitives/Avatar/Avatar.cjs +5 -6
  56. package/dist/cjs/components/primitives/Avatar/Avatar.cjs.map +1 -1
  57. package/dist/cjs/components/primitives/Avatar/Avatar.styles.cjs +7 -8
  58. package/dist/cjs/components/primitives/Avatar/Avatar.styles.cjs.map +1 -1
  59. package/dist/cjs/components/primitives/Button/Button.cjs +8 -12
  60. package/dist/cjs/components/primitives/Button/Button.cjs.map +1 -1
  61. package/dist/cjs/components/primitives/Button/Button.styles.cjs +23 -24
  62. package/dist/cjs/components/primitives/Button/Button.styles.cjs.map +1 -1
  63. package/dist/cjs/components/primitives/Card/Card.cjs +8 -9
  64. package/dist/cjs/components/primitives/Card/Card.cjs.map +1 -1
  65. package/dist/cjs/components/primitives/Card/Card.styles.cjs +12 -13
  66. package/dist/cjs/components/primitives/Card/Card.styles.cjs.map +1 -1
  67. package/dist/cjs/components/primitives/Checkbox/Checkbox.cjs +5 -6
  68. package/dist/cjs/components/primitives/Checkbox/Checkbox.cjs.map +1 -1
  69. package/dist/cjs/components/primitives/Checkbox/Checkbox.styles.cjs +7 -8
  70. package/dist/cjs/components/primitives/Checkbox/Checkbox.styles.cjs.map +1 -1
  71. package/dist/cjs/components/primitives/CopyableText/CopyableText.styles.cjs +6 -7
  72. package/dist/cjs/components/primitives/CopyableText/CopyableText.styles.cjs.map +1 -1
  73. package/dist/cjs/components/primitives/DatePicker/DatePicker.cjs +4 -5
  74. package/dist/cjs/components/primitives/DatePicker/DatePicker.cjs.map +1 -1
  75. package/dist/cjs/components/primitives/DatePicker/DatePicker.styles.cjs +5 -6
  76. package/dist/cjs/components/primitives/DatePicker/DatePicker.styles.cjs.map +1 -1
  77. package/dist/cjs/components/primitives/Dialog/Dialog.cjs +7 -8
  78. package/dist/cjs/components/primitives/Dialog/Dialog.cjs.map +1 -1
  79. package/dist/cjs/components/primitives/Dialog/Dialog.styles.cjs +8 -9
  80. package/dist/cjs/components/primitives/Dialog/Dialog.styles.cjs.map +1 -1
  81. package/dist/cjs/components/primitives/Divider/Divider.cjs +7 -8
  82. package/dist/cjs/components/primitives/Divider/Divider.cjs.map +1 -1
  83. package/dist/cjs/components/primitives/Divider/Divider.styles.cjs +7 -8
  84. package/dist/cjs/components/primitives/Divider/Divider.styles.cjs.map +1 -1
  85. package/dist/cjs/components/primitives/FormControl/FormControl.cjs +3 -4
  86. package/dist/cjs/components/primitives/FormControl/FormControl.cjs.map +1 -1
  87. package/dist/cjs/components/primitives/FormControl/FormControl.styles.cjs +4 -5
  88. package/dist/cjs/components/primitives/FormControl/FormControl.styles.cjs.map +1 -1
  89. package/dist/cjs/components/primitives/InputLabel/InputLabel.cjs +3 -4
  90. package/dist/cjs/components/primitives/InputLabel/InputLabel.cjs.map +1 -1
  91. package/dist/cjs/components/primitives/InputLabel/InputLabel.styles.cjs +6 -7
  92. package/dist/cjs/components/primitives/InputLabel/InputLabel.styles.cjs.map +1 -1
  93. package/dist/cjs/components/primitives/KeyValueInput/KeyValueInput.cjs +19 -20
  94. package/dist/cjs/components/primitives/KeyValueInput/KeyValueInput.cjs.map +1 -1
  95. package/dist/cjs/components/primitives/KeyValueInput/KeyValueInput.styles.cjs +16 -17
  96. package/dist/cjs/components/primitives/KeyValueInput/KeyValueInput.styles.cjs.map +1 -1
  97. package/dist/cjs/components/primitives/Logo/Logo.cjs +3 -4
  98. package/dist/cjs/components/primitives/Logo/Logo.cjs.map +1 -1
  99. package/dist/cjs/components/primitives/Logo/Logo.styles.cjs +9 -10
  100. package/dist/cjs/components/primitives/Logo/Logo.styles.cjs.map +1 -1
  101. package/dist/cjs/components/primitives/MultiInput/MultiInput.cjs +11 -12
  102. package/dist/cjs/components/primitives/MultiInput/MultiInput.cjs.map +1 -1
  103. package/dist/cjs/components/primitives/MultiInput/MultiInput.styles.cjs +10 -11
  104. package/dist/cjs/components/primitives/MultiInput/MultiInput.styles.cjs.map +1 -1
  105. package/dist/cjs/components/primitives/OtpField/OtpField.cjs +4 -5
  106. package/dist/cjs/components/primitives/OtpField/OtpField.cjs.map +1 -1
  107. package/dist/cjs/components/primitives/OtpField/OtpField.styles.cjs +5 -6
  108. package/dist/cjs/components/primitives/OtpField/OtpField.styles.cjs.map +1 -1
  109. package/dist/cjs/components/primitives/PasswordField/PasswordField.cjs +3 -4
  110. package/dist/cjs/components/primitives/PasswordField/PasswordField.cjs.map +1 -1
  111. package/dist/cjs/components/primitives/PasswordField/PasswordField.styles.cjs +4 -5
  112. package/dist/cjs/components/primitives/PasswordField/PasswordField.styles.cjs.map +1 -1
  113. package/dist/cjs/components/primitives/Select/Select.cjs +3 -4
  114. package/dist/cjs/components/primitives/Select/Select.cjs.map +1 -1
  115. package/dist/cjs/components/primitives/Select/Select.styles.cjs +5 -6
  116. package/dist/cjs/components/primitives/Select/Select.styles.cjs.map +1 -1
  117. package/dist/cjs/components/primitives/Spinner/Spinner.cjs +4 -6
  118. package/dist/cjs/components/primitives/Spinner/Spinner.cjs.map +1 -1
  119. package/dist/cjs/components/primitives/Spinner/Spinner.styles.cjs +20 -12
  120. package/dist/cjs/components/primitives/Spinner/Spinner.styles.cjs.map +1 -1
  121. package/dist/cjs/components/primitives/TextField/TextField.cjs +6 -7
  122. package/dist/cjs/components/primitives/TextField/TextField.cjs.map +1 -1
  123. package/dist/cjs/components/primitives/TextField/TextField.styles.cjs +8 -9
  124. package/dist/cjs/components/primitives/TextField/TextField.styles.cjs.map +1 -1
  125. package/dist/cjs/components/primitives/Toggle/Toggle.cjs +7 -8
  126. package/dist/cjs/components/primitives/Toggle/Toggle.cjs.map +1 -1
  127. package/dist/cjs/components/primitives/Toggle/Toggle.styles.cjs +7 -8
  128. package/dist/cjs/components/primitives/Toggle/Toggle.styles.cjs.map +1 -1
  129. package/dist/cjs/components/primitives/Tooltip/Tooltip.cjs +4 -5
  130. package/dist/cjs/components/primitives/Tooltip/Tooltip.cjs.map +1 -1
  131. package/dist/cjs/components/primitives/Tooltip/Tooltip.styles.cjs +13 -14
  132. package/dist/cjs/components/primitives/Tooltip/Tooltip.styles.cjs.map +1 -1
  133. package/dist/cjs/components/primitives/Typography/Typography.cjs +2 -3
  134. package/dist/cjs/components/primitives/Typography/Typography.cjs.map +1 -1
  135. package/dist/cjs/components/primitives/Typography/Typography.styles.cjs +18 -19
  136. package/dist/cjs/components/primitives/Typography/Typography.styles.cjs.map +1 -1
  137. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +4 -1
  138. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
  139. package/dist/cjs/styles/emotion.cjs +64 -0
  140. package/dist/cjs/styles/emotion.cjs.map +1 -0
  141. package/dist/components/actions/SignInButton/BaseSignInButton.d.ts.map +1 -1
  142. package/dist/components/actions/SignInButton/BaseSignInButton.js +1 -1
  143. package/dist/components/actions/SignInButton/BaseSignInButton.js.map +1 -1
  144. package/dist/components/actions/SignOutButton/BaseSignOutButton.d.ts.map +1 -1
  145. package/dist/components/actions/SignOutButton/BaseSignOutButton.js +1 -1
  146. package/dist/components/actions/SignOutButton/BaseSignOutButton.js.map +1 -1
  147. package/dist/components/actions/SignUpButton/BaseSignUpButton.d.ts.map +1 -1
  148. package/dist/components/actions/SignUpButton/BaseSignUpButton.js +1 -1
  149. package/dist/components/actions/SignUpButton/BaseSignUpButton.js.map +1 -1
  150. package/dist/components/adapters/Consent.d.ts.map +1 -1
  151. package/dist/components/adapters/Consent.js +34 -27
  152. package/dist/components/adapters/Consent.js.map +1 -1
  153. package/dist/components/adapters/ConsentCheckboxList.d.ts.map +1 -1
  154. package/dist/components/adapters/ConsentCheckboxList.js +1 -1
  155. package/dist/components/adapters/ConsentCheckboxList.js.map +1 -1
  156. package/dist/components/adapters/ConsentCheckboxList.styles.d.ts.map +1 -1
  157. package/dist/components/adapters/ConsentCheckboxList.styles.js +1 -1
  158. package/dist/components/adapters/ConsentCheckboxList.styles.js.map +1 -1
  159. package/dist/components/adapters/ImageComponent.d.ts.map +1 -1
  160. package/dist/components/adapters/ImageComponent.js +13 -9
  161. package/dist/components/adapters/ImageComponent.js.map +1 -1
  162. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.d.ts.map +1 -1
  163. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.js +1 -1
  164. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.js.map +1 -1
  165. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.d.ts.map +1 -1
  166. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.js +1 -1
  167. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.js.map +1 -1
  168. package/dist/components/presentation/UserDropdown/BaseUserDropdown.d.ts.map +1 -1
  169. package/dist/components/presentation/UserDropdown/BaseUserDropdown.js +5 -8
  170. package/dist/components/presentation/UserDropdown/BaseUserDropdown.js.map +1 -1
  171. package/dist/components/presentation/UserDropdown/BaseUserDropdown.styles.d.ts.map +1 -1
  172. package/dist/components/presentation/UserDropdown/BaseUserDropdown.styles.js +5 -1
  173. package/dist/components/presentation/UserDropdown/BaseUserDropdown.styles.js.map +1 -1
  174. package/dist/components/presentation/UserProfile/BaseUserProfile.d.ts.map +1 -1
  175. package/dist/components/presentation/UserProfile/BaseUserProfile.js +1 -1
  176. package/dist/components/presentation/UserProfile/BaseUserProfile.js.map +1 -1
  177. package/dist/components/presentation/UserProfile/BaseUserProfile.styles.d.ts.map +1 -1
  178. package/dist/components/presentation/UserProfile/BaseUserProfile.styles.js +1 -1
  179. package/dist/components/presentation/UserProfile/BaseUserProfile.styles.js.map +1 -1
  180. package/dist/components/presentation/auth/AcceptInvite/BaseAcceptInvite.d.ts.map +1 -1
  181. package/dist/components/presentation/auth/AcceptInvite/BaseAcceptInvite.js +7 -27
  182. package/dist/components/presentation/auth/AcceptInvite/BaseAcceptInvite.js.map +1 -1
  183. package/dist/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.d.ts.map +1 -1
  184. package/dist/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.js +38 -5
  185. package/dist/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.js.map +1 -1
  186. package/dist/components/presentation/auth/AuthOptionFactory.d.ts.map +1 -1
  187. package/dist/components/presentation/auth/AuthOptionFactory.js +68 -63
  188. package/dist/components/presentation/auth/AuthOptionFactory.js.map +1 -1
  189. package/dist/components/presentation/auth/InviteUser/BaseInviteUser.d.ts.map +1 -1
  190. package/dist/components/presentation/auth/InviteUser/BaseInviteUser.js +5 -17
  191. package/dist/components/presentation/auth/InviteUser/BaseInviteUser.js.map +1 -1
  192. package/dist/components/presentation/auth/InviteUser/BaseInviteUser.styles.d.ts.map +1 -1
  193. package/dist/components/presentation/auth/InviteUser/BaseInviteUser.styles.js +19 -5
  194. package/dist/components/presentation/auth/InviteUser/BaseInviteUser.styles.js.map +1 -1
  195. package/dist/components/presentation/auth/Recovery/BaseRecovery.d.ts.map +1 -1
  196. package/dist/components/presentation/auth/Recovery/BaseRecovery.js +1 -1
  197. package/dist/components/presentation/auth/Recovery/BaseRecovery.js.map +1 -1
  198. package/dist/components/presentation/auth/SignIn/BaseSignIn.d.ts.map +1 -1
  199. package/dist/components/presentation/auth/SignIn/BaseSignIn.js +2 -6
  200. package/dist/components/presentation/auth/SignIn/BaseSignIn.js.map +1 -1
  201. package/dist/components/presentation/auth/SignIn/BaseSignIn.styles.d.ts.map +1 -1
  202. package/dist/components/presentation/auth/SignIn/BaseSignIn.styles.js +7 -1
  203. package/dist/components/presentation/auth/SignIn/BaseSignIn.styles.js.map +1 -1
  204. package/dist/components/presentation/auth/SignUp/BaseSignUp.d.ts.map +1 -1
  205. package/dist/components/presentation/auth/SignUp/BaseSignUp.js +1 -1
  206. package/dist/components/presentation/auth/SignUp/BaseSignUp.js.map +1 -1
  207. package/dist/components/presentation/auth/SignUp/BaseSignUp.styles.d.ts.map +1 -1
  208. package/dist/components/presentation/auth/SignUp/BaseSignUp.styles.js +1 -1
  209. package/dist/components/presentation/auth/SignUp/BaseSignUp.styles.js.map +1 -1
  210. package/dist/components/primitives/AffixedField/AffixedField.d.ts.map +1 -1
  211. package/dist/components/primitives/AffixedField/AffixedField.js +1 -1
  212. package/dist/components/primitives/AffixedField/AffixedField.js.map +1 -1
  213. package/dist/components/primitives/AffixedField/AffixedField.styles.d.ts.map +1 -1
  214. package/dist/components/primitives/AffixedField/AffixedField.styles.js +1 -1
  215. package/dist/components/primitives/AffixedField/AffixedField.styles.js.map +1 -1
  216. package/dist/components/primitives/Alert/Alert.d.ts.map +1 -1
  217. package/dist/components/primitives/Alert/Alert.js +1 -1
  218. package/dist/components/primitives/Alert/Alert.js.map +1 -1
  219. package/dist/components/primitives/Alert/Alert.styles.d.ts.map +1 -1
  220. package/dist/components/primitives/Alert/Alert.styles.js +1 -1
  221. package/dist/components/primitives/Alert/Alert.styles.js.map +1 -1
  222. package/dist/components/primitives/Avatar/Avatar.d.ts.map +1 -1
  223. package/dist/components/primitives/Avatar/Avatar.js +1 -1
  224. package/dist/components/primitives/Avatar/Avatar.js.map +1 -1
  225. package/dist/components/primitives/Avatar/Avatar.styles.d.ts.map +1 -1
  226. package/dist/components/primitives/Avatar/Avatar.styles.js +1 -1
  227. package/dist/components/primitives/Avatar/Avatar.styles.js.map +1 -1
  228. package/dist/components/primitives/Button/Button.d.ts.map +1 -1
  229. package/dist/components/primitives/Button/Button.js +2 -5
  230. package/dist/components/primitives/Button/Button.js.map +1 -1
  231. package/dist/components/primitives/Button/Button.styles.d.ts.map +1 -1
  232. package/dist/components/primitives/Button/Button.styles.js +1 -1
  233. package/dist/components/primitives/Button/Button.styles.js.map +1 -1
  234. package/dist/components/primitives/Card/Card.d.ts.map +1 -1
  235. package/dist/components/primitives/Card/Card.js +1 -1
  236. package/dist/components/primitives/Card/Card.js.map +1 -1
  237. package/dist/components/primitives/Card/Card.styles.d.ts.map +1 -1
  238. package/dist/components/primitives/Card/Card.styles.js +1 -1
  239. package/dist/components/primitives/Card/Card.styles.js.map +1 -1
  240. package/dist/components/primitives/Checkbox/Checkbox.d.ts.map +1 -1
  241. package/dist/components/primitives/Checkbox/Checkbox.js +1 -1
  242. package/dist/components/primitives/Checkbox/Checkbox.js.map +1 -1
  243. package/dist/components/primitives/Checkbox/Checkbox.styles.d.ts.map +1 -1
  244. package/dist/components/primitives/Checkbox/Checkbox.styles.js +1 -1
  245. package/dist/components/primitives/Checkbox/Checkbox.styles.js.map +1 -1
  246. package/dist/components/primitives/CopyableText/CopyableText.styles.d.ts.map +1 -1
  247. package/dist/components/primitives/CopyableText/CopyableText.styles.js +1 -1
  248. package/dist/components/primitives/CopyableText/CopyableText.styles.js.map +1 -1
  249. package/dist/components/primitives/DatePicker/DatePicker.d.ts.map +1 -1
  250. package/dist/components/primitives/DatePicker/DatePicker.js +1 -1
  251. package/dist/components/primitives/DatePicker/DatePicker.js.map +1 -1
  252. package/dist/components/primitives/DatePicker/DatePicker.styles.d.ts.map +1 -1
  253. package/dist/components/primitives/DatePicker/DatePicker.styles.js +1 -1
  254. package/dist/components/primitives/DatePicker/DatePicker.styles.js.map +1 -1
  255. package/dist/components/primitives/Dialog/Dialog.d.ts.map +1 -1
  256. package/dist/components/primitives/Dialog/Dialog.js +1 -1
  257. package/dist/components/primitives/Dialog/Dialog.js.map +1 -1
  258. package/dist/components/primitives/Dialog/Dialog.styles.d.ts.map +1 -1
  259. package/dist/components/primitives/Dialog/Dialog.styles.js +1 -1
  260. package/dist/components/primitives/Dialog/Dialog.styles.js.map +1 -1
  261. package/dist/components/primitives/Divider/Divider.d.ts.map +1 -1
  262. package/dist/components/primitives/Divider/Divider.js +1 -1
  263. package/dist/components/primitives/Divider/Divider.js.map +1 -1
  264. package/dist/components/primitives/Divider/Divider.styles.d.ts.map +1 -1
  265. package/dist/components/primitives/Divider/Divider.styles.js +1 -1
  266. package/dist/components/primitives/Divider/Divider.styles.js.map +1 -1
  267. package/dist/components/primitives/FormControl/FormControl.d.ts.map +1 -1
  268. package/dist/components/primitives/FormControl/FormControl.js +1 -1
  269. package/dist/components/primitives/FormControl/FormControl.js.map +1 -1
  270. package/dist/components/primitives/FormControl/FormControl.styles.d.ts.map +1 -1
  271. package/dist/components/primitives/FormControl/FormControl.styles.js +1 -1
  272. package/dist/components/primitives/FormControl/FormControl.styles.js.map +1 -1
  273. package/dist/components/primitives/InputLabel/InputLabel.d.ts.map +1 -1
  274. package/dist/components/primitives/InputLabel/InputLabel.js +1 -1
  275. package/dist/components/primitives/InputLabel/InputLabel.js.map +1 -1
  276. package/dist/components/primitives/InputLabel/InputLabel.styles.d.ts.map +1 -1
  277. package/dist/components/primitives/InputLabel/InputLabel.styles.js +1 -1
  278. package/dist/components/primitives/InputLabel/InputLabel.styles.js.map +1 -1
  279. package/dist/components/primitives/KeyValueInput/KeyValueInput.d.ts.map +1 -1
  280. package/dist/components/primitives/KeyValueInput/KeyValueInput.js +1 -1
  281. package/dist/components/primitives/KeyValueInput/KeyValueInput.js.map +1 -1
  282. package/dist/components/primitives/KeyValueInput/KeyValueInput.styles.d.ts.map +1 -1
  283. package/dist/components/primitives/KeyValueInput/KeyValueInput.styles.js +1 -1
  284. package/dist/components/primitives/KeyValueInput/KeyValueInput.styles.js.map +1 -1
  285. package/dist/components/primitives/Logo/Logo.d.ts.map +1 -1
  286. package/dist/components/primitives/Logo/Logo.js +1 -1
  287. package/dist/components/primitives/Logo/Logo.js.map +1 -1
  288. package/dist/components/primitives/Logo/Logo.styles.d.ts.map +1 -1
  289. package/dist/components/primitives/Logo/Logo.styles.js +1 -1
  290. package/dist/components/primitives/Logo/Logo.styles.js.map +1 -1
  291. package/dist/components/primitives/MultiInput/MultiInput.d.ts.map +1 -1
  292. package/dist/components/primitives/MultiInput/MultiInput.js +1 -1
  293. package/dist/components/primitives/MultiInput/MultiInput.js.map +1 -1
  294. package/dist/components/primitives/MultiInput/MultiInput.styles.d.ts.map +1 -1
  295. package/dist/components/primitives/MultiInput/MultiInput.styles.js +1 -1
  296. package/dist/components/primitives/MultiInput/MultiInput.styles.js.map +1 -1
  297. package/dist/components/primitives/OtpField/OtpField.d.ts.map +1 -1
  298. package/dist/components/primitives/OtpField/OtpField.js +1 -1
  299. package/dist/components/primitives/OtpField/OtpField.js.map +1 -1
  300. package/dist/components/primitives/OtpField/OtpField.styles.d.ts.map +1 -1
  301. package/dist/components/primitives/OtpField/OtpField.styles.js +1 -1
  302. package/dist/components/primitives/OtpField/OtpField.styles.js.map +1 -1
  303. package/dist/components/primitives/PasswordField/PasswordField.d.ts.map +1 -1
  304. package/dist/components/primitives/PasswordField/PasswordField.js +1 -1
  305. package/dist/components/primitives/PasswordField/PasswordField.js.map +1 -1
  306. package/dist/components/primitives/PasswordField/PasswordField.styles.d.ts.map +1 -1
  307. package/dist/components/primitives/PasswordField/PasswordField.styles.js +1 -1
  308. package/dist/components/primitives/PasswordField/PasswordField.styles.js.map +1 -1
  309. package/dist/components/primitives/Select/Select.d.ts.map +1 -1
  310. package/dist/components/primitives/Select/Select.js +1 -1
  311. package/dist/components/primitives/Select/Select.js.map +1 -1
  312. package/dist/components/primitives/Select/Select.styles.d.ts.map +1 -1
  313. package/dist/components/primitives/Select/Select.styles.js +1 -1
  314. package/dist/components/primitives/Select/Select.styles.js.map +1 -1
  315. package/dist/components/primitives/Spinner/Spinner.d.ts +5 -3
  316. package/dist/components/primitives/Spinner/Spinner.d.ts.map +1 -1
  317. package/dist/components/primitives/Spinner/Spinner.js +4 -5
  318. package/dist/components/primitives/Spinner/Spinner.js.map +1 -1
  319. package/dist/components/primitives/Spinner/Spinner.styles.d.ts +4 -1
  320. package/dist/components/primitives/Spinner/Spinner.styles.d.ts.map +1 -1
  321. package/dist/components/primitives/Spinner/Spinner.styles.js +16 -7
  322. package/dist/components/primitives/Spinner/Spinner.styles.js.map +1 -1
  323. package/dist/components/primitives/TextField/TextField.d.ts.map +1 -1
  324. package/dist/components/primitives/TextField/TextField.js +1 -1
  325. package/dist/components/primitives/TextField/TextField.js.map +1 -1
  326. package/dist/components/primitives/TextField/TextField.styles.d.ts.map +1 -1
  327. package/dist/components/primitives/TextField/TextField.styles.js +1 -1
  328. package/dist/components/primitives/TextField/TextField.styles.js.map +1 -1
  329. package/dist/components/primitives/Toggle/Toggle.d.ts.map +1 -1
  330. package/dist/components/primitives/Toggle/Toggle.js +1 -1
  331. package/dist/components/primitives/Toggle/Toggle.js.map +1 -1
  332. package/dist/components/primitives/Toggle/Toggle.styles.d.ts.map +1 -1
  333. package/dist/components/primitives/Toggle/Toggle.styles.js +1 -1
  334. package/dist/components/primitives/Toggle/Toggle.styles.js.map +1 -1
  335. package/dist/components/primitives/Tooltip/Tooltip.d.ts.map +1 -1
  336. package/dist/components/primitives/Tooltip/Tooltip.js +1 -1
  337. package/dist/components/primitives/Tooltip/Tooltip.js.map +1 -1
  338. package/dist/components/primitives/Tooltip/Tooltip.styles.d.ts.map +1 -1
  339. package/dist/components/primitives/Tooltip/Tooltip.styles.js +1 -1
  340. package/dist/components/primitives/Tooltip/Tooltip.styles.js.map +1 -1
  341. package/dist/components/primitives/Typography/Typography.d.ts.map +1 -1
  342. package/dist/components/primitives/Typography/Typography.js +1 -1
  343. package/dist/components/primitives/Typography/Typography.js.map +1 -1
  344. package/dist/components/primitives/Typography/Typography.styles.d.ts.map +1 -1
  345. package/dist/components/primitives/Typography/Typography.styles.js +1 -1
  346. package/dist/components/primitives/Typography/Typography.styles.js.map +1 -1
  347. package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
  348. package/dist/contexts/ThunderID/ThunderIDProvider.js +4 -1
  349. package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
  350. package/dist/models/config.d.ts +10 -1
  351. package/dist/models/config.d.ts.map +1 -1
  352. package/dist/styles/emotion.d.ts +36 -0
  353. package/dist/styles/emotion.d.ts.map +1 -0
  354. package/dist/styles/emotion.js +58 -0
  355. package/dist/styles/emotion.js.map +1 -0
  356. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAcceptInvite.cjs","names":["BaseAcceptInvite: FC<BaseAcceptInviteProps>","useThunderID","useTranslation","useTheme","customRenderers: ComponentRendererMap","ComponentRendererContext","styles: any","useStyles","challengeTokenRef: any","responseFieldErrors: FieldError[] | undefined","errors: Record<string, string>","touched: Record<string, boolean>","tokenValidationAttemptedRef: any","tempData: any","storageManager: any","handleError: any","errorMessage: string","extractErrorMessage","normalizeFlowResponseLocal: any","normalizeFlowResponse","components","response: any","handleInputChange: any","newErrors: any","handleInputBlur: any","validateForm: any","value: any","handleSubmit: any","validation: any","inputs: any","raw: any","purposes: any[]","ConsentConstants","payload: Record<string, any>","redirectURL: any","extractHeadings: any","title: string | undefined","subtitle: string | undefined","title","subtitle","filterHeadings: any","components: any","componentsWithoutHeadings: any","renderProps: BaseAcceptInviteRenderProps","CardPrimitive","Spinner","Typography","AlertPrimitive","Button","renderInviteUserComponents"],"sources":["../../../../../../src/components/presentation/auth/AcceptInvite/BaseAcceptInvite.tsx"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {cx} from '@emotion/css';\nimport {\n ConsentConstants,\n FieldError,\n FlowExecutionError,\n FlowMetadataResponse,\n Preferences,\n buildValidatorFromRules,\n} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode, useCallback, useContext, useEffect, useRef, useState} from 'react';\nimport useStyles from './BaseAcceptInvite.styles';\nimport ComponentRendererContext, {\n ComponentRendererMap,\n} from '../../../../contexts/ComponentRenderer/ComponentRendererContext';\nimport useTheme from '../../../../contexts/Theme/useTheme';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\nimport {useOAuthCallback} from '../../../../hooks/useOAuthCallback';\nimport useTranslation from '../../../../hooks/useTranslation';\nimport {normalizeFlowResponse, extractErrorMessage} from '../../../../utils/flowTransformer';\nimport {initiateOAuthRedirect} from '../../../../utils/oauth';\nimport AlertPrimitive from '../../../primitives/Alert/Alert';\nimport Button from '../../../primitives/Button/Button';\n// eslint-disable-next-line import/no-named-as-default\nimport CardPrimitive, {CardProps} from '../../../primitives/Card/Card';\nimport Spinner from '../../../primitives/Spinner/Spinner';\nimport Typography from '../../../primitives/Typography/Typography';\nimport {renderInviteUserComponents} from '../AuthOptionFactory';\n\n/**\n * Flow response structure from the backend.\n */\nexport interface AcceptInviteFlowResponse {\n challengeToken?: string;\n data?: {\n additionalData?: Record<string, string>;\n components?: any[];\n fieldErrors?: FieldError[];\n meta?: {\n components?: any[];\n };\n redirectURL?: string;\n };\n error?: FlowExecutionError;\n executionId: string;\n flowStatus: 'INCOMPLETE' | 'COMPLETE' | 'ERROR';\n type?: 'VIEW' | 'REDIRECTION';\n}\n\n/**\n * Render props for custom UI rendering of AcceptInvite.\n */\nexport interface BaseAcceptInviteRenderProps {\n /**\n * Additional data from the current flow step (e.g. consentPrompt for consent nodes).\n */\n additionalData: Record<string, any>;\n\n /**\n * Flow components from the current step.\n */\n components: any[];\n\n /**\n * API error (if any).\n */\n error?: Error | null;\n\n /**\n * Current flow ID from URL.\n */\n executionId?: string;\n\n /**\n * Field validation errors.\n */\n fieldErrors: Record<string, string>;\n\n /**\n * Navigate to sign in page.\n */\n goToSignIn?: () => void;\n\n /**\n * Function to handle input blur.\n */\n handleInputBlur: (name: string) => void;\n\n /**\n * Function to handle input changes.\n */\n handleInputChange: (name: string, value: string) => void;\n\n /**\n * Function to handle form submission.\n */\n handleSubmit: (component: any, data?: Record<string, any>) => Promise<void>;\n\n /**\n * Invite token from URL.\n */\n inviteToken?: string;\n\n /**\n * Whether the flow has completed successfully.\n */\n isComplete: boolean;\n\n /**\n * Loading state.\n */\n isLoading: boolean;\n\n /**\n * Whether the token validation failed.\n */\n isTokenInvalid: boolean;\n\n /**\n * Whether the form is valid.\n */\n isValid: boolean;\n\n /**\n * Whether the invite token is being validated.\n */\n isValidatingToken: boolean;\n\n /**\n * Flow metadata returned by the platform (v2 only). `null` while loading or unavailable.\n */\n meta: FlowMetadataResponse | null;\n\n /**\n * Subtitle for the current step.\n */\n subtitle?: string;\n\n /**\n * Title for the current step.\n */\n title?: string;\n\n /**\n * Touched fields.\n */\n touched: Record<string, boolean>;\n\n /**\n * Form values for the current step.\n */\n values: Record<string, string>;\n}\n\n/**\n * Props for the BaseAcceptInvite component.\n */\nexport interface BaseAcceptInviteProps {\n /**\n * Render props function for custom UI.\n * If not provided, default UI will be rendered.\n */\n children?: (props: BaseAcceptInviteRenderProps) => ReactNode;\n\n /**\n * Custom CSS class name.\n */\n className?: string;\n\n /**\n * Flow ID from the invite link URL.\n */\n executionId?: string;\n\n /**\n * Invite token from the invite link URL.\n */\n inviteToken?: string;\n\n /**\n * Callback when the flow completes successfully.\n */\n onComplete?: () => void;\n\n /**\n * Callback when an error occurs.\n */\n onError?: (error: Error) => void;\n\n /**\n * Callback when the flow state changes.\n */\n onFlowChange?: (response: AcceptInviteFlowResponse) => void;\n\n /**\n * Callback to navigate to sign in page.\n */\n onGoToSignIn?: () => void;\n\n /**\n * Function to submit flow step data.\n * This makes a request to the flow/execute endpoint.\n */\n onSubmit: (payload: Record<string, any>) => Promise<AcceptInviteFlowResponse>;\n\n /**\n * Component-level preferences to override global i18n and theme settings.\n * Preferences are deep-merged with global ones, with component preferences\n * taking precedence. Affects this component and all its descendants.\n */\n preferences?: Preferences;\n\n /**\n * Whether to show the subtitle.\n */\n showSubtitle?: boolean;\n\n /**\n * Whether to show the title.\n */\n showTitle?: boolean;\n\n /**\n * Size variant for the component.\n */\n size?: 'small' | 'medium' | 'large';\n\n /**\n * Theme variant for the component.\n */\n variant?: CardProps['variant'];\n}\n\n/**\n * Base component for accept invite flow (end-user).\n * Handles the flow logic for validating an invite token and setting a password.\n *\n * When no children are provided, renders a default UI with:\n * - Loading spinner during token validation\n * - Error alerts for invalid/expired tokens\n * - Password form with validation\n * - Success state with sign-in redirect\n *\n * Flow steps handled:\n * 1. Validate invite token (automatic on mount)\n * 2. Password input\n * 3. Flow completion\n */\nconst BaseAcceptInvite: FC<BaseAcceptInviteProps> = ({\n executionId,\n inviteToken,\n onSubmit,\n onComplete,\n onError,\n onFlowChange,\n onGoToSignIn,\n className = '',\n children,\n preferences,\n size = 'medium',\n variant = 'outlined',\n showTitle = true,\n showSubtitle = true,\n}: BaseAcceptInviteProps): ReactElement => {\n const {meta, isInitialized, getStorageManager, vendor} = useThunderID();\n const {t} = useTranslation(preferences?.i18n);\n const {theme} = useTheme();\n const customRenderers: ComponentRendererMap = useContext(ComponentRendererContext);\n const styles: any = useStyles(theme, theme.vars.colors.text.primary);\n const [isLoading, setIsLoading] = useState(false);\n const [isValidatingToken, setIsValidatingToken] = useState(true);\n const [isTokenInvalid, setIsTokenInvalid] = useState(false);\n const [isComplete, setIsComplete] = useState(false);\n const [currentFlow, setCurrentFlow] = useState<AcceptInviteFlowResponse | null>(null);\n const [apiError, setApiError] = useState<Error | null>(null);\n const [formValues, setFormValues] = useState<Record<string, string>>({});\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [touchedFields, setTouchedFields] = useState<Record<string, boolean>>({});\n const [isFormValid, setIsFormValid] = useState(true);\n const [isStorageReady, setIsStorageReady] = useState(false);\n const challengeTokenRef: any = useRef<string | null>(null);\n\n /**\n * Project server-side validation errors from the most recent flow response into\n * the local formErrors state. First error per field wins; affected fields are\n * marked touched so errors render immediately.\n */\n useEffect(() => {\n const responseFieldErrors: FieldError[] | undefined = (currentFlow?.data as any)?.fieldErrors;\n if (!responseFieldErrors || responseFieldErrors.length === 0) {\n return;\n }\n const errors: Record<string, string> = {};\n const touched: Record<string, boolean> = {};\n for (const fe of responseFieldErrors) {\n if (!(fe.identifier in errors)) {\n errors[fe.identifier] = fe.message;\n touched[fe.identifier] = true;\n }\n }\n setFormErrors(errors);\n setTouchedFields((prev: Record<string, boolean>) => ({...prev, ...touched}));\n }, [currentFlow]);\n\n const tokenValidationAttemptedRef: any = useRef(false);\n\n /**\n * Restore any challenge token persisted before an OAuth redirect.\n * Waits for SDK initialization before reading from storage.\n */\n useEffect(() => {\n if (!isInitialized) return;\n\n (async (): Promise<void> => {\n try {\n const storageManager: any = await getStorageManager();\n const tempData: any = await storageManager?.getTemporaryData();\n if (tempData?.challengeToken) {\n challengeTokenRef.current = tempData.challengeToken as string;\n }\n } finally {\n setIsStorageReady(true);\n }\n })();\n }, [isInitialized]);\n\n /**\n * Updates challengeTokenRef immediately (stale-closure safe) and persists via\n * the provider's StorageManager so the token survives OAuth redirects.\n */\n const setChallengeToken = async (challengeToken: string | null): Promise<void> => {\n challengeTokenRef.current = challengeToken;\n const storageManager: any = await getStorageManager();\n if (storageManager) {\n if (challengeToken) {\n await storageManager.setTemporaryDataParameter('challengeToken', challengeToken);\n } else {\n await storageManager.removeTemporaryDataParameter('challengeToken');\n }\n }\n };\n\n /**\n * Handle error responses and extract meaningful error messages.\n * Uses the transformer's extractErrorMessage function for consistency.\n */\n const handleError: any = useCallback(\n (error: any) => {\n const errorMessage: string = extractErrorMessage(error, t, 'components.acceptInvite.errors.generic');\n\n // Set the API error state\n setApiError(error instanceof Error ? error : new Error(errorMessage));\n\n // Call the onError callback if provided\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n },\n [t, onError],\n );\n\n /**\n * Normalize flow response to ensure component-driven format.\n * Transforms data.meta.components to data.components.\n */\n const normalizeFlowResponseLocal: any = useCallback(\n (response: AcceptInviteFlowResponse): AcceptInviteFlowResponse => {\n if (!response?.data?.meta?.components) {\n return response;\n }\n\n try {\n const {components} = normalizeFlowResponse(\n response,\n t,\n {\n defaultErrorKey: 'components.acceptInvite.errors.generic',\n resolveTranslations: false,\n },\n meta,\n );\n\n return {\n ...response,\n data: {\n ...response.data,\n components: components as any,\n },\n };\n } catch {\n // If transformer throws (e.g., error response), return as-is\n return response;\n }\n },\n [t, children],\n );\n\n /**\n * Handle OAuth callback when returning from OAuth provider.\n * This hook processes the authorization code and continues the flow.\n */\n useOAuthCallback({\n currentExecutionId: executionId ?? null,\n executionIdStorageKey: `${vendor}_execution_id`,\n isInitialized: isStorageReady,\n onComplete: () => {\n setIsValidatingToken(false);\n onComplete?.();\n },\n onError: (error: any) => {\n if (!error?.flowStatus) {\n setIsTokenInvalid(true);\n }\n setIsValidatingToken(false);\n handleError(error);\n },\n onFlowChange: (response: any) => {\n onFlowChange?.(response);\n if (response.flowStatus === 'COMPLETE') {\n setIsComplete(true);\n const completionComponents: any[] = response.data?.components || response.data?.meta?.components || [];\n if (completionComponents.length > 0) {\n setCurrentFlow(response);\n }\n } else {\n // Initialize currentFlow for next steps if not complete\n setCurrentFlow(response);\n setFormValues({});\n setFormErrors({});\n setTouchedFields({});\n }\n },\n onProcessingStart: () => {\n setIsValidatingToken(true);\n },\n onSubmit: async (payload: any) => {\n const rawResponse: any = await onSubmit({\n ...payload,\n ...(challengeTokenRef.current ? {challengeToken: challengeTokenRef.current} : {}),\n });\n const response: any = normalizeFlowResponseLocal(rawResponse);\n await setChallengeToken(response.challengeToken ?? null);\n return response;\n },\n tokenValidationAttemptedRef,\n });\n\n /**\n * Handle input value changes.\n */\n const handleInputChange: any = useCallback((name: string, value: string) => {\n setFormValues((prev: any) => ({...prev, [name]: value}));\n // Clear error when user starts typing\n setFormErrors((prev: any) => {\n const newErrors: any = {...prev};\n delete newErrors[name];\n return newErrors;\n });\n setIsFormValid(true);\n }, []);\n\n /**\n * Handle input blur.\n */\n const handleInputBlur: any = useCallback((name: string) => {\n setTouchedFields((prev: any) => ({...prev, [name]: true}));\n }, []);\n\n /**\n * Validate required fields based on components.\n */\n const validateForm: any = useCallback(\n (components: any[]): {errors: Record<string, string>; isValid: boolean} => {\n const errors: Record<string, string> = {};\n\n const validateComponents = (comps: any[]): any => {\n comps.forEach((comp: any) => {\n if (\n (comp.type === 'PASSWORD_INPUT' ||\n comp.type === 'TEXT_INPUT' ||\n comp.type === 'EMAIL_INPUT' ||\n comp.type === 'PHONE_INPUT' ||\n comp.type === 'OTP_INPUT' ||\n comp.type === 'DATE_INPUT') &&\n comp.ref\n ) {\n const value: any = formValues[comp.ref];\n if (comp.required && (!value || value.trim() === '')) {\n errors[comp.ref] = t('validations.required.field.error');\n } else if (value) {\n // Evaluate declarative validation rules from meta.components[].validation.\n const ruleValidator = buildValidatorFromRules(comp.validation);\n if (ruleValidator) {\n const message = ruleValidator(value);\n if (message) {\n errors[comp.ref] = t(message);\n }\n }\n }\n }\n if (comp.components && Array.isArray(comp.components)) {\n validateComponents(comp.components);\n }\n });\n };\n\n validateComponents(components);\n\n return {errors, isValid: Object.keys(errors).length === 0};\n },\n [formValues, t],\n );\n\n /**\n * Handle form submission.\n */\n const handleSubmit: any = useCallback(\n async (component: any, data?: Record<string, any>) => {\n if (!currentFlow) {\n return;\n }\n\n // Validate form before submission\n const components: any = currentFlow.data?.components || [];\n const validation: any = validateForm(components);\n\n if (!validation.isValid) {\n setIsFormValid(false);\n setFormErrors(validation.errors);\n // Mark all fields as touched\n const touched: Record<string, boolean> = {};\n Object.keys(validation.errors).forEach((key: any) => {\n touched[key] = true;\n });\n setTouchedFields((prev: any) => ({...prev, ...touched}));\n return;\n }\n\n setIsLoading(true);\n setApiError(null);\n\n try {\n // Build payload with form values\n const inputs: any = {...(data || formValues)};\n\n // Auto-compile consent_decisions if we are on a consent prompt step.\n // Mirrors the same logic in SignIn to ensure the server receives a\n // properly structured JSON payload rather than individual checkbox keys.\n const currentAdditionalData = (currentFlow?.data?.additionalData as Record<string, any>) ?? {};\n if (currentAdditionalData['consentPrompt']) {\n try {\n const raw: any = currentAdditionalData['consentPrompt'];\n const purposes: any[] = typeof raw === 'string' ? JSON.parse(raw) : raw.purposes || raw;\n const isDeny = component?.variant?.toLowerCase() !== 'primary';\n const decisions = {\n approved: !isDeny,\n ...(isDeny ? {reason: ConsentConstants.REASON_USER_DENIED} : {}),\n purposes: purposes.map((p: any) => ({\n approved: !isDeny,\n purposeName: p.purposeName,\n elements: [\n ...(p.essential || []).map((e: any) => ({approved: !isDeny, name: e.name})),\n ...(p.optional || []).map((e: any) => {\n const key = `__consent_opt__${p.purposeId}__${e.name}`;\n return {approved: !isDeny && inputs[key] === 'true', name: e.name};\n }),\n ],\n })),\n };\n inputs.consent_decisions = JSON.stringify(decisions);\n Object.keys(inputs).forEach((k: string) => {\n if (k.startsWith('__consent_opt__')) delete inputs[k];\n });\n } catch {\n // Leave inputs as-is if consent building fails\n }\n }\n\n const payload: Record<string, any> = {\n executionId: currentFlow.executionId,\n inputs,\n verbose: true,\n ...(challengeTokenRef.current ? {challengeToken: challengeTokenRef.current} : {}),\n };\n\n // Add action ID if component has one\n if (component?.id) {\n payload['action'] = component.id;\n }\n\n const rawResponse: any = await onSubmit(payload);\n const response: any = normalizeFlowResponseLocal(rawResponse);\n onFlowChange?.(response);\n\n await setChallengeToken(response.challengeToken ?? null);\n\n // Handle OAuth redirect response\n if (response.type === 'REDIRECTION') {\n const redirectURL: any = response.data?.redirectURL || response?.redirectURL;\n if (redirectURL && typeof window !== 'undefined') {\n // Initiate OAuth redirect with secure state management\n initiateOAuthRedirect(redirectURL, vendor);\n return;\n }\n }\n\n // Check for completion\n if (response.flowStatus === 'COMPLETE') {\n setIsComplete(true);\n const completionComponents: any[] = response.data?.components || response.data?.meta?.components || [];\n if (completionComponents.length > 0) {\n setCurrentFlow(response);\n } else {\n onComplete?.();\n }\n return;\n }\n\n // Check for error status\n if (response.flowStatus === 'ERROR') {\n handleError(response);\n return;\n }\n\n // Update current flow and reset form state for next step, preserving input values\n setCurrentFlow(response);\n setFormErrors({});\n setTouchedFields({});\n\n // Display error from INCOMPLETE response\n if (response?.error) {\n handleError(response);\n }\n } catch (err) {\n handleError(err);\n } finally {\n setIsLoading(false);\n }\n },\n [\n currentFlow,\n formValues,\n validateForm,\n onSubmit,\n onFlowChange,\n onComplete,\n handleError,\n normalizeFlowResponseLocal,\n ],\n );\n\n /**\n * reset form values, errors, and touched fields to initial state\n */\n const resetForm = useCallback(() => {\n setFormValues({});\n setFormErrors({});\n setTouchedFields({});\n }, []);\n\n /**\n * Validate invite token on component mount.\n */\n useEffect(() => {\n // Skip validation if already validated\n if (tokenValidationAttemptedRef.current) {\n return;\n }\n\n // If an OAuth code is present, this is a return from an OAuth redirect.\n // useOAuthCallback will handle the code — skip the initial invite validation.\n const urlParams: URLSearchParams = new URLSearchParams(window.location.search);\n if (urlParams.get('code')) {\n return;\n }\n\n // Validate required params for initial invite link\n if (!executionId || !inviteToken) {\n setIsValidatingToken(false);\n setIsTokenInvalid(true);\n handleError(new Error('Invalid invite link. Missing executionId or inviteToken.'));\n return;\n }\n\n tokenValidationAttemptedRef.current = true;\n\n (async (): Promise<void> => {\n setIsValidatingToken(true);\n setApiError(null);\n\n try {\n // Store executionId in sessionStorage for OAuth callback\n if (executionId) {\n sessionStorage.setItem(`${vendor}_execution_id`, executionId);\n }\n\n // Send the invite token to validate and continue the flow\n const payload: any = {\n executionId,\n inputs: {\n inviteToken,\n },\n verbose: true,\n };\n\n const rawResponse: any = await onSubmit(payload);\n const response: any = normalizeFlowResponseLocal(rawResponse);\n onFlowChange?.(response);\n\n await setChallengeToken(response.challengeToken ?? null);\n\n // Check for error (invalid token)\n if (response.flowStatus === 'ERROR') {\n setIsTokenInvalid(true);\n handleError(response);\n return;\n }\n\n // Token is valid, show the password form\n setCurrentFlow(response);\n\n // Display error from INCOMPLETE response\n if (response?.error) {\n handleError(response);\n }\n } catch (err) {\n setIsTokenInvalid(true);\n handleError(err);\n } finally {\n setIsValidatingToken(false);\n }\n })();\n }, [executionId, inviteToken, onSubmit, onFlowChange, handleError, normalizeFlowResponseLocal]);\n\n /**\n * Extract title and subtitle from components.\n */\n const extractHeadings: any = useCallback((components: any[]): {subtitle?: string; title?: string} => {\n let title: string | undefined;\n let subtitle: string | undefined;\n\n components.forEach((comp: any) => {\n if (comp.type === 'TEXT') {\n if (comp.variant === 'HEADING_1' && !title) {\n title = comp.label;\n } else if ((comp.variant === 'HEADING_2' || comp.variant === 'SUBTITLE_1') && !subtitle) {\n subtitle = comp.label;\n }\n }\n });\n\n return {subtitle, title};\n }, []);\n\n /**\n * Filter out heading components for default rendering.\n */\n const filterHeadings: any = useCallback(\n (components: any[]): any[] =>\n components.filter(\n (comp: any) => !(comp.type === 'TEXT' && (comp.variant === 'HEADING_1' || comp.variant === 'HEADING_2')),\n ),\n [],\n );\n\n // Get components from normalized response, with fallback to meta.components\n const components: any = currentFlow?.data?.components || currentFlow?.data?.meta?.components || [];\n const {title, subtitle} = extractHeadings(components);\n const componentsWithoutHeadings: any = filterHeadings(components);\n const additionalData: Record<string, any> = (currentFlow?.data?.additionalData as Record<string, any>) ?? {};\n\n // Render props\n const renderProps: BaseAcceptInviteRenderProps = {\n additionalData,\n components,\n error: apiError,\n executionId,\n fieldErrors: formErrors,\n goToSignIn: onGoToSignIn,\n handleInputBlur,\n handleInputChange,\n handleSubmit,\n inviteToken,\n isComplete,\n isLoading,\n isTokenInvalid,\n isValid: isFormValid,\n isValidatingToken,\n meta,\n subtitle,\n title,\n touched: touchedFields,\n values: formValues,\n };\n\n // If children render prop is provided, use it for custom UI\n if (children) {\n return <div className={className}>{children(renderProps)}</div>;\n }\n\n // Default rendering\n\n // Loading state during token validation\n if (isValidatingToken) {\n return (\n <CardPrimitive className={cx(className, styles.card)} variant={variant}>\n <CardPrimitive.Content>\n <div style={{alignItems: 'center', display: 'flex', flexDirection: 'column', gap: '1rem', padding: '2rem'}}>\n <Spinner size=\"medium\" />\n <Typography variant=\"body1\">Validating your invite link...</Typography>\n </div>\n </CardPrimitive.Content>\n </CardPrimitive>\n );\n }\n\n // Invalid token state\n if (isTokenInvalid) {\n return (\n <CardPrimitive className={cx(className, styles.card)} variant={variant}>\n <CardPrimitive.Header className={styles.header}>\n <CardPrimitive.Title level={2} className={styles.title}>\n Invalid Invite Link\n </CardPrimitive.Title>\n </CardPrimitive.Header>\n <CardPrimitive.Content>\n <AlertPrimitive variant=\"error\">\n <AlertPrimitive.Title>Unable to verify invite</AlertPrimitive.Title>\n <AlertPrimitive.Description>\n {apiError?.message ||\n 'This invite link is invalid or has expired. Please contact your administrator for a new invite.'}\n </AlertPrimitive.Description>\n </AlertPrimitive>\n {onGoToSignIn && (\n <div style={{display: 'flex', justifyContent: 'center', marginTop: '1.5rem'}}>\n <Button variant=\"outline\" onClick={onGoToSignIn}>\n Go to Sign In\n </Button>\n </div>\n )}\n </CardPrimitive.Content>\n </CardPrimitive>\n );\n }\n\n // Flow components (password form)\n return (\n <CardPrimitive className={cx(className, styles.card)} variant={variant}>\n {(showTitle || showSubtitle) && (title || subtitle) && (\n <CardPrimitive.Header className={styles.header}>\n {showTitle && title && (\n <CardPrimitive.Title level={2} className={styles.title}>\n {title}\n </CardPrimitive.Title>\n )}\n {showSubtitle && subtitle && (\n <Typography variant=\"body1\" className={styles.subtitle}>\n {subtitle}\n </Typography>\n )}\n </CardPrimitive.Header>\n )}\n <CardPrimitive.Content>\n {apiError && (\n <div style={{marginBottom: '1rem'}}>\n <AlertPrimitive variant=\"error\">\n <AlertPrimitive.Description>{apiError.message}</AlertPrimitive.Description>\n </AlertPrimitive>\n </div>\n )}\n <div>\n {componentsWithoutHeadings && componentsWithoutHeadings.length > 0\n ? renderInviteUserComponents(\n componentsWithoutHeadings,\n formValues,\n touchedFields,\n formErrors,\n isLoading,\n isFormValid,\n resetForm,\n handleInputChange,\n {\n _customRenderers: customRenderers,\n _theme: theme,\n onInputBlur: handleInputBlur,\n onSubmit: handleSubmit,\n size,\n variant,\n },\n )\n : !isLoading && (\n <AlertPrimitive variant=\"warning\">\n <Typography variant=\"body1\">No form components available</Typography>\n </AlertPrimitive>\n )}\n {isLoading && (\n <div style={{display: 'flex', justifyContent: 'center', padding: '1rem'}}>\n <Spinner size=\"small\" />\n </div>\n )}\n </div>\n {onGoToSignIn && (\n <div style={{marginTop: '1.5rem', textAlign: 'center'}}>\n <Typography variant=\"body2\">\n Already have an account?{' '}\n <Button variant=\"text\" onClick={onGoToSignIn} style={{minWidth: 'auto', padding: 0}}>\n Sign In\n </Button>\n </Typography>\n </div>\n )}\n </CardPrimitive.Content>\n </CardPrimitive>\n );\n};\n\nexport default BaseAcceptInvite;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BaseAcceptInvite.cjs","names":["BaseAcceptInvite: FC<BaseAcceptInviteProps>","useThunderID","useTranslation","useTheme","customRenderers: ComponentRendererMap","ComponentRendererContext","styles: any","useStyles","challengeTokenRef: any","responseFieldErrors: FieldError[] | undefined","errors: Record<string, string>","touched: Record<string, boolean>","tokenValidationAttemptedRef: any","tempData: any","storageManager: any","handleError: any","errorMessage: string","extractErrorMessage","normalizeFlowResponseLocal: any","normalizeFlowResponse","components","response: any","handleInputChange: any","newErrors: any","handleInputBlur: any","validateForm: any","value: any","handleSubmit: any","validation: any","inputs: any","raw: any","purposes: any[]","ConsentConstants","payload: Record<string, any>","redirectURL: any","extractHeadings: any","title: string | undefined","subtitle: string | undefined","title","subtitle","filterHeadings: any","components: any","componentsWithoutHeadings: any","renderProps: BaseAcceptInviteRenderProps","CardPrimitive","cx","Spinner","Typography","AlertPrimitive","Button","renderInviteUserComponents"],"sources":["../../../../../../src/components/presentation/auth/AcceptInvite/BaseAcceptInvite.tsx"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ConsentConstants,\n FieldError,\n FlowExecutionError,\n FlowMetadataResponse,\n Preferences,\n buildValidatorFromRules,\n} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode, useCallback, useContext, useEffect, useRef, useState} from 'react';\nimport useStyles from './BaseAcceptInvite.styles';\nimport ComponentRendererContext, {\n ComponentRendererMap,\n} from '../../../../contexts/ComponentRenderer/ComponentRendererContext';\nimport useTheme from '../../../../contexts/Theme/useTheme';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\nimport {useOAuthCallback} from '../../../../hooks/useOAuthCallback';\nimport useTranslation from '../../../../hooks/useTranslation';\nimport {cx} from '../../../../styles/emotion';\nimport {normalizeFlowResponse, extractErrorMessage} from '../../../../utils/flowTransformer';\nimport {initiateOAuthRedirect} from '../../../../utils/oauth';\nimport AlertPrimitive from '../../../primitives/Alert/Alert';\nimport Button from '../../../primitives/Button/Button';\n// eslint-disable-next-line import/no-named-as-default\nimport CardPrimitive, {CardProps} from '../../../primitives/Card/Card';\nimport Spinner from '../../../primitives/Spinner/Spinner';\nimport Typography from '../../../primitives/Typography/Typography';\nimport {renderInviteUserComponents} from '../AuthOptionFactory';\n\n/**\n * Flow response structure from the backend.\n */\nexport interface AcceptInviteFlowResponse {\n challengeToken?: string;\n data?: {\n additionalData?: Record<string, string>;\n components?: any[];\n fieldErrors?: FieldError[];\n meta?: {\n components?: any[];\n };\n redirectURL?: string;\n };\n error?: FlowExecutionError;\n executionId: string;\n flowStatus: 'INCOMPLETE' | 'COMPLETE' | 'ERROR';\n type?: 'VIEW' | 'REDIRECTION';\n}\n\n/**\n * Render props for custom UI rendering of AcceptInvite.\n */\nexport interface BaseAcceptInviteRenderProps {\n /**\n * Additional data from the current flow step (e.g. consentPrompt for consent nodes).\n */\n additionalData: Record<string, any>;\n\n /**\n * Flow components from the current step.\n */\n components: any[];\n\n /**\n * API error (if any).\n */\n error?: Error | null;\n\n /**\n * Current flow ID from URL.\n */\n executionId?: string;\n\n /**\n * Field validation errors.\n */\n fieldErrors: Record<string, string>;\n\n /**\n * Navigate to sign in page.\n */\n goToSignIn?: () => void;\n\n /**\n * Function to handle input blur.\n */\n handleInputBlur: (name: string) => void;\n\n /**\n * Function to handle input changes.\n */\n handleInputChange: (name: string, value: string) => void;\n\n /**\n * Function to handle form submission.\n */\n handleSubmit: (component: any, data?: Record<string, any>) => Promise<void>;\n\n /**\n * Invite token from URL.\n */\n inviteToken?: string;\n\n /**\n * Whether the flow has completed successfully.\n */\n isComplete: boolean;\n\n /**\n * Loading state.\n */\n isLoading: boolean;\n\n /**\n * Whether the token validation failed.\n */\n isTokenInvalid: boolean;\n\n /**\n * Whether the form is valid.\n */\n isValid: boolean;\n\n /**\n * Whether the invite token is being validated.\n */\n isValidatingToken: boolean;\n\n /**\n * Flow metadata returned by the platform (v2 only). `null` while loading or unavailable.\n */\n meta: FlowMetadataResponse | null;\n\n /**\n * Subtitle for the current step.\n */\n subtitle?: string;\n\n /**\n * Title for the current step.\n */\n title?: string;\n\n /**\n * Touched fields.\n */\n touched: Record<string, boolean>;\n\n /**\n * Form values for the current step.\n */\n values: Record<string, string>;\n}\n\n/**\n * Props for the BaseAcceptInvite component.\n */\nexport interface BaseAcceptInviteProps {\n /**\n * Render props function for custom UI.\n * If not provided, default UI will be rendered.\n */\n children?: (props: BaseAcceptInviteRenderProps) => ReactNode;\n\n /**\n * Custom CSS class name.\n */\n className?: string;\n\n /**\n * Flow ID from the invite link URL.\n */\n executionId?: string;\n\n /**\n * Invite token from the invite link URL.\n */\n inviteToken?: string;\n\n /**\n * Callback when the flow completes successfully.\n */\n onComplete?: () => void;\n\n /**\n * Callback when an error occurs.\n */\n onError?: (error: Error) => void;\n\n /**\n * Callback when the flow state changes.\n */\n onFlowChange?: (response: AcceptInviteFlowResponse) => void;\n\n /**\n * Callback to navigate to sign in page.\n */\n onGoToSignIn?: () => void;\n\n /**\n * Function to submit flow step data.\n * This makes a request to the flow/execute endpoint.\n */\n onSubmit: (payload: Record<string, any>) => Promise<AcceptInviteFlowResponse>;\n\n /**\n * Component-level preferences to override global i18n and theme settings.\n * Preferences are deep-merged with global ones, with component preferences\n * taking precedence. Affects this component and all its descendants.\n */\n preferences?: Preferences;\n\n /**\n * Whether to show the subtitle.\n */\n showSubtitle?: boolean;\n\n /**\n * Whether to show the title.\n */\n showTitle?: boolean;\n\n /**\n * Size variant for the component.\n */\n size?: 'small' | 'medium' | 'large';\n\n /**\n * Theme variant for the component.\n */\n variant?: CardProps['variant'];\n}\n\n/**\n * Base component for accept invite flow (end-user).\n * Handles the flow logic for validating an invite token and setting a password.\n *\n * When no children are provided, renders a default UI with:\n * - Loading spinner during token validation\n * - Error alerts for invalid/expired tokens\n * - Password form with validation\n * - Success state with sign-in redirect\n *\n * Flow steps handled:\n * 1. Validate invite token (automatic on mount)\n * 2. Password input\n * 3. Flow completion\n */\nconst BaseAcceptInvite: FC<BaseAcceptInviteProps> = ({\n executionId,\n inviteToken,\n onSubmit,\n onComplete,\n onError,\n onFlowChange,\n onGoToSignIn,\n className = '',\n children,\n preferences,\n size = 'medium',\n variant = 'outlined',\n showTitle = true,\n showSubtitle = true,\n}: BaseAcceptInviteProps): ReactElement => {\n const {meta, isInitialized, getStorageManager, vendor} = useThunderID();\n const {t} = useTranslation(preferences?.i18n);\n const {theme} = useTheme();\n const customRenderers: ComponentRendererMap = useContext(ComponentRendererContext);\n const styles: any = useStyles(theme, theme.vars.colors.text.primary);\n const [isLoading, setIsLoading] = useState(false);\n const [isValidatingToken, setIsValidatingToken] = useState(true);\n const [isTokenInvalid, setIsTokenInvalid] = useState(false);\n const [isComplete, setIsComplete] = useState(false);\n const [currentFlow, setCurrentFlow] = useState<AcceptInviteFlowResponse | null>(null);\n const [apiError, setApiError] = useState<Error | null>(null);\n const [formValues, setFormValues] = useState<Record<string, string>>({});\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [touchedFields, setTouchedFields] = useState<Record<string, boolean>>({});\n const [isFormValid, setIsFormValid] = useState(true);\n const [isStorageReady, setIsStorageReady] = useState(false);\n const challengeTokenRef: any = useRef<string | null>(null);\n\n /**\n * Project server-side validation errors from the most recent flow response into\n * the local formErrors state. First error per field wins; affected fields are\n * marked touched so errors render immediately.\n */\n useEffect(() => {\n const responseFieldErrors: FieldError[] | undefined = (currentFlow?.data as any)?.fieldErrors;\n if (!responseFieldErrors || responseFieldErrors.length === 0) {\n return;\n }\n const errors: Record<string, string> = {};\n const touched: Record<string, boolean> = {};\n for (const fe of responseFieldErrors) {\n if (!(fe.identifier in errors)) {\n errors[fe.identifier] = fe.message;\n touched[fe.identifier] = true;\n }\n }\n setFormErrors(errors);\n setTouchedFields((prev: Record<string, boolean>) => ({...prev, ...touched}));\n }, [currentFlow]);\n\n const tokenValidationAttemptedRef: any = useRef(false);\n\n /**\n * Restore any challenge token persisted before an OAuth redirect.\n * Waits for SDK initialization before reading from storage.\n */\n useEffect(() => {\n if (!isInitialized) return;\n\n (async (): Promise<void> => {\n try {\n const storageManager: any = await getStorageManager();\n const tempData: any = await storageManager?.getTemporaryData();\n if (tempData?.challengeToken) {\n challengeTokenRef.current = tempData.challengeToken as string;\n }\n } finally {\n setIsStorageReady(true);\n }\n })();\n }, [isInitialized]);\n\n /**\n * Updates challengeTokenRef immediately (stale-closure safe) and persists via\n * the provider's StorageManager so the token survives OAuth redirects.\n */\n const setChallengeToken = async (challengeToken: string | null): Promise<void> => {\n challengeTokenRef.current = challengeToken;\n const storageManager: any = await getStorageManager();\n if (storageManager) {\n if (challengeToken) {\n await storageManager.setTemporaryDataParameter('challengeToken', challengeToken);\n } else {\n await storageManager.removeTemporaryDataParameter('challengeToken');\n }\n }\n };\n\n /**\n * Handle error responses and extract meaningful error messages.\n * Uses the transformer's extractErrorMessage function for consistency.\n */\n const handleError: any = useCallback(\n (error: any) => {\n const errorMessage: string = extractErrorMessage(error, t, 'components.acceptInvite.errors.generic');\n\n // Set the API error state\n setApiError(error instanceof Error ? error : new Error(errorMessage));\n\n // Call the onError callback if provided\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n },\n [t, onError],\n );\n\n /**\n * Normalize flow response to ensure component-driven format.\n * Transforms data.meta.components to data.components.\n */\n const normalizeFlowResponseLocal: any = useCallback(\n (response: AcceptInviteFlowResponse): AcceptInviteFlowResponse => {\n if (!response?.data?.meta?.components) {\n return response;\n }\n\n try {\n const {components} = normalizeFlowResponse(\n response,\n t,\n {\n defaultErrorKey: 'components.acceptInvite.errors.generic',\n resolveTranslations: false,\n },\n meta,\n );\n\n return {\n ...response,\n data: {\n ...response.data,\n components: components as any,\n },\n };\n } catch {\n // If transformer throws (e.g., error response), return as-is\n return response;\n }\n },\n [t, children],\n );\n\n /**\n * Handle OAuth callback when returning from OAuth provider.\n * This hook processes the authorization code and continues the flow.\n */\n useOAuthCallback({\n currentExecutionId: executionId ?? null,\n executionIdStorageKey: `${vendor}_execution_id`,\n isInitialized: isStorageReady,\n onComplete: () => {\n setIsValidatingToken(false);\n onComplete?.();\n },\n onError: (error: any) => {\n if (!error?.flowStatus) {\n setIsTokenInvalid(true);\n }\n setIsValidatingToken(false);\n handleError(error);\n },\n onFlowChange: (response: any) => {\n onFlowChange?.(response);\n if (response.flowStatus === 'COMPLETE') {\n setIsComplete(true);\n const completionComponents: any[] = response.data?.components || response.data?.meta?.components || [];\n if (completionComponents.length > 0) {\n setCurrentFlow(response);\n }\n } else {\n // Initialize currentFlow for next steps if not complete\n setCurrentFlow(response);\n setFormValues({});\n setFormErrors({});\n setTouchedFields({});\n }\n },\n onProcessingStart: () => {\n setIsValidatingToken(true);\n },\n onSubmit: async (payload: any) => {\n const rawResponse: any = await onSubmit({\n ...payload,\n ...(challengeTokenRef.current ? {challengeToken: challengeTokenRef.current} : {}),\n });\n const response: any = normalizeFlowResponseLocal(rawResponse);\n await setChallengeToken(response.challengeToken ?? null);\n return response;\n },\n tokenValidationAttemptedRef,\n });\n\n /**\n * Handle input value changes.\n */\n const handleInputChange: any = useCallback((name: string, value: string) => {\n setFormValues((prev: any) => ({...prev, [name]: value}));\n // Clear error when user starts typing\n setFormErrors((prev: any) => {\n const newErrors: any = {...prev};\n delete newErrors[name];\n return newErrors;\n });\n setIsFormValid(true);\n }, []);\n\n /**\n * Handle input blur.\n */\n const handleInputBlur: any = useCallback((name: string) => {\n setTouchedFields((prev: any) => ({...prev, [name]: true}));\n }, []);\n\n /**\n * Validate required fields based on components.\n */\n const validateForm: any = useCallback(\n (components: any[]): {errors: Record<string, string>; isValid: boolean} => {\n const errors: Record<string, string> = {};\n\n const validateComponents = (comps: any[]): any => {\n comps.forEach((comp: any) => {\n if (\n (comp.type === 'PASSWORD_INPUT' ||\n comp.type === 'TEXT_INPUT' ||\n comp.type === 'EMAIL_INPUT' ||\n comp.type === 'PHONE_INPUT' ||\n comp.type === 'OTP_INPUT' ||\n comp.type === 'DATE_INPUT') &&\n comp.ref\n ) {\n const value: any = formValues[comp.ref];\n if (comp.required && (!value || value.trim() === '')) {\n errors[comp.ref] = t('validations.required.field.error');\n } else if (value) {\n // Evaluate declarative validation rules from meta.components[].validation.\n const ruleValidator = buildValidatorFromRules(comp.validation);\n if (ruleValidator) {\n const message = ruleValidator(value);\n if (message) {\n errors[comp.ref] = t(message);\n }\n }\n }\n }\n if (comp.components && Array.isArray(comp.components)) {\n validateComponents(comp.components);\n }\n });\n };\n\n validateComponents(components);\n\n return {errors, isValid: Object.keys(errors).length === 0};\n },\n [formValues, t],\n );\n\n /**\n * Handle form submission.\n */\n const handleSubmit: any = useCallback(\n async (component: any, data?: Record<string, any>) => {\n if (!currentFlow) {\n return;\n }\n\n // Validate form before submission\n const components: any = currentFlow.data?.components || [];\n const validation: any = validateForm(components);\n\n if (!validation.isValid) {\n setIsFormValid(false);\n setFormErrors(validation.errors);\n // Mark all fields as touched\n const touched: Record<string, boolean> = {};\n Object.keys(validation.errors).forEach((key: any) => {\n touched[key] = true;\n });\n setTouchedFields((prev: any) => ({...prev, ...touched}));\n return;\n }\n\n setIsLoading(true);\n setApiError(null);\n\n try {\n // Build payload with form values\n const inputs: any = {...(data || formValues)};\n\n // Auto-compile consent_decisions if we are on a consent prompt step.\n // Mirrors the same logic in SignIn to ensure the server receives a\n // properly structured JSON payload rather than individual checkbox keys.\n const currentAdditionalData = (currentFlow?.data?.additionalData as Record<string, any>) ?? {};\n if (currentAdditionalData['consentPrompt']) {\n try {\n const raw: any = currentAdditionalData['consentPrompt'];\n const purposes: any[] = typeof raw === 'string' ? JSON.parse(raw) : raw.purposes || raw;\n const isDeny = component?.variant?.toLowerCase() !== 'primary';\n const decisions = {\n approved: !isDeny,\n ...(isDeny ? {reason: ConsentConstants.REASON_USER_DENIED} : {}),\n purposes: purposes.map((p: any) => ({\n approved: !isDeny,\n purposeName: p.purposeName,\n elements: [\n ...(p.essential || []).map((e: any) => ({approved: !isDeny, name: e.name})),\n ...(p.optional || []).map((e: any) => {\n const key = `__consent_opt__${p.purposeId}__${e.name}`;\n return {approved: !isDeny && inputs[key] === 'true', name: e.name};\n }),\n ],\n })),\n };\n inputs.consent_decisions = JSON.stringify(decisions);\n Object.keys(inputs).forEach((k: string) => {\n if (k.startsWith('__consent_opt__')) delete inputs[k];\n });\n } catch {\n // Leave inputs as-is if consent building fails\n }\n }\n\n const payload: Record<string, any> = {\n executionId: currentFlow.executionId,\n inputs,\n verbose: true,\n ...(challengeTokenRef.current ? {challengeToken: challengeTokenRef.current} : {}),\n };\n\n // Add action ID if component has one\n if (component?.id) {\n payload['action'] = component.id;\n }\n\n const rawResponse: any = await onSubmit(payload);\n const response: any = normalizeFlowResponseLocal(rawResponse);\n onFlowChange?.(response);\n\n await setChallengeToken(response.challengeToken ?? null);\n\n // Handle OAuth redirect response\n if (response.type === 'REDIRECTION') {\n const redirectURL: any = response.data?.redirectURL || response?.redirectURL;\n if (redirectURL && typeof window !== 'undefined') {\n // Initiate OAuth redirect with secure state management\n initiateOAuthRedirect(redirectURL, vendor);\n return;\n }\n }\n\n // Check for completion\n if (response.flowStatus === 'COMPLETE') {\n setIsComplete(true);\n const completionComponents: any[] = response.data?.components || response.data?.meta?.components || [];\n if (completionComponents.length > 0) {\n setCurrentFlow(response);\n } else {\n onComplete?.();\n }\n return;\n }\n\n // Check for error status\n if (response.flowStatus === 'ERROR') {\n handleError(response);\n return;\n }\n\n // Update current flow and reset form state for next step, preserving input values\n setCurrentFlow(response);\n setFormErrors({});\n setTouchedFields({});\n\n // Display error from INCOMPLETE response\n if (response?.error) {\n handleError(response);\n }\n } catch (err) {\n handleError(err);\n } finally {\n setIsLoading(false);\n }\n },\n [\n currentFlow,\n formValues,\n validateForm,\n onSubmit,\n onFlowChange,\n onComplete,\n handleError,\n normalizeFlowResponseLocal,\n ],\n );\n\n /**\n * reset form values, errors, and touched fields to initial state\n */\n const resetForm = useCallback(() => {\n setFormValues({});\n setFormErrors({});\n setTouchedFields({});\n }, []);\n\n /**\n * Validate invite token on component mount.\n */\n useEffect(() => {\n // Skip validation if already validated\n if (tokenValidationAttemptedRef.current) {\n return;\n }\n\n // If an OAuth code is present, this is a return from an OAuth redirect.\n // useOAuthCallback will handle the code — skip the initial invite validation.\n const urlParams: URLSearchParams = new URLSearchParams(window.location.search);\n if (urlParams.get('code')) {\n return;\n }\n\n // Validate required params for initial invite link\n if (!executionId || !inviteToken) {\n setIsValidatingToken(false);\n setIsTokenInvalid(true);\n handleError(new Error('Invalid invite link. Missing executionId or inviteToken.'));\n return;\n }\n\n tokenValidationAttemptedRef.current = true;\n\n (async (): Promise<void> => {\n setIsValidatingToken(true);\n setApiError(null);\n\n try {\n // Store executionId in sessionStorage for OAuth callback\n if (executionId) {\n sessionStorage.setItem(`${vendor}_execution_id`, executionId);\n }\n\n // Send the invite token to validate and continue the flow\n const payload: any = {\n executionId,\n inputs: {\n inviteToken,\n },\n verbose: true,\n };\n\n const rawResponse: any = await onSubmit(payload);\n const response: any = normalizeFlowResponseLocal(rawResponse);\n onFlowChange?.(response);\n\n await setChallengeToken(response.challengeToken ?? null);\n\n // Check for error (invalid token)\n if (response.flowStatus === 'ERROR') {\n setIsTokenInvalid(true);\n handleError(response);\n return;\n }\n\n // Token is valid, show the password form\n setCurrentFlow(response);\n\n // Display error from INCOMPLETE response\n if (response?.error) {\n handleError(response);\n }\n } catch (err) {\n setIsTokenInvalid(true);\n handleError(err);\n } finally {\n setIsValidatingToken(false);\n }\n })();\n }, [executionId, inviteToken, onSubmit, onFlowChange, handleError, normalizeFlowResponseLocal]);\n\n /**\n * Extract title and subtitle from components.\n */\n const extractHeadings: any = useCallback((components: any[]): {subtitle?: string; title?: string} => {\n let title: string | undefined;\n let subtitle: string | undefined;\n\n components.forEach((comp: any) => {\n if (comp.type === 'TEXT') {\n if (comp.variant === 'HEADING_1' && !title) {\n title = comp.label;\n } else if ((comp.variant === 'HEADING_2' || comp.variant === 'SUBTITLE_1') && !subtitle) {\n subtitle = comp.label;\n }\n }\n });\n\n return {subtitle, title};\n }, []);\n\n /**\n * Filter out heading components for default rendering.\n */\n const filterHeadings: any = useCallback(\n (components: any[]): any[] =>\n components.filter(\n (comp: any) => !(comp.type === 'TEXT' && (comp.variant === 'HEADING_1' || comp.variant === 'HEADING_2')),\n ),\n [],\n );\n\n // Get components from normalized response, with fallback to meta.components\n const components: any = currentFlow?.data?.components || currentFlow?.data?.meta?.components || [];\n const {title, subtitle} = extractHeadings(components);\n const componentsWithoutHeadings: any = filterHeadings(components);\n const additionalData: Record<string, any> = (currentFlow?.data?.additionalData as Record<string, any>) ?? {};\n\n // Render props\n const renderProps: BaseAcceptInviteRenderProps = {\n additionalData,\n components,\n error: apiError,\n executionId,\n fieldErrors: formErrors,\n goToSignIn: onGoToSignIn,\n handleInputBlur,\n handleInputChange,\n handleSubmit,\n inviteToken,\n isComplete,\n isLoading,\n isTokenInvalid,\n isValid: isFormValid,\n isValidatingToken,\n meta,\n subtitle,\n title,\n touched: touchedFields,\n values: formValues,\n };\n\n // If children render prop is provided, use it for custom UI\n if (children) {\n return <div className={className}>{children(renderProps)}</div>;\n }\n\n // Default rendering\n\n // Loading state during token validation\n if (isValidatingToken) {\n return (\n <CardPrimitive className={cx(className, styles.card)} variant={variant}>\n <CardPrimitive.Content>\n <div className={(styles as Record<string, string>)['tokenValidationContainer']}>\n <Spinner size=\"medium\" />\n <Typography variant=\"body1\">Validating your invite link...</Typography>\n </div>\n </CardPrimitive.Content>\n </CardPrimitive>\n );\n }\n\n // Invalid token state\n if (isTokenInvalid) {\n return (\n <CardPrimitive className={cx(className, styles.card)} variant={variant}>\n <CardPrimitive.Header className={styles.header}>\n <CardPrimitive.Title level={2} className={styles.title}>\n Invalid Invite Link\n </CardPrimitive.Title>\n </CardPrimitive.Header>\n <CardPrimitive.Content>\n <AlertPrimitive variant=\"error\">\n <AlertPrimitive.Title>Unable to verify invite</AlertPrimitive.Title>\n <AlertPrimitive.Description>\n {apiError?.message ||\n 'This invite link is invalid or has expired. Please contact your administrator for a new invite.'}\n </AlertPrimitive.Description>\n </AlertPrimitive>\n {onGoToSignIn && (\n <div className={(styles as Record<string, string>)['goToSignInContainer']}>\n <Button variant=\"outline\" onClick={onGoToSignIn}>\n Go to Sign In\n </Button>\n </div>\n )}\n </CardPrimitive.Content>\n </CardPrimitive>\n );\n }\n\n // Flow components (password form)\n return (\n <CardPrimitive className={cx(className, styles.card)} variant={variant}>\n {(showTitle || showSubtitle) && (title || subtitle) && (\n <CardPrimitive.Header className={styles.header}>\n {showTitle && title && (\n <CardPrimitive.Title level={2} className={styles.title}>\n {title}\n </CardPrimitive.Title>\n )}\n {showSubtitle && subtitle && (\n <Typography variant=\"body1\" className={styles.subtitle}>\n {subtitle}\n </Typography>\n )}\n </CardPrimitive.Header>\n )}\n <CardPrimitive.Content>\n {apiError && (\n <div className={(styles as Record<string, string>)['errorContainer']}>\n <AlertPrimitive variant=\"error\">\n <AlertPrimitive.Description>{apiError.message}</AlertPrimitive.Description>\n </AlertPrimitive>\n </div>\n )}\n <div>\n {componentsWithoutHeadings && componentsWithoutHeadings.length > 0\n ? renderInviteUserComponents(\n componentsWithoutHeadings,\n formValues,\n touchedFields,\n formErrors,\n isLoading,\n isFormValid,\n resetForm,\n handleInputChange,\n {\n _customRenderers: customRenderers,\n _theme: theme,\n onInputBlur: handleInputBlur,\n onSubmit: handleSubmit,\n size,\n variant,\n },\n )\n : !isLoading && (\n <AlertPrimitive variant=\"warning\">\n <Typography variant=\"body1\">No form components available</Typography>\n </AlertPrimitive>\n )}\n {isLoading && (\n <div className={(styles as Record<string, string>)['centeredSpinnerContainerSmall']}>\n <Spinner size=\"small\" />\n </div>\n )}\n </div>\n {onGoToSignIn && (\n <div className={(styles as Record<string, string>)['alreadyHaveAccountContainer']}>\n <Typography variant=\"body2\">\n Already have an account?{' '}\n <Button\n variant=\"text\"\n onClick={onGoToSignIn}\n className={(styles as Record<string, string>)['signInInlineButton']}\n >\n Sign In\n </Button>\n </Typography>\n </div>\n )}\n </CardPrimitive.Content>\n </CardPrimitive>\n );\n};\n\nexport default BaseAcceptInvite;\n"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
2
+ const require_emotion = require('../../../../styles/emotion.cjs');
2
3
  let react = require("react");
3
4
  react = require_rolldown_runtime.__toESM(react);
4
- let __emotion_css = require("@emotion/css");
5
- __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
6
5
 
7
6
  //#region src/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.ts
8
7
  /**
@@ -12,29 +11,62 @@ __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
12
11
  * @returns Object containing CSS class names for component styling
13
12
  */
14
13
  const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
15
- const card = __emotion_css.css`
14
+ const card = require_emotion.css`
16
15
  background: ${theme.vars.colors.background.surface};
17
16
  border-radius: ${theme.vars.borderRadius.large};
18
17
  gap: calc(${theme.vars.spacing.unit} * 2);
19
18
  min-width: 420px;
20
19
  font-family: ${theme.vars.typography.fontFamily};
21
20
  `;
22
- const header = __emotion_css.css`
21
+ const header = require_emotion.css`
23
22
  gap: 0;
24
23
  align-items: center;
25
24
  `;
26
- const title = __emotion_css.css`
25
+ const title = require_emotion.css`
27
26
  margin: 0 0 calc(${theme.vars.spacing.unit} * 1) 0;
28
27
  color: ${theme.vars.colors.text.primary};
28
+ `;
29
+ const subtitle = require_emotion.css`
30
+ margin-bottom: calc(${theme.vars.spacing.unit} * 1);
31
+ color: ${theme.vars.colors.text.secondary};
32
+ `;
33
+ const tokenValidationContainer = require_emotion.css`
34
+ align-items: center;
35
+ display: flex;
36
+ flex-direction: column;
37
+ gap: 1rem;
38
+ padding: 2rem;
39
+ `;
40
+ const goToSignInContainer = require_emotion.css`
41
+ display: flex;
42
+ justify-content: center;
43
+ margin-top: 1.5rem;
44
+ `;
45
+ const errorContainer = require_emotion.css`
46
+ margin-bottom: 1rem;
47
+ `;
48
+ const centeredSpinnerContainerSmall = require_emotion.css`
49
+ display: flex;
50
+ justify-content: center;
51
+ padding: 1rem;
29
52
  `;
30
53
  return {
54
+ alreadyHaveAccountContainer: require_emotion.css`
55
+ margin-top: 1.5rem;
56
+ text-align: center;
57
+ `,
31
58
  card,
59
+ centeredSpinnerContainerSmall,
60
+ errorContainer,
61
+ goToSignInContainer,
32
62
  header,
33
- subtitle: __emotion_css.css`
34
- margin-bottom: calc(${theme.vars.spacing.unit} * 1);
35
- color: ${theme.vars.colors.text.secondary};
63
+ signInInlineButton: require_emotion.css`
64
+ min-width: auto;
65
+ padding: 0;
36
66
  `,
37
- title
67
+ subtitle,
68
+ title,
69
+ tokenValidationContainer
38
70
  };
39
71
  }, [
40
72
  theme.vars.colors.background.surface,
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAcceptInvite.styles.cjs","names":["card: string","header: string","title: string"],"sources":["../../../../../../src/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.ts"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {css} from '@emotion/css';\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\n\n/**\n * Creates styles for the BaseAcceptInvite 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 */\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const card: string = css`\n background: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.large};\n gap: calc(${theme.vars.spacing.unit} * 2);\n min-width: 420px;\n font-family: ${theme.vars.typography.fontFamily};\n `;\n\n const header: string = css`\n gap: 0;\n align-items: center;\n `;\n\n const title: string = css`\n margin: 0 0 calc(${theme.vars.spacing.unit} * 1) 0;\n color: ${theme.vars.colors.text.primary};\n `;\n\n const subtitle: string = css`\n margin-bottom: calc(${theme.vars.spacing.unit} * 1);\n color: ${theme.vars.colors.text.secondary};\n `;\n\n return {\n card,\n header,\n subtitle,\n title,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.text.secondary,\n theme.vars.borderRadius.large,\n theme.vars.spacing.unit,\n theme.vars.typography.fontFamily,\n colorScheme,\n ]);\n\nexport default useStyles;\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,aAAa,OAAc,yCACjB;CACZ,MAAMA,OAAe,iBAAG;oBACR,MAAM,KAAK,OAAO,WAAW,QAAQ;uBAClC,MAAM,KAAK,aAAa,MAAM;kBACnC,MAAM,KAAK,QAAQ,KAAK;;qBAErB,MAAM,KAAK,WAAW,WAAW;;CAGlD,MAAMC,SAAiB,iBAAG;;;;CAK1B,MAAMC,QAAgB,iBAAG;yBACJ,MAAM,KAAK,QAAQ,KAAK;eAClC,MAAM,KAAK,OAAO,KAAK,QAAQ;;AAQ1C,QAAO;EACL;EACA;EACA,UARuB,iBAAG;4BACJ,MAAM,KAAK,QAAQ,KAAK;eACrC,MAAM,KAAK,OAAO,KAAK,UAAU;;EAO1C;EACD;GACA;CACD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,WAAW;CACtB;CACD,CAAC;AAEJ,sCAAe"}
1
+ {"version":3,"file":"BaseAcceptInvite.styles.cjs","names":["card: string","header: string","title: string","subtitle: string","tokenValidationContainer: string","goToSignInContainer: string","errorContainer: string","centeredSpinnerContainerSmall: string"],"sources":["../../../../../../src/components/presentation/auth/AcceptInvite/BaseAcceptInvite.styles.ts"],"sourcesContent":["// Copyright 2025 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 BaseAcceptInvite 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 */\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const card: string = css`\n background: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.large};\n gap: calc(${theme.vars.spacing.unit} * 2);\n min-width: 420px;\n font-family: ${theme.vars.typography.fontFamily};\n `;\n\n const header: string = css`\n gap: 0;\n align-items: center;\n `;\n\n const title: string = css`\n margin: 0 0 calc(${theme.vars.spacing.unit} * 1) 0;\n color: ${theme.vars.colors.text.primary};\n `;\n\n const subtitle: string = css`\n margin-bottom: calc(${theme.vars.spacing.unit} * 1);\n color: ${theme.vars.colors.text.secondary};\n `;\n\n const tokenValidationContainer: string = css`\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n padding: 2rem;\n `;\n\n const goToSignInContainer: string = css`\n display: flex;\n justify-content: center;\n margin-top: 1.5rem;\n `;\n\n const errorContainer: string = css`\n margin-bottom: 1rem;\n `;\n\n const centeredSpinnerContainerSmall: string = css`\n display: flex;\n justify-content: center;\n padding: 1rem;\n `;\n\n const alreadyHaveAccountContainer: string = css`\n margin-top: 1.5rem;\n text-align: center;\n `;\n\n const signInInlineButton: string = css`\n min-width: auto;\n padding: 0;\n `;\n\n return {\n alreadyHaveAccountContainer,\n card,\n centeredSpinnerContainerSmall,\n errorContainer,\n goToSignInContainer,\n header,\n signInInlineButton,\n subtitle,\n title,\n tokenValidationContainer,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.text.secondary,\n theme.vars.borderRadius.large,\n theme.vars.spacing.unit,\n theme.vars.typography.fontFamily,\n colorScheme,\n ]);\n\nexport default useStyles;\n"],"mappings":";;;;;;;;;;;;AAaA,MAAM,aAAa,OAAc,yCACjB;CACZ,MAAMA,OAAe,mBAAG;oBACR,MAAM,KAAK,OAAO,WAAW,QAAQ;uBAClC,MAAM,KAAK,aAAa,MAAM;kBACnC,MAAM,KAAK,QAAQ,KAAK;;qBAErB,MAAM,KAAK,WAAW,WAAW;;CAGlD,MAAMC,SAAiB,mBAAG;;;;CAK1B,MAAMC,QAAgB,mBAAG;yBACJ,MAAM,KAAK,QAAQ,KAAK;eAClC,MAAM,KAAK,OAAO,KAAK,QAAQ;;CAG1C,MAAMC,WAAmB,mBAAG;4BACJ,MAAM,KAAK,QAAQ,KAAK;eACrC,MAAM,KAAK,OAAO,KAAK,UAAU;;CAG5C,MAAMC,2BAAmC,mBAAG;;;;;;;CAQ5C,MAAMC,sBAA8B,mBAAG;;;;;CAMvC,MAAMC,iBAAyB,mBAAG;;;CAIlC,MAAMC,gCAAwC,mBAAG;;;;;AAgBjD,QAAO;EACL,6BAX0C,mBAAG;;;;EAY7C;EACA;EACA;EACA;EACA;EACA,oBAZiC,mBAAG;;;;EAapC;EACA;EACA;EACD;GACA;CACD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,WAAW;CACtB;CACD,CAAC;AAEJ,sCAAe"}
@@ -1,4 +1,5 @@
1
1
  const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
+ const require_emotion = require('../../../styles/emotion.cjs');
2
3
  const require_Button = require('../../primitives/Button/Button.cjs');
3
4
  const require_composeAffixedInputs = require('../../../utils/composeAffixedInputs.cjs');
4
5
  const require_Typography = require('../../primitives/Typography/Typography.cjs');
@@ -26,8 +27,6 @@ let react = require("react");
26
27
  react = require_rolldown_runtime.__toESM(react);
27
28
  let react_jsx_runtime = require("react/jsx-runtime");
28
29
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
29
- let __emotion_css = require("@emotion/css");
30
- __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
31
30
  let dompurify = require("dompurify");
32
31
  dompurify = require_rolldown_runtime.__toESM(dompurify);
33
32
 
@@ -41,33 +40,46 @@ const logger = (0, __thunderid_browser.createPackageComponentLogger)("@thunderid
41
40
  * - `<img src="emoji:X" alt="Y">` → `<span role="img" aria-label="Y">X</span>`
42
41
  * - Any remaining `emoji:X` text occurrences → `X`
43
42
  */
43
+ let richTextClassCache;
44
44
  /** Ensures rich-text content (including all inner elements from the server) always word-wraps. */
45
- const richTextClass = __emotion_css.css`
46
- overflow-wrap: anywhere;
47
- & * {
45
+ function getRichTextClass() {
46
+ richTextClassCache ??= require_emotion.css`
48
47
  overflow-wrap: anywhere;
49
- word-break: break-word;
50
- }
51
- & .rich-text-align-left {
52
- text-align: left;
53
- }
54
- & .rich-text-align-center {
55
- text-align: center;
56
- }
57
- & .rich-text-align-right {
58
- text-align: right;
59
- }
60
- & .rich-text-align-justify {
61
- text-align: justify;
62
- }
63
- & a,
64
- & .rich-text-link {
65
- text-decoration: underline;
66
- }
67
- & span[role='img'] {
68
- display: inline-block;
69
- }
70
- `;
48
+ & * {
49
+ overflow-wrap: anywhere;
50
+ word-break: break-word;
51
+ }
52
+ & .rich-text-align-left {
53
+ text-align: left;
54
+ }
55
+ & .rich-text-align-center {
56
+ text-align: center;
57
+ }
58
+ & .rich-text-align-right {
59
+ text-align: right;
60
+ }
61
+ & .rich-text-align-justify {
62
+ text-align: justify;
63
+ }
64
+ & a,
65
+ & .rich-text-link {
66
+ text-decoration: underline;
67
+ }
68
+ & span[role='img'] {
69
+ display: inline-block;
70
+ }
71
+ `;
72
+ return richTextClassCache;
73
+ }
74
+ let authOptionIconClassCache;
75
+ function getAuthOptionIconClass() {
76
+ authOptionIconClassCache ??= require_emotion.css({
77
+ height: "1.25em",
78
+ objectFit: "contain",
79
+ width: "1.25em"
80
+ });
81
+ return authOptionIconClassCache;
82
+ }
71
83
  /**
72
84
  * Get the appropriate FieldType for an input component.
73
85
  */
@@ -159,7 +171,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
159
171
  const defaultPrefixValue = hasPrefixes ? typeof component.prefixes === "string" ? component.prefixes : component.prefixes[0].value : "";
160
172
  const selectedPrefix = formValues[prefixStateKey] ?? defaultPrefixValue;
161
173
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_AffixedField.default, {
162
- className: (0, __emotion_css.cx)(options.inputClassName, component.classes),
174
+ className: require_emotion.cx(options.inputClassName, component.classes),
163
175
  id: component.id,
164
176
  label: resolve(component.label) || "",
165
177
  name: identifier,
@@ -180,7 +192,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
180
192
  }, key);
181
193
  }
182
194
  return (0, react.cloneElement)(require_FieldFactory.createField({
183
- className: (0, __emotion_css.cx)(options.inputClassName, component.classes),
195
+ className: require_emotion.cx(options.inputClassName, component.classes),
184
196
  error,
185
197
  id: component.id,
186
198
  label: resolve(component.label) || "",
@@ -198,7 +210,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
198
210
  const value = formValues[identifier] || "";
199
211
  const error = touchedFields[identifier] || false ? formErrors[identifier] : void 0;
200
212
  return (0, react.cloneElement)(require_FieldFactory.createField({
201
- className: (0, __emotion_css.cx)(options.inputClassName, component.classes),
213
+ className: require_emotion.cx(options.inputClassName, component.classes),
202
214
  error,
203
215
  id: component.id,
204
216
  label: resolve(component.label) || "",
@@ -257,7 +269,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
257
269
  }
258
270
  }
259
271
  };
260
- const socialButtonClassName = (0, __emotion_css.cx)(options.buttonClassName, component.classes);
272
+ const socialButtonClassName = require_emotion.cx(options.buttonClassName, component.classes);
261
273
  if (matchesSocialProvider(actionId, eventType, buttonText, "google", authType, componentVariant)) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_GoogleButton.default, {
262
274
  id: component.id,
263
275
  onClick: handleClick,
@@ -297,28 +309,20 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
297
309
  src: component.startIcon,
298
310
  alt: "",
299
311
  "aria-hidden": "true",
300
- style: {
301
- height: "1.25em",
302
- objectFit: "contain",
303
- width: "1.25em"
304
- }
312
+ className: getAuthOptionIconClass()
305
313
  }) : null;
306
314
  const endIconEl = component.endIcon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
307
315
  src: component.endIcon,
308
316
  alt: "",
309
317
  "aria-hidden": "true",
310
- style: {
311
- height: "1.25em",
312
- objectFit: "contain",
313
- width: "1.25em"
314
- }
318
+ className: getAuthOptionIconClass()
315
319
  }) : null;
316
320
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
317
321
  fullWidth: true,
318
322
  id: component.id,
319
323
  onClick: handleClick,
320
324
  disabled: isLoading || !isFormValid && !shouldSkipValidation || options.isTimeoutDisabled || component.config?.disabled,
321
- className: (0, __emotion_css.cx)(options.buttonClassName, component.classes),
325
+ className: require_emotion.cx(options.buttonClassName, component.classes),
322
326
  "data-testid": "thunderid-signin-submit",
323
327
  variant: component.variant?.toLowerCase() === "primary" ? "solid" : "outline",
324
328
  color: component.variant?.toLowerCase() === "primary" ? "primary" : "secondary",
@@ -330,14 +334,14 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
330
334
  }
331
335
  case __thunderid_browser.EmbeddedFlowComponentType.Text: {
332
336
  const variant = getTypographyVariant(component.variant);
337
+ const textAlignClass = require_emotion.css({
338
+ marginBottom: 2,
339
+ textAlign: typeof component?.align === "string" ? component.align : "left"
340
+ });
333
341
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
334
342
  id: component.id,
335
- className: component.classes,
343
+ className: require_emotion.cx(component.classes, textAlignClass),
336
344
  variant,
337
- style: {
338
- marginBottom: 2,
339
- textAlign: typeof component?.align === "string" ? component.align : "left"
340
- },
341
345
  children: resolve(component.label)
342
346
  }, key);
343
347
  }
@@ -361,7 +365,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
361
365
  error,
362
366
  onChange: (e) => onInputChange(identifier, e.target.value),
363
367
  onBlur: () => options.onInputBlur?.(identifier),
364
- className: (0, __emotion_css.cx)(options.inputClassName, component.classes)
368
+ className: require_emotion.cx(options.inputClassName, component.classes)
365
369
  }, key);
366
370
  }
367
371
  case __thunderid_browser.EmbeddedFlowComponentType.DateInput: {
@@ -379,7 +383,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
379
383
  error,
380
384
  onChange: (e) => onInputChange(identifier, e.target.value),
381
385
  onBlur: () => options.onInputBlur?.(identifier),
382
- className: (0, __emotion_css.cx)(options.inputClassName, component.classes)
386
+ className: require_emotion.cx(options.inputClassName, component.classes)
383
387
  }, key);
384
388
  }
385
389
  case __thunderid_browser.EmbeddedFlowComponentType.OuSelect:
@@ -387,19 +391,18 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
387
391
  return null;
388
392
  case __thunderid_browser.EmbeddedFlowComponentType.Block:
389
393
  if (component.components && component.components.length > 0) {
390
- const formStyles = {
394
+ const formClass = require_emotion.css({
391
395
  display: "flex",
392
396
  flexDirection: "column",
393
397
  gap: `calc(${theme?.vars?.spacing?.unit ?? "4px"} * 2)`
394
- };
398
+ });
395
399
  const blockComponents = component.components.map((childComponent, index) => createAuthComponentFromFlow(childComponent, formValues, touchedFields, formErrors, isLoading, isFormValid, resetForm, onInputChange, authType, {
396
400
  ...options,
397
401
  key: childComponent.id || `${component.id}_${index}`
398
402
  })).filter(Boolean);
399
403
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("form", {
400
404
  id: component.id,
401
- className: component.classes,
402
- style: formStyles,
405
+ className: require_emotion.cx(component.classes, formClass),
403
406
  children: blockComponents
404
407
  }, key);
405
408
  }
@@ -423,21 +426,23 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
423
426
  options.onSubmit(syntheticAction, formData, shouldSkipValidation);
424
427
  };
425
428
  const isMatchingSentinelAnchor = (anchor) => anchor.getAttribute("data-action-ref") === richTextAction?.ref;
429
+ const handleRichTextClick = richTextAction ? (event) => {
430
+ const anchor = event.target.closest("a");
431
+ if (!anchor || !isMatchingSentinelAnchor(anchor)) return;
432
+ event.preventDefault();
433
+ dispatchRichTextAction();
434
+ } : void 0;
435
+ const handleRichTextKeyDown = richTextAction ? (event) => {
436
+ if (event.key !== "Enter" && event.key !== " ") return;
437
+ const anchor = event.target.closest("a");
438
+ if (!anchor || !isMatchingSentinelAnchor(anchor)) return;
439
+ event.preventDefault();
440
+ dispatchRichTextAction();
441
+ } : void 0;
426
442
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
427
- className: richTextClass,
428
- onClick: richTextAction ? (event) => {
429
- const anchor = event.target.closest("a");
430
- if (!anchor || !isMatchingSentinelAnchor(anchor)) return;
431
- event.preventDefault();
432
- dispatchRichTextAction();
433
- } : void 0,
434
- onKeyDown: richTextAction ? (event) => {
435
- if (event.key !== "Enter" && event.key !== " ") return;
436
- const anchor = event.target.closest("a");
437
- if (!anchor || !isMatchingSentinelAnchor(anchor)) return;
438
- event.preventDefault();
439
- dispatchRichTextAction();
440
- } : void 0,
443
+ className: getRichTextClass(),
444
+ onClick: handleRichTextClick,
445
+ onKeyDown: handleRichTextKeyDown,
441
446
  dangerouslySetInnerHTML: { __html: dompurify.default.sanitize((0, __thunderid_browser.resolveEmojiUrisInHtml)(resolve(component.label))) }
442
447
  }, key);
443
448
  }
@@ -484,7 +489,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
484
489
  const isColumn = direction.startsWith("column");
485
490
  const gridJustify = component.justify ?? "stretch";
486
491
  const track = gridJustify === "stretch" ? "1fr" : "auto";
487
- const stackStyle = items !== null ? {
492
+ const stackClass = require_emotion.css(items !== null ? {
488
493
  alignItems: component.align ?? "stretch",
489
494
  display: "grid",
490
495
  gap: `${gap * .5}rem`,
@@ -499,7 +504,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
499
504
  flexWrap: "wrap",
500
505
  gap: `${gap * .5}rem`,
501
506
  justifyContent: justify
502
- };
507
+ });
503
508
  const stackChildren = component.components ? component.components.map((childComponent, index) => createAuthComponentFromFlow(childComponent, formValues, touchedFields, formErrors, isLoading, isFormValid, resetForm, onInputChange, authType, {
504
509
  ...options,
505
510
  inStack: true,
@@ -507,8 +512,7 @@ const createAuthComponentFromFlow = (component, formValues, touchedFields, formE
507
512
  })) : [];
508
513
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
509
514
  id: component.id,
510
- className: component.classes,
511
- style: stackStyle,
515
+ className: require_emotion.cx(component.classes, stackClass),
512
516
  children: stackChildren
513
517
  }, key);
514
518
  }