@workos-inc/widgets 1.6.0 → 1.7.0-pre.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.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/admin-portal-domain-verification.client.d.cts +11 -0
- package/dist/cjs/admin-portal-sso-connection.client.d.cts +11 -0
- package/dist/cjs/alert-dialog-BlG3_awx.d.cts +25 -0
- package/dist/cjs/api-keys.client.d.cts +11 -0
- package/dist/cjs/dialog-C15qCLN3.d.cts +23 -0
- package/dist/cjs/dropdown-menu-BQ5LtvdR.d.cts +48 -0
- package/dist/cjs/index.d.cts +8 -0
- package/dist/cjs/lib/add-mfa-dialog.cjs +22 -14
- package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/add-mfa-dialog.d.cts +2 -2
- package/dist/cjs/lib/admin-portal-domain-verification.cjs +6 -8
- package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.d.cts +11 -0
- package/dist/cjs/lib/admin-portal-sso-connection.cjs +7 -8
- package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-sso-connection.d.cts +11 -0
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +3 -3
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys-search.cjs +2 -6
- package/dist/cjs/lib/api-keys/api-keys-search.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys-table.cjs +18 -19
- package/dist/cjs/lib/api-keys/api-keys-table.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys.cjs +2 -2
- package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys.d.cts +12 -0
- package/dist/cjs/lib/api-keys/create-api-key.cjs +20 -14
- package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +7 -7
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/skeleton-table.cjs +3 -2
- package/dist/cjs/lib/api-keys/skeleton-table.cjs.map +1 -1
- package/dist/cjs/lib/change-password-dialog.cjs +11 -9
- package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-password-dialog.d.cts +2 -2
- package/dist/cjs/lib/copy-button.cjs +51 -29
- package/dist/cjs/lib/copy-button.cjs.map +1 -1
- package/dist/cjs/lib/copy-button.d.cts +22 -4
- package/dist/cjs/lib/delete-domain-dialog.cjs +8 -7
- package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.cjs +15 -7
- package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.d.cts +2 -2
- package/dist/cjs/lib/domain-actions.cjs +8 -8
- package/dist/cjs/lib/domain-actions.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.cjs +10 -9
- package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.d.cts +2 -2
- package/dist/cjs/lib/edit-user-role-dialog.cjs +15 -15
- package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-role-dialog.d.cts +2 -2
- package/dist/cjs/lib/elements/alert-dialog.cjs +76 -0
- package/dist/cjs/lib/elements/alert-dialog.cjs.map +1 -0
- package/dist/cjs/lib/elements/alert-dialog.d.cts +3 -0
- package/dist/cjs/lib/elements/dialog.cjs +74 -0
- package/dist/cjs/lib/elements/dialog.cjs.map +1 -0
- package/dist/cjs/lib/elements/dialog.d.cts +3 -0
- package/dist/cjs/lib/elements/dropdown-menu.cjs +162 -0
- package/dist/cjs/lib/elements/dropdown-menu.cjs.map +1 -0
- package/dist/cjs/lib/elements/dropdown-menu.d.cts +3 -0
- package/dist/cjs/lib/elements/select.cjs +112 -0
- package/dist/cjs/lib/elements/select.cjs.map +1 -0
- package/dist/cjs/lib/elements/select.d.cts +4 -0
- package/dist/cjs/lib/elements/utils.cjs +54 -0
- package/dist/cjs/lib/elements/utils.cjs.map +1 -0
- package/dist/cjs/lib/elements/utils.d.cts +15 -0
- package/dist/cjs/lib/elements.cjs +73 -219
- package/dist/cjs/lib/elements.cjs.map +1 -1
- package/dist/cjs/lib/elements.d.cts +16 -13
- package/dist/cjs/lib/elevated-access.cjs +18 -10
- package/dist/cjs/lib/elevated-access.cjs.map +1 -1
- package/dist/cjs/lib/empty-state.d.cts +12 -0
- package/dist/cjs/lib/invite-user-dialog.cjs +13 -12
- package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs +7 -6
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
- package/dist/cjs/lib/logout-dialog.cjs +7 -6
- package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-dialog.d.cts +2 -2
- package/dist/cjs/lib/organization-switcher.cjs +39 -20
- package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
- package/dist/cjs/lib/organization-switcher.d.cts +16 -2
- package/dist/cjs/lib/otp-input.d.cts +8 -0
- package/dist/cjs/lib/pipes.cjs +51 -60
- package/dist/cjs/lib/pipes.cjs.map +1 -1
- package/dist/cjs/lib/pipes.d.cts +12 -0
- package/dist/cjs/lib/resend-invite-dialog.cjs +23 -13
- package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.d.cts +2 -2
- package/dist/cjs/lib/reset-mfa-dialog.cjs +9 -8
- package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/reset-mfa-dialog.d.cts +2 -2
- package/dist/cjs/lib/revoke-invite-dialog.cjs +17 -8
- package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.d.cts +2 -2
- package/dist/cjs/lib/save-button.cjs +3 -2
- package/dist/cjs/lib/save-button.cjs.map +1 -1
- package/dist/cjs/lib/save-button.d.cts +12 -1
- package/dist/cjs/lib/set-password-dialog.cjs +11 -9
- package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/set-password-dialog.d.cts +2 -2
- package/dist/cjs/lib/user-actions-dropdown.cjs +9 -8
- package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.cjs +1 -1
- package/dist/cjs/lib/user-profile.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.d.cts +11 -0
- package/dist/cjs/lib/user-security.cjs +3 -3
- package/dist/cjs/lib/user-security.cjs.map +1 -1
- package/dist/cjs/lib/user-security.d.cts +12 -0
- package/dist/cjs/lib/user-sessions.cjs +3 -11
- package/dist/cjs/lib/user-sessions.cjs.map +1 -1
- package/dist/cjs/lib/user-sessions.d.cts +12 -0
- package/dist/cjs/lib/users-filter.cjs +5 -6
- package/dist/cjs/lib/users-filter.cjs.map +1 -1
- package/dist/cjs/lib/users-filter.d.cts +2 -2
- package/dist/cjs/lib/users-management.cjs +22 -34
- package/dist/cjs/lib/users-management.cjs.map +1 -1
- package/dist/cjs/lib/users-management.d.cts +11 -0
- package/dist/cjs/lib/users-search.cjs +2 -6
- package/dist/cjs/lib/users-search.cjs.map +1 -1
- package/dist/cjs/lib/utils.cjs +25 -2
- package/dist/cjs/lib/utils.cjs.map +1 -1
- package/dist/cjs/lib/utils.d.cts +17 -3
- package/dist/cjs/lib/view-dns-record-dialog.cjs +9 -8
- package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
- package/dist/cjs/lib/widgets-context.d.cts +8 -0
- package/dist/cjs/organization-switcher.client.cjs +33 -5
- package/dist/cjs/organization-switcher.client.cjs.map +1 -1
- package/dist/cjs/organization-switcher.client.d.cts +11 -0
- package/dist/cjs/pipes.client.d.cts +11 -0
- package/dist/cjs/select-KR89Qnvm.d.cts +30 -0
- package/dist/cjs/user-profile.client.d.cts +11 -0
- package/dist/cjs/user-security.client.d.cts +11 -0
- package/dist/cjs/user-sessions.client.d.cts +11 -0
- package/dist/cjs/users-management.client.d.cts +11 -0
- package/dist/cjs/workos-widgets.client.d.cts +8 -0
- package/dist/css/lib/provider-icon.css +6 -0
- package/dist/esm/admin-portal-domain-verification.client.d.ts +11 -0
- package/dist/esm/admin-portal-sso-connection.client.d.ts +11 -0
- package/dist/esm/alert-dialog-BlG3_awx.d.ts +25 -0
- package/dist/esm/api-keys.client.d.ts +11 -0
- package/dist/esm/dialog-C15qCLN3.d.ts +23 -0
- package/dist/esm/dropdown-menu-BQ5LtvdR.d.ts +48 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/lib/add-mfa-dialog.d.ts +2 -2
- package/dist/esm/lib/add-mfa-dialog.js +16 -9
- package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/admin-portal-domain-verification.d.ts +11 -0
- package/dist/esm/lib/admin-portal-domain-verification.js +6 -8
- package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
- package/dist/esm/lib/admin-portal-sso-connection.d.ts +11 -0
- package/dist/esm/lib/admin-portal-sso-connection.js +8 -9
- package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
- package/dist/esm/lib/api-keys/api-key-details-dialog.js +3 -3
- package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys-search.js +2 -6
- package/dist/esm/lib/api-keys/api-keys-search.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys-table.js +18 -32
- package/dist/esm/lib/api-keys/api-keys-table.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys.d.ts +12 -0
- package/dist/esm/lib/api-keys/api-keys.js +2 -2
- package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
- package/dist/esm/lib/api-keys/create-api-key.js +17 -14
- package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +4 -4
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/api-keys/skeleton-table.js +2 -1
- package/dist/esm/lib/api-keys/skeleton-table.js.map +1 -1
- package/dist/esm/lib/change-password-dialog.d.ts +2 -2
- package/dist/esm/lib/change-password-dialog.js +8 -12
- package/dist/esm/lib/change-password-dialog.js.map +1 -1
- package/dist/esm/lib/copy-button.d.ts +22 -4
- package/dist/esm/lib/copy-button.js +49 -28
- package/dist/esm/lib/copy-button.js.map +1 -1
- package/dist/esm/lib/delete-domain-dialog.js +4 -3
- package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
- package/dist/esm/lib/delete-user-dialog.d.ts +2 -2
- package/dist/esm/lib/delete-user-dialog.js +13 -15
- package/dist/esm/lib/delete-user-dialog.js.map +1 -1
- package/dist/esm/lib/domain-actions.js +4 -4
- package/dist/esm/lib/domain-actions.js.map +1 -1
- package/dist/esm/lib/edit-user-profile-dialog.d.ts +2 -2
- package/dist/esm/lib/edit-user-profile-dialog.js +7 -12
- package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
- package/dist/esm/lib/edit-user-role-dialog.d.ts +2 -2
- package/dist/esm/lib/edit-user-role-dialog.js +9 -19
- package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
- package/dist/esm/lib/elements/alert-dialog.d.ts +3 -0
- package/dist/esm/lib/elements/alert-dialog.js +45 -0
- package/dist/esm/lib/elements/alert-dialog.js.map +1 -0
- package/dist/esm/lib/elements/dialog.d.ts +3 -0
- package/dist/esm/lib/elements/dialog.js +43 -0
- package/dist/esm/lib/elements/dialog.js.map +1 -0
- package/dist/esm/lib/elements/dropdown-menu.d.ts +3 -0
- package/dist/esm/lib/elements/dropdown-menu.js +131 -0
- package/dist/esm/lib/elements/dropdown-menu.js.map +1 -0
- package/dist/esm/lib/elements/select.d.ts +4 -0
- package/dist/esm/lib/elements/select.js +77 -0
- package/dist/esm/lib/elements/select.js.map +1 -0
- package/dist/esm/lib/elements/utils.d.ts +15 -0
- package/dist/esm/lib/elements/utils.js +20 -0
- package/dist/esm/lib/elements/utils.js.map +1 -0
- package/dist/esm/lib/elements.d.ts +16 -13
- package/dist/esm/lib/elements.js +71 -215
- package/dist/esm/lib/elements.js.map +1 -1
- package/dist/esm/lib/elevated-access.js +14 -6
- package/dist/esm/lib/elevated-access.js.map +1 -1
- package/dist/esm/lib/empty-state.d.ts +12 -0
- package/dist/esm/lib/invite-user-dialog.js +10 -24
- package/dist/esm/lib/invite-user-dialog.js.map +1 -1
- package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
- package/dist/esm/lib/logout-all-sessions-dialog.js +6 -9
- package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
- package/dist/esm/lib/logout-dialog.d.ts +2 -2
- package/dist/esm/lib/logout-dialog.js +6 -9
- package/dist/esm/lib/logout-dialog.js.map +1 -1
- package/dist/esm/lib/organization-switcher.d.ts +16 -2
- package/dist/esm/lib/organization-switcher.js +34 -13
- package/dist/esm/lib/organization-switcher.js.map +1 -1
- package/dist/esm/lib/otp-input.d.ts +8 -0
- package/dist/esm/lib/pipes.d.ts +12 -0
- package/dist/esm/lib/pipes.js +50 -68
- package/dist/esm/lib/pipes.js.map +1 -1
- package/dist/esm/lib/resend-invite-dialog.d.ts +2 -2
- package/dist/esm/lib/resend-invite-dialog.js +17 -20
- package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
- package/dist/esm/lib/reset-mfa-dialog.d.ts +2 -2
- package/dist/esm/lib/reset-mfa-dialog.js +6 -9
- package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/revoke-invite-dialog.d.ts +2 -2
- package/dist/esm/lib/revoke-invite-dialog.js +14 -15
- package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
- package/dist/esm/lib/save-button.d.ts +12 -1
- package/dist/esm/lib/save-button.js +4 -9
- package/dist/esm/lib/save-button.js.map +1 -1
- package/dist/esm/lib/set-password-dialog.d.ts +2 -2
- package/dist/esm/lib/set-password-dialog.js +8 -12
- package/dist/esm/lib/set-password-dialog.js.map +1 -1
- package/dist/esm/lib/user-actions-dropdown.js +8 -11
- package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
- package/dist/esm/lib/user-profile.d.ts +11 -0
- package/dist/esm/lib/user-profile.js +2 -2
- package/dist/esm/lib/user-profile.js.map +1 -1
- package/dist/esm/lib/user-security.d.ts +12 -0
- package/dist/esm/lib/user-security.js +4 -4
- package/dist/esm/lib/user-security.js.map +1 -1
- package/dist/esm/lib/user-sessions.d.ts +12 -0
- package/dist/esm/lib/user-sessions.js +5 -13
- package/dist/esm/lib/user-sessions.js.map +1 -1
- package/dist/esm/lib/users-filter.d.ts +2 -2
- package/dist/esm/lib/users-filter.js +5 -6
- package/dist/esm/lib/users-filter.js.map +1 -1
- package/dist/esm/lib/users-management.d.ts +11 -0
- package/dist/esm/lib/users-management.js +23 -39
- package/dist/esm/lib/users-management.js.map +1 -1
- package/dist/esm/lib/users-search.js +2 -6
- package/dist/esm/lib/users-search.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +17 -3
- package/dist/esm/lib/utils.js +24 -2
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/lib/view-dns-record-dialog.js +7 -17
- package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
- package/dist/esm/lib/widgets-context.d.ts +8 -0
- package/dist/esm/organization-switcher.client.d.ts +11 -0
- package/dist/esm/organization-switcher.client.js +33 -5
- package/dist/esm/organization-switcher.client.js.map +1 -1
- package/dist/esm/pipes.client.d.ts +11 -0
- package/dist/esm/select-KR89Qnvm.d.ts +30 -0
- package/dist/esm/user-profile.client.d.ts +11 -0
- package/dist/esm/user-security.client.d.ts +11 -0
- package/dist/esm/user-sessions.client.d.ts +11 -0
- package/dist/esm/users-management.client.d.ts +11 -0
- package/dist/esm/workos-widgets.client.d.ts +8 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.7.0
|
|
4
|
+
|
|
5
|
+
- Fix alignment of connection status indicator in the `Pipes` Widget
|
|
6
|
+
- Add missing overridable selectors for several UI elements across all Widgets
|
|
7
|
+
- Invalidate all Widgets queries when switching organizations
|
|
8
|
+
|
|
3
9
|
## 1.6.0
|
|
4
10
|
|
|
5
11
|
- Add new `Pipes` Widget. See the [Pipes documentation](https://workos.com/docs/authkit/pipes) for more information.
|
|
@@ -6,6 +6,17 @@ import 'react/jsx-runtime';
|
|
|
6
6
|
import './api/endpoint.cjs';
|
|
7
7
|
import '@tanstack/react-query';
|
|
8
8
|
import './api/widgets-api-client.cjs';
|
|
9
|
+
import './lib/elements.cjs';
|
|
10
|
+
import '@radix-ui/themes';
|
|
11
|
+
import '@radix-ui/themes/props';
|
|
12
|
+
import './dialog-C15qCLN3.cjs';
|
|
13
|
+
import '@radix-ui/themes/components/dialog';
|
|
14
|
+
import './alert-dialog-BlG3_awx.cjs';
|
|
15
|
+
import '@radix-ui/themes/components/alert-dialog';
|
|
16
|
+
import './dropdown-menu-BQ5LtvdR.cjs';
|
|
17
|
+
import '@radix-ui/themes/components/dropdown-menu';
|
|
18
|
+
import './select-KR89Qnvm.cjs';
|
|
19
|
+
import '@radix-ui/themes/components/select';
|
|
9
20
|
|
|
10
21
|
interface AdminPortalDomainVerificationProps extends WidgetRootDomProps {
|
|
11
22
|
authToken: AuthToken;
|
|
@@ -7,6 +7,17 @@ import './lib/identity-providers.cjs';
|
|
|
7
7
|
import './api/endpoint.cjs';
|
|
8
8
|
import '@tanstack/react-query';
|
|
9
9
|
import './api/widgets-api-client.cjs';
|
|
10
|
+
import './lib/elements.cjs';
|
|
11
|
+
import '@radix-ui/themes';
|
|
12
|
+
import '@radix-ui/themes/props';
|
|
13
|
+
import './dialog-C15qCLN3.cjs';
|
|
14
|
+
import '@radix-ui/themes/components/dialog';
|
|
15
|
+
import './alert-dialog-BlG3_awx.cjs';
|
|
16
|
+
import '@radix-ui/themes/components/alert-dialog';
|
|
17
|
+
import './dropdown-menu-BQ5LtvdR.cjs';
|
|
18
|
+
import '@radix-ui/themes/components/dropdown-menu';
|
|
19
|
+
import './select-KR89Qnvm.cjs';
|
|
20
|
+
import '@radix-ui/themes/components/select';
|
|
10
21
|
|
|
11
22
|
interface AdminPortalSsoConnectionProps extends WidgetRootDomProps {
|
|
12
23
|
authToken: AuthToken;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ContentProps as ContentProps$1, Action, ActionProps, Cancel, CancelProps, Description, DescriptionProps, Root, RootProps, Title, TitleProps, Trigger, TriggerProps } from '@radix-ui/themes/components/alert-dialog';
|
|
3
|
+
|
|
4
|
+
interface ContentProps extends ContentProps$1 {
|
|
5
|
+
}
|
|
6
|
+
declare const AlertDialogContent: React.ForwardRefExoticComponent<ContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
|
|
8
|
+
declare const alertDialog_Action: typeof Action;
|
|
9
|
+
declare const alertDialog_ActionProps: typeof ActionProps;
|
|
10
|
+
declare const alertDialog_Cancel: typeof Cancel;
|
|
11
|
+
declare const alertDialog_CancelProps: typeof CancelProps;
|
|
12
|
+
type alertDialog_ContentProps = ContentProps;
|
|
13
|
+
declare const alertDialog_Description: typeof Description;
|
|
14
|
+
declare const alertDialog_DescriptionProps: typeof DescriptionProps;
|
|
15
|
+
declare const alertDialog_Root: typeof Root;
|
|
16
|
+
declare const alertDialog_RootProps: typeof RootProps;
|
|
17
|
+
declare const alertDialog_Title: typeof Title;
|
|
18
|
+
declare const alertDialog_TitleProps: typeof TitleProps;
|
|
19
|
+
declare const alertDialog_Trigger: typeof Trigger;
|
|
20
|
+
declare const alertDialog_TriggerProps: typeof TriggerProps;
|
|
21
|
+
declare namespace alertDialog {
|
|
22
|
+
export { alertDialog_Action as Action, alertDialog_ActionProps as ActionProps, alertDialog_Cancel as Cancel, alertDialog_CancelProps as CancelProps, AlertDialogContent as Content, type alertDialog_ContentProps as ContentProps, alertDialog_Description as Description, alertDialog_DescriptionProps as DescriptionProps, alertDialog_Root as Root, alertDialog_RootProps as RootProps, alertDialog_Title as Title, alertDialog_TitleProps as TitleProps, alertDialog_Trigger as Trigger, alertDialog_TriggerProps as TriggerProps };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { AlertDialogContent as A, type ContentProps as C, alertDialog as a };
|
|
@@ -6,6 +6,17 @@ import 'react/jsx-runtime';
|
|
|
6
6
|
import './api/endpoint.cjs';
|
|
7
7
|
import '@tanstack/react-query';
|
|
8
8
|
import './api/widgets-api-client.cjs';
|
|
9
|
+
import './lib/elements.cjs';
|
|
10
|
+
import '@radix-ui/themes';
|
|
11
|
+
import '@radix-ui/themes/props';
|
|
12
|
+
import './dialog-C15qCLN3.cjs';
|
|
13
|
+
import '@radix-ui/themes/components/dialog';
|
|
14
|
+
import './alert-dialog-BlG3_awx.cjs';
|
|
15
|
+
import '@radix-ui/themes/components/alert-dialog';
|
|
16
|
+
import './dropdown-menu-BQ5LtvdR.cjs';
|
|
17
|
+
import '@radix-ui/themes/components/dropdown-menu';
|
|
18
|
+
import './select-KR89Qnvm.cjs';
|
|
19
|
+
import '@radix-ui/themes/components/select';
|
|
9
20
|
|
|
10
21
|
interface ApiKeysProps extends WidgetRootDomProps {
|
|
11
22
|
authToken: AuthToken;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ContentProps as ContentProps$1, Close, CloseProps, Description, DescriptionProps, Root, RootProps, Title, TitleProps, Trigger, TriggerProps } from '@radix-ui/themes/components/dialog';
|
|
3
|
+
|
|
4
|
+
interface ContentProps extends ContentProps$1 {
|
|
5
|
+
}
|
|
6
|
+
declare const DialogContent: React.ForwardRefExoticComponent<ContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
|
|
8
|
+
declare const dialog_Close: typeof Close;
|
|
9
|
+
declare const dialog_CloseProps: typeof CloseProps;
|
|
10
|
+
type dialog_ContentProps = ContentProps;
|
|
11
|
+
declare const dialog_Description: typeof Description;
|
|
12
|
+
declare const dialog_DescriptionProps: typeof DescriptionProps;
|
|
13
|
+
declare const dialog_Root: typeof Root;
|
|
14
|
+
declare const dialog_RootProps: typeof RootProps;
|
|
15
|
+
declare const dialog_Title: typeof Title;
|
|
16
|
+
declare const dialog_TitleProps: typeof TitleProps;
|
|
17
|
+
declare const dialog_Trigger: typeof Trigger;
|
|
18
|
+
declare const dialog_TriggerProps: typeof TriggerProps;
|
|
19
|
+
declare namespace dialog {
|
|
20
|
+
export { dialog_Close as Close, dialog_CloseProps as CloseProps, DialogContent as Content, type dialog_ContentProps as ContentProps, dialog_Description as Description, dialog_DescriptionProps as DescriptionProps, dialog_Root as Root, dialog_RootProps as RootProps, dialog_Title as Title, dialog_TitleProps as TitleProps, dialog_Trigger as Trigger, dialog_TriggerProps as TriggerProps };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { type ContentProps as C, DialogContent as D, dialog as d };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ContentProps as ContentProps$1, ItemProps as ItemProps$1, CheckboxItemProps as CheckboxItemProps$1, RadioItemProps as RadioItemProps$1, Group, GroupProps, Label, LabelProps, RadioGroup, RadioGroupProps, Root, RootProps, Separator, SeparatorProps, Sub, SubContent, SubContentProps, SubProps, SubTrigger, SubTriggerProps, Trigger, TriggerIcon, TriggerIconProps, TriggerProps } from '@radix-ui/themes/components/dropdown-menu';
|
|
3
|
+
|
|
4
|
+
interface ContentProps extends Omit<ContentProps$1, "variant"> {
|
|
5
|
+
}
|
|
6
|
+
declare const DropdownMenuContent: React.ForwardRefExoticComponent<ContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
interface ItemProps extends Omit<ItemProps$1, "variant" | "color"> {
|
|
8
|
+
variant?: "primary" | "destructive";
|
|
9
|
+
}
|
|
10
|
+
declare const MenuItem: React.ForwardRefExoticComponent<ItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
interface CheckboxItemProps extends Omit<CheckboxItemProps$1, "variant"> {
|
|
12
|
+
variant?: "primary";
|
|
13
|
+
}
|
|
14
|
+
declare const CheckboxMenuItem: React.ForwardRefExoticComponent<CheckboxItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
interface RadioItemProps extends Omit<RadioItemProps$1, "variant"> {
|
|
16
|
+
variant?: "primary";
|
|
17
|
+
}
|
|
18
|
+
declare const RadioMenuItem: React.ForwardRefExoticComponent<RadioItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
|
|
20
|
+
type dropdownMenu_CheckboxItemProps = CheckboxItemProps;
|
|
21
|
+
type dropdownMenu_ContentProps = ContentProps;
|
|
22
|
+
declare const dropdownMenu_Group: typeof Group;
|
|
23
|
+
declare const dropdownMenu_GroupProps: typeof GroupProps;
|
|
24
|
+
type dropdownMenu_ItemProps = ItemProps;
|
|
25
|
+
declare const dropdownMenu_Label: typeof Label;
|
|
26
|
+
declare const dropdownMenu_LabelProps: typeof LabelProps;
|
|
27
|
+
declare const dropdownMenu_RadioGroup: typeof RadioGroup;
|
|
28
|
+
declare const dropdownMenu_RadioGroupProps: typeof RadioGroupProps;
|
|
29
|
+
type dropdownMenu_RadioItemProps = RadioItemProps;
|
|
30
|
+
declare const dropdownMenu_Root: typeof Root;
|
|
31
|
+
declare const dropdownMenu_RootProps: typeof RootProps;
|
|
32
|
+
declare const dropdownMenu_Separator: typeof Separator;
|
|
33
|
+
declare const dropdownMenu_SeparatorProps: typeof SeparatorProps;
|
|
34
|
+
declare const dropdownMenu_Sub: typeof Sub;
|
|
35
|
+
declare const dropdownMenu_SubContent: typeof SubContent;
|
|
36
|
+
declare const dropdownMenu_SubContentProps: typeof SubContentProps;
|
|
37
|
+
declare const dropdownMenu_SubProps: typeof SubProps;
|
|
38
|
+
declare const dropdownMenu_SubTrigger: typeof SubTrigger;
|
|
39
|
+
declare const dropdownMenu_SubTriggerProps: typeof SubTriggerProps;
|
|
40
|
+
declare const dropdownMenu_Trigger: typeof Trigger;
|
|
41
|
+
declare const dropdownMenu_TriggerIcon: typeof TriggerIcon;
|
|
42
|
+
declare const dropdownMenu_TriggerIconProps: typeof TriggerIconProps;
|
|
43
|
+
declare const dropdownMenu_TriggerProps: typeof TriggerProps;
|
|
44
|
+
declare namespace dropdownMenu {
|
|
45
|
+
export { CheckboxMenuItem as CheckboxItem, type dropdownMenu_CheckboxItemProps as CheckboxItemProps, DropdownMenuContent as Content, type dropdownMenu_ContentProps as ContentProps, dropdownMenu_Group as Group, dropdownMenu_GroupProps as GroupProps, MenuItem as Item, type dropdownMenu_ItemProps as ItemProps, dropdownMenu_Label as Label, dropdownMenu_LabelProps as LabelProps, dropdownMenu_RadioGroup as RadioGroup, dropdownMenu_RadioGroupProps as RadioGroupProps, RadioMenuItem as RadioItem, type dropdownMenu_RadioItemProps as RadioItemProps, dropdownMenu_Root as Root, dropdownMenu_RootProps as RootProps, dropdownMenu_Separator as Separator, dropdownMenu_SeparatorProps as SeparatorProps, dropdownMenu_Sub as Sub, dropdownMenu_SubContent as SubContent, dropdownMenu_SubContentProps as SubContentProps, dropdownMenu_SubProps as SubProps, dropdownMenu_SubTrigger as SubTrigger, dropdownMenu_SubTriggerProps as SubTriggerProps, dropdownMenu_Trigger as Trigger, dropdownMenu_TriggerIcon as TriggerIcon, dropdownMenu_TriggerIconProps as TriggerIconProps, dropdownMenu_TriggerProps as TriggerProps };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { CheckboxMenuItem as C, DropdownMenuContent as D, type ItemProps as I, MenuItem as M, RadioMenuItem as R, type ContentProps as a, type CheckboxItemProps as b, type RadioItemProps as c, dropdownMenu as d };
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -22,6 +22,14 @@ import '@tanstack/react-query';
|
|
|
22
22
|
import 'react';
|
|
23
23
|
import './lib/elements.cjs';
|
|
24
24
|
import '@radix-ui/themes';
|
|
25
|
+
import './dialog-C15qCLN3.cjs';
|
|
26
|
+
import '@radix-ui/themes/components/dialog';
|
|
27
|
+
import './alert-dialog-BlG3_awx.cjs';
|
|
28
|
+
import '@radix-ui/themes/components/alert-dialog';
|
|
29
|
+
import './dropdown-menu-BQ5LtvdR.cjs';
|
|
30
|
+
import '@radix-ui/themes/components/dropdown-menu';
|
|
31
|
+
import './select-KR89Qnvm.cjs';
|
|
32
|
+
import '@radix-ui/themes/components/select';
|
|
25
33
|
import './api/api-provider.cjs';
|
|
26
34
|
import 'react/jsx-runtime';
|
|
27
35
|
import './lib/utils.cjs';
|
|
@@ -75,21 +75,21 @@ function AddMfaDialog({
|
|
|
75
75
|
setOpen(false);
|
|
76
76
|
}, []);
|
|
77
77
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
78
|
-
|
|
78
|
+
import_elements.Dialog.Root,
|
|
79
79
|
{
|
|
80
80
|
...props,
|
|
81
81
|
open: props.open || open,
|
|
82
82
|
onOpenChange: props.onOpenChange || setOpen,
|
|
83
83
|
children: [
|
|
84
84
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
85
|
-
|
|
85
|
+
import_elements.Dialog.Trigger,
|
|
86
86
|
{
|
|
87
87
|
onClick: onTriggerClick,
|
|
88
88
|
loading: manuallyTriggered && createAuthFactor.isPending,
|
|
89
89
|
children
|
|
90
90
|
}
|
|
91
91
|
),
|
|
92
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.
|
|
92
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Content, { maxWidth: "480px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elevated_access.ElevatedAccess, { onVerified: handleVerified, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Content, { onClose: handleClose, totpFactor: createAuthFactor.data }) }) })
|
|
93
93
|
]
|
|
94
94
|
}
|
|
95
95
|
);
|
|
@@ -125,7 +125,7 @@ function Content({ onClose, totpFactor }) {
|
|
|
125
125
|
securitySettings.update("Mfa", true);
|
|
126
126
|
});
|
|
127
127
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
128
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
128
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Title, { mb: "5", children: "Set up an authenticator app" }),
|
|
129
129
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Form.Root, { onSubmit: handleSubmit, children: [
|
|
130
130
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "auto 1fr", rows: "repeat(4, auto)", gapX: "3", gapY: "1", children: [
|
|
131
131
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -233,8 +233,9 @@ function Content({ onClose, totpFactor }) {
|
|
|
233
233
|
" "
|
|
234
234
|
] }),
|
|
235
235
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SecretDialog, { setupKey: totp?.secret ?? "", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
236
|
-
import_elements.
|
|
236
|
+
import_elements.Button,
|
|
237
237
|
{
|
|
238
|
+
variant: "secondary",
|
|
238
239
|
size: "1",
|
|
239
240
|
disabled: verifyTotp.isPending || isSuccess,
|
|
240
241
|
children: "View setup key"
|
|
@@ -273,15 +274,22 @@ function Content({ onClose, totpFactor }) {
|
|
|
273
274
|
] })
|
|
274
275
|
] }),
|
|
275
276
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { mt: "5", gap: "3", justify: "end", children: [
|
|
276
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
277
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Close, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
278
|
+
import_elements.Button,
|
|
279
|
+
{
|
|
280
|
+
variant: "secondary",
|
|
281
|
+
disabled: verifyTotp.isPending || isSuccess,
|
|
282
|
+
children: "Cancel"
|
|
283
|
+
}
|
|
284
|
+
) }),
|
|
277
285
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
278
286
|
import_save_button.SaveButton,
|
|
279
287
|
{
|
|
280
|
-
|
|
288
|
+
type: "submit",
|
|
281
289
|
loading: verifyTotp.isPending,
|
|
282
290
|
done: isSuccess,
|
|
283
291
|
onDone: onClose,
|
|
284
|
-
children:
|
|
292
|
+
children: "Confirm"
|
|
285
293
|
}
|
|
286
294
|
)
|
|
287
295
|
] })
|
|
@@ -290,19 +298,19 @@ function Content({ onClose, totpFactor }) {
|
|
|
290
298
|
] });
|
|
291
299
|
}
|
|
292
300
|
function SecretDialog({ children, setupKey }) {
|
|
293
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
294
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Root, { children: [
|
|
302
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Trigger, { children }),
|
|
295
303
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
296
|
-
import_elements.
|
|
304
|
+
import_elements.Dialog.Content,
|
|
297
305
|
{
|
|
298
306
|
maxWidth: "90vw",
|
|
299
307
|
size: { initial: "3", sm: "4" },
|
|
300
308
|
minWidth: "300px",
|
|
301
309
|
width: "fit-content",
|
|
302
310
|
children: [
|
|
303
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
304
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
305
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", gap: "3", justify: "end", mt: "5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
311
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Title, { size: "2", weight: "regular", children: "Your setup key" }),
|
|
312
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Description, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Code, { variant: "ghost", style: { letterSpacing: "0.15rem" }, children: setupKey }) }) }),
|
|
313
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", gap: "3", justify: "end", mt: "5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Close, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_copy_button.CopyButton, { value: setupKey, children: "Copy and close" }) }) })
|
|
306
314
|
]
|
|
307
315
|
}
|
|
308
316
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/add-mfa-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Box,\n Code,\n Dialog,\n Flex,\n Grid,\n Link,\n Separator,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport * as Otp from \"./otp-input.js\";\nimport { DialogContent, PrimaryButton, SecondaryButton } from \"./elements.js\";\nimport {\n CreateTotpFactorResponse,\n CreateTotpFactorResponseAuthenticationFactorAllOfTotpAnyOf,\n useCreateTotpFactor,\n useVerifyTotpFactor,\n} from \"../api/endpoint.js\";\nimport { useElevatedAccessToken } from \"../api/api-provider.js\";\nimport * as Form from \"@radix-ui/react-form\";\nimport { Marker } from \"./marker.js\";\nimport { CopyButton } from \"./copy-button.js\";\nimport { useSecuritySettings } from \"./use-security-settings.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { useDialogClose } from \"./use-dialog-close.js\";\n\ninterface AddMfaDialogProps extends Dialog.RootProps {\n children?: ReactNode;\n onSuccess?: () => void;\n}\n\nexport function AddMfaDialog({\n children,\n onSuccess,\n ...props\n}: AddMfaDialogProps) {\n const [open, setOpen] = React.useState(false);\n const [manuallyTriggered, setManuallyTriggered] = React.useState(false);\n const { elevatedAccess } = useElevatedAccessToken();\n const createAuthFactor = useCreateTotpFactor();\n\n const handleVerified = async () => {\n await createAuthFactor.mutateAsync(undefined);\n };\n\n const onTriggerClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (elevatedAccess && !createAuthFactor.data) {\n event.preventDefault();\n setManuallyTriggered(true);\n createAuthFactor.mutate(undefined, {\n onSuccess: () => {\n setOpen(true);\n },\n });\n } else {\n setManuallyTriggered(false);\n }\n };\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Dialog.Root\n {...props}\n open={props.open || open}\n onOpenChange={props.onOpenChange || setOpen}\n >\n <Dialog.Trigger\n onClick={onTriggerClick}\n // @ts-ignore I've to find a way to pass the loading state to the trigger\n loading={manuallyTriggered && createAuthFactor.isPending}\n >\n {children}\n </Dialog.Trigger>\n\n <DialogContent maxWidth=\"480px\">\n <ElevatedAccess onVerified={handleVerified}>\n <Content onClose={handleClose} totpFactor={createAuthFactor.data} />\n </ElevatedAccess>\n </DialogContent>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps {\n totpFactor?: CreateTotpFactorResponse;\n onClose?: () => void;\n}\n\nfunction Content({ onClose, totpFactor }: ContentProps) {\n const securitySettings = useSecuritySettings();\n\n const [customError, setCustomError] = React.useState<string | null>(null);\n const totp = hasQrCode(totpFactor)\n ? totpFactor.authenticationFactor.totp\n : undefined;\n\n const verifyTotp = useVerifyTotpFactor({\n mutation: {\n onSuccess: ({ success }) => {\n if (!success) {\n setCustomError(\"Invalid passcode\");\n }\n },\n },\n });\n\n const serverError = verifyTotp.error || customError;\n const isSuccess = verifyTotp.isSuccess && !serverError;\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setCustomError(null);\n\n const formData = new FormData(event.currentTarget);\n const otpCode = formData.get(\"otp-code\")?.toString();\n\n verifyTotp.mutate({\n data: {\n authenticationChallengeId: totpFactor?.authenticationChallenge.id ?? \"\",\n code: otpCode ?? \"\",\n },\n });\n };\n\n useDialogClose(isSuccess, () => {\n securitySettings.update(\"Mfa\", true);\n });\n\n return (\n <>\n <Dialog.Title mb=\"5\">Set up an authenticator app</Dialog.Title>\n\n <Form.Root onSubmit={handleSubmit}>\n <Grid columns=\"auto 1fr\" rows=\"repeat(4, auto)\" gapX=\"3\" gapY=\"1\">\n <Grid\n rows=\"subgrid\"\n gridRow=\"span 4\"\n style={{ placeItems: \"center\" }}\n >\n <Marker>1</Marker>\n <Separator\n orientation=\"vertical\"\n size=\"4\"\n style={{ width: \"2px\" }}\n />\n <Marker>2</Marker>\n <div />\n </Grid>\n\n <Grid rows=\"subgrid\" gridRow=\"span 4\">\n <Text as=\"p\" size=\"3\" weight=\"bold\">\n Scan the QR code\n </Text>\n <Flex direction=\"column\" gap=\"1\">\n <Text as=\"p\" size=\"2\">\n Use an authenticator app like{\" \"}\n <Link\n href=\"https://1password.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n 1Password\n </Link>\n ,{\" \"}\n <Link\n href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Google Authenticator\n </Link>\n ,{\" \"}\n <Link\n href=\"https://authy.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Authy\n </Link>\n , or{\" \"}\n <Link\n href=\"https://www.microsoft.com/en-gb/security/mobile-authenticator-app\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Microsoft Authenticator\n </Link>{\" \"}\n to scan the QR code below.\n </Text>\n <Flex align=\"center\" gap=\"5\" my=\"5\">\n <Grid\n position=\"relative\"\n width=\"160px\"\n height=\"160px\"\n p=\"2\"\n style={{\n border: \"1px solid var(--gray-7)\",\n borderRadius: \"var(--radius-4)\",\n background: \"var(--gray-2)\",\n overflow: \"hidden\",\n }}\n >\n {totp?.qr_code && (\n <Box asChild width=\"100%\" height=\"auto\">\n <img\n alt=\"Scan this QR code to enroll\"\n aria-describedby=\"secret-note\"\n height=\"160\"\n src={totp.qr_code}\n style={{ userSelect: \"none\", background: \"white\" }}\n width=\"160\"\n />\n </Box>\n )}\n </Grid>\n\n <Flex direction=\"column\" gap=\"1\" align=\"start\">\n <Text color=\"gray\" id=\"secret-note\" size=\"2\">\n Can‘t scan the code?{\" \"}\n </Text>\n\n <SecretDialog setupKey={totp?.secret ?? \"\"}>\n <SecondaryButton\n size=\"1\"\n disabled={verifyTotp.isPending || isSuccess}\n >\n View setup key\n </SecondaryButton>\n </SecretDialog>\n </Flex>\n </Flex>\n </Flex>\n <Text as=\"p\" size=\"3\" weight=\"bold\">\n Get verification passcode\n </Text>\n <Flex direction=\"column\" gap=\"4\">\n <Text as=\"p\" size=\"2\">\n Enter the 6-digit passcode from your authenticator app.\n </Text>\n\n <Flex direction=\"column\" gap=\"2\">\n <Otp.Root\n autoSubmit\n gap=\"3\"\n justify=\"start\"\n name=\"otp-code\"\n rows=\"48px\"\n columns=\"repeat(6, 48px)\"\n readOnly={verifyTotp.isPending || isSuccess}\n >\n <Otp.Input required autoFocus autoComplete=\"off\" />\n <Otp.Input required />\n <Otp.Input required />\n <Otp.Input required />\n <Otp.Input required />\n <Otp.Input required />\n </Otp.Root>\n\n {serverError && (\n <Text size=\"2\" color=\"red\">\n {getMutationErrorMessage(serverError)}\n </Text>\n )}\n </Flex>\n </Flex>\n </Grid>\n </Grid>\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <SecondaryButton disabled={verifyTotp.isPending || isSuccess}>\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <SaveButton\n asChild\n loading={verifyTotp.isPending}\n done={isSuccess}\n onDone={onClose}\n >\n <PrimaryButton type=\"submit\">Confirm</PrimaryButton>\n </SaveButton>\n </Flex>\n </Form.Root>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(serverError)}\n </section>\n </VisuallyHidden>\n </>\n );\n}\n\ninterface SecretDialogProps extends React.PropsWithChildren {\n setupKey: string;\n}\n\nfunction SecretDialog({ children, setupKey }: SecretDialogProps) {\n return (\n <Dialog.Root>\n <Dialog.Trigger>{children}</Dialog.Trigger>\n <DialogContent\n maxWidth=\"90vw\"\n size={{ initial: \"3\", sm: \"4\" }}\n minWidth=\"300px\"\n width=\"fit-content\"\n >\n <Dialog.Title size=\"2\" weight=\"regular\">\n Your setup key\n </Dialog.Title>\n <Dialog.Description>\n <Text size=\"6\">\n <Code variant=\"ghost\" style={{ letterSpacing: \"0.15rem\" }}>\n {setupKey}\n </Code>\n </Text>\n </Dialog.Description>\n\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <CopyButton asChild value={setupKey}>\n <PrimaryButton>Copy and close</PrimaryButton>\n </CopyButton>\n </Dialog.Close>\n </Flex>\n </DialogContent>\n </Dialog.Root>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n let message = \"Something went wrong, please try again\";\n\n if (typeof error === \"string\") {\n message = error;\n }\n\n if (error instanceof Error) {\n message = error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n message = error.message;\n }\n\n if (message === \"Invalid passcode\") {\n message = \"Invalid passcode, please try again\";\n }\n\n return message;\n}\n\nfunction hasQrCode(\n response?: CreateTotpFactorResponse,\n): response is CreateTotpFactorResponse & {\n authenticationFactor: {\n totp: NonNullable<CreateTotpFactorResponseAuthenticationFactorAllOfTotpAnyOf>;\n };\n} {\n const totp = response?.authenticationFactor.totp;\n return totp != null && \"qr_code\" in totp;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/add-mfa-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Box,\n Code,\n Flex,\n Grid,\n Link,\n Separator,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport * as Otp from \"./otp-input.js\";\nimport { Dialog, Button } from \"./elements.js\";\nimport {\n CreateTotpFactorResponse,\n CreateTotpFactorResponseAuthenticationFactorAllOfTotpAnyOf,\n useCreateTotpFactor,\n useVerifyTotpFactor,\n} from \"../api/endpoint.js\";\nimport { useElevatedAccessToken } from \"../api/api-provider.js\";\nimport * as Form from \"@radix-ui/react-form\";\nimport { Marker } from \"./marker.js\";\nimport { CopyButton } from \"./copy-button.js\";\nimport { useSecuritySettings } from \"./use-security-settings.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { useDialogClose } from \"./use-dialog-close.js\";\n\ninterface AddMfaDialogProps extends Dialog.RootProps {\n children?: ReactNode;\n onSuccess?: () => void;\n}\n\nexport function AddMfaDialog({\n children,\n onSuccess,\n ...props\n}: AddMfaDialogProps) {\n const [open, setOpen] = React.useState(false);\n const [manuallyTriggered, setManuallyTriggered] = React.useState(false);\n const { elevatedAccess } = useElevatedAccessToken();\n const createAuthFactor = useCreateTotpFactor();\n\n const handleVerified = async () => {\n await createAuthFactor.mutateAsync(undefined);\n };\n\n const onTriggerClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (elevatedAccess && !createAuthFactor.data) {\n event.preventDefault();\n setManuallyTriggered(true);\n createAuthFactor.mutate(undefined, {\n onSuccess: () => {\n setOpen(true);\n },\n });\n } else {\n setManuallyTriggered(false);\n }\n };\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Dialog.Root\n {...props}\n open={props.open || open}\n onOpenChange={props.onOpenChange || setOpen}\n >\n <Dialog.Trigger\n onClick={onTriggerClick}\n // @ts-ignore I've to find a way to pass the loading state to the trigger\n loading={manuallyTriggered && createAuthFactor.isPending}\n >\n {children}\n </Dialog.Trigger>\n\n <Dialog.Content maxWidth=\"480px\">\n <ElevatedAccess onVerified={handleVerified}>\n <Content onClose={handleClose} totpFactor={createAuthFactor.data} />\n </ElevatedAccess>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps {\n totpFactor?: CreateTotpFactorResponse;\n onClose?: () => void;\n}\n\nfunction Content({ onClose, totpFactor }: ContentProps) {\n const securitySettings = useSecuritySettings();\n\n const [customError, setCustomError] = React.useState<string | null>(null);\n const totp = hasQrCode(totpFactor)\n ? totpFactor.authenticationFactor.totp\n : undefined;\n\n const verifyTotp = useVerifyTotpFactor({\n mutation: {\n onSuccess: ({ success }) => {\n if (!success) {\n setCustomError(\"Invalid passcode\");\n }\n },\n },\n });\n\n const serverError = verifyTotp.error || customError;\n const isSuccess = verifyTotp.isSuccess && !serverError;\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setCustomError(null);\n\n const formData = new FormData(event.currentTarget);\n const otpCode = formData.get(\"otp-code\")?.toString();\n\n verifyTotp.mutate({\n data: {\n authenticationChallengeId: totpFactor?.authenticationChallenge.id ?? \"\",\n code: otpCode ?? \"\",\n },\n });\n };\n\n useDialogClose(isSuccess, () => {\n securitySettings.update(\"Mfa\", true);\n });\n\n return (\n <>\n <Dialog.Title mb=\"5\">Set up an authenticator app</Dialog.Title>\n\n <Form.Root onSubmit={handleSubmit}>\n <Grid columns=\"auto 1fr\" rows=\"repeat(4, auto)\" gapX=\"3\" gapY=\"1\">\n <Grid\n rows=\"subgrid\"\n gridRow=\"span 4\"\n style={{ placeItems: \"center\" }}\n >\n <Marker>1</Marker>\n <Separator\n orientation=\"vertical\"\n size=\"4\"\n style={{ width: \"2px\" }}\n />\n <Marker>2</Marker>\n <div />\n </Grid>\n\n <Grid rows=\"subgrid\" gridRow=\"span 4\">\n <Text as=\"p\" size=\"3\" weight=\"bold\">\n Scan the QR code\n </Text>\n <Flex direction=\"column\" gap=\"1\">\n <Text as=\"p\" size=\"2\">\n Use an authenticator app like{\" \"}\n <Link\n href=\"https://1password.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n 1Password\n </Link>\n ,{\" \"}\n <Link\n href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Google Authenticator\n </Link>\n ,{\" \"}\n <Link\n href=\"https://authy.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Authy\n </Link>\n , or{\" \"}\n <Link\n href=\"https://www.microsoft.com/en-gb/security/mobile-authenticator-app\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Microsoft Authenticator\n </Link>{\" \"}\n to scan the QR code below.\n </Text>\n <Flex align=\"center\" gap=\"5\" my=\"5\">\n <Grid\n position=\"relative\"\n width=\"160px\"\n height=\"160px\"\n p=\"2\"\n style={{\n border: \"1px solid var(--gray-7)\",\n borderRadius: \"var(--radius-4)\",\n background: \"var(--gray-2)\",\n overflow: \"hidden\",\n }}\n >\n {totp?.qr_code && (\n <Box asChild width=\"100%\" height=\"auto\">\n <img\n alt=\"Scan this QR code to enroll\"\n aria-describedby=\"secret-note\"\n height=\"160\"\n src={totp.qr_code}\n style={{ userSelect: \"none\", background: \"white\" }}\n width=\"160\"\n />\n </Box>\n )}\n </Grid>\n\n <Flex direction=\"column\" gap=\"1\" align=\"start\">\n <Text color=\"gray\" id=\"secret-note\" size=\"2\">\n Can‘t scan the code?{\" \"}\n </Text>\n\n <SecretDialog setupKey={totp?.secret ?? \"\"}>\n <Button\n variant=\"secondary\"\n size=\"1\"\n disabled={verifyTotp.isPending || isSuccess}\n >\n View setup key\n </Button>\n </SecretDialog>\n </Flex>\n </Flex>\n </Flex>\n <Text as=\"p\" size=\"3\" weight=\"bold\">\n Get verification passcode\n </Text>\n <Flex direction=\"column\" gap=\"4\">\n <Text as=\"p\" size=\"2\">\n Enter the 6-digit passcode from your authenticator app.\n </Text>\n\n <Flex direction=\"column\" gap=\"2\">\n <Otp.Root\n autoSubmit\n gap=\"3\"\n justify=\"start\"\n name=\"otp-code\"\n rows=\"48px\"\n columns=\"repeat(6, 48px)\"\n readOnly={verifyTotp.isPending || isSuccess}\n >\n <Otp.Input required autoFocus autoComplete=\"off\" />\n <Otp.Input required />\n <Otp.Input required />\n <Otp.Input required />\n <Otp.Input required />\n <Otp.Input required />\n </Otp.Root>\n\n {serverError && (\n <Text size=\"2\" color=\"red\">\n {getMutationErrorMessage(serverError)}\n </Text>\n )}\n </Flex>\n </Flex>\n </Grid>\n </Grid>\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button\n variant=\"secondary\"\n disabled={verifyTotp.isPending || isSuccess}\n >\n Cancel\n </Button>\n </Dialog.Close>\n\n <SaveButton\n type=\"submit\"\n loading={verifyTotp.isPending}\n done={isSuccess}\n onDone={onClose}\n >\n Confirm\n </SaveButton>\n </Flex>\n </Form.Root>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(serverError)}\n </section>\n </VisuallyHidden>\n </>\n );\n}\n\ninterface SecretDialogProps extends React.PropsWithChildren {\n setupKey: string;\n}\n\nfunction SecretDialog({ children, setupKey }: SecretDialogProps) {\n return (\n <Dialog.Root>\n <Dialog.Trigger>{children}</Dialog.Trigger>\n <Dialog.Content\n maxWidth=\"90vw\"\n size={{ initial: \"3\", sm: \"4\" }}\n minWidth=\"300px\"\n width=\"fit-content\"\n >\n <Dialog.Title size=\"2\" weight=\"regular\">\n Your setup key\n </Dialog.Title>\n <Dialog.Description>\n <Text size=\"6\">\n <Code variant=\"ghost\" style={{ letterSpacing: \"0.15rem\" }}>\n {setupKey}\n </Code>\n </Text>\n </Dialog.Description>\n\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <CopyButton value={setupKey}>Copy and close</CopyButton>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n let message = \"Something went wrong, please try again\";\n\n if (typeof error === \"string\") {\n message = error;\n }\n\n if (error instanceof Error) {\n message = error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n message = error.message;\n }\n\n if (message === \"Invalid passcode\") {\n message = \"Invalid passcode, please try again\";\n }\n\n return message;\n}\n\nfunction hasQrCode(\n response?: CreateTotpFactorResponse,\n): response is CreateTotpFactorResponse & {\n authenticationFactor: {\n totp: NonNullable<CreateTotpFactorResponseAuthenticationFactorAllOfTotpAnyOf>;\n };\n} {\n const totp = response?.authenticationFactor.totp;\n return totp != null && \"qr_code\" in totp;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Dialog } from '@radix-ui/themes';
|
|
3
2
|
import { ReactNode } from 'react';
|
|
3
|
+
import { RootProps } from '@radix-ui/themes/components/dialog';
|
|
4
4
|
|
|
5
|
-
interface AddMfaDialogProps extends
|
|
5
|
+
interface AddMfaDialogProps extends RootProps {
|
|
6
6
|
children?: ReactNode;
|
|
7
7
|
onSuccess?: () => void;
|
|
8
8
|
}
|
|
@@ -55,16 +55,15 @@ const AdminPortalDomainVerification = ({
|
|
|
55
55
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("resolved", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "row", justify: "between", align: "center", children: [
|
|
56
56
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", color: "gray", children: "You haven't added any verified domains yet." }),
|
|
57
57
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
58
|
-
|
|
58
|
+
import_elements.Button,
|
|
59
59
|
{
|
|
60
|
-
variant: "
|
|
61
|
-
color: "gray",
|
|
60
|
+
variant: "secondary",
|
|
62
61
|
loading: isPending,
|
|
63
62
|
disabled: isPending,
|
|
64
63
|
onClick: onAddDomain,
|
|
65
64
|
children: [
|
|
66
65
|
"Add domain ",
|
|
67
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, {})
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, { "aria-hidden": true })
|
|
68
67
|
]
|
|
69
68
|
}
|
|
70
69
|
)
|
|
@@ -86,16 +85,15 @@ const AdminPortalDomainVerification = ({
|
|
|
86
85
|
}
|
|
87
86
|
) }, domain.id)) }),
|
|
88
87
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
89
|
-
|
|
88
|
+
import_elements.Button,
|
|
90
89
|
{
|
|
90
|
+
variant: "secondary",
|
|
91
91
|
loading: isPending,
|
|
92
92
|
disabled: isPending,
|
|
93
|
-
color: "gray",
|
|
94
|
-
variant: "outline",
|
|
95
93
|
onClick: onAddDomain,
|
|
96
94
|
children: [
|
|
97
95
|
"Add domain ",
|
|
98
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, {})
|
|
96
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, { "aria-hidden": true })
|
|
99
97
|
]
|
|
100
98
|
}
|
|
101
99
|
) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/admin-portal-domain-verification.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Box,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/admin-portal-domain-verification.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Box, Card, Flex, Text } from \"@radix-ui/themes\";\nimport { Skeleton, Button } from \"./elements.js\";\nimport { IconPanel } from \"./icon-panel.js\";\nimport { GenericError } from \"./generic-error.js\";\nimport { ExternalLinkIcon } from \"@radix-ui/react-icons\";\nimport * as CardList from \"./card-list.js\";\nimport { OrganizationDomain } from \"../api/endpoint.js\";\nimport { DomainItem } from \"./domain-item.js\";\nimport { getDomProps } from \"./utils.js\";\nimport type { WidgetRootDomProps, WidgetRootState } from \"./utils.js\";\n\ninterface AdminPortalDomainVerificationProps extends WidgetRootDomProps {\n organizationDomains: OrganizationDomain[];\n onAddDomain: () => void;\n onDeleteDomain: (domainId: string) => void;\n onReverifyDomain: (domainId: string) => void;\n isPending?: boolean;\n}\n\nconst AdminPortalDomainVerification = ({\n organizationDomains,\n onAddDomain,\n onDeleteDomain,\n onReverifyDomain,\n isPending = false,\n ...domProps\n}: AdminPortalDomainVerificationProps) => {\n if (organizationDomains.length === 0) {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"resolved\", domProps)}>\n <Flex direction=\"row\" justify=\"between\" align=\"center\">\n <Text size=\"2\" color=\"gray\">\n You haven't added any verified domains yet.\n </Text>\n <Button\n variant=\"secondary\"\n loading={isPending}\n disabled={isPending}\n onClick={onAddDomain}\n >\n Add domain <ExternalLinkIcon aria-hidden />\n </Button>\n </Flex>\n </Card>\n );\n }\n\n return (\n <Flex\n direction=\"column\"\n gap=\"4\"\n {...getWidgetRootDomProps(\"resolved\", domProps)}\n >\n <CardList.Root>\n {organizationDomains.map((domain) => (\n <CardList.Item key={domain.id}>\n <DomainItem\n domain={domain}\n onDeleteDomain={onDeleteDomain}\n onReverifyDomain={onReverifyDomain}\n />\n </CardList.Item>\n ))}\n </CardList.Root>\n\n <Box>\n <Button\n variant=\"secondary\"\n loading={isPending}\n disabled={isPending}\n onClick={onAddDomain}\n >\n Add domain <ExternalLinkIcon aria-hidden />\n </Button>\n </Box>\n </Flex>\n );\n};\n\ninterface AdminPortalDomainVerificationLoadingProps\n extends WidgetRootDomProps {}\n\nconst AdminPortalDomainVerificationLoading: React.FC<\n AdminPortalDomainVerificationLoadingProps\n> = (domProps) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"loading\", domProps)}>\n <Flex gap=\"4\" align=\"center\">\n <Skeleton>\n <IconPanel />\n </Skeleton>\n\n <Flex direction=\"column\">\n <Text size=\"2\" highContrast weight=\"bold\" as=\"p\" mb=\"-2px\">\n <Skeleton>Domain name</Skeleton>\n </Text>\n\n <Text size=\"2\" color=\"gray\" as=\"p\">\n <Skeleton>Added recently</Skeleton>\n </Text>\n </Flex>\n </Flex>\n </Card>\n );\n};\n\ninterface AdminPortalDomainVerificationErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst AdminPortalDomainVerificationError: React.FC<\n AdminPortalDomainVerificationErrorProps\n> = ({ 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: \"admin-portal-domain-verification\",\n widgetState: state,\n });\n}\n\nexport type {\n AdminPortalDomainVerificationProps,\n AdminPortalDomainVerificationLoadingProps,\n AdminPortalDomainVerificationErrorProps,\n};\nexport {\n AdminPortalDomainVerification,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerificationError,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCU;AA/BV,oBAAsC;AACtC,sBAAiC;AACjC,wBAA0B;AAC1B,2BAA6B;AAC7B,yBAAiC;AACjC,eAA0B;AAE1B,yBAA2B;AAC3B,mBAA4B;AAW5B,MAAM,gCAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,MAA0C;AACxC,MAAI,oBAAoB,WAAW,GAAG;AACpC,WACE,4CAAC,sBAAK,MAAK,KAAK,GAAG,sBAAsB,YAAY,QAAQ,GAC3D,uDAAC,sBAAK,WAAU,OAAM,SAAQ,WAAU,OAAM,UAC5C;AAAA,kDAAC,sBAAK,MAAK,KAAI,OAAM,QAAO,yDAE5B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,UACV,SAAS;AAAA,UACV;AAAA;AAAA,YACY,4CAAC,uCAAiB,eAAW,MAAC;AAAA;AAAA;AAAA,MAC3C;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,KAAI;AAAA,MACH,GAAG,sBAAsB,YAAY,QAAQ;AAAA,MAE9C;AAAA,oDAAC,SAAS,MAAT,EACE,8BAAoB,IAAI,CAAC,WACxB,4CAAC,SAAS,MAAT,EACC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF,KALkB,OAAO,EAM3B,CACD,GACH;AAAA,QAEA,4CAAC,qBACC;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,UAAU;AAAA,YACV,SAAS;AAAA,YACV;AAAA;AAAA,cACY,4CAAC,uCAAiB,eAAW,MAAC;AAAA;AAAA;AAAA,QAC3C,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAKA,MAAM,uCAEF,CAAC,aAAa;AAChB,SACE,4CAAC,sBAAK,MAAK,KAAK,GAAG,sBAAsB,WAAW,QAAQ,GAC1D,uDAAC,sBAAK,KAAI,KAAI,OAAM,UAClB;AAAA,gDAAC,4BACC,sDAAC,+BAAU,GACb;AAAA,IAEA,6CAAC,sBAAK,WAAU,UACd;AAAA,kDAAC,sBAAK,MAAK,KAAI,cAAY,MAAC,QAAO,QAAO,IAAG,KAAI,IAAG,QAClD,sDAAC,4BAAS,yBAAW,GACvB;AAAA,MAEA,4CAAC,sBAAK,MAAK,KAAI,OAAM,QAAO,IAAG,KAC7B,sDAAC,4BAAS,4BAAc,GAC1B;AAAA,OACF;AAAA,KACF,GACF;AAEJ;AAMA,MAAM,qCAEF,CAAC,EAAE,OAAO,GAAG,SAAS,MAAM;AAC9B,SACE,4CAAC,sBAAK,MAAK,KAAK,GAAG,sBAAsB,SAAS,QAAQ,GACxD,sDAAC,qCAAa,OAAc,GAC9B;AAEJ;AAEA,SAAS,sBACP,OACA,UACA;AACA,aAAO,0BAAY;AAAA,IACjB,GAAG;AAAA,IACH,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,EACf,CAAC;AACH;","names":[]}
|
|
@@ -4,6 +4,17 @@ import { OrganizationDomain } from '../api/endpoint.cjs';
|
|
|
4
4
|
import { WidgetRootDomProps } from './utils.cjs';
|
|
5
5
|
import '@tanstack/react-query';
|
|
6
6
|
import '../api/widgets-api-client.cjs';
|
|
7
|
+
import './elements.cjs';
|
|
8
|
+
import '@radix-ui/themes';
|
|
9
|
+
import '@radix-ui/themes/props';
|
|
10
|
+
import '../dialog-C15qCLN3.cjs';
|
|
11
|
+
import '@radix-ui/themes/components/dialog';
|
|
12
|
+
import '../alert-dialog-BlG3_awx.cjs';
|
|
13
|
+
import '@radix-ui/themes/components/alert-dialog';
|
|
14
|
+
import '../dropdown-menu-BQ5LtvdR.cjs';
|
|
15
|
+
import '@radix-ui/themes/components/dropdown-menu';
|
|
16
|
+
import '../select-KR89Qnvm.cjs';
|
|
17
|
+
import '@radix-ui/themes/components/select';
|
|
7
18
|
|
|
8
19
|
interface AdminPortalDomainVerificationProps extends WidgetRootDomProps {
|
|
9
20
|
organizationDomains: OrganizationDomain[];
|
|
@@ -197,24 +197,23 @@ function AdminPortalOpenButton({
|
|
|
197
197
|
}
|
|
198
198
|
})();
|
|
199
199
|
if (href) {
|
|
200
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
200
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", children: [
|
|
201
201
|
label,
|
|
202
202
|
" ",
|
|
203
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, {})
|
|
203
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, { "aria-hidden": true })
|
|
204
204
|
] }) });
|
|
205
205
|
}
|
|
206
206
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
207
|
-
|
|
207
|
+
import_elements.Button,
|
|
208
208
|
{
|
|
209
|
-
variant: "
|
|
210
|
-
color: "gray",
|
|
209
|
+
variant: "secondary",
|
|
211
210
|
loading: isPending,
|
|
212
211
|
disabled: isPending,
|
|
213
212
|
onClick: initConfig,
|
|
214
213
|
children: [
|
|
215
214
|
label,
|
|
216
215
|
" ",
|
|
217
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, {})
|
|
216
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, { "aria-hidden": true })
|
|
218
217
|
]
|
|
219
218
|
}
|
|
220
219
|
);
|
|
@@ -230,9 +229,9 @@ const AdminPortalSsoConnectionLoading = (props) => {
|
|
|
230
229
|
] }),
|
|
231
230
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { gap: "5", align: "center", children: [
|
|
232
231
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_status.Status, { state: "error", children: "Requires action" }) }),
|
|
233
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
232
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Button, { variant: "secondary", children: [
|
|
234
233
|
"Manage ",
|
|
235
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, {})
|
|
234
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ExternalLinkIcon, { "aria-hidden": true })
|
|
236
235
|
] }) })
|
|
237
236
|
] })
|
|
238
237
|
] }) });
|