@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
@@ -0,0 +1,334 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import {
4
+ AlertDialog,
5
+ Button,
6
+ Callout,
7
+ Card,
8
+ Dialog,
9
+ DropdownMenu,
10
+ Flex,
11
+ IconButton,
12
+ Skeleton,
13
+ Text
14
+ } from "@radix-ui/themes";
15
+ import { useCallback, useEffect, useState } from "react";
16
+ import * as CardList from "./card-list.js";
17
+ import { ProviderIcon } from "./provider-icon.js";
18
+ import {
19
+ DotsHorizontalIcon,
20
+ ExternalLinkIcon,
21
+ GlobeIcon,
22
+ LockClosedIcon
23
+ } from "@radix-ui/react-icons";
24
+ import {
25
+ DestructiveButton,
26
+ DestructiveMenuItem,
27
+ PrimaryButton,
28
+ SecondaryButton
29
+ } from "./elements.js";
30
+ import { IconPanel } from "./icon-panel.js";
31
+ import { Status } from "./status.js";
32
+ import {
33
+ useDeleteDataInstallation,
34
+ useGetDataIntegrationAuthorizeUrlHook,
35
+ getMyDataIntegrationsQueryKey,
36
+ DataInstallationState,
37
+ useSettings
38
+ } from "../api/endpoint.js";
39
+ import { useQueryClient } from "@tanstack/react-query";
40
+ import { GenericError } from "./generic-error.js";
41
+ import { getDomProps } from "./utils.js";
42
+ const useOpenDataIntegrationAuthorizeUrl = (integration) => {
43
+ const getDataIntegrationAuthorizeUrl = useGetDataIntegrationAuthorizeUrlHook();
44
+ const settings = useSettings();
45
+ const baseUrl = settings.data?.authkitOrigin ?? "";
46
+ return useCallback(async () => {
47
+ const win = window.open(`${baseUrl}/pipes/redirecting`, "_blank");
48
+ const { url } = await getDataIntegrationAuthorizeUrl(integration.slug);
49
+ if (win) {
50
+ win.location = url;
51
+ }
52
+ }, [getDataIntegrationAuthorizeUrl, integration.slug, baseUrl]);
53
+ };
54
+ function ConnectIntegrationButton({
55
+ integration
56
+ }) {
57
+ const eventHandler = useOpenDataIntegrationAuthorizeUrl(integration);
58
+ return /* @__PURE__ */ jsx(
59
+ Button,
60
+ {
61
+ onClick: async () => {
62
+ try {
63
+ await eventHandler();
64
+ } catch {
65
+ }
66
+ },
67
+ variant: "outline",
68
+ size: "2",
69
+ color: "gray",
70
+ children: "Connect"
71
+ }
72
+ );
73
+ }
74
+ function SharedCredentialsConnectIntegrationButton({
75
+ integration
76
+ }) {
77
+ const settings = useSettings();
78
+ const [open, setOpen] = useState(false);
79
+ const eventHandler = useOpenDataIntegrationAuthorizeUrl(integration);
80
+ const logo = settings.data?.logoDarkPath ?? settings.data?.logoLightPath;
81
+ const appName = settings.data?.teamName ?? "This application";
82
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
83
+ /* @__PURE__ */ jsx(Dialog.Root, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs(Dialog.Content, { maxWidth: "430px", children: [
84
+ /* @__PURE__ */ jsxs(Flex, { justify: "center", align: "center", gap: "2", mt: "2", children: [
85
+ logo && /* @__PURE__ */ jsxs(Fragment, { children: [
86
+ /* @__PURE__ */ jsx(
87
+ IconPanel,
88
+ {
89
+ color: "panel",
90
+ style: { width: "48px", height: "48px" },
91
+ children: /* @__PURE__ */ jsx(
92
+ ProviderIcon,
93
+ {
94
+ size: "2",
95
+ provider: "workos",
96
+ style: { backgroundImage: `url(${logo})` }
97
+ }
98
+ )
99
+ }
100
+ ),
101
+ /* @__PURE__ */ jsx(DotsHorizontalIcon, {})
102
+ ] }),
103
+ /* @__PURE__ */ jsx(
104
+ IconPanel,
105
+ {
106
+ color: "panel",
107
+ style: {
108
+ ...logo ? { borderWidth: 0 } : void 0,
109
+ width: "48px",
110
+ height: "48px"
111
+ },
112
+ children: /* @__PURE__ */ jsx(ProviderIcon, { size: "2", provider: "workos" })
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx(DotsHorizontalIcon, {}),
116
+ /* @__PURE__ */ jsx(IconPanel, { color: "panel", style: { width: "48px", height: "48px" }, children: /* @__PURE__ */ jsx(ProviderIcon, { size: "2", provider: integration.integrationType }) })
117
+ ] }),
118
+ /* @__PURE__ */ jsxs(Dialog.Title, { size: "2", mt: "5", mb: "5", weight: "bold", align: "center", children: [
119
+ appName,
120
+ " uses WorkOS to connect to ",
121
+ integration.name,
122
+ "."
123
+ ] }),
124
+ /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "4", children: [
125
+ /* @__PURE__ */ jsxs(Flex, { gap: "2", align: "center", children: [
126
+ /* @__PURE__ */ jsx(
127
+ IconPanel,
128
+ {
129
+ color: "gray",
130
+ style: { width: "32px", height: "32px" },
131
+ children: /* @__PURE__ */ jsx(GlobeIcon, {})
132
+ }
133
+ ),
134
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
135
+ /* @__PURE__ */ jsxs(Text, { size: "1", weight: "bold", children: [
136
+ "You'll be redirected to sign in with ",
137
+ integration.name,
138
+ "."
139
+ ] }),
140
+ /* @__PURE__ */ jsx(Text, { size: "1", children: "Authorize access to connect your account." })
141
+ ] })
142
+ ] }),
143
+ /* @__PURE__ */ jsxs(Flex, { gap: "2", align: "center", children: [
144
+ /* @__PURE__ */ jsx(
145
+ IconPanel,
146
+ {
147
+ color: "gray",
148
+ style: { width: "32px", height: "32px" },
149
+ children: /* @__PURE__ */ jsx(LockClosedIcon, {})
150
+ }
151
+ ),
152
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
153
+ /* @__PURE__ */ jsx(Text, { size: "1", weight: "bold", children: "Your credentials remain secure." }),
154
+ /* @__PURE__ */ jsx(Text, { size: "1", children: "WorkOS never sees your credentials." })
155
+ ] })
156
+ ] })
157
+ ] }) }),
158
+ /* @__PURE__ */ jsxs(Flex, { justify: "end", gap: "3", mt: "5", children: [
159
+ /* @__PURE__ */ jsx(Dialog.Close, { children: /* @__PURE__ */ jsx(SecondaryButton, { children: "Cancel" }) }),
160
+ /* @__PURE__ */ jsxs(
161
+ PrimaryButton,
162
+ {
163
+ onClick: async () => {
164
+ try {
165
+ await eventHandler();
166
+ setOpen(false);
167
+ } catch {
168
+ }
169
+ },
170
+ children: [
171
+ "Connect ",
172
+ /* @__PURE__ */ jsx(ExternalLinkIcon, {})
173
+ ]
174
+ }
175
+ )
176
+ ] })
177
+ ] }) }),
178
+ /* @__PURE__ */ jsx(
179
+ Button,
180
+ {
181
+ onClick: () => setOpen(true),
182
+ variant: "outline",
183
+ size: "2",
184
+ color: "gray",
185
+ children: "Connect"
186
+ }
187
+ )
188
+ ] });
189
+ }
190
+ function ProviderStatus({ integration }) {
191
+ const [disconnectOpen, setDisconnectOpen] = useState(false);
192
+ const authorizeEventHandler = useOpenDataIntegrationAuthorizeUrl(integration);
193
+ if (integration.installation) {
194
+ const text = integration.installation.state === DataInstallationState.connected ? "Connected" : "Requires reauthorization";
195
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
196
+ /* @__PURE__ */ jsx(
197
+ DisconnectAccountDialog,
198
+ {
199
+ integration,
200
+ installation: integration.installation,
201
+ open: disconnectOpen,
202
+ onOpenChange: setDisconnectOpen
203
+ }
204
+ ),
205
+ /* @__PURE__ */ jsx(
206
+ Status,
207
+ {
208
+ state: integration.installation.state === DataInstallationState.connected ? "success" : "error",
209
+ children: text
210
+ }
211
+ ),
212
+ /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
213
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(
214
+ IconButton,
215
+ {
216
+ radius: "full",
217
+ variant: "ghost",
218
+ color: "gray",
219
+ title: "Pipe actions",
220
+ children: /* @__PURE__ */ jsx(DotsHorizontalIcon, {})
221
+ }
222
+ ) }),
223
+ /* @__PURE__ */ jsxs(DropdownMenu.Content, { align: "end", children: [
224
+ integration.installation.state === DataInstallationState.needs_reauthorization && /* @__PURE__ */ jsx(
225
+ DropdownMenu.Item,
226
+ {
227
+ onClick: async () => {
228
+ try {
229
+ await authorizeEventHandler();
230
+ } catch {
231
+ }
232
+ },
233
+ children: /* @__PURE__ */ jsxs(Flex, { gap: "4", width: "100%", justify: "between", align: "center", children: [
234
+ "Reauthorize",
235
+ /* @__PURE__ */ jsx(ExternalLinkIcon, {})
236
+ ] })
237
+ }
238
+ ),
239
+ /* @__PURE__ */ jsx(DestructiveMenuItem, { onClick: () => setDisconnectOpen(true), children: "Disconnect account" })
240
+ ] })
241
+ ] })
242
+ ] });
243
+ }
244
+ if (integration.credentialsType === "shared") {
245
+ return /* @__PURE__ */ jsx(SharedCredentialsConnectIntegrationButton, { integration });
246
+ }
247
+ return /* @__PURE__ */ jsx(ConnectIntegrationButton, { integration });
248
+ }
249
+ function DisconnectAccountDialog({
250
+ integration,
251
+ installation,
252
+ open,
253
+ onOpenChange
254
+ }) {
255
+ const queryClient = useQueryClient();
256
+ const {
257
+ mutate: deleteDataInstallation,
258
+ error,
259
+ reset,
260
+ isPending
261
+ } = useDeleteDataInstallation({
262
+ mutation: {
263
+ onSuccess: () => {
264
+ onOpenChange(false);
265
+ queryClient.invalidateQueries({
266
+ queryKey: getMyDataIntegrationsQueryKey()
267
+ });
268
+ }
269
+ }
270
+ });
271
+ useEffect(() => {
272
+ if (open) {
273
+ reset();
274
+ }
275
+ }, [open, reset]);
276
+ return /* @__PURE__ */ jsx(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(AlertDialog.Content, { style: { width: "80vw", maxWidth: "520px" }, children: [
277
+ /* @__PURE__ */ jsx(AlertDialog.Title, { children: "Disconnect account" }),
278
+ error && /* @__PURE__ */ jsx(Callout.Root, { my: "5", color: "red", role: "alert", children: /* @__PURE__ */ jsx(Callout.Text, { children: "An error occurred while disconnecting your account. Please refresh the page and try again." }) }),
279
+ /* @__PURE__ */ jsxs(AlertDialog.Description, { children: [
280
+ "Are you sure you want to disconnect your",
281
+ " ",
282
+ /* @__PURE__ */ jsx(Text, { as: "span", weight: "bold", children: integration.name }),
283
+ " ",
284
+ "account?"
285
+ ] }),
286
+ /* @__PURE__ */ jsxs(Flex, { gap: "3", justify: "end", mt: "5", children: [
287
+ /* @__PURE__ */ jsx(AlertDialog.Cancel, { children: /* @__PURE__ */ jsx(SecondaryButton, { children: "Cancel" }) }),
288
+ /* @__PURE__ */ jsx(
289
+ DestructiveButton,
290
+ {
291
+ disabled: isPending,
292
+ loading: isPending,
293
+ onClick: () => deleteDataInstallation({ installationId: installation.id }),
294
+ children: "Disconnect"
295
+ }
296
+ )
297
+ ] })
298
+ ] }) });
299
+ }
300
+ const PipesLoading = ({ count, ...domProps }) => {
301
+ return /* @__PURE__ */ jsx(CardList.Root, { ...getWidgetRootDomProps("loading", domProps), children: Array.from({ length: count }).map((_, index) => /* @__PURE__ */ jsx(CardList.Item, { children: /* @__PURE__ */ jsxs(Flex, { direction: "row", justify: "between", align: "center", gap: "2", children: [
302
+ /* @__PURE__ */ jsxs(Flex, { gap: "4", align: "center", children: [
303
+ /* @__PURE__ */ jsx(Skeleton, { children: /* @__PURE__ */ jsx(IconPanel, { children: /* @__PURE__ */ jsx(ProviderIcon, { provider: "google" }) }) }),
304
+ /* @__PURE__ */ jsx(Skeleton, { children: /* @__PURE__ */ jsx(Text, { size: "2", weight: "bold", children: "Google Drive" }) })
305
+ ] }),
306
+ /* @__PURE__ */ jsx(Skeleton, { children: /* @__PURE__ */ jsx(Button, { disabled: true, children: "Connect" }) })
307
+ ] }) }, index)) });
308
+ };
309
+ const Pipes = ({ integrations, ...domProps }) => {
310
+ return /* @__PURE__ */ jsx(CardList.Root, { ...getWidgetRootDomProps("resolved", domProps), children: integrations.map((integration) => /* @__PURE__ */ jsx(CardList.Item, { children: /* @__PURE__ */ jsxs(Flex, { direction: "row", justify: "between", align: "center", gap: "2", children: [
311
+ /* @__PURE__ */ jsxs(Flex, { gap: "4", align: "center", children: [
312
+ /* @__PURE__ */ jsx(IconPanel, { color: "panel", children: /* @__PURE__ */ jsx(ProviderIcon, { provider: integration.integrationType }) }),
313
+ /* @__PURE__ */ jsx(Text, { size: "2", weight: "bold", children: integration.name })
314
+ ] }),
315
+ /* @__PURE__ */ jsx(ProviderStatus, { integration })
316
+ ] }) }, integration.id)) });
317
+ };
318
+ const PipesError = ({ error, ...domProps }) => {
319
+ return /* @__PURE__ */ jsx(Card, { size: "2", ...getWidgetRootDomProps("error", domProps), children: /* @__PURE__ */ jsx(GenericError, { error }) });
320
+ };
321
+ function getWidgetRootDomProps(state, domProps) {
322
+ return getDomProps({
323
+ ...domProps,
324
+ isWidgetRoot: true,
325
+ widgetId: "pipes",
326
+ widgetState: state
327
+ });
328
+ }
329
+ export {
330
+ Pipes,
331
+ PipesError,
332
+ PipesLoading
333
+ };
334
+ //# sourceMappingURL=pipes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/pipes.tsx"],"sourcesContent":["\"use client\";\nimport {\n AlertDialog,\n Button,\n Callout,\n Card,\n Dialog,\n DropdownMenu,\n Flex,\n IconButton,\n Skeleton,\n Text,\n} from \"@radix-ui/themes\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport * as CardList from \"./card-list.js\";\nimport { ProviderIcon } from \"./provider-icon.js\";\nimport {\n DotsHorizontalIcon,\n ExternalLinkIcon,\n GlobeIcon,\n LockClosedIcon,\n} from \"@radix-ui/react-icons\";\nimport {\n DestructiveButton,\n DestructiveMenuItem,\n PrimaryButton,\n SecondaryButton,\n} from \"./elements.js\";\nimport { IconPanel } from \"./icon-panel.js\";\nimport { Status } from \"./status.js\";\nimport {\n DataIntegration,\n DataInstallation,\n useDeleteDataInstallation,\n useGetDataIntegrationAuthorizeUrlHook,\n getMyDataIntegrationsQueryKey,\n DataInstallationState,\n useSettings,\n} from \"../api/endpoint.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { GenericError } from \"./generic-error.js\";\nimport { getDomProps, WidgetRootDomProps, WidgetRootState } from \"./utils.js\";\n\ninterface PipesProps extends WidgetRootDomProps {\n integrations: DataIntegration[];\n}\n\nconst useOpenDataIntegrationAuthorizeUrl = (integration: DataIntegration) => {\n const getDataIntegrationAuthorizeUrl =\n useGetDataIntegrationAuthorizeUrlHook();\n const settings = useSettings();\n const baseUrl = settings.data?.authkitOrigin ?? \"\";\n\n return useCallback(async () => {\n // need to do this synchronously in the event handler to avoid popup blocker notifications\n const win = window.open(`${baseUrl}/pipes/redirecting`, \"_blank\");\n // caller will catch\n const { url } = await getDataIntegrationAuthorizeUrl(integration.slug);\n if (win) {\n win.location = url;\n }\n }, [getDataIntegrationAuthorizeUrl, integration.slug, baseUrl]);\n};\n\nfunction ConnectIntegrationButton({\n integration,\n}: {\n integration: DataIntegration;\n}) {\n const eventHandler = useOpenDataIntegrationAuthorizeUrl(integration);\n\n return (\n <Button\n onClick={async () => {\n try {\n await eventHandler();\n } catch {\n // pass - error displayed in new tab\n }\n }}\n variant=\"outline\"\n size=\"2\"\n color=\"gray\"\n >\n Connect\n </Button>\n );\n}\n\nfunction SharedCredentialsConnectIntegrationButton({\n integration,\n}: {\n integration: DataIntegration;\n}) {\n const settings = useSettings();\n const [open, setOpen] = useState(false);\n const eventHandler = useOpenDataIntegrationAuthorizeUrl(integration);\n\n const logo = settings.data?.logoDarkPath ?? settings.data?.logoLightPath;\n const appName = settings.data?.teamName ?? \"This application\";\n\n return (\n <>\n <Dialog.Root open={open} onOpenChange={setOpen}>\n <Dialog.Content maxWidth=\"430px\">\n <Flex justify=\"center\" align=\"center\" gap=\"2\" mt=\"2\">\n {logo && (\n <>\n <IconPanel\n color=\"panel\"\n style={{ width: \"48px\", height: \"48px\" }}\n >\n <ProviderIcon\n size=\"2\"\n provider=\"workos\"\n style={{ backgroundImage: `url(${logo})` }}\n />\n </IconPanel>\n <DotsHorizontalIcon />\n </>\n )}\n <IconPanel\n color=\"panel\"\n style={{\n ...(logo ? { borderWidth: 0 } : undefined),\n width: \"48px\",\n height: \"48px\",\n }}\n >\n <ProviderIcon size=\"2\" provider=\"workos\" />\n </IconPanel>\n <DotsHorizontalIcon />\n <IconPanel color=\"panel\" style={{ width: \"48px\", height: \"48px\" }}>\n <ProviderIcon size=\"2\" provider={integration.integrationType} />\n </IconPanel>\n </Flex>\n <Dialog.Title size=\"2\" mt=\"5\" mb=\"5\" weight={\"bold\"} align=\"center\">\n {appName} uses WorkOS to connect to {integration.name}.\n </Dialog.Title>\n <Card>\n <Flex direction=\"column\" gap=\"4\">\n <Flex gap=\"2\" align=\"center\">\n <IconPanel\n color=\"gray\"\n style={{ width: \"32px\", height: \"32px\" }}\n >\n <GlobeIcon />\n </IconPanel>\n <Flex direction=\"column\">\n <Text size=\"1\" weight=\"bold\">\n You&apos;ll be redirected to sign in with {integration.name}\n .\n </Text>\n <Text size=\"1\">\n Authorize access to connect your account.\n </Text>\n </Flex>\n </Flex>\n <Flex gap=\"2\" align=\"center\">\n <IconPanel\n color=\"gray\"\n style={{ width: \"32px\", height: \"32px\" }}\n >\n <LockClosedIcon />\n </IconPanel>\n <Flex direction=\"column\">\n <Text size=\"1\" weight=\"bold\">\n Your credentials remain secure.\n </Text>\n <Text size=\"1\">WorkOS never sees your credentials.</Text>\n </Flex>\n </Flex>\n </Flex>\n </Card>\n <Flex justify=\"end\" gap=\"3\" mt=\"5\">\n <Dialog.Close>\n <SecondaryButton>Cancel</SecondaryButton>\n </Dialog.Close>\n <PrimaryButton\n onClick={async () => {\n try {\n await eventHandler();\n setOpen(false);\n } catch {\n // pass - error displayed in new tab\n }\n }}\n >\n Connect <ExternalLinkIcon />\n </PrimaryButton>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n <Button\n onClick={() => setOpen(true)}\n variant=\"outline\"\n size=\"2\"\n color=\"gray\"\n >\n Connect\n </Button>\n </>\n );\n}\n\nfunction ProviderStatus({ integration }: { integration: DataIntegration }) {\n const [disconnectOpen, setDisconnectOpen] = useState(false);\n const authorizeEventHandler = useOpenDataIntegrationAuthorizeUrl(integration);\n\n if (integration.installation) {\n const text =\n integration.installation.state === DataInstallationState.connected\n ? \"Connected\"\n : \"Requires reauthorization\";\n\n return (\n <>\n <DisconnectAccountDialog\n integration={integration}\n installation={integration.installation}\n open={disconnectOpen}\n onOpenChange={setDisconnectOpen}\n />\n <Status\n state={\n integration.installation.state === DataInstallationState.connected\n ? \"success\"\n : \"error\"\n }\n >\n {text}\n </Status>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <IconButton\n radius=\"full\"\n variant=\"ghost\"\n color=\"gray\"\n title=\"Pipe actions\"\n >\n <DotsHorizontalIcon />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {integration.installation.state ===\n DataInstallationState.needs_reauthorization && (\n <DropdownMenu.Item\n onClick={async () => {\n try {\n await authorizeEventHandler();\n } catch {\n // pass - error displayed in new tab\n }\n }}\n >\n <Flex gap=\"4\" width=\"100%\" justify=\"between\" align=\"center\">\n Reauthorize\n <ExternalLinkIcon />\n </Flex>\n </DropdownMenu.Item>\n )}\n <DestructiveMenuItem onClick={() => setDisconnectOpen(true)}>\n Disconnect account\n </DestructiveMenuItem>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </>\n );\n }\n\n if (integration.credentialsType === \"shared\") {\n return (\n <SharedCredentialsConnectIntegrationButton integration={integration} />\n );\n }\n\n return <ConnectIntegrationButton integration={integration} />;\n}\n\nfunction DisconnectAccountDialog({\n integration,\n installation,\n open,\n onOpenChange,\n}: {\n integration: DataIntegration;\n installation: DataInstallation;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const queryClient = useQueryClient();\n const {\n mutate: deleteDataInstallation,\n error,\n reset,\n isPending,\n } = useDeleteDataInstallation({\n mutation: {\n onSuccess: () => {\n onOpenChange(false);\n queryClient.invalidateQueries({\n queryKey: getMyDataIntegrationsQueryKey(),\n });\n },\n },\n });\n\n useEffect(() => {\n if (open) {\n reset();\n }\n }, [open, reset]);\n\n return (\n <AlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content style={{ width: \"80vw\", maxWidth: \"520px\" }}>\n <AlertDialog.Title>Disconnect account</AlertDialog.Title>\n {error && (\n <Callout.Root my=\"5\" color=\"red\" role=\"alert\">\n <Callout.Text>\n An error occurred while disconnecting your account. Please refresh\n the page and try again.\n </Callout.Text>\n </Callout.Root>\n )}\n <AlertDialog.Description>\n Are you sure you want to disconnect your{\" \"}\n <Text as=\"span\" weight=\"bold\">\n {integration.name}\n </Text>{\" \"}\n account?\n </AlertDialog.Description>\n <Flex gap=\"3\" justify=\"end\" mt=\"5\">\n <AlertDialog.Cancel>\n <SecondaryButton>Cancel</SecondaryButton>\n </AlertDialog.Cancel>\n <DestructiveButton\n disabled={isPending}\n loading={isPending}\n onClick={() =>\n deleteDataInstallation({ installationId: installation.id })\n }\n >\n Disconnect\n </DestructiveButton>\n </Flex>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n\ninterface PipesLoadingProps extends WidgetRootDomProps {\n count: number;\n}\n\nconst PipesLoading: React.FC<PipesLoadingProps> = ({ count, ...domProps }) => {\n return (\n <CardList.Root {...getWidgetRootDomProps(\"loading\", domProps)}>\n {Array.from({ length: count }).map((_, index) => (\n <CardList.Item key={index}>\n <Flex direction=\"row\" justify=\"between\" align=\"center\" gap=\"2\">\n <Flex gap=\"4\" align=\"center\">\n <Skeleton>\n <IconPanel>\n <ProviderIcon provider=\"google\" />\n </IconPanel>\n </Skeleton>\n <Skeleton>\n <Text size=\"2\" weight=\"bold\">\n Google Drive\n </Text>\n </Skeleton>\n </Flex>\n <Skeleton>\n <Button disabled>Connect</Button>\n </Skeleton>\n </Flex>\n </CardList.Item>\n ))}\n </CardList.Root>\n );\n};\n\nconst Pipes: React.FC<PipesProps> = ({ integrations, ...domProps }) => {\n return (\n <CardList.Root {...getWidgetRootDomProps(\"resolved\", domProps)}>\n {integrations.map((integration) => (\n <CardList.Item key={integration.id}>\n <Flex direction=\"row\" justify=\"between\" align=\"center\" gap=\"2\">\n <Flex gap=\"4\" align=\"center\">\n <IconPanel color=\"panel\">\n <ProviderIcon provider={integration.integrationType} />\n </IconPanel>\n <Text size=\"2\" weight=\"bold\">\n {integration.name}\n </Text>\n </Flex>\n <ProviderStatus integration={integration} />\n </Flex>\n </CardList.Item>\n ))}\n </CardList.Root>\n );\n};\n\ninterface PipesErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst PipesError: React.FC<PipesErrorProps> = ({ error, ...domProps }) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"error\", domProps)}>\n <GenericError error={error} />\n </Card>\n );\n};\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"pipes\",\n widgetState: state,\n });\n}\n\nexport type { PipesProps, PipesLoadingProps, PipesErrorProps };\nexport { Pipes, PipesLoading, PipesError };\n"],"mappings":";AAwEI,SAmCU,UAnCV,KAmCU,YAnCV;AAvEJ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa,WAAW,gBAAgB;AACjD,YAAY,cAAc;AAC1B,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,mBAAwD;AAMjE,MAAM,qCAAqC,CAAC,gBAAiC;AAC3E,QAAM,iCACJ,sCAAsC;AACxC,QAAM,WAAW,YAAY;AAC7B,QAAM,UAAU,SAAS,MAAM,iBAAiB;AAEhD,SAAO,YAAY,YAAY;AAE7B,UAAM,MAAM,OAAO,KAAK,GAAG,OAAO,sBAAsB,QAAQ;AAEhE,UAAM,EAAE,IAAI,IAAI,MAAM,+BAA+B,YAAY,IAAI;AACrE,QAAI,KAAK;AACP,UAAI,WAAW;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,gCAAgC,YAAY,MAAM,OAAO,CAAC;AAChE;AAEA,SAAS,yBAAyB;AAAA,EAChC;AACF,GAEG;AACD,QAAM,eAAe,mCAAmC,WAAW;AAEnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,YAAY;AACnB,YAAI;AACF,gBAAM,aAAa;AAAA,QACrB,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACP;AAAA;AAAA,EAED;AAEJ;AAEA,SAAS,0CAA0C;AAAA,EACjD;AACF,GAEG;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,eAAe,mCAAmC,WAAW;AAEnE,QAAM,OAAO,SAAS,MAAM,gBAAgB,SAAS,MAAM;AAC3D,QAAM,UAAU,SAAS,MAAM,YAAY;AAE3C,SACE,iCACE;AAAA,wBAAC,OAAO,MAAP,EAAY,MAAY,cAAc,SACrC,+BAAC,OAAO,SAAP,EAAe,UAAS,SACvB;AAAA,2BAAC,QAAK,SAAQ,UAAS,OAAM,UAAS,KAAI,KAAI,IAAG,KAC9C;AAAA,gBACC,iCACE;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,cAEvC;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAS;AAAA,kBACT,OAAO,EAAE,iBAAiB,OAAO,IAAI,IAAI;AAAA;AAAA,cAC3C;AAAA;AAAA,UACF;AAAA,UACA,oBAAC,sBAAmB;AAAA,WACtB;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,OAAO;AAAA,cACL,GAAI,OAAO,EAAE,aAAa,EAAE,IAAI;AAAA,cAChC,OAAO;AAAA,cACP,QAAQ;AAAA,YACV;AAAA,YAEA,8BAAC,gBAAa,MAAK,KAAI,UAAS,UAAS;AAAA;AAAA,QAC3C;AAAA,QACA,oBAAC,sBAAmB;AAAA,QACpB,oBAAC,aAAU,OAAM,SAAQ,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,GAC9D,8BAAC,gBAAa,MAAK,KAAI,UAAU,YAAY,iBAAiB,GAChE;AAAA,SACF;AAAA,MACA,qBAAC,OAAO,OAAP,EAAa,MAAK,KAAI,IAAG,KAAI,IAAG,KAAI,QAAQ,QAAQ,OAAM,UACxD;AAAA;AAAA,QAAQ;AAAA,QAA4B,YAAY;AAAA,QAAK;AAAA,SACxD;AAAA,MACA,oBAAC,QACC,+BAAC,QAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,6BAAC,QAAK,KAAI,KAAI,OAAM,UAClB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,cAEvC,8BAAC,aAAU;AAAA;AAAA,UACb;AAAA,UACA,qBAAC,QAAK,WAAU,UACd;AAAA,iCAAC,QAAK,MAAK,KAAI,QAAO,QAAO;AAAA;AAAA,cACgB,YAAY;AAAA,cAAK;AAAA,eAE9D;AAAA,YACA,oBAAC,QAAK,MAAK,KAAI,uDAEf;AAAA,aACF;AAAA,WACF;AAAA,QACA,qBAAC,QAAK,KAAI,KAAI,OAAM,UAClB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,cAEvC,8BAAC,kBAAe;AAAA;AAAA,UAClB;AAAA,UACA,qBAAC,QAAK,WAAU,UACd;AAAA,gCAAC,QAAK,MAAK,KAAI,QAAO,QAAO,6CAE7B;AAAA,YACA,oBAAC,QAAK,MAAK,KAAI,iDAAmC;AAAA,aACpD;AAAA,WACF;AAAA,SACF,GACF;AAAA,MACA,qBAAC,QAAK,SAAQ,OAAM,KAAI,KAAI,IAAG,KAC7B;AAAA,4BAAC,OAAO,OAAP,EACC,8BAAC,mBAAgB,oBAAM,GACzB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,YAAY;AACnB,kBAAI;AACF,sBAAM,aAAa;AACnB,wBAAQ,KAAK;AAAA,cACf,QAAQ;AAAA,cAER;AAAA,YACF;AAAA,YACD;AAAA;AAAA,cACS,oBAAC,oBAAiB;AAAA;AAAA;AAAA,QAC5B;AAAA,SACF;AAAA,OACF,GACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,QAAQ,IAAI;AAAA,QAC3B,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACP;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;AAEA,SAAS,eAAe,EAAE,YAAY,GAAqC;AACzE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,QAAM,wBAAwB,mCAAmC,WAAW;AAE5E,MAAI,YAAY,cAAc;AAC5B,UAAM,OACJ,YAAY,aAAa,UAAU,sBAAsB,YACrD,cACA;AAEN,WACE,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,cAAc,YAAY;AAAA,UAC1B,MAAM;AAAA,UACN,cAAc;AAAA;AAAA,MAChB;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OACE,YAAY,aAAa,UAAU,sBAAsB,YACrD,YACA;AAAA,UAGL;AAAA;AAAA,MACH;AAAA,MACA,qBAAC,aAAa,MAAb,EACC;AAAA,4BAAC,aAAa,SAAb,EACC;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,OAAM;AAAA,YAEN,8BAAC,sBAAmB;AAAA;AAAA,QACtB,GACF;AAAA,QACA,qBAAC,aAAa,SAAb,EAAqB,OAAM,OACzB;AAAA,sBAAY,aAAa,UACxB,sBAAsB,yBACtB;AAAA,YAAC,aAAa;AAAA,YAAb;AAAA,cACC,SAAS,YAAY;AACnB,oBAAI;AACF,wBAAM,sBAAsB;AAAA,gBAC9B,QAAQ;AAAA,gBAER;AAAA,cACF;AAAA,cAEA,+BAAC,QAAK,KAAI,KAAI,OAAM,QAAO,SAAQ,WAAU,OAAM,UAAS;AAAA;AAAA,gBAE1D,oBAAC,oBAAiB;AAAA,iBACpB;AAAA;AAAA,UACF;AAAA,UAEF,oBAAC,uBAAoB,SAAS,MAAM,kBAAkB,IAAI,GAAG,gCAE7D;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,YAAY,oBAAoB,UAAU;AAC5C,WACE,oBAAC,6CAA0C,aAA0B;AAAA,EAEzE;AAEA,SAAO,oBAAC,4BAAyB,aAA0B;AAC7D;AAEA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,cAAc,eAAe;AACnC,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,0BAA0B;AAAA,IAC5B,UAAU;AAAA,MACR,WAAW,MAAM;AACf,qBAAa,KAAK;AAClB,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,8BAA8B;AAAA,QAC1C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AACd,QAAI,MAAM;AACR,YAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,CAAC;AAEhB,SACE,oBAAC,YAAY,MAAZ,EAAiB,MAAY,cAC5B,+BAAC,YAAY,SAAZ,EAAoB,OAAO,EAAE,OAAO,QAAQ,UAAU,QAAQ,GAC7D;AAAA,wBAAC,YAAY,OAAZ,EAAkB,gCAAkB;AAAA,IACpC,SACC,oBAAC,QAAQ,MAAR,EAAa,IAAG,KAAI,OAAM,OAAM,MAAK,SACpC,8BAAC,QAAQ,MAAR,EAAa,wGAGd,GACF;AAAA,IAEF,qBAAC,YAAY,aAAZ,EAAwB;AAAA;AAAA,MACkB;AAAA,MACzC,oBAAC,QAAK,IAAG,QAAO,QAAO,QACpB,sBAAY,MACf;AAAA,MAAQ;AAAA,MAAI;AAAA,OAEd;AAAA,IACA,qBAAC,QAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAC7B;AAAA,0BAAC,YAAY,QAAZ,EACC,8BAAC,mBAAgB,oBAAM,GACzB;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,UAAU;AAAA,UACV,SAAS;AAAA,UACT,SAAS,MACP,uBAAuB,EAAE,gBAAgB,aAAa,GAAG,CAAC;AAAA,UAE7D;AAAA;AAAA,MAED;AAAA,OACF;AAAA,KACF,GACF;AAEJ;AAMA,MAAM,eAA4C,CAAC,EAAE,OAAO,GAAG,SAAS,MAAM;AAC5E,SACE,oBAAC,SAAS,MAAT,EAAe,GAAG,sBAAsB,WAAW,QAAQ,GACzD,gBAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,UACrC,oBAAC,SAAS,MAAT,EACC,+BAAC,QAAK,WAAU,OAAM,SAAQ,WAAU,OAAM,UAAS,KAAI,KACzD;AAAA,yBAAC,QAAK,KAAI,KAAI,OAAM,UAClB;AAAA,0BAAC,YACC,8BAAC,aACC,8BAAC,gBAAa,UAAS,UAAS,GAClC,GACF;AAAA,MACA,oBAAC,YACC,8BAAC,QAAK,MAAK,KAAI,QAAO,QAAO,0BAE7B,GACF;AAAA,OACF;AAAA,IACA,oBAAC,YACC,8BAAC,UAAO,UAAQ,MAAC,qBAAO,GAC1B;AAAA,KACF,KAjBkB,KAkBpB,CACD,GACH;AAEJ;AAEA,MAAM,QAA8B,CAAC,EAAE,cAAc,GAAG,SAAS,MAAM;AACrE,SACE,oBAAC,SAAS,MAAT,EAAe,GAAG,sBAAsB,YAAY,QAAQ,GAC1D,uBAAa,IAAI,CAAC,gBACjB,oBAAC,SAAS,MAAT,EACC,+BAAC,QAAK,WAAU,OAAM,SAAQ,WAAU,OAAM,UAAS,KAAI,KACzD;AAAA,yBAAC,QAAK,KAAI,KAAI,OAAM,UAClB;AAAA,0BAAC,aAAU,OAAM,SACf,8BAAC,gBAAa,UAAU,YAAY,iBAAiB,GACvD;AAAA,MACA,oBAAC,QAAK,MAAK,KAAI,QAAO,QACnB,sBAAY,MACf;AAAA,OACF;AAAA,IACA,oBAAC,kBAAe,aAA0B;AAAA,KAC5C,KAXkB,YAAY,EAYhC,CACD,GACH;AAEJ;AAMA,MAAM,aAAwC,CAAC,EAAE,OAAO,GAAG,SAAS,MAAM;AACxE,SACE,oBAAC,QAAK,MAAK,KAAK,GAAG,sBAAsB,SAAS,QAAQ,GACxD,8BAAC,gBAAa,OAAc,GAC9B;AAEJ;AAEA,SAAS,sBACP,OACA,UACA;AACA,SAAO,YAAY;AAAA,IACjB,GAAG;AAAA,IACH,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,EACf,CAAC;AACH;","names":[]}
@@ -1,9 +1,12 @@
1
1
  import { MarginProps } from '@radix-ui/themes/props';
2
2
  import * as React from 'react';
3
3
  import { IdentityProvider } from './identity-providers.js';
4
+ import { DataIntegrationIntegrationType } from '../api/endpoint.js';
5
+ import '@tanstack/react-query';
6
+ import '../api/widgets-api-client.js';
4
7
 
5
8
  interface ProviderIconProps extends React.ComponentPropsWithRef<"div">, MarginProps {
6
- provider: IdentityProvider;
9
+ provider: IdentityProvider | keyof typeof DataIntegrationIntegrationType;
7
10
  size?: "1" | "2" | "3" | "4";
8
11
  }
9
12
  declare const ProviderIcon: React.ForwardRefExoticComponent<Omit<ProviderIconProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -3,9 +3,6 @@ import { extractProps } from "@radix-ui/themes/helpers";
3
3
  import { marginPropDefs } from "@radix-ui/themes/props";
4
4
  import clsx from "clsx";
5
5
  import * as React from "react";
6
- import {
7
- isIdentityProvider
8
- } from "./identity-providers.js";
9
6
  const ProviderIcon = React.forwardRef(
10
7
  (props, forwardedRef) => {
11
8
  const {
@@ -14,11 +11,6 @@ const ProviderIcon = React.forwardRef(
14
11
  className,
15
12
  ...providerIconProps
16
13
  } = extractProps(props, marginPropDefs);
17
- if (!isIdentityProvider(provider)) {
18
- throw new TypeError(
19
- `ProviderIcon: "${provider}" is not a valid provider.`
20
- );
21
- }
22
14
  return /* @__PURE__ */ jsx(
23
15
  "div",
24
16
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/provider-icon.tsx"],"sourcesContent":["import { extractProps } from \"@radix-ui/themes/helpers\";\nimport { marginPropDefs, MarginProps } from \"@radix-ui/themes/props\";\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport {\n isIdentityProvider,\n type IdentityProvider,\n} from \"./identity-providers.js\";\n\ninterface ProviderIconProps\n extends React.ComponentPropsWithRef<\"div\">,\n MarginProps {\n provider: IdentityProvider;\n size?: \"1\" | \"2\" | \"3\" | \"4\";\n}\n\nconst ProviderIcon = React.forwardRef<HTMLDivElement, ProviderIconProps>(\n (props, forwardedRef) => {\n const {\n provider,\n size = \"4\",\n className,\n ...providerIconProps\n } = extractProps(props, marginPropDefs);\n\n if (!isIdentityProvider(provider)) {\n throw new TypeError(\n `ProviderIcon: \"${provider}\" is not a valid provider.`,\n );\n }\n\n return (\n <div\n {...providerIconProps}\n ref={forwardedRef}\n className={clsx(\"woswidgets-provider-icon\", `size-${size}`, className)}\n data-provider={provider}\n />\n );\n },\n);\n\nProviderIcon.displayName = \"ProviderIcon\";\n\nexport { ProviderIcon };\n"],"mappings":"AAgCM;AAhCN,SAAS,oBAAoB;AAC7B,SAAS,sBAAmC;AAC5C,OAAO,UAAU;AACjB,YAAY,WAAW;AACvB;AAAA,EACE;AAAA,OAEK;AASP,MAAM,eAAe,MAAM;AAAA,EACzB,CAAC,OAAO,iBAAiB;AACvB,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,GAAG;AAAA,IACL,IAAI,aAAa,OAAO,cAAc;AAEtC,QAAI,CAAC,mBAAmB,QAAQ,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,kBAAkB,QAAQ;AAAA,MAC5B;AAAA,IACF;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,KAAK;AAAA,QACL,WAAW,KAAK,4BAA4B,QAAQ,IAAI,IAAI,SAAS;AAAA,QACrE,iBAAe;AAAA;AAAA,IACjB;AAAA,EAEJ;AACF;AAEA,aAAa,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/provider-icon.tsx"],"sourcesContent":["import { extractProps } from \"@radix-ui/themes/helpers\";\nimport { marginPropDefs, type MarginProps } from \"@radix-ui/themes/props\";\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport type { IdentityProvider } from \"./identity-providers.js\";\nimport type { DataIntegrationIntegrationType } from \"../api/endpoint.js\";\n\ninterface ProviderIconProps\n extends React.ComponentPropsWithRef<\"div\">,\n MarginProps {\n provider: IdentityProvider | keyof typeof DataIntegrationIntegrationType;\n size?: \"1\" | \"2\" | \"3\" | \"4\";\n}\n\nconst ProviderIcon = React.forwardRef<HTMLDivElement, ProviderIconProps>(\n (props, forwardedRef) => {\n const {\n provider,\n size = \"4\",\n className,\n ...providerIconProps\n } = extractProps(props, marginPropDefs);\n\n return (\n <div\n {...providerIconProps}\n ref={forwardedRef}\n className={clsx(\"woswidgets-provider-icon\", `size-${size}`, className)}\n data-provider={provider}\n />\n );\n },\n);\n\nProviderIcon.displayName = \"ProviderIcon\";\n\nexport { ProviderIcon };\n"],"mappings":"AAwBM;AAxBN,SAAS,oBAAoB;AAC7B,SAAS,sBAAwC;AACjD,OAAO,UAAU;AACjB,YAAY,WAAW;AAWvB,MAAM,eAAe,MAAM;AAAA,EACzB,CAAC,OAAO,iBAAiB;AACvB,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,GAAG;AAAA,IACL,IAAI,aAAa,OAAO,cAAc;AAEtC,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,KAAK;AAAA,QACL,WAAW,KAAK,4BAA4B,QAAQ,IAAI,IAAI,SAAS;AAAA,QACrE,iBAAe;AAAA;AAAA,IACjB;AAAA,EAEJ;AACF;AAEA,aAAa,cAAc;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/save-button.tsx"],"sourcesContent":["import {\n ButtonProps,\n Flex,\n Slot,\n Slottable,\n Spinner,\n Text,\n} from \"@radix-ui/themes\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { namespaceClassNames } from \"./utils.js\";\n\nconst DONE_TIMEOUT_MS = 1500;\nconst SAVING_TIMEOUT_MS = 600;\n\ninterface SaveButtonProps extends ButtonProps {\n asChild?: boolean;\n children: React.ReactNode;\n loading?: boolean;\n done?: boolean;\n onDone?: () => void;\n}\n\nexport function SaveButton({\n asChild = false,\n children,\n loading,\n done,\n onDone,\n ...props\n}: SaveButtonProps) {\n const [state, setState] = useState<\"idle\" | \"loading\" | \"done\">(\n loading ? \"loading\" : done ? \"done\" : \"idle\",\n );\n const loadingStartTime = useRef<number | null>(null);\n const Button = asChild ? Slot : \"button\";\n\n useEffect(() => {\n if (loading) {\n setState(\"loading\");\n loadingStartTime.current = Date.now();\n } else if (done) {\n const currentTime = Date.now();\n const loadingDuration = loadingStartTime.current\n ? currentTime - loadingStartTime.current\n : 0;\n\n // If loading lasted less than 500 ms, wait for the remaining time\n const remainingDelay = Math.max(0, SAVING_TIMEOUT_MS - loadingDuration);\n\n let doneTimer: number | null = null;\n const savedTimer = window.setTimeout(() => {\n setState(\"done\");\n\n doneTimer = window.setTimeout(() => {\n onDone?.();\n }, DONE_TIMEOUT_MS);\n }, remainingDelay);\n\n return () => {\n window.clearTimeout(savedTimer);\n if (doneTimer !== null) {\n window.clearTimeout(doneTimer);\n }\n };\n } else if (!loading && !done) {\n setState(\"idle\");\n }\n }, [loading, done, onDone]);\n\n return (\n <Button\n {...props}\n className={namespaceClassNames(\"save-button\")}\n data-save-state={state}\n >\n <Slottable>{children}</Slottable>\n\n {state === \"loading\" && (\n <Flex\n as=\"span\"\n align=\"center\"\n justify=\"center\"\n position=\"absolute\"\n inset=\"0\"\n >\n <Spinner size=\"1\" />\n </Flex>\n )}\n\n {state === \"done\" && (\n <Flex\n as=\"span\"\n align=\"center\"\n justify=\"center\"\n position=\"absolute\"\n inset=\"0\"\n gap=\"1\"\n >\n <CheckIcon\n width=\"18px\"\n height=\"18px\"\n style={{ marginLeft: \"-4px\" }}\n className={namespaceClassNames(\"save-button__done-icon\")}\n />\n <Text className={namespaceClassNames(\"save-button__done-text\")}>\n Done\n </Text>\n </Flex>\n )}\n </Button>\n );\n}\n"],"mappings":"AA4EM,cAeE,YAfF;AA5EN;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,SAAS,WAAW,QAAQ,gBAAgB;AAC5C,SAAS,2BAA2B;AAEpC,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAUnB,SAAS,WAAW;AAAA,EACzB,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxB,UAAU,YAAY,OAAO,SAAS;AAAA,EACxC;AACA,QAAM,mBAAmB,OAAsB,IAAI;AACnD,QAAM,SAAS,UAAU,OAAO;AAEhC,YAAU,MAAM;AACd,QAAI,SAAS;AACX,eAAS,SAAS;AAClB,uBAAiB,UAAU,KAAK,IAAI;AAAA,IACtC,WAAW,MAAM;AACf,YAAM,cAAc,KAAK,IAAI;AAC7B,YAAM,kBAAkB,iBAAiB,UACrC,cAAc,iBAAiB,UAC/B;AAGJ,YAAM,iBAAiB,KAAK,IAAI,GAAG,oBAAoB,eAAe;AAEtE,UAAI,YAA2B;AAC/B,YAAM,aAAa,OAAO,WAAW,MAAM;AACzC,iBAAS,MAAM;AAEf,oBAAY,OAAO,WAAW,MAAM;AAClC,mBAAS;AAAA,QACX,GAAG,eAAe;AAAA,MACpB,GAAG,cAAc;AAEjB,aAAO,MAAM;AACX,eAAO,aAAa,UAAU;AAC9B,YAAI,cAAc,MAAM;AACtB,iBAAO,aAAa,SAAS;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,WAAW,CAAC,WAAW,CAAC,MAAM;AAC5B,eAAS,MAAM;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,MAAM,CAAC;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,oBAAoB,aAAa;AAAA,MAC5C,mBAAiB;AAAA,MAEjB;AAAA,4BAAC,aAAW,UAAS;AAAA,QAEpB,UAAU,aACT;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,UAAS;AAAA,YACT,OAAM;AAAA,YAEN,8BAAC,WAAQ,MAAK,KAAI;AAAA;AAAA,QACpB;AAAA,QAGD,UAAU,UACT;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,UAAS;AAAA,YACT,OAAM;AAAA,YACN,KAAI;AAAA,YAEJ;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,OAAO,EAAE,YAAY,OAAO;AAAA,kBAC5B,WAAW,oBAAoB,wBAAwB;AAAA;AAAA,cACzD;AAAA,cACA,oBAAC,QAAK,WAAW,oBAAoB,wBAAwB,GAAG,kBAEhE;AAAA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/save-button.tsx"],"sourcesContent":["import {\n ButtonProps,\n Flex,\n Slot,\n Slottable,\n Spinner,\n Text,\n} from \"@radix-ui/themes\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { namespaceClassNames } from \"./utils.js\";\n\nconst DONE_TIMEOUT_MS = 1500;\nconst SAVING_TIMEOUT_MS = 600;\n\ninterface SaveButtonProps extends ButtonProps {\n asChild?: boolean;\n children: React.ReactNode;\n loading?: boolean;\n done?: boolean;\n onDone?: () => void;\n}\n\nexport function SaveButton({\n asChild = false,\n children,\n loading,\n done,\n onDone,\n ...props\n}: SaveButtonProps) {\n const [state, setState] = useState<\"idle\" | \"loading\" | \"done\">(\n loading ? \"loading\" : done ? \"done\" : \"idle\",\n );\n const loadingStartTime = useRef<number | null>(null);\n const Button = asChild ? Slot : \"button\";\n\n useEffect(() => {\n if (loading) {\n // FIXME: This should be refactored\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setState(\"loading\");\n loadingStartTime.current = Date.now();\n } else if (done) {\n const currentTime = Date.now();\n const loadingDuration = loadingStartTime.current\n ? currentTime - loadingStartTime.current\n : 0;\n\n // If loading lasted less than 500 ms, wait for the remaining time\n const remainingDelay = Math.max(0, SAVING_TIMEOUT_MS - loadingDuration);\n\n let doneTimer: number | null = null;\n const savedTimer = window.setTimeout(() => {\n setState(\"done\");\n\n doneTimer = window.setTimeout(() => {\n onDone?.();\n }, DONE_TIMEOUT_MS);\n }, remainingDelay);\n\n return () => {\n window.clearTimeout(savedTimer);\n if (doneTimer !== null) {\n window.clearTimeout(doneTimer);\n }\n };\n } else if (!loading && !done) {\n setState(\"idle\");\n }\n }, [loading, done, onDone]);\n\n return (\n <Button\n {...props}\n className={namespaceClassNames(\"save-button\")}\n data-save-state={state}\n >\n <Slottable>{children}</Slottable>\n\n {state === \"loading\" && (\n <Flex\n as=\"span\"\n align=\"center\"\n justify=\"center\"\n position=\"absolute\"\n inset=\"0\"\n >\n <Spinner size=\"1\" />\n </Flex>\n )}\n\n {state === \"done\" && (\n <Flex\n as=\"span\"\n align=\"center\"\n justify=\"center\"\n position=\"absolute\"\n inset=\"0\"\n gap=\"1\"\n >\n <CheckIcon\n width=\"18px\"\n height=\"18px\"\n style={{ marginLeft: \"-4px\" }}\n className={namespaceClassNames(\"save-button__done-icon\")}\n />\n <Text className={namespaceClassNames(\"save-button__done-text\")}>\n Done\n </Text>\n </Flex>\n )}\n </Button>\n );\n}\n"],"mappings":"AA8EM,cAeE,YAfF;AA9EN;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,SAAS,WAAW,QAAQ,gBAAgB;AAC5C,SAAS,2BAA2B;AAEpC,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAUnB,SAAS,WAAW;AAAA,EACzB,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxB,UAAU,YAAY,OAAO,SAAS;AAAA,EACxC;AACA,QAAM,mBAAmB,OAAsB,IAAI;AACnD,QAAM,SAAS,UAAU,OAAO;AAEhC,YAAU,MAAM;AACd,QAAI,SAAS;AAGX,eAAS,SAAS;AAClB,uBAAiB,UAAU,KAAK,IAAI;AAAA,IACtC,WAAW,MAAM;AACf,YAAM,cAAc,KAAK,IAAI;AAC7B,YAAM,kBAAkB,iBAAiB,UACrC,cAAc,iBAAiB,UAC/B;AAGJ,YAAM,iBAAiB,KAAK,IAAI,GAAG,oBAAoB,eAAe;AAEtE,UAAI,YAA2B;AAC/B,YAAM,aAAa,OAAO,WAAW,MAAM;AACzC,iBAAS,MAAM;AAEf,oBAAY,OAAO,WAAW,MAAM;AAClC,mBAAS;AAAA,QACX,GAAG,eAAe;AAAA,MACpB,GAAG,cAAc;AAEjB,aAAO,MAAM;AACX,eAAO,aAAa,UAAU;AAC9B,YAAI,cAAc,MAAM;AACtB,iBAAO,aAAa,SAAS;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,WAAW,CAAC,WAAW,CAAC,MAAM;AAC5B,eAAS,MAAM;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,MAAM,CAAC;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,oBAAoB,aAAa;AAAA,MAC5C,mBAAiB;AAAA,MAEjB;AAAA,4BAAC,aAAW,UAAS;AAAA,QAEpB,UAAU,aACT;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,UAAS;AAAA,YACT,OAAM;AAAA,YAEN,8BAAC,WAAQ,MAAK,KAAI;AAAA;AAAA,QACpB;AAAA,QAGD,UAAU,UACT;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,UAAS;AAAA,YACT,OAAM;AAAA,YACN,KAAI;AAAA,YAEJ;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,OAAO,EAAE,YAAY,OAAO;AAAA,kBAC5B,WAAW,oBAAoB,wBAAwB;AAAA;AAAA,cACzD;AAAA,cACA,oBAAC,QAAK,WAAW,oBAAoB,wBAAwB,GAAG,kBAEhE;AAAA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","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.js';
3
+ import { WidgetRootDomProps } from './utils.js';
3
4
  import '@tanstack/react-query';
4
5
  import '../api/widgets-api-client.js';
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 };