@workos-inc/widgets 1.5.0 → 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 (224) hide show
  1. package/CHANGELOG.md +30 -8
  2. package/dist/cjs/admin-portal-domain-verification.client.cjs +34 -20
  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} +61 -35
  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 +27 -19
  9. package/dist/cjs/api/api-provider.cjs.map +1 -1
  10. package/dist/cjs/api/api-provider.d.cts +5 -4
  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/utils.cjs +10 -0
  15. package/dist/cjs/api/utils.cjs.map +1 -1
  16. package/dist/cjs/api/utils.d.cts +7 -2
  17. package/dist/cjs/api/widgets-api-client.cjs +11 -5
  18. package/dist/cjs/api/widgets-api-client.cjs.map +1 -1
  19. package/dist/cjs/{api-keys-client.cjs → api-keys.client.cjs} +45 -33
  20. package/dist/cjs/api-keys.client.cjs.map +1 -0
  21. package/dist/cjs/api-keys.client.d.cts +15 -0
  22. package/dist/cjs/index.cjs +9 -2
  23. package/dist/cjs/index.cjs.map +1 -1
  24. package/dist/cjs/index.d.cts +6 -2
  25. package/dist/cjs/lib/add-mfa-dialog.cjs +1 -1
  26. package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
  27. package/dist/cjs/lib/admin-portal-domain-verification.cjs +18 -12
  28. package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
  29. package/dist/cjs/lib/admin-portal-domain-verification.d.cts +10 -6
  30. package/dist/cjs/lib/admin-portal-sso-connection.cjs +84 -106
  31. package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
  32. package/dist/cjs/lib/admin-portal-sso-connection.d.cts +13 -6
  33. package/dist/cjs/lib/api-keys/api-keys.cjs +70 -66
  34. package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
  35. package/dist/cjs/lib/api-keys/api-keys.d.cts +16 -8
  36. package/dist/cjs/lib/card-list.cjs.map +1 -0
  37. package/dist/cjs/lib/constants.cjs +5 -2
  38. package/dist/cjs/lib/constants.cjs.map +1 -1
  39. package/dist/cjs/lib/constants.d.cts +2 -1
  40. package/dist/cjs/lib/elevated-access.cjs.map +1 -1
  41. package/dist/cjs/lib/empty-state.cjs +24 -8
  42. package/dist/cjs/lib/empty-state.cjs.map +1 -1
  43. package/dist/cjs/lib/empty-state.d.cts +6 -2
  44. package/dist/cjs/lib/errors.cjs +1 -1
  45. package/dist/cjs/lib/errors.cjs.map +1 -1
  46. package/dist/cjs/lib/generic-error.cjs +56 -58
  47. package/dist/cjs/lib/generic-error.cjs.map +1 -1
  48. package/dist/cjs/lib/generic-error.d.cts +10 -3
  49. package/dist/cjs/lib/identity-providers.cjs +2 -1
  50. package/dist/cjs/lib/identity-providers.cjs.map +1 -1
  51. package/dist/cjs/lib/identity-providers.d.cts +2 -2
  52. package/dist/cjs/lib/oauth-icons.cjs +12 -7
  53. package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
  54. package/dist/cjs/lib/oauth-icons.d.cts +7 -3
  55. package/dist/cjs/lib/organization-switcher.cjs +62 -9
  56. package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
  57. package/dist/cjs/lib/organization-switcher.d.cts +12 -9
  58. package/dist/cjs/lib/otp-input.cjs +1 -1
  59. package/dist/cjs/lib/otp-input.cjs.map +1 -1
  60. package/dist/cjs/lib/pipes.cjs +343 -0
  61. package/dist/cjs/lib/pipes.cjs.map +1 -0
  62. package/dist/cjs/lib/pipes.d.cts +19 -0
  63. package/dist/cjs/lib/provider-icon.cjs +0 -6
  64. package/dist/cjs/lib/provider-icon.cjs.map +1 -1
  65. package/dist/cjs/lib/provider-icon.d.cts +4 -1
  66. package/dist/cjs/lib/save-button.cjs.map +1 -1
  67. package/dist/cjs/lib/use-permissions.cjs +7 -14
  68. package/dist/cjs/lib/use-permissions.cjs.map +1 -1
  69. package/dist/cjs/lib/use-permissions.d.cts +1 -1
  70. package/dist/cjs/lib/user-profile.cjs +77 -83
  71. package/dist/cjs/lib/user-profile.cjs.map +1 -1
  72. package/dist/cjs/lib/user-profile.d.cts +11 -7
  73. package/dist/cjs/lib/user-security.cjs +31 -25
  74. package/dist/cjs/lib/user-security.cjs.map +1 -1
  75. package/dist/cjs/lib/user-security.d.cts +10 -7
  76. package/dist/cjs/lib/user-sessions.cjs +20 -10
  77. package/dist/cjs/lib/user-sessions.cjs.map +1 -1
  78. package/dist/cjs/lib/user-sessions.d.cts +10 -6
  79. package/dist/cjs/lib/users-management.cjs +224 -216
  80. package/dist/cjs/lib/users-management.cjs.map +1 -1
  81. package/dist/cjs/lib/users-management.d.cts +10 -7
  82. package/dist/cjs/lib/utils.cjs +43 -0
  83. package/dist/cjs/lib/utils.cjs.map +1 -1
  84. package/dist/cjs/lib/utils.d.cts +29 -2
  85. package/dist/cjs/organization-switcher.client.cjs +47 -20
  86. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  87. package/dist/cjs/organization-switcher.client.d.cts +2 -1
  88. package/dist/cjs/pipes.client.cjs +64 -0
  89. package/dist/cjs/pipes.client.cjs.map +1 -0
  90. package/dist/cjs/pipes.client.d.cts +15 -0
  91. package/dist/cjs/user-profile.client.cjs +29 -16
  92. package/dist/cjs/user-profile.client.cjs.map +1 -1
  93. package/dist/cjs/user-profile.client.d.cts +4 -3
  94. package/dist/cjs/user-security.client.cjs +32 -14
  95. package/dist/cjs/user-security.client.cjs.map +1 -1
  96. package/dist/cjs/user-security.client.d.cts +3 -2
  97. package/dist/cjs/user-sessions.client.cjs +42 -28
  98. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  99. package/dist/cjs/user-sessions.client.d.cts +4 -2
  100. package/dist/cjs/users-management.client.cjs +38 -27
  101. package/dist/cjs/users-management.client.cjs.map +1 -1
  102. package/dist/cjs/users-management.client.d.cts +3 -2
  103. package/dist/cjs/workos-widgets.client.cjs +7 -12
  104. package/dist/cjs/workos-widgets.client.cjs.map +1 -1
  105. package/dist/css/lib/provider-icon.css +16 -11
  106. package/dist/esm/admin-portal-domain-verification.client.d.ts +3 -2
  107. package/dist/esm/admin-portal-domain-verification.client.js +34 -21
  108. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  109. package/dist/esm/admin-portal-sso-connection.client.d.ts +16 -0
  110. package/dist/esm/{admin-portal-sso-connection-client.js → admin-portal-sso-connection.client.js} +61 -36
  111. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -0
  112. package/dist/esm/api/api-provider.d.ts +5 -4
  113. package/dist/esm/api/api-provider.js +26 -19
  114. package/dist/esm/api/api-provider.js.map +1 -1
  115. package/dist/esm/api/endpoint.d.ts +62 -1
  116. package/dist/esm/api/endpoint.js +56 -2
  117. package/dist/esm/api/endpoint.js.map +1 -1
  118. package/dist/esm/api/utils.d.ts +7 -2
  119. package/dist/esm/api/utils.js +9 -0
  120. package/dist/esm/api/utils.js.map +1 -1
  121. package/dist/esm/api/widgets-api-client.js +11 -5
  122. package/dist/esm/api/widgets-api-client.js.map +1 -1
  123. package/dist/esm/api-keys.client.d.ts +15 -0
  124. package/dist/esm/api-keys.client.js +75 -0
  125. package/dist/esm/api-keys.client.js.map +1 -0
  126. package/dist/esm/index.d.ts +6 -2
  127. package/dist/esm/index.js +9 -2
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/lib/add-mfa-dialog.js +1 -1
  130. package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
  131. package/dist/esm/lib/admin-portal-domain-verification.d.ts +10 -6
  132. package/dist/esm/lib/admin-portal-domain-verification.js +18 -12
  133. package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
  134. package/dist/esm/lib/admin-portal-sso-connection.d.ts +13 -6
  135. package/dist/esm/lib/admin-portal-sso-connection.js +88 -107
  136. package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
  137. package/dist/esm/lib/api-keys/api-keys.d.ts +16 -8
  138. package/dist/esm/lib/api-keys/api-keys.js +69 -54
  139. package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
  140. package/dist/esm/lib/card-list.js.map +1 -0
  141. package/dist/esm/lib/constants.d.ts +2 -1
  142. package/dist/esm/lib/constants.js +3 -1
  143. package/dist/esm/lib/constants.js.map +1 -1
  144. package/dist/esm/lib/elevated-access.js.map +1 -1
  145. package/dist/esm/lib/empty-state.d.ts +6 -2
  146. package/dist/esm/lib/empty-state.js +24 -8
  147. package/dist/esm/lib/empty-state.js.map +1 -1
  148. package/dist/esm/lib/errors.js +1 -1
  149. package/dist/esm/lib/errors.js.map +1 -1
  150. package/dist/esm/lib/generic-error.d.ts +10 -3
  151. package/dist/esm/lib/generic-error.js +56 -60
  152. package/dist/esm/lib/generic-error.js.map +1 -1
  153. package/dist/esm/lib/identity-providers.d.ts +2 -2
  154. package/dist/esm/lib/identity-providers.js +2 -1
  155. package/dist/esm/lib/identity-providers.js.map +1 -1
  156. package/dist/esm/lib/oauth-icons.d.ts +7 -3
  157. package/dist/esm/lib/oauth-icons.js +11 -6
  158. package/dist/esm/lib/oauth-icons.js.map +1 -1
  159. package/dist/esm/lib/organization-switcher.d.ts +12 -9
  160. package/dist/esm/lib/organization-switcher.js +54 -9
  161. package/dist/esm/lib/organization-switcher.js.map +1 -1
  162. package/dist/esm/lib/otp-input.js +1 -1
  163. package/dist/esm/lib/otp-input.js.map +1 -1
  164. package/dist/esm/lib/pipes.d.ts +19 -0
  165. package/dist/esm/lib/pipes.js +334 -0
  166. package/dist/esm/lib/pipes.js.map +1 -0
  167. package/dist/esm/lib/provider-icon.d.ts +4 -1
  168. package/dist/esm/lib/provider-icon.js +0 -8
  169. package/dist/esm/lib/provider-icon.js.map +1 -1
  170. package/dist/esm/lib/save-button.js.map +1 -1
  171. package/dist/esm/lib/use-permissions.d.ts +1 -1
  172. package/dist/esm/lib/use-permissions.js +8 -15
  173. package/dist/esm/lib/use-permissions.js.map +1 -1
  174. package/dist/esm/lib/user-profile.d.ts +11 -7
  175. package/dist/esm/lib/user-profile.js +82 -75
  176. package/dist/esm/lib/user-profile.js.map +1 -1
  177. package/dist/esm/lib/user-security.d.ts +10 -7
  178. package/dist/esm/lib/user-security.js +35 -26
  179. package/dist/esm/lib/user-security.js.map +1 -1
  180. package/dist/esm/lib/user-sessions.d.ts +10 -6
  181. package/dist/esm/lib/user-sessions.js +21 -10
  182. package/dist/esm/lib/user-sessions.js.map +1 -1
  183. package/dist/esm/lib/users-management.d.ts +10 -7
  184. package/dist/esm/lib/users-management.js +230 -217
  185. package/dist/esm/lib/users-management.js.map +1 -1
  186. package/dist/esm/lib/utils.d.ts +29 -2
  187. package/dist/esm/lib/utils.js +46 -1
  188. package/dist/esm/lib/utils.js.map +1 -1
  189. package/dist/esm/organization-switcher.client.d.ts +2 -1
  190. package/dist/esm/organization-switcher.client.js +47 -21
  191. package/dist/esm/organization-switcher.client.js.map +1 -1
  192. package/dist/esm/pipes.client.d.ts +15 -0
  193. package/dist/esm/pipes.client.js +42 -0
  194. package/dist/esm/pipes.client.js.map +1 -0
  195. package/dist/esm/user-profile.client.d.ts +4 -3
  196. package/dist/esm/user-profile.client.js +29 -17
  197. package/dist/esm/user-profile.client.js.map +1 -1
  198. package/dist/esm/user-security.client.d.ts +3 -2
  199. package/dist/esm/user-security.client.js +32 -15
  200. package/dist/esm/user-security.client.js.map +1 -1
  201. package/dist/esm/user-sessions.client.d.ts +4 -2
  202. package/dist/esm/user-sessions.client.js +43 -30
  203. package/dist/esm/user-sessions.client.js.map +1 -1
  204. package/dist/esm/users-management.client.d.ts +3 -2
  205. package/dist/esm/users-management.client.js +38 -28
  206. package/dist/esm/users-management.client.js.map +1 -1
  207. package/dist/esm/workos-widgets.client.js +7 -12
  208. package/dist/esm/workos-widgets.client.js.map +1 -1
  209. package/package.json +20 -10
  210. package/dist/cjs/admin-portal-sso-connection-client.cjs.map +0 -1
  211. package/dist/cjs/admin-portal-sso-connection-client.d.cts +0 -12
  212. package/dist/cjs/api-keys-client.cjs.map +0 -1
  213. package/dist/cjs/api-keys-client.d.cts +0 -10
  214. package/dist/cjs/card-list.cjs.map +0 -1
  215. package/dist/esm/admin-portal-sso-connection-client.d.ts +0 -12
  216. package/dist/esm/admin-portal-sso-connection-client.js.map +0 -1
  217. package/dist/esm/api-keys-client.d.ts +0 -10
  218. package/dist/esm/api-keys-client.js +0 -65
  219. package/dist/esm/api-keys-client.js.map +0 -1
  220. package/dist/esm/card-list.js.map +0 -1
  221. /package/dist/cjs/{card-list.cjs → lib/card-list.cjs} +0 -0
  222. /package/dist/cjs/{card-list.d.cts → lib/card-list.d.cts} +0 -0
  223. /package/dist/esm/{card-list.d.ts → lib/card-list.d.ts} +0 -0
  224. /package/dist/esm/{card-list.js → lib/card-list.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workos-widgets.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { Theme as RadixThemes } from \"@radix-ui/themes\";\nimport type { GetPropDefTypes, themePropDefs } from \"@radix-ui/themes/props\";\nimport {\n QueryClient,\n QueryClientProvider,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { namespaceClassNames } from \"./lib/utils.js\";\nimport { DEFAULT_API_HOSTNAME } from \"./lib/api/config.js\";\nimport type { Elements } from \"./lib/elements.js\";\nimport { WidgetsContext } from \"./lib/widgets-context.js\";\n\nlet queryClientInternal: QueryClient | undefined;\n\nexport interface WorkOsWidgetsProps {\n elements?: Elements;\n theme?: Omit<GetPropDefTypes<typeof themePropDefs>, \"asChild\"> & {\n fontFamily?: string;\n };\n style?: React.CSSProperties;\n className?: string;\n children: React.ReactNode;\n apiHostname?: string;\n port?: number | null;\n https?: boolean;\n /**\n * Optional query client for users who are already using Tanstack Query. If\n * not provided, a new query client will be created and mounted internally.\n */\n queryClient?: QueryClient;\n}\n\nexport const WorkOsWidgets: React.FC<WorkOsWidgetsProps> = ({\n elements = {},\n className,\n theme: { fontFamily, ...radixThemesProps } = {},\n style = {},\n children,\n apiHostname = DEFAULT_API_HOSTNAME,\n port = null,\n https = true,\n queryClient,\n}) => {\n const customStyle: React.CSSProperties = fontFamily\n ? {\n \"--default-font-family\": fontFamily,\n ...style,\n }\n : style;\n\n const apiBaseUrl = React.useMemo(() => {\n try {\n const url = new URL(\n \"/\",\n `${https ? \"https\" : \"http\"}://${apiHostname}${port ? `:${port}` : \"\"}`,\n );\n return url.toString().slice(0, -1);\n } catch {\n console.error(\n \"Failed to validate the WorkOS API URL. Check to ensure that valid `apiHostname` and `port` props are passed to WorkOsWidgets\",\n );\n return `https://${DEFAULT_API_HOSTNAME}`;\n }\n }, [apiHostname, https, port]);\n\n return (\n <QueryClientProviderImpl client={queryClient}>\n <RadixThemes\n {...radixThemesProps}\n style={customStyle}\n className={cx(namespaceClassNames(\"root\"), className)}\n >\n <WidgetsContext.Provider value={{ elements, apiBaseUrl }}>\n {children}\n </WidgetsContext.Provider>\n </RadixThemes>\n </QueryClientProviderImpl>\n );\n};\n\nconst QueryClientProviderImpl = ({\n client: providedClient,\n children,\n}: {\n client: QueryClient | undefined;\n children: React.ReactNode;\n}) => {\n let queryClient: QueryClient;\n if (providedClient) {\n queryClient = providedClient;\n } else if (queryClientInternal) {\n queryClient = queryClientInternal;\n } else {\n queryClientInternal = new QueryClient();\n queryClient = queryClientInternal;\n }\n\n const client = useQueryClient(queryClient);\n if (Object.is(client, providedClient)) {\n // No need for a new context provider if the user provided the client to\n // their own provider, which has already mounted the client.\n return <>{children}</>;\n }\n\n return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EQ;AA1ER,oBAAqC;AAErC,yBAIO;AACP,kBAAe;AACf,YAAuB;AACvB,mBAAoC;AACpC,oBAAqC;AAErC,6BAA+B;AAE/B,IAAI;AAoBG,MAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,OAAO,EAAE,YAAY,GAAG,iBAAiB,IAAI,CAAC;AAAA,EAC9C,QAAQ,CAAC;AAAA,EACT;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,cAAmC,aACrC;AAAA,IACE,yBAAyB;AAAA,IACzB,GAAG;AAAA,EACL,IACA;AAEJ,QAAM,aAAa,MAAM,QAAQ,MAAM;AACrC,QAAI;AACF,YAAM,MAAM,IAAI;AAAA,QACd;AAAA,QACA,GAAG,QAAQ,UAAU,MAAM,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,KAAK,EAAE;AAAA,MACvE;AACA,aAAO,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,IACnC,QAAQ;AACN,cAAQ;AAAA,QACN;AAAA,MACF;AACA,aAAO,WAAW,kCAAoB;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,IAAI,CAAC;AAE7B,SACE,4CAAC,2BAAwB,QAAQ,aAC/B;AAAA,IAAC,cAAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,eAAW,YAAAC,aAAG,kCAAoB,MAAM,GAAG,SAAS;AAAA,MAEpD,sDAAC,sCAAe,UAAf,EAAwB,OAAO,EAAE,UAAU,WAAW,GACpD,UACH;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,QAAQ;AAAA,EACR;AACF,MAGM;AACJ,MAAI;AACJ,MAAI,gBAAgB;AAClB,kBAAc;AAAA,EAChB,WAAW,qBAAqB;AAC9B,kBAAc;AAAA,EAChB,OAAO;AACL,0BAAsB,IAAI,+BAAY;AACtC,kBAAc;AAAA,EAChB;AAEA,QAAM,aAAS,mCAAe,WAAW;AACzC,MAAI,OAAO,GAAG,QAAQ,cAAc,GAAG;AAGrC,WAAO,2EAAG,UAAS;AAAA,EACrB;AAEA,SAAO,4CAAC,0CAAoB,QAAiB,UAAS;AACxD;","names":["RadixThemes","cx"]}
1
+ {"version":3,"sources":["../../src/workos-widgets.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { Theme as RadixThemes } from \"@radix-ui/themes\";\nimport type { GetPropDefTypes, themePropDefs } from \"@radix-ui/themes/props\";\nimport {\n QueryClient,\n QueryClientProvider,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { namespaceClassNames } from \"./lib/utils.js\";\nimport { DEFAULT_API_HOSTNAME } from \"./lib/api/config.js\";\nimport type { Elements } from \"./lib/elements.js\";\nimport { WidgetsContext } from \"./lib/widgets-context.js\";\nimport { WIDGETS_DATA_ATTRIBUTE_NAMESPACE } from \"./lib/constants.js\";\n\nexport interface WorkOsWidgetsProps {\n elements?: Elements;\n theme?: Omit<GetPropDefTypes<typeof themePropDefs>, \"asChild\"> & {\n fontFamily?: string;\n };\n style?: React.CSSProperties;\n className?: string;\n children: React.ReactNode;\n apiHostname?: string;\n port?: number | null;\n https?: boolean;\n /**\n * Optional query client for users who are already using Tanstack Query. If\n * not provided, a new query client will be created and mounted internally.\n */\n queryClient?: QueryClient;\n}\n\nexport const WorkOsWidgets: React.FC<WorkOsWidgetsProps> = ({\n elements = {},\n theme: { fontFamily, ...radixThemesProps } = {},\n style = {},\n children,\n apiHostname = DEFAULT_API_HOSTNAME,\n port = null,\n https = true,\n queryClient,\n className,\n}) => {\n const customStyle: React.CSSProperties = fontFamily\n ? {\n \"--default-font-family\": fontFamily,\n ...style,\n }\n : style;\n\n const apiBaseUrl = React.useMemo(() => {\n try {\n const url = new URL(\n \"/\",\n `${https ? \"https\" : \"http\"}://${apiHostname}${port ? `:${port}` : \"\"}`,\n );\n return url.toString().slice(0, -1);\n } catch {\n console.error(\n \"Failed to validate the WorkOS API URL. Check to ensure that valid `apiHostname` and `port` props are passed to WorkOsWidgets\",\n );\n return `https://${DEFAULT_API_HOSTNAME}`;\n }\n }, [apiHostname, https, port]);\n\n return (\n <QueryClientProviderImpl client={queryClient}>\n <RadixThemes\n {...radixThemesProps}\n {...{ [`data-${WIDGETS_DATA_ATTRIBUTE_NAMESPACE}-root`]: true }}\n style={customStyle}\n className={cx(namespaceClassNames(\"root\"), className)}\n >\n <WidgetsContext.Provider value={{ elements, apiBaseUrl }}>\n {children}\n </WidgetsContext.Provider>\n </RadixThemes>\n </QueryClientProviderImpl>\n );\n};\n\nconst QueryClientProviderImpl = ({\n client: providedClient,\n children,\n}: {\n client: QueryClient | undefined;\n children: React.ReactNode;\n}) => {\n const [queryClient] = React.useState(\n () => providedClient ?? new QueryClient(),\n );\n\n const client = useQueryClient(queryClient);\n if (Object.is(client, providedClient)) {\n // No need for a new context provider if the user provided the client to\n // their own provider, which has already mounted the client.\n return <>{children}</>;\n }\n\n return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EQ;AA1ER,oBAAqC;AAErC,yBAIO;AACP,kBAAe;AACf,YAAuB;AACvB,mBAAoC;AACpC,oBAAqC;AAErC,6BAA+B;AAC/B,uBAAiD;AAoB1C,MAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW,CAAC;AAAA,EACZ,OAAO,EAAE,YAAY,GAAG,iBAAiB,IAAI,CAAC;AAAA,EAC9C,QAAQ,CAAC;AAAA,EACT;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAmC,aACrC;AAAA,IACE,yBAAyB;AAAA,IACzB,GAAG;AAAA,EACL,IACA;AAEJ,QAAM,aAAa,MAAM,QAAQ,MAAM;AACrC,QAAI;AACF,YAAM,MAAM,IAAI;AAAA,QACd;AAAA,QACA,GAAG,QAAQ,UAAU,MAAM,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,KAAK,EAAE;AAAA,MACvE;AACA,aAAO,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,IACnC,QAAQ;AACN,cAAQ;AAAA,QACN;AAAA,MACF;AACA,aAAO,WAAW,kCAAoB;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,IAAI,CAAC;AAE7B,SACE,4CAAC,2BAAwB,QAAQ,aAC/B;AAAA,IAAC,cAAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG,EAAE,CAAC,QAAQ,iDAAgC,OAAO,GAAG,KAAK;AAAA,MAC9D,OAAO;AAAA,MACP,eAAW,YAAAC,aAAG,kCAAoB,MAAM,GAAG,SAAS;AAAA,MAEpD,sDAAC,sCAAe,UAAf,EAAwB,OAAO,EAAE,UAAU,WAAW,GACpD,UACH;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,QAAQ;AAAA,EACR;AACF,MAGM;AACJ,QAAM,CAAC,WAAW,IAAI,MAAM;AAAA,IAC1B,MAAM,kBAAkB,IAAI,+BAAY;AAAA,EAC1C;AAEA,QAAM,aAAS,mCAAe,WAAW;AACzC,MAAI,OAAO,GAAG,QAAQ,cAAc,GAAG;AAGrC,WAAO,2EAAG,UAAS;AAAA,EACrB;AAEA,SAAO,4CAAC,0CAAoB,QAAiB,UAAS;AACxD;","names":["RadixThemes","cx"]}
@@ -13,6 +13,7 @@
13
13
  --provider-icon-cas: url(https://cdn.workos.com/provider-icons/light/cas.svg);
14
14
  --provider-icon-cezanne-hr: url(https://cdn.workos.com/provider-icons/light/cezanne-hr.svg);
15
15
  --provider-icon-classlink: url(https://cdn.workos.com/provider-icons/light/classlink.svg);
16
+ --provider-icon-clever: url(https://cdn.workos.com/provider-icons/dark/clever.svg);
16
17
  --provider-icon-cloudflare: url(https://cdn.workos.com/provider-icons/light/cloudflare.svg);
17
18
  --provider-icon-cyberark: url(https://cdn.workos.com/provider-icons/light/cyberark.svg);
18
19
  --provider-icon-datadog: url(https://cdn.workos.com/provider-icons/light/datadog.svg);
@@ -29,7 +30,7 @@
29
30
  --provider-icon-google-cloud: url(https://cdn.workos.com/provider-icons/light/google-cloud.svg);
30
31
  --provider-icon-google-drive: url(https://images.workoscdn.com/images/55956988-24d8-4733-acb0-dc19949ebff7.svg);
31
32
  --provider-icon-google-mail: url(https://images.workoscdn.com/images/5735eb12-b0e4-4127-87be-f541a9b282fc.svg);
32
- --provider-icon-google: url(https://cdn.workos.com/provider-icons/light/google.svg);
33
+ --provider-icon-google: url(https://images.workoscdn.com/images/b6d63052-83dc-4c75-beda-8121ea8bc483.svg);
33
34
  --provider-icon-hibob: url(https://cdn.workos.com/provider-icons/light/hibob.svg);
34
35
  --provider-icon-hubspot: url(https://images.workoscdn.com/images/ec2d62d0-64a7-4910-a437-782eaeeba7e5.svg);
35
36
  --provider-icon-intercom: url(https://images.workoscdn.com/images/0afe7826-72a8-4673-9c95-7122ab12d011.svg);
@@ -40,11 +41,11 @@
40
41
  --provider-icon-linear: url(https://images.workoscdn.com/images/ea736232-215d-4925-8bf3-c3d7a4b24078.svg);
41
42
  --provider-icon-linkedin: url(https://cdn.workos.com/provider-icons/light/linkedin.svg);
42
43
  --provider-icon-login-gov: url(https://cdn.workos.com/provider-icons/light/login-gov.svg);
43
- --provider-icon-microsoft: url(https://cdn.workos.com/provider-icons/light/microsoft.svg);
44
+ --provider-icon-microsoft: url(https://images.workoscdn.com/images/03c465e5-a6d8-47e2-ab15-1b5f0081fd88.svg);
44
45
  --provider-icon-miniorange: url(https://cdn.workos.com/provider-icons/light/miniorange.svg);
45
46
  --provider-icon-net-iq: url(https://cdn.workos.com/provider-icons/light/net-iq.svg);
46
47
  --provider-icon-next-auth: url(https://cdn.workos.com/provider-icons/light/next-auth.svg);
47
- --provider-icon-notion: url(https://cdn.workos.com/provider-icons/light/notion.svg);
48
+ --provider-icon-notion: url(https://images.workoscdn.com/images/755707ef-6562-4a0f-902d-9675b9a5bb8a.svg);
48
49
  --provider-icon-okta: url(https://cdn.workos.com/provider-icons/light/okta.svg);
49
50
  --provider-icon-onelogin: url(https://cdn.workos.com/provider-icons/light/onelogin.svg);
50
51
  --provider-icon-oracle: url(https://cdn.workos.com/provider-icons/light/oracle.svg);
@@ -52,11 +53,11 @@
52
53
  --provider-icon-ping-identity: url(https://cdn.workos.com/provider-icons/light/ping-identity.svg);
53
54
  --provider-icon-react-native-expo: url(https://cdn.workos.com/provider-icons/light/react-native-expo.svg);
54
55
  --provider-icon-rippling: url(https://cdn.workos.com/provider-icons/light/rippling.svg);
55
- --provider-icon-salesforce: url(https://cdn.workos.com/provider-icons/light/salesforce.svg);
56
+ --provider-icon-salesforce: url(https://images.workoscdn.com/images/4f1247e1-982f-43d1-80f6-8a8ef0e26d08.svg);
56
57
  --provider-icon-segment: url(https://images.workoscdn.com/images/76d2470d-af92-4a56-96f2-5167c7ab4317.svg?auto=format&fit=clip&q=80);
57
58
  --provider-icon-shibboleth: url(https://cdn.workos.com/provider-icons/light/shibboleth.svg);
58
59
  --provider-icon-simple-saml-php: url(https://cdn.workos.com/provider-icons/light/simple-saml-php.svg);
59
- --provider-icon-slack: url(https://cdn.workos.com/provider-icons/light/slack.svg);
60
+ --provider-icon-slack: url(https://images.workoscdn.com/images/4caca96c-9b83-49dc-9fd8-017a22725168.svg);
60
61
  --provider-icon-splunk: url(https://cdn.workos.com/provider-icons/light/splunk.svg);
61
62
  --provider-icon-stripe: url(https://images.workoscdn.com/images/44a8c194-4e70-4a6a-9bf5-72a055a4c967.svg);
62
63
  --provider-icon-supabase: url(https://cdn.workos.com/provider-icons/light/supabase.svg);
@@ -104,7 +105,7 @@
104
105
  --provider-icon-google-cloud: url(https://cdn.workos.com/provider-icons/dark/google-cloud.svg);
105
106
  --provider-icon-google-drive: url(https://images.workoscdn.com/images/d65df86d-d61d-414b-aafc-5dc7fd661fac.svg);
106
107
  --provider-icon-google-mail: url(https://images.workoscdn.com/images/5735eb12-b0e4-4127-87be-f541a9b282fc.svg);
107
- --provider-icon-google: url(https://cdn.workos.com/provider-icons/dark/google.svg);
108
+ --provider-icon-google: url(https://images.workoscdn.com/images/ca224b0c-2732-4210-beb1-738a080b4358.svg);
108
109
  --provider-icon-hibob: url(https://cdn.workos.com/provider-icons/dark/hibob.svg);
109
110
  --provider-icon-hubspot: url(https://images.workoscdn.com/images/e002a40c-6971-42a5-ae6e-9b2c19018394.svg);
110
111
  --provider-icon-intercom: url(https://images.workoscdn.com/images/16d6f1eb-ac8f-41d4-99ea-af4b4613b38d.svg);
@@ -115,11 +116,11 @@
115
116
  --provider-icon-linear: url(https://images.workoscdn.com/images/4ffb242f-6ca9-4409-88b8-0249654ae6e4.svg);
116
117
  --provider-icon-linkedin: url(https://cdn.workos.com/provider-icons/dark/linkedin.svg);
117
118
  --provider-icon-login-gov: url(https://cdn.workos.com/provider-icons/dark/login-gov.svg);
118
- --provider-icon-microsoft: url(https://cdn.workos.com/provider-icons/dark/microsoft.svg);
119
+ --provider-icon-microsoft: url(https://images.workoscdn.com/images/86c3df5e-bb56-4bf5-a39e-442c394af17b.svg);
119
120
  --provider-icon-miniorange: url(https://cdn.workos.com/provider-icons/dark/miniorange.svg);
120
121
  --provider-icon-net-iq: url(https://cdn.workos.com/provider-icons/dark/net-iq.svg);
121
122
  --provider-icon-next-auth: url(https://cdn.workos.com/provider-icons/dark/next-auth.svg);
122
- --provider-icon-notion: url(https://images.workoscdn.com/images/31a154ab-920d-4260-98b9-e8d911fdba46.svg);
123
+ --provider-icon-notion: url(https://images.workoscdn.com/images/290aa0fc-0fd4-46a2-a428-97b16b111d7c.svg);
123
124
  --provider-icon-okta: url(https://cdn.workos.com/provider-icons/dark/okta.svg);
124
125
  --provider-icon-onelogin: url(https://cdn.workos.com/provider-icons/dark/onelogin.svg);
125
126
  --provider-icon-oracle: url(https://cdn.workos.com/provider-icons/dark/oracle.svg);
@@ -127,11 +128,11 @@
127
128
  --provider-icon-ping-identity: url(https://cdn.workos.com/provider-icons/dark/ping-identity.svg);
128
129
  --provider-icon-react-native-expo: url(https://cdn.workos.com/provider-icons/dark/react-native-expo.svg);
129
130
  --provider-icon-rippling: url(https://cdn.workos.com/provider-icons/dark/rippling.svg);
130
- --provider-icon-salesforce: url(https://cdn.workos.com/provider-icons/dark/salesforce.svg);
131
+ --provider-icon-salesforce: url(https://images.workoscdn.com/images/d71af54e-3c97-48ce-9b26-c16430aba2ae.svg);
131
132
  --provider-icon-segment: url(https://images.workoscdn.com/images/ed5680a5-5b78-417b-96d4-e03ee8a39160.svg?auto=format&fit=clip&q=80);
132
133
  --provider-icon-shibboleth: url(https://cdn.workos.com/provider-icons/dark/shibboleth.svg);
133
134
  --provider-icon-simple-saml-php: url(https://cdn.workos.com/provider-icons/dark/simple-saml-php.svg);
134
- --provider-icon-slack: url(https://cdn.workos.com/provider-icons/dark/slack.svg);
135
+ --provider-icon-slack: url(https://images.workoscdn.com/images/de6b0a48-f241-4b85-8cb4-c04650f8d3f4.svg);
135
136
  --provider-icon-splunk: url(https://cdn.workos.com/provider-icons/dark/splunk.svg);
136
137
  --provider-icon-stripe: url(https://images.workoscdn.com/images/eb696a2b-ed4e-497a-a1ce-3c6c08dfde09.svg);
137
138
  --provider-icon-supabase: url(https://cdn.workos.com/provider-icons/dark/supabase.svg);
@@ -222,6 +223,9 @@
222
223
  .woswidgets-provider-icon[data-provider="classlink"] {
223
224
  background-image: var(--provider-icon-classlink);
224
225
  }
226
+ .woswidgets-provider-icon[data-provider="clever"] {
227
+ background-image: var(--provider-icon-clever);
228
+ }
225
229
  .woswidgets-provider-icon[data-provider="clerk"] {
226
230
  background-image: var(--provider-icon-clerk);
227
231
  }
@@ -270,7 +274,8 @@
270
274
  .woswidgets-provider-icon[data-provider="google-drive"] {
271
275
  background-image: var(--provider-icon-google-drive);
272
276
  }
273
- .woswidgets-provider-icon[data-provider="google-mail"] {
277
+ .woswidgets-provider-icon[data-provider="google-mail"],
278
+ .woswidgets-provider-icon[data-provider="gmail"] {
274
279
  background-image: var(--provider-icon-google-mail);
275
280
  }
276
281
  .woswidgets-provider-icon[data-provider="google"] {
@@ -1,12 +1,13 @@
1
1
  import * as React from 'react';
2
- export { AdminPortalDomainVerificationLoading } from './lib/admin-portal-domain-verification.js';
2
+ export { AdminPortalDomainVerificationError, AdminPortalDomainVerificationErrorProps, AdminPortalDomainVerificationLoading, AdminPortalDomainVerificationLoadingProps } from './lib/admin-portal-domain-verification.js';
3
3
  import { AuthToken } from './api/api-provider.js';
4
+ import { WidgetRootDomProps } from './lib/utils.js';
4
5
  import 'react/jsx-runtime';
5
6
  import './api/endpoint.js';
6
7
  import '@tanstack/react-query';
7
8
  import './api/widgets-api-client.js';
8
9
 
9
- interface AdminPortalDomainVerificationProps {
10
+ interface AdminPortalDomainVerificationProps extends WidgetRootDomProps {
10
11
  authToken: AuthToken;
11
12
  }
12
13
  declare const AdminPortalDomainVerification: React.FC<AdminPortalDomainVerificationProps>;
@@ -5,8 +5,7 @@ import {
5
5
  AdminPortalDomainVerificationLoading,
6
6
  AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational
7
7
  } from "./lib/admin-portal-domain-verification.js";
8
- import { useIsHydrated } from "./lib/use-is-hydrated.js";
9
- import { ApiProvider } from "./api/api-provider.js";
8
+ import { ApiProvider, useApiReady } from "./api/api-provider.js";
10
9
  import {
11
10
  useGenerateAdminPortalLink,
12
11
  useListOrganizationDomains,
@@ -17,20 +16,26 @@ import {
17
16
  import { useWorkOsApiUrl } from "./lib/widgets-context.js";
18
17
  import { ErrorBoundary } from "./lib/error-boundary.js";
19
18
  import { useQueryClient } from "@tanstack/react-query";
20
- const AdminPortalDomainVerification = ({ authToken }) => {
19
+ const AdminPortalDomainVerification = ({ authToken, ...domProps }) => {
21
20
  const baseUrl = useWorkOsApiUrl();
22
21
  return /* @__PURE__ */ jsx(
23
- ApiProvider,
22
+ ErrorBoundary,
24
23
  {
25
- widgetType: "admin-portal-domain-verification",
26
- authToken,
27
- baseUrl,
28
- children: /* @__PURE__ */ jsx(AdminPortalDomainVerificationContent, {})
24
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error, ...domProps }),
25
+ children: /* @__PURE__ */ jsx(
26
+ ApiProvider,
27
+ {
28
+ widgetType: "admin-portal-domain-verification",
29
+ authToken,
30
+ baseUrl,
31
+ children: /* @__PURE__ */ jsx(AdminPortalDomainVerificationImpl, { ...domProps })
32
+ }
33
+ )
29
34
  }
30
35
  );
31
36
  };
32
- const AdminPortalDomainVerificationContent = () => {
33
- const isHydrated = useIsHydrated();
37
+ const AdminPortalDomainVerificationImpl = (props) => {
38
+ const isApiReady = useApiReady();
34
39
  const queryClient = useQueryClient();
35
40
  const {
36
41
  data: organizationDomains,
@@ -75,26 +80,34 @@ const AdminPortalDomainVerificationContent = () => {
75
80
  const handleReverifyDomain = (domainId) => {
76
81
  reverifyDomain({ domainId });
77
82
  };
78
- if (!isHydrated || isLoading) {
79
- return /* @__PURE__ */ jsx(AdminPortalDomainVerificationLoading, {});
83
+ if (!isApiReady || isLoading) {
84
+ return /* @__PURE__ */ jsx(AdminPortalDomainVerificationLoading, { ...props });
80
85
  }
81
86
  if (error) {
82
- return /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error });
87
+ return /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error, ...props });
83
88
  }
84
89
  const domains = organizationDomains?.data || [];
85
- return /* @__PURE__ */ jsx(ErrorBoundary, { FallbackComponent: AdminPortalDomainVerificationError, children: /* @__PURE__ */ jsx(
86
- AdminPortalDomainVerificationPresentational,
90
+ return /* @__PURE__ */ jsx(
91
+ ErrorBoundary,
87
92
  {
88
- organizationDomains: domains,
89
- onAddDomain: handleAddDomain,
90
- onDeleteDomain: handleDeleteDomain,
91
- onReverifyDomain: handleReverifyDomain,
92
- isPending
93
+ fallbackRender: ({ error: error2 }) => /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error: error2, ...props }),
94
+ children: /* @__PURE__ */ jsx(
95
+ AdminPortalDomainVerificationPresentational,
96
+ {
97
+ organizationDomains: domains,
98
+ onAddDomain: handleAddDomain,
99
+ onDeleteDomain: handleDeleteDomain,
100
+ onReverifyDomain: handleReverifyDomain,
101
+ isPending,
102
+ ...props
103
+ }
104
+ )
93
105
  }
94
- ) });
106
+ );
95
107
  };
96
108
  export {
97
109
  AdminPortalDomainVerification,
110
+ AdminPortalDomainVerificationError,
98
111
  AdminPortalDomainVerificationLoading
99
112
  };
100
113
  //# sourceMappingURL=admin-portal-domain-verification.client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport { useIsHydrated } from \"./lib/use-is-hydrated.js\";\nimport { ApiProvider, AuthToken } from \"./api/api-provider.js\";\nimport {\n useGenerateAdminPortalLink,\n useListOrganizationDomains,\n getListOrganizationDomainsQueryKey,\n useDeleteOrganizationDomain,\n useReverifyOrganizationDomain,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\nexport interface AdminPortalDomainVerificationProps {\n authToken: AuthToken;\n}\n\nexport const AdminPortalDomainVerification: React.FC<\n AdminPortalDomainVerificationProps\n> = ({ authToken }) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ApiProvider\n widgetType=\"admin-portal-domain-verification\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalDomainVerificationContent />\n </ApiProvider>\n );\n};\n\nexport { AdminPortalDomainVerificationLoading };\n\nconst AdminPortalDomainVerificationContent = () => {\n const isHydrated = useIsHydrated();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useListOrganizationDomains();\n\n const { mutate: generateAdminPortalLink, isPending } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const { mutate: deleteDomain } = useDeleteOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const { mutate: reverifyDomain } = useReverifyOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink({\n params: {\n intent: \"domain_verification\",\n },\n });\n };\n\n const handleDeleteDomain = (domainId: string) => {\n deleteDomain({ domainId });\n };\n\n const handleReverifyDomain = (domainId: string) => {\n reverifyDomain({ domainId });\n };\n\n if (!isHydrated || isLoading) {\n return <AdminPortalDomainVerificationLoading />;\n }\n\n if (error) {\n return <AdminPortalDomainVerificationError error={error} />;\n }\n\n const domains = organizationDomains?.data || [];\n\n return (\n <ErrorBoundary FallbackComponent={AdminPortalDomainVerificationError}>\n <AdminPortalDomainVerificationPresentational\n organizationDomains={domains}\n onAddDomain={handleAddDomain}\n onDeleteDomain={handleDeleteDomain}\n onReverifyDomain={handleReverifyDomain}\n isPending={isPending}\n />\n </ErrorBoundary>\n );\n};\n"],"mappings":";AAoCM;AAjCN;AAAA,EACE;AAAA,EACA;AAAA,EACA,iCAAiC;AAAA,OAC5B;AACP,SAAS,qBAAqB;AAC9B,SAAS,mBAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAMxB,MAAM,gCAET,CAAC,EAAE,UAAU,MAAM;AACrB,QAAM,UAAU,gBAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,YAAW;AAAA,MACX;AAAA,MACA;AAAA,MAEA,8BAAC,wCAAqC;AAAA;AAAA,EACxC;AAEJ;AAIA,MAAM,uCAAuC,MAAM;AACjD,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc,eAAe;AACnC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,IAAI,2BAA2B;AAE/B,QAAM,EAAE,QAAQ,yBAAyB,UAAU,IACjD,2BAA2B;AAAA,IACzB,UAAU;AAAA,MACR,WAAW,CAAC,SAAS;AACnB,eAAO,KAAK,KAAK,MAAM,UAAU,qBAAqB;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,EAAE,QAAQ,aAAa,IAAI,4BAA4B;AAAA,IAC3D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,mCAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,eAAe,IAAI,8BAA8B;AAAA,IAC/D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,mCAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,MAAM;AAC5B,4BAAwB;AAAA,MACtB,QAAQ;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,iBAAa,EAAE,SAAS,CAAC;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,aAAqB;AACjD,mBAAe,EAAE,SAAS,CAAC;AAAA,EAC7B;AAEA,MAAI,CAAC,cAAc,WAAW;AAC5B,WAAO,oBAAC,wCAAqC;AAAA,EAC/C;AAEA,MAAI,OAAO;AACT,WAAO,oBAAC,sCAAmC,OAAc;AAAA,EAC3D;AAEA,QAAM,UAAU,qBAAqB,QAAQ,CAAC;AAE9C,SACE,oBAAC,iBAAc,mBAAmB,oCAChC;AAAA,IAAC;AAAA;AAAA,MACC,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport type {\n AdminPortalDomainVerificationErrorProps,\n AdminPortalDomainVerificationLoadingProps,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n useGenerateAdminPortalLink,\n useListOrganizationDomains,\n getListOrganizationDomainsQueryKey,\n useDeleteOrganizationDomain,\n useReverifyOrganizationDomain,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface AdminPortalDomainVerificationProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalDomainVerification: React.FC<\n AdminPortalDomainVerificationProps\n> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalDomainVerificationError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-domain-verification\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalDomainVerificationImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalDomainVerificationImpl = (\n props: Omit<AdminPortalDomainVerificationProps, \"authToken\">,\n) => {\n const isApiReady = useApiReady();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useListOrganizationDomains();\n\n const { mutate: generateAdminPortalLink, isPending } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const { mutate: deleteDomain } = useDeleteOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const { mutate: reverifyDomain } = useReverifyOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink({\n params: {\n intent: \"domain_verification\",\n },\n });\n };\n\n const handleDeleteDomain = (domainId: string) => {\n deleteDomain({ domainId });\n };\n\n const handleReverifyDomain = (domainId: string) => {\n reverifyDomain({ domainId });\n };\n\n if (!isApiReady || isLoading) {\n return <AdminPortalDomainVerificationLoading {...props} />;\n }\n\n if (error) {\n return <AdminPortalDomainVerificationError error={error} {...props} />;\n }\n\n const domains = organizationDomains?.data || [];\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalDomainVerificationError error={error} {...props} />\n )}\n >\n <AdminPortalDomainVerificationPresentational\n organizationDomains={domains}\n onAddDomain={handleAddDomain}\n onDeleteDomain={handleDeleteDomain}\n onReverifyDomain={handleReverifyDomain}\n isPending={isPending}\n {...props}\n />\n </ErrorBoundary>\n );\n};\n\nexport type {\n AdminPortalDomainVerificationProps,\n AdminPortalDomainVerificationLoadingProps,\n AdminPortalDomainVerificationErrorProps,\n};\nexport {\n AdminPortalDomainVerification,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerificationError,\n};\n"],"mappings":";AAqCQ;AAlCR;AAAA,EACE;AAAA,EACA;AAAA,EACA,iCAAiC;AAAA,OAC5B;AAKP,SAAS,aAAwB,mBAAmB;AACpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAO/B,MAAM,gCAEF,CAAC,EAAE,WAAW,GAAG,SAAS,MAAM;AAClC,QAAM,UAAU,gBAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,MAAM,MACvB,oBAAC,sCAAmC,OAAe,GAAG,UAAU;AAAA,MAGlE;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UAEA,8BAAC,qCAAmC,GAAG,UAAU;AAAA;AAAA,MACnD;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,oCAAoC,CACxC,UACG;AACH,QAAM,aAAa,YAAY;AAC/B,QAAM,cAAc,eAAe;AACnC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,IAAI,2BAA2B;AAE/B,QAAM,EAAE,QAAQ,yBAAyB,UAAU,IACjD,2BAA2B;AAAA,IACzB,UAAU;AAAA,MACR,WAAW,CAAC,SAAS;AACnB,eAAO,KAAK,KAAK,MAAM,UAAU,qBAAqB;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,EAAE,QAAQ,aAAa,IAAI,4BAA4B;AAAA,IAC3D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,mCAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,eAAe,IAAI,8BAA8B;AAAA,IAC/D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,mCAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,MAAM;AAC5B,4BAAwB;AAAA,MACtB,QAAQ;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,iBAAa,EAAE,SAAS,CAAC;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,aAAqB;AACjD,mBAAe,EAAE,SAAS,CAAC;AAAA,EAC7B;AAEA,MAAI,CAAC,cAAc,WAAW;AAC5B,WAAO,oBAAC,wCAAsC,GAAG,OAAO;AAAA,EAC1D;AAEA,MAAI,OAAO;AACT,WAAO,oBAAC,sCAAmC,OAAe,GAAG,OAAO;AAAA,EACtE;AAEA,QAAM,UAAU,qBAAqB,QAAQ,CAAC;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,OAAAA,OAAM,MACvB,oBAAC,sCAAmC,OAAOA,QAAQ,GAAG,OAAO;AAAA,MAG/D;AAAA,QAAC;AAAA;AAAA,UACC,qBAAqB;AAAA,UACrB,aAAa;AAAA,UACb,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,UAClB;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;","names":["error"]}
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ export { AdminPortalSsoConnectionError, AdminPortalSsoConnectionErrorProps, AdminPortalSsoConnectionLoading, AdminPortalSsoConnectionLoadingProps } from './lib/admin-portal-sso-connection.js';
3
+ import { AuthToken } from './api/api-provider.js';
4
+ import { WidgetRootDomProps } from './lib/utils.js';
5
+ import 'react/jsx-runtime';
6
+ import './lib/identity-providers.js';
7
+ import './api/endpoint.js';
8
+ import '@tanstack/react-query';
9
+ import './api/widgets-api-client.js';
10
+
11
+ interface AdminPortalSsoConnectionProps extends WidgetRootDomProps {
12
+ authToken: AuthToken;
13
+ }
14
+ declare const AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps>;
15
+
16
+ export { AdminPortalSsoConnection, type AdminPortalSsoConnectionProps };
@@ -7,8 +7,7 @@ import {
7
7
  AdminPortalSsoConnectionLoading,
8
8
  AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational
9
9
  } from "./lib/admin-portal-sso-connection.js";
10
- import { useIsHydrated } from "./lib/use-is-hydrated.js";
11
- import { ApiProvider } from "./api/api-provider.js";
10
+ import { ApiProvider, useApiReady } from "./api/api-provider.js";
12
11
  import {
13
12
  useGenerateAdminPortalLink,
14
13
  useListSsoConnections
@@ -16,24 +15,33 @@ import {
16
15
  import { useWorkOsApiUrl } from "./lib/widgets-context.js";
17
16
  import { ErrorBoundary } from "./lib/error-boundary.js";
18
17
  import { unreachable } from "./lib/utils.js";
19
- const AdminPortalSsoConnection = ({ authToken }) => {
18
+ const AdminPortalSsoConnection = ({
19
+ authToken,
20
+ ...domProps
21
+ }) => {
20
22
  const baseUrl = useWorkOsApiUrl();
21
23
  return /* @__PURE__ */ jsx(
22
- ApiProvider,
24
+ ErrorBoundary,
23
25
  {
24
- widgetType: "admin-portal-sso-connection",
25
- authToken,
26
- baseUrl,
27
- children: /* @__PURE__ */ jsx(SingleSignOnContent, {})
26
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error, ...domProps }),
27
+ children: /* @__PURE__ */ jsx(
28
+ ApiProvider,
29
+ {
30
+ widgetType: "admin-portal-sso-connection",
31
+ authToken,
32
+ baseUrl,
33
+ children: /* @__PURE__ */ jsx(AdminPortalSsoConnectionImpl, { ...domProps })
34
+ }
35
+ )
28
36
  }
29
37
  );
30
38
  };
31
- const SingleSignOnContent = () => {
32
- const isHydrated = useIsHydrated();
39
+ const AdminPortalSsoConnectionImpl = (props) => {
40
+ const isApiReady = useApiReady();
33
41
  const [currentDate, setCurrentDate] = React.useState(
34
- () => isHydrated ? /* @__PURE__ */ new Date() : null
42
+ () => isApiReady ? /* @__PURE__ */ new Date() : null
35
43
  );
36
- if (isHydrated && currentDate === null) {
44
+ if (isApiReady && currentDate === null) {
37
45
  setCurrentDate(/* @__PURE__ */ new Date());
38
46
  }
39
47
  const { mutate: generateAdminPortalLink, ...mutation } = useGenerateAdminPortalLink({
@@ -53,33 +61,40 @@ const SingleSignOnContent = () => {
53
61
  });
54
62
  };
55
63
  if (query.isLoading) {
56
- return /* @__PURE__ */ jsx(AdminPortalSsoConnectionLoading, {});
64
+ return /* @__PURE__ */ jsx(AdminPortalSsoConnectionLoading, { ...props });
57
65
  }
58
66
  if (query.isError) {
59
- return /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error: query.error });
67
+ return /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error: query.error, ...props });
60
68
  }
61
69
  if (query.data) {
62
70
  const connection = query.data[0];
63
71
  if (!connection) {
64
72
  return /* @__PURE__ */ jsx(
65
- AdminPortalSsoConnectionPresentational,
73
+ ErrorBoundary,
66
74
  {
67
- connectionStatus: "NotConfigured",
68
- currentDate,
69
- lastSession: null,
70
- adminPortalOpenButton: /* @__PURE__ */ jsx(
71
- AdminPortalOpenButton,
75
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error, ...props }),
76
+ children: /* @__PURE__ */ jsx(
77
+ AdminPortalSsoConnectionPresentational,
72
78
  {
73
- isPending: mutation.isPending,
74
- href: adminPortalLink,
75
- initConfig
79
+ ...props,
80
+ connectionStatus: "NotConfigured",
81
+ currentDate,
82
+ lastSession: null,
83
+ adminPortalOpenButton: /* @__PURE__ */ jsx(
84
+ AdminPortalOpenButton,
85
+ {
86
+ isPending: mutation.isPending,
87
+ href: adminPortalLink,
88
+ initConfig
89
+ }
90
+ )
76
91
  }
77
92
  )
78
93
  }
79
94
  );
80
95
  }
81
96
  const connectionState = getConnectionState(connection, currentDate);
82
- const props = (() => {
97
+ const statusProps = (() => {
83
98
  const connectionStatus = connectionState.status;
84
99
  if (!connection || connectionStatus === "NotConfigured") {
85
100
  return {
@@ -110,22 +125,29 @@ const SingleSignOnContent = () => {
110
125
  }
111
126
  })();
112
127
  const lastSession = connection.lastSession ? new Date(connection.lastSession.createdAt) : null;
113
- return /* @__PURE__ */ jsx(ErrorBoundary, { FallbackComponent: AdminPortalSsoConnectionError, children: /* @__PURE__ */ jsx(
114
- AdminPortalSsoConnectionPresentational,
128
+ return /* @__PURE__ */ jsx(
129
+ ErrorBoundary,
115
130
  {
116
- ...props,
117
- currentDate,
118
- lastSession,
119
- adminPortalOpenButton: /* @__PURE__ */ jsx(
120
- AdminPortalOpenButton,
131
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error, ...props }),
132
+ children: /* @__PURE__ */ jsx(
133
+ AdminPortalSsoConnectionPresentational,
121
134
  {
122
- isPending: mutation.isPending,
123
- href: adminPortalLink,
124
- initConfig
135
+ ...props,
136
+ ...statusProps,
137
+ currentDate,
138
+ lastSession,
139
+ adminPortalOpenButton: /* @__PURE__ */ jsx(
140
+ AdminPortalOpenButton,
141
+ {
142
+ isPending: mutation.isPending,
143
+ href: adminPortalLink,
144
+ initConfig
145
+ }
146
+ )
125
147
  }
126
148
  )
127
149
  }
128
- ) });
150
+ );
129
151
  }
130
152
  };
131
153
  function getConnectionState(connection, currentDate) {
@@ -231,12 +253,15 @@ function getIdentityProvider(connection) {
231
253
  return "generic-oidc";
232
254
  case "LoginGovOidc":
233
255
  return "login-gov";
256
+ case "CleverOidc":
257
+ return "clever";
234
258
  default:
235
259
  return unreachable(connection);
236
260
  }
237
261
  }
238
262
  export {
239
263
  AdminPortalSsoConnection,
264
+ AdminPortalSsoConnectionError,
240
265
  AdminPortalSsoConnectionLoading
241
266
  };
242
- //# sourceMappingURL=admin-portal-sso-connection-client.js.map
267
+ //# sourceMappingURL=admin-portal-sso-connection.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/admin-portal-sso-connection.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalOpenButton,\n AdminPortalSsoConnectionError,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport type {\n AdminPortalSsoConnectionErrorProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionStatusProps,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n type SsoConnection,\n useGenerateAdminPortalLink,\n useListSsoConnections,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { unreachable, WidgetRootDomProps } from \"./lib/utils.js\";\nimport { IdentityProvider } from \"./lib/identity-providers.js\";\n\ninterface AdminPortalSsoConnectionProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps> = ({\n authToken,\n ...domProps\n}) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-sso-connection\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalSsoConnectionImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalSsoConnectionImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const [currentDate, setCurrentDate] = React.useState<Date | null>(() =>\n isApiReady ? new Date() : null,\n );\n if (isApiReady && currentDate === null) {\n setCurrentDate(new Date());\n }\n\n const { mutate: generateAdminPortalLink, ...mutation } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const adminPortalLink = mutation.data?.link ?? null;\n\n const query = useListSsoConnections();\n\n const initConfig = () => {\n generateAdminPortalLink({\n params: {\n intent: \"sso\",\n },\n });\n };\n\n if (query.isLoading) {\n return <AdminPortalSsoConnectionLoading {...props} />;\n }\n\n if (query.isError) {\n return <AdminPortalSsoConnectionError error={query.error} {...props} />;\n }\n\n if (query.data) {\n const connection = query.data[0];\n if (!connection) {\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n connectionStatus=\"NotConfigured\"\n currentDate={currentDate}\n lastSession={null}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n const connectionState = getConnectionState(connection, currentDate);\n const statusProps: AdminPortalSsoConnectionStatusProps = (() => {\n const connectionStatus = connectionState.status;\n if (!connection || connectionStatus === \"NotConfigured\") {\n return {\n connectionStatus: \"NotConfigured\",\n } satisfies AdminPortalSsoConnectionStatusProps;\n }\n\n const identityProvider = getIdentityProvider(connection);\n switch (connectionStatus) {\n case \"Active\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Inactive\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Expired\":\n case \"Expiring\":\n return {\n connectionStatus,\n expiryDate: connectionState.expiryDate,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n default:\n return unreachable(connectionState);\n }\n })();\n\n const lastSession = connection.lastSession\n ? new Date(connection.lastSession.createdAt)\n : null;\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n {...statusProps}\n currentDate={currentDate}\n lastSession={lastSession}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n};\n\ntype ConnectionState =\n | { status: \"NotConfigured\" }\n | { status: \"Active\" }\n | { status: \"Inactive\" }\n | {\n status: \"Expiring\";\n daysUntilExpiry: number | null;\n expiryDate: Date | null;\n }\n | { status: \"Expired\"; expiryDate: Date | null };\n\nfunction getConnectionState(\n connection: SsoConnection,\n currentDate: Date | null,\n): ConnectionState {\n switch (connection.state) {\n case \"Active\":\n case \"Validating\":\n case \"Deleting\": {\n const activeStatus = { status: \"Active\" } satisfies ConnectionState;\n if (connection.providerTag !== \"Saml\") {\n return activeStatus;\n }\n\n if (connection.latestExpiredCertificate) {\n return {\n status: \"Expired\",\n expiryDate: connection.latestExpiredCertificate.notAfter\n ? new Date(connection.latestExpiredCertificate.notAfter)\n : null,\n };\n }\n\n const expiryTime = connection.latestExpiringCertificate?.notAfter;\n if (currentDate == null || expiryTime == null) {\n return activeStatus;\n }\n\n const expiryDate = new Date(expiryTime);\n const daysUntilExpiry = (() => {\n const diff = expiryDate.getTime() - currentDate.getTime();\n if (diff < 0) {\n return -1;\n }\n\n return diff / (1000 * 60 * 60 * 24);\n })();\n\n if (daysUntilExpiry !== -1 && daysUntilExpiry <= 30) {\n return { status: \"Expiring\", daysUntilExpiry, expiryDate };\n }\n\n return activeStatus;\n }\n case \"Inactive\": {\n return { status: \"Inactive\" };\n }\n default:\n return unreachable(connection);\n }\n}\n\nfunction getIdentityProvider(connection: SsoConnection): IdentityProvider {\n switch (connection.type) {\n case \"AdfsSaml\":\n case \"EntraIdOidc\":\n return \"microsoft\";\n case \"Auth0Migration\":\n case \"Auth0Saml\":\n return \"auth0\";\n case \"AzureSaml\":\n return \"azure\";\n case \"CasSaml\":\n return \"cas\";\n case \"ClassLinkSaml\":\n return \"classlink\";\n case \"CloudflareSaml\":\n return \"cloudflare\";\n case \"CyberArkSaml\":\n return \"cyberark\";\n case \"DuoSaml\":\n return \"duo\";\n case \"GenericSaml\":\n return \"generic-saml\";\n case \"GoogleSaml\":\n case \"GoogleOidc\":\n return \"google\";\n case \"JumpCloudSaml\":\n return \"jumpcloud\";\n case \"KeycloakSaml\":\n return \"keycloak\";\n case \"LastPassSaml\":\n return \"lastpass\";\n case \"MiniOrangeSaml\":\n return \"miniorange\";\n case \"NetIqSaml\":\n return \"net-iq\";\n case \"OktaOidc\":\n case \"OktaSaml\":\n return \"okta\";\n case \"OneLoginSaml\":\n return \"onelogin\";\n case \"OracleSaml\":\n return \"oracle\";\n case \"PingFederateSaml\":\n case \"PingOneSaml\":\n return \"ping-identity\";\n case \"RipplingSaml\":\n return \"rippling\";\n case \"SalesforceSaml\":\n return \"salesforce\";\n case \"ShibbolethGenericSaml\":\n case \"ShibbolethSaml\":\n return \"shibboleth\";\n case \"SimpleSamlPhpSaml\":\n return \"simple-saml-php\";\n case \"TestIdp\":\n return \"test-idp\";\n case \"VmWareSaml\":\n return \"vmware\";\n case \"AdpOidc\":\n return \"adp\";\n case \"GenericOidc\":\n return \"generic-oidc\";\n case \"LoginGovOidc\":\n return \"login-gov\";\n case \"CleverOidc\":\n return \"clever\";\n default:\n return unreachable(connection);\n }\n}\n\nexport type {\n AdminPortalSsoConnectionProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionErrorProps,\n};\nexport {\n AdminPortalSsoConnection,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnectionError,\n};\n"],"mappings":"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","names":[]}
@@ -1,15 +1,15 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
 
4
- type WidgetType = "admin-portal-domain-verification" | "user-management" | "organization-switcher" | "user-sessions" | "user-security" | "user-profile" | "admin-portal-sso-connection" | "api-keys";
4
+ type WidgetType = "admin-portal-domain-verification" | "user-management" | "organization-switcher" | "user-sessions" | "user-security" | "user-profile" | "admin-portal-sso-connection" | "api-keys" | "pipes";
5
5
  type AuthToken = string | (() => Promise<string>);
6
6
  interface ElevatedAccess {
7
7
  token: string;
8
8
  expiresAt: string;
9
9
  }
10
10
  interface ApiConfig {
11
- authToken: Promise<string> | string;
12
- authTokenQueryKey: string;
11
+ authToken: string | undefined;
12
+ permissions: string[] | undefined;
13
13
  baseUrl: string;
14
14
  widgetType: WidgetType;
15
15
  elevatedAccess?: ElevatedAccess;
@@ -27,5 +27,6 @@ declare const useElevatedAccessToken: () => {
27
27
  elevatedAccess: ElevatedAccess | undefined;
28
28
  setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;
29
29
  };
30
+ declare const useApiReady: () => boolean;
30
31
 
31
- export { ApiProvider, type AuthToken, type WidgetType, useApi, useElevatedAccessToken };
32
+ export { ApiProvider, type AuthToken, type WidgetType, useApi, useApiReady, useElevatedAccessToken };
@@ -1,5 +1,8 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
+ import { useQuery } from "@tanstack/react-query";
2
3
  import * as React from "react";
4
+ import { useIsHydrated } from "../lib/use-is-hydrated.js";
5
+ import { getClaims } from "./utils.js";
3
6
  const ApiContext = React.createContext(void 0);
4
7
  const ApiProvider = ({
5
8
  authToken,
@@ -7,7 +10,20 @@ const ApiProvider = ({
7
10
  children,
8
11
  widgetType
9
12
  }) => {
10
- const authTokenPromiseOrString = typeof authToken === "string" ? authToken : authToken();
13
+ const authTokenQuery = useQuery({
14
+ initialData: typeof authToken === "string" ? {
15
+ authToken,
16
+ permissions: getClaims(authToken).permissions
17
+ } : void 0,
18
+ queryFn: async () => {
19
+ const resolvedToken = typeof authToken === "string" ? authToken : await authToken();
20
+ return {
21
+ authToken: resolvedToken,
22
+ permissions: getClaims(resolvedToken).permissions
23
+ };
24
+ },
25
+ queryKey: ["authToken", widgetType]
26
+ });
11
27
  const [elevatedAccess, setElevatedAccess] = React.useState();
12
28
  const elevatedAccessTimeout = React.useRef(void 0);
13
29
  React.useEffect(() => {
@@ -31,15 +47,15 @@ const ApiProvider = ({
31
47
  }, [elevatedAccess]);
32
48
  const value = React.useMemo(
33
49
  () => ({
34
- authToken: authTokenPromiseOrString,
35
- authTokenQueryKey: getAuthTokenQueryKey(authTokenPromiseOrString),
50
+ authToken: authTokenQuery.data?.authToken,
51
+ permissions: authTokenQuery.data?.permissions,
36
52
  baseUrl,
37
53
  elevatedAccess,
38
54
  setElevatedAccess,
39
55
  widgetType
40
56
  }),
41
57
  [
42
- authTokenPromiseOrString,
58
+ authTokenQuery.data,
43
59
  baseUrl,
44
60
  elevatedAccess,
45
61
  setElevatedAccess,
@@ -59,24 +75,15 @@ const useElevatedAccessToken = () => {
59
75
  const { elevatedAccess, setElevatedAccess } = useApi();
60
76
  return { elevatedAccess, setElevatedAccess };
61
77
  };
62
- const PromiseKey = /* @__PURE__ */ new WeakMap();
63
- function getAuthTokenQueryKey(authTokenPromiseOrString) {
64
- if (typeof authTokenPromiseOrString === "string") {
65
- return authTokenPromiseOrString;
66
- }
67
- const authTokenPromise = authTokenPromiseOrString;
68
- const promiseKey = PromiseKey.get(authTokenPromise);
69
- if (!promiseKey) {
70
- const newPromiseKey = `${Math.random()}`;
71
- PromiseKey.set(authTokenPromise, newPromiseKey);
72
- return newPromiseKey;
73
- } else {
74
- return promiseKey;
75
- }
76
- }
78
+ const useApiReady = () => {
79
+ const { authToken } = useApi();
80
+ const isHydrated = useIsHydrated();
81
+ return isHydrated && authToken !== void 0;
82
+ };
77
83
  export {
78
84
  ApiProvider,
79
85
  useApi,
86
+ useApiReady,
80
87
  useElevatedAccessToken
81
88
  };
82
89
  //# sourceMappingURL=api-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type WidgetType =\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\";\n\nexport type AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiConfig {\n authToken: Promise<string> | string;\n authTokenQueryKey: string;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\nconst ApiContext = React.createContext<ApiConfig | undefined>(undefined);\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nexport const ApiProvider = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}: ApiProviderProps) => {\n const authTokenPromiseOrString =\n typeof authToken === \"string\" ? authToken : authToken();\n const [elevatedAccess, setElevatedAccess] = React.useState<ElevatedAccess>();\n const elevatedAccessTimeout = React.useRef<number | undefined>(undefined);\n\n // This effect manages the expiration of elevated access tokens\n // When an elevated access token is present, it checks every 30 seconds if the token has expired\n // If the token has expired (current time > expiration time), it clears the elevated access\n React.useEffect(() => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n\n if (elevatedAccess) {\n elevatedAccessTimeout.current = window.setInterval(() => {\n const now = new Date();\n const expiresAtDate = new Date(elevatedAccess.expiresAt);\n\n // Reset the elevated access if it has expired\n if (now > expiresAtDate) {\n setElevatedAccess(undefined);\n }\n }, 30_000); // every 30 seconds\n }\n\n return () => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n };\n }, [elevatedAccess]);\n\n const value = React.useMemo(\n () => ({\n authToken: authTokenPromiseOrString,\n authTokenQueryKey: getAuthTokenQueryKey(authTokenPromiseOrString),\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n }),\n [\n authTokenPromiseOrString,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n ],\n );\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n};\n\nexport const useApi = () => {\n const context = React.useContext(ApiContext);\n\n if (context === undefined) {\n throw new Error(\"useApi must be used within an ApiProvider\");\n }\n\n return context;\n};\n\nexport const useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\n// Map promises to a UUID that they can be identified by\nconst PromiseKey = new WeakMap<Promise<string>, string>();\n/*\n *\n * @param getAccessToken - Async function that returns a promise that resolves to a string\n * @returns a resolved string or null from the access token promise\n */\nfunction getAuthTokenQueryKey(\n authTokenPromiseOrString: Promise<string> | string,\n): string {\n // Need to go by equality of the promise to avoid scenarios where\n // 1. The promise is the same, but the function changes\n // 2. The function is the same, but the promise is different ⚠️\n //\n // This does have the unfortunate side effect where if the function result\n // isn't memoized somehow, then it will invalidate the query on every render.\n // This doesn't occur with the current use case of getAccessToken from\n // useAuth, but could in a custom implementation.\n //\n // Other things I explored:\n // 1. Removing promise api, and force user to resolve the promise\n // themselves. The user can already do this with the string API, so\n // it's not necessary, and they could run into issues 1, or 2 if\n // implemented wrong.\n // 2. Memoizing the function - this results in issue 2, where the function\n // is static, but the promise changes. I believe this actually is the\n // case with useAuth since it only sets the client once on initialization,\n // and binds the function to the client after that promise resolves.\n\n if (typeof authTokenPromiseOrString === \"string\") {\n return authTokenPromiseOrString;\n }\n\n const authTokenPromise = authTokenPromiseOrString;\n\n // Cannot memoize on the function because it could remain the same while\n // returning a different promise (and useAuth behaves this way).\n\n const promiseKey = PromiseKey.get(authTokenPromise);\n\n // Side effect, but we we're using a weak map, so it should be pretty safe\n if (!promiseKey) {\n const newPromiseKey = `${Math.random()}`;\n PromiseKey.set(authTokenPromise, newPromiseKey);\n return newPromiseKey;\n } else {\n return promiseKey;\n }\n}\n"],"mappings":"AA6FS;AA7FT,YAAY,WAAW;AA4BvB,MAAM,aAAa,MAAM,cAAqC,MAAS;AAShE,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,QAAM,2BACJ,OAAO,cAAc,WAAW,YAAY,UAAU;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAyB;AAC3E,QAAM,wBAAwB,MAAM,OAA2B,MAAS;AAKxE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,SAAS;AACjC,aAAO,cAAc,sBAAsB,OAAO;AAAA,IACpD;AAEA,QAAI,gBAAgB;AAClB,4BAAsB,UAAU,OAAO,YAAY,MAAM;AACvD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAGvD,YAAI,MAAM,eAAe;AACvB,4BAAkB,MAAS;AAAA,QAC7B;AAAA,MACF,GAAG,GAAM;AAAA,IACX;AAEA,WAAO,MAAM;AACX,UAAI,sBAAsB,SAAS;AACjC,eAAO,cAAc,sBAAsB,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,WAAW;AAAA,MACX,mBAAmB,qBAAqB,wBAAwB;AAAA,MAChE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,oBAAC,WAAW,UAAX,EAAoB,OAAe,UAAS;AACtD;AAEO,MAAM,SAAS,MAAM;AAC1B,QAAM,UAAU,MAAM,WAAW,UAAU;AAE3C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;AAEO,MAAM,yBAAyB,MAAM;AAC1C,QAAM,EAAE,gBAAgB,kBAAkB,IAAI,OAAO;AAErD,SAAO,EAAE,gBAAgB,kBAAkB;AAC7C;AAGA,MAAM,aAAa,oBAAI,QAAiC;AAMxD,SAAS,qBACP,0BACQ;AAoBR,MAAI,OAAO,6BAA6B,UAAU;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB;AAKzB,QAAM,aAAa,WAAW,IAAI,gBAAgB;AAGlD,MAAI,CAAC,YAAY;AACf,UAAM,gBAAgB,GAAG,KAAK,OAAO,CAAC;AACtC,eAAW,IAAI,kBAAkB,aAAa;AAC9C,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport { useIsHydrated } from \"../lib/use-is-hydrated.js\";\nimport { getClaims } from \"./utils.js\";\n\nexport type WidgetType =\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\"\n | \"pipes\";\n\nexport type AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiConfig {\n authToken: string | undefined;\n permissions: string[] | undefined;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\nconst ApiContext = React.createContext<ApiConfig | undefined>(undefined);\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nexport const ApiProvider = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}: ApiProviderProps) => {\n const authTokenQuery = useQuery({\n initialData:\n typeof authToken === \"string\"\n ? {\n authToken,\n permissions: getClaims(authToken).permissions,\n }\n : undefined,\n queryFn: async () => {\n const resolvedToken =\n typeof authToken === \"string\" ? authToken : await authToken();\n\n return {\n authToken: resolvedToken,\n permissions: getClaims(resolvedToken).permissions,\n };\n },\n queryKey: [\"authToken\", widgetType],\n });\n\n const [elevatedAccess, setElevatedAccess] = React.useState<ElevatedAccess>();\n const elevatedAccessTimeout = React.useRef<number | undefined>(undefined);\n\n // This effect manages the expiration of elevated access tokens\n // When an elevated access token is present, it checks every 30 seconds if the token has expired\n // If the token has expired (current time > expiration time), it clears the elevated access\n React.useEffect(() => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n\n if (elevatedAccess) {\n elevatedAccessTimeout.current = window.setInterval(() => {\n const now = new Date();\n const expiresAtDate = new Date(elevatedAccess.expiresAt);\n\n // Reset the elevated access if it has expired\n if (now > expiresAtDate) {\n setElevatedAccess(undefined);\n }\n }, 30_000); // every 30 seconds\n }\n\n return () => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n };\n }, [elevatedAccess]);\n\n const value = React.useMemo(\n () => ({\n authToken: authTokenQuery.data?.authToken,\n permissions: authTokenQuery.data?.permissions,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n }),\n [\n authTokenQuery.data,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n ],\n );\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n};\n\nexport const useApi = () => {\n const context = React.useContext(ApiContext);\n\n if (context === undefined) {\n throw new Error(\"useApi must be used within an ApiProvider\");\n }\n\n return context;\n};\n\nexport const useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\nexport const useApiReady = () => {\n const { authToken } = useApi();\n const isHydrated = useIsHydrated();\n\n return isHydrated && authToken !== undefined;\n};\n"],"mappings":"AAmHS;AAnHT,SAAS,gBAAgB;AACzB,YAAY,WAAW;AACvB,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AA6B1B,MAAM,aAAa,MAAM,cAAqC,MAAS;AAShE,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,QAAM,iBAAiB,SAAS;AAAA,IAC9B,aACE,OAAO,cAAc,WACjB;AAAA,MACE;AAAA,MACA,aAAa,UAAU,SAAS,EAAE;AAAA,IACpC,IACA;AAAA,IACN,SAAS,YAAY;AACnB,YAAM,gBACJ,OAAO,cAAc,WAAW,YAAY,MAAM,UAAU;AAE9D,aAAO;AAAA,QACL,WAAW;AAAA,QACX,aAAa,UAAU,aAAa,EAAE;AAAA,MACxC;AAAA,IACF;AAAA,IACA,UAAU,CAAC,aAAa,UAAU;AAAA,EACpC,CAAC;AAED,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAyB;AAC3E,QAAM,wBAAwB,MAAM,OAA2B,MAAS;AAKxE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,SAAS;AACjC,aAAO,cAAc,sBAAsB,OAAO;AAAA,IACpD;AAEA,QAAI,gBAAgB;AAClB,4BAAsB,UAAU,OAAO,YAAY,MAAM;AACvD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAGvD,YAAI,MAAM,eAAe;AACvB,4BAAkB,MAAS;AAAA,QAC7B;AAAA,MACF,GAAG,GAAM;AAAA,IACX;AAEA,WAAO,MAAM;AACX,UAAI,sBAAsB,SAAS;AACjC,eAAO,cAAc,sBAAsB,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,WAAW,eAAe,MAAM;AAAA,MAChC,aAAa,eAAe,MAAM;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,oBAAC,WAAW,UAAX,EAAoB,OAAe,UAAS;AACtD;AAEO,MAAM,SAAS,MAAM;AAC1B,QAAM,UAAU,MAAM,WAAW,UAAU;AAE3C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;AAEO,MAAM,yBAAyB,MAAM;AAC1C,QAAM,EAAE,gBAAgB,kBAAkB,IAAI,OAAO;AAErD,SAAO,EAAE,gBAAgB,kBAAkB;AAC7C;AAEO,MAAM,cAAc,MAAM;AAC/B,QAAM,EAAE,UAAU,IAAI,OAAO;AAC7B,QAAM,aAAa,cAAc;AAEjC,SAAO,cAAc,cAAc;AACrC;","names":[]}