@workos-inc/widgets 1.18.0 → 1.19.0-next.1790102694835

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 (340) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs +16 -20
  3. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs.map +1 -1
  4. package/dist/cjs/admin-portal-audit-log-streaming.client.d.cts +2 -0
  5. package/dist/cjs/admin-portal-domain-verification.client.cjs +42 -34
  6. package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
  7. package/dist/cjs/admin-portal-domain-verification.client.d.cts +2 -0
  8. package/dist/cjs/admin-portal-sso-connection.client.cjs +77 -50
  9. package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -1
  10. package/dist/cjs/api/client-graphql/client.cjs +2 -1
  11. package/dist/cjs/api/client-graphql/client.cjs.map +1 -1
  12. package/dist/cjs/api/client-graphql/generated.cjs +2295 -6
  13. package/dist/cjs/api/client-graphql/generated.cjs.map +1 -1
  14. package/dist/cjs/api/client-graphql/generated.d.cts +2989 -7
  15. package/dist/cjs/api/client-graphql/hooks.cjs +67 -0
  16. package/dist/cjs/api/client-graphql/hooks.cjs.map +1 -0
  17. package/dist/cjs/api/client-graphql/hooks.d.cts +44 -0
  18. package/dist/cjs/api/endpoint.cjs +43 -27
  19. package/dist/cjs/api/endpoint.cjs.map +1 -1
  20. package/dist/cjs/api/endpoint.d.cts +53 -20
  21. package/dist/cjs/api-keys.client.cjs +1 -2
  22. package/dist/cjs/api-keys.client.cjs.map +1 -1
  23. package/dist/cjs/directory-sync.client.cjs +54 -13
  24. package/dist/cjs/directory-sync.client.cjs.map +1 -1
  25. package/dist/cjs/experimental/api/fetch.cjs +44 -16
  26. package/dist/cjs/experimental/api/fetch.cjs.map +1 -1
  27. package/dist/cjs/experimental/api/fetch.d.cts +38 -9
  28. package/dist/cjs/experimental/api/react-query.cjs +75 -38
  29. package/dist/cjs/experimental/api/react-query.cjs.map +1 -1
  30. package/dist/cjs/experimental/api/react-query.d.cts +57 -24
  31. package/dist/cjs/experimental/api/swr.cjs +77 -35
  32. package/dist/cjs/experimental/api/swr.cjs.map +1 -1
  33. package/dist/cjs/experimental/api/swr.d.cts +49 -20
  34. package/dist/cjs/index.d.cts +4 -0
  35. package/dist/cjs/lib/add-mfa-dialog.cjs +39 -33
  36. package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
  37. package/dist/cjs/lib/admin-portal-audit-log-streaming.cjs.map +1 -1
  38. package/dist/cjs/lib/admin-portal-audit-log-streaming.d.cts +5 -3
  39. package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
  40. package/dist/cjs/lib/admin-portal-domain-verification.d.cts +4 -2
  41. package/dist/cjs/lib/api/api-key.cjs +128 -40
  42. package/dist/cjs/lib/api/api-key.cjs.map +1 -1
  43. package/dist/cjs/lib/api/api-key.d.cts +20 -9
  44. package/dist/cjs/lib/api/me.cjs +70 -0
  45. package/dist/cjs/lib/api/me.cjs.map +1 -0
  46. package/dist/cjs/lib/api/me.d.cts +37 -0
  47. package/dist/cjs/lib/api/pipes.cjs +419 -0
  48. package/dist/cjs/lib/api/pipes.cjs.map +1 -0
  49. package/dist/cjs/lib/api/pipes.d.cts +69 -0
  50. package/dist/cjs/lib/api/user-api-key.cjs +116 -45
  51. package/dist/cjs/lib/api/user-api-key.cjs.map +1 -1
  52. package/dist/cjs/lib/api/user-api-key.d.cts +17 -12
  53. package/dist/cjs/lib/api/user.cjs +170 -51
  54. package/dist/cjs/lib/api/user.cjs.map +1 -1
  55. package/dist/cjs/lib/api/user.d.cts +4 -25
  56. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +2 -2
  57. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
  58. package/dist/cjs/lib/api-keys/create-api-key.cjs +1 -2
  59. package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
  60. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +5 -13
  61. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
  62. package/dist/cjs/lib/change-email-dialog.cjs +39 -26
  63. package/dist/cjs/lib/change-email-dialog.cjs.map +1 -1
  64. package/dist/cjs/lib/change-email-dialog.d.cts +4 -3
  65. package/dist/cjs/lib/change-password-dialog.cjs +14 -13
  66. package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
  67. package/dist/cjs/lib/client-graphql-result.cjs +116 -0
  68. package/dist/cjs/lib/client-graphql-result.cjs.map +1 -0
  69. package/dist/cjs/lib/client-graphql-result.d.cts +32 -0
  70. package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
  71. package/dist/cjs/lib/delete-domain-dialog.d.cts +3 -4
  72. package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
  73. package/dist/cjs/lib/delete-user-dialog.d.cts +3 -2
  74. package/dist/cjs/lib/directory-sync.cjs +59 -23
  75. package/dist/cjs/lib/directory-sync.cjs.map +1 -1
  76. package/dist/cjs/lib/directory-sync.d.cts +23 -5
  77. package/dist/cjs/lib/domain-actions.cjs.map +1 -1
  78. package/dist/cjs/lib/domain-actions.d.cts +3 -4
  79. package/dist/cjs/lib/domain-item.cjs.map +1 -1
  80. package/dist/cjs/lib/domain-item.d.cts +3 -4
  81. package/dist/cjs/lib/edit-user-profile-dialog.cjs +19 -19
  82. package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
  83. package/dist/cjs/lib/edit-user-profile-dialog.d.cts +4 -3
  84. package/dist/cjs/lib/edit-user-role-dialog.cjs +3 -8
  85. package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
  86. package/dist/cjs/lib/edit-user-role-dialog.d.cts +5 -4
  87. package/dist/cjs/lib/elevated-access.cjs +22 -13
  88. package/dist/cjs/lib/elevated-access.cjs.map +1 -1
  89. package/dist/cjs/lib/elevated-access.d.cts +1 -1
  90. package/dist/cjs/lib/invite-user-dialog.cjs +9 -15
  91. package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
  92. package/dist/cjs/lib/logout-all-sessions-dialog.cjs +13 -5
  93. package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
  94. package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
  95. package/dist/cjs/lib/logout-dialog.cjs +10 -6
  96. package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
  97. package/dist/cjs/lib/logout-dialog.d.cts +3 -4
  98. package/dist/cjs/lib/name-server-icon.cjs.map +1 -1
  99. package/dist/cjs/lib/name-server-icon.d.cts +3 -4
  100. package/dist/cjs/lib/oauth-icons.cjs +13 -2
  101. package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
  102. package/dist/cjs/lib/oauth-icons.d.cts +2 -1
  103. package/dist/cjs/lib/organization-switcher.cjs +3 -3
  104. package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
  105. package/dist/cjs/lib/organization-switcher.d.cts +6 -3
  106. package/dist/cjs/lib/password-error-utils.cjs +28 -43
  107. package/dist/cjs/lib/password-error-utils.cjs.map +1 -1
  108. package/dist/cjs/lib/password-error-utils.d.cts +3 -13
  109. package/dist/cjs/lib/pipes-admin.cjs +109 -79
  110. package/dist/cjs/lib/pipes-admin.cjs.map +1 -1
  111. package/dist/cjs/lib/pipes-admin.d.cts +1 -1
  112. package/dist/cjs/lib/pipes.cjs +133 -60
  113. package/dist/cjs/lib/pipes.cjs.map +1 -1
  114. package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
  115. package/dist/cjs/lib/resend-invite-dialog.d.cts +3 -2
  116. package/dist/cjs/lib/reset-mfa-dialog.cjs +11 -3
  117. package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
  118. package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
  119. package/dist/cjs/lib/revoke-invite-dialog.d.cts +3 -2
  120. package/dist/cjs/lib/set-password-dialog.cjs +16 -3
  121. package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
  122. package/dist/cjs/lib/use-security-settings.cjs +5 -25
  123. package/dist/cjs/lib/use-security-settings.cjs.map +1 -1
  124. package/dist/cjs/lib/use-security-settings.d.cts +2 -2
  125. package/dist/cjs/lib/user-actions-dropdown.cjs +2 -6
  126. package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
  127. package/dist/cjs/lib/user-actions-dropdown.d.cts +3 -2
  128. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs +3 -10
  129. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs.map +1 -1
  130. package/dist/cjs/lib/user-profile.cjs +10 -5
  131. package/dist/cjs/lib/user-profile.cjs.map +1 -1
  132. package/dist/cjs/lib/user-profile.d.cts +5 -2
  133. package/dist/cjs/lib/user-security.cjs +4 -5
  134. package/dist/cjs/lib/user-security.cjs.map +1 -1
  135. package/dist/cjs/lib/user-security.d.cts +6 -2
  136. package/dist/cjs/lib/user-sessions.cjs +2 -2
  137. package/dist/cjs/lib/user-sessions.cjs.map +1 -1
  138. package/dist/cjs/lib/user-sessions.d.cts +6 -4
  139. package/dist/cjs/lib/users-filter.cjs.map +1 -1
  140. package/dist/cjs/lib/users-filter.d.cts +4 -3
  141. package/dist/cjs/lib/users-management-context.cjs.map +1 -1
  142. package/dist/cjs/lib/users-management-context.d.cts +4 -18
  143. package/dist/cjs/lib/users-management-state.cjs.map +1 -1
  144. package/dist/cjs/lib/users-management-state.d.cts +4 -25
  145. package/dist/cjs/lib/users-management.cjs.map +1 -1
  146. package/dist/cjs/lib/users-management.d.cts +7 -7
  147. package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
  148. package/dist/cjs/lib/view-dns-record-dialog.d.cts +3 -4
  149. package/dist/cjs/organization-switcher.client.cjs +7 -6
  150. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  151. package/dist/cjs/organization-switcher.client.d.cts +3 -1
  152. package/dist/cjs/pipes-admin.client.cjs +7 -4
  153. package/dist/cjs/pipes-admin.client.cjs.map +1 -1
  154. package/dist/cjs/pipes.client.cjs +17 -16
  155. package/dist/cjs/pipes.client.cjs.map +1 -1
  156. package/dist/cjs/user-CgBDfSHl.d.cts +502 -0
  157. package/dist/cjs/user-profile.client.cjs +3 -3
  158. package/dist/cjs/user-profile.client.cjs.map +1 -1
  159. package/dist/cjs/user-profile.client.d.cts +4 -1
  160. package/dist/cjs/user-security.client.cjs +25 -14
  161. package/dist/cjs/user-security.client.cjs.map +1 -1
  162. package/dist/cjs/user-security.client.d.cts +2 -0
  163. package/dist/cjs/user-sessions.client.cjs +12 -29
  164. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  165. package/dist/cjs/user-sessions.client.d.cts +2 -0
  166. package/dist/cjs/users-management.client.cjs +1 -4
  167. package/dist/cjs/users-management.client.cjs.map +1 -1
  168. package/dist/cjs/users-management.client.d.cts +4 -1
  169. package/dist/cjs/utils.cjs +2 -1
  170. package/dist/cjs/utils.cjs.map +1 -1
  171. package/dist/esm/admin-portal-audit-log-streaming.client.d.ts +2 -0
  172. package/dist/esm/admin-portal-audit-log-streaming.client.js +20 -23
  173. package/dist/esm/admin-portal-audit-log-streaming.client.js.map +1 -1
  174. package/dist/esm/admin-portal-domain-verification.client.d.ts +2 -0
  175. package/dist/esm/admin-portal-domain-verification.client.js +45 -39
  176. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  177. package/dist/esm/admin-portal-sso-connection.client.js +80 -52
  178. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -1
  179. package/dist/esm/api/client-graphql/client.js +2 -1
  180. package/dist/esm/api/client-graphql/client.js.map +1 -1
  181. package/dist/esm/api/client-graphql/generated.d.ts +2989 -7
  182. package/dist/esm/api/client-graphql/generated.js +2203 -0
  183. package/dist/esm/api/client-graphql/generated.js.map +1 -1
  184. package/dist/esm/api/client-graphql/hooks.d.ts +44 -0
  185. package/dist/esm/api/client-graphql/hooks.js +43 -0
  186. package/dist/esm/api/client-graphql/hooks.js.map +1 -0
  187. package/dist/esm/api/endpoint.d.ts +53 -20
  188. package/dist/esm/api/endpoint.js +43 -27
  189. package/dist/esm/api/endpoint.js.map +1 -1
  190. package/dist/esm/api-keys.client.js +4 -2
  191. package/dist/esm/api-keys.client.js.map +1 -1
  192. package/dist/esm/directory-sync.client.js +56 -7
  193. package/dist/esm/directory-sync.client.js.map +1 -1
  194. package/dist/esm/experimental/api/fetch.d.ts +38 -9
  195. package/dist/esm/experimental/api/fetch.js +44 -16
  196. package/dist/esm/experimental/api/fetch.js.map +1 -1
  197. package/dist/esm/experimental/api/react-query.d.ts +57 -24
  198. package/dist/esm/experimental/api/react-query.js +75 -38
  199. package/dist/esm/experimental/api/react-query.js.map +1 -1
  200. package/dist/esm/experimental/api/swr.d.ts +49 -20
  201. package/dist/esm/experimental/api/swr.js +77 -35
  202. package/dist/esm/experimental/api/swr.js.map +1 -1
  203. package/dist/esm/index.d.ts +4 -0
  204. package/dist/esm/lib/add-mfa-dialog.js +39 -36
  205. package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
  206. package/dist/esm/lib/admin-portal-audit-log-streaming.d.ts +5 -3
  207. package/dist/esm/lib/admin-portal-audit-log-streaming.js.map +1 -1
  208. package/dist/esm/lib/admin-portal-domain-verification.d.ts +4 -2
  209. package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
  210. package/dist/esm/lib/api/api-key.d.ts +20 -9
  211. package/dist/esm/lib/api/api-key.js +124 -49
  212. package/dist/esm/lib/api/api-key.js.map +1 -1
  213. package/dist/esm/lib/api/me.d.ts +37 -0
  214. package/dist/esm/lib/api/me.js +37 -0
  215. package/dist/esm/lib/api/me.js.map +1 -0
  216. package/dist/esm/lib/api/pipes.d.ts +69 -0
  217. package/dist/esm/lib/api/pipes.js +380 -0
  218. package/dist/esm/lib/api/pipes.js.map +1 -0
  219. package/dist/esm/lib/api/user-api-key.d.ts +17 -12
  220. package/dist/esm/lib/api/user-api-key.js +113 -52
  221. package/dist/esm/lib/api/user-api-key.js.map +1 -1
  222. package/dist/esm/lib/api/user.d.ts +4 -25
  223. package/dist/esm/lib/api/user.js +173 -59
  224. package/dist/esm/lib/api/user.js.map +1 -1
  225. package/dist/esm/lib/api-keys/api-key-details-dialog.js +1 -3
  226. package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
  227. package/dist/esm/lib/api-keys/create-api-key.js +2 -2
  228. package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
  229. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +5 -15
  230. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
  231. package/dist/esm/lib/change-email-dialog.d.ts +4 -3
  232. package/dist/esm/lib/change-email-dialog.js +39 -31
  233. package/dist/esm/lib/change-email-dialog.js.map +1 -1
  234. package/dist/esm/lib/change-password-dialog.js +14 -13
  235. package/dist/esm/lib/change-password-dialog.js.map +1 -1
  236. package/dist/esm/lib/client-graphql-result.d.ts +32 -0
  237. package/dist/esm/lib/client-graphql-result.js +89 -0
  238. package/dist/esm/lib/client-graphql-result.js.map +1 -0
  239. package/dist/esm/lib/delete-domain-dialog.d.ts +3 -4
  240. package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
  241. package/dist/esm/lib/delete-user-dialog.d.ts +3 -2
  242. package/dist/esm/lib/delete-user-dialog.js.map +1 -1
  243. package/dist/esm/lib/directory-sync.d.ts +23 -5
  244. package/dist/esm/lib/directory-sync.js +46 -14
  245. package/dist/esm/lib/directory-sync.js.map +1 -1
  246. package/dist/esm/lib/domain-actions.d.ts +3 -4
  247. package/dist/esm/lib/domain-actions.js.map +1 -1
  248. package/dist/esm/lib/domain-item.d.ts +3 -4
  249. package/dist/esm/lib/domain-item.js.map +1 -1
  250. package/dist/esm/lib/edit-user-profile-dialog.d.ts +4 -3
  251. package/dist/esm/lib/edit-user-profile-dialog.js +19 -19
  252. package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
  253. package/dist/esm/lib/edit-user-role-dialog.d.ts +5 -4
  254. package/dist/esm/lib/edit-user-role-dialog.js +7 -11
  255. package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
  256. package/dist/esm/lib/elevated-access.d.ts +1 -1
  257. package/dist/esm/lib/elevated-access.js +20 -11
  258. package/dist/esm/lib/elevated-access.js.map +1 -1
  259. package/dist/esm/lib/invite-user-dialog.js +10 -16
  260. package/dist/esm/lib/invite-user-dialog.js.map +1 -1
  261. package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
  262. package/dist/esm/lib/logout-all-sessions-dialog.js +16 -5
  263. package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
  264. package/dist/esm/lib/logout-dialog.d.ts +3 -4
  265. package/dist/esm/lib/logout-dialog.js +12 -8
  266. package/dist/esm/lib/logout-dialog.js.map +1 -1
  267. package/dist/esm/lib/name-server-icon.d.ts +3 -4
  268. package/dist/esm/lib/name-server-icon.js.map +1 -1
  269. package/dist/esm/lib/oauth-icons.d.ts +2 -1
  270. package/dist/esm/lib/oauth-icons.js +11 -1
  271. package/dist/esm/lib/oauth-icons.js.map +1 -1
  272. package/dist/esm/lib/organization-switcher.d.ts +6 -3
  273. package/dist/esm/lib/organization-switcher.js +3 -3
  274. package/dist/esm/lib/organization-switcher.js.map +1 -1
  275. package/dist/esm/lib/password-error-utils.d.ts +3 -13
  276. package/dist/esm/lib/password-error-utils.js +28 -43
  277. package/dist/esm/lib/password-error-utils.js.map +1 -1
  278. package/dist/esm/lib/pipes-admin.d.ts +1 -1
  279. package/dist/esm/lib/pipes-admin.js +105 -78
  280. package/dist/esm/lib/pipes-admin.js.map +1 -1
  281. package/dist/esm/lib/pipes.js +140 -71
  282. package/dist/esm/lib/pipes.js.map +1 -1
  283. package/dist/esm/lib/resend-invite-dialog.d.ts +3 -2
  284. package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
  285. package/dist/esm/lib/reset-mfa-dialog.js +11 -3
  286. package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
  287. package/dist/esm/lib/revoke-invite-dialog.d.ts +3 -2
  288. package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
  289. package/dist/esm/lib/set-password-dialog.js +16 -3
  290. package/dist/esm/lib/set-password-dialog.js.map +1 -1
  291. package/dist/esm/lib/use-security-settings.d.ts +2 -2
  292. package/dist/esm/lib/use-security-settings.js +5 -27
  293. package/dist/esm/lib/use-security-settings.js.map +1 -1
  294. package/dist/esm/lib/user-actions-dropdown.d.ts +3 -2
  295. package/dist/esm/lib/user-actions-dropdown.js +2 -6
  296. package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
  297. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js +3 -11
  298. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js.map +1 -1
  299. package/dist/esm/lib/user-profile.d.ts +5 -2
  300. package/dist/esm/lib/user-profile.js +15 -6
  301. package/dist/esm/lib/user-profile.js.map +1 -1
  302. package/dist/esm/lib/user-security.d.ts +6 -2
  303. package/dist/esm/lib/user-security.js +4 -5
  304. package/dist/esm/lib/user-security.js.map +1 -1
  305. package/dist/esm/lib/user-sessions.d.ts +6 -4
  306. package/dist/esm/lib/user-sessions.js +2 -2
  307. package/dist/esm/lib/user-sessions.js.map +1 -1
  308. package/dist/esm/lib/users-filter.d.ts +4 -3
  309. package/dist/esm/lib/users-filter.js.map +1 -1
  310. package/dist/esm/lib/users-management-context.d.ts +4 -18
  311. package/dist/esm/lib/users-management-context.js.map +1 -1
  312. package/dist/esm/lib/users-management-state.d.ts +4 -25
  313. package/dist/esm/lib/users-management-state.js.map +1 -1
  314. package/dist/esm/lib/users-management.d.ts +7 -7
  315. package/dist/esm/lib/users-management.js.map +1 -1
  316. package/dist/esm/lib/view-dns-record-dialog.d.ts +3 -4
  317. package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
  318. package/dist/esm/organization-switcher.client.d.ts +3 -1
  319. package/dist/esm/organization-switcher.client.js +10 -6
  320. package/dist/esm/organization-switcher.client.js.map +1 -1
  321. package/dist/esm/pipes-admin.client.js +10 -4
  322. package/dist/esm/pipes-admin.client.js.map +1 -1
  323. package/dist/esm/pipes.client.js +17 -14
  324. package/dist/esm/pipes.client.js.map +1 -1
  325. package/dist/esm/user-BE5sIud6.d.ts +502 -0
  326. package/dist/esm/user-profile.client.d.ts +4 -1
  327. package/dist/esm/user-profile.client.js +2 -2
  328. package/dist/esm/user-profile.client.js.map +1 -1
  329. package/dist/esm/user-security.client.d.ts +2 -0
  330. package/dist/esm/user-security.client.js +28 -14
  331. package/dist/esm/user-security.client.js.map +1 -1
  332. package/dist/esm/user-sessions.client.d.ts +2 -0
  333. package/dist/esm/user-sessions.client.js +16 -30
  334. package/dist/esm/user-sessions.client.js.map +1 -1
  335. package/dist/esm/users-management.client.d.ts +4 -1
  336. package/dist/esm/users-management.client.js +2 -5
  337. package/dist/esm/users-management.client.js.map +1 -1
  338. package/dist/esm/utils.js +2 -1
  339. package/dist/esm/utils.js.map +1 -1
  340. package/package.json +1 -1
@@ -1,10 +1,9 @@
1
1
  import * as React from 'react';
2
- import { OrganizationDomain } from '../api/endpoint.js';
3
- import '@tanstack/react-query';
4
- import '../api/widgets-api-client.js';
2
+ import { OrganizationDomainFieldsFragment } from '../api/client-graphql/generated.js';
3
+ import 'graphql-request';
5
4
 
6
5
  interface NameServerIconProps {
7
- provider?: OrganizationDomain["nameServer"];
6
+ provider?: OrganizationDomainFieldsFragment["nameServer"];
8
7
  }
9
8
  declare const NameServerIcon: ({ provider }: NameServerIconProps) => React.JSX.Element;
10
9
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/name-server-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { VisuallyHidden } from \"@radix-ui/themes\";\nimport { OrganizationDomain } from \"../api/endpoint.js\";\nimport { ProviderIcon } from \"./provider-icon.js\";\n\ninterface NameServerIconProps {\n provider?: OrganizationDomain[\"nameServer\"];\n}\n\nexport const NameServerIcon = ({ provider }: NameServerIconProps) => (\n <>\n <CustomProviderIcon\n provider=\"aws\"\n show={provider === \"AwsRoute53\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"google\"\n show={provider === \"GoogleDomains\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"cloudflare\"\n show={provider === \"CloudFlare\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"godaddy\"\n show={provider === \"GoDaddy\"}\n size=\"2\"\n />\n\n {(provider === undefined || provider === \"Other\") && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_439_15264)\">\n <path\n d=\"M8.36963 0.84314C12.1559 1.03545 15.1665 4.16625 15.1665 8.00037C15.1663 11.9581 11.9583 15.1662 8.00049 15.1664C4.04256 15.1664 0.833672 11.9583 0.833496 8.00037C0.833496 4.04233 4.04245 0.833374 8.00049 0.833374L8.36963 0.84314ZM1.85596 8.50037C2.0802 11.2918 4.1615 13.5566 6.86475 14.0599C5.68944 12.4359 4.98911 10.5102 4.85498 8.50037H1.85596ZM11.144 8.50037C11.0099 10.5105 10.3098 12.4357 9.13428 14.0599C11.8382 13.5571 13.9198 11.2923 14.144 8.50037H11.144ZM5.85889 8.50037C6.00462 10.4763 6.75172 12.3598 7.99951 13.8978C9.24761 12.3597 9.99445 10.4765 10.1401 8.50037H5.85889ZM6.86572 1.93884C4.16183 2.44193 2.08009 4.70839 1.85596 7.50037H4.85498C4.98905 5.48961 5.68956 3.5633 6.86572 1.93884ZM7.99951 2.10193C6.75148 3.64015 6.00449 5.52408 5.85889 7.50037H10.1401C9.99457 5.5239 9.24784 3.64025 7.99951 2.10193ZM9.1333 1.93884C10.3097 3.56349 11.011 5.48937 11.145 7.50037H14.144C13.9199 4.70785 11.8378 2.44135 9.1333 1.93884Z\"\n fill=\"#2B333B\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_439_15264\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n )}\n </>\n);\n\ntype IconProps = React.ComponentPropsWithoutRef<typeof ProviderIcon> & {\n show?: boolean;\n};\n\nconst CustomProviderIcon = ({ show, ...props }: IconProps) => {\n const Wrapper = show ? React.Fragment : VisuallyHidden;\n return (\n <Wrapper>\n <ProviderIcon {...props} provider={props.provider} size=\"1\" />\n </Wrapper>\n );\n};\n"],"mappings":";AAYE,mBACE,KAsBE,YAvBJ;AAVF,YAAY,WAAW;AACvB,SAAS,sBAAsB;AAE/B,SAAS,oBAAoB;AAMtB,MAAM,iBAAiB,CAAC,EAAE,SAAS,MACxC,iCACE;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,GAEE,aAAa,UAAa,aAAa,YACvC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MAEN;AAAA,4BAAC,OAAE,UAAS,yBACV;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP,GACF;AAAA,QACA,oBAAC,UACC,8BAAC,cAAS,IAAG,mBACX,8BAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AAAA,EACF;AAAA,GAEJ;AAOF,MAAM,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,MAAiB;AAC5D,QAAM,UAAU,OAAO,MAAM,WAAW;AACxC,SACE,oBAAC,WACC,8BAAC,gBAAc,GAAG,OAAO,UAAU,MAAM,UAAU,MAAK,KAAI,GAC9D;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/name-server-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { VisuallyHidden } from \"@radix-ui/themes\";\nimport type { OrganizationDomainFieldsFragment } from \"../api/client-graphql/generated.js\";\nimport { ProviderIcon } from \"./provider-icon.js\";\n\ninterface NameServerIconProps {\n provider?: OrganizationDomainFieldsFragment[\"nameServer\"];\n}\n\nexport const NameServerIcon = ({ provider }: NameServerIconProps) => (\n <>\n <CustomProviderIcon\n provider=\"aws\"\n show={provider === \"AwsRoute53\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"google\"\n show={provider === \"GoogleDomains\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"cloudflare\"\n show={provider === \"CloudFlare\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"godaddy\"\n show={provider === \"GoDaddy\"}\n size=\"2\"\n />\n\n {(provider === undefined || provider === \"Other\") && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_439_15264)\">\n <path\n d=\"M8.36963 0.84314C12.1559 1.03545 15.1665 4.16625 15.1665 8.00037C15.1663 11.9581 11.9583 15.1662 8.00049 15.1664C4.04256 15.1664 0.833672 11.9583 0.833496 8.00037C0.833496 4.04233 4.04245 0.833374 8.00049 0.833374L8.36963 0.84314ZM1.85596 8.50037C2.0802 11.2918 4.1615 13.5566 6.86475 14.0599C5.68944 12.4359 4.98911 10.5102 4.85498 8.50037H1.85596ZM11.144 8.50037C11.0099 10.5105 10.3098 12.4357 9.13428 14.0599C11.8382 13.5571 13.9198 11.2923 14.144 8.50037H11.144ZM5.85889 8.50037C6.00462 10.4763 6.75172 12.3598 7.99951 13.8978C9.24761 12.3597 9.99445 10.4765 10.1401 8.50037H5.85889ZM6.86572 1.93884C4.16183 2.44193 2.08009 4.70839 1.85596 7.50037H4.85498C4.98905 5.48961 5.68956 3.5633 6.86572 1.93884ZM7.99951 2.10193C6.75148 3.64015 6.00449 5.52408 5.85889 7.50037H10.1401C9.99457 5.5239 9.24784 3.64025 7.99951 2.10193ZM9.1333 1.93884C10.3097 3.56349 11.011 5.48937 11.145 7.50037H14.144C13.9199 4.70785 11.8378 2.44135 9.1333 1.93884Z\"\n fill=\"#2B333B\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_439_15264\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n )}\n </>\n);\n\ntype IconProps = React.ComponentPropsWithoutRef<typeof ProviderIcon> & {\n show?: boolean;\n};\n\nconst CustomProviderIcon = ({ show, ...props }: IconProps) => {\n const Wrapper = show ? React.Fragment : VisuallyHidden;\n return (\n <Wrapper>\n <ProviderIcon {...props} provider={props.provider} size=\"1\" />\n </Wrapper>\n );\n};\n"],"mappings":";AAYE,mBACE,KAsBE,YAvBJ;AAVF,YAAY,WAAW;AACvB,SAAS,sBAAsB;AAE/B,SAAS,oBAAoB;AAMtB,MAAM,iBAAiB,CAAC,EAAE,SAAS,MACxC,iCACE;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,GAEE,aAAa,UAAa,aAAa,YACvC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MAEN;AAAA,4BAAC,OAAE,UAAS,yBACV;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP,GACF;AAAA,QACA,oBAAC,UACC,8BAAC,cAAS,IAAG,mBACX,8BAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AAAA,EACF;AAAA,GAEJ;AAOF,MAAM,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,MAAiB;AAC5D,QAAM,UAAU,OAAO,MAAM,WAAW;AACxC,SACE,oBAAC,WACC,8BAAC,gBAAc,GAAG,OAAO,UAAU,MAAM,UAAU,MAAK,KAAI,GAC9D;AAEJ;","names":[]}
@@ -1,9 +1,10 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  type OAuthAccount = "GithubOAuth" | "GoogleOAuth" | "MicrosoftOAuth" | "AppleOAuth";
4
+ declare function isOAuthAccount(value: string): value is OAuthAccount;
4
5
  declare const OAuthIcon: ({ account, ...props }: React.ComponentPropsWithoutRef<"svg"> & {
5
6
  account: OAuthAccount;
6
7
  }) => React.JSX.Element;
7
8
  declare const getOAuthName: (account: OAuthAccount) => "Apple" | "GitHub" | "Google" | "Microsoft";
8
9
 
9
- export { type OAuthAccount, OAuthIcon, getOAuthName };
10
+ export { type OAuthAccount, OAuthIcon, getOAuthName, isOAuthAccount };
@@ -1,5 +1,14 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
+ const OAUTH_ACCOUNTS = [
4
+ "GithubOAuth",
5
+ "GoogleOAuth",
6
+ "MicrosoftOAuth",
7
+ "AppleOAuth"
8
+ ];
9
+ function isOAuthAccount(value) {
10
+ return OAUTH_ACCOUNTS.some((account) => account === value);
11
+ }
3
12
  const GitHub = React.forwardRef((props, forwardedRef) => /* @__PURE__ */ jsx(
4
13
  "svg",
5
14
  {
@@ -140,6 +149,7 @@ const getOAuthName = (account) => {
140
149
  };
141
150
  export {
142
151
  OAuthIcon,
143
- getOAuthName
152
+ getOAuthName,
153
+ isOAuthAccount
144
154
  };
145
155
  //# sourceMappingURL=oauth-icons.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/oauth-icons.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type OAuthAccount =\n | \"GithubOAuth\"\n | \"GoogleOAuth\"\n | \"MicrosoftOAuth\"\n | \"AppleOAuth\";\n\nconst GitHub = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 15 15\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M7.49933 0.25C3.49635 0.25 0.25 3.49593 0.25 7.50024C0.25 10.703 2.32715 13.4206 5.2081 14.3797C5.57084 14.446 5.70302 14.2222 5.70302 14.0299C5.70302 13.8576 5.69679 13.4019 5.69323 12.797C3.67661 13.235 3.25112 11.825 3.25112 11.825C2.92132 10.9874 2.44599 10.7644 2.44599 10.7644C1.78773 10.3149 2.49584 10.3238 2.49584 10.3238C3.22353 10.375 3.60629 11.0711 3.60629 11.0711C4.25298 12.1788 5.30335 11.8588 5.71638 11.6732C5.78225 11.205 5.96962 10.8854 6.17658 10.7043C4.56675 10.5209 2.87415 9.89918 2.87415 7.12104C2.87415 6.32925 3.15677 5.68257 3.62053 5.17563C3.54576 4.99226 3.29697 4.25521 3.69174 3.25691C3.69174 3.25691 4.30015 3.06196 5.68522 3.99973C6.26337 3.83906 6.8838 3.75895 7.50022 3.75583C8.1162 3.75895 8.73619 3.83906 9.31523 3.99973C10.6994 3.06196 11.3069 3.25691 11.3069 3.25691C11.7026 4.25521 11.4538 4.99226 11.3795 5.17563C11.8441 5.68257 12.1245 6.32925 12.1245 7.12104C12.1245 9.9063 10.4292 10.5192 8.81452 10.6985C9.07444 10.9224 9.30633 11.3648 9.30633 12.0413C9.30633 13.0102 9.29742 13.7922 9.29742 14.0299C9.29742 14.2239 9.42828 14.4496 9.79591 14.3788C12.6746 13.4179 14.75 10.7025 14.75 7.50024C14.75 3.49593 11.5036 0.25 7.49933 0.25Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n));\n\nGitHub.displayName = \"GitHub\";\n\nconst Google = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 16 16\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path\n d=\"M15.83 8.18C15.83 7.65333 15.7833 7.15333 15.7033 6.66667H8.17V9.67333H12.4833C12.29 10.66 11.7233 11.4933 10.8833 12.06V14.06H13.4567C14.9633 12.6667 15.83 10.6133 15.83 8.18Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M8.17 16C10.33 16 12.1367 15.28 13.4567 14.06L10.8833 12.06C10.1633 12.54 9.25 12.8333 8.17 12.8333C6.08334 12.8333 4.31667 11.4267 3.68334 9.52667H1.03V11.5867C2.34334 14.2 5.04334 16 8.17 16Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M3.68334 9.52667C3.51667 9.04667 3.43 8.53333 3.43 8C3.43 7.46667 3.52334 6.95334 3.68334 6.47334V4.41334H1.03C0.483335 5.49334 0.170002 6.70667 0.170002 8C0.170002 9.29333 0.483335 10.5067 1.03 11.5867L3.68334 9.52667Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M8.17 3.16667C9.35 3.16667 10.4033 3.57334 11.2367 4.36667L13.5167 2.08667C12.1367 0.793334 10.33 0 8.17 0C5.04334 0 2.34334 1.8 1.03 4.41334L3.68334 6.47334C4.31667 4.57334 6.08334 3.16667 8.17 3.16667Z\"\n fill=\"#EA4335\"\n />\n </g>\n </svg>\n));\n\nGoogle.displayName = \"Google\";\n\nconst Microsoft = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path d=\"M0 0H7L7 7H-4.76837e-07L0 0Z\" fill=\"#F35325\" />\n <path d=\"M8 0H15V7H8L8 0Z\" fill=\"#81BC06\" />\n <path d=\"M0 8H7V15H0V8Z\" fill=\"#05A6F0\" />\n <path d=\"M8 8L15 8V15L8 15V8Z\" fill=\"#FFBA08\" />\n </g>\n </svg>\n));\n\nMicrosoft.displayName = \"Microsoft\";\n\nconst Apple = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>(({ style, ...props }, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n style={{ overflow: \"visible\", ...style }}\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M14.219 3.33667C14.1169 3.41674 12.3137 4.44312 12.3137 6.72534C12.3137 9.3651 14.6082 10.299 14.6769 10.3221C14.6663 10.379 14.3124 11.601 13.4671 12.8462C12.7134 13.942 11.9263 15.0359 10.7288 15.0359C9.53134 15.0359 9.22317 14.3333 7.84081 14.3333C6.49366 14.3333 6.01469 15.0591 4.91935 15.0591C3.82401 15.0591 3.05978 14.0451 2.18104 12.8C1.1632 11.3378 0.34082 9.06625 0.34082 6.91034C0.34082 3.45232 2.56668 1.61835 4.75732 1.61835C5.92133 1.61835 6.89164 2.39036 7.62246 2.39036C8.31802 2.39036 9.40277 1.5721 10.7271 1.5721C11.2289 1.5721 13.0321 1.61835 14.219 3.33667ZM10.0984 0.108136C10.646 -0.548247 11.0334 -1.459 11.0334 -2.36975C11.0334 -2.49605 11.0229 -2.62412 11 -2.72729C10.1089 -2.6935 9.04883 -2.12783 8.40959 -1.37895C7.90772 -0.802617 7.43931 0.108136 7.43931 1.03134C7.43931 1.1701 7.46218 1.30883 7.47277 1.35331C7.52909 1.36398 7.62067 1.37643 7.71224 1.37643C8.51172 1.37643 9.51724 0.835672 10.0984 0.108136Z\"\n fill=\"currentColor\"\n />\n </svg>\n));\n\nApple.displayName = \"Apple\";\n\nexport const OAuthIcon = ({\n account,\n ...props\n}: React.ComponentPropsWithoutRef<\"svg\"> & { account: OAuthAccount }) => {\n switch (account) {\n case \"GithubOAuth\":\n return <GitHub {...props} />;\n case \"GoogleOAuth\":\n return <Google {...props} />;\n case \"MicrosoftOAuth\":\n return <Microsoft {...props} />;\n case \"AppleOAuth\":\n return <Apple {...props} />;\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n\nexport const getOAuthName = (account: OAuthAccount) => {\n switch (account) {\n case \"GithubOAuth\":\n return \"GitHub\";\n case \"GoogleOAuth\":\n return \"Google\";\n case \"MicrosoftOAuth\":\n return \"Microsoft\";\n case \"AppleOAuth\":\n return \"Apple\";\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/oauth-icons.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type OAuthAccount =\n | \"GithubOAuth\"\n | \"GoogleOAuth\"\n | \"MicrosoftOAuth\"\n | \"AppleOAuth\";\n\nconst OAUTH_ACCOUNTS: readonly OAuthAccount[] = [\n \"GithubOAuth\",\n \"GoogleOAuth\",\n \"MicrosoftOAuth\",\n \"AppleOAuth\",\n];\n\nexport function isOAuthAccount(value: string): value is OAuthAccount {\n return OAUTH_ACCOUNTS.some((account) => account === value);\n}\n\nconst GitHub = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 15 15\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M7.49933 0.25C3.49635 0.25 0.25 3.49593 0.25 7.50024C0.25 10.703 2.32715 13.4206 5.2081 14.3797C5.57084 14.446 5.70302 14.2222 5.70302 14.0299C5.70302 13.8576 5.69679 13.4019 5.69323 12.797C3.67661 13.235 3.25112 11.825 3.25112 11.825C2.92132 10.9874 2.44599 10.7644 2.44599 10.7644C1.78773 10.3149 2.49584 10.3238 2.49584 10.3238C3.22353 10.375 3.60629 11.0711 3.60629 11.0711C4.25298 12.1788 5.30335 11.8588 5.71638 11.6732C5.78225 11.205 5.96962 10.8854 6.17658 10.7043C4.56675 10.5209 2.87415 9.89918 2.87415 7.12104C2.87415 6.32925 3.15677 5.68257 3.62053 5.17563C3.54576 4.99226 3.29697 4.25521 3.69174 3.25691C3.69174 3.25691 4.30015 3.06196 5.68522 3.99973C6.26337 3.83906 6.8838 3.75895 7.50022 3.75583C8.1162 3.75895 8.73619 3.83906 9.31523 3.99973C10.6994 3.06196 11.3069 3.25691 11.3069 3.25691C11.7026 4.25521 11.4538 4.99226 11.3795 5.17563C11.8441 5.68257 12.1245 6.32925 12.1245 7.12104C12.1245 9.9063 10.4292 10.5192 8.81452 10.6985C9.07444 10.9224 9.30633 11.3648 9.30633 12.0413C9.30633 13.0102 9.29742 13.7922 9.29742 14.0299C9.29742 14.2239 9.42828 14.4496 9.79591 14.3788C12.6746 13.4179 14.75 10.7025 14.75 7.50024C14.75 3.49593 11.5036 0.25 7.49933 0.25Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n));\n\nGitHub.displayName = \"GitHub\";\n\nconst Google = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 16 16\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path\n d=\"M15.83 8.18C15.83 7.65333 15.7833 7.15333 15.7033 6.66667H8.17V9.67333H12.4833C12.29 10.66 11.7233 11.4933 10.8833 12.06V14.06H13.4567C14.9633 12.6667 15.83 10.6133 15.83 8.18Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M8.17 16C10.33 16 12.1367 15.28 13.4567 14.06L10.8833 12.06C10.1633 12.54 9.25 12.8333 8.17 12.8333C6.08334 12.8333 4.31667 11.4267 3.68334 9.52667H1.03V11.5867C2.34334 14.2 5.04334 16 8.17 16Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M3.68334 9.52667C3.51667 9.04667 3.43 8.53333 3.43 8C3.43 7.46667 3.52334 6.95334 3.68334 6.47334V4.41334H1.03C0.483335 5.49334 0.170002 6.70667 0.170002 8C0.170002 9.29333 0.483335 10.5067 1.03 11.5867L3.68334 9.52667Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M8.17 3.16667C9.35 3.16667 10.4033 3.57334 11.2367 4.36667L13.5167 2.08667C12.1367 0.793334 10.33 0 8.17 0C5.04334 0 2.34334 1.8 1.03 4.41334L3.68334 6.47334C4.31667 4.57334 6.08334 3.16667 8.17 3.16667Z\"\n fill=\"#EA4335\"\n />\n </g>\n </svg>\n));\n\nGoogle.displayName = \"Google\";\n\nconst Microsoft = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path d=\"M0 0H7L7 7H-4.76837e-07L0 0Z\" fill=\"#F35325\" />\n <path d=\"M8 0H15V7H8L8 0Z\" fill=\"#81BC06\" />\n <path d=\"M0 8H7V15H0V8Z\" fill=\"#05A6F0\" />\n <path d=\"M8 8L15 8V15L8 15V8Z\" fill=\"#FFBA08\" />\n </g>\n </svg>\n));\n\nMicrosoft.displayName = \"Microsoft\";\n\nconst Apple = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>(({ style, ...props }, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n style={{ overflow: \"visible\", ...style }}\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M14.219 3.33667C14.1169 3.41674 12.3137 4.44312 12.3137 6.72534C12.3137 9.3651 14.6082 10.299 14.6769 10.3221C14.6663 10.379 14.3124 11.601 13.4671 12.8462C12.7134 13.942 11.9263 15.0359 10.7288 15.0359C9.53134 15.0359 9.22317 14.3333 7.84081 14.3333C6.49366 14.3333 6.01469 15.0591 4.91935 15.0591C3.82401 15.0591 3.05978 14.0451 2.18104 12.8C1.1632 11.3378 0.34082 9.06625 0.34082 6.91034C0.34082 3.45232 2.56668 1.61835 4.75732 1.61835C5.92133 1.61835 6.89164 2.39036 7.62246 2.39036C8.31802 2.39036 9.40277 1.5721 10.7271 1.5721C11.2289 1.5721 13.0321 1.61835 14.219 3.33667ZM10.0984 0.108136C10.646 -0.548247 11.0334 -1.459 11.0334 -2.36975C11.0334 -2.49605 11.0229 -2.62412 11 -2.72729C10.1089 -2.6935 9.04883 -2.12783 8.40959 -1.37895C7.90772 -0.802617 7.43931 0.108136 7.43931 1.03134C7.43931 1.1701 7.46218 1.30883 7.47277 1.35331C7.52909 1.36398 7.62067 1.37643 7.71224 1.37643C8.51172 1.37643 9.51724 0.835672 10.0984 0.108136Z\"\n fill=\"currentColor\"\n />\n </svg>\n));\n\nApple.displayName = \"Apple\";\n\nexport const OAuthIcon = ({\n account,\n ...props\n}: React.ComponentPropsWithoutRef<\"svg\"> & { account: OAuthAccount }) => {\n switch (account) {\n case \"GithubOAuth\":\n return <GitHub {...props} />;\n case \"GoogleOAuth\":\n return <Google {...props} />;\n case \"MicrosoftOAuth\":\n return <Microsoft {...props} />;\n case \"AppleOAuth\":\n return <Apple {...props} />;\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n\nexport const getOAuthName = (account: OAuthAccount) => {\n switch (account) {\n case \"GithubOAuth\":\n return \"GitHub\";\n case \"GoogleOAuth\":\n return \"Google\";\n case \"MicrosoftOAuth\":\n return \"Microsoft\";\n case \"AppleOAuth\":\n return \"Apple\";\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n"],"mappings":"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","names":[]}
@@ -1,6 +1,8 @@
1
1
  import * as React$1 from 'react';
2
- import { OrganizationInfo } from '../api/endpoint.js';
2
+ import { ListUserOrganizationsQuery } from '../api/client-graphql/generated.js';
3
3
  import { WidgetRootDomProps } from './utils.js';
4
+ import 'graphql-request';
5
+ import '../api/endpoint.js';
4
6
  import '@tanstack/react-query';
5
7
  import '../api/widgets-api-client.js';
6
8
  import './elements.js';
@@ -33,8 +35,9 @@ interface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {
33
35
  */
34
36
  truncateBehavior?: "right" | "middle";
35
37
  }
38
+ type UserOrganization = ListUserOrganizationsQuery["organizations"][number];
36
39
  interface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {
37
- organizations: OrganizationInfo[];
40
+ organizations: UserOrganization[];
38
41
  }
39
42
  declare const OrganizationSwitcher: React.FC<OrganizationSwitcherProps>;
40
43
  interface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {
@@ -47,4 +50,4 @@ interface OrganizationSwitcherErrorProps extends WidgetRootDomProps {
47
50
  }
48
51
  declare function OrganizationSwitcherError({ error, variant, ...domProps }: OrganizationSwitcherErrorProps): React$1.JSX.Element;
49
52
 
50
- export { OrganizationSwitcher, OrganizationSwitcherError, type OrganizationSwitcherErrorProps, OrganizationSwitcherLoading, type OrganizationSwitcherLoadingProps, type OrganizationSwitcherPassthroughProps, type OrganizationSwitcherProps };
53
+ export { OrganizationSwitcher, OrganizationSwitcherError, type OrganizationSwitcherErrorProps, OrganizationSwitcherLoading, type OrganizationSwitcherLoadingProps, type OrganizationSwitcherPassthroughProps, type OrganizationSwitcherProps, type UserOrganization };
@@ -32,7 +32,7 @@ const OrganizationSwitcher = ({
32
32
  ...domProps
33
33
  }) => {
34
34
  const currentOrganization = organizations.find(
35
- (organization) => organization.current
35
+ (organization) => organization.isCurrent
36
36
  );
37
37
  const invalidateAllWidgets = useWidgetsInvalidator();
38
38
  if (!currentOrganization) {
@@ -115,7 +115,7 @@ const OrganizationSwitcher = ({
115
115
  truncateBehavior
116
116
  }
117
117
  ),
118
- organization.current && /* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
118
+ organization.isCurrent && /* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
119
119
  Translation,
120
120
  {
121
121
  defaultMessage: "(current)",
@@ -130,7 +130,7 @@ const OrganizationSwitcher = ({
130
130
  align: "center",
131
131
  justify: "center",
132
132
  flexShrink: "0",
133
- children: organization.current ? /* @__PURE__ */ jsx(CheckIcon, { width: "18px", height: "18px" }) : (
133
+ children: organization.isCurrent ? /* @__PURE__ */ jsx(CheckIcon, { width: "18px", height: "18px" }) : (
134
134
  // make the extra space for
135
135
  /* @__PURE__ */ jsx(Box, { width: "18px", height: "18px" })
136
136
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/organization-switcher.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport {\n Box,\n ChevronDownIcon,\n Flex,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport type { OrganizationInfo } from \"../api/endpoint.js\";\nimport cx from \"clsx\";\nimport {\n getDomProps,\n isPromiseLike,\n type WidgetRootDomProps,\n type WidgetRootState,\n} from \"./utils.js\";\nimport { getErrorMessage } from \"./generic-error.js\";\nimport {\n Button,\n type ButtonProps,\n Skeleton,\n DropdownMenu,\n} from \"./elements.js\";\nimport { unstable_useWidgetsInvalidator as useWidgetsInvalidator } from \"../utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ntype OrganizationSwitcherVariant = \"ghost\" | \"outline\";\n\n// Rename all uses of `org` to `organization`\ninterface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {\n switchToOrganization: ({\n organizationId,\n }: {\n organizationId: string;\n }) => void | Promise<void>;\n // Simple props to affect the overall style\n variant?: OrganizationSwitcherVariant;\n organizationLabel?: string | null;\n children?: React.ReactNode;\n /**\n * Choose where to truncate organization name in the trigger and dropdown\n * items.\n *\n * - `right`: Truncate the right side of the organization name\n * - `middle`: Truncate the middle of the organization name, trying to keep\n * words whole\n */\n truncateBehavior?: \"right\" | \"middle\";\n}\n\ninterface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {\n organizations: OrganizationInfo[];\n}\n\nconst OrganizationSwitcher: React.FC<OrganizationSwitcherProps> = ({\n organizations,\n switchToOrganization,\n variant,\n organizationLabel = \"Organizations\",\n truncateBehavior = \"right\",\n children,\n ...domProps\n}) => {\n const currentOrganization = organizations.find(\n (organization) => organization.current,\n );\n const invalidateAllWidgets = useWidgetsInvalidator();\n\n // TODO: Possible if the user has no organizations - we should figure out what\n // to do in this case\n if (!currentOrganization) {\n return null;\n }\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button\n variant=\"secondary\"\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"resolved\", {\n ...domProps,\n // TODO: Remove `OrganizationSwitcherTrigger` in the next major\n // version. This should follow conventions of all other widgets\n // using classnames in getWidgetRootDomProps.\n className: cx(domProps.className, \"OrganizationSwitcherTrigger\"),\n })}\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"2\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n minWidth=\"0\"\n >\n <TruncatedOrganizationName\n organizationName={currentOrganization.name}\n truncateBehavior={truncateBehavior}\n />\n <Flex asChild flexShrink=\"0\">\n <DropdownMenu.TriggerIcon />\n </Flex>\n </Flex>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n {organizationLabel ? (\n <DropdownMenu.Label>\n <Text>{organizationLabel}</Text>\n </DropdownMenu.Label>\n ) : null}\n {organizations.map((organization) => (\n <Flex\n key={organization.id}\n asChild\n pr=\"2\"\n maxWidth=\"280px\"\n minWidth=\"180px\"\n >\n <DropdownMenu.Item\n onClick={() => {\n if (organization.id !== currentOrganization.id) {\n const result = switchToOrganization({\n organizationId: organization.id,\n });\n if (isPromiseLike(result)) {\n result.then(invalidateAllWidgets);\n } else {\n invalidateAllWidgets();\n }\n }\n }}\n >\n <Flex\n justify=\"between\"\n align=\"center\"\n gap=\"4\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n >\n <TruncatedOrganizationName\n organizationName={organization.name}\n truncateBehavior={truncateBehavior}\n />\n {organization.current && (\n <VisuallyHidden>\n <Translation\n defaultMessage=\"(current)\"\n id=\"daFXTP\"\n description=\"Label for screen readers indicating current organization\"\n />\n </VisuallyHidden>\n )}\n <Flex\n aria-hidden\n align=\"center\"\n justify=\"center\"\n flexShrink=\"0\"\n >\n {organization.current ? (\n <CheckIcon width=\"18px\" height=\"18px\" />\n ) : (\n // make the extra space for\n <Box width=\"18px\" height=\"18px\" />\n )}\n </Flex>\n </Flex>\n </DropdownMenu.Item>\n </Flex>\n ))}\n </DropdownMenu.Group>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n\ninterface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherLoading: React.FC<\n OrganizationSwitcherLoadingProps\n> = ({ variant, ...props }: OrganizationSwitcherLoadingProps) => {\n return (\n // Always need DropdownMenu.Root to wrap children than may include\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Skeleton>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text>Loading...</Text>\n </Skeleton>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\ninterface OrganizationSwitcherErrorProps extends WidgetRootDomProps {\n error: unknown;\n variant?: OrganizationSwitcherVariant;\n}\n\nfunction OrganizationSwitcherError({\n error,\n variant,\n ...domProps\n}: OrganizationSwitcherErrorProps) {\n const translate = useTranslation();\n const { heading } = getErrorMessage(error, translate);\n\n return (\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"error\", domProps)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Text>{heading}</Text>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n}\n\nconst MAX_TRUNCATED_SUFFIX_LENGTH = 10;\nconst MIN_TRUNCATED_SUFFIX_LENGTH = 3;\n\nconst WHITE_SPACE_REGEX = /\\s/;\n\nconst getSplitPosition = (organizationName: string) => {\n if (organizationName.length <= MAX_TRUNCATED_SUFFIX_LENGTH) {\n return organizationName.length;\n }\n\n for (\n let i = organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n i < organizationName.length - MIN_TRUNCATED_SUFFIX_LENGTH;\n i++\n ) {\n if (WHITE_SPACE_REGEX.test(organizationName[i - 1])) {\n return i;\n }\n }\n\n return organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n};\n\nconst splitOrganizationName = (organizationName: string) => {\n const splitPosition = getSplitPosition(organizationName);\n return [\n organizationName.slice(0, splitPosition),\n organizationName.slice(splitPosition),\n ];\n};\n\nconst TruncatedOrganizationName = ({\n organizationName,\n truncateBehavior,\n}: {\n organizationName: string;\n truncateBehavior: \"right\" | \"middle\";\n}) => {\n if (truncateBehavior === \"right\") {\n return <Text truncate>{organizationName}</Text>;\n }\n\n const [organizationNameLeft, organizationNameRight] =\n splitOrganizationName(organizationName);\n\n return (\n <Flex overflow=\"hidden\">\n <VisuallyHidden>\n <Text>{organizationName}</Text>\n </VisuallyHidden>\n <Text aria-hidden truncate style={{ whiteSpace: \"pre\" }}>\n {organizationNameLeft}\n </Text>\n <Text aria-hidden>{organizationNameRight}</Text>\n </Flex>\n );\n};\n\nfunction mapVariantProps(variant?: OrganizationSwitcherVariant): ButtonProps {\n const variantProps: ButtonProps = {};\n // Passing `undefined` to the variant prop will result in overrides to props we\n // set internally. This should be addressed in Radix Themes, but we can\n // explicitly set it only when it's provided and _not_ undefined.\n if (variant) {\n variantProps.unsafe_radixVariant = variant;\n }\n return variantProps;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"organization-switcher\",\n widgetState: state,\n });\n}\n\nexport type {\n OrganizationSwitcherProps,\n OrganizationSwitcherLoadingProps,\n OrganizationSwitcherErrorProps,\n /** @internal */\n OrganizationSwitcherPassthroughProps,\n};\nexport {\n OrganizationSwitcher,\n OrganizationSwitcherLoading,\n OrganizationSwitcherError,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/organization-switcher.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport {\n Box,\n ChevronDownIcon,\n Flex,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport type { ListUserOrganizationsQuery } from \"../api/client-graphql/generated.js\";\nimport cx from \"clsx\";\nimport {\n getDomProps,\n isPromiseLike,\n type WidgetRootDomProps,\n type WidgetRootState,\n} from \"./utils.js\";\nimport { getErrorMessage } from \"./generic-error.js\";\nimport {\n Button,\n type ButtonProps,\n Skeleton,\n DropdownMenu,\n} from \"./elements.js\";\nimport { unstable_useWidgetsInvalidator as useWidgetsInvalidator } from \"../utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ntype OrganizationSwitcherVariant = \"ghost\" | \"outline\";\n\n// Rename all uses of `org` to `organization`\ninterface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {\n switchToOrganization: ({\n organizationId,\n }: {\n organizationId: string;\n }) => void | Promise<void>;\n // Simple props to affect the overall style\n variant?: OrganizationSwitcherVariant;\n organizationLabel?: string | null;\n children?: React.ReactNode;\n /**\n * Choose where to truncate organization name in the trigger and dropdown\n * items.\n *\n * - `right`: Truncate the right side of the organization name\n * - `middle`: Truncate the middle of the organization name, trying to keep\n * words whole\n */\n truncateBehavior?: \"right\" | \"middle\";\n}\n\nexport type UserOrganization =\n ListUserOrganizationsQuery[\"organizations\"][number];\n\ninterface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {\n organizations: UserOrganization[];\n}\n\nconst OrganizationSwitcher: React.FC<OrganizationSwitcherProps> = ({\n organizations,\n switchToOrganization,\n variant,\n organizationLabel = \"Organizations\",\n truncateBehavior = \"right\",\n children,\n ...domProps\n}) => {\n const currentOrganization = organizations.find(\n (organization) => organization.isCurrent,\n );\n const invalidateAllWidgets = useWidgetsInvalidator();\n\n // TODO: Possible if the user has no organizations - we should figure out what\n // to do in this case\n if (!currentOrganization) {\n return null;\n }\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button\n variant=\"secondary\"\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"resolved\", {\n ...domProps,\n // TODO: Remove `OrganizationSwitcherTrigger` in the next major\n // version. This should follow conventions of all other widgets\n // using classnames in getWidgetRootDomProps.\n className: cx(domProps.className, \"OrganizationSwitcherTrigger\"),\n })}\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"2\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n minWidth=\"0\"\n >\n <TruncatedOrganizationName\n organizationName={currentOrganization.name}\n truncateBehavior={truncateBehavior}\n />\n <Flex asChild flexShrink=\"0\">\n <DropdownMenu.TriggerIcon />\n </Flex>\n </Flex>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n {organizationLabel ? (\n <DropdownMenu.Label>\n <Text>{organizationLabel}</Text>\n </DropdownMenu.Label>\n ) : null}\n {organizations.map((organization) => (\n <Flex\n key={organization.id}\n asChild\n pr=\"2\"\n maxWidth=\"280px\"\n minWidth=\"180px\"\n >\n <DropdownMenu.Item\n onClick={() => {\n if (organization.id !== currentOrganization.id) {\n const result = switchToOrganization({\n organizationId: organization.id,\n });\n if (isPromiseLike(result)) {\n result.then(invalidateAllWidgets);\n } else {\n invalidateAllWidgets();\n }\n }\n }}\n >\n <Flex\n justify=\"between\"\n align=\"center\"\n gap=\"4\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n >\n <TruncatedOrganizationName\n organizationName={organization.name}\n truncateBehavior={truncateBehavior}\n />\n {organization.isCurrent && (\n <VisuallyHidden>\n <Translation\n defaultMessage=\"(current)\"\n id=\"daFXTP\"\n description=\"Label for screen readers indicating current organization\"\n />\n </VisuallyHidden>\n )}\n <Flex\n aria-hidden\n align=\"center\"\n justify=\"center\"\n flexShrink=\"0\"\n >\n {organization.isCurrent ? (\n <CheckIcon width=\"18px\" height=\"18px\" />\n ) : (\n // make the extra space for\n <Box width=\"18px\" height=\"18px\" />\n )}\n </Flex>\n </Flex>\n </DropdownMenu.Item>\n </Flex>\n ))}\n </DropdownMenu.Group>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n\ninterface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherLoading: React.FC<\n OrganizationSwitcherLoadingProps\n> = ({ variant, ...props }: OrganizationSwitcherLoadingProps) => {\n return (\n // Always need DropdownMenu.Root to wrap children than may include\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Skeleton>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text>Loading...</Text>\n </Skeleton>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\ninterface OrganizationSwitcherErrorProps extends WidgetRootDomProps {\n error: unknown;\n variant?: OrganizationSwitcherVariant;\n}\n\nfunction OrganizationSwitcherError({\n error,\n variant,\n ...domProps\n}: OrganizationSwitcherErrorProps) {\n const translate = useTranslation();\n const { heading } = getErrorMessage(error, translate);\n\n return (\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"error\", domProps)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Text>{heading}</Text>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n}\n\nconst MAX_TRUNCATED_SUFFIX_LENGTH = 10;\nconst MIN_TRUNCATED_SUFFIX_LENGTH = 3;\n\nconst WHITE_SPACE_REGEX = /\\s/;\n\nconst getSplitPosition = (organizationName: string) => {\n if (organizationName.length <= MAX_TRUNCATED_SUFFIX_LENGTH) {\n return organizationName.length;\n }\n\n for (\n let i = organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n i < organizationName.length - MIN_TRUNCATED_SUFFIX_LENGTH;\n i++\n ) {\n if (WHITE_SPACE_REGEX.test(organizationName[i - 1])) {\n return i;\n }\n }\n\n return organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n};\n\nconst splitOrganizationName = (organizationName: string) => {\n const splitPosition = getSplitPosition(organizationName);\n return [\n organizationName.slice(0, splitPosition),\n organizationName.slice(splitPosition),\n ];\n};\n\nconst TruncatedOrganizationName = ({\n organizationName,\n truncateBehavior,\n}: {\n organizationName: string;\n truncateBehavior: \"right\" | \"middle\";\n}) => {\n if (truncateBehavior === \"right\") {\n return <Text truncate>{organizationName}</Text>;\n }\n\n const [organizationNameLeft, organizationNameRight] =\n splitOrganizationName(organizationName);\n\n return (\n <Flex overflow=\"hidden\">\n <VisuallyHidden>\n <Text>{organizationName}</Text>\n </VisuallyHidden>\n <Text aria-hidden truncate style={{ whiteSpace: \"pre\" }}>\n {organizationNameLeft}\n </Text>\n <Text aria-hidden>{organizationNameRight}</Text>\n </Flex>\n );\n};\n\nfunction mapVariantProps(variant?: OrganizationSwitcherVariant): ButtonProps {\n const variantProps: ButtonProps = {};\n // Passing `undefined` to the variant prop will result in overrides to props we\n // set internally. This should be addressed in Radix Themes, but we can\n // explicitly set it only when it's provided and _not_ undefined.\n if (variant) {\n variantProps.unsafe_radixVariant = variant;\n }\n return variantProps;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"organization-switcher\",\n widgetState: state,\n });\n}\n\nexport type {\n OrganizationSwitcherProps,\n OrganizationSwitcherLoadingProps,\n OrganizationSwitcherErrorProps,\n /** @internal */\n OrganizationSwitcherPassthroughProps,\n};\nexport {\n OrganizationSwitcher,\n OrganizationSwitcherLoading,\n OrganizationSwitcherError,\n};\n"],"mappings":"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","names":[]}
@@ -1,18 +1,8 @@
1
1
  import * as React from 'react';
2
- import { CreatePassword400 } from '../api/endpoint.js';
3
- import '@tanstack/react-query';
4
- import '../api/widgets-api-client.js';
2
+ import { PasswordViolationFieldsFragment } from '../api/client-graphql/generated.js';
3
+ import 'graphql-request';
5
4
 
6
- /**
7
- * Derive the individual password validation error type from the generated
8
- * API schema. `CreatePassword400` is a union of the structured
9
- * `PasswordStrengthErrorResponse` and a generic `{ message }` shape; we
10
- * extract the structured variant and pull its `errors` element type.
11
- */
12
- type PasswordStrengthResponse = Extract<CreatePassword400, {
13
- code: string;
14
- }>;
15
- type PasswordValidationError = PasswordStrengthResponse["errors"][number];
5
+ type PasswordValidationError = PasswordViolationFieldsFragment;
16
6
  declare function getPasswordValidationErrors(error: unknown): PasswordValidationError[];
17
7
  declare function PasswordValidationErrorList({ errors, }: {
18
8
  errors: PasswordValidationError[];
@@ -1,23 +1,17 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { ApiError } from "../api/errors.js";
4
- import { isObjectLike } from "../api/utils.js";
3
+ import { PasswordPolicyViolationError } from "./client-graphql-result.js";
5
4
  import { Translation } from "./i18n/translation.js";
6
- function isPasswordStrengthContext(ctx) {
7
- return Array.isArray(ctx.errors) && ctx.errors.every(
8
- (e) => isObjectLike(e) && typeof e.code === "string" && typeof e.message === "string"
9
- );
10
- }
11
5
  function getPasswordValidationErrors(error) {
12
- if (!(error instanceof ApiError) || !isObjectLike(error.context)) return [];
13
- if (!isPasswordStrengthContext(error.context)) return [];
14
- return error.context.errors;
6
+ if (!(error instanceof PasswordPolicyViolationError)) return [];
7
+ return error.violations;
15
8
  }
16
9
  function CharacterTypeMessage({
17
- characterType
10
+ characterType,
11
+ fallback
18
12
  }) {
19
13
  switch (characterType) {
20
- case "uppercase":
14
+ case "Uppercase":
21
15
  return /* @__PURE__ */ jsx(
22
16
  Translation,
23
17
  {
@@ -26,7 +20,7 @@ function CharacterTypeMessage({
26
20
  description: "Password validation error for missing uppercase letter"
27
21
  }
28
22
  );
29
- case "lowercase":
23
+ case "Lowercase":
30
24
  return /* @__PURE__ */ jsx(
31
25
  Translation,
32
26
  {
@@ -35,7 +29,7 @@ function CharacterTypeMessage({
35
29
  description: "Password validation error for missing lowercase letter"
36
30
  }
37
31
  );
38
- case "number":
32
+ case "Number":
39
33
  return /* @__PURE__ */ jsx(
40
34
  Translation,
41
35
  {
@@ -44,7 +38,7 @@ function CharacterTypeMessage({
44
38
  description: "Password validation error for missing number"
45
39
  }
46
40
  );
47
- case "symbol":
41
+ case "Symbol":
48
42
  return /* @__PURE__ */ jsx(
49
43
  Translation,
50
44
  {
@@ -54,15 +48,7 @@ function CharacterTypeMessage({
54
48
  }
55
49
  );
56
50
  default:
57
- return /* @__PURE__ */ jsx(
58
- Translation,
59
- {
60
- defaultMessage: "Must include a {characterType} character",
61
- id: "qLtNVL",
62
- description: "Password validation error for missing character type",
63
- values: { characterType }
64
- }
65
- );
51
+ return fallback;
66
52
  }
67
53
  }
68
54
  function ValidationErrorMessage({
@@ -71,7 +57,13 @@ function ValidationErrorMessage({
71
57
  const fallback = error.message;
72
58
  switch (error.code) {
73
59
  case "password_missing_character_type":
74
- return /* @__PURE__ */ jsx(CharacterTypeMessage, { characterType: error.character_type });
60
+ return /* @__PURE__ */ jsx(
61
+ CharacterTypeMessage,
62
+ {
63
+ characterType: error.characterType,
64
+ fallback
65
+ }
66
+ );
75
67
  case "password_contains_email":
76
68
  return /* @__PURE__ */ jsx(
77
69
  Translation,
@@ -88,7 +80,7 @@ function ValidationErrorMessage({
88
80
  defaultMessage: "Password must be at least {minimumLength} characters",
89
81
  id: "g1iDVF",
90
82
  description: "Password validation error for password too short",
91
- values: { minimumLength: String(error.minimum_length) }
83
+ values: { minimumLength: String(error.minimumLength) }
92
84
  }
93
85
  );
94
86
  case "password_too_long":
@@ -98,7 +90,7 @@ function ValidationErrorMessage({
98
90
  defaultMessage: "Password must be {maximumLength} characters or fewer",
99
91
  id: "zVDvW8",
100
92
  description: "Password validation error for password too long",
101
- values: { maximumLength: String(error.maximum_length) }
93
+ values: { maximumLength: String(error.maximumLength) }
102
94
  }
103
95
  );
104
96
  case "password_pwned":
@@ -129,7 +121,6 @@ function ValidationErrorMessage({
129
121
  }
130
122
  );
131
123
  default:
132
- error;
133
124
  return fallback;
134
125
  }
135
126
  }
@@ -139,39 +130,34 @@ function PasswordValidationErrorList({
139
130
  if (errors.length === 0) return null;
140
131
  return /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: "1.25rem" }, children: errors.map((err, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(ValidationErrorMessage, { error: err }) }, i)) });
141
132
  }
142
- function characterTypeAriaText(characterType, translate) {
133
+ function characterTypeAriaText(characterType, fallback, translate) {
143
134
  switch (characterType) {
144
- case "uppercase":
135
+ case "Uppercase":
145
136
  return translate({
146
137
  defaultMessage: "Must include an uppercase letter",
147
138
  id: "s/nwpy",
148
139
  description: "Password validation error for missing uppercase letter"
149
140
  });
150
- case "lowercase":
141
+ case "Lowercase":
151
142
  return translate({
152
143
  defaultMessage: "Must include a lowercase letter",
153
144
  id: "WiFn69",
154
145
  description: "Password validation error for missing lowercase letter"
155
146
  });
156
- case "number":
147
+ case "Number":
157
148
  return translate({
158
149
  defaultMessage: "Must include a number",
159
150
  id: "z6Mu1x",
160
151
  description: "Password validation error for missing number"
161
152
  });
162
- case "symbol":
153
+ case "Symbol":
163
154
  return translate({
164
155
  defaultMessage: "Must include a special character",
165
156
  id: "veTEdD",
166
157
  description: "Password validation error for missing special character"
167
158
  });
168
159
  default:
169
- return translate({
170
- defaultMessage: "Must include a {characterType} character",
171
- id: "qLtNVL",
172
- description: "Password validation error for missing character type",
173
- values: { characterType }
174
- });
160
+ return fallback;
175
161
  }
176
162
  }
177
163
  function getPasswordValidationAriaTexts(errors, translate) {
@@ -179,7 +165,7 @@ function getPasswordValidationAriaTexts(errors, translate) {
179
165
  const fallback = err.message;
180
166
  switch (err.code) {
181
167
  case "password_missing_character_type":
182
- return characterTypeAriaText(err.character_type, translate);
168
+ return characterTypeAriaText(err.characterType, fallback, translate);
183
169
  case "password_contains_email":
184
170
  return translate({
185
171
  defaultMessage: "Password must not contain your email address",
@@ -191,14 +177,14 @@ function getPasswordValidationAriaTexts(errors, translate) {
191
177
  defaultMessage: "Password must be at least {minimumLength} characters",
192
178
  id: "g1iDVF",
193
179
  description: "Password validation error for password too short",
194
- values: { minimumLength: String(err.minimum_length) }
180
+ values: { minimumLength: String(err.minimumLength) }
195
181
  });
196
182
  case "password_too_long":
197
183
  return translate({
198
184
  defaultMessage: "Password must be {maximumLength} characters or fewer",
199
185
  id: "zVDvW8",
200
186
  description: "Password validation error for password too long",
201
- values: { maximumLength: String(err.maximum_length) }
187
+ values: { maximumLength: String(err.maximumLength) }
202
188
  });
203
189
  case "password_pwned":
204
190
  return translate({
@@ -219,7 +205,6 @@ function getPasswordValidationAriaTexts(errors, translate) {
219
205
  description: "Password validation error for weak password"
220
206
  });
221
207
  default:
222
- err;
223
208
  return fallback;
224
209
  }
225
210
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/password-error-utils.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { CreatePassword400 } from \"../api/endpoint.js\";\nimport { ApiError } from \"../api/errors.js\";\nimport { isObjectLike } from \"../api/utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\n/**\n * Derive the individual password validation error type from the generated\n * API schema. `CreatePassword400` is a union of the structured\n * `PasswordStrengthErrorResponse` and a generic `{ message }` shape; we\n * extract the structured variant and pull its `errors` element type.\n */\ntype PasswordStrengthResponse = Extract<CreatePassword400, { code: string }>;\nexport type PasswordValidationError =\n PasswordStrengthResponse[\"errors\"][number];\n\nfunction isPasswordStrengthContext(\n ctx: Record<string, unknown>,\n): ctx is { errors: PasswordValidationError[] } {\n return (\n Array.isArray(ctx.errors) &&\n ctx.errors.every(\n (e: unknown) =>\n isObjectLike(e) &&\n typeof e.code === \"string\" &&\n typeof e.message === \"string\",\n )\n );\n}\n\nexport function getPasswordValidationErrors(\n error: unknown,\n): PasswordValidationError[] {\n if (!(error instanceof ApiError) || !isObjectLike(error.context)) return [];\n if (!isPasswordStrengthContext(error.context)) return [];\n return error.context.errors;\n}\n\nfunction CharacterTypeMessage({\n characterType,\n}: {\n characterType: string;\n}): React.ReactNode {\n switch (characterType) {\n case \"uppercase\":\n return (\n <Translation\n defaultMessage=\"Must include an uppercase letter\"\n id=\"s/nwpy\"\n description=\"Password validation error for missing uppercase letter\"\n />\n );\n case \"lowercase\":\n return (\n <Translation\n defaultMessage=\"Must include a lowercase letter\"\n id=\"WiFn69\"\n description=\"Password validation error for missing lowercase letter\"\n />\n );\n case \"number\":\n return (\n <Translation\n defaultMessage=\"Must include a number\"\n id=\"z6Mu1x\"\n description=\"Password validation error for missing number\"\n />\n );\n case \"symbol\":\n return (\n <Translation\n defaultMessage=\"Must include a special character\"\n id=\"veTEdD\"\n description=\"Password validation error for missing special character\"\n />\n );\n default:\n return (\n <Translation\n defaultMessage=\"Must include a {characterType} character\"\n id=\"qLtNVL\"\n description=\"Password validation error for missing character type\"\n values={{ characterType }}\n />\n );\n }\n}\n\nfunction ValidationErrorMessage({\n error,\n}: {\n error: PasswordValidationError;\n}): React.ReactNode {\n const fallback = error.message;\n switch (error.code) {\n case \"password_missing_character_type\":\n return <CharacterTypeMessage characterType={error.character_type} />;\n case \"password_contains_email\":\n return (\n <Translation\n defaultMessage=\"Password must not contain your email address\"\n id=\"6oLR3O\"\n description=\"Password validation error for password containing email\"\n />\n );\n case \"password_too_short\":\n return (\n <Translation\n defaultMessage=\"Password must be at least {minimumLength} characters\"\n id=\"g1iDVF\"\n description=\"Password validation error for password too short\"\n values={{ minimumLength: String(error.minimum_length) }}\n />\n );\n case \"password_too_long\":\n return (\n <Translation\n defaultMessage=\"Password must be {maximumLength} characters or fewer\"\n id=\"zVDvW8\"\n description=\"Password validation error for password too long\"\n values={{ maximumLength: String(error.maximum_length) }}\n />\n );\n case \"password_pwned\":\n return (\n <Translation\n defaultMessage=\"This password has appeared in data breaches and is not safe to use\"\n id=\"7rj/IT\"\n description=\"Password validation error for breached password\"\n />\n );\n case \"password_reused\":\n return (\n <Translation\n defaultMessage=\"This password has been used before\"\n id=\"aNnw0s\"\n description=\"Password validation error for reused password\"\n />\n );\n case \"password_too_weak\":\n return (\n <Translation\n defaultMessage=\"Password is not strong enough\"\n id=\"kB/Nl7\"\n description=\"Password validation error for weak password\"\n />\n );\n default:\n error satisfies never;\n return fallback;\n }\n}\n\nexport function PasswordValidationErrorList({\n errors,\n}: {\n errors: PasswordValidationError[];\n}) {\n if (errors.length === 0) return null;\n return (\n <ul style={{ margin: 0, paddingLeft: \"1.25rem\" }}>\n {errors.map((err, i) => (\n <li key={i}>\n <ValidationErrorMessage error={err} />\n </li>\n ))}\n </ul>\n );\n}\n\ntype TranslateFn = (descriptor: {\n defaultMessage: string;\n id: string;\n description: string;\n values?: Record<string, string>;\n}) => string;\n\nfunction characterTypeAriaText(\n characterType: string,\n translate: TranslateFn,\n): string {\n switch (characterType) {\n case \"uppercase\":\n return translate({\n defaultMessage: \"Must include an uppercase letter\",\n id: \"s/nwpy\",\n description: \"Password validation error for missing uppercase letter\",\n });\n case \"lowercase\":\n return translate({\n defaultMessage: \"Must include a lowercase letter\",\n id: \"WiFn69\",\n description: \"Password validation error for missing lowercase letter\",\n });\n case \"number\":\n return translate({\n defaultMessage: \"Must include a number\",\n id: \"z6Mu1x\",\n description: \"Password validation error for missing number\",\n });\n case \"symbol\":\n return translate({\n defaultMessage: \"Must include a special character\",\n id: \"veTEdD\",\n description: \"Password validation error for missing special character\",\n });\n default:\n return translate({\n defaultMessage: \"Must include a {characterType} character\",\n id: \"qLtNVL\",\n description: \"Password validation error for missing character type\",\n values: { characterType },\n });\n }\n}\n\nexport function getPasswordValidationAriaTexts(\n errors: PasswordValidationError[],\n translate: TranslateFn,\n): string[] {\n return errors.map((err) => {\n const fallback = err.message;\n switch (err.code) {\n case \"password_missing_character_type\":\n return characterTypeAriaText(err.character_type, translate);\n case \"password_contains_email\":\n return translate({\n defaultMessage: \"Password must not contain your email address\",\n id: \"6oLR3O\",\n description:\n \"Password validation error for password containing email\",\n });\n case \"password_too_short\":\n return translate({\n defaultMessage:\n \"Password must be at least {minimumLength} characters\",\n id: \"g1iDVF\",\n description: \"Password validation error for password too short\",\n values: { minimumLength: String(err.minimum_length) },\n });\n case \"password_too_long\":\n return translate({\n defaultMessage:\n \"Password must be {maximumLength} characters or fewer\",\n id: \"zVDvW8\",\n description: \"Password validation error for password too long\",\n values: { maximumLength: String(err.maximum_length) },\n });\n case \"password_pwned\":\n return translate({\n defaultMessage:\n \"This password has appeared in data breaches and is not safe to use\",\n id: \"7rj/IT\",\n description: \"Password validation error for breached password\",\n });\n case \"password_reused\":\n return translate({\n defaultMessage: \"This password has been used before\",\n id: \"aNnw0s\",\n description: \"Password validation error for reused password\",\n });\n case \"password_too_weak\":\n return translate({\n defaultMessage: \"Password is not strong enough\",\n id: \"kB/Nl7\",\n description: \"Password validation error for weak password\",\n });\n default:\n err satisfies never;\n return fallback;\n }\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/password-error-utils.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type {\n PasswordCharacterType,\n PasswordViolationFieldsFragment,\n} from \"../api/client-graphql/generated.js\";\nimport { PasswordPolicyViolationError } from \"./client-graphql-result.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\nexport type PasswordValidationError = PasswordViolationFieldsFragment;\n\nexport function getPasswordValidationErrors(\n error: unknown,\n): PasswordValidationError[] {\n if (!(error instanceof PasswordPolicyViolationError)) return [];\n return error.violations;\n}\n\nfunction CharacterTypeMessage({\n characterType,\n fallback,\n}: {\n characterType: PasswordCharacterType | null | undefined;\n fallback: string;\n}): React.ReactNode {\n switch (characterType) {\n case \"Uppercase\":\n return (\n <Translation\n defaultMessage=\"Must include an uppercase letter\"\n id=\"s/nwpy\"\n description=\"Password validation error for missing uppercase letter\"\n />\n );\n case \"Lowercase\":\n return (\n <Translation\n defaultMessage=\"Must include a lowercase letter\"\n id=\"WiFn69\"\n description=\"Password validation error for missing lowercase letter\"\n />\n );\n case \"Number\":\n return (\n <Translation\n defaultMessage=\"Must include a number\"\n id=\"z6Mu1x\"\n description=\"Password validation error for missing number\"\n />\n );\n case \"Symbol\":\n return (\n <Translation\n defaultMessage=\"Must include a special character\"\n id=\"veTEdD\"\n description=\"Password validation error for missing special character\"\n />\n );\n default:\n return fallback;\n }\n}\n\nfunction ValidationErrorMessage({\n error,\n}: {\n error: PasswordValidationError;\n}): React.ReactNode {\n const fallback = error.message;\n switch (error.code) {\n case \"password_missing_character_type\":\n return (\n <CharacterTypeMessage\n characterType={error.characterType}\n fallback={fallback}\n />\n );\n case \"password_contains_email\":\n return (\n <Translation\n defaultMessage=\"Password must not contain your email address\"\n id=\"6oLR3O\"\n description=\"Password validation error for password containing email\"\n />\n );\n case \"password_too_short\":\n return (\n <Translation\n defaultMessage=\"Password must be at least {minimumLength} characters\"\n id=\"g1iDVF\"\n description=\"Password validation error for password too short\"\n values={{ minimumLength: String(error.minimumLength) }}\n />\n );\n case \"password_too_long\":\n return (\n <Translation\n defaultMessage=\"Password must be {maximumLength} characters or fewer\"\n id=\"zVDvW8\"\n description=\"Password validation error for password too long\"\n values={{ maximumLength: String(error.maximumLength) }}\n />\n );\n case \"password_pwned\":\n return (\n <Translation\n defaultMessage=\"This password has appeared in data breaches and is not safe to use\"\n id=\"7rj/IT\"\n description=\"Password validation error for breached password\"\n />\n );\n case \"password_reused\":\n return (\n <Translation\n defaultMessage=\"This password has been used before\"\n id=\"aNnw0s\"\n description=\"Password validation error for reused password\"\n />\n );\n case \"password_too_weak\":\n return (\n <Translation\n defaultMessage=\"Password is not strong enough\"\n id=\"kB/Nl7\"\n description=\"Password validation error for weak password\"\n />\n );\n default:\n return fallback;\n }\n}\n\nexport function PasswordValidationErrorList({\n errors,\n}: {\n errors: PasswordValidationError[];\n}) {\n if (errors.length === 0) return null;\n return (\n <ul style={{ margin: 0, paddingLeft: \"1.25rem\" }}>\n {errors.map((err, i) => (\n <li key={i}>\n <ValidationErrorMessage error={err} />\n </li>\n ))}\n </ul>\n );\n}\n\ntype TranslateFn = (descriptor: {\n defaultMessage: string;\n id: string;\n description: string;\n values?: Record<string, string>;\n}) => string;\n\nfunction characterTypeAriaText(\n characterType: PasswordCharacterType | null | undefined,\n fallback: string,\n translate: TranslateFn,\n): string {\n switch (characterType) {\n case \"Uppercase\":\n return translate({\n defaultMessage: \"Must include an uppercase letter\",\n id: \"s/nwpy\",\n description: \"Password validation error for missing uppercase letter\",\n });\n case \"Lowercase\":\n return translate({\n defaultMessage: \"Must include a lowercase letter\",\n id: \"WiFn69\",\n description: \"Password validation error for missing lowercase letter\",\n });\n case \"Number\":\n return translate({\n defaultMessage: \"Must include a number\",\n id: \"z6Mu1x\",\n description: \"Password validation error for missing number\",\n });\n case \"Symbol\":\n return translate({\n defaultMessage: \"Must include a special character\",\n id: \"veTEdD\",\n description: \"Password validation error for missing special character\",\n });\n default:\n return fallback;\n }\n}\n\nexport function getPasswordValidationAriaTexts(\n errors: PasswordValidationError[],\n translate: TranslateFn,\n): string[] {\n return errors.map((err) => {\n const fallback = err.message;\n switch (err.code) {\n case \"password_missing_character_type\":\n return characterTypeAriaText(err.characterType, fallback, translate);\n case \"password_contains_email\":\n return translate({\n defaultMessage: \"Password must not contain your email address\",\n id: \"6oLR3O\",\n description:\n \"Password validation error for password containing email\",\n });\n case \"password_too_short\":\n return translate({\n defaultMessage:\n \"Password must be at least {minimumLength} characters\",\n id: \"g1iDVF\",\n description: \"Password validation error for password too short\",\n values: { minimumLength: String(err.minimumLength) },\n });\n case \"password_too_long\":\n return translate({\n defaultMessage:\n \"Password must be {maximumLength} characters or fewer\",\n id: \"zVDvW8\",\n description: \"Password validation error for password too long\",\n values: { maximumLength: String(err.maximumLength) },\n });\n case \"password_pwned\":\n return translate({\n defaultMessage:\n \"This password has appeared in data breaches and is not safe to use\",\n id: \"7rj/IT\",\n description: \"Password validation error for breached password\",\n });\n case \"password_reused\":\n return translate({\n defaultMessage: \"This password has been used before\",\n id: \"aNnw0s\",\n description: \"Password validation error for reused password\",\n });\n case \"password_too_weak\":\n return translate({\n defaultMessage: \"Password is not strong enough\",\n id: \"kB/Nl7\",\n description: \"Password validation error for weak password\",\n });\n default:\n return fallback;\n }\n });\n}\n"],"mappings":"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","names":[]}
@@ -20,7 +20,7 @@ import '@radix-ui/themes/components/select';
20
20
  * by React Query, so calling it from multiple components doesn't trigger extra
21
21
  * fetches. Surfaces errors so the caller can render an error state rather than
22
22
  * a misleadingly empty list: a denied permission (`usePermissions` throws
23
- * `IncorrectPermissionsError`) and a failed `/configurations` fetch both flow
23
+ * `IncorrectPermissionsError`) and a failed configurations fetch both flow
24
24
  * through `error`.
25
25
  */
26
26
  declare function useManageableIntegrations(): {