@workos-inc/widgets 1.6.1 → 1.7.0-pre.1

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 (281) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/dist/cjs/admin-portal-domain-verification.client.d.cts +11 -0
  3. package/dist/cjs/admin-portal-sso-connection.client.d.cts +11 -0
  4. package/dist/cjs/alert-dialog-BlG3_awx.d.cts +25 -0
  5. package/dist/cjs/api-keys.client.d.cts +11 -0
  6. package/dist/cjs/dialog-C15qCLN3.d.cts +23 -0
  7. package/dist/cjs/dropdown-menu-BQ5LtvdR.d.cts +48 -0
  8. package/dist/cjs/index.d.cts +8 -0
  9. package/dist/cjs/lib/add-mfa-dialog.cjs +22 -14
  10. package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
  11. package/dist/cjs/lib/add-mfa-dialog.d.cts +2 -2
  12. package/dist/cjs/lib/admin-portal-domain-verification.cjs +6 -8
  13. package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
  14. package/dist/cjs/lib/admin-portal-domain-verification.d.cts +11 -0
  15. package/dist/cjs/lib/admin-portal-sso-connection.cjs +7 -8
  16. package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
  17. package/dist/cjs/lib/admin-portal-sso-connection.d.cts +11 -0
  18. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +3 -3
  19. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
  20. package/dist/cjs/lib/api-keys/api-keys-search.cjs +2 -6
  21. package/dist/cjs/lib/api-keys/api-keys-search.cjs.map +1 -1
  22. package/dist/cjs/lib/api-keys/api-keys-table.cjs +18 -19
  23. package/dist/cjs/lib/api-keys/api-keys-table.cjs.map +1 -1
  24. package/dist/cjs/lib/api-keys/api-keys.cjs +2 -2
  25. package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
  26. package/dist/cjs/lib/api-keys/api-keys.d.cts +12 -0
  27. package/dist/cjs/lib/api-keys/create-api-key.cjs +20 -14
  28. package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
  29. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +7 -7
  30. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
  31. package/dist/cjs/lib/api-keys/skeleton-table.cjs +3 -2
  32. package/dist/cjs/lib/api-keys/skeleton-table.cjs.map +1 -1
  33. package/dist/cjs/lib/change-password-dialog.cjs +11 -9
  34. package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
  35. package/dist/cjs/lib/change-password-dialog.d.cts +2 -2
  36. package/dist/cjs/lib/copy-button.cjs +51 -29
  37. package/dist/cjs/lib/copy-button.cjs.map +1 -1
  38. package/dist/cjs/lib/copy-button.d.cts +22 -4
  39. package/dist/cjs/lib/delete-domain-dialog.cjs +8 -7
  40. package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
  41. package/dist/cjs/lib/delete-user-dialog.cjs +15 -7
  42. package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
  43. package/dist/cjs/lib/delete-user-dialog.d.cts +2 -2
  44. package/dist/cjs/lib/domain-actions.cjs +8 -8
  45. package/dist/cjs/lib/domain-actions.cjs.map +1 -1
  46. package/dist/cjs/lib/edit-user-profile-dialog.cjs +10 -9
  47. package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
  48. package/dist/cjs/lib/edit-user-profile-dialog.d.cts +2 -2
  49. package/dist/cjs/lib/edit-user-role-dialog.cjs +15 -15
  50. package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
  51. package/dist/cjs/lib/edit-user-role-dialog.d.cts +2 -2
  52. package/dist/cjs/lib/elements/alert-dialog.cjs +76 -0
  53. package/dist/cjs/lib/elements/alert-dialog.cjs.map +1 -0
  54. package/dist/cjs/lib/elements/alert-dialog.d.cts +3 -0
  55. package/dist/cjs/lib/elements/dialog.cjs +74 -0
  56. package/dist/cjs/lib/elements/dialog.cjs.map +1 -0
  57. package/dist/cjs/lib/elements/dialog.d.cts +3 -0
  58. package/dist/cjs/lib/elements/dropdown-menu.cjs +162 -0
  59. package/dist/cjs/lib/elements/dropdown-menu.cjs.map +1 -0
  60. package/dist/cjs/lib/elements/dropdown-menu.d.cts +3 -0
  61. package/dist/cjs/lib/elements/select.cjs +112 -0
  62. package/dist/cjs/lib/elements/select.cjs.map +1 -0
  63. package/dist/cjs/lib/elements/select.d.cts +4 -0
  64. package/dist/cjs/lib/elements/utils.cjs +54 -0
  65. package/dist/cjs/lib/elements/utils.cjs.map +1 -0
  66. package/dist/cjs/lib/elements/utils.d.cts +15 -0
  67. package/dist/cjs/lib/elements.cjs +73 -219
  68. package/dist/cjs/lib/elements.cjs.map +1 -1
  69. package/dist/cjs/lib/elements.d.cts +16 -13
  70. package/dist/cjs/lib/elevated-access.cjs +18 -10
  71. package/dist/cjs/lib/elevated-access.cjs.map +1 -1
  72. package/dist/cjs/lib/empty-state.d.cts +12 -0
  73. package/dist/cjs/lib/invite-user-dialog.cjs +13 -12
  74. package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
  75. package/dist/cjs/lib/logout-all-sessions-dialog.cjs +7 -6
  76. package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
  77. package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
  78. package/dist/cjs/lib/logout-dialog.cjs +7 -6
  79. package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
  80. package/dist/cjs/lib/logout-dialog.d.cts +2 -2
  81. package/dist/cjs/lib/organization-switcher.cjs +38 -20
  82. package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
  83. package/dist/cjs/lib/organization-switcher.d.cts +16 -2
  84. package/dist/cjs/lib/otp-input.d.cts +8 -0
  85. package/dist/cjs/lib/pipes.cjs +31 -42
  86. package/dist/cjs/lib/pipes.cjs.map +1 -1
  87. package/dist/cjs/lib/pipes.d.cts +12 -0
  88. package/dist/cjs/lib/resend-invite-dialog.cjs +23 -13
  89. package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
  90. package/dist/cjs/lib/resend-invite-dialog.d.cts +2 -2
  91. package/dist/cjs/lib/reset-mfa-dialog.cjs +9 -8
  92. package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
  93. package/dist/cjs/lib/reset-mfa-dialog.d.cts +2 -2
  94. package/dist/cjs/lib/revoke-invite-dialog.cjs +17 -8
  95. package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
  96. package/dist/cjs/lib/revoke-invite-dialog.d.cts +2 -2
  97. package/dist/cjs/lib/save-button.cjs +3 -2
  98. package/dist/cjs/lib/save-button.cjs.map +1 -1
  99. package/dist/cjs/lib/save-button.d.cts +12 -1
  100. package/dist/cjs/lib/set-password-dialog.cjs +11 -9
  101. package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
  102. package/dist/cjs/lib/set-password-dialog.d.cts +2 -2
  103. package/dist/cjs/lib/user-actions-dropdown.cjs +9 -8
  104. package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
  105. package/dist/cjs/lib/user-profile.cjs +1 -1
  106. package/dist/cjs/lib/user-profile.cjs.map +1 -1
  107. package/dist/cjs/lib/user-profile.d.cts +11 -0
  108. package/dist/cjs/lib/user-security.cjs +3 -3
  109. package/dist/cjs/lib/user-security.cjs.map +1 -1
  110. package/dist/cjs/lib/user-security.d.cts +12 -0
  111. package/dist/cjs/lib/user-sessions.cjs +3 -11
  112. package/dist/cjs/lib/user-sessions.cjs.map +1 -1
  113. package/dist/cjs/lib/user-sessions.d.cts +12 -0
  114. package/dist/cjs/lib/users-filter.cjs +5 -6
  115. package/dist/cjs/lib/users-filter.cjs.map +1 -1
  116. package/dist/cjs/lib/users-filter.d.cts +2 -2
  117. package/dist/cjs/lib/users-management.cjs +22 -34
  118. package/dist/cjs/lib/users-management.cjs.map +1 -1
  119. package/dist/cjs/lib/users-management.d.cts +11 -0
  120. package/dist/cjs/lib/users-search.cjs +2 -6
  121. package/dist/cjs/lib/users-search.cjs.map +1 -1
  122. package/dist/cjs/lib/utils.cjs +25 -2
  123. package/dist/cjs/lib/utils.cjs.map +1 -1
  124. package/dist/cjs/lib/utils.d.cts +17 -3
  125. package/dist/cjs/lib/view-dns-record-dialog.cjs +9 -8
  126. package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
  127. package/dist/cjs/lib/widgets-context.d.cts +8 -0
  128. package/dist/cjs/organization-switcher.client.cjs +33 -5
  129. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  130. package/dist/cjs/organization-switcher.client.d.cts +11 -0
  131. package/dist/cjs/pipes.client.d.cts +11 -0
  132. package/dist/cjs/select-KR89Qnvm.d.cts +30 -0
  133. package/dist/cjs/user-profile.client.d.cts +11 -0
  134. package/dist/cjs/user-security.client.d.cts +11 -0
  135. package/dist/cjs/user-sessions.client.d.cts +11 -0
  136. package/dist/cjs/users-management.client.d.cts +11 -0
  137. package/dist/cjs/utils.cjs +59 -0
  138. package/dist/cjs/utils.cjs.map +1 -0
  139. package/dist/cjs/utils.d.cts +3 -0
  140. package/dist/cjs/workos-widgets.client.d.cts +8 -0
  141. package/dist/css/lib/provider-icon.css +6 -0
  142. package/dist/esm/admin-portal-domain-verification.client.d.ts +11 -0
  143. package/dist/esm/admin-portal-sso-connection.client.d.ts +11 -0
  144. package/dist/esm/alert-dialog-BlG3_awx.d.ts +25 -0
  145. package/dist/esm/api-keys.client.d.ts +11 -0
  146. package/dist/esm/dialog-C15qCLN3.d.ts +23 -0
  147. package/dist/esm/dropdown-menu-BQ5LtvdR.d.ts +48 -0
  148. package/dist/esm/index.d.ts +8 -0
  149. package/dist/esm/lib/add-mfa-dialog.d.ts +2 -2
  150. package/dist/esm/lib/add-mfa-dialog.js +16 -9
  151. package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
  152. package/dist/esm/lib/admin-portal-domain-verification.d.ts +11 -0
  153. package/dist/esm/lib/admin-portal-domain-verification.js +6 -8
  154. package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
  155. package/dist/esm/lib/admin-portal-sso-connection.d.ts +11 -0
  156. package/dist/esm/lib/admin-portal-sso-connection.js +8 -9
  157. package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
  158. package/dist/esm/lib/api-keys/api-key-details-dialog.js +3 -3
  159. package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
  160. package/dist/esm/lib/api-keys/api-keys-search.js +2 -6
  161. package/dist/esm/lib/api-keys/api-keys-search.js.map +1 -1
  162. package/dist/esm/lib/api-keys/api-keys-table.js +18 -32
  163. package/dist/esm/lib/api-keys/api-keys-table.js.map +1 -1
  164. package/dist/esm/lib/api-keys/api-keys.d.ts +12 -0
  165. package/dist/esm/lib/api-keys/api-keys.js +2 -2
  166. package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
  167. package/dist/esm/lib/api-keys/create-api-key.js +17 -14
  168. package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
  169. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +4 -4
  170. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
  171. package/dist/esm/lib/api-keys/skeleton-table.js +2 -1
  172. package/dist/esm/lib/api-keys/skeleton-table.js.map +1 -1
  173. package/dist/esm/lib/change-password-dialog.d.ts +2 -2
  174. package/dist/esm/lib/change-password-dialog.js +8 -12
  175. package/dist/esm/lib/change-password-dialog.js.map +1 -1
  176. package/dist/esm/lib/copy-button.d.ts +22 -4
  177. package/dist/esm/lib/copy-button.js +49 -28
  178. package/dist/esm/lib/copy-button.js.map +1 -1
  179. package/dist/esm/lib/delete-domain-dialog.js +4 -3
  180. package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
  181. package/dist/esm/lib/delete-user-dialog.d.ts +2 -2
  182. package/dist/esm/lib/delete-user-dialog.js +13 -15
  183. package/dist/esm/lib/delete-user-dialog.js.map +1 -1
  184. package/dist/esm/lib/domain-actions.js +4 -4
  185. package/dist/esm/lib/domain-actions.js.map +1 -1
  186. package/dist/esm/lib/edit-user-profile-dialog.d.ts +2 -2
  187. package/dist/esm/lib/edit-user-profile-dialog.js +7 -12
  188. package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
  189. package/dist/esm/lib/edit-user-role-dialog.d.ts +2 -2
  190. package/dist/esm/lib/edit-user-role-dialog.js +9 -19
  191. package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
  192. package/dist/esm/lib/elements/alert-dialog.d.ts +3 -0
  193. package/dist/esm/lib/elements/alert-dialog.js +45 -0
  194. package/dist/esm/lib/elements/alert-dialog.js.map +1 -0
  195. package/dist/esm/lib/elements/dialog.d.ts +3 -0
  196. package/dist/esm/lib/elements/dialog.js +43 -0
  197. package/dist/esm/lib/elements/dialog.js.map +1 -0
  198. package/dist/esm/lib/elements/dropdown-menu.d.ts +3 -0
  199. package/dist/esm/lib/elements/dropdown-menu.js +131 -0
  200. package/dist/esm/lib/elements/dropdown-menu.js.map +1 -0
  201. package/dist/esm/lib/elements/select.d.ts +4 -0
  202. package/dist/esm/lib/elements/select.js +77 -0
  203. package/dist/esm/lib/elements/select.js.map +1 -0
  204. package/dist/esm/lib/elements/utils.d.ts +15 -0
  205. package/dist/esm/lib/elements/utils.js +20 -0
  206. package/dist/esm/lib/elements/utils.js.map +1 -0
  207. package/dist/esm/lib/elements.d.ts +16 -13
  208. package/dist/esm/lib/elements.js +71 -215
  209. package/dist/esm/lib/elements.js.map +1 -1
  210. package/dist/esm/lib/elevated-access.js +14 -6
  211. package/dist/esm/lib/elevated-access.js.map +1 -1
  212. package/dist/esm/lib/empty-state.d.ts +12 -0
  213. package/dist/esm/lib/invite-user-dialog.js +10 -24
  214. package/dist/esm/lib/invite-user-dialog.js.map +1 -1
  215. package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
  216. package/dist/esm/lib/logout-all-sessions-dialog.js +6 -9
  217. package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
  218. package/dist/esm/lib/logout-dialog.d.ts +2 -2
  219. package/dist/esm/lib/logout-dialog.js +6 -9
  220. package/dist/esm/lib/logout-dialog.js.map +1 -1
  221. package/dist/esm/lib/organization-switcher.d.ts +16 -2
  222. package/dist/esm/lib/organization-switcher.js +33 -13
  223. package/dist/esm/lib/organization-switcher.js.map +1 -1
  224. package/dist/esm/lib/otp-input.d.ts +8 -0
  225. package/dist/esm/lib/pipes.d.ts +12 -0
  226. package/dist/esm/lib/pipes.js +27 -47
  227. package/dist/esm/lib/pipes.js.map +1 -1
  228. package/dist/esm/lib/resend-invite-dialog.d.ts +2 -2
  229. package/dist/esm/lib/resend-invite-dialog.js +17 -20
  230. package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
  231. package/dist/esm/lib/reset-mfa-dialog.d.ts +2 -2
  232. package/dist/esm/lib/reset-mfa-dialog.js +6 -9
  233. package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
  234. package/dist/esm/lib/revoke-invite-dialog.d.ts +2 -2
  235. package/dist/esm/lib/revoke-invite-dialog.js +14 -15
  236. package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
  237. package/dist/esm/lib/save-button.d.ts +12 -1
  238. package/dist/esm/lib/save-button.js +4 -9
  239. package/dist/esm/lib/save-button.js.map +1 -1
  240. package/dist/esm/lib/set-password-dialog.d.ts +2 -2
  241. package/dist/esm/lib/set-password-dialog.js +8 -12
  242. package/dist/esm/lib/set-password-dialog.js.map +1 -1
  243. package/dist/esm/lib/user-actions-dropdown.js +8 -11
  244. package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
  245. package/dist/esm/lib/user-profile.d.ts +11 -0
  246. package/dist/esm/lib/user-profile.js +2 -2
  247. package/dist/esm/lib/user-profile.js.map +1 -1
  248. package/dist/esm/lib/user-security.d.ts +12 -0
  249. package/dist/esm/lib/user-security.js +4 -4
  250. package/dist/esm/lib/user-security.js.map +1 -1
  251. package/dist/esm/lib/user-sessions.d.ts +12 -0
  252. package/dist/esm/lib/user-sessions.js +5 -13
  253. package/dist/esm/lib/user-sessions.js.map +1 -1
  254. package/dist/esm/lib/users-filter.d.ts +2 -2
  255. package/dist/esm/lib/users-filter.js +5 -6
  256. package/dist/esm/lib/users-filter.js.map +1 -1
  257. package/dist/esm/lib/users-management.d.ts +11 -0
  258. package/dist/esm/lib/users-management.js +23 -39
  259. package/dist/esm/lib/users-management.js.map +1 -1
  260. package/dist/esm/lib/users-search.js +2 -6
  261. package/dist/esm/lib/users-search.js.map +1 -1
  262. package/dist/esm/lib/utils.d.ts +17 -3
  263. package/dist/esm/lib/utils.js +24 -2
  264. package/dist/esm/lib/utils.js.map +1 -1
  265. package/dist/esm/lib/view-dns-record-dialog.js +7 -17
  266. package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
  267. package/dist/esm/lib/widgets-context.d.ts +8 -0
  268. package/dist/esm/organization-switcher.client.d.ts +11 -0
  269. package/dist/esm/organization-switcher.client.js +33 -5
  270. package/dist/esm/organization-switcher.client.js.map +1 -1
  271. package/dist/esm/pipes.client.d.ts +11 -0
  272. package/dist/esm/select-KR89Qnvm.d.ts +30 -0
  273. package/dist/esm/user-profile.client.d.ts +11 -0
  274. package/dist/esm/user-security.client.d.ts +11 -0
  275. package/dist/esm/user-sessions.client.d.ts +11 -0
  276. package/dist/esm/users-management.client.d.ts +11 -0
  277. package/dist/esm/utils.d.ts +3 -0
  278. package/dist/esm/utils.js +25 -0
  279. package/dist/esm/utils.js.map +1 -0
  280. package/dist/esm/workos-widgets.client.d.ts +8 -0
  281. package/package.json +11 -1
@@ -6,9 +6,7 @@ import {
6
6
  Card,
7
7
  Callout,
8
8
  CheckboxGroup,
9
- Dialog,
10
9
  Flex,
11
- Select,
12
10
  ScrollArea,
13
11
  Text,
14
12
  VisuallyHidden,
@@ -16,15 +14,7 @@ import {
16
14
  } from "@radix-ui/themes";
17
15
  import { useState } from "react";
18
16
  import { useUpdateUserRole } from "./api/user.js";
19
- import {
20
- DialogContent,
21
- PrimaryButton,
22
- SecondaryButton,
23
- SelectContent,
24
- SelectItem,
25
- SelectTrigger,
26
- Skeleton
27
- } from "./elements.js";
17
+ import { Dialog, Button, Select, Skeleton } from "./elements.js";
28
18
  import { getBestName } from "./utils.js";
29
19
  import {
30
20
  useRolesAndConfig
@@ -95,7 +85,7 @@ function EditSingleUserRoleDialogContent({
95
85
  const errorId = `${selectId}-error`;
96
86
  const showErrorMessage = !!queryState.error;
97
87
  const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;
98
- return /* @__PURE__ */ jsxs(DialogContent, { maxWidth: "480px", children: [
88
+ return /* @__PURE__ */ jsxs(Dialog.Content, { maxWidth: "480px", children: [
99
89
  /* @__PURE__ */ jsx(Dialog.Title, { children: "Edit role" }),
100
90
  /* @__PURE__ */ jsxs(Dialog.Description, { children: [
101
91
  "Select the role to assign to ",
@@ -119,7 +109,7 @@ function EditSingleUserRoleDialogContent({
119
109
  disabled: queryState.isLoading || showSingleRoleInfo,
120
110
  children: [
121
111
  /* @__PURE__ */ jsx(Skeleton, { loading: queryState.isLoading, children: /* @__PURE__ */ jsx(
122
- SelectTrigger,
112
+ Select.Trigger,
123
113
  {
124
114
  id: selectId,
125
115
  placeholder: "Assign a role",
@@ -128,7 +118,7 @@ function EditSingleUserRoleDialogContent({
128
118
  "aria-describedby": [showErrorMessage && errorId, showSingleRoleInfo && infoId].filter(Boolean).join(" ") || void 0
129
119
  }
130
120
  ) }),
131
- /* @__PURE__ */ jsx(SelectContent, { children: roles.map((role) => /* @__PURE__ */ jsx(SelectItem, { value: role.slug, children: role.name }, role.slug)) })
121
+ /* @__PURE__ */ jsx(Select.Content, { children: roles.map((role) => /* @__PURE__ */ jsx(Select.Item, { value: role.slug, children: role.name }, role.slug)) })
132
122
  ]
133
123
  }
134
124
  ),
@@ -139,9 +129,9 @@ function EditSingleUserRoleDialogContent({
139
129
  ) }),
140
130
  updateUser.error ? /* @__PURE__ */ jsx(Callout.Root, { color: "red", mt: "4", mb: "-2", children: /* @__PURE__ */ jsx(Callout.Text, { children: getMutationErrorMessage(updateUser.error) }) }) : null,
141
131
  /* @__PURE__ */ jsxs(Flex, { mt: "5", gap: "3", justify: "end", children: [
142
- /* @__PURE__ */ jsx(Dialog.Close, { children: /* @__PURE__ */ jsx(SecondaryButton, { disabled: updateUser.isPending, children: "Cancel" }) }),
132
+ /* @__PURE__ */ jsx(Dialog.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "secondary", disabled: updateUser.isPending, children: "Cancel" }) }),
143
133
  /* @__PURE__ */ jsx(
144
- PrimaryButton,
134
+ Button,
145
135
  {
146
136
  form: formId,
147
137
  loading: updateUser.isPending,
@@ -191,7 +181,7 @@ function EditMultipleUserRolesDialogContent({
191
181
  const checkboxGroupId = `role-checkbox-group-${rootId}`;
192
182
  const infoId = `${checkboxGroupId}-info`;
193
183
  const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;
194
- return /* @__PURE__ */ jsxs(DialogContent, { maxWidth: "480px", children: [
184
+ return /* @__PURE__ */ jsxs(Dialog.Content, { maxWidth: "480px", children: [
195
185
  /* @__PURE__ */ jsxs(
196
186
  Flex,
197
187
  {
@@ -272,9 +262,9 @@ function EditMultipleUserRolesDialogContent({
272
262
  showSingleRoleInfo ? /* @__PURE__ */ jsx(Text, { color: "gray", size: "2", id: infoId, mt: "1", children: "You cannot update the role for this user as there is only one role available." }) : null,
273
263
  error ? /* @__PURE__ */ jsx(Callout.Root, { color: "red", mt: "4", mb: "-2", children: /* @__PURE__ */ jsx(Callout.Text, { children: error }) }) : null,
274
264
  /* @__PURE__ */ jsxs(Flex, { mt: "5", gap: "3", justify: "end", children: [
275
- /* @__PURE__ */ jsx(Dialog.Close, { children: /* @__PURE__ */ jsx(SecondaryButton, { disabled: updateUser.isPending, children: "Cancel" }) }),
265
+ /* @__PURE__ */ jsx(Dialog.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "secondary", disabled: updateUser.isPending, children: "Cancel" }) }),
276
266
  /* @__PURE__ */ jsx(
277
- PrimaryButton,
267
+ Button,
278
268
  {
279
269
  form: formId,
280
270
  loading: updateUser.isPending,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/edit-user-role-dialog.tsx"],"sourcesContent":["// @ts-nocheck\n// Unclear why, but there is a versioning conflict somewhere causing the build\n// to fail based on types with the Checkbox component. Will fix asap.\n\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n Callout,\n CheckboxGroup,\n Dialog,\n Flex,\n Select,\n ScrollArea,\n Text,\n VisuallyHidden,\n Separator,\n} from \"@radix-ui/themes\";\nimport { type ReactNode, useState } from \"react\";\nimport { useUpdateUserRole } from \"./api/user.js\";\nimport {\n DialogContent,\n PrimaryButton,\n SecondaryButton,\n SelectContent,\n SelectItem,\n SelectTrigger,\n Skeleton,\n} from \"./elements.js\";\nimport { getBestName } from \"./utils.js\";\nimport {\n Member,\n MemberRole,\n RolesAndConfig403,\n RolesAndConfig404,\n useRolesAndConfig,\n} from \"../api/endpoint.js\";\n\ninterface EditUserRoleDialogProps extends Dialog.RootProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n user: Member;\n children?: ReactNode;\n}\n\nexport function EditUserRoleDialog({\n children,\n user,\n ...props\n}: EditUserRoleDialogProps) {\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { data, ...restQueryState } = rolesAndConfigQuery;\n const queryState = {\n error: restQueryState.error,\n isLoading: restQueryState.isLoading,\n isSuccess: restQueryState.isSuccess,\n };\n\n return (\n <Dialog.Root {...props}>\n {children && <Dialog.Trigger>{children}</Dialog.Trigger>}\n {data.multipleRolesEnabled ? (\n <EditMultipleUserRolesDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n ) : (\n <EditSingleUserRoleDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n )}\n </Dialog.Root>\n );\n}\n\ninterface EditSingleUserRoleDialogContentProps {\n user: Member;\n roles: MemberRole[];\n queryState: {\n error: RolesAndConfig403 | RolesAndConfig404 | null;\n isLoading: boolean;\n isSuccess: boolean;\n };\n onFormSubmitSuccess: () => void;\n}\n\nexport function EditSingleUserRoleDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditSingleUserRoleDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [selectedRole, setSelectedRole] = useState(\n user.roles?.at(0)?.slug || \"Unknown\",\n );\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const selectId = `role-select-${rootId}`;\n const selectLabelId = `${selectId}-label`;\n const infoId = `${selectId}-info`;\n const errorId = `${selectId}-error`;\n const showErrorMessage = !!queryState.error;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n\n return (\n <DialogContent maxWidth=\"480px\">\n <Dialog.Title>Edit role</Dialog.Title>\n <Dialog.Description>\n Select the role to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"2\" direction=\"column\" gap=\"1\" asChild>\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n onSubmitForm({ id: user.id, roles: [selectedRole] });\n }}\n >\n <Select.Root\n name=\"roles\"\n value={selectedRole ?? \"Unknown\"}\n onValueChange={setSelectedRole}\n disabled={queryState.isLoading || showSingleRoleInfo}\n >\n <Skeleton loading={queryState.isLoading}>\n <SelectTrigger\n id={selectId}\n placeholder=\"Assign a role\"\n aria-labelledby={selectLabelId}\n aria-invalid={showErrorMessage || undefined}\n aria-describedby={\n [showErrorMessage && errorId, showSingleRoleInfo && infoId]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n />\n </Skeleton>\n\n <SelectContent>\n {roles.map((role) => (\n <SelectItem key={role.slug} value={role.slug}>\n {role.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select.Root>\n\n {showErrorMessage ? (\n <Text color=\"red\" size=\"2\" id={errorId}>\n {getRoleSelectErrorMessage(queryState.error)}\n </Text>\n ) : null}\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n </form>\n </Flex>\n\n {updateUser.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(updateUser.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <SecondaryButton disabled={updateUser.isPending}>\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <PrimaryButton\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </PrimaryButton>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </DialogContent>\n );\n}\n\ntype EditMultipleUserRolesDialogContentProps =\n EditSingleUserRoleDialogContentProps;\n\nfunction EditMultipleUserRolesDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditMultipleUserRolesDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [error, setError] = useState<string | null>(null);\n\n React.useEffect(() => {\n if (queryState.error && !error) {\n setError(\"There was an error fetching roles. Please try again.\");\n }\n }, [queryState.error, error]);\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n if (roles.length === 0) {\n setError(\"Please select at least one role\");\n return;\n }\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n onError: () => {\n setError(\n \"There was an error updating the user role. Please try again.\",\n );\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const checkboxGroupId = `role-checkbox-group-${rootId}`;\n const infoId = `${checkboxGroupId}-info`;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n return (\n <DialogContent maxWidth=\"480px\">\n <Flex\n direction=\"column\"\n gap=\"1\"\n maxHeight=\"calc(100vh - var(--dialog-content-padding) * 2 - var(--space-6) - max(var(--space-6), 6vh)\"\n minHeight=\"200px\"\n >\n <Dialog.Title>Edit roles</Dialog.Title>\n <Dialog.Description>\n Select the roles to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"4\" direction=\"column\" gap=\"1\" asChild minHeight=\"0\">\n <Card\n asChild\n style={{ display: \"flex\", padding: \"2px 0\", flexGrow: 0 }}\n >\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const selectedRoles = formData\n .getAll(\"roles\")\n .map((role) => role.toString());\n onSubmitForm({ id: user.id, roles: selectedRoles });\n }}\n >\n <ScrollArea>\n <CheckboxGroup.Root\n defaultValue={user.roles?.map((role) => role.slug) || []}\n name=\"roles\"\n style={{ gap: \"0\" }}\n id={checkboxGroupId}\n onValueChange={(values) => {\n if (error && values.length > 0) {\n setError(\"\");\n }\n }}\n >\n {roles.map((role, i) => (\n <Box key={role.slug}>\n <Flex px=\"4\" justify=\"center\" py=\"3\">\n <CheckboxGroup.Item\n value={role.slug}\n style={{\n width: \"100%\",\n gap: \"var(--space-3)\",\n alignItems: \"center\",\n }}\n disabled={showSingleRoleInfo}\n >\n <Flex direction=\"column\" width=\"100%\">\n <Text weight=\"bold\" size=\"2\">\n {role.name}\n </Text>\n <Text\n color=\"gray\"\n size=\"2\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {role.description}\n </Text>\n </Flex>\n </CheckboxGroup.Item>\n </Flex>\n {i !== roles.length - 1 && (\n <Separator orientation=\"horizontal\" size=\"4\" />\n )}\n </Box>\n ))}\n </CheckboxGroup.Root>\n </ScrollArea>\n </form>\n </Card>\n </Flex>\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n\n {error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>{error}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <SecondaryButton disabled={updateUser.isPending}>\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <PrimaryButton\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </PrimaryButton>\n </Flex>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </DialogContent>\n );\n}\n\nfunction getRoleSelectErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error fetching roles. Please try again.\";\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error updating the user role. Please try again.\";\n}\n"],"mappings":"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","names":["roles"]}
1
+ {"version":3,"sources":["../../../src/lib/edit-user-role-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n Callout,\n CheckboxGroup,\n Flex,\n ScrollArea,\n Text,\n VisuallyHidden,\n Separator,\n} from \"@radix-ui/themes\";\nimport { type ReactNode, useState } from \"react\";\nimport { useUpdateUserRole } from \"./api/user.js\";\nimport { Dialog, Button, Select, Skeleton } from \"./elements.js\";\nimport { getBestName } from \"./utils.js\";\nimport {\n Member,\n MemberRole,\n RolesAndConfig403,\n RolesAndConfig404,\n useRolesAndConfig,\n} from \"../api/endpoint.js\";\n\ninterface EditUserRoleDialogProps extends Dialog.RootProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n user: Member;\n children?: ReactNode;\n}\n\nexport function EditUserRoleDialog({\n children,\n user,\n ...props\n}: EditUserRoleDialogProps) {\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { data, ...restQueryState } = rolesAndConfigQuery;\n const queryState = {\n error: restQueryState.error,\n isLoading: restQueryState.isLoading,\n isSuccess: restQueryState.isSuccess,\n };\n\n return (\n <Dialog.Root {...props}>\n {children && <Dialog.Trigger>{children}</Dialog.Trigger>}\n {data.multipleRolesEnabled ? (\n <EditMultipleUserRolesDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n ) : (\n <EditSingleUserRoleDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n )}\n </Dialog.Root>\n );\n}\n\ninterface EditSingleUserRoleDialogContentProps {\n user: Member;\n roles: MemberRole[];\n queryState: {\n error: RolesAndConfig403 | RolesAndConfig404 | null;\n isLoading: boolean;\n isSuccess: boolean;\n };\n onFormSubmitSuccess: () => void;\n}\n\nexport function EditSingleUserRoleDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditSingleUserRoleDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [selectedRole, setSelectedRole] = useState(\n user.roles?.at(0)?.slug || \"Unknown\",\n );\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const selectId = `role-select-${rootId}`;\n const selectLabelId = `${selectId}-label`;\n const infoId = `${selectId}-info`;\n const errorId = `${selectId}-error`;\n const showErrorMessage = !!queryState.error;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n\n return (\n <Dialog.Content maxWidth=\"480px\">\n <Dialog.Title>Edit role</Dialog.Title>\n <Dialog.Description>\n Select the role to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"2\" direction=\"column\" gap=\"1\" asChild>\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n onSubmitForm({ id: user.id, roles: [selectedRole] });\n }}\n >\n <Select.Root\n name=\"roles\"\n value={selectedRole ?? \"Unknown\"}\n onValueChange={setSelectedRole}\n disabled={queryState.isLoading || showSingleRoleInfo}\n >\n <Skeleton loading={queryState.isLoading}>\n <Select.Trigger\n id={selectId}\n placeholder=\"Assign a role\"\n aria-labelledby={selectLabelId}\n aria-invalid={showErrorMessage || undefined}\n aria-describedby={\n [showErrorMessage && errorId, showSingleRoleInfo && infoId]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n />\n </Skeleton>\n\n <Select.Content>\n {roles.map((role) => (\n <Select.Item key={role.slug} value={role.slug}>\n {role.name}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n\n {showErrorMessage ? (\n <Text color=\"red\" size=\"2\" id={errorId}>\n {getRoleSelectErrorMessage(queryState.error)}\n </Text>\n ) : null}\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n </form>\n </Flex>\n\n {updateUser.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(updateUser.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={updateUser.isPending}>\n Cancel\n </Button>\n </Dialog.Close>\n\n <Button\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </Button>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </Dialog.Content>\n );\n}\n\ntype EditMultipleUserRolesDialogContentProps =\n EditSingleUserRoleDialogContentProps;\n\nfunction EditMultipleUserRolesDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditMultipleUserRolesDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [error, setError] = useState<string | null>(null);\n\n React.useEffect(() => {\n if (queryState.error && !error) {\n setError(\"There was an error fetching roles. Please try again.\");\n }\n }, [queryState.error, error]);\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n if (roles.length === 0) {\n setError(\"Please select at least one role\");\n return;\n }\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n onError: () => {\n setError(\n \"There was an error updating the user role. Please try again.\",\n );\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const checkboxGroupId = `role-checkbox-group-${rootId}`;\n const infoId = `${checkboxGroupId}-info`;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n return (\n <Dialog.Content maxWidth=\"480px\">\n <Flex\n direction=\"column\"\n gap=\"1\"\n maxHeight=\"calc(100vh - var(--dialog-content-padding) * 2 - var(--space-6) - max(var(--space-6), 6vh)\"\n minHeight=\"200px\"\n >\n <Dialog.Title>Edit roles</Dialog.Title>\n <Dialog.Description>\n Select the roles to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"4\" direction=\"column\" gap=\"1\" asChild minHeight=\"0\">\n <Card\n asChild\n style={{ display: \"flex\", padding: \"2px 0\", flexGrow: 0 }}\n >\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const selectedRoles = formData\n .getAll(\"roles\")\n .map((role) => role.toString());\n onSubmitForm({ id: user.id, roles: selectedRoles });\n }}\n >\n <ScrollArea>\n <CheckboxGroup.Root\n defaultValue={user.roles?.map((role) => role.slug) || []}\n name=\"roles\"\n style={{ gap: \"0\" }}\n id={checkboxGroupId}\n onValueChange={(values) => {\n if (error && values.length > 0) {\n setError(\"\");\n }\n }}\n >\n {roles.map((role, i) => (\n <Box key={role.slug}>\n <Flex px=\"4\" justify=\"center\" py=\"3\">\n <CheckboxGroup.Item\n value={role.slug}\n style={{\n width: \"100%\",\n gap: \"var(--space-3)\",\n alignItems: \"center\",\n }}\n disabled={showSingleRoleInfo}\n >\n <Flex direction=\"column\" width=\"100%\">\n <Text weight=\"bold\" size=\"2\">\n {role.name}\n </Text>\n <Text\n color=\"gray\"\n size=\"2\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {role.description}\n </Text>\n </Flex>\n </CheckboxGroup.Item>\n </Flex>\n {i !== roles.length - 1 && (\n <Separator orientation=\"horizontal\" size=\"4\" />\n )}\n </Box>\n ))}\n </CheckboxGroup.Root>\n </ScrollArea>\n </form>\n </Card>\n </Flex>\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n\n {error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>{error}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={updateUser.isPending}>\n Cancel\n </Button>\n </Dialog.Close>\n\n <Button\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </Button>\n </Flex>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </Dialog.Content>\n );\n}\n\nfunction getRoleSelectErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error fetching roles. Please try again.\";\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error updating the user role. Please try again.\";\n}\n"],"mappings":"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","names":["roles"]}
@@ -0,0 +1,3 @@
1
+ import 'react';
2
+ export { Action, ActionProps, Cancel, CancelProps, Description, DescriptionProps, Root, RootProps, Title, TitleProps, Trigger, TriggerProps } from '@radix-ui/themes/components/alert-dialog';
3
+ export { A as Content, C as ContentProps } from '../../alert-dialog-BlG3_awx.js';
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import {
5
+ Content as RadixAlertDialogContent
6
+ } from "@radix-ui/themes/components/alert-dialog";
7
+ import { useElement } from "../widgets-context.js";
8
+ import { getDomProps, namespaceClassNames } from "../utils.js";
9
+ import { useDialogOverlayHack } from "./utils.js";
10
+ const AlertDialogContent = React.forwardRef(
11
+ function AlertDialogContent2({ className, ...props }, forwardedRef) {
12
+ const element = useElement("dialog");
13
+ const { ref } = useDialogOverlayHack(forwardedRef, {
14
+ className: namespaceClassNames("dialog-overlay"),
15
+ selector: ".rt-DialogOverlay"
16
+ });
17
+ return /* @__PURE__ */ jsx(
18
+ RadixAlertDialogContent,
19
+ {
20
+ ref,
21
+ ...getDomProps({ elementId: "dialog", className }),
22
+ ...props,
23
+ ...element
24
+ }
25
+ );
26
+ }
27
+ );
28
+ import {
29
+ Action,
30
+ Cancel,
31
+ Description,
32
+ Root,
33
+ Title,
34
+ Trigger
35
+ } from "@radix-ui/themes/components/alert-dialog";
36
+ export {
37
+ Action,
38
+ Cancel,
39
+ AlertDialogContent as Content,
40
+ Description,
41
+ Root,
42
+ Title,
43
+ Trigger
44
+ };
45
+ //# sourceMappingURL=alert-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/elements/alert-dialog.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport {\n Content as RadixAlertDialogContent,\n type ContentProps as RadixAlertDialogContentProps,\n} from \"@radix-ui/themes/components/alert-dialog\";\nimport { useElement } from \"../widgets-context.js\";\nimport { getDomProps, namespaceClassNames } from \"../utils.js\";\nimport { useDialogOverlayHack } from \"./utils.js\";\n\ninterface ContentProps extends RadixAlertDialogContentProps {}\n\nconst AlertDialogContent = React.forwardRef<HTMLDivElement, ContentProps>(\n function AlertDialogContent({ className, ...props }, forwardedRef) {\n const element = useElement(\"dialog\");\n const { ref } = useDialogOverlayHack(forwardedRef, {\n className: namespaceClassNames(\"dialog-overlay\"),\n selector: \".rt-DialogOverlay\",\n });\n return (\n <RadixAlertDialogContent\n ref={ref}\n {...getDomProps({ elementId: \"dialog\", className })}\n {...props}\n {...element}\n />\n );\n },\n);\n\nexport { AlertDialogContent as Content };\nexport type { ContentProps };\n\nexport {\n Action,\n Cancel,\n Description,\n Root,\n Title,\n Trigger,\n} from \"@radix-ui/themes/components/alert-dialog\";\nexport type {\n ActionProps,\n CancelProps,\n DescriptionProps,\n RootProps,\n TitleProps,\n TriggerProps,\n} from \"@radix-ui/themes/components/alert-dialog\";\n"],"mappings":";AAoBM;AAnBN,YAAY,WAAW;AACvB;AAAA,EACE,WAAW;AAAA,OAEN;AACP,SAAS,kBAAkB;AAC3B,SAAS,aAAa,2BAA2B;AACjD,SAAS,4BAA4B;AAIrC,MAAM,qBAAqB,MAAM;AAAA,EAC/B,SAASA,oBAAmB,EAAE,WAAW,GAAG,MAAM,GAAG,cAAc;AACjE,UAAM,UAAU,WAAW,QAAQ;AACnC,UAAM,EAAE,IAAI,IAAI,qBAAqB,cAAc;AAAA,MACjD,WAAW,oBAAoB,gBAAgB;AAAA,MAC/C,UAAU;AAAA,IACZ,CAAC;AACD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG,YAAY,EAAE,WAAW,UAAU,UAAU,CAAC;AAAA,QACjD,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["AlertDialogContent"]}
@@ -0,0 +1,3 @@
1
+ import 'react';
2
+ export { Close, CloseProps, Description, DescriptionProps, Root, RootProps, Title, TitleProps, Trigger, TriggerProps } from '@radix-ui/themes/components/dialog';
3
+ export { D as Content, C as ContentProps } from '../../dialog-C15qCLN3.js';
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import {
5
+ Content as RadixDialogContent
6
+ } from "@radix-ui/themes/components/dialog";
7
+ import { useElement } from "../widgets-context.js";
8
+ import { getDomProps, namespaceClassNames } from "../utils.js";
9
+ import { useDialogOverlayHack } from "./utils.js";
10
+ const DialogContent = React.forwardRef(
11
+ function DialogContent2({ className, ...props }, forwardedRef) {
12
+ const element = useElement("dialog");
13
+ const { ref } = useDialogOverlayHack(forwardedRef, {
14
+ className: namespaceClassNames("dialog-overlay"),
15
+ selector: ".rt-DialogOverlay"
16
+ });
17
+ return /* @__PURE__ */ jsx(
18
+ RadixDialogContent,
19
+ {
20
+ ref,
21
+ ...getDomProps({ elementId: "dialog", className }),
22
+ ...props,
23
+ ...element
24
+ }
25
+ );
26
+ }
27
+ );
28
+ import {
29
+ Close,
30
+ Description,
31
+ Root,
32
+ Title,
33
+ Trigger
34
+ } from "@radix-ui/themes/components/dialog";
35
+ export {
36
+ Close,
37
+ DialogContent as Content,
38
+ Description,
39
+ Root,
40
+ Title,
41
+ Trigger
42
+ };
43
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/elements/dialog.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport {\n Content as RadixDialogContent,\n type ContentProps as RadixDialogContentProps,\n} from \"@radix-ui/themes/components/dialog\";\nimport { useElement } from \"../widgets-context.js\";\nimport { getDomProps, namespaceClassNames } from \"../utils.js\";\nimport { useDialogOverlayHack } from \"./utils.js\";\n\ninterface ContentProps extends RadixDialogContentProps {}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, ContentProps>(\n function DialogContent({ className, ...props }, forwardedRef) {\n const element = useElement(\"dialog\");\n const { ref } = useDialogOverlayHack(forwardedRef, {\n className: namespaceClassNames(\"dialog-overlay\"),\n selector: \".rt-DialogOverlay\",\n });\n return (\n <RadixDialogContent\n ref={ref}\n {...getDomProps({ elementId: \"dialog\", className })}\n {...props}\n {...element}\n />\n );\n },\n);\n\nexport { DialogContent as Content };\nexport type { ContentProps };\n\nexport {\n Close,\n Description,\n Root,\n Title,\n Trigger,\n} from \"@radix-ui/themes/components/dialog\";\nexport type {\n CloseProps,\n DescriptionProps,\n RootProps,\n TitleProps,\n TriggerProps,\n} from \"@radix-ui/themes/components/dialog\";\n"],"mappings":";AAoBM;AAnBN,YAAY,WAAW;AACvB;AAAA,EACE,WAAW;AAAA,OAEN;AACP,SAAS,kBAAkB;AAC3B,SAAS,aAAa,2BAA2B;AACjD,SAAS,4BAA4B;AAIrC,MAAM,gBAAgB,MAAM;AAAA,EAC1B,SAASA,eAAc,EAAE,WAAW,GAAG,MAAM,GAAG,cAAc;AAC5D,UAAM,UAAU,WAAW,QAAQ;AACnC,UAAM,EAAE,IAAI,IAAI,qBAAqB,cAAc;AAAA,MACjD,WAAW,oBAAoB,gBAAgB;AAAA,MAC/C,UAAU;AAAA,IACZ,CAAC;AACD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG,YAAY,EAAE,WAAW,UAAU,UAAU,CAAC;AAAA,QACjD,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["DialogContent"]}
@@ -0,0 +1,3 @@
1
+ import 'react';
2
+ export { Group, GroupProps, Label, LabelProps, RadioGroup, RadioGroupProps, Root, RootProps, Separator, SeparatorProps, Sub, SubContent, SubContentProps, SubProps, SubTrigger, SubTriggerProps, Trigger, TriggerIcon, TriggerIconProps, TriggerProps } from '@radix-ui/themes/components/dropdown-menu';
3
+ export { C as CheckboxItem, b as CheckboxItemProps, D as Content, a as ContentProps, M as Item, I as ItemProps, R as RadioItem, c as RadioItemProps } from '../../dropdown-menu-BQ5LtvdR.js';
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import {
5
+ Content as RadixContent,
6
+ Item as RadixItem,
7
+ CheckboxItem as RadixCheckboxItem,
8
+ RadioItem as RadixRadioItem
9
+ } from "@radix-ui/themes/components/dropdown-menu";
10
+ import cx from "clsx";
11
+ import { useElement } from "../widgets-context.js";
12
+ import { getDomProps, namespaceClassNames } from "../utils.js";
13
+ const DropdownMenuContent = React.forwardRef(
14
+ function DropdownMenuContent2({ className, ...props }, ref) {
15
+ const element = useElement("dropdown");
16
+ return /* @__PURE__ */ jsx(
17
+ RadixContent,
18
+ {
19
+ ref,
20
+ className: cx(namespaceClassNames("dropdown"), className),
21
+ ...props,
22
+ ...element
23
+ }
24
+ );
25
+ }
26
+ );
27
+ const MenuItem = React.forwardRef(function MenuItem2({ className, variant = "primary", ...props }, ref) {
28
+ const element = useElement(`${variant}MenuItem`);
29
+ return /* @__PURE__ */ jsx(
30
+ RadixItem,
31
+ {
32
+ ref,
33
+ ...getDomProps({
34
+ elementId: `${variant}MenuItem`,
35
+ className: cx(
36
+ className,
37
+ // TODO: Remove BEM-style selector once conventions are standardized
38
+ variant !== "primary" && `menu-item--${variant}`
39
+ )
40
+ }),
41
+ ...getItemRadixProps(variant),
42
+ ...props,
43
+ ...element
44
+ }
45
+ );
46
+ });
47
+ const CheckboxMenuItem = React.forwardRef(
48
+ function CheckboxMenuItem2({ className, variant = "primary", ...props }, ref) {
49
+ const element = useElement(`${variant}MenuItem`);
50
+ return /* @__PURE__ */ jsx(
51
+ RadixCheckboxItem,
52
+ {
53
+ ref,
54
+ className: cx(
55
+ className,
56
+ namespaceClassNames(
57
+ "menu-item",
58
+ // TODO: Remove BEM-style selector once conventions are standardized
59
+ variant !== "primary" && `menu-item--${variant}`
60
+ )
61
+ ),
62
+ ...getItemRadixProps(variant),
63
+ ...props,
64
+ ...element
65
+ }
66
+ );
67
+ }
68
+ );
69
+ const RadioMenuItem = React.forwardRef(
70
+ function RadioMenuItem2({ className, variant = "primary", ...props }, ref) {
71
+ const element = useElement(`${variant}MenuItem`);
72
+ return /* @__PURE__ */ jsx(
73
+ RadixRadioItem,
74
+ {
75
+ ref,
76
+ className: cx(
77
+ className,
78
+ namespaceClassNames(
79
+ "menu-item",
80
+ // TODO: Remove BEM-style selector once conventions are standardized
81
+ variant !== "primary" && `menu-item--${variant}`
82
+ )
83
+ ),
84
+ ...getItemRadixProps(variant),
85
+ ...props,
86
+ ...element
87
+ }
88
+ );
89
+ }
90
+ );
91
+ function getItemRadixProps(variant) {
92
+ if (variant === "primary") {
93
+ return {};
94
+ }
95
+ if (variant === "destructive") {
96
+ return {
97
+ color: "red"
98
+ };
99
+ }
100
+ variant;
101
+ return {};
102
+ }
103
+ import {
104
+ Group,
105
+ Label,
106
+ RadioGroup,
107
+ Root,
108
+ Separator,
109
+ Sub,
110
+ SubContent,
111
+ SubTrigger,
112
+ Trigger,
113
+ TriggerIcon
114
+ } from "@radix-ui/themes/components/dropdown-menu";
115
+ export {
116
+ CheckboxMenuItem as CheckboxItem,
117
+ DropdownMenuContent as Content,
118
+ Group,
119
+ MenuItem as Item,
120
+ Label,
121
+ RadioGroup,
122
+ RadioMenuItem as RadioItem,
123
+ Root,
124
+ Separator,
125
+ Sub,
126
+ SubContent,
127
+ SubTrigger,
128
+ Trigger,
129
+ TriggerIcon
130
+ };
131
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/elements/dropdown-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Content as RadixContent,\n Item as RadixItem,\n CheckboxItem as RadixCheckboxItem,\n RadioItem as RadixRadioItem,\n type ContentProps as RadixContentProps,\n type ItemProps as RadixItemProps,\n type CheckboxItemProps as RadixCheckboxItemProps,\n type RadioItemProps as RadixRadioItemProps,\n} from \"@radix-ui/themes/components/dropdown-menu\";\nimport cx from \"clsx\";\nimport { useElement } from \"../widgets-context.js\";\nimport { getDomProps, namespaceClassNames } from \"../utils.js\";\n\ninterface ContentProps extends Omit<RadixContentProps, \"variant\"> {}\n\nconst DropdownMenuContent = React.forwardRef<HTMLDivElement, ContentProps>(\n function DropdownMenuContent({ className, ...props }, ref) {\n const element = useElement(\"dropdown\");\n return (\n <RadixContent\n ref={ref}\n className={cx(namespaceClassNames(\"dropdown\"), className)}\n {...props}\n {...element}\n />\n );\n },\n);\n\ninterface ItemProps extends Omit<RadixItemProps, \"variant\" | \"color\"> {\n variant?: \"primary\" | \"destructive\";\n}\n\nconst MenuItem = React.forwardRef<HTMLDivElement, ItemProps>(function MenuItem(\n { className, variant = \"primary\", ...props },\n ref,\n) {\n const element = useElement(`${variant}MenuItem`);\n return (\n <RadixItem\n ref={ref}\n {...getDomProps({\n elementId: `${variant}MenuItem`,\n className: cx(\n className,\n // TODO: Remove BEM-style selector once conventions are standardized\n variant !== \"primary\" && `menu-item--${variant}`,\n ),\n })}\n {...getItemRadixProps(variant)}\n {...props}\n {...element}\n />\n );\n});\n\ninterface CheckboxItemProps extends Omit<RadixCheckboxItemProps, \"variant\"> {\n variant?: \"primary\";\n}\n\nconst CheckboxMenuItem = React.forwardRef<HTMLDivElement, CheckboxItemProps>(\n function CheckboxMenuItem({ className, variant = \"primary\", ...props }, ref) {\n const element = useElement(`${variant}MenuItem`);\n return (\n <RadixCheckboxItem\n ref={ref}\n className={cx(\n className,\n namespaceClassNames(\n \"menu-item\",\n // TODO: Remove BEM-style selector once conventions are standardized\n variant !== \"primary\" && `menu-item--${variant}`,\n ),\n )}\n {...getItemRadixProps(variant)}\n {...props}\n {...element}\n />\n );\n },\n);\n\ninterface RadioItemProps extends Omit<RadixRadioItemProps, \"variant\"> {\n variant?: \"primary\";\n}\n\nconst RadioMenuItem = React.forwardRef<HTMLDivElement, RadioItemProps>(\n function RadioMenuItem({ className, variant = \"primary\", ...props }, ref) {\n const element = useElement(`${variant}MenuItem`);\n return (\n <RadixRadioItem\n ref={ref}\n className={cx(\n className,\n namespaceClassNames(\n \"menu-item\",\n // TODO: Remove BEM-style selector once conventions are standardized\n variant !== \"primary\" && `menu-item--${variant}`,\n ),\n )}\n {...getItemRadixProps(variant)}\n {...props}\n {...element}\n />\n );\n },\n);\n\nfunction getItemRadixProps(\n variant: Exclude<ItemProps[\"variant\"], undefined>,\n): Pick<RadixItemProps, \"color\"> {\n if (variant === \"primary\") {\n return {};\n }\n if (variant === \"destructive\") {\n return {\n color: \"red\",\n };\n }\n variant satisfies never;\n return {};\n}\n\nexport {\n DropdownMenuContent as Content,\n MenuItem as Item,\n CheckboxMenuItem as CheckboxItem,\n RadioMenuItem as RadioItem,\n};\n\nexport type { ContentProps, ItemProps, CheckboxItemProps, RadioItemProps };\n\nexport {\n Group,\n Label,\n RadioGroup,\n Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n Trigger,\n TriggerIcon,\n} from \"@radix-ui/themes/components/dropdown-menu\";\nexport type {\n GroupProps,\n LabelProps,\n RadioGroupProps,\n RootProps,\n SeparatorProps,\n SubContentProps,\n SubProps,\n SubTriggerProps,\n TriggerIconProps,\n TriggerProps,\n} from \"@radix-ui/themes/components/dropdown-menu\";\n"],"mappings":";AAuBM;AArBN,YAAY,WAAW;AACvB;AAAA,EACE,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,aAAa;AAAA,OAKR;AACP,OAAO,QAAQ;AACf,SAAS,kBAAkB;AAC3B,SAAS,aAAa,2BAA2B;AAIjD,MAAM,sBAAsB,MAAM;AAAA,EAChC,SAASA,qBAAoB,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK;AACzD,UAAM,UAAU,WAAW,UAAU;AACrC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAG,oBAAoB,UAAU,GAAG,SAAS;AAAA,QACvD,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAMA,MAAM,WAAW,MAAM,WAAsC,SAASC,UACpE,EAAE,WAAW,UAAU,WAAW,GAAG,MAAM,GAC3C,KACA;AACA,QAAM,UAAU,WAAW,GAAG,OAAO,UAAU;AAC/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACC,GAAG,YAAY;AAAA,QACd,WAAW,GAAG,OAAO;AAAA,QACrB,WAAW;AAAA,UACT;AAAA;AAAA,UAEA,YAAY,aAAa,cAAc,OAAO;AAAA,QAChD;AAAA,MACF,CAAC;AAAA,MACA,GAAG,kBAAkB,OAAO;AAAA,MAC5B,GAAG;AAAA,MACH,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AAMD,MAAM,mBAAmB,MAAM;AAAA,EAC7B,SAASC,kBAAiB,EAAE,WAAW,UAAU,WAAW,GAAG,MAAM,GAAG,KAAK;AAC3E,UAAM,UAAU,WAAW,GAAG,OAAO,UAAU;AAC/C,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,YACE;AAAA;AAAA,YAEA,YAAY,aAAa,cAAc,OAAO;AAAA,UAChD;AAAA,QACF;AAAA,QACC,GAAG,kBAAkB,OAAO;AAAA,QAC5B,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAMA,MAAM,gBAAgB,MAAM;AAAA,EAC1B,SAASC,eAAc,EAAE,WAAW,UAAU,WAAW,GAAG,MAAM,GAAG,KAAK;AACxE,UAAM,UAAU,WAAW,GAAG,OAAO,UAAU;AAC/C,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,YACE;AAAA;AAAA,YAEA,YAAY,aAAa,cAAc,OAAO;AAAA,UAChD;AAAA,QACF;AAAA,QACC,GAAG,kBAAkB,OAAO;AAAA,QAC5B,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,SAAS,kBACP,SAC+B;AAC/B,MAAI,YAAY,WAAW;AACzB,WAAO,CAAC;AAAA,EACV;AACA,MAAI,YAAY,eAAe;AAC7B,WAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AACA;AACA,SAAO,CAAC;AACV;AAWA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["DropdownMenuContent","MenuItem","CheckboxMenuItem","RadioMenuItem"]}
@@ -0,0 +1,4 @@
1
+ import 'react';
2
+ import '@radix-ui/themes';
3
+ export { Group, GroupProps, Label, LabelProps, Root, RootProps, Separator, SeparatorProps } from '@radix-ui/themes/components/select';
4
+ export { a as Content, C as ContentProps, b as Item, I as ItemProps, S as Trigger, T as TriggerProps } from '../../select-KR89Qnvm.js';
@@ -0,0 +1,77 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Select as RadixSelect } from "@radix-ui/themes";
5
+ import cx from "clsx";
6
+ import { useElement } from "../widgets-context.js";
7
+ import { getDomProps, namespaceClassNames } from "../utils.js";
8
+ const SelectTrigger = React.forwardRef(
9
+ function SelectTrigger2({ className, ...props }, ref) {
10
+ const element = useElement("select");
11
+ return /* @__PURE__ */ jsx(
12
+ RadixSelect.Trigger,
13
+ {
14
+ ref,
15
+ ...getDomProps({ elementId: "select", className }),
16
+ ...props,
17
+ ...element
18
+ }
19
+ );
20
+ }
21
+ );
22
+ const SelectContent = React.forwardRef(
23
+ function SelectContent2({ className, ...props }, ref) {
24
+ const element = useElement("dropdown");
25
+ return /* @__PURE__ */ jsx(
26
+ RadixSelect.Content,
27
+ {
28
+ ref,
29
+ ...getDomProps({
30
+ elementId: "dropdown",
31
+ // TODO: This should probably be removed in the next major version. We
32
+ // should have a consistent way to differentiate between dropdowns and
33
+ // selects in the elements API.
34
+ className: cx(className, namespaceClassNames("select-dropdown"))
35
+ }),
36
+ ...props,
37
+ ...element
38
+ }
39
+ );
40
+ }
41
+ );
42
+ const SelectItem = React.forwardRef(
43
+ function SelectItem2({ className, ...props }, ref) {
44
+ const element = useElement("primaryMenuItem");
45
+ return /* @__PURE__ */ jsx(
46
+ RadixSelect.Item,
47
+ {
48
+ ref,
49
+ ...getDomProps({
50
+ elementId: "primaryMenuItem",
51
+ // TODO: This should probably be removed in the next major version. We
52
+ // should have a consistent way to differentiate between dropdowns and
53
+ // selects in the elements API.
54
+ className: cx(className, namespaceClassNames("select-item"))
55
+ }),
56
+ ...props,
57
+ ...element
58
+ }
59
+ );
60
+ }
61
+ );
62
+ import {
63
+ Group,
64
+ Label,
65
+ Root,
66
+ Separator
67
+ } from "@radix-ui/themes/components/select";
68
+ export {
69
+ SelectContent as Content,
70
+ Group,
71
+ SelectItem as Item,
72
+ Label,
73
+ Root,
74
+ Separator,
75
+ SelectTrigger as Trigger
76
+ };
77
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/elements/select.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Select as RadixSelect } from \"@radix-ui/themes\";\nimport cx from \"clsx\";\nimport { useElement } from \"../widgets-context.js\";\nimport { getDomProps, namespaceClassNames } from \"../utils.js\";\n\ninterface TriggerProps extends Omit<RadixSelect.TriggerProps, \"variant\"> {}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n function SelectTrigger({ className, ...props }, ref) {\n const element = useElement(\"select\");\n return (\n <RadixSelect.Trigger\n ref={ref}\n {...getDomProps({ elementId: \"select\", className })}\n {...props}\n {...element}\n />\n );\n },\n);\n\ninterface ContentProps extends Omit<RadixSelect.ContentProps, \"variant\"> {}\n\nconst SelectContent = React.forwardRef<HTMLDivElement, ContentProps>(\n function SelectContent({ className, ...props }, ref) {\n const element = useElement(\"dropdown\");\n return (\n <RadixSelect.Content\n ref={ref}\n {...getDomProps({\n elementId: \"dropdown\",\n // TODO: This should probably be removed in the next major version. We\n // should have a consistent way to differentiate between dropdowns and\n // selects in the elements API.\n className: cx(className, namespaceClassNames(\"select-dropdown\")),\n })}\n {...props}\n {...element}\n />\n );\n },\n);\n\ninterface ItemProps extends Omit<RadixSelect.ItemProps, \"variant\"> {}\n\nconst SelectItem = React.forwardRef<HTMLDivElement, ItemProps>(\n function SelectItem({ className, ...props }, ref) {\n const element = useElement(\"primaryMenuItem\");\n return (\n <RadixSelect.Item\n ref={ref}\n {...getDomProps({\n elementId: \"primaryMenuItem\",\n // TODO: This should probably be removed in the next major version. We\n // should have a consistent way to differentiate between dropdowns and\n // selects in the elements API.\n className: cx(className, namespaceClassNames(\"select-item\")),\n })}\n {...props}\n {...element}\n />\n );\n },\n);\n\nexport {\n SelectTrigger as Trigger,\n SelectContent as Content,\n SelectItem as Item,\n};\n\nexport type { TriggerProps, ContentProps, ItemProps };\n\nexport {\n Group,\n Label,\n Root,\n Separator,\n} from \"@radix-ui/themes/components/select\";\nexport type {\n GroupProps,\n LabelProps,\n RootProps,\n SeparatorProps,\n} from \"@radix-ui/themes/components/select\";\n"],"mappings":";AAcM;AAZN,YAAY,WAAW;AACvB,SAAS,UAAU,mBAAmB;AACtC,OAAO,QAAQ;AACf,SAAS,kBAAkB;AAC3B,SAAS,aAAa,2BAA2B;AAIjD,MAAM,gBAAgB,MAAM;AAAA,EAC1B,SAASA,eAAc,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK;AACnD,UAAM,UAAU,WAAW,QAAQ;AACnC,WACE;AAAA,MAAC,YAAY;AAAA,MAAZ;AAAA,QACC;AAAA,QACC,GAAG,YAAY,EAAE,WAAW,UAAU,UAAU,CAAC;AAAA,QACjD,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAIA,MAAM,gBAAgB,MAAM;AAAA,EAC1B,SAASC,eAAc,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK;AACnD,UAAM,UAAU,WAAW,UAAU;AACrC,WACE;AAAA,MAAC,YAAY;AAAA,MAAZ;AAAA,QACC;AAAA,QACC,GAAG,YAAY;AAAA,UACd,WAAW;AAAA;AAAA;AAAA;AAAA,UAIX,WAAW,GAAG,WAAW,oBAAoB,iBAAiB,CAAC;AAAA,QACjE,CAAC;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAIA,MAAM,aAAa,MAAM;AAAA,EACvB,SAASC,YAAW,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK;AAChD,UAAM,UAAU,WAAW,iBAAiB;AAC5C,WACE;AAAA,MAAC,YAAY;AAAA,MAAZ;AAAA,QACC;AAAA,QACC,GAAG,YAAY;AAAA,UACd,WAAW;AAAA;AAAA;AAAA;AAAA,UAIX,WAAW,GAAG,WAAW,oBAAoB,aAAa,CAAC;AAAA,QAC7D,CAAC;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAUA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["SelectTrigger","SelectContent","SelectItem"]}
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * HACK: Radix themes does not expose the dialog overlay, but we want consumer
5
+ * to be able to style it with a classname. This will add a classname to the
6
+ * overlay when the dialog content is mounted.
7
+ */
8
+ declare function useDialogOverlayHack(forwardedRef: React.Ref<HTMLDivElement | null>, { className, selector }: {
9
+ className: string;
10
+ selector: string;
11
+ }): {
12
+ ref: React.Ref<HTMLDivElement | null>;
13
+ };
14
+
15
+ export { useDialogOverlayHack };
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import { useComposedRefs } from "@radix-ui/react-compose-refs";
3
+ import { useLayoutEffect } from "../use-layout-effect.js";
4
+ function useDialogOverlayHack(forwardedRef, { className, selector }) {
5
+ const [node, setNode] = React.useState(null);
6
+ const ref = useComposedRefs(forwardedRef, setNode);
7
+ useLayoutEffect(() => {
8
+ if (!node) {
9
+ return;
10
+ }
11
+ const document = node.ownerDocument;
12
+ const overlay = document.querySelector(selector);
13
+ overlay?.classList.add(className);
14
+ }, [node, className, selector]);
15
+ return { ref };
16
+ }
17
+ export {
18
+ useDialogOverlayHack
19
+ };
20
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/elements/utils.ts"],"sourcesContent":["import * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"../use-layout-effect.js\";\n\n/**\n * HACK: Radix themes does not expose the dialog overlay, but we want consumer\n * to be able to style it with a classname. This will add a classname to the\n * overlay when the dialog content is mounted.\n */\nexport function useDialogOverlayHack(\n forwardedRef: React.Ref<HTMLDivElement | null>,\n { className, selector }: { className: string; selector: string },\n): { ref: React.Ref<HTMLDivElement | null> } {\n const [node, setNode] = React.useState<HTMLDivElement | null>(null);\n const ref = useComposedRefs(forwardedRef, setNode as any);\n useLayoutEffect(() => {\n if (!node) {\n return;\n }\n const document = node.ownerDocument;\n const overlay = document.querySelector<HTMLDivElement>(selector);\n overlay?.classList.add(className);\n }, [node, className, selector]);\n\n return { ref };\n}\n"],"mappings":"AAAA,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAOzB,SAAS,qBACd,cACA,EAAE,WAAW,SAAS,GACqB;AAC3C,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAgC,IAAI;AAClE,QAAM,MAAM,gBAAgB,cAAc,OAAc;AACxD,kBAAgB,MAAM;AACpB,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AACA,UAAM,WAAW,KAAK;AACtB,UAAM,UAAU,SAAS,cAA8B,QAAQ;AAC/D,aAAS,UAAU,IAAI,SAAS;AAAA,EAClC,GAAG,CAAC,MAAM,WAAW,QAAQ,CAAC;AAE9B,SAAO,EAAE,IAAI;AACf;","names":[]}
@@ -1,32 +1,35 @@
1
1
  import * as React from 'react';
2
- import { ButtonProps, IconButtonProps, SkeletonProps, Select, TextProps, TextField as TextField$1, BadgeProps, DropdownMenu, AvatarProps as AvatarProps$1, Dialog, AlertDialog } from '@radix-ui/themes';
2
+ import { ButtonProps as ButtonProps$1, IconButtonProps, SkeletonProps, TextProps, TextField as TextField$1, BadgeProps, AvatarProps as AvatarProps$1 } from '@radix-ui/themes';
3
3
  import { GetPropDefTypes, dialogContentPropDefs, buttonPropDefs, iconButtonPropDefs, textFieldRootPropDefs, selectTriggerPropDefs, badgePropDefs, dropdownMenuContentPropDefs, dropdownMenuItemPropDefs, avatarPropDefs, textPropDefs, skeletonPropDefs } from '@radix-ui/themes/props';
4
+ export { d as Dialog } from '../dialog-C15qCLN3.js';
5
+ export { a as AlertDialog } from '../alert-dialog-BlG3_awx.js';
6
+ export { d as DropdownMenu } from '../dropdown-menu-BQ5LtvdR.js';
7
+ export { s as Select } from '../select-KR89Qnvm.js';
8
+ import '@radix-ui/themes/components/dialog';
9
+ import '@radix-ui/themes/components/alert-dialog';
10
+ import '@radix-ui/themes/components/dropdown-menu';
11
+ import '@radix-ui/themes/components/select';
4
12
 
5
- declare const PrimaryButton: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
6
- declare const SecondaryButton: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
7
- declare const DestructiveButton: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
13
+ interface ButtonProps extends Omit<ButtonProps$1, "variant" | "color"> {
14
+ variant?: "primary" | "secondary" | "destructive";
15
+ unsafe_radixVariant?: ButtonProps$1["variant"];
16
+ }
17
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
8
18
  declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
9
19
  declare const Skeleton: React.ForwardRefExoticComponent<SkeletonProps & React.RefAttributes<HTMLSpanElement>>;
10
- declare const SelectTrigger: React.ForwardRefExoticComponent<Select.TriggerProps & React.RefAttributes<HTMLButtonElement>>;
11
- declare const SelectContent: React.ForwardRefExoticComponent<Select.ContentProps & React.RefAttributes<HTMLDivElement>>;
12
- declare const SelectItem: React.ForwardRefExoticComponent<Select.ItemProps & React.RefAttributes<HTMLDivElement>>;
13
20
  declare const Label: React.ForwardRefExoticComponent<TextProps & React.RefAttributes<HTMLLabelElement>>;
14
21
  declare const TextField: React.ForwardRefExoticComponent<TextField$1.RootProps & React.RefAttributes<HTMLInputElement>>;
15
22
  declare const TextFieldSlot: React.ForwardRefExoticComponent<TextField$1.SlotProps & React.RefAttributes<HTMLDivElement>>;
16
23
  declare const PasswordField: React.ForwardRefExoticComponent<TextField$1.RootProps & React.RefAttributes<HTMLInputElement>>;
17
24
  declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
18
- declare const DropdownMenuContent: React.ForwardRefExoticComponent<DropdownMenu.ContentProps & React.RefAttributes<HTMLDivElement>>;
19
- declare const PrimaryMenuItem: React.ForwardRefExoticComponent<DropdownMenu.ItemProps & React.RefAttributes<HTMLDivElement>>;
20
- declare const DestructiveMenuItem: React.ForwardRefExoticComponent<DropdownMenu.ItemProps & React.RefAttributes<HTMLDivElement>>;
21
25
  interface AvatarProps extends AvatarProps$1 {
22
26
  dim?: boolean;
23
27
  }
24
28
  declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLImageElement>>;
25
- declare const DialogContent: React.ForwardRefExoticComponent<Dialog.ContentProps & React.RefAttributes<HTMLDivElement>>;
26
- declare const AlertDialogContent: React.ForwardRefExoticComponent<AlertDialog.ContentProps & React.RefAttributes<HTMLDivElement>>;
27
29
  type OmitAsChild<T> = {
28
30
  [K in keyof T]: T[K] extends undefined ? undefined : Omit<NonNullable<T[K]>, "asChild">;
29
31
  };
32
+
30
33
  type Elements = OmitAsChild<{
31
34
  dialog?: GetPropDefTypes<typeof dialogContentPropDefs>;
32
35
  primaryButton?: GetPropDefTypes<typeof buttonPropDefs>;
@@ -44,4 +47,4 @@ type Elements = OmitAsChild<{
44
47
  skeleton?: GetPropDefTypes<typeof skeletonPropDefs>;
45
48
  }>;
46
49
 
47
- export { AlertDialogContent, Avatar, Badge, DestructiveButton, DestructiveMenuItem, DialogContent, DropdownMenuContent, type Elements, IconButton, Label, PasswordField, PrimaryButton, PrimaryMenuItem, SecondaryButton, SelectContent, SelectItem, SelectTrigger, Skeleton, TextField, TextFieldSlot };
50
+ export { Avatar, Badge, Button, type ButtonProps, type Elements, IconButton, Label, PasswordField, Skeleton, TextField, TextFieldSlot };