@workos-inc/widgets 1.5.1 → 1.6.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 (192) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/admin-portal-domain-verification.client.cjs +32 -17
  3. package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
  4. package/dist/cjs/admin-portal-domain-verification.client.d.cts +3 -2
  5. package/dist/cjs/{admin-portal-sso-connection-client.cjs → admin-portal-sso-connection.client.cjs} +58 -31
  6. package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -0
  7. package/dist/cjs/admin-portal-sso-connection.client.d.cts +16 -0
  8. package/dist/cjs/api/api-provider.cjs +1 -1
  9. package/dist/cjs/api/api-provider.cjs.map +1 -1
  10. package/dist/cjs/api/api-provider.d.cts +1 -1
  11. package/dist/cjs/api/endpoint.cjs +62 -2
  12. package/dist/cjs/api/endpoint.cjs.map +1 -1
  13. package/dist/cjs/api/endpoint.d.cts +62 -1
  14. package/dist/cjs/{api-keys-client.cjs → api-keys.client.cjs} +42 -25
  15. package/dist/cjs/api-keys.client.cjs.map +1 -0
  16. package/dist/cjs/api-keys.client.d.cts +15 -0
  17. package/dist/cjs/index.cjs +9 -2
  18. package/dist/cjs/index.cjs.map +1 -1
  19. package/dist/cjs/index.d.cts +6 -2
  20. package/dist/cjs/lib/admin-portal-domain-verification.cjs +33 -34
  21. package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
  22. package/dist/cjs/lib/admin-portal-domain-verification.d.cts +10 -6
  23. package/dist/cjs/lib/admin-portal-sso-connection.cjs +79 -79
  24. package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
  25. package/dist/cjs/lib/admin-portal-sso-connection.d.cts +13 -6
  26. package/dist/cjs/lib/api-keys/api-keys.cjs +70 -66
  27. package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
  28. package/dist/cjs/lib/api-keys/api-keys.d.cts +16 -8
  29. package/dist/cjs/lib/constants.cjs +5 -2
  30. package/dist/cjs/lib/constants.cjs.map +1 -1
  31. package/dist/cjs/lib/constants.d.cts +2 -1
  32. package/dist/cjs/lib/elevated-access.cjs.map +1 -1
  33. package/dist/cjs/lib/empty-state.cjs +24 -8
  34. package/dist/cjs/lib/empty-state.cjs.map +1 -1
  35. package/dist/cjs/lib/empty-state.d.cts +6 -2
  36. package/dist/cjs/lib/generic-error.cjs +33 -24
  37. package/dist/cjs/lib/generic-error.cjs.map +1 -1
  38. package/dist/cjs/lib/generic-error.d.cts +5 -2
  39. package/dist/cjs/lib/identity-providers.cjs +2 -1
  40. package/dist/cjs/lib/identity-providers.cjs.map +1 -1
  41. package/dist/cjs/lib/identity-providers.d.cts +2 -2
  42. package/dist/cjs/lib/oauth-icons.cjs +12 -7
  43. package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
  44. package/dist/cjs/lib/oauth-icons.d.cts +7 -3
  45. package/dist/cjs/lib/organization-switcher.cjs +62 -9
  46. package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
  47. package/dist/cjs/lib/organization-switcher.d.cts +12 -9
  48. package/dist/cjs/lib/otp-input.cjs +1 -1
  49. package/dist/cjs/lib/otp-input.cjs.map +1 -1
  50. package/dist/cjs/lib/pipes.cjs +343 -0
  51. package/dist/cjs/lib/pipes.cjs.map +1 -0
  52. package/dist/cjs/lib/pipes.d.cts +19 -0
  53. package/dist/cjs/lib/provider-icon.cjs +0 -6
  54. package/dist/cjs/lib/provider-icon.cjs.map +1 -1
  55. package/dist/cjs/lib/provider-icon.d.cts +4 -1
  56. package/dist/cjs/lib/save-button.cjs.map +1 -1
  57. package/dist/cjs/lib/user-profile.cjs +77 -83
  58. package/dist/cjs/lib/user-profile.cjs.map +1 -1
  59. package/dist/cjs/lib/user-profile.d.cts +11 -7
  60. package/dist/cjs/lib/user-security.cjs +30 -24
  61. package/dist/cjs/lib/user-security.cjs.map +1 -1
  62. package/dist/cjs/lib/user-security.d.cts +10 -7
  63. package/dist/cjs/lib/user-sessions.cjs +19 -9
  64. package/dist/cjs/lib/user-sessions.cjs.map +1 -1
  65. package/dist/cjs/lib/user-sessions.d.cts +10 -6
  66. package/dist/cjs/lib/users-management.cjs +224 -216
  67. package/dist/cjs/lib/users-management.cjs.map +1 -1
  68. package/dist/cjs/lib/users-management.d.cts +10 -7
  69. package/dist/cjs/lib/utils.cjs +43 -0
  70. package/dist/cjs/lib/utils.cjs.map +1 -1
  71. package/dist/cjs/lib/utils.d.cts +29 -2
  72. package/dist/cjs/organization-switcher.client.cjs +45 -16
  73. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  74. package/dist/cjs/organization-switcher.client.d.cts +2 -1
  75. package/dist/cjs/pipes.client.cjs +64 -0
  76. package/dist/cjs/pipes.client.cjs.map +1 -0
  77. package/dist/cjs/pipes.client.d.cts +15 -0
  78. package/dist/cjs/user-profile.client.cjs +27 -10
  79. package/dist/cjs/user-profile.client.cjs.map +1 -1
  80. package/dist/cjs/user-profile.client.d.cts +4 -3
  81. package/dist/cjs/user-security.client.cjs +27 -10
  82. package/dist/cjs/user-security.client.cjs.map +1 -1
  83. package/dist/cjs/user-security.client.d.cts +3 -2
  84. package/dist/cjs/user-sessions.client.cjs +34 -16
  85. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  86. package/dist/cjs/user-sessions.client.d.cts +4 -2
  87. package/dist/cjs/users-management.client.cjs +35 -18
  88. package/dist/cjs/users-management.client.cjs.map +1 -1
  89. package/dist/cjs/users-management.client.d.cts +3 -2
  90. package/dist/cjs/workos-widgets.client.cjs +7 -12
  91. package/dist/cjs/workos-widgets.client.cjs.map +1 -1
  92. package/dist/css/lib/provider-icon.css +16 -11
  93. package/dist/esm/admin-portal-domain-verification.client.d.ts +3 -2
  94. package/dist/esm/admin-portal-domain-verification.client.js +31 -17
  95. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  96. package/dist/esm/admin-portal-sso-connection.client.d.ts +16 -0
  97. package/dist/esm/{admin-portal-sso-connection-client.js → admin-portal-sso-connection.client.js} +57 -31
  98. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -0
  99. package/dist/esm/api/api-provider.d.ts +1 -1
  100. package/dist/esm/api/api-provider.js +1 -1
  101. package/dist/esm/api/api-provider.js.map +1 -1
  102. package/dist/esm/api/endpoint.d.ts +62 -1
  103. package/dist/esm/api/endpoint.js +56 -2
  104. package/dist/esm/api/endpoint.js.map +1 -1
  105. package/dist/esm/api-keys.client.d.ts +15 -0
  106. package/dist/esm/api-keys.client.js +75 -0
  107. package/dist/esm/api-keys.client.js.map +1 -0
  108. package/dist/esm/index.d.ts +6 -2
  109. package/dist/esm/index.js +9 -2
  110. package/dist/esm/index.js.map +1 -1
  111. package/dist/esm/lib/admin-portal-domain-verification.d.ts +10 -6
  112. package/dist/esm/lib/admin-portal-domain-verification.js +33 -34
  113. package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
  114. package/dist/esm/lib/admin-portal-sso-connection.d.ts +13 -6
  115. package/dist/esm/lib/admin-portal-sso-connection.js +83 -80
  116. package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
  117. package/dist/esm/lib/api-keys/api-keys.d.ts +16 -8
  118. package/dist/esm/lib/api-keys/api-keys.js +69 -54
  119. package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
  120. package/dist/esm/lib/constants.d.ts +2 -1
  121. package/dist/esm/lib/constants.js +3 -1
  122. package/dist/esm/lib/constants.js.map +1 -1
  123. package/dist/esm/lib/elevated-access.js.map +1 -1
  124. package/dist/esm/lib/empty-state.d.ts +6 -2
  125. package/dist/esm/lib/empty-state.js +24 -8
  126. package/dist/esm/lib/empty-state.js.map +1 -1
  127. package/dist/esm/lib/generic-error.d.ts +5 -2
  128. package/dist/esm/lib/generic-error.js +33 -24
  129. package/dist/esm/lib/generic-error.js.map +1 -1
  130. package/dist/esm/lib/identity-providers.d.ts +2 -2
  131. package/dist/esm/lib/identity-providers.js +2 -1
  132. package/dist/esm/lib/identity-providers.js.map +1 -1
  133. package/dist/esm/lib/oauth-icons.d.ts +7 -3
  134. package/dist/esm/lib/oauth-icons.js +11 -6
  135. package/dist/esm/lib/oauth-icons.js.map +1 -1
  136. package/dist/esm/lib/organization-switcher.d.ts +12 -9
  137. package/dist/esm/lib/organization-switcher.js +54 -9
  138. package/dist/esm/lib/organization-switcher.js.map +1 -1
  139. package/dist/esm/lib/otp-input.js +1 -1
  140. package/dist/esm/lib/otp-input.js.map +1 -1
  141. package/dist/esm/lib/pipes.d.ts +19 -0
  142. package/dist/esm/lib/pipes.js +334 -0
  143. package/dist/esm/lib/pipes.js.map +1 -0
  144. package/dist/esm/lib/provider-icon.d.ts +4 -1
  145. package/dist/esm/lib/provider-icon.js +0 -8
  146. package/dist/esm/lib/provider-icon.js.map +1 -1
  147. package/dist/esm/lib/save-button.js.map +1 -1
  148. package/dist/esm/lib/user-profile.d.ts +11 -7
  149. package/dist/esm/lib/user-profile.js +82 -75
  150. package/dist/esm/lib/user-profile.js.map +1 -1
  151. package/dist/esm/lib/user-security.d.ts +10 -7
  152. package/dist/esm/lib/user-security.js +34 -25
  153. package/dist/esm/lib/user-security.js.map +1 -1
  154. package/dist/esm/lib/user-sessions.d.ts +10 -6
  155. package/dist/esm/lib/user-sessions.js +20 -9
  156. package/dist/esm/lib/user-sessions.js.map +1 -1
  157. package/dist/esm/lib/users-management.d.ts +10 -7
  158. package/dist/esm/lib/users-management.js +230 -217
  159. package/dist/esm/lib/users-management.js.map +1 -1
  160. package/dist/esm/lib/utils.d.ts +29 -2
  161. package/dist/esm/lib/utils.js +46 -1
  162. package/dist/esm/lib/utils.js.map +1 -1
  163. package/dist/esm/organization-switcher.client.d.ts +2 -1
  164. package/dist/esm/organization-switcher.client.js +44 -16
  165. package/dist/esm/organization-switcher.client.js.map +1 -1
  166. package/dist/esm/pipes.client.d.ts +15 -0
  167. package/dist/esm/pipes.client.js +42 -0
  168. package/dist/esm/pipes.client.js.map +1 -0
  169. package/dist/esm/user-profile.client.d.ts +4 -3
  170. package/dist/esm/user-profile.client.js +26 -10
  171. package/dist/esm/user-profile.client.js.map +1 -1
  172. package/dist/esm/user-security.client.d.ts +3 -2
  173. package/dist/esm/user-security.client.js +26 -10
  174. package/dist/esm/user-security.client.js.map +1 -1
  175. package/dist/esm/user-sessions.client.d.ts +4 -2
  176. package/dist/esm/user-sessions.client.js +33 -16
  177. package/dist/esm/user-sessions.client.js.map +1 -1
  178. package/dist/esm/users-management.client.d.ts +3 -2
  179. package/dist/esm/users-management.client.js +34 -18
  180. package/dist/esm/users-management.client.js.map +1 -1
  181. package/dist/esm/workos-widgets.client.js +7 -12
  182. package/dist/esm/workos-widgets.client.js.map +1 -1
  183. package/package.json +17 -10
  184. package/dist/cjs/admin-portal-sso-connection-client.cjs.map +0 -1
  185. package/dist/cjs/admin-portal-sso-connection-client.d.cts +0 -12
  186. package/dist/cjs/api-keys-client.cjs.map +0 -1
  187. package/dist/cjs/api-keys-client.d.cts +0 -10
  188. package/dist/esm/admin-portal-sso-connection-client.d.ts +0 -12
  189. package/dist/esm/admin-portal-sso-connection-client.js.map +0 -1
  190. package/dist/esm/api-keys-client.d.ts +0 -10
  191. package/dist/esm/api-keys-client.js +0 -60
  192. package/dist/esm/api-keys-client.js.map +0 -1
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
  "use client";
3
- var __create = Object.create;
4
3
  var __defProp = Object.defineProperty;
5
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getProtoOf = Object.getPrototypeOf;
8
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
7
  var __export = (target, all) => {
10
8
  for (var name in all)
@@ -18,14 +16,6 @@ var __copyProps = (to, from, except, desc) => {
18
16
  }
19
17
  return to;
20
18
  };
21
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
- // If the importer is in node compatibility mode or this is not an ESM
23
- // file that has been converted to a CommonJS file using a Babel-
24
- // compatible transform (i.e. "__esModule" has not been set), then set
25
- // "default" to the CommonJS "module.exports" for node compatibility.
26
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
- mod
28
- ));
29
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
20
  var user_profile_exports = {};
31
21
  __export(user_profile_exports, {
@@ -36,83 +26,77 @@ __export(user_profile_exports, {
36
26
  module.exports = __toCommonJS(user_profile_exports);
37
27
  var import_jsx_runtime = require("react/jsx-runtime");
38
28
  var import_themes = require("@radix-ui/themes");
39
- var import_clsx = __toESM(require("clsx"), 1);
40
29
  var import_elements = require("./elements.js");
41
30
  var import_edit_user_profile_dialog = require("./edit-user-profile-dialog.js");
42
31
  var import_utils = require("./utils.js");
43
32
  var import_oauth_icons = require("./oauth-icons.js");
44
33
  var import_generic_error = require("./generic-error.js");
45
- const UserProfile = ({ userData: user }) => {
46
- const oauthAccounts = Object.entries(user.oauthProfiles || {});
47
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
48
- import_themes.Card,
49
- {
50
- className: (0, import_clsx.default)("woswidgets-widget"),
51
- "data-woswidgets-widget-id": "user-profile",
52
- size: "2",
53
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Root, { children: [
54
- user.profilePictureUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
55
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
56
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Profile picture" }) }),
57
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
58
- import_elements.Avatar,
34
+ const UserProfile = ({
35
+ userData: user,
36
+ ...domProps
37
+ }) => {
38
+ const oauthAccounts = user.oauthProfiles ? Object.entries(user.oauthProfiles) : [];
39
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("resolved", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Root, { children: [
40
+ user.profilePictureUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
41
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
42
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Profile picture" }) }),
43
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
44
+ import_elements.Avatar,
45
+ {
46
+ size: "2",
47
+ fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FallbackUserIcon, {}),
48
+ src: user.profilePictureUrl
49
+ }
50
+ ) })
51
+ ] }),
52
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {})
53
+ ] }),
54
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
55
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Full name" }) }),
56
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
57
+ import_themes.Flex,
58
+ {
59
+ align: "center",
60
+ justify: "between",
61
+ width: "100%",
62
+ minHeight: "var(--space-6)",
63
+ children: [
64
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: (0, import_utils.getBestName)(user) || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
+ import_themes.Text,
59
66
  {
60
- size: "2",
61
- fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FallbackUserIcon, {}),
62
- src: user.profilePictureUrl
67
+ color: "gray",
68
+ style: { color: "var(--gray-10)", cursor: "default" },
69
+ children: "Not set"
63
70
  }
64
- ) })
65
- ] }),
66
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {})
67
- ] }),
68
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
69
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Full name" }) }),
70
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
71
- import_themes.Flex,
72
- {
73
- align: "center",
74
- justify: "between",
75
- width: "100%",
76
- minHeight: "var(--space-6)",
77
- children: [
78
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: (0, import_utils.getBestName)(user) || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
79
- import_themes.Text,
80
- {
81
- color: "gray",
82
- style: { color: "var(--gray-10)", cursor: "default" },
83
- children: "Not set"
84
- }
85
- ) }),
86
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_edit_user_profile_dialog.EditUserProfileDialog, { user, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.SecondaryButton, { children: "Edit" }) })
87
- ]
88
- }
89
- ) })
90
- ] }),
91
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
92
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
93
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Email address" }) }),
94
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", minHeight: "var(--space-6)", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: user.email }) }) })
95
- ] }),
96
- oauthAccounts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
97
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
98
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { children: [
99
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Connected accounts" }) }),
100
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "2", children: oauthAccounts.map(([account, data]) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
101
- OAuthAccount,
102
- {
103
- account,
104
- email: data?.email
105
- },
106
- account
107
- )) }) })
108
- ] })
109
- ] })
71
+ ) }),
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_edit_user_profile_dialog.EditUserProfileDialog, { user, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.SecondaryButton, { children: "Edit" }) })
73
+ ]
74
+ }
75
+ ) })
76
+ ] }),
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
78
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Email address" }) }),
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", minHeight: "var(--space-6)", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: user.email }) }) })
81
+ ] }),
82
+ oauthAccounts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { children: [
85
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: "Connected accounts" }) }),
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "2", children: oauthAccounts.map(([account, data]) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
+ OAuthAccount,
88
+ {
89
+ account,
90
+ email: data?.email
91
+ },
92
+ account
93
+ )) }) })
110
94
  ] })
111
- }
112
- );
95
+ ] })
96
+ ] }) });
113
97
  };
114
- const UserProfileLoading = () => {
115
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Root, { children: [
98
+ const UserProfileLoading = (props) => {
99
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("loading", props), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Root, { children: [
116
100
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
117
101
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: "Full name" }) }) }),
118
102
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -133,18 +117,20 @@ const UserProfileLoading = () => {
133
117
  ] })
134
118
  ] }) });
135
119
  };
136
- function UserProfileError({ error }) {
137
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_generic_error.GenericError, { error }) });
138
- }
120
+ const UserProfileError = ({
121
+ error,
122
+ ...domProps
123
+ }) => {
124
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("error", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_generic_error.GenericError, { error }) });
125
+ };
139
126
  const ListSeparator = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { asChild: true, gridColumn: "span 2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Inset, { side: "x", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Separator, { size: "4" }) }) });
140
127
  const OAuthAccount = ({
141
128
  account,
142
129
  email
143
130
  }) => {
144
- const Icon = (0, import_oauth_icons.getOAuthIcon)(account);
145
131
  const name = (0, import_oauth_icons.getOAuthName)(account);
146
132
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { align: "center", gap: "1", children: [
147
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {}),
133
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_oauth_icons.OAuthIcon, { account }),
148
134
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", ml: "1", children: name }),
149
135
  email && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Box, { display: { initial: "none", sm: "contents" }, children: [
150
136
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", color: "gray", children: "\u2219" }),
@@ -166,6 +152,14 @@ const FallbackUserIcon = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
166
152
  ]
167
153
  }
168
154
  );
155
+ function getWidgetRootDomProps(state, domProps) {
156
+ return (0, import_utils.getDomProps)({
157
+ ...domProps,
158
+ isWidgetRoot: true,
159
+ widgetId: "user-profile",
160
+ widgetState: state
161
+ });
162
+ }
169
163
  // Annotate the CommonJS export names for ESM import in node:
170
164
  0 && (module.exports = {
171
165
  UserProfile,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/user-profile.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Box,\n Card,\n DataList,\n Flex,\n Inset,\n Separator,\n Strong,\n Text,\n} from \"@radix-ui/themes\";\nimport clsx from \"clsx\";\nimport { Avatar, SecondaryButton, Skeleton } from \"./elements.js\";\nimport { Me } from \"../api/endpoint.js\";\nimport { EditUserProfileDialog } from \"./edit-user-profile-dialog.js\";\nimport { getBestName } from \"./utils.js\";\nimport { getOAuthIcon, getOAuthName } from \"./oauth-icons.js\";\nimport { GenericError } from \"./generic-error.js\";\n\ninterface UserProfileProps {\n userData: Me;\n}\n\nexport const UserProfile = ({ userData: user }: UserProfileProps) => {\n const oauthAccounts = Object.entries(user.oauthProfiles || {});\n\n return (\n <Card\n className={clsx(\"woswidgets-widget\")}\n data-woswidgets-widget-id=\"user-profile\"\n size=\"2\"\n >\n <DataList.Root>\n {user.profilePictureUrl && (\n <>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>Profile picture</Strong>\n </DataList.Label>\n <DataList.Value>\n <Avatar\n size=\"2\"\n fallback={<FallbackUserIcon />}\n src={user.profilePictureUrl}\n />\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n </>\n )}\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>Full name</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n {getBestName(user) || (\n <Text\n color=\"gray\"\n style={{ color: \"var(--gray-10)\", cursor: \"default\" }}\n >\n Not set\n </Text>\n )}\n </Text>\n\n <EditUserProfileDialog user={user}>\n <SecondaryButton>Edit</SecondaryButton>\n </EditUserProfileDialog>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>Email address</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">{user.email}</Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n {oauthAccounts.length > 0 && (\n <>\n <ListSeparator />\n\n <DataList.Item>\n <DataList.Label highContrast>\n <Strong>Connected accounts</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex direction=\"column\" gap=\"2\">\n {oauthAccounts.map(([account, data]) => (\n <OAuthAccount\n key={account}\n account={account}\n email={data?.email}\n />\n ))}\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </>\n )}\n </DataList.Root>\n </Card>\n );\n};\n\nexport const UserProfileLoading: React.FC = () => {\n return (\n <Card size=\"2\">\n <DataList.Root>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>\n <Skeleton>Full name</Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n <Skeleton>Full name</Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>\n <Skeleton>Email address</Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">\n <Skeleton>Email address</Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </DataList.Root>\n </Card>\n );\n};\n\nexport function UserProfileError({ error }: { error: unknown }) {\n return (\n <Card size=\"2\">\n <GenericError error={error} />\n </Card>\n );\n}\n\nconst ListSeparator = () => (\n <Box asChild gridColumn=\"span 2\">\n <Inset side=\"x\">\n <Separator size=\"4\" />\n </Inset>\n </Box>\n);\n\nconst OAuthAccount = ({\n account,\n email,\n}: {\n account: string;\n email?: string | null;\n}) => {\n const Icon = getOAuthIcon(account);\n const name = getOAuthName(account);\n\n return (\n <Flex align=\"center\" gap=\"1\">\n <Icon />\n\n <Text size=\"2\" ml=\"1\">\n {name}\n </Text>\n\n {email && (\n <Box display={{ initial: \"none\", sm: \"contents\" }}>\n <Text size=\"2\" color=\"gray\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n {email}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nconst FallbackUserIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"currentColor\"\n viewBox=\"0 0 256 256\"\n >\n <title>User icon</title>\n <path d=\"M229.19,213c-15.81-27.32-40.63-46.49-69.47-54.62a70,70,0,1,0-63.44,0C67.44,166.5,42.62,185.67,26.81,213a6,6,0,1,0,10.38,6C56.4,185.81,90.34,166,128,166s71.6,19.81,90.81,53a6,6,0,1,0,10.38-6ZM70,96a58,58,0,1,1,58,58A58.07,58.07,0,0,1,70,96Z\" />\n </svg>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCU;AAjCV,oBASO;AACP,kBAAiB;AACjB,sBAAkD;AAElD,sCAAsC;AACtC,mBAA4B;AAC5B,yBAA2C;AAC3C,2BAA6B;AAMtB,MAAM,cAAc,CAAC,EAAE,UAAU,KAAK,MAAwB;AACnE,QAAM,gBAAgB,OAAO,QAAQ,KAAK,iBAAiB,CAAC,CAAC;AAE7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,YAAAA,SAAK,mBAAmB;AAAA,MACnC,6BAA0B;AAAA,MAC1B,MAAK;AAAA,MAEL,uDAAC,uBAAS,MAAT,EACE;AAAA,aAAK,qBACJ,4EACE;AAAA,uDAAC,uBAAS,MAAT,EAAc,OAAM,UACnB;AAAA,wDAAC,uBAAS,OAAT,EAAe,UAAS,SAAQ,cAAY,MAC3C,sDAAC,wBAAO,6BAAe,GACzB;AAAA,YACA,4CAAC,uBAAS,OAAT,EACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU,4CAAC,oBAAiB;AAAA,gBAC5B,KAAK,KAAK;AAAA;AAAA,YACZ,GACF;AAAA,aACF;AAAA,UAEA,4CAAC,iBAAc;AAAA,WACjB;AAAA,QAGF,6CAAC,uBAAS,MAAT,EAAc,OAAM,UACnB;AAAA,sDAAC,uBAAS,OAAT,EAAe,cAAY,MAC1B,sDAAC,wBAAO,uBAAS,GACnB;AAAA,UACA,4CAAC,uBAAS,OAAT,EACC;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,SAAQ;AAAA,cACR,OAAM;AAAA,cACN,WAAU;AAAA,cAEV;AAAA,4DAAC,sBAAK,MAAK,KACR,wCAAY,IAAI,KACf;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,OAAO,EAAE,OAAO,kBAAkB,QAAQ,UAAU;AAAA,oBACrD;AAAA;AAAA,gBAED,GAEJ;AAAA,gBAEA,4CAAC,yDAAsB,MACrB,sDAAC,mCAAgB,kBAAI,GACvB;AAAA;AAAA;AAAA,UACF,GACF;AAAA,WACF;AAAA,QAEA,4CAAC,iBAAc;AAAA,QAEf,6CAAC,uBAAS,MAAT,EAAc,OAAM,UACnB;AAAA,sDAAC,uBAAS,OAAT,EAAe,cAAY,MAC1B,sDAAC,wBAAO,2BAAa,GACvB;AAAA,UACA,4CAAC,uBAAS,OAAT,EACC,sDAAC,sBAAK,OAAM,UAAS,WAAU,kBAC7B,sDAAC,sBAAK,MAAK,KAAK,eAAK,OAAM,GAC7B,GACF;AAAA,WACF;AAAA,QAEC,cAAc,SAAS,KACtB,4EACE;AAAA,sDAAC,iBAAc;AAAA,UAEf,6CAAC,uBAAS,MAAT,EACC;AAAA,wDAAC,uBAAS,OAAT,EAAe,cAAY,MAC1B,sDAAC,wBAAO,gCAAkB,GAC5B;AAAA,YACA,4CAAC,uBAAS,OAAT,EACC,sDAAC,sBAAK,WAAU,UAAS,KAAI,KAC1B,wBAAc,IAAI,CAAC,CAAC,SAAS,IAAI,MAChC;AAAA,cAAC;AAAA;AAAA,gBAEC;AAAA,gBACA,OAAO,MAAM;AAAA;AAAA,cAFR;AAAA,YAGP,CACD,GACH,GACF;AAAA,aACF;AAAA,WACF;AAAA,SAEJ;AAAA;AAAA,EACF;AAEJ;AAEO,MAAM,qBAA+B,MAAM;AAChD,SACE,4CAAC,sBAAK,MAAK,KACT,uDAAC,uBAAS,MAAT,EACC;AAAA,iDAAC,uBAAS,MAAT,EAAc,OAAM,UACnB;AAAA,kDAAC,uBAAS,OAAT,EAAe,UAAS,SAAQ,cAAY,MAC3C,sDAAC,wBACC,sDAAC,4BAAS,uBAAS,GACrB,GACF;AAAA,MACA,4CAAC,uBAAS,OAAT,EACC;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,WAAU;AAAA,UAEV,sDAAC,sBAAK,MAAK,KACT,sDAAC,4BAAS,uBAAS,GACrB;AAAA;AAAA,MACF,GACF;AAAA,OACF;AAAA,IAEA,4CAAC,iBAAc;AAAA,IAEf,6CAAC,uBAAS,MAAT,EAAc,OAAM,UACnB;AAAA,kDAAC,uBAAS,OAAT,EAAe,cAAY,MAC1B,sDAAC,wBACC,sDAAC,4BAAS,2BAAa,GACzB,GACF;AAAA,MACA,4CAAC,uBAAS,OAAT,EACC,sDAAC,sBAAK,OAAM,UAAS,WAAU,kBAC7B,sDAAC,sBAAK,MAAK,KACT,sDAAC,4BAAS,2BAAa,GACzB,GACF,GACF;AAAA,OACF;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,iBAAiB,EAAE,MAAM,GAAuB;AAC9D,SACE,4CAAC,sBAAK,MAAK,KACT,sDAAC,qCAAa,OAAc,GAC9B;AAEJ;AAEA,MAAM,gBAAgB,MACpB,4CAAC,qBAAI,SAAO,MAAC,YAAW,UACtB,sDAAC,uBAAM,MAAK,KACV,sDAAC,2BAAU,MAAK,KAAI,GACtB,GACF;AAGF,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,WAAO,iCAAa,OAAO;AACjC,QAAM,WAAO,iCAAa,OAAO;AAEjC,SACE,6CAAC,sBAAK,OAAM,UAAS,KAAI,KACvB;AAAA,gDAAC,QAAK;AAAA,IAEN,4CAAC,sBAAK,MAAK,KAAI,IAAG,KACf,gBACH;AAAA,IAEC,SACC,6CAAC,qBAAI,SAAS,EAAE,SAAS,QAAQ,IAAI,WAAW,GAC9C;AAAA,kDAAC,sBAAK,MAAK,KAAI,OAAM,QAAO,oBAE5B;AAAA,MACA,4CAAC,sBAAK,MAAK,KAAI,OAAM,QAClB,iBACH;AAAA,OACF;AAAA,KAEJ;AAEJ;AAEA,MAAM,mBAAmB,MACvB;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,SAAQ;AAAA,IAER;AAAA,kDAAC,WAAM,uBAAS;AAAA,MAChB,4CAAC,UAAK,GAAE,mPAAkP;AAAA;AAAA;AAC5P;","names":["clsx"]}
1
+ {"version":3,"sources":["../../../src/lib/user-profile.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n DataList,\n Flex,\n Inset,\n Separator,\n Strong,\n Text,\n} from \"@radix-ui/themes\";\nimport { Avatar, SecondaryButton, Skeleton } from \"./elements.js\";\nimport { Me, OAuthProfile, MeOauthProfiles } from \"../api/endpoint.js\";\nimport { EditUserProfileDialog } from \"./edit-user-profile-dialog.js\";\nimport {\n getBestName,\n getDomProps,\n type WidgetRootState,\n type WidgetRootDomProps,\n} from \"./utils.js\";\nimport { OAuthIcon, getOAuthName, type OAuthAccount } from \"./oauth-icons.js\";\nimport { GenericError } from \"./generic-error.js\";\n\ninterface UserProfileProps extends WidgetRootDomProps {\n userData: Me;\n}\n\nconst UserProfile: React.FC<UserProfileProps> = ({\n userData: user,\n ...domProps\n}) => {\n const oauthAccounts = user.oauthProfiles\n ? (Object.entries(user.oauthProfiles) as [\n keyof Exclude<MeOauthProfiles, null>,\n OAuthProfile,\n ][])\n : [];\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"resolved\", domProps)}>\n <DataList.Root>\n {user.profilePictureUrl && (\n <>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>Profile picture</Strong>\n </DataList.Label>\n <DataList.Value>\n <Avatar\n size=\"2\"\n fallback={<FallbackUserIcon />}\n src={user.profilePictureUrl}\n />\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n </>\n )}\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>Full name</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n {getBestName(user) || (\n <Text\n color=\"gray\"\n style={{ color: \"var(--gray-10)\", cursor: \"default\" }}\n >\n Not set\n </Text>\n )}\n </Text>\n\n <EditUserProfileDialog user={user}>\n <SecondaryButton>Edit</SecondaryButton>\n </EditUserProfileDialog>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>Email address</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">{user.email}</Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n {oauthAccounts.length > 0 && (\n <>\n <ListSeparator />\n\n <DataList.Item>\n <DataList.Label highContrast>\n <Strong>Connected accounts</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex direction=\"column\" gap=\"2\">\n {oauthAccounts.map(([account, data]) => (\n <OAuthAccount\n key={account}\n account={account}\n email={data?.email}\n />\n ))}\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </>\n )}\n </DataList.Root>\n </Card>\n );\n};\n\ninterface UserProfileLoadingProps extends WidgetRootDomProps {}\n\nconst UserProfileLoading: React.FC<UserProfileLoadingProps> = (props) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"loading\", props)}>\n <DataList.Root>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>\n <Skeleton>Full name</Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n <Skeleton>Full name</Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>\n <Skeleton>Email address</Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">\n <Skeleton>Email address</Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </DataList.Root>\n </Card>\n );\n};\n\ninterface UserProfileErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UserProfileError: React.FC<UserProfileErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"error\", domProps)}>\n <GenericError error={error} />\n </Card>\n );\n};\n\nconst ListSeparator = () => (\n <Box asChild gridColumn=\"span 2\">\n <Inset side=\"x\">\n <Separator size=\"4\" />\n </Inset>\n </Box>\n);\n\nconst OAuthAccount = ({\n account,\n email,\n}: {\n account: OAuthAccount;\n email?: string | null;\n}) => {\n const name = getOAuthName(account);\n return (\n <Flex align=\"center\" gap=\"1\">\n <OAuthIcon account={account} />\n <Text size=\"2\" ml=\"1\">\n {name}\n </Text>\n {email && (\n <Box display={{ initial: \"none\", sm: \"contents\" }}>\n <Text size=\"2\" color=\"gray\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n {email}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nconst FallbackUserIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"currentColor\"\n viewBox=\"0 0 256 256\"\n >\n <title>User icon</title>\n <path d=\"M229.19,213c-15.81-27.32-40.63-46.49-69.47-54.62a70,70,0,1,0-63.44,0C67.44,166.5,42.62,185.67,26.81,213a6,6,0,1,0,10.38,6C56.4,185.81,90.34,166,128,166s71.6,19.81,90.81,53a6,6,0,1,0,10.38-6ZM70,96a58,58,0,1,1,58,58A58.07,58.07,0,0,1,70,96Z\" />\n </svg>\n);\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"user-profile\",\n widgetState: state,\n });\n}\n\nexport type {\n UserProfileProps,\n UserProfileLoadingProps,\n UserProfileErrorProps,\n};\nexport { UserProfile, UserProfileLoading, UserProfileError };\n"],"mappings":"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","names":[]}
@@ -1,15 +1,19 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
  import { Me } from '../api/endpoint.cjs';
3
+ import { WidgetRootDomProps } from './utils.cjs';
3
4
  import '@tanstack/react-query';
4
5
  import '../api/widgets-api-client.cjs';
5
6
 
6
- interface UserProfileProps {
7
+ interface UserProfileProps extends WidgetRootDomProps {
7
8
  userData: Me;
8
9
  }
9
- declare const UserProfile: ({ userData: user }: UserProfileProps) => react_jsx_runtime.JSX.Element;
10
- declare const UserProfileLoading: React.FC;
11
- declare function UserProfileError({ error }: {
10
+ declare const UserProfile: React.FC<UserProfileProps>;
11
+ interface UserProfileLoadingProps extends WidgetRootDomProps {
12
+ }
13
+ declare const UserProfileLoading: React.FC<UserProfileLoadingProps>;
14
+ interface UserProfileErrorProps extends WidgetRootDomProps {
12
15
  error: unknown;
13
- }): react_jsx_runtime.JSX.Element;
16
+ }
17
+ declare const UserProfileError: React.FC<UserProfileErrorProps>;
14
18
 
15
- export { UserProfile, UserProfileError, UserProfileLoading };
19
+ export { UserProfile, UserProfileError, type UserProfileErrorProps, UserProfileLoading, type UserProfileLoadingProps, type UserProfileProps };
@@ -36,7 +36,6 @@ __export(user_security_exports, {
36
36
  module.exports = __toCommonJS(user_security_exports);
37
37
  var import_jsx_runtime = require("react/jsx-runtime");
38
38
  var import_themes = require("@radix-ui/themes");
39
- var import_clsx = __toESM(require("clsx"), 1);
40
39
  var import_elements = require("./elements.js");
41
40
  var import_icon_panel = require("./icon-panel.js");
42
41
  var import_react_icons = require("@radix-ui/react-icons");
@@ -47,32 +46,31 @@ var import_reset_mfa_dialog = require("./reset-mfa-dialog.js");
47
46
  var CardList = __toESM(require("./card-list.js"), 1);
48
47
  var import_generic_error = require("./generic-error.js");
49
48
  var import_utils = require("./utils.js");
50
- const UserSecurity = ({ settings }) => {
49
+ const UserSecurity = ({
50
+ settings,
51
+ ...domProps
52
+ }) => {
51
53
  const passwordSettings = settings.verificationMethods.Password;
52
54
  const mfaSettings = settings.verificationMethods.Mfa;
53
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
54
- CardList.Root,
55
- {
56
- className: (0, import_clsx.default)("woswidgets-widget"),
57
- "data-woswidgets-widget-id": "user-security",
58
- children: [
59
- passwordSettings && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardList.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PasswordSettings, { settings: passwordSettings }) }),
60
- mfaSettings && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardList.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
61
- MfaSettings,
62
- {
63
- settings: mfaSettings,
64
- isPasswordSet: !!passwordSettings?.isSetUp
65
- }
66
- ) })
67
- ]
68
- }
69
- );
55
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardList.Root, { ...getWidgetRootDomProps("resolved", domProps), children: [
56
+ passwordSettings && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardList.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PasswordSettings, { settings: passwordSettings }) }),
57
+ mfaSettings && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardList.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
58
+ MfaSettings,
59
+ {
60
+ settings: mfaSettings,
61
+ isPasswordSet: !!passwordSettings?.isSetUp
62
+ }
63
+ ) })
64
+ ] });
70
65
  };
71
- function UserSecurityError({ error }) {
72
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_generic_error.GenericError, { error }) });
73
- }
74
- const UserSecurityLoading = () => {
75
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "auto 1fr auto", align: "center", gap: "4", children: [
66
+ const UserSecurityError = ({
67
+ error,
68
+ ...domProps
69
+ }) => {
70
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("error", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_generic_error.GenericError, { error }) });
71
+ };
72
+ const UserSecurityLoading = (props) => {
73
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("loading", props), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "auto 1fr auto", align: "center", gap: "4", children: [
76
74
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon_panel.IconPanel, {}) }),
77
75
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "column", children: [
78
76
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: "Password" }) }),
@@ -126,6 +124,14 @@ function MfaSettings({
126
124
  settings.isSetUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_reset_mfa_dialog.ResetMfaDialog, { isPasswordSet, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.SecondaryButton, { children: "Disable" }) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_add_mfa_dialog.AddMfaDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.SecondaryButton, { children: "Set up authenticator app" }) })
127
125
  ] });
128
126
  }
127
+ function getWidgetRootDomProps(state, domProps) {
128
+ return (0, import_utils.getDomProps)({
129
+ ...domProps,
130
+ isWidgetRoot: true,
131
+ widgetId: "user-security",
132
+ widgetState: state
133
+ });
134
+ }
129
135
  // Annotate the CommonJS export names for ESM import in node:
130
136
  0 && (module.exports = {
131
137
  UserSecurity,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/user-security.tsx"],"sourcesContent":["\"use client\";\n\nimport { Card, Flex, Grid, Text } from \"@radix-ui/themes\";\nimport clsx from \"clsx\";\nimport { SecondaryButton, Skeleton } from \"./elements.js\";\nimport { IconPanel } from \"./icon-panel.js\";\nimport { ButtonIcon, LockClosedIcon } from \"@radix-ui/react-icons\";\nimport { SetPasswordDialog } from \"./set-password-dialog.js\";\nimport { ChangePasswordDialog } from \"./change-password-dialog.js\";\nimport { AddMfaDialog } from \"./add-mfa-dialog.js\";\nimport type {\n AuthenticationInformationResponseData as AuthenticationSettings,\n AuthenticationInformationResponseDataVerificationMethodsPassword as PasswordVerificationMethod,\n AuthenticationInformationResponseDataVerificationMethodsMfa as MfaVerificationMethod,\n} from \"../api/endpoint.js\";\nimport { ResetMfaDialog } from \"./reset-mfa-dialog.js\";\nimport * as CardList from \"./card-list.js\";\nimport { GenericError } from \"./generic-error.js\";\nimport { getComparativeReadableDate } from \"./utils.js\";\n\ninterface UserSecurityProps {\n settings: AuthenticationSettings;\n}\n\nexport const UserSecurity = ({ settings }: UserSecurityProps) => {\n const passwordSettings = settings.verificationMethods.Password;\n const mfaSettings = settings.verificationMethods.Mfa;\n\n return (\n <CardList.Root\n className={clsx(\"woswidgets-widget\")}\n data-woswidgets-widget-id=\"user-security\"\n >\n {passwordSettings && (\n <CardList.Item>\n <PasswordSettings settings={passwordSettings} />\n </CardList.Item>\n )}\n\n {mfaSettings && (\n <CardList.Item>\n <MfaSettings\n settings={mfaSettings}\n isPasswordSet={!!passwordSettings?.isSetUp}\n />\n </CardList.Item>\n )}\n </CardList.Root>\n );\n};\n\nexport function UserSecurityError({ error }: { error: unknown }) {\n return (\n <Card size=\"2\">\n <GenericError error={error} />\n </Card>\n );\n}\n\nexport const UserSecurityLoading: React.FC = () => {\n return (\n <Card size=\"2\">\n <Grid columns=\"auto 1fr auto\" align=\"center\" gap=\"4\">\n <Skeleton>\n <IconPanel />\n </Skeleton>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n <Skeleton>Password</Skeleton>\n </Text>\n <Text as=\"p\" size=\"2\" color=\"gray\">\n <Skeleton>Set a password to access your account</Skeleton>\n </Text>\n </Flex>\n\n <ChangePasswordDialog>\n <Skeleton>\n <SecondaryButton>Change</SecondaryButton>\n </Skeleton>\n </ChangePasswordDialog>\n </Grid>\n </Card>\n );\n};\n\nfunction PasswordSettings({\n settings,\n}: {\n settings: NonNullable<PasswordVerificationMethod>;\n}) {\n return (\n <Grid columns=\"auto 1fr auto\" align=\"center\" gap=\"4\">\n <IconPanel>\n <LockClosedIcon />\n </IconPanel>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n Password\n </Text>\n\n {settings.isSetUp ? (\n settings.lastUsed && (\n <Text size=\"2\" color=\"gray\">\n Last used{\" \"}\n {getComparativeReadableDate(\n new Date(),\n new Date(settings.lastUsed),\n )}\n </Text>\n )\n ) : (\n <Text as=\"p\" size=\"2\" color=\"gray\">\n Set a password to access your account\n </Text>\n )}\n </Flex>\n\n {settings.isSetUp ? (\n <ChangePasswordDialog>\n <SecondaryButton>Change</SecondaryButton>\n </ChangePasswordDialog>\n ) : (\n <SetPasswordDialog>\n <SecondaryButton>Set a password</SecondaryButton>\n </SetPasswordDialog>\n )}\n </Grid>\n );\n}\n\nfunction MfaSettings({\n settings,\n isPasswordSet,\n}: {\n settings: NonNullable<MfaVerificationMethod>;\n isPasswordSet: boolean;\n}) {\n return (\n <Grid columns=\"auto 1fr auto\" align=\"center\" gap=\"4\">\n <IconPanel>\n <ButtonIcon />\n </IconPanel>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n Multi-factor authentication\n </Text>\n\n {settings.isSetUp ? (\n <Text size=\"2\">\n Authenticator app\n {settings.lastUsed && (\n <>\n <Text size=\"2\" color=\"gray\" mx=\"1\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n Last used{\" \"}\n {getComparativeReadableDate(\n new Date(),\n new Date(settings.lastUsed),\n )}\n </Text>\n </>\n )}\n </Text>\n ) : (\n <Text as=\"p\" size=\"2\" color=\"gray\">\n Secure your account with an extra verification step\n </Text>\n )}\n </Flex>\n\n {settings.isSetUp ? (\n <ResetMfaDialog isPasswordSet={isPasswordSet}>\n <SecondaryButton>Disable</SecondaryButton>\n </ResetMfaDialog>\n ) : (\n <AddMfaDialog>\n <SecondaryButton>Set up authenticator app</SecondaryButton>\n </AddMfaDialog>\n )}\n </Grid>\n );\n}\n"],"mappings":"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","names":["clsx"]}
1
+ {"version":3,"sources":["../../../src/lib/user-security.tsx"],"sourcesContent":["\"use client\";\n\nimport { Card, Flex, Grid, Text } from \"@radix-ui/themes\";\nimport { SecondaryButton, Skeleton } from \"./elements.js\";\nimport { IconPanel } from \"./icon-panel.js\";\nimport { ButtonIcon, LockClosedIcon } from \"@radix-ui/react-icons\";\nimport { SetPasswordDialog } from \"./set-password-dialog.js\";\nimport { ChangePasswordDialog } from \"./change-password-dialog.js\";\nimport { AddMfaDialog } from \"./add-mfa-dialog.js\";\nimport type {\n AuthenticationInformationResponseData as AuthenticationSettings,\n AuthenticationInformationResponseDataVerificationMethodsPassword as PasswordVerificationMethod,\n AuthenticationInformationResponseDataVerificationMethodsMfa as MfaVerificationMethod,\n} from \"../api/endpoint.js\";\nimport { ResetMfaDialog } from \"./reset-mfa-dialog.js\";\nimport * as CardList from \"./card-list.js\";\nimport { GenericError } from \"./generic-error.js\";\nimport {\n getComparativeReadableDate,\n getDomProps,\n type WidgetRootDomProps,\n type WidgetRootState,\n} from \"./utils.js\";\n\ninterface UserSecurityProps extends WidgetRootDomProps {\n settings: AuthenticationSettings;\n}\n\nconst UserSecurity: React.FC<UserSecurityProps> = ({\n settings,\n ...domProps\n}) => {\n const passwordSettings = settings.verificationMethods.Password;\n const mfaSettings = settings.verificationMethods.Mfa;\n return (\n <CardList.Root {...getWidgetRootDomProps(\"resolved\", domProps)}>\n {passwordSettings && (\n <CardList.Item>\n <PasswordSettings settings={passwordSettings} />\n </CardList.Item>\n )}\n {mfaSettings && (\n <CardList.Item>\n <MfaSettings\n settings={mfaSettings}\n isPasswordSet={!!passwordSettings?.isSetUp}\n />\n </CardList.Item>\n )}\n </CardList.Root>\n );\n};\n\ninterface UserSecurityErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UserSecurityError: React.FC<UserSecurityErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"error\", domProps)}>\n <GenericError error={error} />\n </Card>\n );\n};\n\ninterface UserSecurityLoadingProps extends WidgetRootDomProps {}\n\nconst UserSecurityLoading: React.FC<UserSecurityLoadingProps> = (props) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"loading\", props)}>\n <Grid columns=\"auto 1fr auto\" align=\"center\" gap=\"4\">\n <Skeleton>\n <IconPanel />\n </Skeleton>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n <Skeleton>Password</Skeleton>\n </Text>\n <Text as=\"p\" size=\"2\" color=\"gray\">\n <Skeleton>Set a password to access your account</Skeleton>\n </Text>\n </Flex>\n\n <ChangePasswordDialog>\n <Skeleton>\n <SecondaryButton>Change</SecondaryButton>\n </Skeleton>\n </ChangePasswordDialog>\n </Grid>\n </Card>\n );\n};\n\nfunction PasswordSettings({\n settings,\n}: {\n settings: NonNullable<PasswordVerificationMethod>;\n}) {\n return (\n <Grid columns=\"auto 1fr auto\" align=\"center\" gap=\"4\">\n <IconPanel>\n <LockClosedIcon />\n </IconPanel>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n Password\n </Text>\n\n {settings.isSetUp ? (\n settings.lastUsed && (\n <Text size=\"2\" color=\"gray\">\n Last used{\" \"}\n {getComparativeReadableDate(\n new Date(),\n new Date(settings.lastUsed),\n )}\n </Text>\n )\n ) : (\n <Text as=\"p\" size=\"2\" color=\"gray\">\n Set a password to access your account\n </Text>\n )}\n </Flex>\n\n {settings.isSetUp ? (\n <ChangePasswordDialog>\n <SecondaryButton>Change</SecondaryButton>\n </ChangePasswordDialog>\n ) : (\n <SetPasswordDialog>\n <SecondaryButton>Set a password</SecondaryButton>\n </SetPasswordDialog>\n )}\n </Grid>\n );\n}\n\nfunction MfaSettings({\n settings,\n isPasswordSet,\n}: {\n settings: NonNullable<MfaVerificationMethod>;\n isPasswordSet: boolean;\n}) {\n return (\n <Grid columns=\"auto 1fr auto\" align=\"center\" gap=\"4\">\n <IconPanel>\n <ButtonIcon />\n </IconPanel>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n Multi-factor authentication\n </Text>\n\n {settings.isSetUp ? (\n <Text size=\"2\">\n Authenticator app\n {settings.lastUsed && (\n <>\n <Text size=\"2\" color=\"gray\" mx=\"1\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n Last used{\" \"}\n {getComparativeReadableDate(\n new Date(),\n new Date(settings.lastUsed),\n )}\n </Text>\n </>\n )}\n </Text>\n ) : (\n <Text as=\"p\" size=\"2\" color=\"gray\">\n Secure your account with an extra verification step\n </Text>\n )}\n </Flex>\n\n {settings.isSetUp ? (\n <ResetMfaDialog isPasswordSet={isPasswordSet}>\n <SecondaryButton>Disable</SecondaryButton>\n </ResetMfaDialog>\n ) : (\n <AddMfaDialog>\n <SecondaryButton>Set up authenticator app</SecondaryButton>\n </AddMfaDialog>\n )}\n </Grid>\n );\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"user-security\",\n widgetState: state,\n });\n}\n\nexport type {\n UserSecurityProps,\n UserSecurityLoadingProps,\n UserSecurityErrorProps,\n};\nexport { UserSecurity, UserSecurityLoading, UserSecurityError };\n"],"mappings":"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","names":[]}
@@ -1,15 +1,18 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import { AuthenticationInformationResponseData } from '../api/endpoint.cjs';
2
+ import { WidgetRootDomProps } from './utils.cjs';
3
3
  import '@tanstack/react-query';
4
4
  import '../api/widgets-api-client.cjs';
5
5
 
6
- interface UserSecurityProps {
6
+ interface UserSecurityProps extends WidgetRootDomProps {
7
7
  settings: AuthenticationInformationResponseData;
8
8
  }
9
- declare const UserSecurity: ({ settings }: UserSecurityProps) => react_jsx_runtime.JSX.Element;
10
- declare function UserSecurityError({ error }: {
9
+ declare const UserSecurity: React.FC<UserSecurityProps>;
10
+ interface UserSecurityErrorProps extends WidgetRootDomProps {
11
11
  error: unknown;
12
- }): react_jsx_runtime.JSX.Element;
13
- declare const UserSecurityLoading: React.FC;
12
+ }
13
+ declare const UserSecurityError: React.FC<UserSecurityErrorProps>;
14
+ interface UserSecurityLoadingProps extends WidgetRootDomProps {
15
+ }
16
+ declare const UserSecurityLoading: React.FC<UserSecurityLoadingProps>;
14
17
 
15
- export { UserSecurity, UserSecurityError, UserSecurityLoading };
18
+ export { UserSecurity, UserSecurityError, type UserSecurityErrorProps, UserSecurityLoading, type UserSecurityLoadingProps, type UserSecurityProps };
@@ -36,7 +36,6 @@ __export(user_sessions_exports, {
36
36
  module.exports = __toCommonJS(user_sessions_exports);
37
37
  var import_jsx_runtime = require("react/jsx-runtime");
38
38
  var import_themes = require("@radix-ui/themes");
39
- var import_clsx = __toESM(require("clsx"), 1);
40
39
  var import_elements = require("./elements.js");
41
40
  var import_utils = require("./utils.js");
42
41
  var import_logout_dialog = require("./logout-dialog.js");
@@ -48,7 +47,8 @@ var import_generic_error = require("./generic-error.js");
48
47
  var import_react_icons = require("@radix-ui/react-icons");
49
48
  const UserSessions = ({
50
49
  sessionsData: sessions,
51
- currentSessionId
50
+ currentSessionId,
51
+ ...domProps
52
52
  }) => {
53
53
  const currentSession = sessions.find(
54
54
  (session) => session.id === currentSessionId
@@ -64,8 +64,7 @@ const UserSessions = ({
64
64
  {
65
65
  direction: "column",
66
66
  gap: "4",
67
- className: (0, import_clsx.default)("woswidgets-widget"),
68
- "data-woswidgets-widget-id": "user-sessions",
67
+ ...getWidgetRootDomProps("resolved", domProps),
69
68
  children: [
70
69
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardList.Root, { children: [
71
70
  currentSession && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardList.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserSession, { session: currentSession, isCurrentSession: true }) }),
@@ -115,8 +114,8 @@ const UserSessions = ({
115
114
  }
116
115
  );
117
116
  };
118
- const UserSessionsLoading = () => {
119
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { gap: "4", align: "center", children: [
117
+ const UserSessionsLoading = (props) => {
118
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("loading", props), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { gap: "4", align: "center", children: [
120
119
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon_panel.IconPanel, {}) }),
121
120
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "column", children: [
122
121
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: "The location" }) }),
@@ -124,9 +123,12 @@ const UserSessionsLoading = () => {
124
123
  ] })
125
124
  ] }) });
126
125
  };
127
- function UserSessionsError({ error }) {
128
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_generic_error.GenericError, { error }) });
129
- }
126
+ const UserSessionsError = ({
127
+ error,
128
+ ...domProps
129
+ }) => {
130
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("error", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_generic_error.GenericError, { error }) });
131
+ };
130
132
  const UserSession = ({
131
133
  session,
132
134
  isCurrentSession = false,
@@ -169,6 +171,14 @@ const UserSession = ({
169
171
  ) })
170
172
  ] });
171
173
  };
174
+ function getWidgetRootDomProps(state, domProps) {
175
+ return (0, import_utils.getDomProps)({
176
+ ...domProps,
177
+ isWidgetRoot: true,
178
+ widgetId: "user-sessions",
179
+ widgetState: state
180
+ });
181
+ }
172
182
  // Annotate the CommonJS export names for ESM import in node:
173
183
  0 && (module.exports = {
174
184
  UserSessions,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/user-sessions.tsx"],"sourcesContent":["\"use client\";\n\nimport { Box, Button, Card, Flex, Text } from \"@radix-ui/themes\";\nimport clsx from \"clsx\";\nimport { Badge, SecondaryButton, Skeleton } from \"./elements.js\";\nimport {\n getComparativeReadableDate,\n getUserLocation,\n parseUserAgent,\n} from \"./utils.js\";\nimport { LogoutDialog } from \"./logout-dialog.js\";\nimport { LogoutAllSessionsDialog } from \"./logout-all-sessions-dialog.js\";\nimport { ActiveSession } from \"../api/endpoint.js\";\nimport * as CardList from \"./card-list.js\";\nimport { IconPanel } from \"./icon-panel.js\";\nimport { useState } from \"react\";\nimport { GenericError } from \"./generic-error.js\";\nimport { LaptopIcon, MobileIcon } from \"@radix-ui/react-icons\";\n\ninterface UserSessionsProps {\n sessionsData: ActiveSession[];\n currentSessionId: string;\n}\n\nexport const UserSessions = ({\n sessionsData: sessions,\n currentSessionId,\n}: UserSessionsProps) => {\n const currentSession = sessions.find(\n (session) => session.id === currentSessionId,\n );\n const otherSessions = sessions.filter(\n (session) => session.id !== currentSessionId,\n );\n const [openLogoutDialog, setOpenLogoutDialog] = useState(false);\n const [sessionToSignOut, setSessionToSignOut] =\n useState<ActiveSession | null>(null);\n const [openLogoutAllSessionsDialog, setOpenLogoutAllSessionsDialog] =\n useState(false);\n\n return (\n <Flex\n direction=\"column\"\n gap=\"4\"\n className={clsx(\"woswidgets-widget\")}\n data-woswidgets-widget-id=\"user-sessions\"\n >\n <CardList.Root>\n {currentSession && (\n <CardList.Item>\n <UserSession session={currentSession} isCurrentSession />\n </CardList.Item>\n )}\n\n {otherSessions.map((session) => (\n <CardList.Item key={session.id}>\n <UserSession\n session={session}\n onSignOut={() => {\n setSessionToSignOut(session);\n setOpenLogoutDialog(true);\n }}\n />\n </CardList.Item>\n ))}\n </CardList.Root>\n\n {sessions.length > 1 && (\n <Card size=\"2\">\n <Flex gap=\"2\" justify=\"between\" align=\"center\">\n <Box>\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\">\n Sign out of all other devices\n </Text>\n <Text size=\"2\" color=\"gray\" as=\"p\">\n Remove access from all devices except this one\n </Text>\n </Box>\n\n <SecondaryButton\n onClick={() => {\n setOpenLogoutAllSessionsDialog(true);\n }}\n >\n Sign out\n </SecondaryButton>\n </Flex>\n </Card>\n )}\n\n {sessionToSignOut && (\n <LogoutDialog\n session={sessionToSignOut}\n open={openLogoutDialog}\n onOpenChange={setOpenLogoutDialog}\n />\n )}\n\n <LogoutAllSessionsDialog\n currentSessionId={currentSessionId}\n open={openLogoutAllSessionsDialog}\n onOpenChange={setOpenLogoutAllSessionsDialog}\n />\n </Flex>\n );\n};\n\nexport const UserSessionsLoading: React.FC = () => {\n return (\n <Card size=\"2\">\n <Flex gap=\"4\" align=\"center\">\n <Skeleton>\n <IconPanel />\n </Skeleton>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n <Skeleton>The location</Skeleton>\n </Text>\n\n <Text size=\"2\" color=\"gray\" as=\"p\">\n <Skeleton>The location</Skeleton>\n </Text>\n </Flex>\n </Flex>\n </Card>\n );\n};\n\nexport function UserSessionsError({ error }: { error: unknown }) {\n return (\n <Card size=\"2\">\n <GenericError error={error} />\n </Card>\n );\n}\n\ninterface UserSessionProps {\n session: ActiveSession;\n isCurrentSession?: boolean;\n onSignOut?: (session: ActiveSession) => void;\n}\n\nconst UserSession = ({\n session,\n isCurrentSession = false,\n onSignOut,\n}: UserSessionProps) => {\n const userAgent = parseUserAgent(session.userAgent);\n const userLocation = getUserLocation(\n session.currentLocation,\n session.ipAddress,\n );\n\n return (\n <Flex gap=\"4\" align=\"center\">\n <IconPanel>\n {userAgent.isMobile ? <MobileIcon /> : <LaptopIcon />}\n </IconPanel>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n {userAgent.pretty}\n </Text>\n\n <Flex gap=\"1\" align=\"center\">\n <Text size=\"2\" color=\"gray\" as=\"p\">\n {userLocation}\n </Text>\n\n {isCurrentSession && <Badge ml=\"2\">This device</Badge>}\n\n {!isCurrentSession && session.lastActivityAt && (\n <>\n <Text size=\"2\" color=\"gray\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n Last seen{\" \"}\n {getComparativeReadableDate(\n new Date(),\n new Date(session.lastActivityAt),\n )}\n </Text>\n </>\n )}\n </Flex>\n </Flex>\n\n {!isCurrentSession && (\n <Flex ml=\"auto\" mr=\"2\">\n <Button\n variant=\"ghost\"\n onClick={() => {\n onSignOut?.(session);\n }}\n >\n Sign out\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n"],"mappings":"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","names":["clsx"]}
1
+ {"version":3,"sources":["../../../src/lib/user-sessions.tsx"],"sourcesContent":["\"use client\";\n\nimport { Box, Button, Card, Flex, Text } from \"@radix-ui/themes\";\nimport { Badge, SecondaryButton, Skeleton } from \"./elements.js\";\nimport {\n getComparativeReadableDate,\n getDomProps,\n getUserLocation,\n parseUserAgent,\n type WidgetRootDomProps,\n type WidgetRootState,\n} from \"./utils.js\";\nimport { LogoutDialog } from \"./logout-dialog.js\";\nimport { LogoutAllSessionsDialog } from \"./logout-all-sessions-dialog.js\";\nimport { ActiveSession } from \"../api/endpoint.js\";\nimport * as CardList from \"./card-list.js\";\nimport { IconPanel } from \"./icon-panel.js\";\nimport { useState } from \"react\";\nimport { GenericError } from \"./generic-error.js\";\nimport { LaptopIcon, MobileIcon } from \"@radix-ui/react-icons\";\n\ninterface UserSessionsProps extends WidgetRootDomProps {\n sessionsData: ActiveSession[];\n currentSessionId: string;\n}\n\nconst UserSessions = ({\n sessionsData: sessions,\n currentSessionId,\n ...domProps\n}: UserSessionsProps) => {\n const currentSession = sessions.find(\n (session) => session.id === currentSessionId,\n );\n const otherSessions = sessions.filter(\n (session) => session.id !== currentSessionId,\n );\n const [openLogoutDialog, setOpenLogoutDialog] = useState(false);\n const [sessionToSignOut, setSessionToSignOut] =\n useState<ActiveSession | null>(null);\n const [openLogoutAllSessionsDialog, setOpenLogoutAllSessionsDialog] =\n useState(false);\n\n return (\n <Flex\n direction=\"column\"\n gap=\"4\"\n {...getWidgetRootDomProps(\"resolved\", domProps)}\n >\n <CardList.Root>\n {currentSession && (\n <CardList.Item>\n <UserSession session={currentSession} isCurrentSession />\n </CardList.Item>\n )}\n\n {otherSessions.map((session) => (\n <CardList.Item key={session.id}>\n <UserSession\n session={session}\n onSignOut={() => {\n setSessionToSignOut(session);\n setOpenLogoutDialog(true);\n }}\n />\n </CardList.Item>\n ))}\n </CardList.Root>\n\n {sessions.length > 1 && (\n <Card size=\"2\">\n <Flex gap=\"2\" justify=\"between\" align=\"center\">\n <Box>\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\">\n Sign out of all other devices\n </Text>\n <Text size=\"2\" color=\"gray\" as=\"p\">\n Remove access from all devices except this one\n </Text>\n </Box>\n\n <SecondaryButton\n onClick={() => {\n setOpenLogoutAllSessionsDialog(true);\n }}\n >\n Sign out\n </SecondaryButton>\n </Flex>\n </Card>\n )}\n\n {sessionToSignOut && (\n <LogoutDialog\n session={sessionToSignOut}\n open={openLogoutDialog}\n onOpenChange={setOpenLogoutDialog}\n />\n )}\n\n <LogoutAllSessionsDialog\n currentSessionId={currentSessionId}\n open={openLogoutAllSessionsDialog}\n onOpenChange={setOpenLogoutAllSessionsDialog}\n />\n </Flex>\n );\n};\n\ninterface UserSessionsLoadingProps extends WidgetRootDomProps {}\n\nconst UserSessionsLoading: React.FC<UserSessionsLoadingProps> = (props) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"loading\", props)}>\n <Flex gap=\"4\" align=\"center\">\n <Skeleton>\n <IconPanel />\n </Skeleton>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n <Skeleton>The location</Skeleton>\n </Text>\n\n <Text size=\"2\" color=\"gray\" as=\"p\">\n <Skeleton>The location</Skeleton>\n </Text>\n </Flex>\n </Flex>\n </Card>\n );\n};\n\ninterface UserSessionsErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UserSessionsError: React.FC<UserSessionsErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"error\", domProps)}>\n <GenericError error={error} />\n </Card>\n );\n};\n\ninterface UserSessionProps {\n session: ActiveSession;\n isCurrentSession?: boolean;\n onSignOut?: (session: ActiveSession) => void;\n}\n\nconst UserSession = ({\n session,\n isCurrentSession = false,\n onSignOut,\n}: UserSessionProps) => {\n const userAgent = parseUserAgent(session.userAgent);\n const userLocation = getUserLocation(\n session.currentLocation,\n session.ipAddress,\n );\n\n return (\n <Flex gap=\"4\" align=\"center\">\n <IconPanel>\n {userAgent.isMobile ? <MobileIcon /> : <LaptopIcon />}\n </IconPanel>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n {userAgent.pretty}\n </Text>\n\n <Flex gap=\"1\" align=\"center\">\n <Text size=\"2\" color=\"gray\" as=\"p\">\n {userLocation}\n </Text>\n\n {isCurrentSession && <Badge ml=\"2\">This device</Badge>}\n\n {!isCurrentSession && session.lastActivityAt && (\n <>\n <Text size=\"2\" color=\"gray\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n Last seen{\" \"}\n {getComparativeReadableDate(\n new Date(),\n new Date(session.lastActivityAt),\n )}\n </Text>\n </>\n )}\n </Flex>\n </Flex>\n\n {!isCurrentSession && (\n <Flex ml=\"auto\" mr=\"2\">\n <Button\n variant=\"ghost\"\n onClick={() => {\n onSignOut?.(session);\n }}\n >\n Sign out\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"user-sessions\",\n widgetState: state,\n });\n}\n\nexport type { UserSessionsLoadingProps, UserSessionsErrorProps };\nexport { UserSessions, UserSessionsLoading, UserSessionsError };\n"],"mappings":"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","names":[]}
@@ -1,16 +1,20 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { WidgetRootDomProps } from './utils.cjs';
2
3
  import { ActiveSession } from '../api/endpoint.cjs';
3
4
  import '@tanstack/react-query';
4
5
  import '../api/widgets-api-client.cjs';
5
6
 
6
- interface UserSessionsProps {
7
+ interface UserSessionsProps extends WidgetRootDomProps {
7
8
  sessionsData: ActiveSession[];
8
9
  currentSessionId: string;
9
10
  }
10
- declare const UserSessions: ({ sessionsData: sessions, currentSessionId, }: UserSessionsProps) => react_jsx_runtime.JSX.Element;
11
- declare const UserSessionsLoading: React.FC;
12
- declare function UserSessionsError({ error }: {
11
+ declare const UserSessions: ({ sessionsData: sessions, currentSessionId, ...domProps }: UserSessionsProps) => react_jsx_runtime.JSX.Element;
12
+ interface UserSessionsLoadingProps extends WidgetRootDomProps {
13
+ }
14
+ declare const UserSessionsLoading: React.FC<UserSessionsLoadingProps>;
15
+ interface UserSessionsErrorProps extends WidgetRootDomProps {
13
16
  error: unknown;
14
- }): react_jsx_runtime.JSX.Element;
17
+ }
18
+ declare const UserSessionsError: React.FC<UserSessionsErrorProps>;
15
19
 
16
- export { UserSessions, UserSessionsError, UserSessionsLoading };
20
+ export { UserSessions, UserSessionsError, type UserSessionsErrorProps, UserSessionsLoading, type UserSessionsLoadingProps };