@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":"ThunderIDProvider.js","names":["logger: ReturnType<typeof createPackageComponentLogger>","ThunderIDProvider: FC<PropsWithChildren<ThunderIDProviderProps>>","reRenderCheckRef: RefObject<boolean>","client: ThunderIDReactClient","ThunderIDReactClient","storageManagerRef: any","useBrowserUrl","pendingSessionUpdateRef: RefObject<Promise<void> | null>","resolvedBaseUrl: string","decodedToken: IdToken","shouldFetchProfile: boolean","claims: User","currentSignInStatus: boolean","getUsersMe","arg1: any","isV2FlowRequest: boolean","currentUrl: URL","urlParams: URLSearchParams","code: string | null","executionIdFromUrl: string | null","storedExecutionId: string | null","interval: NodeJS.Timeout","status: boolean","getDecodedIdToken: () => Promise<IdToken>","getIdToken: () => Promise<string>","getAccessToken: () => Promise<string>","getStorageManager: () => Promise<any>","storageManager: any","request: (...args: any[]) => Promise<any>","requestAll: (...args: any[]) => Promise<any>","exchangeToken: (exchangeConfig: any) => Promise<any>","signOut: (...args: any[]) => Promise<any>","recover: (payload: any) => Promise<any>","signUp: (...args: any[]) => Promise<any>","clearSession: (...args: any[]) => Promise<any>","reInitialize: (reInitConfig: any) => Promise<any>","result: any","reinitializedConfig: ThunderIDReactConfig","value: any","ThunderIDContext","I18nProvider","FlowMetaProvider","ThemeProvider","FlowProvider","UserProvider","ComponentRendererProvider"],"sources":["../../../src/contexts/ThunderID/ThunderIDProvider.tsx"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ThunderIDRuntimeError,\n generateFlattenedUserProfile,\n OIDCDiscoveryApiResponse,\n SignInOptions,\n User,\n UserProfile,\n IdToken,\n extractUserClaimsFromIdToken,\n EmbeddedSignInFlowResponse,\n createPackageComponentLogger,\n getVendorPrefix,\n resolveResourceEndpoint,\n} from '@thunderid/browser';\nimport {FC, RefObject, PropsWithChildren, ReactElement, useEffect, useMemo, useRef, useState, useCallback} from 'react';\nimport ThunderIDContext from './ThunderIDContext';\nimport useBrowserUrl from '../../hooks/useBrowserUrl';\nimport {ThunderIDReactConfig} from '../../models/config';\nimport ThunderIDReactClient from '../../ThunderIDReactClient';\nimport ComponentRendererProvider from '../ComponentRenderer/ComponentRendererProvider';\nimport FlowProvider from '../Flow/FlowProvider';\nimport FlowMetaProvider from '../FlowMeta/FlowMetaProvider';\nimport I18nProvider from '../I18n/I18nProvider';\nimport ThemeProvider from '../Theme/ThemeProvider';\nimport UserProvider from '../User/UserProvider';\nimport getUsersMe from '../../api/getUsersMe';\n\nconst logger: ReturnType<typeof createPackageComponentLogger> = createPackageComponentLogger(\n '@thunderid/react',\n 'ThunderIDProvider',\n);\n\n/**\n * Props interface of {@link ThunderIDProvider}\n */\nexport type ThunderIDProviderProps = ThunderIDReactConfig;\n\nconst ThunderIDProvider: FC<PropsWithChildren<ThunderIDProviderProps>> = ({\n afterSignInUrl,\n afterSignOutUrl,\n baseUrl: initialBaseUrl,\n clientId,\n children,\n extensions,\n scopes,\n preferences,\n signInUrl,\n signUpUrl,\n organizationHandle,\n applicationId,\n signInOptions,\n tokenRequest,\n syncSession,\n instanceId = 0,\n organizationChain,\n ...rest\n}: PropsWithChildren<ThunderIDProviderProps>): ReactElement => {\n const reRenderCheckRef: RefObject<boolean> = useRef(false);\n const client: ThunderIDReactClient = useMemo(() => new ThunderIDReactClient(instanceId), [instanceId]);\n const storageManagerRef: any = useRef<any>(null);\n const {hasAuthParams, hasCalledForThisInstance} = useBrowserUrl();\n const [user, setUser] = useState<any | null>(null);\n const [isSignedInSync, setIsSignedInSync] = useState<boolean>(false);\n const [isInitializedSync, setIsInitializedSync] = useState<boolean>(false);\n const [isLoadingSync, setIsLoadingSync] = useState<boolean>(true);\n\n const [userProfile, setUserProfile] = useState<UserProfile | null>(null);\n const [baseUrl, setBaseUrl] = useState<string>(initialBaseUrl ?? '');\n const [config, setConfig] = useState<ThunderIDReactConfig>({\n afterSignInUrl: afterSignInUrl ?? window.location.origin,\n afterSignOutUrl: afterSignOutUrl ?? window.location.origin,\n applicationId,\n baseUrl,\n clientId,\n organizationChain,\n organizationHandle,\n scopes,\n signInOptions,\n tokenRequest,\n signInUrl,\n signUpUrl,\n syncSession,\n ...rest,\n });\n\n const [isUpdatingSession, setIsUpdatingSession] = useState<boolean>(false);\n const [wellKnown, setWellKnown] = useState<OIDCDiscoveryApiResponse | null>(null);\n\n // Holds the in-flight `updateSession()` promise so concurrent callers coalesce onto a single\n // `/users/me` request instead of issuing one each.\n const pendingSessionUpdateRef: RefObject<Promise<void> | null> = useRef<Promise<void> | null>(null);\n\n useEffect(() => {\n setBaseUrl(initialBaseUrl ?? '');\n }, [initialBaseUrl]);\n\n useEffect(() => {\n (async (): Promise<void> => {\n await client.initialize(config);\n const initializedConfig: ThunderIDReactConfig = await client.getConfiguration();\n setConfig(initializedConfig);\n setWellKnown(await client.getDiscoveryResponse());\n })();\n }, []);\n\n async function performSessionUpdate(): Promise<void> {\n try {\n // Set flag to prevent loading state tracking from interfering\n setIsUpdatingSession(true);\n setIsLoadingSync(true);\n let resolvedBaseUrl: string = baseUrl;\n\n const decodedToken: IdToken = await client.getDecodedIdToken();\n\n // If there's a `user_org` claim in the ID token,\n // Treat this login as a organization login.\n if (decodedToken?.['user_org']) {\n resolvedBaseUrl = `${(await client.getConfiguration()).baseUrl}/o`;\n setBaseUrl(resolvedBaseUrl);\n }\n\n const shouldFetchProfile: boolean = preferences?.user?.fetchUserProfile !== false;\n const claims: User = extractUserClaimsFromIdToken(decodedToken) as User;\n let profileData = claims;\n const currentSignInStatus: boolean = await client.isSignedIn();\n\n if (currentSignInStatus && shouldFetchProfile) {\n try {\n const fetchedProfile = await getUsersMe({\n baseUrl: resolvedBaseUrl,\n url: resolveResourceEndpoint('usersMe', config),\n instanceId,\n });\n profileData = {...claims, ...fetchedProfile};\n } catch (err) {\n logger.warn('Failed to fetch user profile from /users/me:', err);\n }\n }\n\n setUser(profileData);\n setUserProfile({\n flattenedProfile: generateFlattenedUserProfile(profileData, []),\n profile: profileData,\n });\n\n // CRITICAL: Update sign-in status BEFORE setting loading to false\n // This prevents the race condition where ProtectedRoute sees isLoading=false but isSignedIn=false\n setIsSignedInSync(currentSignInStatus);\n } catch (error) {\n // TODO: Add an error log.\n } finally {\n // Clear the flag and set final loading state\n setIsUpdatingSession(false);\n setIsLoadingSync(client.isLoading());\n }\n }\n\n /**\n * Single-flight wrapper around {@link performSessionUpdate}.\n *\n * Concurrent callers share the in-flight request instead of each issuing their own `/users/me`.\n * This is not a cache: once the request settles the ref is cleared, so a later caller (e.g.\n * revalidation after a profile update) fetches again.\n */\n async function updateSession(): Promise<void> {\n if (pendingSessionUpdateRef.current) {\n return pendingSessionUpdateRef.current;\n }\n\n pendingSessionUpdateRef.current = performSessionUpdate().finally(() => {\n pendingSessionUpdateRef.current = null;\n });\n\n return pendingSessionUpdateRef.current;\n }\n\n async function signIn(...args: any): Promise<User | EmbeddedSignInFlowResponse> {\n // Check if this is a V2 embedded flow request BEFORE calling signIn\n // This allows us to skip session checks entirely for V2 flows\n const arg1: any = args[0];\n const isV2FlowRequest: boolean =\n typeof arg1 === 'object' && arg1 !== null && ('executionId' in arg1 || 'applicationId' in arg1);\n\n try {\n if (!isV2FlowRequest) {\n setIsUpdatingSession(true);\n setIsLoadingSync(true);\n }\n\n return await client.signIn(...args);\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Sign in failed: ${error instanceof Error ? error.message : String(JSON.stringify(error))}`,\n 'thunderid-signIn-Error',\n 'react',\n 'An error occurred while trying to sign in.',\n );\n } finally {\n if (!isV2FlowRequest) {\n setIsUpdatingSession(false);\n setIsLoadingSync(client.isLoading());\n }\n }\n }\n\n /**\n * Try signing in when the component is mounted.\n */\n useEffect(() => {\n // React 18.x Strict.Mode has a new check for `Ensuring reusable state` to facilitate an upcoming react feature.\n // https://reactjs.org/docs/strict-mode.html#ensuring-reusable-state\n // This will remount all the useEffects to ensure that there are no unexpected side effects.\n // When react remounts the signIn hook of the AuthProvider, it will cause a race condition. Hence, we have to\n // prevent the re-render of this hook as suggested in the following discussion.\n // https://github.com/reactwg/react-18/discussions/18#discussioncomment-795623\n if (reRenderCheckRef.current) {\n return;\n }\n\n reRenderCheckRef.current = true;\n\n (async (): Promise<void> => {\n // Sync session state whenever sign-in completes (both redirect and embedded V2 flows).\n // Pass the user returned by the SDK's sign-in flow so users/me result is not discarded.\n await client.on('sign-in', async () => {\n await updateSession();\n });\n\n // Start auto-refresh with a soft failure. This also covers the case where the access token\n // expired while the refresh token is still valid — startAutoRefreshToken() calls\n // refreshAccessToken() immediately when timeUntilRefresh <= 0 — so the sign-in check below\n // sees the refreshed state.\n try {\n await client.startAutoRefreshToken();\n } catch (error) {\n logger.warn('Failed to schedule automatic token refresh.', error);\n }\n\n // User is already authenticated. Restore the session and skip the sign-in path.\n if (await client.isSignedIn()) {\n await updateSession();\n\n return;\n }\n\n const currentUrl: URL = new URL(window.location.href);\n const hasAuthParamsResult: boolean =\n hasAuthParams(currentUrl, config.afterSignInUrl!) && hasCalledForThisInstance(currentUrl, instanceId ?? 0);\n\n if (hasAuthParamsResult) {\n try {\n const urlParams: URLSearchParams = currentUrl.searchParams;\n const code: string | null = urlParams.get('code');\n const executionIdFromUrl: string | null = urlParams.get('executionId');\n const storedExecutionId: string | null = sessionStorage.getItem(\n `${getVendorPrefix(config.vendor)}_execution_id`,\n );\n\n if (code && !executionIdFromUrl && !storedExecutionId) {\n await signIn();\n }\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Sign in failed: ${error instanceof Error ? error.message : String(JSON.stringify(error))}`,\n 'thunderid-signIn-Error',\n 'react',\n 'An error occurred while trying to sign in.',\n );\n }\n }\n })();\n }, []);\n\n /**\n * Check if the user is signed in and update the state accordingly.\n * This will also set an interval to check for the sign-in status every second\n * until the user is signed in.\n */\n useEffect(() => {\n let interval: NodeJS.Timeout;\n\n (async (): Promise<void> => {\n try {\n const status: boolean = await client.isSignedIn();\n\n setIsSignedInSync(status);\n\n if (!status) {\n interval = setInterval(async () => {\n const newStatus: boolean = await client.isSignedIn();\n\n if (newStatus) {\n setIsSignedInSync(true);\n clearInterval(interval);\n }\n }, 1000);\n } else {\n // TODO: Add a debug log to indicate that the user is already signed in.\n }\n } catch (error) {\n setIsSignedInSync(false);\n }\n })();\n\n return (): void => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [client]);\n\n useEffect(() => {\n (async (): Promise<void> => {\n try {\n const status: boolean = await client.isInitialized();\n\n setIsInitializedSync(status);\n } catch (error) {\n setIsInitializedSync(false);\n }\n })();\n }, [client]);\n\n /**\n * Track loading state changes from the ThunderID client\n */\n useEffect(() => {\n const checkLoadingState = (): void => {\n // Don't override loading state during critical session updates\n if (isUpdatingSession) {\n return;\n }\n\n // Don't set loading=false while auth params are in the URL and user isn't signed in yet.\n // This prevents ProtectedRoute from redirecting before the sign-in effect processes the auth code.\n const currentUrl: URL = new URL(window.location.href);\n if (!isSignedInSync && hasAuthParams(currentUrl, config.afterSignInUrl!)) {\n return;\n }\n\n setIsLoadingSync(client.isLoading());\n };\n\n // Initial check\n checkLoadingState();\n\n // Set up an interval to check for loading state changes\n const interval: NodeJS.Timeout = setInterval(checkLoadingState, 100);\n\n return (): void => {\n clearInterval(interval);\n };\n }, [client, isLoadingSync, isSignedInSync, isUpdatingSession]);\n\n const signInSilently = async (options?: SignInOptions): Promise<User | boolean> => {\n try {\n setIsUpdatingSession(true);\n setIsLoadingSync(true);\n return await client.signInSilently(options);\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Error while signing in silently: ${error instanceof Error ? error.message : String(JSON.stringify(error))}`,\n 'thunderid-signInSilently-Error',\n 'react',\n 'An error occurred while trying to sign in silently.',\n );\n } finally {\n setIsUpdatingSession(false);\n setIsLoadingSync(client.isLoading());\n }\n };\n\n const handleProfileUpdate = (payload: User): void => {\n setUser(payload);\n setUserProfile((prev: UserProfile | null) => ({\n flattenedProfile: generateFlattenedUserProfile(payload),\n profile: payload,\n }));\n };\n\n const getDecodedIdToken: () => Promise<IdToken> = useCallback(\n async (): Promise<IdToken> => client.getDecodedIdToken(),\n [client],\n );\n\n const getIdToken: () => Promise<string> = useCallback(async (): Promise<string> => client.getIdToken(), [client]);\n\n const getAccessToken: () => Promise<string> = useCallback(\n async (): Promise<string> => client.getAccessToken(),\n [client],\n );\n\n const getStorageManager: () => Promise<any> = useCallback(async (): Promise<any> => {\n const storageManager: any = storageManagerRef.current ?? (await client.getStorageManager());\n if (storageManager) {\n storageManagerRef.current = storageManager;\n }\n return storageManager;\n }, [client]);\n\n const request: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.request(...args),\n [client],\n );\n\n const requestAll: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.requestAll(...args),\n [client],\n );\n\n const exchangeToken: (exchangeConfig: any) => Promise<any> = useCallback(\n async (exchangeConfig: any): Promise<any> => client.exchangeToken(exchangeConfig),\n [client],\n );\n\n const signOut: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.signOut(...args),\n [client],\n );\n\n const recover: (payload: any) => Promise<any> = useCallback(\n async (payload: any): Promise<any> => client.recover(payload),\n [client],\n );\n\n const signUp: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.signUp(...args),\n [client],\n );\n\n const clearSession: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.clearSession(...args),\n [client],\n );\n\n const reInitialize: (reInitConfig: any) => Promise<any> = useCallback(\n async (reInitConfig: any): Promise<any> => {\n const result: any = await client.reInitialize(reInitConfig);\n\n // Refresh React state from the reinitialized client so the context (config.endpoints,\n // baseUrl, discovery) reflects the new configuration instead of the pre-reinitialization state.\n const reinitializedConfig: ThunderIDReactConfig = await client.getConfiguration();\n setConfig(reinitializedConfig);\n setBaseUrl(reinitializedConfig.baseUrl ?? '');\n setWellKnown(await client.getDiscoveryResponse());\n\n return result;\n },\n [client],\n );\n\n const value: any = useMemo(\n () => ({\n afterSignInUrl: config.afterSignInUrl,\n applicationId: config.applicationId,\n baseUrl,\n endpoints: config.endpoints,\n scopes: config.scopes,\n clearSession,\n clientId,\n discovery: {\n wellKnown,\n },\n exchangeToken,\n getAccessToken,\n getDecodedIdToken,\n getIdToken,\n getStorageManager,\n http: {\n request,\n requestAll,\n },\n instanceId,\n isInitialized: isInitializedSync,\n isLoading: isLoadingSync,\n isSignedIn: isSignedInSync,\n organizationChain,\n organizationHandle: config?.organizationHandle,\n preferences,\n reInitialize,\n recover,\n signIn,\n signInOptions,\n tokenRequest,\n signInSilently,\n signInUrl,\n signOut,\n signUp,\n signUpUrl,\n syncSession,\n user,\n vendor: getVendorPrefix(config.vendor),\n }),\n [\n applicationId,\n config?.organizationHandle,\n config.vendor,\n config.afterSignInUrl,\n config.endpoints,\n config.scopes,\n signInUrl,\n signUpUrl,\n baseUrl,\n clientId,\n wellKnown,\n isInitializedSync,\n isLoadingSync,\n isSignedInSync,\n signIn,\n signInSilently,\n user,\n client,\n signInOptions,\n tokenRequest,\n syncSession,\n getDecodedIdToken,\n clearSession,\n exchangeToken,\n getAccessToken,\n getStorageManager,\n instanceId,\n organizationChain,\n preferences,\n recover,\n reInitialize,\n request,\n requestAll,\n signOut,\n signUp,\n ],\n );\n\n return (\n <ThunderIDContext.Provider value={value}>\n <I18nProvider preferences={preferences?.i18n} vendor={getVendorPrefix(config.vendor)}>\n <FlowMetaProvider enabled={preferences?.resolveFromMeta !== false}>\n <ThemeProvider\n theme={{\n ...preferences?.theme?.overrides,\n direction: preferences?.theme?.direction,\n }}\n >\n <FlowProvider>\n <UserProvider profile={userProfile!} onUpdateProfile={handleProfileUpdate}>\n <ComponentRendererProvider renderers={(extensions?.components?.renderers ?? {}) as any}>\n {children}\n </ComponentRendererProvider>\n </UserProvider>\n </FlowProvider>\n </ThemeProvider>\n </FlowMetaProvider>\n </I18nProvider>\n </ThunderIDContext.Provider>\n );\n};\n\nexport default ThunderIDProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThunderIDProvider.js","names":["logger: ReturnType<typeof createPackageComponentLogger>","ThunderIDProvider: FC<PropsWithChildren<ThunderIDProviderProps>>","reRenderCheckRef: RefObject<boolean>","client: ThunderIDReactClient","ThunderIDReactClient","storageManagerRef: any","useBrowserUrl","pendingSessionUpdateRef: RefObject<Promise<void> | null>","resolvedBaseUrl: string","decodedToken: IdToken","shouldFetchProfile: boolean","claims: User","currentSignInStatus: boolean","getUsersMe","arg1: any","isV2FlowRequest: boolean","currentUrl: URL","urlParams: URLSearchParams","code: string | null","executionIdFromUrl: string | null","storedExecutionId: string | null","interval: NodeJS.Timeout","status: boolean","getDecodedIdToken: () => Promise<IdToken>","getIdToken: () => Promise<string>","getAccessToken: () => Promise<string>","getStorageManager: () => Promise<any>","storageManager: any","request: (...args: any[]) => Promise<any>","requestAll: (...args: any[]) => Promise<any>","exchangeToken: (exchangeConfig: any) => Promise<any>","signOut: (...args: any[]) => Promise<any>","recover: (payload: any) => Promise<any>","signUp: (...args: any[]) => Promise<any>","clearSession: (...args: any[]) => Promise<any>","reInitialize: (reInitConfig: any) => Promise<any>","result: any","reinitializedConfig: ThunderIDReactConfig","value: any","ThunderIDContext","I18nProvider","FlowMetaProvider","ThemeProvider","FlowProvider","UserProvider","ComponentRendererProvider"],"sources":["../../../src/contexts/ThunderID/ThunderIDProvider.tsx"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ThunderIDRuntimeError,\n generateFlattenedUserProfile,\n OIDCDiscoveryApiResponse,\n SignInOptions,\n User,\n UserProfile,\n IdToken,\n extractUserClaimsFromIdToken,\n EmbeddedSignInFlowResponse,\n createPackageComponentLogger,\n getVendorPrefix,\n resolveResourceEndpoint,\n} from '@thunderid/browser';\nimport {FC, RefObject, PropsWithChildren, ReactElement, useEffect, useMemo, useRef, useState, useCallback} from 'react';\nimport ThunderIDContext from './ThunderIDContext';\nimport useBrowserUrl from '../../hooks/useBrowserUrl';\nimport {ThunderIDReactConfig} from '../../models/config';\nimport {configureEmotionNonce} from '../../styles/emotion';\nimport ThunderIDReactClient from '../../ThunderIDReactClient';\nimport ComponentRendererProvider from '../ComponentRenderer/ComponentRendererProvider';\nimport FlowProvider from '../Flow/FlowProvider';\nimport FlowMetaProvider from '../FlowMeta/FlowMetaProvider';\nimport I18nProvider from '../I18n/I18nProvider';\nimport ThemeProvider from '../Theme/ThemeProvider';\nimport UserProvider from '../User/UserProvider';\nimport getUsersMe from '../../api/getUsersMe';\n\nconst logger: ReturnType<typeof createPackageComponentLogger> = createPackageComponentLogger(\n '@thunderid/react',\n 'ThunderIDProvider',\n);\n\n/**\n * Props interface of {@link ThunderIDProvider}\n */\nexport type ThunderIDProviderProps = ThunderIDReactConfig;\n\nconst ThunderIDProvider: FC<PropsWithChildren<ThunderIDProviderProps>> = ({\n afterSignInUrl,\n afterSignOutUrl,\n baseUrl: initialBaseUrl,\n clientId,\n children,\n extensions,\n scopes,\n preferences,\n signInUrl,\n signUpUrl,\n organizationHandle,\n applicationId,\n signInOptions,\n tokenRequest,\n syncSession,\n instanceId = 0,\n organizationChain,\n cspNonce,\n vendor,\n ...rest\n}: PropsWithChildren<ThunderIDProviderProps>): ReactElement => {\n // Must run synchronously here, in the render body, before any descendant's css()/cx()/\n // keyframes() calls execute during this same render pass - see the doc comment on\n // `configureEmotionNonce` for why a `useEffect` would be too late.\n configureEmotionNonce(cspNonce, vendor);\n\n const reRenderCheckRef: RefObject<boolean> = useRef(false);\n const client: ThunderIDReactClient = useMemo(() => new ThunderIDReactClient(instanceId), [instanceId]);\n const storageManagerRef: any = useRef<any>(null);\n const {hasAuthParams, hasCalledForThisInstance} = useBrowserUrl();\n const [user, setUser] = useState<any | null>(null);\n const [isSignedInSync, setIsSignedInSync] = useState<boolean>(false);\n const [isInitializedSync, setIsInitializedSync] = useState<boolean>(false);\n const [isLoadingSync, setIsLoadingSync] = useState<boolean>(true);\n\n const [userProfile, setUserProfile] = useState<UserProfile | null>(null);\n const [baseUrl, setBaseUrl] = useState<string>(initialBaseUrl ?? '');\n const [config, setConfig] = useState<ThunderIDReactConfig>({\n afterSignInUrl: afterSignInUrl ?? window.location.origin,\n afterSignOutUrl: afterSignOutUrl ?? window.location.origin,\n applicationId,\n baseUrl,\n clientId,\n organizationChain,\n organizationHandle,\n scopes,\n signInOptions,\n tokenRequest,\n signInUrl,\n signUpUrl,\n syncSession,\n vendor,\n ...rest,\n });\n\n const [isUpdatingSession, setIsUpdatingSession] = useState<boolean>(false);\n const [wellKnown, setWellKnown] = useState<OIDCDiscoveryApiResponse | null>(null);\n\n // Holds the in-flight `updateSession()` promise so concurrent callers coalesce onto a single\n // `/users/me` request instead of issuing one each.\n const pendingSessionUpdateRef: RefObject<Promise<void> | null> = useRef<Promise<void> | null>(null);\n\n useEffect(() => {\n setBaseUrl(initialBaseUrl ?? '');\n }, [initialBaseUrl]);\n\n useEffect(() => {\n (async (): Promise<void> => {\n await client.initialize(config);\n const initializedConfig: ThunderIDReactConfig = await client.getConfiguration();\n setConfig(initializedConfig);\n setWellKnown(await client.getDiscoveryResponse());\n })();\n }, []);\n\n async function performSessionUpdate(): Promise<void> {\n try {\n // Set flag to prevent loading state tracking from interfering\n setIsUpdatingSession(true);\n setIsLoadingSync(true);\n let resolvedBaseUrl: string = baseUrl;\n\n const decodedToken: IdToken = await client.getDecodedIdToken();\n\n // If there's a `user_org` claim in the ID token,\n // Treat this login as a organization login.\n if (decodedToken?.['user_org']) {\n resolvedBaseUrl = `${(await client.getConfiguration()).baseUrl}/o`;\n setBaseUrl(resolvedBaseUrl);\n }\n\n const shouldFetchProfile: boolean = preferences?.user?.fetchUserProfile !== false;\n const claims: User = extractUserClaimsFromIdToken(decodedToken) as User;\n let profileData = claims;\n const currentSignInStatus: boolean = await client.isSignedIn();\n\n if (currentSignInStatus && shouldFetchProfile) {\n try {\n const fetchedProfile = await getUsersMe({\n baseUrl: resolvedBaseUrl,\n url: resolveResourceEndpoint('usersMe', config),\n instanceId,\n });\n profileData = {...claims, ...fetchedProfile};\n } catch (err) {\n logger.warn('Failed to fetch user profile from /users/me:', err);\n }\n }\n\n setUser(profileData);\n setUserProfile({\n flattenedProfile: generateFlattenedUserProfile(profileData, []),\n profile: profileData,\n });\n\n // CRITICAL: Update sign-in status BEFORE setting loading to false\n // This prevents the race condition where ProtectedRoute sees isLoading=false but isSignedIn=false\n setIsSignedInSync(currentSignInStatus);\n } catch (error) {\n // TODO: Add an error log.\n } finally {\n // Clear the flag and set final loading state\n setIsUpdatingSession(false);\n setIsLoadingSync(client.isLoading());\n }\n }\n\n /**\n * Single-flight wrapper around {@link performSessionUpdate}.\n *\n * Concurrent callers share the in-flight request instead of each issuing their own `/users/me`.\n * This is not a cache: once the request settles the ref is cleared, so a later caller (e.g.\n * revalidation after a profile update) fetches again.\n */\n async function updateSession(): Promise<void> {\n if (pendingSessionUpdateRef.current) {\n return pendingSessionUpdateRef.current;\n }\n\n pendingSessionUpdateRef.current = performSessionUpdate().finally(() => {\n pendingSessionUpdateRef.current = null;\n });\n\n return pendingSessionUpdateRef.current;\n }\n\n async function signIn(...args: any): Promise<User | EmbeddedSignInFlowResponse> {\n // Check if this is a V2 embedded flow request BEFORE calling signIn\n // This allows us to skip session checks entirely for V2 flows\n const arg1: any = args[0];\n const isV2FlowRequest: boolean =\n typeof arg1 === 'object' && arg1 !== null && ('executionId' in arg1 || 'applicationId' in arg1);\n\n try {\n if (!isV2FlowRequest) {\n setIsUpdatingSession(true);\n setIsLoadingSync(true);\n }\n\n return await client.signIn(...args);\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Sign in failed: ${error instanceof Error ? error.message : String(JSON.stringify(error))}`,\n 'thunderid-signIn-Error',\n 'react',\n 'An error occurred while trying to sign in.',\n );\n } finally {\n if (!isV2FlowRequest) {\n setIsUpdatingSession(false);\n setIsLoadingSync(client.isLoading());\n }\n }\n }\n\n /**\n * Try signing in when the component is mounted.\n */\n useEffect(() => {\n // React 18.x Strict.Mode has a new check for `Ensuring reusable state` to facilitate an upcoming react feature.\n // https://reactjs.org/docs/strict-mode.html#ensuring-reusable-state\n // This will remount all the useEffects to ensure that there are no unexpected side effects.\n // When react remounts the signIn hook of the AuthProvider, it will cause a race condition. Hence, we have to\n // prevent the re-render of this hook as suggested in the following discussion.\n // https://github.com/reactwg/react-18/discussions/18#discussioncomment-795623\n if (reRenderCheckRef.current) {\n return;\n }\n\n reRenderCheckRef.current = true;\n\n (async (): Promise<void> => {\n // Sync session state whenever sign-in completes (both redirect and embedded V2 flows).\n // Pass the user returned by the SDK's sign-in flow so users/me result is not discarded.\n await client.on('sign-in', async () => {\n await updateSession();\n });\n\n // Start auto-refresh with a soft failure. This also covers the case where the access token\n // expired while the refresh token is still valid — startAutoRefreshToken() calls\n // refreshAccessToken() immediately when timeUntilRefresh <= 0 — so the sign-in check below\n // sees the refreshed state.\n try {\n await client.startAutoRefreshToken();\n } catch (error) {\n logger.warn('Failed to schedule automatic token refresh.', error);\n }\n\n // User is already authenticated. Restore the session and skip the sign-in path.\n if (await client.isSignedIn()) {\n await updateSession();\n\n return;\n }\n\n const currentUrl: URL = new URL(window.location.href);\n const hasAuthParamsResult: boolean =\n hasAuthParams(currentUrl, config.afterSignInUrl!) && hasCalledForThisInstance(currentUrl, instanceId ?? 0);\n\n if (hasAuthParamsResult) {\n try {\n const urlParams: URLSearchParams = currentUrl.searchParams;\n const code: string | null = urlParams.get('code');\n const executionIdFromUrl: string | null = urlParams.get('executionId');\n const storedExecutionId: string | null = sessionStorage.getItem(\n `${getVendorPrefix(config.vendor)}_execution_id`,\n );\n\n if (code && !executionIdFromUrl && !storedExecutionId) {\n await signIn();\n }\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Sign in failed: ${error instanceof Error ? error.message : String(JSON.stringify(error))}`,\n 'thunderid-signIn-Error',\n 'react',\n 'An error occurred while trying to sign in.',\n );\n }\n }\n })();\n }, []);\n\n /**\n * Check if the user is signed in and update the state accordingly.\n * This will also set an interval to check for the sign-in status every second\n * until the user is signed in.\n */\n useEffect(() => {\n let interval: NodeJS.Timeout;\n\n (async (): Promise<void> => {\n try {\n const status: boolean = await client.isSignedIn();\n\n setIsSignedInSync(status);\n\n if (!status) {\n interval = setInterval(async () => {\n const newStatus: boolean = await client.isSignedIn();\n\n if (newStatus) {\n setIsSignedInSync(true);\n clearInterval(interval);\n }\n }, 1000);\n } else {\n // TODO: Add a debug log to indicate that the user is already signed in.\n }\n } catch (error) {\n setIsSignedInSync(false);\n }\n })();\n\n return (): void => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [client]);\n\n useEffect(() => {\n (async (): Promise<void> => {\n try {\n const status: boolean = await client.isInitialized();\n\n setIsInitializedSync(status);\n } catch (error) {\n setIsInitializedSync(false);\n }\n })();\n }, [client]);\n\n /**\n * Track loading state changes from the ThunderID client\n */\n useEffect(() => {\n const checkLoadingState = (): void => {\n // Don't override loading state during critical session updates\n if (isUpdatingSession) {\n return;\n }\n\n // Don't set loading=false while auth params are in the URL and user isn't signed in yet.\n // This prevents ProtectedRoute from redirecting before the sign-in effect processes the auth code.\n const currentUrl: URL = new URL(window.location.href);\n if (!isSignedInSync && hasAuthParams(currentUrl, config.afterSignInUrl!)) {\n return;\n }\n\n setIsLoadingSync(client.isLoading());\n };\n\n // Initial check\n checkLoadingState();\n\n // Set up an interval to check for loading state changes\n const interval: NodeJS.Timeout = setInterval(checkLoadingState, 100);\n\n return (): void => {\n clearInterval(interval);\n };\n }, [client, isLoadingSync, isSignedInSync, isUpdatingSession]);\n\n const signInSilently = async (options?: SignInOptions): Promise<User | boolean> => {\n try {\n setIsUpdatingSession(true);\n setIsLoadingSync(true);\n return await client.signInSilently(options);\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Error while signing in silently: ${error instanceof Error ? error.message : String(JSON.stringify(error))}`,\n 'thunderid-signInSilently-Error',\n 'react',\n 'An error occurred while trying to sign in silently.',\n );\n } finally {\n setIsUpdatingSession(false);\n setIsLoadingSync(client.isLoading());\n }\n };\n\n const handleProfileUpdate = (payload: User): void => {\n setUser(payload);\n setUserProfile((prev: UserProfile | null) => ({\n flattenedProfile: generateFlattenedUserProfile(payload),\n profile: payload,\n }));\n };\n\n const getDecodedIdToken: () => Promise<IdToken> = useCallback(\n async (): Promise<IdToken> => client.getDecodedIdToken(),\n [client],\n );\n\n const getIdToken: () => Promise<string> = useCallback(async (): Promise<string> => client.getIdToken(), [client]);\n\n const getAccessToken: () => Promise<string> = useCallback(\n async (): Promise<string> => client.getAccessToken(),\n [client],\n );\n\n const getStorageManager: () => Promise<any> = useCallback(async (): Promise<any> => {\n const storageManager: any = storageManagerRef.current ?? (await client.getStorageManager());\n if (storageManager) {\n storageManagerRef.current = storageManager;\n }\n return storageManager;\n }, [client]);\n\n const request: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.request(...args),\n [client],\n );\n\n const requestAll: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.requestAll(...args),\n [client],\n );\n\n const exchangeToken: (exchangeConfig: any) => Promise<any> = useCallback(\n async (exchangeConfig: any): Promise<any> => client.exchangeToken(exchangeConfig),\n [client],\n );\n\n const signOut: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.signOut(...args),\n [client],\n );\n\n const recover: (payload: any) => Promise<any> = useCallback(\n async (payload: any): Promise<any> => client.recover(payload),\n [client],\n );\n\n const signUp: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.signUp(...args),\n [client],\n );\n\n const clearSession: (...args: any[]) => Promise<any> = useCallback(\n async (...args: any[]): Promise<any> => client.clearSession(...args),\n [client],\n );\n\n const reInitialize: (reInitConfig: any) => Promise<any> = useCallback(\n async (reInitConfig: any): Promise<any> => {\n const result: any = await client.reInitialize(reInitConfig);\n\n // Refresh React state from the reinitialized client so the context (config.endpoints,\n // baseUrl, discovery) reflects the new configuration instead of the pre-reinitialization state.\n const reinitializedConfig: ThunderIDReactConfig = await client.getConfiguration();\n setConfig(reinitializedConfig);\n setBaseUrl(reinitializedConfig.baseUrl ?? '');\n setWellKnown(await client.getDiscoveryResponse());\n\n return result;\n },\n [client],\n );\n\n const value: any = useMemo(\n () => ({\n afterSignInUrl: config.afterSignInUrl,\n applicationId: config.applicationId,\n baseUrl,\n endpoints: config.endpoints,\n scopes: config.scopes,\n clearSession,\n clientId,\n discovery: {\n wellKnown,\n },\n exchangeToken,\n getAccessToken,\n getDecodedIdToken,\n getIdToken,\n getStorageManager,\n http: {\n request,\n requestAll,\n },\n instanceId,\n isInitialized: isInitializedSync,\n isLoading: isLoadingSync,\n isSignedIn: isSignedInSync,\n organizationChain,\n organizationHandle: config?.organizationHandle,\n preferences,\n reInitialize,\n recover,\n signIn,\n signInOptions,\n tokenRequest,\n signInSilently,\n signInUrl,\n signOut,\n signUp,\n signUpUrl,\n syncSession,\n user,\n vendor: getVendorPrefix(config.vendor),\n }),\n [\n applicationId,\n config?.organizationHandle,\n config.vendor,\n config.afterSignInUrl,\n config.endpoints,\n config.scopes,\n signInUrl,\n signUpUrl,\n baseUrl,\n clientId,\n wellKnown,\n isInitializedSync,\n isLoadingSync,\n isSignedInSync,\n signIn,\n signInSilently,\n user,\n client,\n signInOptions,\n tokenRequest,\n syncSession,\n getDecodedIdToken,\n clearSession,\n exchangeToken,\n getAccessToken,\n getStorageManager,\n instanceId,\n organizationChain,\n preferences,\n recover,\n reInitialize,\n request,\n requestAll,\n signOut,\n signUp,\n ],\n );\n\n return (\n <ThunderIDContext.Provider value={value}>\n <I18nProvider preferences={preferences?.i18n} vendor={getVendorPrefix(config.vendor)}>\n <FlowMetaProvider enabled={preferences?.resolveFromMeta !== false}>\n <ThemeProvider\n theme={{\n ...preferences?.theme?.overrides,\n direction: preferences?.theme?.direction,\n }}\n >\n <FlowProvider>\n <UserProvider profile={userProfile!} onUpdateProfile={handleProfileUpdate}>\n <ComponentRendererProvider renderers={(extensions?.components?.renderers ?? {}) as any}>\n {children}\n </ComponentRendererProvider>\n </UserProvider>\n </FlowProvider>\n </ThemeProvider>\n </FlowMetaProvider>\n </I18nProvider>\n </ThunderIDContext.Provider>\n );\n};\n\nexport default ThunderIDProvider;\n"],"mappings":"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"}
@@ -1,3 +1,12 @@
1
1
  import { ThunderIDBrowserConfig } from '@thunderid/browser';
2
- export type ThunderIDReactConfig = ThunderIDBrowserConfig;
2
+ export type ThunderIDReactConfig = ThunderIDBrowserConfig & {
3
+ /**
4
+ * CSP nonce applied to the `<style>` tags Emotion injects into `<head>` at runtime.
5
+ *
6
+ * Set this when the consuming app enforces a strict `style-src` Content-Security-Policy
7
+ * directive (i.e. one without `'unsafe-inline'`) - the nonce must match the one the app's
8
+ * own CSP header/meta tag issues for the current request.
9
+ */
10
+ cspNonce?: string;
11
+ };
3
12
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,GAAG;IAC1D;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { ClassNamesArg, CSSInterpolation } from '@emotion/css/create-instance';
2
+ /**
3
+ * (Re)configures the shared Emotion instance to inject styles under the given vendor's cache
4
+ * key (emitted as the `data-emotion` attribute on its `<style>` tags, so a white-labeled
5
+ * consumer's generated styles stay under their own namespace rather than `thunderid`) and
6
+ * with the given CSP nonce.
7
+ *
8
+ * This must be called synchronously from a component's render body - never from inside a
9
+ * `useEffect`/`useLayoutEffect` - and as early as possible in the render tree (e.g. as the
10
+ * first statement in `ThunderIDProvider`). React's render phase calls function components
11
+ * synchronously and depth-first: a top-level call here runs, and returns, before any
12
+ * descendant component's `css()`/`cx()`/`keyframes()` calls execute during that same render
13
+ * pass. That ordering is what lets the very first paint's injected `<style>` tags already
14
+ * carry the nonce. A `useEffect` runs after commit, once the first (un-nonced) `<style>`
15
+ * tags have already been inserted into `<head>` - by the time the effect fires it is too
16
+ * late to protect that initial paint.
17
+ *
18
+ * Calling this repeatedly with the same vendor/nonce (e.g. once per render) is a cheap no-op:
19
+ * the underlying Emotion cache/instance is only recreated when either actually changes.
20
+ *
21
+ * @param nonce - The CSP nonce to apply to runtime-injected `<style>` tags, or `undefined`
22
+ * to use no nonce.
23
+ * @param vendor - The configured vendor/brand namespace (defaults to the ThunderID vendor
24
+ * prefix, same as every other vendor-scoped key in the SDK).
25
+ */
26
+ export declare function configureEmotionNonce(nonce?: string, vendor?: string): void;
27
+ export declare const css: {
28
+ (template: TemplateStringsArray, ...args: CSSInterpolation[]): string;
29
+ (...args: CSSInterpolation[]): string;
30
+ };
31
+ export declare function cx(...classNames: ClassNamesArg[]): string;
32
+ export declare const keyframes: {
33
+ (template: TemplateStringsArray, ...args: CSSInterpolation[]): string;
34
+ (...args: CSSInterpolation[]): string;
35
+ };
36
+ //# sourceMappingURL=emotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion.d.ts","sourceRoot":"","sources":["../../src/styles/emotion.ts"],"names":[],"mappings":"AAGA,OAAsB,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAiB5F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ3E;AAED,eAAO,MAAM,GAAG,EAAE;IAChB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IACtE,CAAC,GAAG,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;CAGkB,CAAC;AAE3D,wBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,CAEzD;AAED,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IACtE,CAAC,GAAG,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;CAG8B,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { getVendorPrefix } from "@thunderid/browser";
2
+ import createEmotion from "@emotion/css/create-instance";
3
+
4
+ //#region src/styles/emotion.ts
5
+ /**
6
+ * The vendor/nonce this module was last configured with, tracked so repeated calls with the
7
+ * same values (e.g. on every render of {@link ThunderIDProvider}) are cheap no-ops instead of
8
+ * recreating the Emotion cache - and the `<style>` tags it owns - on every render.
9
+ */
10
+ let configuredVendor;
11
+ let configuredNonce;
12
+ /**
13
+ * Module-level, mutable Emotion instance. Recreated only when {@link configureEmotionNonce}
14
+ * is called with a vendor or nonce different from the ones currently configured.
15
+ */
16
+ let instance = createEmotion({ key: getVendorPrefix(configuredVendor) });
17
+ /**
18
+ * (Re)configures the shared Emotion instance to inject styles under the given vendor's cache
19
+ * key (emitted as the `data-emotion` attribute on its `<style>` tags, so a white-labeled
20
+ * consumer's generated styles stay under their own namespace rather than `thunderid`) and
21
+ * with the given CSP nonce.
22
+ *
23
+ * This must be called synchronously from a component's render body - never from inside a
24
+ * `useEffect`/`useLayoutEffect` - and as early as possible in the render tree (e.g. as the
25
+ * first statement in `ThunderIDProvider`). React's render phase calls function components
26
+ * synchronously and depth-first: a top-level call here runs, and returns, before any
27
+ * descendant component's `css()`/`cx()`/`keyframes()` calls execute during that same render
28
+ * pass. That ordering is what lets the very first paint's injected `<style>` tags already
29
+ * carry the nonce. A `useEffect` runs after commit, once the first (un-nonced) `<style>`
30
+ * tags have already been inserted into `<head>` - by the time the effect fires it is too
31
+ * late to protect that initial paint.
32
+ *
33
+ * Calling this repeatedly with the same vendor/nonce (e.g. once per render) is a cheap no-op:
34
+ * the underlying Emotion cache/instance is only recreated when either actually changes.
35
+ *
36
+ * @param nonce - The CSP nonce to apply to runtime-injected `<style>` tags, or `undefined`
37
+ * to use no nonce.
38
+ * @param vendor - The configured vendor/brand namespace (defaults to the ThunderID vendor
39
+ * prefix, same as every other vendor-scoped key in the SDK).
40
+ */
41
+ function configureEmotionNonce(nonce, vendor) {
42
+ if (nonce === configuredNonce && vendor === configuredVendor) return;
43
+ configuredNonce = nonce;
44
+ configuredVendor = vendor;
45
+ instance = createEmotion({
46
+ key: getVendorPrefix(vendor),
47
+ nonce
48
+ });
49
+ }
50
+ const css = (...args) => instance.css(...args);
51
+ function cx(...classNames) {
52
+ return instance.cx(...classNames);
53
+ }
54
+ const keyframes = (...args) => instance.keyframes(...args);
55
+
56
+ //#endregion
57
+ export { configureEmotionNonce, css, cx, keyframes };
58
+ //# sourceMappingURL=emotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion.js","names":["configuredVendor: string | undefined","configuredNonce: string | undefined","instance: ReturnType<typeof createEmotion>","css: {\n (template: TemplateStringsArray, ...args: CSSInterpolation[]): string;\n (...args: CSSInterpolation[]): string;\n}","keyframes: {\n (template: TemplateStringsArray, ...args: CSSInterpolation[]): string;\n (...args: CSSInterpolation[]): string;\n}"],"sources":["../../src/styles/emotion.ts"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport createEmotion, {ClassNamesArg, CSSInterpolation} from '@emotion/css/create-instance';\nimport {getVendorPrefix} from '@thunderid/browser';\n\n/**\n * The vendor/nonce this module was last configured with, tracked so repeated calls with the\n * same values (e.g. on every render of {@link ThunderIDProvider}) are cheap no-ops instead of\n * recreating the Emotion cache - and the `<style>` tags it owns - on every render.\n */\nlet configuredVendor: string | undefined;\nlet configuredNonce: string | undefined;\n\n/**\n * Module-level, mutable Emotion instance. Recreated only when {@link configureEmotionNonce}\n * is called with a vendor or nonce different from the ones currently configured.\n */\nlet instance: ReturnType<typeof createEmotion> = createEmotion({key: getVendorPrefix(configuredVendor)});\n\n/**\n * (Re)configures the shared Emotion instance to inject styles under the given vendor's cache\n * key (emitted as the `data-emotion` attribute on its `<style>` tags, so a white-labeled\n * consumer's generated styles stay under their own namespace rather than `thunderid`) and\n * with the given CSP nonce.\n *\n * This must be called synchronously from a component's render body - never from inside a\n * `useEffect`/`useLayoutEffect` - and as early as possible in the render tree (e.g. as the\n * first statement in `ThunderIDProvider`). React's render phase calls function components\n * synchronously and depth-first: a top-level call here runs, and returns, before any\n * descendant component's `css()`/`cx()`/`keyframes()` calls execute during that same render\n * pass. That ordering is what lets the very first paint's injected `<style>` tags already\n * carry the nonce. A `useEffect` runs after commit, once the first (un-nonced) `<style>`\n * tags have already been inserted into `<head>` - by the time the effect fires it is too\n * late to protect that initial paint.\n *\n * Calling this repeatedly with the same vendor/nonce (e.g. once per render) is a cheap no-op:\n * the underlying Emotion cache/instance is only recreated when either actually changes.\n *\n * @param nonce - The CSP nonce to apply to runtime-injected `<style>` tags, or `undefined`\n * to use no nonce.\n * @param vendor - The configured vendor/brand namespace (defaults to the ThunderID vendor\n * prefix, same as every other vendor-scoped key in the SDK).\n */\nexport function configureEmotionNonce(nonce?: string, vendor?: string): void {\n if (nonce === configuredNonce && vendor === configuredVendor) {\n return;\n }\n\n configuredNonce = nonce;\n configuredVendor = vendor;\n instance = createEmotion({key: getVendorPrefix(vendor), nonce});\n}\n\nexport const css: {\n (template: TemplateStringsArray, ...args: CSSInterpolation[]): string;\n (...args: CSSInterpolation[]): string;\n} = (...args: [TemplateStringsArray | CSSInterpolation, ...CSSInterpolation[]]): string =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (instance.css as (...cssArgs: any[]) => string)(...args);\n\nexport function cx(...classNames: ClassNamesArg[]): string {\n return instance.cx(...classNames);\n}\n\nexport const keyframes: {\n (template: TemplateStringsArray, ...args: CSSInterpolation[]): string;\n (...args: CSSInterpolation[]): string;\n} = (...args: [TemplateStringsArray | CSSInterpolation, ...CSSInterpolation[]]): string =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (instance.keyframes as (...keyframesArgs: any[]) => string)(...args);\n"],"mappings":";;;;;;;;;AAWA,IAAIA;AACJ,IAAIC;;;;;AAMJ,IAAIC,WAA6C,cAAc,EAAC,KAAK,gBAAgB,iBAAiB,EAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;AA0BxG,SAAgB,sBAAsB,OAAgB,QAAuB;AAC3E,KAAI,UAAU,mBAAmB,WAAW,iBAC1C;AAGF,mBAAkB;AAClB,oBAAmB;AACnB,YAAW,cAAc;EAAC,KAAK,gBAAgB,OAAO;EAAE;EAAM,CAAC;;AAGjE,MAAaC,OAGR,GAAG,SAEL,SAAS,IAAsC,GAAG,KAAK;AAE1D,SAAgB,GAAG,GAAG,YAAqC;AACzD,QAAO,SAAS,GAAG,GAAG,WAAW;;AAGnC,MAAaC,aAGR,GAAG,SAEL,SAAS,UAAkD,GAAG,KAAK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thunderid/react",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "React SDK for ThunderID",
5
5
  "keywords": [
6
6
  "thunderid",
@@ -62,7 +62,7 @@
62
62
  "@floating-ui/react": "0.27.12",
63
63
  "dompurify": "3.4.11",
64
64
  "tslib": "2.8.1",
65
- "@thunderid/browser": "^0.12.0"
65
+ "@thunderid/browser": "^0.13.0"
66
66
  },
67
67
  "publishConfig": {
68
68
  "access": "public"