@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":"BaseLanguageSwitcher.cjs","names":["BaseLanguageSwitcher: FC<BaseLanguageSwitcherProps>","useTheme","styles: Record<string, string>","useStyles","hasMultipleLanguages: boolean","autoUpdate","currentOption: LanguageOption | undefined","ChevronDown","FloatingPortal","FloatingFocusManager","Check"],"sources":["../../../../../src/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {cx} from '@emotion/css';\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from '@floating-ui/react';\nimport {FC, ReactElement, ReactNode, useEffect, useState} from 'react';\nimport useStyles from './BaseLanguageSwitcher.styles';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport Check from '../../primitives/Icons/Check';\nimport ChevronDown from '../../primitives/Icons/ChevronDown';\n\n/**\n * A resolved language option with display name and emoji flag.\n */\nexport interface LanguageOption {\n /** BCP 47 language tag (e.g. \"en\", \"fr\", \"en-US\") */\n code: string;\n /** Human-readable display name resolved via Intl.DisplayNames */\n displayName: string;\n /** Flag emoji or globe emoji for the language */\n emoji: string;\n}\n\n/**\n * Render props exposed to consumers when using the render-prop pattern.\n */\nexport interface LanguageSwitcherRenderProps {\n /** The currently active language code */\n currentLanguage: string;\n /** Whether a language switch is in progress */\n isLoading: boolean;\n /** Resolved language options */\n languages: LanguageOption[];\n /** Call this to switch to a different language */\n onLanguageChange: (language: string) => void;\n}\n\nexport interface BaseLanguageSwitcherProps {\n /**\n * Render-props callback. When provided, the default dropdown UI is replaced with\n * whatever JSX the callback returns.\n *\n * @example\n * ```tsx\n * <BaseLanguageSwitcher {...props}>\n * {({languages, currentLanguage, onLanguageChange}) => (\n * <select value={currentLanguage} onChange={e => onLanguageChange(e.target.value)}>\n * {languages.map(l => <option key={l.code} value={l.code}>{l.emoji} {l.displayName}</option>)}\n * </select>\n * )}\n * </BaseLanguageSwitcher>\n * ```\n */\n children?: (props: LanguageSwitcherRenderProps) => ReactNode;\n /** Additional CSS class applied to the root element (default UI only) */\n className?: string;\n /** The currently active language code */\n currentLanguage: string;\n /** Whether a language switch is in progress */\n isLoading?: boolean;\n /** Resolved language options to display */\n languages: LanguageOption[];\n /** Called when the user selects a language */\n onLanguageChange: (language: string) => void;\n}\n\n/**\n * Pure-UI language switcher dropdown.\n * Accepts resolved `LanguageOption[]` (code + displayName + emoji) and delegates\n * language switching to the `onLanguageChange` callback.\n *\n * Supports render props for full UI customisation.\n */\nconst BaseLanguageSwitcher: FC<BaseLanguageSwitcherProps> = ({\n children,\n className,\n currentLanguage,\n isLoading = false,\n languages,\n onLanguageChange,\n}: BaseLanguageSwitcherProps): ReactElement => {\n const {theme, colorScheme} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const [isOpen, setIsOpen] = useState(false);\n const hasMultipleLanguages: boolean = languages.length > 1;\n\n useEffect(() => {\n if (!hasMultipleLanguages && isOpen) {\n setIsOpen(false);\n }\n }, [hasMultipleLanguages, isOpen]);\n\n const {refs, floatingStyles, context} = useFloating({\n middleware: [offset(4), flip(), shift()],\n onOpenChange: setIsOpen,\n open: isOpen,\n whileElementsMounted: autoUpdate,\n });\n\n const click: ReturnType<typeof useClick> = useClick(context, {enabled: hasMultipleLanguages});\n const dismiss: ReturnType<typeof useDismiss> = useDismiss(context, {enabled: hasMultipleLanguages});\n const role: ReturnType<typeof useRole> = useRole(context, {enabled: hasMultipleLanguages, role: 'listbox'});\n const {getReferenceProps, getFloatingProps} = useInteractions([click, dismiss, role]);\n\n const currentOption: LanguageOption | undefined = languages.find((l: LanguageOption) => l.code === currentLanguage);\n\n if (children) {\n return (\n <>\n {children({\n currentLanguage,\n isLoading,\n languages,\n onLanguageChange,\n })}\n </>\n );\n }\n\n return (\n <div className={cx(styles['root'], className)}>\n <button\n ref={refs.setReference}\n type=\"button\"\n disabled={isLoading}\n aria-label=\"Switch language\"\n {...getReferenceProps()}\n className={styles['trigger']}\n >\n {currentOption && <span className={styles['triggerEmoji']}>{currentOption.emoji}</span>}\n <span className={styles['triggerLabel']}>{currentOption?.displayName ?? currentLanguage}</span>\n {hasMultipleLanguages && <ChevronDown />}\n </button>\n\n {isOpen && hasMultipleLanguages && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false}>\n <div\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n className={styles['content']}\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n {languages.map((lang: LanguageOption) => (\n <button\n key={lang.code}\n type=\"button\"\n role=\"option\"\n aria-selected={lang.code === currentLanguage}\n className={cx(styles['option'], lang.code === currentLanguage && styles['optionActive'])}\n onClick={() => {\n onLanguageChange(lang.code);\n setIsOpen(false);\n }}\n >\n <span className={styles['optionEmoji']}>{lang.emoji}</span>\n <span className={styles['optionLabel']}>{lang.displayName}</span>\n {lang.code === currentLanguage && (\n <span className={styles['checkIcon']}>\n <Check />\n </span>\n )}\n </button>\n ))}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n};\n\nexport default BaseLanguageSwitcher;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqFA,MAAMA,wBAAuD,EAC3D,UACA,WACA,iBACA,YAAY,OACZ,WACA,uBAC6C;CAC7C,MAAM,EAAC,OAAO,gBAAeC,0BAAU;CACvC,MAAMC,SAAiCC,4CAAU,OAAO,YAAY;CACpE,MAAM,CAAC,QAAQ,iCAAsB,MAAM;CAC3C,MAAMC,uBAAgC,UAAU,SAAS;AAEzD,4BAAgB;AACd,MAAI,CAAC,wBAAwB,OAC3B,WAAU,MAAM;IAEjB,CAAC,sBAAsB,OAAO,CAAC;CAElC,MAAM,EAAC,MAAM,gBAAgB,iDAAuB;EAClD,YAAY;mCAAQ,EAAE;kCAAQ;mCAAS;GAAC;EACxC,cAAc;EACd,MAAM;EACN,sBAAsBC;EACvB,CAAC;CAKF,MAAM,EAAC,mBAAmB,8DAAoC;oCAHV,SAAS,EAAC,SAAS,sBAAqB,CAAC;sCACnC,SAAS,EAAC,SAAS,sBAAqB,CAAC;mCAClD,SAAS;GAAC,SAAS;GAAsB,MAAM;GAAU,CAAC;EACvB,CAAC;CAErF,MAAMC,gBAA4C,UAAU,MAAM,MAAsB,EAAE,SAAS,gBAAgB;AAEnH,KAAI,SACF,QACE,mFACG,SAAS;EACR;EACA;EACA;EACA;EACD,CAAC,GACD;AAIP,QACE,4CAAC;EAAI,iCAAc,OAAO,SAAS,UAAU;aAC3C,4CAAC;GACC,KAAK,KAAK;GACV,MAAK;GACL,UAAU;GACV,cAAW;GACX,GAAI,mBAAmB;GACvB,WAAW,OAAO;;IAEjB,iBAAiB,2CAAC;KAAK,WAAW,OAAO;eAAkB,cAAc;MAAa;IACvF,2CAAC;KAAK,WAAW,OAAO;eAAkB,eAAe,eAAe;MAAuB;IAC9F,wBAAwB,2CAACC,gCAAc;;IACjC,EAER,UAAU,wBACT,2CAACC,gDACC,2CAACC;GAA8B;GAAS,OAAO;aAC7C,2CAAC;IACC,KAAK,KAAK;IACV,OAAO;IACP,GAAI,kBAAkB;IACtB,WAAW,OAAO;IAClB,MAAK;IACL,cAAW;cAEV,UAAU,KAAK,SACd,4CAAC;KAEC,MAAK;KACL,MAAK;KACL,iBAAe,KAAK,SAAS;KAC7B,iCAAc,OAAO,WAAW,KAAK,SAAS,mBAAmB,OAAO,gBAAgB;KACxF,eAAe;AACb,uBAAiB,KAAK,KAAK;AAC3B,gBAAU,MAAM;;;MAGlB,2CAAC;OAAK,WAAW,OAAO;iBAAiB,KAAK;QAAa;MAC3D,2CAAC;OAAK,WAAW,OAAO;iBAAiB,KAAK;QAAmB;MAChE,KAAK,SAAS,mBACb,2CAAC;OAAK,WAAW,OAAO;iBACtB,2CAACC,0BAAQ;QACJ;;OAfJ,KAAK,KAiBH,CACT;KACE;IACe,GACR;GAEf;;AAIV,mCAAe"}
1
+ {"version":3,"file":"BaseLanguageSwitcher.cjs","names":["BaseLanguageSwitcher: FC<BaseLanguageSwitcherProps>","useTheme","styles: Record<string, string>","useStyles","hasMultipleLanguages: boolean","autoUpdate","currentOption: LanguageOption | undefined","cx","ChevronDown","FloatingPortal","FloatingFocusManager","Check"],"sources":["../../../../../src/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from '@floating-ui/react';\nimport {FC, ReactElement, ReactNode, useEffect, useState} from 'react';\nimport useStyles from './BaseLanguageSwitcher.styles';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport {cx} from '../../../styles/emotion';\nimport Check from '../../primitives/Icons/Check';\nimport ChevronDown from '../../primitives/Icons/ChevronDown';\n\n/**\n * A resolved language option with display name and emoji flag.\n */\nexport interface LanguageOption {\n /** BCP 47 language tag (e.g. \"en\", \"fr\", \"en-US\") */\n code: string;\n /** Human-readable display name resolved via Intl.DisplayNames */\n displayName: string;\n /** Flag emoji or globe emoji for the language */\n emoji: string;\n}\n\n/**\n * Render props exposed to consumers when using the render-prop pattern.\n */\nexport interface LanguageSwitcherRenderProps {\n /** The currently active language code */\n currentLanguage: string;\n /** Whether a language switch is in progress */\n isLoading: boolean;\n /** Resolved language options */\n languages: LanguageOption[];\n /** Call this to switch to a different language */\n onLanguageChange: (language: string) => void;\n}\n\nexport interface BaseLanguageSwitcherProps {\n /**\n * Render-props callback. When provided, the default dropdown UI is replaced with\n * whatever JSX the callback returns.\n *\n * @example\n * ```tsx\n * <BaseLanguageSwitcher {...props}>\n * {({languages, currentLanguage, onLanguageChange}) => (\n * <select value={currentLanguage} onChange={e => onLanguageChange(e.target.value)}>\n * {languages.map(l => <option key={l.code} value={l.code}>{l.emoji} {l.displayName}</option>)}\n * </select>\n * )}\n * </BaseLanguageSwitcher>\n * ```\n */\n children?: (props: LanguageSwitcherRenderProps) => ReactNode;\n /** Additional CSS class applied to the root element (default UI only) */\n className?: string;\n /** The currently active language code */\n currentLanguage: string;\n /** Whether a language switch is in progress */\n isLoading?: boolean;\n /** Resolved language options to display */\n languages: LanguageOption[];\n /** Called when the user selects a language */\n onLanguageChange: (language: string) => void;\n}\n\n/**\n * Pure-UI language switcher dropdown.\n * Accepts resolved `LanguageOption[]` (code + displayName + emoji) and delegates\n * language switching to the `onLanguageChange` callback.\n *\n * Supports render props for full UI customisation.\n */\nconst BaseLanguageSwitcher: FC<BaseLanguageSwitcherProps> = ({\n children,\n className,\n currentLanguage,\n isLoading = false,\n languages,\n onLanguageChange,\n}: BaseLanguageSwitcherProps): ReactElement => {\n const {theme, colorScheme} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const [isOpen, setIsOpen] = useState(false);\n const hasMultipleLanguages: boolean = languages.length > 1;\n\n useEffect(() => {\n if (!hasMultipleLanguages && isOpen) {\n setIsOpen(false);\n }\n }, [hasMultipleLanguages, isOpen]);\n\n const {refs, floatingStyles, context} = useFloating({\n middleware: [offset(4), flip(), shift()],\n onOpenChange: setIsOpen,\n open: isOpen,\n whileElementsMounted: autoUpdate,\n });\n\n const click: ReturnType<typeof useClick> = useClick(context, {enabled: hasMultipleLanguages});\n const dismiss: ReturnType<typeof useDismiss> = useDismiss(context, {enabled: hasMultipleLanguages});\n const role: ReturnType<typeof useRole> = useRole(context, {enabled: hasMultipleLanguages, role: 'listbox'});\n const {getReferenceProps, getFloatingProps} = useInteractions([click, dismiss, role]);\n\n const currentOption: LanguageOption | undefined = languages.find((l: LanguageOption) => l.code === currentLanguage);\n\n if (children) {\n return (\n <>\n {children({\n currentLanguage,\n isLoading,\n languages,\n onLanguageChange,\n })}\n </>\n );\n }\n\n return (\n <div className={cx(styles['root'], className)}>\n <button\n ref={refs.setReference}\n type=\"button\"\n disabled={isLoading}\n aria-label=\"Switch language\"\n {...getReferenceProps()}\n className={styles['trigger']}\n >\n {currentOption && <span className={styles['triggerEmoji']}>{currentOption.emoji}</span>}\n <span className={styles['triggerLabel']}>{currentOption?.displayName ?? currentLanguage}</span>\n {hasMultipleLanguages && <ChevronDown />}\n </button>\n\n {isOpen && hasMultipleLanguages && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false}>\n <div\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n className={styles['content']}\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n {languages.map((lang: LanguageOption) => (\n <button\n key={lang.code}\n type=\"button\"\n role=\"option\"\n aria-selected={lang.code === currentLanguage}\n className={cx(styles['option'], lang.code === currentLanguage && styles['optionActive'])}\n onClick={() => {\n onLanguageChange(lang.code);\n setIsOpen(false);\n }}\n >\n <span className={styles['optionEmoji']}>{lang.emoji}</span>\n <span className={styles['optionLabel']}>{lang.displayName}</span>\n {lang.code === currentLanguage && (\n <span className={styles['checkIcon']}>\n <Check />\n </span>\n )}\n </button>\n ))}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n};\n\nexport default BaseLanguageSwitcher;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqFA,MAAMA,wBAAuD,EAC3D,UACA,WACA,iBACA,YAAY,OACZ,WACA,uBAC6C;CAC7C,MAAM,EAAC,OAAO,gBAAeC,0BAAU;CACvC,MAAMC,SAAiCC,4CAAU,OAAO,YAAY;CACpE,MAAM,CAAC,QAAQ,iCAAsB,MAAM;CAC3C,MAAMC,uBAAgC,UAAU,SAAS;AAEzD,4BAAgB;AACd,MAAI,CAAC,wBAAwB,OAC3B,WAAU,MAAM;IAEjB,CAAC,sBAAsB,OAAO,CAAC;CAElC,MAAM,EAAC,MAAM,gBAAgB,iDAAuB;EAClD,YAAY;mCAAQ,EAAE;kCAAQ;mCAAS;GAAC;EACxC,cAAc;EACd,MAAM;EACN,sBAAsBC;EACvB,CAAC;CAKF,MAAM,EAAC,mBAAmB,8DAAoC;oCAHV,SAAS,EAAC,SAAS,sBAAqB,CAAC;sCACnC,SAAS,EAAC,SAAS,sBAAqB,CAAC;mCAClD,SAAS;GAAC,SAAS;GAAsB,MAAM;GAAU,CAAC;EACvB,CAAC;CAErF,MAAMC,gBAA4C,UAAU,MAAM,MAAsB,EAAE,SAAS,gBAAgB;AAEnH,KAAI,SACF,QACE,mFACG,SAAS;EACR;EACA;EACA;EACA;EACD,CAAC,GACD;AAIP,QACE,4CAAC;EAAI,WAAWC,mBAAG,OAAO,SAAS,UAAU;aAC3C,4CAAC;GACC,KAAK,KAAK;GACV,MAAK;GACL,UAAU;GACV,cAAW;GACX,GAAI,mBAAmB;GACvB,WAAW,OAAO;;IAEjB,iBAAiB,2CAAC;KAAK,WAAW,OAAO;eAAkB,cAAc;MAAa;IACvF,2CAAC;KAAK,WAAW,OAAO;eAAkB,eAAe,eAAe;MAAuB;IAC9F,wBAAwB,2CAACC,gCAAc;;IACjC,EAER,UAAU,wBACT,2CAACC,gDACC,2CAACC;GAA8B;GAAS,OAAO;aAC7C,2CAAC;IACC,KAAK,KAAK;IACV,OAAO;IACP,GAAI,kBAAkB;IACtB,WAAW,OAAO;IAClB,MAAK;IACL,cAAW;cAEV,UAAU,KAAK,SACd,4CAAC;KAEC,MAAK;KACL,MAAK;KACL,iBAAe,KAAK,SAAS;KAC7B,WAAWH,mBAAG,OAAO,WAAW,KAAK,SAAS,mBAAmB,OAAO,gBAAgB;KACxF,eAAe;AACb,uBAAiB,KAAK,KAAK;AAC3B,gBAAU,MAAM;;;MAGlB,2CAAC;OAAK,WAAW,OAAO;iBAAiB,KAAK;QAAa;MAC3D,2CAAC;OAAK,WAAW,OAAO;iBAAiB,KAAK;QAAmB;MAChE,KAAK,SAAS,mBACb,2CAAC;OAAK,WAAW,OAAO;iBACtB,2CAACI,0BAAQ;QACJ;;OAfJ,KAAK,KAiBH,CACT;KACE;IACe,GACR;GAEf;;AAIV,mCAAe"}
@@ -1,17 +1,16 @@
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/LanguageSwitcher/BaseLanguageSwitcher.styles.ts
8
7
  const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
9
- const root = __emotion_css.css`
8
+ const root = require_emotion.css`
10
9
  display: inline-block;
11
10
  position: relative;
12
11
  font-family: ${theme.vars.typography.fontFamily};
13
12
  `;
14
- const trigger = __emotion_css.css`
13
+ const trigger = require_emotion.css`
15
14
  display: inline-flex;
16
15
  align-items: center;
17
16
  gap: calc(${theme.vars.spacing.unit} * 0.5);
@@ -28,18 +27,18 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
28
27
  background-color: ${theme.vars.colors.action?.hover || "rgba(0, 0, 0, 0.04)"};
29
28
  }
30
29
  `;
31
- const triggerEmoji = __emotion_css.css`
30
+ const triggerEmoji = require_emotion.css`
32
31
  font-size: 1rem;
33
32
  line-height: 1;
34
33
  `;
35
- const triggerLabel = __emotion_css.css`
34
+ const triggerLabel = require_emotion.css`
36
35
  flex: 1;
37
36
  overflow: hidden;
38
37
  text-overflow: ellipsis;
39
38
  white-space: nowrap;
40
39
  font-weight: 500;
41
40
  `;
42
- const content = __emotion_css.css`
41
+ const content = require_emotion.css`
43
42
  min-width: 200px;
44
43
  max-width: 320px;
45
44
  background-color: ${theme.vars.colors.background.surface};
@@ -50,7 +49,7 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
50
49
  z-index: 1000;
51
50
  padding: calc(${theme.vars.spacing.unit} * 0.5) 0;
52
51
  `;
53
- const option = __emotion_css.css`
52
+ const option = require_emotion.css`
54
53
  display: flex;
55
54
  align-items: center;
56
55
  gap: ${theme.vars.spacing.unit};
@@ -68,23 +67,23 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
68
67
  background-color: ${theme.vars.colors.action?.hover || "rgba(0, 0, 0, 0.04)"};
69
68
  }
70
69
  `;
71
- const optionActive = __emotion_css.css`
70
+ const optionActive = require_emotion.css`
72
71
  font-weight: 600;
73
72
  color: ${theme.vars.colors.primary?.main || theme.vars.colors.text.primary};
74
73
  `;
75
- const optionEmoji = __emotion_css.css`
74
+ const optionEmoji = require_emotion.css`
76
75
  font-size: 1rem;
77
76
  line-height: 1;
78
77
  flex-shrink: 0;
79
78
  `;
80
- const optionLabel = __emotion_css.css`
79
+ const optionLabel = require_emotion.css`
81
80
  flex: 1;
82
81
  overflow: hidden;
83
82
  text-overflow: ellipsis;
84
83
  white-space: nowrap;
85
84
  `;
86
85
  return {
87
- checkIcon: __emotion_css.css`
86
+ checkIcon: require_emotion.css`
88
87
  color: ${theme.vars.colors.primary?.main || theme.vars.colors.text.primary};
89
88
  flex-shrink: 0;
90
89
  margin-inline-start: auto;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseLanguageSwitcher.styles.cjs","names":["root: string","trigger: string","triggerEmoji: string","triggerLabel: string","content: string","option: string","optionActive: string","optionEmoji: string","optionLabel: string"],"sources":["../../../../../src/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.ts"],"sourcesContent":["// Copyright 2026 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\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const root: string = css`\n display: inline-block;\n position: relative;\n font-family: ${theme.vars.typography.fontFamily};\n `;\n\n const trigger: string = css`\n display: inline-flex;\n align-items: center;\n gap: calc(${theme.vars.spacing.unit} * 0.5);\n padding: calc(${theme.vars.spacing.unit} * 0.75) ${theme.vars.spacing.unit};\n border: 1px solid ${theme.vars.colors.border};\n background: ${theme.vars.colors.background.surface};\n cursor: pointer;\n border-radius: ${theme.vars.borderRadius.medium};\n min-width: 120px;\n font-size: 0.875rem;\n color: ${theme.vars.colors.text.primary};\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.04)'};\n }\n `;\n\n const triggerEmoji: string = css`\n font-size: 1rem;\n line-height: 1;\n `;\n\n const triggerLabel: string = css`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n `;\n\n const content: string = css`\n min-width: 200px;\n max-width: 320px;\n background-color: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.medium};\n box-shadow: ${theme.vars.shadows.medium};\n border: 1px solid ${theme.vars.colors.border};\n outline: none;\n z-index: 1000;\n padding: calc(${theme.vars.spacing.unit} * 0.5) 0;\n `;\n\n const option: string = css`\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1) calc(${theme.vars.spacing.unit} * 1.5);\n width: 100%;\n border: none;\n background-color: transparent;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n color: ${theme.vars.colors.text.primary};\n transition: background-color 0.15s ease-in-out;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.04)'};\n }\n `;\n\n const optionActive: string = css`\n font-weight: 600;\n color: ${theme.vars.colors.primary?.main || theme.vars.colors.text.primary};\n `;\n\n const optionEmoji: string = css`\n font-size: 1rem;\n line-height: 1;\n flex-shrink: 0;\n `;\n\n const optionLabel: string = css`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const checkIcon: string = css`\n color: ${theme.vars.colors.primary?.main || theme.vars.colors.text.primary};\n flex-shrink: 0;\n margin-inline-start: auto;\n `;\n\n return {\n checkIcon,\n content,\n option,\n optionActive,\n optionEmoji,\n optionLabel,\n root,\n trigger,\n triggerEmoji,\n triggerLabel,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.border,\n theme.vars.borderRadius.medium,\n theme.vars.shadows.medium,\n theme.vars.spacing.unit,\n theme.vars.colors.action?.hover,\n theme.vars.typography.fontFamily,\n theme.vars.colors.primary?.main,\n colorScheme,\n ]);\n\nexport default useStyles;\n"],"mappings":";;;;;;;AAOA,MAAM,aAAa,OAAc,yCACjB;CACZ,MAAMA,OAAe,iBAAG;;;qBAGP,MAAM,KAAK,WAAW,WAAW;;CAGlD,MAAMC,UAAkB,iBAAG;;;kBAGb,MAAM,KAAK,QAAQ,KAAK;sBACpB,MAAM,KAAK,QAAQ,KAAK,WAAW,MAAM,KAAK,QAAQ,KAAK;0BACvD,MAAM,KAAK,OAAO,OAAO;oBAC/B,MAAM,KAAK,OAAO,WAAW,QAAQ;;uBAElC,MAAM,KAAK,aAAa,OAAO;;;eAGvC,MAAM,KAAK,OAAO,KAAK,QAAQ;;;4BAGlB,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;CAIjF,MAAMC,eAAuB,iBAAG;;;;CAKhC,MAAMC,eAAuB,iBAAG;;;;;;;CAQhC,MAAMC,UAAkB,iBAAG;;;0BAGL,MAAM,KAAK,OAAO,WAAW,QAAQ;uBACxC,MAAM,KAAK,aAAa,OAAO;oBAClC,MAAM,KAAK,QAAQ,OAAO;0BACpB,MAAM,KAAK,OAAO,OAAO;;;sBAG7B,MAAM,KAAK,QAAQ,KAAK;;CAG1C,MAAMC,SAAiB,iBAAG;;;aAGjB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK,aAAa,MAAM,KAAK,QAAQ,KAAK;;;;;;;eAOpE,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;4BAIlB,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;CAIjF,MAAMC,eAAuB,iBAAG;;eAErB,MAAM,KAAK,OAAO,SAAS,QAAQ,MAAM,KAAK,OAAO,KAAK,QAAQ;;CAG7E,MAAMC,cAAsB,iBAAG;;;;;CAM/B,MAAMC,cAAsB,iBAAG;;;;;;AAa/B,QAAO;EACL,WAPwB,iBAAG;eAClB,MAAM,KAAK,OAAO,SAAS,QAAQ,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;EAO3E;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;GACA;CACD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,OAAO,QAAQ;CAC1B,MAAM,KAAK,WAAW;CACtB,MAAM,KAAK,OAAO,SAAS;CAC3B;CACD,CAAC;AAEJ,0CAAe"}
1
+ {"version":3,"file":"BaseLanguageSwitcher.styles.cjs","names":["root: string","trigger: string","triggerEmoji: string","triggerLabel: string","content: string","option: string","optionActive: string","optionEmoji: string","optionLabel: string"],"sources":["../../../../../src/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.styles.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\nimport {css} from '../../../styles/emotion';\n\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const root: string = css`\n display: inline-block;\n position: relative;\n font-family: ${theme.vars.typography.fontFamily};\n `;\n\n const trigger: string = css`\n display: inline-flex;\n align-items: center;\n gap: calc(${theme.vars.spacing.unit} * 0.5);\n padding: calc(${theme.vars.spacing.unit} * 0.75) ${theme.vars.spacing.unit};\n border: 1px solid ${theme.vars.colors.border};\n background: ${theme.vars.colors.background.surface};\n cursor: pointer;\n border-radius: ${theme.vars.borderRadius.medium};\n min-width: 120px;\n font-size: 0.875rem;\n color: ${theme.vars.colors.text.primary};\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.04)'};\n }\n `;\n\n const triggerEmoji: string = css`\n font-size: 1rem;\n line-height: 1;\n `;\n\n const triggerLabel: string = css`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n `;\n\n const content: string = css`\n min-width: 200px;\n max-width: 320px;\n background-color: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.medium};\n box-shadow: ${theme.vars.shadows.medium};\n border: 1px solid ${theme.vars.colors.border};\n outline: none;\n z-index: 1000;\n padding: calc(${theme.vars.spacing.unit} * 0.5) 0;\n `;\n\n const option: string = css`\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1) calc(${theme.vars.spacing.unit} * 1.5);\n width: 100%;\n border: none;\n background-color: transparent;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n color: ${theme.vars.colors.text.primary};\n transition: background-color 0.15s ease-in-out;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.04)'};\n }\n `;\n\n const optionActive: string = css`\n font-weight: 600;\n color: ${theme.vars.colors.primary?.main || theme.vars.colors.text.primary};\n `;\n\n const optionEmoji: string = css`\n font-size: 1rem;\n line-height: 1;\n flex-shrink: 0;\n `;\n\n const optionLabel: string = css`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const checkIcon: string = css`\n color: ${theme.vars.colors.primary?.main || theme.vars.colors.text.primary};\n flex-shrink: 0;\n margin-inline-start: auto;\n `;\n\n return {\n checkIcon,\n content,\n option,\n optionActive,\n optionEmoji,\n optionLabel,\n root,\n trigger,\n triggerEmoji,\n triggerLabel,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.border,\n theme.vars.borderRadius.medium,\n theme.vars.shadows.medium,\n theme.vars.spacing.unit,\n theme.vars.colors.action?.hover,\n theme.vars.typography.fontFamily,\n theme.vars.colors.primary?.main,\n colorScheme,\n ]);\n\nexport default useStyles;\n"],"mappings":";;;;;;AAOA,MAAM,aAAa,OAAc,yCACjB;CACZ,MAAMA,OAAe,mBAAG;;;qBAGP,MAAM,KAAK,WAAW,WAAW;;CAGlD,MAAMC,UAAkB,mBAAG;;;kBAGb,MAAM,KAAK,QAAQ,KAAK;sBACpB,MAAM,KAAK,QAAQ,KAAK,WAAW,MAAM,KAAK,QAAQ,KAAK;0BACvD,MAAM,KAAK,OAAO,OAAO;oBAC/B,MAAM,KAAK,OAAO,WAAW,QAAQ;;uBAElC,MAAM,KAAK,aAAa,OAAO;;;eAGvC,MAAM,KAAK,OAAO,KAAK,QAAQ;;;4BAGlB,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;CAIjF,MAAMC,eAAuB,mBAAG;;;;CAKhC,MAAMC,eAAuB,mBAAG;;;;;;;CAQhC,MAAMC,UAAkB,mBAAG;;;0BAGL,MAAM,KAAK,OAAO,WAAW,QAAQ;uBACxC,MAAM,KAAK,aAAa,OAAO;oBAClC,MAAM,KAAK,QAAQ,OAAO;0BACpB,MAAM,KAAK,OAAO,OAAO;;;sBAG7B,MAAM,KAAK,QAAQ,KAAK;;CAG1C,MAAMC,SAAiB,mBAAG;;;aAGjB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK,aAAa,MAAM,KAAK,QAAQ,KAAK;;;;;;;eAOpE,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;4BAIlB,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;CAIjF,MAAMC,eAAuB,mBAAG;;eAErB,MAAM,KAAK,OAAO,SAAS,QAAQ,MAAM,KAAK,OAAO,KAAK,QAAQ;;CAG7E,MAAMC,cAAsB,mBAAG;;;;;CAM/B,MAAMC,cAAsB,mBAAG;;;;;;AAa/B,QAAO;EACL,WAPwB,mBAAG;eAClB,MAAM,KAAK,OAAO,SAAS,QAAQ,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;EAO3E;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;GACA;CACD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,OAAO,QAAQ;CAC1B,MAAM,KAAK,WAAW;CACtB,MAAM,KAAK,OAAO,SAAS;CAC3B;CACD,CAAC;AAEJ,0CAAe"}
@@ -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_useTheme = require('../../../contexts/Theme/useTheme.cjs');
3
4
  const require_Button = require('../../primitives/Button/Button.cjs');
4
5
  const require_Typography = require('../../primitives/Typography/Typography.cjs');
@@ -14,8 +15,6 @@ let react = require("react");
14
15
  react = require_rolldown_runtime.__toESM(react);
15
16
  let react_jsx_runtime = require("react/jsx-runtime");
16
17
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
17
- let __emotion_css = require("@emotion/css");
18
- __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
19
18
  let __floating_ui_react = require("@floating-ui/react");
20
19
  __floating_ui_react = require_rolldown_runtime.__toESM(__floating_ui_react);
21
20
 
@@ -94,10 +93,10 @@ const BaseUserDropdown = ({ fallback = null, className = "", user, isLoading = f
94
93
  allMenuItems.push(...defaultMenuItems);
95
94
  }
96
95
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
97
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown"), className),
96
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown"), className),
98
97
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
99
98
  ref: refs.setReference,
100
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__trigger"), styles["trigger"]),
99
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__trigger"), styles["trigger"]),
101
100
  color: "tertiary",
102
101
  variant: "text",
103
102
  size: "medium",
@@ -111,7 +110,7 @@ const BaseUserDropdown = ({ fallback = null, className = "", user, isLoading = f
111
110
  ...getReferenceProps(),
112
111
  children: showTriggerLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
113
112
  variant: "body2",
114
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__trigger-label"), styles["userName"]),
113
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__trigger-label"), styles["userName"]),
115
114
  children: require_getDisplayName.default(mergedMappings, user)
116
115
  })
117
116
  }), isOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__floating_ui_react.FloatingPortal, {
@@ -122,21 +121,20 @@ const BaseUserDropdown = ({ fallback = null, className = "", user, isLoading = f
122
121
  initialFocus: -1,
123
122
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
124
123
  ref: refs.setFloating,
125
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__content"), styles["dropdownContent"]),
126
- style: {
124
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__content"), styles["dropdownContent"], require_emotion.css({
127
125
  ...floatingStyles,
128
126
  zIndex: 9999
129
- },
127
+ })),
130
128
  ...getFloatingProps(),
131
129
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
132
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__header"), styles["dropdownHeader"]),
130
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__header"), styles["dropdownHeader"]),
133
131
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Avatar.Avatar, {
134
132
  imageUrl: require_getMappedUserProfileValue.default("picture", mergedMappings, user),
135
133
  name: require_getDisplayName.default(mergedMappings, user),
136
134
  size: avatarSize * 1.25,
137
135
  alt: `${require_getDisplayName.default(mergedMappings, user)}'s avatar`
138
136
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
139
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__header-info"), styles["headerInfo"]),
137
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__header-info"), styles["headerInfo"]),
140
138
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
141
139
  noWrap: true,
142
140
  className: (0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__header-name"),
@@ -152,13 +150,12 @@ const BaseUserDropdown = ({ fallback = null, className = "", user, isLoading = f
152
150
  })]
153
151
  })]
154
152
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
155
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu"), styles["dropdownMenu"]),
153
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu"), styles["dropdownMenu"]),
156
154
  children: allMenuItems.map((item, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: (() => {
157
- if (item.label === "") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu-divider"), styles["divider"]) });
155
+ if (item.label === "") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu-divider"), styles["divider"]) });
158
156
  if (item.href) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
159
157
  href: item.href,
160
- style: { backgroundColor: hoveredItemIndex === index ? theme.vars.colors.action?.hover : "transparent" },
161
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu-item"), styles["menuItemAnchor"]),
158
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu-item"), styles["menuItemAnchor"], hoveredItemIndex === index && styles["menuItemHighlighted"]),
162
159
  onMouseEnter: () => setHoveredItemIndex(index),
163
160
  onMouseLeave: () => setHoveredItemIndex(null),
164
161
  onFocus: () => setHoveredItemIndex(index),
@@ -167,8 +164,7 @@ const BaseUserDropdown = ({ fallback = null, className = "", user, isLoading = f
167
164
  });
168
165
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
169
166
  onClick: () => handleMenuItemClick(item),
170
- style: { backgroundColor: hoveredItemIndex === index ? theme.vars.colors.action?.hover : "transparent" },
171
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu-item"), styles["menuItem"]),
167
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)("user-dropdown__menu-item"), styles["menuItem"], hoveredItemIndex === index && styles["menuItemHighlighted"]),
172
168
  color: "tertiary",
173
169
  variant: "text",
174
170
  size: "small",
@@ -1 +1 @@
1
- {"version":3,"file":"BaseUserDropdown.cjs","names":["BaseUserDropdown: FC<BaseUserDropdownProps>","useTheme","styles: Record<string, string>","useStyles","autoUpdate","mergedMappings: Record<string, string | string[]>","defaultMenuItems: MenuItem[]","User","LogOut","allMenuItems: MenuItem[]","Button","Avatar","getMappedUserProfileValue","getDisplayName","Typography","FloatingPortal","FloatingFocusManager"],"sources":["../../../../../src/components/presentation/UserDropdown/BaseUserDropdown.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {cx} from '@emotion/css';\nimport {\n useFloating,\n autoUpdate,\n offset,\n flip,\n shift,\n useClick,\n useDismiss,\n useRole,\n useInteractions,\n FloatingFocusManager,\n FloatingPortal,\n} from '@floating-ui/react';\nimport {withVendorCSSClassPrefix} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode, useState} from 'react';\nimport useStyles from './BaseUserDropdown.styles';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport getDisplayName from '../../../utils/getDisplayName';\nimport getMappedUserProfileValue from '../../../utils/getMappedUserProfileValue';\nimport {Avatar} from '../../primitives/Avatar/Avatar';\nimport Button from '../../primitives/Button/Button';\nimport LogOut from '../../primitives/Icons/LogOut';\nimport User from '../../primitives/Icons/User';\nimport Typography from '../../primitives/Typography/Typography';\n\ninterface MenuItem {\n href?: string;\n icon?: ReactNode;\n label: ReactNode;\n onClick?: () => void;\n}\n\nexport interface BaseUserDropdownProps {\n /**\n * Mapping of component attribute names to identity provider field names.\n * Allows customizing which user profile fields should be used for each attribute.\n */\n attributeMapping?: {\n [key: string]: string | string[] | undefined;\n firstName?: string | string[];\n lastName?: string | string[];\n picture?: string | string[];\n username?: string | string[];\n };\n /**\n * Optional size for the avatar\n */\n avatarSize?: number;\n /**\n * Optional className for the dropdown container.\n */\n className?: string;\n /**\n * Optional element to render when no user is signed in.\n */\n fallback?: ReactElement | null;\n /**\n * Whether the user data is currently loading\n */\n isLoading?: boolean;\n /**\n * Menu items to display in the dropdown\n */\n menuItems?: MenuItem[];\n /**\n * Callback function for \"Manage Profile\" action\n */\n onManageProfile?: () => void;\n /**\n * Callback function for \"Sign Out\" action\n */\n onSignOut?: () => void;\n /**\n * The HTML element ID where the portal should be mounted\n */\n portalId?: string;\n /**\n * Show dropdown header with user information\n */\n showDropdownHeader?: boolean;\n /**\n * Show user's display name next to avatar in the trigger button\n */\n showTriggerLabel?: boolean;\n /**\n * The user object containing profile information\n */\n user: any;\n}\n\n/**\n * BaseUserDropdown component displays a user avatar with a dropdown menu.\n * When clicked, it shows a popover with customizable menu items.\n * This component serves as the base for framework-specific implementations.\n */\nexport const BaseUserDropdown: FC<BaseUserDropdownProps> = ({\n fallback = null,\n className = '',\n user,\n isLoading = false,\n portalId = 'thunderid-user-dropdown',\n menuItems = [],\n showTriggerLabel = false,\n avatarSize = 32,\n onManageProfile,\n onSignOut,\n attributeMapping = {},\n}: BaseUserDropdownProps): ReactElement | null => {\n const {theme, colorScheme} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const [isOpen, setIsOpen] = useState(false);\n const [hoveredItemIndex, setHoveredItemIndex] = useState<number | null>(null);\n\n const {refs, floatingStyles, context} = useFloating({\n middleware: [offset(5), flip({fallbackAxisSideDirection: 'end'}), shift({padding: 5})],\n onOpenChange: setIsOpen,\n open: isOpen,\n placement: 'bottom-end',\n whileElementsMounted: autoUpdate,\n });\n\n const click: any = useClick(context);\n const dismiss: any = useDismiss(context);\n const role: any = useRole(context);\n\n const {getReferenceProps, getFloatingProps} = useInteractions([click, dismiss, role]);\n\n const defaultAttributeMappings: Record<string, string | string[]> = {\n email: ['emails'],\n firstName: ['name.givenName', 'given_name'],\n lastName: ['name.familyName', 'family_name'],\n picture: ['profile', 'profileUrl', 'picture', 'URL'],\n username: ['userName', 'username', 'user_name'],\n };\n\n const mergedMappings: Record<string, string | string[]> = Object.fromEntries(\n Object.entries({...defaultAttributeMappings, ...attributeMapping}).filter(\n (entry): entry is [string, string | string[]] => entry[1] !== undefined,\n ),\n );\n\n if (fallback && !user && !isLoading) {\n return fallback;\n }\n\n const handleMenuItemClick = (item: MenuItem): void => {\n if (item.onClick) {\n item.onClick();\n }\n setIsOpen(false);\n };\n\n const defaultMenuItems: MenuItem[] = [];\n\n if (onManageProfile) {\n defaultMenuItems.push({\n icon: <User width=\"16\" height=\"16\" />,\n label: 'Manage Profile',\n onClick: onManageProfile,\n });\n }\n\n if (onSignOut) {\n defaultMenuItems.push({\n icon: <LogOut width=\"16\" height=\"16\" />,\n label: 'Sign Out',\n onClick: onSignOut,\n });\n }\n\n const allMenuItems: MenuItem[] = [...menuItems];\n\n if (defaultMenuItems.length > 0) {\n if (menuItems.length > 0) {\n allMenuItems.push({label: '', onClick: undefined});\n }\n\n allMenuItems.push(...defaultMenuItems);\n }\n\n return (\n <div className={cx(withVendorCSSClassPrefix('user-dropdown'), className)}>\n <Button\n ref={refs.setReference}\n className={cx(withVendorCSSClassPrefix('user-dropdown__trigger'), styles['trigger'])}\n color=\"tertiary\"\n variant=\"text\"\n size=\"medium\"\n data-testid=\"thunderid-user-dropdown-trigger\"\n startIcon={\n <Avatar\n imageUrl={getMappedUserProfileValue('picture', mergedMappings, user)}\n name={getDisplayName(mergedMappings, user)}\n size={avatarSize}\n alt={`${getDisplayName(mergedMappings, user)}'s avatar`}\n />\n }\n {...getReferenceProps()}\n >\n {showTriggerLabel && (\n <Typography\n variant=\"body2\"\n className={cx(withVendorCSSClassPrefix('user-dropdown__trigger-label'), styles['userName'])}\n >\n {getDisplayName(mergedMappings, user)}\n </Typography>\n )}\n </Button>\n\n {isOpen && (\n <FloatingPortal id={portalId}>\n <FloatingFocusManager context={context} modal={false} initialFocus={-1}>\n <div\n ref={refs.setFloating}\n className={cx(withVendorCSSClassPrefix('user-dropdown__content'), styles['dropdownContent'])}\n style={{\n ...floatingStyles,\n // Floating UI doesn't set a z-index by default, so we set a high value to ensure the dropdown appears above other elements.\n // https://floating-ui.com/docs/misc#z-index-stacking\n zIndex: 9999,\n }}\n {...getFloatingProps()}\n >\n <div className={cx(withVendorCSSClassPrefix('user-dropdown__header'), styles['dropdownHeader'])}>\n <Avatar\n imageUrl={getMappedUserProfileValue('picture', mergedMappings, user)}\n name={getDisplayName(mergedMappings, user)}\n size={avatarSize * 1.25}\n alt={`${getDisplayName(mergedMappings, user)}'s avatar`}\n />\n <div className={cx(withVendorCSSClassPrefix('user-dropdown__header-info'), styles['headerInfo'])}>\n <Typography\n noWrap\n className={withVendorCSSClassPrefix('user-dropdown__header-name')}\n variant=\"body1\"\n fontWeight=\"medium\"\n >\n {getDisplayName(mergedMappings, user)}\n </Typography>\n <Typography\n noWrap\n className={withVendorCSSClassPrefix('user-dropdown__header-email')}\n variant=\"caption\"\n color=\"secondary\"\n >\n {getMappedUserProfileValue('username', mergedMappings, user) ||\n getMappedUserProfileValue('email', mergedMappings, user)}\n </Typography>\n </div>\n </div>\n <div className={cx(withVendorCSSClassPrefix('user-dropdown__menu'), styles['dropdownMenu'])}>\n {allMenuItems.map((item: any, index: number) => (\n <div key={index}>\n {((): ReactElement => {\n if (item.label === '') {\n return (\n <div\n className={cx(withVendorCSSClassPrefix('user-dropdown__menu-divider'), styles['divider'])}\n />\n );\n }\n if (item.href) {\n return (\n <a\n href={item.href}\n style={{\n backgroundColor:\n hoveredItemIndex === index ? theme.vars.colors.action?.hover : 'transparent',\n }}\n className={cx(\n withVendorCSSClassPrefix('user-dropdown__menu-item'),\n styles['menuItemAnchor'],\n )}\n onMouseEnter={(): void => setHoveredItemIndex(index)}\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n onFocus={(): void => setHoveredItemIndex(index)}\n onBlur={(): void => setHoveredItemIndex(null)}\n >\n {item.icon}\n <span>{item.label}</span>\n </a>\n );\n }\n return (\n <Button\n onClick={(): void => handleMenuItemClick(item)}\n style={{\n backgroundColor:\n hoveredItemIndex === index ? theme.vars.colors.action?.hover : 'transparent',\n }}\n className={cx(withVendorCSSClassPrefix('user-dropdown__menu-item'), styles['menuItem'])}\n color=\"tertiary\"\n variant=\"text\"\n size=\"small\"\n startIcon={item.icon}\n onMouseEnter={(): void => setHoveredItemIndex(index)}\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n >\n {item.label}\n </Button>\n );\n })()}\n </div>\n ))}\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n};\n\nexport default BaseUserDropdown;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BaseUserDropdown.cjs","names":["BaseUserDropdown: FC<BaseUserDropdownProps>","useTheme","styles: Record<string, string>","useStyles","autoUpdate","mergedMappings: Record<string, string | string[]>","defaultMenuItems: MenuItem[]","User","LogOut","allMenuItems: MenuItem[]","cx","Button","Avatar","getMappedUserProfileValue","getDisplayName","Typography","FloatingPortal","FloatingFocusManager","css"],"sources":["../../../../../src/components/presentation/UserDropdown/BaseUserDropdown.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n useFloating,\n autoUpdate,\n offset,\n flip,\n shift,\n useClick,\n useDismiss,\n useRole,\n useInteractions,\n FloatingFocusManager,\n FloatingPortal,\n} from '@floating-ui/react';\nimport {withVendorCSSClassPrefix} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode, useState} from 'react';\nimport useStyles from './BaseUserDropdown.styles';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport {css, cx} from '../../../styles/emotion';\nimport getDisplayName from '../../../utils/getDisplayName';\nimport getMappedUserProfileValue from '../../../utils/getMappedUserProfileValue';\nimport {Avatar} from '../../primitives/Avatar/Avatar';\nimport Button from '../../primitives/Button/Button';\nimport LogOut from '../../primitives/Icons/LogOut';\nimport User from '../../primitives/Icons/User';\nimport Typography from '../../primitives/Typography/Typography';\n\ninterface MenuItem {\n href?: string;\n icon?: ReactNode;\n label: ReactNode;\n onClick?: () => void;\n}\n\nexport interface BaseUserDropdownProps {\n /**\n * Mapping of component attribute names to identity provider field names.\n * Allows customizing which user profile fields should be used for each attribute.\n */\n attributeMapping?: {\n [key: string]: string | string[] | undefined;\n firstName?: string | string[];\n lastName?: string | string[];\n picture?: string | string[];\n username?: string | string[];\n };\n /**\n * Optional size for the avatar\n */\n avatarSize?: number;\n /**\n * Optional className for the dropdown container.\n */\n className?: string;\n /**\n * Optional element to render when no user is signed in.\n */\n fallback?: ReactElement | null;\n /**\n * Whether the user data is currently loading\n */\n isLoading?: boolean;\n /**\n * Menu items to display in the dropdown\n */\n menuItems?: MenuItem[];\n /**\n * Callback function for \"Manage Profile\" action\n */\n onManageProfile?: () => void;\n /**\n * Callback function for \"Sign Out\" action\n */\n onSignOut?: () => void;\n /**\n * The HTML element ID where the portal should be mounted\n */\n portalId?: string;\n /**\n * Show dropdown header with user information\n */\n showDropdownHeader?: boolean;\n /**\n * Show user's display name next to avatar in the trigger button\n */\n showTriggerLabel?: boolean;\n /**\n * The user object containing profile information\n */\n user: any;\n}\n\n/**\n * BaseUserDropdown component displays a user avatar with a dropdown menu.\n * When clicked, it shows a popover with customizable menu items.\n * This component serves as the base for framework-specific implementations.\n */\nexport const BaseUserDropdown: FC<BaseUserDropdownProps> = ({\n fallback = null,\n className = '',\n user,\n isLoading = false,\n portalId = 'thunderid-user-dropdown',\n menuItems = [],\n showTriggerLabel = false,\n avatarSize = 32,\n onManageProfile,\n onSignOut,\n attributeMapping = {},\n}: BaseUserDropdownProps): ReactElement | null => {\n const {theme, colorScheme} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const [isOpen, setIsOpen] = useState(false);\n const [hoveredItemIndex, setHoveredItemIndex] = useState<number | null>(null);\n\n const {refs, floatingStyles, context} = useFloating({\n middleware: [offset(5), flip({fallbackAxisSideDirection: 'end'}), shift({padding: 5})],\n onOpenChange: setIsOpen,\n open: isOpen,\n placement: 'bottom-end',\n whileElementsMounted: autoUpdate,\n });\n\n const click: any = useClick(context);\n const dismiss: any = useDismiss(context);\n const role: any = useRole(context);\n\n const {getReferenceProps, getFloatingProps} = useInteractions([click, dismiss, role]);\n\n const defaultAttributeMappings: Record<string, string | string[]> = {\n email: ['emails'],\n firstName: ['name.givenName', 'given_name'],\n lastName: ['name.familyName', 'family_name'],\n picture: ['profile', 'profileUrl', 'picture', 'URL'],\n username: ['userName', 'username', 'user_name'],\n };\n\n const mergedMappings: Record<string, string | string[]> = Object.fromEntries(\n Object.entries({...defaultAttributeMappings, ...attributeMapping}).filter(\n (entry): entry is [string, string | string[]] => entry[1] !== undefined,\n ),\n );\n\n if (fallback && !user && !isLoading) {\n return fallback;\n }\n\n const handleMenuItemClick = (item: MenuItem): void => {\n if (item.onClick) {\n item.onClick();\n }\n setIsOpen(false);\n };\n\n const defaultMenuItems: MenuItem[] = [];\n\n if (onManageProfile) {\n defaultMenuItems.push({\n icon: <User width=\"16\" height=\"16\" />,\n label: 'Manage Profile',\n onClick: onManageProfile,\n });\n }\n\n if (onSignOut) {\n defaultMenuItems.push({\n icon: <LogOut width=\"16\" height=\"16\" />,\n label: 'Sign Out',\n onClick: onSignOut,\n });\n }\n\n const allMenuItems: MenuItem[] = [...menuItems];\n\n if (defaultMenuItems.length > 0) {\n if (menuItems.length > 0) {\n allMenuItems.push({label: '', onClick: undefined});\n }\n\n allMenuItems.push(...defaultMenuItems);\n }\n\n return (\n <div className={cx(withVendorCSSClassPrefix('user-dropdown'), className)}>\n <Button\n ref={refs.setReference}\n className={cx(withVendorCSSClassPrefix('user-dropdown__trigger'), styles['trigger'])}\n color=\"tertiary\"\n variant=\"text\"\n size=\"medium\"\n data-testid=\"thunderid-user-dropdown-trigger\"\n startIcon={\n <Avatar\n imageUrl={getMappedUserProfileValue('picture', mergedMappings, user)}\n name={getDisplayName(mergedMappings, user)}\n size={avatarSize}\n alt={`${getDisplayName(mergedMappings, user)}'s avatar`}\n />\n }\n {...getReferenceProps()}\n >\n {showTriggerLabel && (\n <Typography\n variant=\"body2\"\n className={cx(withVendorCSSClassPrefix('user-dropdown__trigger-label'), styles['userName'])}\n >\n {getDisplayName(mergedMappings, user)}\n </Typography>\n )}\n </Button>\n\n {isOpen && (\n <FloatingPortal id={portalId}>\n <FloatingFocusManager context={context} modal={false} initialFocus={-1}>\n <div\n ref={refs.setFloating}\n className={cx(\n withVendorCSSClassPrefix('user-dropdown__content'),\n styles['dropdownContent'],\n // Floating UI recomputes the position on every render, so this class is generated\n // fresh each time rather than memoized - Emotion still injects it into the shared,\n // nonce-tagged `<style>` element, so no inline `style` attribute is needed.\n css({\n ...floatingStyles,\n // Floating UI doesn't set a z-index by default, so we set a high value to ensure the dropdown appears above other elements.\n // https://floating-ui.com/docs/misc#z-index-stacking\n zIndex: 9999,\n }),\n )}\n {...getFloatingProps()}\n >\n <div className={cx(withVendorCSSClassPrefix('user-dropdown__header'), styles['dropdownHeader'])}>\n <Avatar\n imageUrl={getMappedUserProfileValue('picture', mergedMappings, user)}\n name={getDisplayName(mergedMappings, user)}\n size={avatarSize * 1.25}\n alt={`${getDisplayName(mergedMappings, user)}'s avatar`}\n />\n <div className={cx(withVendorCSSClassPrefix('user-dropdown__header-info'), styles['headerInfo'])}>\n <Typography\n noWrap\n className={withVendorCSSClassPrefix('user-dropdown__header-name')}\n variant=\"body1\"\n fontWeight=\"medium\"\n >\n {getDisplayName(mergedMappings, user)}\n </Typography>\n <Typography\n noWrap\n className={withVendorCSSClassPrefix('user-dropdown__header-email')}\n variant=\"caption\"\n color=\"secondary\"\n >\n {getMappedUserProfileValue('username', mergedMappings, user) ||\n getMappedUserProfileValue('email', mergedMappings, user)}\n </Typography>\n </div>\n </div>\n <div className={cx(withVendorCSSClassPrefix('user-dropdown__menu'), styles['dropdownMenu'])}>\n {allMenuItems.map((item: any, index: number) => (\n <div key={index}>\n {((): ReactElement => {\n if (item.label === '') {\n return (\n <div\n className={cx(withVendorCSSClassPrefix('user-dropdown__menu-divider'), styles['divider'])}\n />\n );\n }\n if (item.href) {\n return (\n <a\n href={item.href}\n className={cx(\n withVendorCSSClassPrefix('user-dropdown__menu-item'),\n styles['menuItemAnchor'],\n hoveredItemIndex === index && styles['menuItemHighlighted'],\n )}\n onMouseEnter={(): void => setHoveredItemIndex(index)}\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n onFocus={(): void => setHoveredItemIndex(index)}\n onBlur={(): void => setHoveredItemIndex(null)}\n >\n {item.icon}\n <span>{item.label}</span>\n </a>\n );\n }\n return (\n <Button\n onClick={(): void => handleMenuItemClick(item)}\n className={cx(\n withVendorCSSClassPrefix('user-dropdown__menu-item'),\n styles['menuItem'],\n hoveredItemIndex === index && styles['menuItemHighlighted'],\n )}\n color=\"tertiary\"\n variant=\"text\"\n size=\"small\"\n startIcon={item.icon}\n onMouseEnter={(): void => setHoveredItemIndex(index)}\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n >\n {item.label}\n </Button>\n );\n })()}\n </div>\n ))}\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n};\n\nexport default BaseUserDropdown;\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/UserDropdown/BaseUserDropdown.styles.ts
8
7
  /**
@@ -12,7 +11,7 @@ __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 trigger = __emotion_css.css`
14
+ const trigger = require_emotion.css`
16
15
  display: inline-flex;
17
16
  align-items: center;
18
17
  gap: calc(${theme.vars.spacing.unit} * 0.75);
@@ -42,7 +41,7 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
42
41
  box-shadow: none;
43
42
  }
44
43
  `;
45
- const userName = __emotion_css.css`
44
+ const userName = require_emotion.css`
46
45
  color: ${theme.vars.colors.text.primary};
47
46
  font-size: 0.875rem;
48
47
  font-weight: 500;
@@ -51,7 +50,7 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
51
50
  text-overflow: ellipsis;
52
51
  white-space: nowrap;
53
52
  `;
54
- const dropdownContent = __emotion_css.css`
53
+ const dropdownContent = require_emotion.css`
55
54
  background: ${theme.vars.colors.background.surface};
56
55
  border-radius: ${theme.vars.borderRadius.large};
57
56
  box-shadow:
@@ -64,12 +63,15 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
64
63
  z-index: 1000;
65
64
  overflow: hidden;
66
65
  `;
67
- const dropdownMenu = __emotion_css.css`
66
+ const dropdownMenu = require_emotion.css`
68
67
  display: flex;
69
68
  flex-direction: column;
70
69
  width: 100%;
71
70
  `;
72
- const menuItem = __emotion_css.css`
71
+ const menuItemHighlighted = require_emotion.css`
72
+ background-color: ${theme.vars.colors.action?.hover || "rgba(0, 0, 0, 0.05)"};
73
+ `;
74
+ const menuItem = require_emotion.css`
73
75
  display: flex;
74
76
  align-items: center;
75
77
  justify-content: flex-start;
@@ -99,7 +101,7 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
99
101
  box-shadow: none;
100
102
  }
101
103
  `;
102
- const menuItemAnchor = __emotion_css.css`
104
+ const menuItemAnchor = require_emotion.css`
103
105
  display: flex;
104
106
  align-items: center;
105
107
  justify-content: flex-start;
@@ -120,18 +122,18 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
120
122
  background-color: ${theme.vars.colors.action?.hover || "rgba(0, 0, 0, 0.05)"};
121
123
  }
122
124
  `;
123
- const divider = __emotion_css.css`
125
+ const divider = require_emotion.css`
124
126
  margin: calc(${theme.vars.spacing.unit} * 0.5) 0;
125
127
  border-bottom: 1px solid ${theme.vars.colors.border};
126
128
  `;
127
- const dropdownHeader = __emotion_css.css`
129
+ const dropdownHeader = require_emotion.css`
128
130
  display: flex;
129
131
  align-items: center;
130
132
  gap: ${theme.vars.spacing.unit};
131
133
  padding: calc(${theme.vars.spacing.unit} * 1.5);
132
134
  border-bottom: 1px solid ${theme.vars.colors.border};
133
135
  `;
134
- const headerInfo = __emotion_css.css`
136
+ const headerInfo = require_emotion.css`
135
137
  display: flex;
136
138
  flex-direction: column;
137
139
  gap: calc(${theme.vars.spacing.unit} / 4);
@@ -141,7 +143,7 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
141
143
  text-overflow: ellipsis;
142
144
  white-space: nowrap;
143
145
  `;
144
- const headerName = __emotion_css.css`
146
+ const headerName = require_emotion.css`
145
147
  color: ${theme.vars.colors.text.primary};
146
148
  font-size: 1rem;
147
149
  font-weight: 500;
@@ -155,7 +157,7 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
155
157
  dropdownContent,
156
158
  dropdownHeader,
157
159
  dropdownMenu,
158
- headerEmail: __emotion_css.css`
160
+ headerEmail: require_emotion.css`
159
161
  color: ${theme.vars.colors.text.secondary};
160
162
  font-size: 0.875rem;
161
163
  margin: 0;
@@ -165,19 +167,20 @@ const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
165
167
  `,
166
168
  headerInfo,
167
169
  headerName,
168
- loadingContainer: __emotion_css.css`
170
+ loadingContainer: require_emotion.css`
169
171
  display: flex;
170
172
  align-items: center;
171
173
  justify-content: center;
172
174
  min-height: 80px;
173
175
  gap: ${theme.vars.spacing.unit};
174
176
  `,
175
- loadingText: __emotion_css.css`
177
+ loadingText: require_emotion.css`
176
178
  color: ${theme.vars.colors.text.secondary};
177
179
  font-size: 0.875rem;
178
180
  `,
179
181
  menuItem,
180
182
  menuItemAnchor,
183
+ menuItemHighlighted,
181
184
  trigger,
182
185
  userName
183
186
  };
@@ -1 +1 @@
1
- {"version":3,"file":"BaseUserDropdown.styles.cjs","names":["trigger: string","userName: string","dropdownContent: string","dropdownMenu: string","menuItem: string","menuItemAnchor: string","divider: string","dropdownHeader: string","headerInfo: string","headerName: string"],"sources":["../../../../../src/components/presentation/UserDropdown/BaseUserDropdown.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 BaseUserDropdown 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 trigger: string = css`\n display: inline-flex;\n align-items: center;\n gap: calc(${theme.vars.spacing.unit} * 0.75);\n padding: calc(${theme.vars.spacing.unit} * 0.5);\n background: none;\n border: none;\n cursor: pointer;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: none;\n box-shadow: none;\n background-color: transparent;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n }\n\n &:focus {\n outline: 2px solid ${theme.vars.colors.primary};\n outline-offset: 2px;\n }\n\n &:hover,\n &:focus,\n &:active,\n &:focus-visible {\n transition: none;\n box-shadow: none;\n }\n `;\n\n const userName: string = css`\n color: ${theme.vars.colors.text.primary};\n font-size: 0.875rem;\n font-weight: 500;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const dropdownContent: string = css`\n background: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.large};\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n border: 1px solid ${theme.vars.colors.border};\n font-family: ${theme.vars.typography.fontFamily};\n min-width: 250px;\n max-width: 600px;\n z-index: 1000;\n overflow: hidden;\n `;\n\n const dropdownMenu: string = css`\n display: flex;\n flex-direction: column;\n width: 100%;\n `;\n\n const menuItem: string = css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5) calc(${theme.vars.spacing.unit} * 2);\n width: 100%;\n color: ${theme.vars.colors.text.primary};\n text-decoration: none;\n border: none;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: none;\n box-shadow: none;\n background: transparent;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n }\n\n &:hover,\n &:focus,\n &:active,\n &:focus-visible {\n transition: none;\n box-shadow: none;\n }\n `;\n\n const menuItemAnchor: string = css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5) calc(${theme.vars.spacing.unit} * 2);\n width: 100%;\n color: ${theme.vars.colors.text.primary};\n text-decoration: none;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: background-color 0.15s ease-in-out;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n }\n `;\n\n const divider: string = css`\n margin: calc(${theme.vars.spacing.unit} * 0.5) 0;\n border-bottom: 1px solid ${theme.vars.colors.border};\n `;\n\n const dropdownHeader: string = css`\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5);\n border-bottom: 1px solid ${theme.vars.colors.border};\n `;\n\n const headerInfo: string = css`\n display: flex;\n flex-direction: column;\n gap: calc(${theme.vars.spacing.unit} / 4);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const headerName: string = css`\n color: ${theme.vars.colors.text.primary};\n font-size: 1rem;\n font-weight: 500;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const headerEmail: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.875rem;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const loadingContainer: string = css`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 80px;\n gap: ${theme.vars.spacing.unit};\n `;\n\n const loadingText: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.875rem;\n `;\n\n return {\n divider,\n dropdownContent,\n dropdownHeader,\n dropdownMenu,\n headerEmail,\n headerInfo,\n headerName,\n loadingContainer,\n loadingText,\n menuItem,\n menuItemAnchor,\n trigger,\n userName,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.text.secondary,\n theme.vars.colors.border,\n theme.vars.colors.primary,\n theme.vars.colors.action?.hover,\n theme.vars.borderRadius.medium,\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,UAAkB,iBAAG;;;kBAGb,MAAM,KAAK,QAAQ,KAAK;sBACpB,MAAM,KAAK,QAAQ,KAAK;;;;uBAIvB,MAAM,KAAK,aAAa,OAAO;;;;;;4BAM1B,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;;6BAIxD,MAAM,KAAK,OAAO,QAAQ;;;;;;;;;;;;CAanD,MAAMC,WAAmB,iBAAG;eACjB,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;;;CAS1C,MAAMC,kBAA0B,iBAAG;oBACnB,MAAM,KAAK,OAAO,WAAW,QAAQ;uBAClC,MAAM,KAAK,aAAa,MAAM;;;;0BAI3B,MAAM,KAAK,OAAO,OAAO;qBAC9B,MAAM,KAAK,WAAW,WAAW;;;;;;CAOlD,MAAMC,eAAuB,iBAAG;;;;;CAMhC,MAAMC,WAAmB,iBAAG;;;;aAInB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK,eAAe,MAAM,KAAK,QAAQ,KAAK;;eAEtE,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;uBAMvB,MAAM,KAAK,aAAa,OAAO;;;;;;4BAM1B,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;;;;;;;;;CAYjF,MAAMC,iBAAyB,iBAAG;;;;aAIzB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK,eAAe,MAAM,KAAK,QAAQ,KAAK;;eAEtE,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;;uBAOvB,MAAM,KAAK,aAAa,OAAO;;;;4BAI1B,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;CAIjF,MAAMC,UAAkB,iBAAG;qBACV,MAAM,KAAK,QAAQ,KAAK;iCACZ,MAAM,KAAK,OAAO,OAAO;;CAGtD,MAAMC,iBAAyB,iBAAG;;;aAGzB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK;iCACb,MAAM,KAAK,OAAO,OAAO;;CAGtD,MAAMC,aAAqB,iBAAG;;;kBAGhB,MAAM,KAAK,QAAQ,KAAK;;;;;;;CAQtC,MAAMC,aAAqB,iBAAG;eACnB,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;;;AA+B1C,QAAO;EACL;EACA;EACA;EACA;EACA,aA3B0B,iBAAG;eACpB,MAAM,KAAK,OAAO,KAAK,UAAU;;;;;;;EA2B1C;EACA;EACA,kBArB+B,iBAAG;;;;;aAK3B,MAAM,KAAK,QAAQ,KAAK;;EAiB/B,aAd0B,iBAAG;eACpB,MAAM,KAAK,OAAO,KAAK,UAAU;;;EAc1C;EACA;EACA;EACA;EACD;GACA;CACD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,OAAO,QAAQ;CAC1B,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,QAAQ;CACnB,MAAM,KAAK,WAAW;CACtB;CACD,CAAC;AAEJ,sCAAe"}
1
+ {"version":3,"file":"BaseUserDropdown.styles.cjs","names":["trigger: string","userName: string","dropdownContent: string","dropdownMenu: string","menuItemHighlighted: string","menuItem: string","menuItemAnchor: string","divider: string","dropdownHeader: string","headerInfo: string","headerName: string"],"sources":["../../../../../src/components/presentation/UserDropdown/BaseUserDropdown.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 BaseUserDropdown 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 trigger: string = css`\n display: inline-flex;\n align-items: center;\n gap: calc(${theme.vars.spacing.unit} * 0.75);\n padding: calc(${theme.vars.spacing.unit} * 0.5);\n background: none;\n border: none;\n cursor: pointer;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: none;\n box-shadow: none;\n background-color: transparent;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n }\n\n &:focus {\n outline: 2px solid ${theme.vars.colors.primary};\n outline-offset: 2px;\n }\n\n &:hover,\n &:focus,\n &:active,\n &:focus-visible {\n transition: none;\n box-shadow: none;\n }\n `;\n\n const userName: string = css`\n color: ${theme.vars.colors.text.primary};\n font-size: 0.875rem;\n font-weight: 500;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const dropdownContent: string = css`\n background: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.large};\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n border: 1px solid ${theme.vars.colors.border};\n font-family: ${theme.vars.typography.fontFamily};\n min-width: 250px;\n max-width: 600px;\n z-index: 1000;\n overflow: hidden;\n `;\n\n const dropdownMenu: string = css`\n display: flex;\n flex-direction: column;\n width: 100%;\n `;\n\n const menuItemHighlighted: string = css`\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n `;\n\n const menuItem: string = css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5) calc(${theme.vars.spacing.unit} * 2);\n width: 100%;\n color: ${theme.vars.colors.text.primary};\n text-decoration: none;\n border: none;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: none;\n box-shadow: none;\n background: transparent;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n }\n\n &:hover,\n &:focus,\n &:active,\n &:focus-visible {\n transition: none;\n box-shadow: none;\n }\n `;\n\n const menuItemAnchor: string = css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5) calc(${theme.vars.spacing.unit} * 2);\n width: 100%;\n color: ${theme.vars.colors.text.primary};\n text-decoration: none;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: background-color 0.15s ease-in-out;\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.05)'};\n }\n `;\n\n const divider: string = css`\n margin: calc(${theme.vars.spacing.unit} * 0.5) 0;\n border-bottom: 1px solid ${theme.vars.colors.border};\n `;\n\n const dropdownHeader: string = css`\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5);\n border-bottom: 1px solid ${theme.vars.colors.border};\n `;\n\n const headerInfo: string = css`\n display: flex;\n flex-direction: column;\n gap: calc(${theme.vars.spacing.unit} / 4);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const headerName: string = css`\n color: ${theme.vars.colors.text.primary};\n font-size: 1rem;\n font-weight: 500;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const headerEmail: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.875rem;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const loadingContainer: string = css`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 80px;\n gap: ${theme.vars.spacing.unit};\n `;\n\n const loadingText: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.875rem;\n `;\n\n return {\n divider,\n dropdownContent,\n dropdownHeader,\n dropdownMenu,\n headerEmail,\n headerInfo,\n headerName,\n loadingContainer,\n loadingText,\n menuItem,\n menuItemAnchor,\n menuItemHighlighted,\n trigger,\n userName,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.text.secondary,\n theme.vars.colors.border,\n theme.vars.colors.primary,\n theme.vars.colors.action?.hover,\n theme.vars.borderRadius.medium,\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,UAAkB,mBAAG;;;kBAGb,MAAM,KAAK,QAAQ,KAAK;sBACpB,MAAM,KAAK,QAAQ,KAAK;;;;uBAIvB,MAAM,KAAK,aAAa,OAAO;;;;;;4BAM1B,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;;6BAIxD,MAAM,KAAK,OAAO,QAAQ;;;;;;;;;;;;CAanD,MAAMC,WAAmB,mBAAG;eACjB,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;;;CAS1C,MAAMC,kBAA0B,mBAAG;oBACnB,MAAM,KAAK,OAAO,WAAW,QAAQ;uBAClC,MAAM,KAAK,aAAa,MAAM;;;;0BAI3B,MAAM,KAAK,OAAO,OAAO;qBAC9B,MAAM,KAAK,WAAW,WAAW;;;;;;CAOlD,MAAMC,eAAuB,mBAAG;;;;;CAMhC,MAAMC,sBAA8B,mBAAG;0BACjB,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;CAG/E,MAAMC,WAAmB,mBAAG;;;;aAInB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK,eAAe,MAAM,KAAK,QAAQ,KAAK;;eAEtE,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;uBAMvB,MAAM,KAAK,aAAa,OAAO;;;;;;4BAM1B,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;;;;;;;;;CAYjF,MAAMC,iBAAyB,mBAAG;;;;aAIzB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK,eAAe,MAAM,KAAK,QAAQ,KAAK;;eAEtE,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;;uBAOvB,MAAM,KAAK,aAAa,OAAO;;;;4BAI1B,MAAM,KAAK,OAAO,QAAQ,SAAS,sBAAsB;;;CAIjF,MAAMC,UAAkB,mBAAG;qBACV,MAAM,KAAK,QAAQ,KAAK;iCACZ,MAAM,KAAK,OAAO,OAAO;;CAGtD,MAAMC,iBAAyB,mBAAG;;;aAGzB,MAAM,KAAK,QAAQ,KAAK;sBACf,MAAM,KAAK,QAAQ,KAAK;iCACb,MAAM,KAAK,OAAO,OAAO;;CAGtD,MAAMC,aAAqB,mBAAG;;;kBAGhB,MAAM,KAAK,QAAQ,KAAK;;;;;;;CAQtC,MAAMC,aAAqB,mBAAG;eACnB,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;;;;;AA+B1C,QAAO;EACL;EACA;EACA;EACA;EACA,aA3B0B,mBAAG;eACpB,MAAM,KAAK,OAAO,KAAK,UAAU;;;;;;;EA2B1C;EACA;EACA,kBArB+B,mBAAG;;;;;aAK3B,MAAM,KAAK,QAAQ,KAAK;;EAiB/B,aAd0B,mBAAG;eACpB,MAAM,KAAK,OAAO,KAAK,UAAU;;;EAc1C;EACA;EACA;EACA;EACA;EACD;GACA;CACD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,OAAO;CAClB,MAAM,KAAK,OAAO,QAAQ;CAC1B,MAAM,KAAK,aAAa;CACxB,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_useTheme = require('../../../contexts/Theme/useTheme.cjs');
3
4
  const require_useTranslation = require('../../../hooks/useTranslation.cjs');
4
5
  const require_Button = require('../../primitives/Button/Button.cjs');
@@ -21,8 +22,6 @@ let react = require("react");
21
22
  react = require_rolldown_runtime.__toESM(react);
22
23
  let react_jsx_runtime = require("react/jsx-runtime");
23
24
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
24
- let __emotion_css = require("@emotion/css");
25
- __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
26
25
 
27
26
  //#region src/components/presentation/UserProfile/BaseUserProfile.tsx
28
27
  const fieldsToSkip = [
@@ -251,7 +250,7 @@ const BaseUserProfile = ({ fallback = null, className = "", cardLayout = true, p
251
250
  className: styles.label,
252
251
  children: label
253
252
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
254
- className: (0, __emotion_css.cx)(styles.value, !hasValues ? styles.valuePlaceholder : ""),
253
+ className: require_emotion.cx(styles.value, !hasValues ? styles.valuePlaceholder : ""),
255
254
  children: !hasValues && isEditable$1 && onStartEdit ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
256
255
  onClick: onStartEdit,
257
256
  variant: "text",
@@ -322,7 +321,7 @@ const BaseUserProfile = ({ fallback = null, className = "", cardLayout = true, p
322
321
  className: styles.label,
323
322
  children: label
324
323
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
325
- className: (0, __emotion_css.cx)(styles.value, !hasValue ? styles.valuePlaceholder : ""),
324
+ className: require_emotion.cx(styles.value, !hasValue ? styles.valuePlaceholder : ""),
326
325
  children: !hasValue && isEditable && onStartEdit ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
327
326
  onClick: onStartEdit,
328
327
  variant: "text",
@@ -376,7 +375,7 @@ const BaseUserProfile = ({ fallback = null, className = "", cardLayout = true, p
376
375
  });
377
376
  };
378
377
  if (!profile && !flattenedProfile) return fallback;
379
- const containerClasses = (0, __emotion_css.cx)(styles.root, cardLayout ? styles.card : "", (0, __thunderid_browser.withVendorCSSClassPrefix)("user-profile"), className);
378
+ const containerClasses = require_emotion.cx(styles.root, cardLayout ? styles.card : "", (0, __thunderid_browser.withVendorCSSClassPrefix)("user-profile"), className);
380
379
  const currentUser = flattenedProfile || profile;
381
380
  const renderProfileWithoutSchemas = () => {
382
381
  if (!currentUser) return null;
@@ -426,7 +425,7 @@ const BaseUserProfile = ({ fallback = null, className = "", cardLayout = true, p
426
425
  className: containerClasses,
427
426
  children: [error && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Alert.default, {
428
427
  variant: "error",
429
- className: (0, __emotion_css.cx)((0, __thunderid_browser.withVendorCSSClassPrefix)((0, __thunderid_browser.bem)("user-profile", "alert")), styles.alert),
428
+ className: require_emotion.cx((0, __thunderid_browser.withVendorCSSClassPrefix)((0, __thunderid_browser.bem)("user-profile", "alert")), styles.alert),
430
429
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Alert.default.Title, { children: t("errors.heading") || "Error" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Alert.default.Description, { children: error })]
431
430
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
432
431
  className: styles.infoContainer,