@workos-inc/widgets 1.0.0 → 1.1.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 (397) hide show
  1. package/README.md +68 -1
  2. package/dist/cjs/card-list.d.ts +6 -0
  3. package/dist/cjs/card-list.d.ts.map +1 -0
  4. package/dist/cjs/card-list.js +13 -0
  5. package/dist/cjs/card-list.js.map +1 -0
  6. package/dist/cjs/index.d.ts +3 -0
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js +7 -1
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/lib/add-mfa-dialog.d.ts +9 -0
  11. package/dist/cjs/lib/add-mfa-dialog.d.ts.map +1 -0
  12. package/dist/cjs/lib/add-mfa-dialog.js +135 -0
  13. package/dist/cjs/lib/add-mfa-dialog.js.map +1 -0
  14. package/dist/cjs/lib/api/user.d.ts +13 -57
  15. package/dist/cjs/lib/api/user.d.ts.map +1 -1
  16. package/dist/cjs/lib/api/user.js +44 -314
  17. package/dist/cjs/lib/api/user.js.map +1 -1
  18. package/dist/cjs/lib/change-password-dialog.d.ts +8 -0
  19. package/dist/cjs/lib/change-password-dialog.d.ts.map +1 -0
  20. package/dist/cjs/lib/change-password-dialog.js +97 -0
  21. package/dist/cjs/lib/change-password-dialog.js.map +1 -0
  22. package/dist/cjs/lib/copy-button.d.ts +8 -0
  23. package/dist/cjs/lib/copy-button.d.ts.map +1 -0
  24. package/dist/cjs/lib/copy-button.js +63 -0
  25. package/dist/cjs/lib/copy-button.js.map +1 -0
  26. package/dist/cjs/lib/delete-user-dialog.d.ts +2 -2
  27. package/dist/cjs/lib/delete-user-dialog.d.ts.map +1 -1
  28. package/dist/cjs/lib/delete-user-dialog.js +1 -1
  29. package/dist/cjs/lib/delete-user-dialog.js.map +1 -1
  30. package/dist/cjs/lib/edit-user-profile-dialog.d.ts +10 -0
  31. package/dist/cjs/lib/edit-user-profile-dialog.d.ts.map +1 -0
  32. package/dist/cjs/lib/edit-user-profile-dialog.js +85 -0
  33. package/dist/cjs/lib/edit-user-profile-dialog.js.map +1 -0
  34. package/dist/cjs/lib/edit-user-role-dialog.d.ts +12 -0
  35. package/dist/cjs/lib/edit-user-role-dialog.d.ts.map +1 -0
  36. package/dist/cjs/lib/{edit-user-details-dialog.js → edit-user-role-dialog.js} +11 -7
  37. package/dist/cjs/lib/edit-user-role-dialog.js.map +1 -0
  38. package/dist/cjs/lib/elements.d.ts +1 -0
  39. package/dist/cjs/lib/elements.d.ts.map +1 -1
  40. package/dist/cjs/lib/elements.js +10 -4
  41. package/dist/cjs/lib/elements.js.map +1 -1
  42. package/dist/cjs/lib/elevated-access.d.ts +8 -0
  43. package/dist/cjs/lib/elevated-access.d.ts.map +1 -0
  44. package/dist/cjs/lib/elevated-access.js +130 -0
  45. package/dist/cjs/lib/elevated-access.js.map +1 -0
  46. package/dist/cjs/lib/generic-error.d.ts +4 -0
  47. package/dist/cjs/lib/generic-error.d.ts.map +1 -0
  48. package/dist/cjs/lib/generic-error.js +57 -0
  49. package/dist/cjs/lib/generic-error.js.map +1 -0
  50. package/dist/cjs/lib/icon-panel.d.ts +3 -0
  51. package/dist/cjs/lib/icon-panel.d.ts.map +1 -0
  52. package/dist/cjs/lib/icon-panel.js +16 -0
  53. package/dist/cjs/lib/icon-panel.js.map +1 -0
  54. package/dist/cjs/lib/icons.d.ts +3 -0
  55. package/dist/cjs/lib/icons.d.ts.map +1 -0
  56. package/dist/cjs/lib/icons.js +8 -0
  57. package/dist/cjs/lib/icons.js.map +1 -0
  58. package/dist/cjs/lib/invite-user-dialog.d.ts.map +1 -1
  59. package/dist/cjs/lib/invite-user-dialog.js +7 -5
  60. package/dist/cjs/lib/invite-user-dialog.js.map +1 -1
  61. package/dist/cjs/lib/logout-all-sessions-dialog.d.ts +9 -0
  62. package/dist/cjs/lib/logout-all-sessions-dialog.d.ts.map +1 -0
  63. package/dist/cjs/lib/logout-all-sessions-dialog.js +52 -0
  64. package/dist/cjs/lib/logout-all-sessions-dialog.js.map +1 -0
  65. package/dist/cjs/lib/logout-dialog.d.ts +10 -0
  66. package/dist/cjs/lib/logout-dialog.d.ts.map +1 -0
  67. package/dist/cjs/lib/logout-dialog.js +58 -0
  68. package/dist/cjs/lib/logout-dialog.js.map +1 -0
  69. package/dist/cjs/lib/marker.d.ts +14 -0
  70. package/dist/cjs/lib/marker.d.ts.map +1 -0
  71. package/dist/cjs/lib/marker.js +38 -0
  72. package/dist/cjs/lib/marker.js.map +1 -0
  73. package/dist/cjs/lib/oauth-icons.d.ts +4 -0
  74. package/dist/cjs/lib/oauth-icons.d.ts.map +1 -0
  75. package/dist/cjs/lib/oauth-icons.js +67 -0
  76. package/dist/cjs/lib/oauth-icons.js.map +1 -0
  77. package/dist/cjs/lib/organization-switcher.d.ts +24 -0
  78. package/dist/cjs/lib/organization-switcher.d.ts.map +1 -0
  79. package/dist/cjs/lib/organization-switcher.js +35 -0
  80. package/dist/cjs/lib/organization-switcher.js.map +1 -0
  81. package/dist/cjs/lib/otp-input.d.ts +20 -0
  82. package/dist/cjs/lib/otp-input.d.ts.map +1 -0
  83. package/dist/cjs/lib/otp-input.js +174 -0
  84. package/dist/cjs/lib/otp-input.js.map +1 -0
  85. package/dist/cjs/lib/resend-invite-dialog.d.ts +2 -2
  86. package/dist/cjs/lib/resend-invite-dialog.d.ts.map +1 -1
  87. package/dist/cjs/lib/resend-invite-dialog.js +1 -1
  88. package/dist/cjs/lib/resend-invite-dialog.js.map +1 -1
  89. package/dist/cjs/lib/reset-mfa-dialog.d.ts +9 -0
  90. package/dist/cjs/lib/reset-mfa-dialog.d.ts.map +1 -0
  91. package/dist/cjs/lib/reset-mfa-dialog.js +60 -0
  92. package/dist/cjs/lib/reset-mfa-dialog.js.map +1 -0
  93. package/dist/cjs/lib/revoke-invite-dialog.d.ts +2 -2
  94. package/dist/cjs/lib/revoke-invite-dialog.d.ts.map +1 -1
  95. package/dist/cjs/lib/revoke-invite-dialog.js +1 -1
  96. package/dist/cjs/lib/revoke-invite-dialog.js.map +1 -1
  97. package/dist/cjs/lib/save-button.d.ts +11 -0
  98. package/dist/cjs/lib/save-button.d.ts.map +1 -0
  99. package/dist/cjs/lib/save-button.js +47 -0
  100. package/dist/cjs/lib/save-button.js.map +1 -0
  101. package/dist/cjs/lib/set-password-dialog.d.ts +8 -0
  102. package/dist/cjs/lib/set-password-dialog.d.ts.map +1 -0
  103. package/dist/cjs/lib/set-password-dialog.js +80 -0
  104. package/dist/cjs/lib/set-password-dialog.js.map +1 -0
  105. package/dist/cjs/lib/use-dialog-close.d.ts +2 -0
  106. package/dist/cjs/lib/use-dialog-close.d.ts.map +1 -0
  107. package/dist/cjs/lib/use-dialog-close.js +43 -0
  108. package/dist/cjs/lib/use-dialog-close.js.map +1 -0
  109. package/dist/cjs/lib/use-security-settings.d.ts +11 -0
  110. package/dist/cjs/lib/use-security-settings.d.ts.map +1 -0
  111. package/dist/cjs/lib/use-security-settings.js +39 -0
  112. package/dist/cjs/lib/use-security-settings.js.map +1 -0
  113. package/dist/cjs/lib/user-actions-dropdown.d.ts +2 -2
  114. package/dist/cjs/lib/user-actions-dropdown.d.ts.map +1 -1
  115. package/dist/cjs/lib/user-actions-dropdown.js +8 -4
  116. package/dist/cjs/lib/user-actions-dropdown.js.map +1 -1
  117. package/dist/cjs/lib/user-profile.d.ts +11 -0
  118. package/dist/cjs/lib/user-profile.d.ts.map +1 -0
  119. package/dist/cjs/lib/user-profile.js +36 -0
  120. package/dist/cjs/lib/user-profile.js.map +1 -0
  121. package/dist/cjs/lib/user-security.d.ts +11 -0
  122. package/dist/cjs/lib/user-security.d.ts.map +1 -0
  123. package/dist/cjs/lib/user-security.js +64 -0
  124. package/dist/cjs/lib/user-security.js.map +1 -0
  125. package/dist/cjs/lib/user-sessions.d.ts +12 -0
  126. package/dist/cjs/lib/user-sessions.d.ts.map +1 -0
  127. package/dist/cjs/lib/user-sessions.js +72 -0
  128. package/dist/cjs/lib/user-sessions.js.map +1 -0
  129. package/dist/cjs/lib/users-filter.d.ts +2 -2
  130. package/dist/cjs/lib/users-filter.d.ts.map +1 -1
  131. package/dist/cjs/lib/users-filter.js.map +1 -1
  132. package/dist/cjs/lib/users-management-context.d.ts +0 -9
  133. package/dist/cjs/lib/users-management-context.d.ts.map +1 -1
  134. package/dist/cjs/lib/users-management-context.js +13 -26
  135. package/dist/cjs/lib/users-management-context.js.map +1 -1
  136. package/dist/cjs/lib/users-management-state.d.ts +3 -3
  137. package/dist/cjs/lib/users-management-state.d.ts.map +1 -1
  138. package/dist/cjs/lib/users-management-state.js.map +1 -1
  139. package/dist/cjs/lib/users-management.d.ts +3 -4
  140. package/dist/cjs/lib/users-management.d.ts.map +1 -1
  141. package/dist/cjs/lib/users-management.js +8 -26
  142. package/dist/cjs/lib/users-management.js.map +1 -1
  143. package/dist/cjs/lib/utils.d.ts +10 -2
  144. package/dist/cjs/lib/utils.d.ts.map +1 -1
  145. package/dist/cjs/lib/utils.js +18 -0
  146. package/dist/cjs/lib/utils.js.map +1 -1
  147. package/dist/cjs/organization-switcher.client.d.ts +8 -0
  148. package/dist/cjs/organization-switcher.client.d.ts.map +1 -0
  149. package/dist/cjs/organization-switcher.client.js +37 -0
  150. package/dist/cjs/organization-switcher.client.js.map +1 -0
  151. package/dist/cjs/user-profile.client.d.ts +7 -0
  152. package/dist/cjs/user-profile.client.d.ts.map +1 -0
  153. package/dist/cjs/user-profile.client.js +31 -0
  154. package/dist/cjs/user-profile.client.js.map +1 -0
  155. package/dist/cjs/user-security.client.d.ts +7 -0
  156. package/dist/cjs/user-security.client.d.ts.map +1 -0
  157. package/dist/cjs/user-security.client.js +27 -0
  158. package/dist/cjs/user-security.client.js.map +1 -0
  159. package/dist/cjs/user-sessions.client.d.ts +12 -0
  160. package/dist/cjs/user-sessions.client.d.ts.map +1 -0
  161. package/dist/cjs/user-sessions.client.js +48 -0
  162. package/dist/cjs/user-sessions.client.js.map +1 -0
  163. package/dist/cjs/users-management.client.d.ts +2 -1
  164. package/dist/cjs/users-management.client.d.ts.map +1 -1
  165. package/dist/cjs/users-management.client.js +12 -43
  166. package/dist/cjs/users-management.client.js.map +1 -1
  167. package/dist/esm/card-list.d.ts +6 -0
  168. package/dist/esm/card-list.d.ts.map +1 -0
  169. package/dist/esm/card-list.js +9 -0
  170. package/dist/esm/card-list.js.map +1 -0
  171. package/dist/esm/index.d.ts +3 -0
  172. package/dist/esm/index.d.ts.map +1 -1
  173. package/dist/esm/index.js +3 -0
  174. package/dist/esm/index.js.map +1 -1
  175. package/dist/esm/lib/add-mfa-dialog.d.ts +9 -0
  176. package/dist/esm/lib/add-mfa-dialog.d.ts.map +1 -0
  177. package/dist/esm/lib/add-mfa-dialog.js +109 -0
  178. package/dist/esm/lib/add-mfa-dialog.js.map +1 -0
  179. package/dist/esm/lib/api/user.d.ts +13 -57
  180. package/dist/esm/lib/api/user.d.ts.map +1 -1
  181. package/dist/esm/lib/api/user.js +44 -313
  182. package/dist/esm/lib/api/user.js.map +1 -1
  183. package/dist/esm/lib/change-password-dialog.d.ts +8 -0
  184. package/dist/esm/lib/change-password-dialog.d.ts.map +1 -0
  185. package/dist/esm/lib/change-password-dialog.js +71 -0
  186. package/dist/esm/lib/change-password-dialog.js.map +1 -0
  187. package/dist/esm/lib/copy-button.d.ts +8 -0
  188. package/dist/esm/lib/copy-button.d.ts.map +1 -0
  189. package/dist/esm/lib/copy-button.js +37 -0
  190. package/dist/esm/lib/copy-button.js.map +1 -0
  191. package/dist/esm/lib/delete-user-dialog.d.ts +2 -2
  192. package/dist/esm/lib/delete-user-dialog.d.ts.map +1 -1
  193. package/dist/esm/lib/delete-user-dialog.js +1 -1
  194. package/dist/esm/lib/delete-user-dialog.js.map +1 -1
  195. package/dist/esm/lib/edit-user-profile-dialog.d.ts +10 -0
  196. package/dist/esm/lib/edit-user-profile-dialog.d.ts.map +1 -0
  197. package/dist/esm/lib/edit-user-profile-dialog.js +59 -0
  198. package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -0
  199. package/dist/esm/lib/edit-user-role-dialog.d.ts +12 -0
  200. package/dist/esm/lib/edit-user-role-dialog.d.ts.map +1 -0
  201. package/dist/esm/lib/{edit-user-details-dialog.js → edit-user-role-dialog.js} +10 -6
  202. package/dist/esm/lib/edit-user-role-dialog.js.map +1 -0
  203. package/dist/esm/lib/elements.d.ts +1 -0
  204. package/dist/esm/lib/elements.d.ts.map +1 -1
  205. package/dist/esm/lib/elements.js +9 -3
  206. package/dist/esm/lib/elements.js.map +1 -1
  207. package/dist/esm/lib/elevated-access.d.ts +8 -0
  208. package/dist/esm/lib/elevated-access.d.ts.map +1 -0
  209. package/dist/esm/lib/elevated-access.js +104 -0
  210. package/dist/esm/lib/elevated-access.js.map +1 -0
  211. package/dist/esm/lib/generic-error.d.ts +4 -0
  212. package/dist/esm/lib/generic-error.d.ts.map +1 -0
  213. package/dist/esm/lib/generic-error.js +31 -0
  214. package/dist/esm/lib/generic-error.js.map +1 -0
  215. package/dist/esm/lib/icon-panel.d.ts +3 -0
  216. package/dist/esm/lib/icon-panel.d.ts.map +1 -0
  217. package/dist/esm/lib/icon-panel.js +13 -0
  218. package/dist/esm/lib/icon-panel.js.map +1 -0
  219. package/dist/esm/lib/icons.d.ts +3 -0
  220. package/dist/esm/lib/icons.d.ts.map +1 -0
  221. package/dist/esm/lib/icons.js +5 -0
  222. package/dist/esm/lib/icons.js.map +1 -0
  223. package/dist/esm/lib/invite-user-dialog.d.ts.map +1 -1
  224. package/dist/esm/lib/invite-user-dialog.js +7 -5
  225. package/dist/esm/lib/invite-user-dialog.js.map +1 -1
  226. package/dist/esm/lib/logout-all-sessions-dialog.d.ts +9 -0
  227. package/dist/esm/lib/logout-all-sessions-dialog.d.ts.map +1 -0
  228. package/dist/esm/lib/logout-all-sessions-dialog.js +26 -0
  229. package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -0
  230. package/dist/esm/lib/logout-dialog.d.ts +10 -0
  231. package/dist/esm/lib/logout-dialog.d.ts.map +1 -0
  232. package/dist/esm/lib/logout-dialog.js +32 -0
  233. package/dist/esm/lib/logout-dialog.js.map +1 -0
  234. package/dist/esm/lib/marker.d.ts +14 -0
  235. package/dist/esm/lib/marker.d.ts.map +1 -0
  236. package/dist/esm/lib/marker.js +9 -0
  237. package/dist/esm/lib/marker.js.map +1 -0
  238. package/dist/esm/lib/oauth-icons.d.ts +4 -0
  239. package/dist/esm/lib/oauth-icons.d.ts.map +1 -0
  240. package/dist/esm/lib/oauth-icons.js +39 -0
  241. package/dist/esm/lib/oauth-icons.js.map +1 -0
  242. package/dist/esm/lib/organization-switcher.d.ts +24 -0
  243. package/dist/esm/lib/organization-switcher.d.ts.map +1 -0
  244. package/dist/esm/lib/organization-switcher.js +29 -0
  245. package/dist/esm/lib/organization-switcher.js.map +1 -0
  246. package/dist/esm/lib/otp-input.d.ts +20 -0
  247. package/dist/esm/lib/otp-input.d.ts.map +1 -0
  248. package/dist/esm/lib/otp-input.js +148 -0
  249. package/dist/esm/lib/otp-input.js.map +1 -0
  250. package/dist/esm/lib/resend-invite-dialog.d.ts +2 -2
  251. package/dist/esm/lib/resend-invite-dialog.d.ts.map +1 -1
  252. package/dist/esm/lib/resend-invite-dialog.js +1 -1
  253. package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
  254. package/dist/esm/lib/reset-mfa-dialog.d.ts +9 -0
  255. package/dist/esm/lib/reset-mfa-dialog.d.ts.map +1 -0
  256. package/dist/esm/lib/reset-mfa-dialog.js +34 -0
  257. package/dist/esm/lib/reset-mfa-dialog.js.map +1 -0
  258. package/dist/esm/lib/revoke-invite-dialog.d.ts +2 -2
  259. package/dist/esm/lib/revoke-invite-dialog.d.ts.map +1 -1
  260. package/dist/esm/lib/revoke-invite-dialog.js +1 -1
  261. package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
  262. package/dist/esm/lib/save-button.d.ts +11 -0
  263. package/dist/esm/lib/save-button.d.ts.map +1 -0
  264. package/dist/esm/lib/save-button.js +44 -0
  265. package/dist/esm/lib/save-button.js.map +1 -0
  266. package/dist/esm/lib/set-password-dialog.d.ts +8 -0
  267. package/dist/esm/lib/set-password-dialog.d.ts.map +1 -0
  268. package/dist/esm/lib/set-password-dialog.js +54 -0
  269. package/dist/esm/lib/set-password-dialog.js.map +1 -0
  270. package/dist/esm/lib/use-dialog-close.d.ts +2 -0
  271. package/dist/esm/lib/use-dialog-close.d.ts.map +1 -0
  272. package/dist/esm/lib/use-dialog-close.js +17 -0
  273. package/dist/esm/lib/use-dialog-close.js.map +1 -0
  274. package/dist/esm/lib/use-security-settings.d.ts +11 -0
  275. package/dist/esm/lib/use-security-settings.d.ts.map +1 -0
  276. package/dist/esm/lib/use-security-settings.js +36 -0
  277. package/dist/esm/lib/use-security-settings.js.map +1 -0
  278. package/dist/esm/lib/user-actions-dropdown.d.ts +2 -2
  279. package/dist/esm/lib/user-actions-dropdown.d.ts.map +1 -1
  280. package/dist/esm/lib/user-actions-dropdown.js +8 -4
  281. package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
  282. package/dist/esm/lib/user-profile.d.ts +11 -0
  283. package/dist/esm/lib/user-profile.d.ts.map +1 -0
  284. package/dist/esm/lib/user-profile.js +27 -0
  285. package/dist/esm/lib/user-profile.js.map +1 -0
  286. package/dist/esm/lib/user-security.d.ts +11 -0
  287. package/dist/esm/lib/user-security.d.ts.map +1 -0
  288. package/dist/esm/lib/user-security.js +32 -0
  289. package/dist/esm/lib/user-security.js.map +1 -0
  290. package/dist/esm/lib/user-sessions.d.ts +12 -0
  291. package/dist/esm/lib/user-sessions.d.ts.map +1 -0
  292. package/dist/esm/lib/user-sessions.js +40 -0
  293. package/dist/esm/lib/user-sessions.js.map +1 -0
  294. package/dist/esm/lib/users-filter.d.ts +2 -2
  295. package/dist/esm/lib/users-filter.d.ts.map +1 -1
  296. package/dist/esm/lib/users-filter.js.map +1 -1
  297. package/dist/esm/lib/users-management-context.d.ts +0 -9
  298. package/dist/esm/lib/users-management-context.d.ts.map +1 -1
  299. package/dist/esm/lib/users-management-context.js +13 -25
  300. package/dist/esm/lib/users-management-context.js.map +1 -1
  301. package/dist/esm/lib/users-management-state.d.ts +3 -3
  302. package/dist/esm/lib/users-management-state.d.ts.map +1 -1
  303. package/dist/esm/lib/users-management-state.js.map +1 -1
  304. package/dist/esm/lib/users-management.d.ts +3 -4
  305. package/dist/esm/lib/users-management.d.ts.map +1 -1
  306. package/dist/esm/lib/users-management.js +9 -27
  307. package/dist/esm/lib/users-management.js.map +1 -1
  308. package/dist/esm/lib/users-search.d.ts +1 -1
  309. package/dist/esm/lib/users-search.d.ts.map +1 -1
  310. package/dist/esm/lib/utils.d.ts +10 -2
  311. package/dist/esm/lib/utils.d.ts.map +1 -1
  312. package/dist/esm/lib/utils.js +16 -0
  313. package/dist/esm/lib/utils.js.map +1 -1
  314. package/dist/esm/organization-switcher.client.d.ts +8 -0
  315. package/dist/esm/organization-switcher.client.d.ts.map +1 -0
  316. package/dist/esm/organization-switcher.client.js +33 -0
  317. package/dist/esm/organization-switcher.client.js.map +1 -0
  318. package/dist/esm/user-profile.client.d.ts +7 -0
  319. package/dist/esm/user-profile.client.d.ts.map +1 -0
  320. package/dist/esm/user-profile.client.js +27 -0
  321. package/dist/esm/user-profile.client.js.map +1 -0
  322. package/dist/esm/user-security.client.d.ts +7 -0
  323. package/dist/esm/user-security.client.d.ts.map +1 -0
  324. package/dist/esm/user-security.client.js +23 -0
  325. package/dist/esm/user-security.client.js.map +1 -0
  326. package/dist/esm/user-sessions.client.d.ts +12 -0
  327. package/dist/esm/user-sessions.client.d.ts.map +1 -0
  328. package/dist/esm/user-sessions.client.js +44 -0
  329. package/dist/esm/user-sessions.client.js.map +1 -0
  330. package/dist/esm/users-management.client.d.ts +2 -1
  331. package/dist/esm/users-management.client.d.ts.map +1 -1
  332. package/dist/esm/users-management.client.js +12 -20
  333. package/dist/esm/users-management.client.js.map +1 -1
  334. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  335. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  336. package/package.json +10 -4
  337. package/src/card-list.tsx +26 -0
  338. package/src/index.ts +3 -0
  339. package/src/lib/add-mfa-dialog.tsx +379 -0
  340. package/src/lib/api/user.ts +54 -458
  341. package/src/lib/card-list.css +3 -0
  342. package/src/lib/change-password-dialog.tsx +290 -0
  343. package/src/lib/copy-button.tsx +53 -0
  344. package/src/lib/delete-user-dialog.tsx +9 -6
  345. package/src/lib/edit-user-profile-dialog.tsx +181 -0
  346. package/src/lib/{edit-user-details-dialog.tsx → edit-user-role-dialog.tsx} +12 -9
  347. package/src/lib/elements.tsx +34 -1
  348. package/src/lib/elevated-access.tsx +261 -0
  349. package/src/lib/generic-error.tsx +70 -0
  350. package/src/lib/icon-panel.tsx +26 -0
  351. package/src/lib/icons.tsx +21 -0
  352. package/src/lib/invite-user-dialog.tsx +15 -10
  353. package/src/lib/logout-all-sessions-dialog.tsx +82 -0
  354. package/src/lib/logout-dialog.tsx +89 -0
  355. package/src/lib/marker.css +81 -0
  356. package/src/lib/marker.tsx +39 -0
  357. package/src/lib/oauth-icons.tsx +138 -0
  358. package/src/lib/organization-switcher.tsx +160 -0
  359. package/src/lib/otp-input.tsx +276 -0
  360. package/src/lib/resend-invite-dialog.tsx +9 -6
  361. package/src/lib/reset-mfa-dialog.tsx +104 -0
  362. package/src/lib/revoke-invite-dialog.tsx +9 -6
  363. package/src/lib/save-button.css +60 -0
  364. package/src/lib/save-button.tsx +113 -0
  365. package/src/lib/set-password-dialog.tsx +204 -0
  366. package/src/lib/use-dialog-close.tsx +19 -0
  367. package/src/lib/use-security-settings.tsx +49 -0
  368. package/src/lib/user-actions-dropdown.tsx +10 -6
  369. package/src/lib/user-profile.tsx +247 -0
  370. package/src/lib/user-security.tsx +187 -0
  371. package/src/lib/user-sessions.tsx +204 -0
  372. package/src/lib/users-filter.tsx +2 -2
  373. package/src/lib/users-management-context.tsx +21 -36
  374. package/src/lib/users-management-state.ts +3 -3
  375. package/src/lib/users-management.tsx +21 -77
  376. package/src/lib/utils.ts +30 -2
  377. package/src/organization-switcher.client.tsx +77 -0
  378. package/src/styles.css +44 -0
  379. package/src/user-profile.client.tsx +51 -0
  380. package/src/user-security.client.tsx +55 -0
  381. package/src/user-sessions.client.tsx +96 -0
  382. package/src/users-management.client.tsx +28 -39
  383. package/dist/cjs/lib/api/role.d.ts +0 -9
  384. package/dist/cjs/lib/api/role.d.ts.map +0 -1
  385. package/dist/cjs/lib/api/role.js +0 -115
  386. package/dist/cjs/lib/api/role.js.map +0 -1
  387. package/dist/cjs/lib/edit-user-details-dialog.d.ts +0 -12
  388. package/dist/cjs/lib/edit-user-details-dialog.d.ts.map +0 -1
  389. package/dist/cjs/lib/edit-user-details-dialog.js.map +0 -1
  390. package/dist/esm/lib/api/role.d.ts +0 -9
  391. package/dist/esm/lib/api/role.d.ts.map +0 -1
  392. package/dist/esm/lib/api/role.js +0 -110
  393. package/dist/esm/lib/api/role.js.map +0 -1
  394. package/dist/esm/lib/edit-user-details-dialog.d.ts +0 -12
  395. package/dist/esm/lib/edit-user-details-dialog.d.ts.map +0 -1
  396. package/dist/esm/lib/edit-user-details-dialog.js.map +0 -1
  397. package/src/lib/api/role.ts +0 -147
@@ -1,502 +1,98 @@
1
1
  import {
2
- keepPreviousData,
3
- useMutation,
4
- useQuery,
5
- useQueryClient,
6
- } from "@tanstack/react-query";
2
+ getMembersQueryKey,
3
+ useInviteMember,
4
+ useMembers,
5
+ useRemoveMember,
6
+ useResendInvite,
7
+ useRevokeInvite,
8
+ useUpdateMember,
9
+ } from "@repo/api";
10
+ import { keepPreviousData, useQueryClient } from "@tanstack/react-query";
11
+ import { USER_ROW_LIMIT } from "../constants";
7
12
  import {
8
13
  useUsersManagementContext,
9
14
  type UsersManagementContextType,
10
15
  } from "../users-management-context";
11
- import { parseErrorResponse } from "../utils";
12
- import { useWorkOsApiUrl } from "../widgets-context";
13
- import { API_ENDPOINTS } from "./config";
14
- import { USER_ROW_LIMIT, WIDGETS_API_VERSION } from "../constants";
15
- import { ApiError, FetchError, NoAuthTokenError } from "../errors";
16
-
17
- export interface PaginationData {
18
- before?: string;
19
- after?: string;
20
- }
21
-
22
- export type UserAction =
23
- | "edit-role"
24
- | "revoke-membership"
25
- | "resend-invite"
26
- | "revoke-invite";
27
-
28
- export type UserStatus =
29
- | "Active"
30
- | "Invited"
31
- | "InviteExpired"
32
- | "InviteRevoked";
33
-
34
- export interface UserRole {
35
- slug: string;
36
- name: string;
37
- }
38
-
39
- export interface User {
40
- id: string;
41
- email: string;
42
- profilePictureUrl?: string | null;
43
- firstName?: string | null;
44
- lastName?: string | null;
45
- emailVerified: boolean;
46
- createdAt: string;
47
- lastActivityAt?: string | null;
48
- isLoggedInUser?: boolean;
49
- roles: UserRole[];
50
- actions: UserAction[];
51
- status: UserStatus;
52
- }
53
-
54
- export type Paginated<T> = { data: T; pagination: PaginationData };
55
-
56
- type PaginatedUsers = Paginated<User[]>;
57
16
 
58
17
  export const useUsers = (context?: UsersManagementContextType) => {
59
18
  const {
60
- authToken,
61
19
  state: { pagination, role, searchQuery },
62
20
  } = useUsersManagementContext(context);
63
- const baseUrl = useWorkOsApiUrl();
64
21
  const limit = USER_ROW_LIMIT;
65
22
  const { before, after } = pagination || {};
66
23
 
67
- return useQuery<PaginatedUsers>({
68
- queryKey: [
69
- "users",
70
- { authToken, baseUrl, limit, before, after, role, searchQuery },
71
- ],
72
- queryFn: () =>
73
- fetchUsers({
74
- authToken,
75
- baseUrl,
76
- limit,
77
- before,
78
- after,
79
- role,
80
- searchQuery,
81
- }),
82
- enabled: !!authToken,
83
- placeholderData: keepPreviousData,
84
- });
85
- };
86
-
87
- export const useUser = (
88
- userId: string,
89
- initialContext?: UsersManagementContextType,
90
- ) => {
91
- const { authToken } = useUsersManagementContext(initialContext);
92
- const baseUrl = useWorkOsApiUrl();
93
- return useQuery<User>({
94
- queryKey: ["user", userId],
95
- queryFn: () => fetchUser(userId, { baseUrl, authToken }),
96
- enabled: !!authToken,
97
- });
98
- };
99
-
100
- export const useUpdateUserRole = (args?: {
101
- onError?: (error: unknown) => void;
102
- }) => {
103
- const { authToken } = useUsersManagementContext();
104
- const queryClient = useQueryClient();
105
- const baseUrl = useWorkOsApiUrl();
106
- const { onError } = args || {};
107
-
108
- return useMutation({
109
- mutationFn: ({
110
- id,
111
- data: { roles },
112
- }: {
113
- id: string;
114
- data: { roles: string[] };
115
- }) => updateUserRole(id, { authToken, baseUrl, data: { roles } }),
116
- onSuccess: (updatedUser) => {
117
- queryClient.invalidateQueries({ queryKey: ["users"] });
118
- queryClient.invalidateQueries({ queryKey: ["user", updatedUser.id] });
24
+ return useMembers(
25
+ {
26
+ after: after ?? undefined,
27
+ before: before ?? undefined,
28
+ limit: limit.toString(),
29
+ role: role ?? undefined,
30
+ search: searchQuery ?? undefined,
119
31
  },
120
- onError,
121
- });
122
- };
123
-
124
- export interface InviteUserPayload {
125
- email: string;
126
- role: string;
127
- }
128
-
129
- export const useInviteUser = (args?: {
130
- onError?: (error: unknown) => void;
131
- }) => {
132
- const { authToken } = useUsersManagementContext();
133
- const queryClient = useQueryClient();
134
- const baseUrl = useWorkOsApiUrl();
135
- const { onError } = args || {};
136
-
137
- return useMutation({
138
- mutationFn: (data: InviteUserPayload) =>
139
- inviteUser({ authToken, baseUrl, ...data }),
140
- onSuccess: (_newUser) => {
141
- queryClient.invalidateQueries({ queryKey: ["users"] });
32
+ {
33
+ query: {
34
+ placeholderData: keepPreviousData,
35
+ },
142
36
  },
143
- onError,
144
- });
37
+ );
145
38
  };
146
39
 
147
- export const useDeleteUser = (args?: {
148
- onError?: (error: unknown) => void;
149
- }) => {
150
- const { authToken } = useUsersManagementContext();
40
+ export const useUpdateUserRole: typeof useUpdateMember = () => {
151
41
  const queryClient = useQueryClient();
152
- const baseUrl = useWorkOsApiUrl();
153
- const { onError } = args || {};
154
42
 
155
- return useMutation({
156
- mutationFn: (id: string) => deleteUser(id, { authToken, baseUrl }),
157
- onSuccess: (_, userId) => {
158
- queryClient.invalidateQueries({ queryKey: ["users"] });
159
- queryClient.removeQueries({ queryKey: ["user", userId] });
43
+ return useUpdateMember({
44
+ mutation: {
45
+ onSuccess: () => {
46
+ queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
47
+ },
160
48
  },
161
- onError,
162
49
  });
163
50
  };
164
51
 
165
- export const useRevokeUserInvite = (args?: {
166
- onError?: (error: unknown) => void;
167
- }) => {
168
- const { authToken } = useUsersManagementContext();
52
+ export const useInviteUser: typeof useInviteMember = () => {
169
53
  const queryClient = useQueryClient();
170
- const baseUrl = useWorkOsApiUrl();
171
- const { onError } = args || {};
172
54
 
173
- return useMutation({
174
- mutationFn: (id: string) => revokeUserInvite(id, { authToken, baseUrl }),
175
- onSuccess: (_, userId) => {
176
- queryClient.invalidateQueries({ queryKey: ["users"] });
177
- queryClient.removeQueries({ queryKey: ["user", userId] });
55
+ return useInviteMember({
56
+ mutation: {
57
+ onSuccess: () => {
58
+ queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
59
+ },
178
60
  },
179
- onError,
180
61
  });
181
62
  };
182
63
 
183
- export const useResendUserInvite = (args?: {
184
- onError?: (error: unknown) => void;
185
- }) => {
186
- const { authToken } = useUsersManagementContext();
64
+ export const useDeleteUser = () => {
187
65
  const queryClient = useQueryClient();
188
- const baseUrl = useWorkOsApiUrl();
189
- const { onError } = args || {};
190
66
 
191
- return useMutation({
192
- mutationFn: (id: string) => resendUserInvite(id, { authToken, baseUrl }),
193
- onSuccess: (_, userId) => {
194
- queryClient.invalidateQueries({ queryKey: ["users"] });
195
- queryClient.removeQueries({ queryKey: ["user", userId] });
67
+ return useRemoveMember({
68
+ mutation: {
69
+ onSuccess: () => {
70
+ queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
71
+ },
196
72
  },
197
- onError,
198
73
  });
199
74
  };
200
75
 
201
- type AuthToken = () => Promise<string>;
202
-
203
- /**
204
- * Fetch functions
205
- */
206
- async function fetchUsers({
207
- baseUrl,
208
- authToken,
209
- limit,
210
- role,
211
- before,
212
- after,
213
- searchQuery,
214
- }: {
215
- baseUrl: string;
216
- authToken: AuthToken | null;
217
- limit: number;
218
- before: string | undefined;
219
- after: string | undefined;
220
- searchQuery: string | null;
221
- role: string | null;
222
- }) {
223
- if (!authToken) {
224
- throw new NoAuthTokenError();
225
- }
226
- const url = new URL(`${baseUrl}/${API_ENDPOINTS.USERS}`);
227
- url.searchParams.set("limit", limit.toString());
228
- if (before) {
229
- url.searchParams.set("before", before);
230
- }
231
- if (after) {
232
- url.searchParams.set("after", after);
233
- }
234
- if (role) {
235
- url.searchParams.set("role", role);
236
- }
237
- if (searchQuery) {
238
- url.searchParams.set("search", searchQuery);
239
- }
240
- const response = await fetch(url, {
241
- cache: "no-store",
242
- headers: getAuthHeaders(await authToken()),
243
- }).catch((error) => {
244
- throw new FetchError({
245
- message: "Failed to fetch users",
246
- queryType: "query",
247
- recordType: "users",
248
- context: { error },
249
- });
250
- });
251
-
252
- if (!response.ok) {
253
- const { message, status } = await parseErrorResponse(response);
254
- throw new ApiError({
255
- message,
256
- status,
257
- queryType: "query",
258
- recordType: "users",
259
- });
260
- }
261
- // TODO validate the response
262
- const json = await response.json();
263
- const { data, listMetadata: pagination } = json as {
264
- data: User[];
265
- listMetadata: PaginationData;
266
- };
267
- return { data, pagination };
268
- }
269
-
270
- const fetchUser = async (
271
- userId: string,
272
- { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
273
- ) => {
274
- if (!authToken) {
275
- throw new NoAuthTokenError();
276
- }
277
- const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USERS}/${userId}`, {
278
- headers: getAuthHeaders(await authToken()),
279
- cache: "no-store",
280
- }).catch((error) => {
281
- throw new FetchError({
282
- message: "Failed to fetch user",
283
- queryType: "query",
284
- recordType: "users",
285
- context: { error },
286
- });
287
- });
288
-
289
- if (!response.ok) {
290
- const { message, status } = await parseErrorResponse(response);
291
- throw new ApiError({
292
- message,
293
- status,
294
- queryType: "query",
295
- recordType: "users",
296
- });
297
- }
298
- // TODO validate the response
299
- const json = await response.json();
300
- return json.data as User;
301
- };
302
-
303
- const updateUserRole = async (
304
- userId: string,
305
- {
306
- authToken,
307
- baseUrl,
308
- data,
309
- }: {
310
- authToken: AuthToken | null;
311
- baseUrl: string;
312
- data: { roles: string[] };
313
- },
314
- ) => {
315
- if (!authToken) {
316
- throw new NoAuthTokenError();
317
- }
318
-
319
- const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USERS}/${userId}`, {
320
- method: "POST",
321
- headers: {
322
- "Content-Type": "application/json",
323
- ...getAuthHeaders(await authToken()),
324
- },
325
- body: JSON.stringify(data),
326
- }).catch((error) => {
327
- throw new FetchError({
328
- message: "Failed to update user",
329
- queryType: "mutation",
330
- recordType: "users",
331
- context: { error },
332
- });
333
- });
334
-
335
- if (!response.ok) {
336
- const { message, status } = await parseErrorResponse(response);
337
- throw new ApiError({
338
- message,
339
- status,
340
- queryType: "mutation",
341
- recordType: "users",
342
- });
343
- }
344
- // TODO validate the response
345
- const json = await response.json();
346
- return json as { id: string; success: boolean };
347
- };
76
+ export const useRevokeUserInvite = () => {
77
+ const queryClient = useQueryClient();
348
78
 
349
- const inviteUser = async ({
350
- authToken,
351
- baseUrl,
352
- email,
353
- role,
354
- }: InviteUserPayload & { authToken: AuthToken | null; baseUrl: string }) => {
355
- if (!authToken) {
356
- throw new NoAuthTokenError();
357
- }
358
- const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USER_INVITE}`, {
359
- method: "POST",
360
- headers: {
361
- "Content-Type": "application/json",
362
- ...getAuthHeaders(await authToken()),
79
+ return useRevokeInvite({
80
+ mutation: {
81
+ onSuccess: () => {
82
+ queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
83
+ },
363
84
  },
364
- body: JSON.stringify({
365
- email,
366
- roles: [role],
367
- }),
368
- }).catch((error) => {
369
- throw new FetchError({
370
- message: "Failed to invite user",
371
- queryType: "mutation",
372
- recordType: "users",
373
- context: { error },
374
- });
375
- });
376
-
377
- if (!response.ok) {
378
- const { message, status } = await parseErrorResponse(response);
379
- throw new ApiError({
380
- message,
381
- status,
382
- queryType: "mutation",
383
- recordType: "users",
384
- });
385
- }
386
- // TODO validate the response
387
- const json = await response.json();
388
- return json as unknown;
389
- };
390
-
391
- const deleteUser = async (
392
- userId: string,
393
- { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
394
- ) => {
395
- if (!authToken) {
396
- throw new NoAuthTokenError();
397
- }
398
-
399
- const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USERS}/${userId}`, {
400
- method: "DELETE",
401
- headers: getAuthHeaders(await authToken()),
402
- }).catch((error) => {
403
- throw new FetchError({
404
- message: "Failed to delete user. Please try again.",
405
- queryType: "mutation",
406
- recordType: "users",
407
- context: { error },
408
- });
409
85
  });
410
-
411
- if (!response.ok) {
412
- const { message, status } = await parseErrorResponse(response);
413
- throw new ApiError({
414
- message,
415
- status,
416
- queryType: "mutation",
417
- recordType: "users",
418
- });
419
- }
420
- // TODO validate the response
421
- const json = await response.json();
422
- return json as unknown;
423
86
  };
424
87
 
425
- const revokeUserInvite = async (
426
- userId: string,
427
- { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
428
- ) => {
429
- if (!authToken) {
430
- throw new NoAuthTokenError();
431
- }
432
- const response = await fetch(
433
- `${baseUrl}/${API_ENDPOINTS.USER_INVITES}/${userId}`,
434
- {
435
- method: "DELETE",
436
- headers: getAuthHeaders(await authToken()),
437
- },
438
- ).catch((error) => {
439
- throw new FetchError({
440
- message: "Failed to resend user invite. Please try again.",
441
- queryType: "mutation",
442
- recordType: "users",
443
- context: { error },
444
- });
445
- });
446
-
447
- if (!response.ok) {
448
- const { message, status } = await parseErrorResponse(response);
449
- throw new ApiError({
450
- message,
451
- status,
452
- queryType: "mutation",
453
- recordType: "users",
454
- });
455
- }
456
- // TODO validate the response
457
- const json = await response.json();
458
- return json as unknown;
459
- };
88
+ export const useResendUserInvite = () => {
89
+ const queryClient = useQueryClient();
460
90
 
461
- const resendUserInvite = async (
462
- userId: string,
463
- { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
464
- ) => {
465
- if (!authToken) {
466
- throw new NoAuthTokenError();
467
- }
468
- const response = await fetch(
469
- `${baseUrl}/${API_ENDPOINTS.USER_INVITES_RESEND(userId)}`,
470
- {
471
- method: "POST",
472
- headers: getAuthHeaders(await authToken()),
91
+ return useResendInvite({
92
+ mutation: {
93
+ onSuccess: () => {
94
+ queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
95
+ },
473
96
  },
474
- ).catch((error) => {
475
- throw new FetchError({
476
- message: "Failed to resend user invite. Please try again.",
477
- queryType: "mutation",
478
- recordType: "users",
479
- context: { error },
480
- });
481
97
  });
482
-
483
- if (!response.ok) {
484
- const { message, status } = await parseErrorResponse(response);
485
- throw new ApiError({
486
- message,
487
- status,
488
- queryType: "mutation",
489
- recordType: "users",
490
- });
491
- }
492
- // TODO validate the response
493
- const json = await response.json();
494
- return json as unknown;
495
98
  };
496
-
497
- function getAuthHeaders(authToken: string): HeadersInit {
498
- return {
499
- Authorization: `Bearer ${authToken}`,
500
- "WorkOS-Widgets-Version": WIDGETS_API_VERSION,
501
- };
502
- }
@@ -0,0 +1,3 @@
1
+ .woswidgets-card-list-item:not(:first-child) {
2
+ border-top: 1px solid var(--gray-a6);
3
+ }