@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api-keys/create-api-key.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Checkbox,\n Dialog,\n Flex,\n ScrollArea,\n Text,\n Callout,\n IconButton,\n} from \"@radix-ui/themes\";\nimport {\n Label,\n PrimaryButton,\n SecondaryButton,\n TextField,\n TextFieldSlot,\n} from \"../elements.js\";\nimport * as Form from \"@radix-ui/react-form\";\nimport {\n ExclamationTriangleIcon,\n InfoCircledIcon,\n MagnifyingGlassIcon,\n} from \"@radix-ui/react-icons\";\nimport { CopyButton } from \"../copy-button.js\";\nimport * as React from \"react\";\nimport { pluralize } from \"../utils.js\";\nimport {\n useListOrganizationApiKeyPermissions,\n ListOrganizationApiKeyPermission,\n} from \"../../api/endpoint.js\";\nimport { useCreateApiKey } from \"../api/api-key.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\n\nexport function CreateApiKeyDialog() {\n const {\n state: { createDialogOpen, createdApiKey },\n dispatch,\n } = useApiKeysContext();\n\n return (\n <Dialog.Root\n open={createDialogOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({ type: \"CLOSE_CREATE_DIALOG\" });\n }\n }}\n >\n {createdApiKey ? (\n <SaveApiKeyContent apiKey={createdApiKey.value} />\n ) : (\n <CreateApiKeyForm\n // always remount the form when the dialog is opened to reset the validation errors\n key={`${createDialogOpen}`}\n />\n )}\n </Dialog.Root>\n );\n}\n\nfunction CreateApiKeyForm() {\n const { dispatch } = useApiKeysContext();\n const [errors, setErrors] = React.useState<{\n name: boolean;\n }>({ name: false });\n\n const validate = (formData: FormData) => {\n const name = formData.get(\"name\")?.toString() ?? \"\";\n const errors = { name: !name.trim().length };\n setErrors(errors);\n const isValid = Object.values(errors).every((error) => error === false);\n return isValid;\n };\n\n const {\n mutate: createOrganizationApiKey,\n error,\n isPending,\n isSuccess,\n } = useCreateApiKey();\n const permissions = useListOrganizationApiKeyPermissions({ limit: 100 });\n\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n Create API key\n </Dialog.Title>\n <Form.Root\n onSubmit={(e) => {\n if (isPending) return;\n e.preventDefault();\n const data = new FormData(e.currentTarget);\n const isValid = validate(data);\n if (!isValid) {\n return;\n }\n\n createOrganizationApiKey(\n {\n data: {\n name: data.get(\"name\")?.toString() ?? \"\",\n permissions: data.getAll(\"permission\").map(String) || [],\n },\n },\n {\n onSuccess: (data) => {\n dispatch({ type: \"SET_CREATED_API_KEY\", apiKey: data });\n },\n },\n );\n }}\n >\n <Flex direction=\"column\" align=\"stretch\" gap=\"4\">\n {error && (\n <Callout.Root color=\"red\" role=\"alert\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n An error occurred while creating the API key.\n </Callout.Text>\n </Callout.Root>\n )}\n <Form.Field name=\"name\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"2\">\n <Form.Label asChild>\n <Label>Name</Label>\n </Form.Label>\n <Form.Control asChild>\n <TextField\n data-1p-ignore\n autoComplete=\"off\"\n placeholder=\"A descriptive name for the API key\"\n />\n </Form.Control>\n {errors.name && (\n <Form.Message asChild>\n <Text size=\"2\" color=\"red\">\n The name is required\n </Text>\n </Form.Message>\n )}\n </Flex>\n </Form.Field>\n {permissions.isSuccess && permissions.data.data.length > 0 && (\n <PermissionsField permissions={permissions.data.data} />\n )}\n </Flex>\n\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <SecondaryButton disabled={isPending || isSuccess}>\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <PrimaryButton loading={isPending || isSuccess}>\n Create API key\n </PrimaryButton>\n </Flex>\n </Form.Root>\n </Dialog.Content>\n );\n}\n\nfunction SaveApiKeyContent({ apiKey }: { apiKey: string }) {\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n Save your key\n </Dialog.Title>\n <Dialog.Description size=\"2\">\n Please save this API key in a secure location. If you lose it,\n you'll need to generate a new one.\n </Dialog.Description>\n <Callout.Root mt=\"5\" mb=\"4\">\n <Callout.Icon>\n <InfoCircledIcon />\n </Callout.Icon>\n <Callout.Text>\n You won't be able to access the key again. Please copy it now.\n </Callout.Text>\n </Callout.Root>\n <TextField value={apiKey} readOnly>\n <TextFieldSlot side=\"right\">\n <CopyButton asChild value={apiKey}>\n <IconButton variant=\"ghost\" size=\"1\" color=\"gray\" />\n </CopyButton>\n </TextFieldSlot>\n </TextField>\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <CopyButton asChild value={apiKey} withIcon={false}>\n <PrimaryButton>Copy and close</PrimaryButton>\n </CopyButton>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n );\n}\n\nfunction Permission({\n checked,\n permission,\n onChange,\n}: {\n checked: boolean;\n permission: ListOrganizationApiKeyPermission;\n onChange: (isChecked: boolean) => void;\n}) {\n return (\n <label\n htmlFor={permission.slug}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"var(--space-2) var(--space-4)\",\n gap: \"var(--space-3)\",\n borderBottom: \"1px solid var(--gray-6)\",\n cursor: \"pointer\",\n }}\n >\n <Checkbox\n checked={checked}\n id={permission.slug}\n name=\"permission\"\n value={permission.slug}\n onCheckedChange={(e) => onChange(e === \"indeterminate\" ? false : e)}\n />\n <Flex direction=\"column\">\n <Text size=\"2\" weight=\"bold\">\n {permission.name}\n </Text>\n <Text size=\"2\" color=\"gray\">\n {permission.description}\n </Text>\n </Flex>\n </label>\n );\n}\n\nfunction PermissionsField({\n permissions = [],\n}: {\n permissions: ListOrganizationApiKeyPermission[];\n}) {\n const [selectedPermissions, setSelectedPermissions] = React.useState<\n ListOrganizationApiKeyPermission[]\n >([]);\n const [filter, setFilter] = React.useState(\"\");\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n const filteredPermissions = React.useMemo(() => {\n return permissions.filter((p) => {\n return (\n !filter.trim().length ||\n p.description?.toLowerCase().match(filter.toLowerCase()) ||\n p.name.toLowerCase().match(filter.toLowerCase()) ||\n p.slug.toLowerCase().match(filter.toLowerCase())\n );\n });\n }, [permissions, filter]);\n\n React.useEffect(() => {\n const onResize = () => {\n if (fieldRef.current && filteredPermissions.length !== 0) {\n fieldRef.current.style.minHeight = \"unset\";\n }\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, [filteredPermissions.length]);\n\n return (\n <Form.Field name=\"permissions\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"1\">\n <Form.Label asChild>\n <Label>Permissions</Label>\n </Form.Label>\n <Text size=\"2\" mb=\"2\" color=\"gray\">\n Only enable the minimum permissions required for your use case.\n </Text>\n <Flex\n ref={fieldRef}\n style={{\n borderRadius: \"var(--radius-3)\",\n borderColor: \"var(--gray-6)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n direction=\"column\"\n align=\"stretch\"\n >\n <TextField\n name=\"search\"\n value={filter}\n size=\"2\"\n onChange={(e) => {\n if (fieldRef.current) {\n fieldRef.current.style.minHeight =\n fieldRef.current.clientHeight + 2 + \"px\";\n }\n setFilter(e.target.value);\n }}\n style={{\n height: \"40px\",\n borderRadius: \"var(--radius-3) var(--radius-3) 0 0\",\n boxShadow: \"none\",\n }}\n placeholder=\"Search\"\n >\n <TextFieldSlot side=\"left\" px=\"3\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextFieldSlot>\n </TextField>\n {filteredPermissions.length > 0 ? (\n <>\n <ScrollArea\n scrollbars=\"vertical\"\n style={{\n flex: 1,\n maxHeight: \"calc(50vh - 150px)\",\n border: \"1px solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n {filteredPermissions.map((permission) => (\n <Permission\n checked={selectedPermissions.some(\n (sp) => sp.slug === permission.slug,\n )}\n key={permission.slug}\n permission={permission}\n onChange={(isChecked) =>\n setSelectedPermissions((prev) =>\n isChecked\n ? [...prev, permission]\n : prev.filter((sp) => sp.slug !== permission.slug),\n )\n }\n />\n ))}\n </ScrollArea>\n <Box\n px=\"4\"\n py=\"3\"\n mt={\"-1px\"}\n flexGrow=\"0\"\n style={{\n borderTop: \"0 solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n <SelectedPermissions\n total={permissions.length}\n selected={selectedPermissions.length}\n onToggle={() =>\n setSelectedPermissions((prev) =>\n prev.length === permissions.length ? [] : permissions,\n )\n }\n />\n </Box>\n </>\n ) : (\n <Flex\n gap=\"4\"\n pt=\"6\"\n pb=\"6\"\n style={{ borderTop: \"1px solid var(--gray-6)\" }}\n flexGrow=\"1\"\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n >\n <MagnifyingGlassIcon\n style={{\n color: \"var(--gray-9)\",\n width: \"var(--space-5)\",\n height: \"var(--space-5)\",\n }}\n />\n <Text size=\"2\" align=\"center\" mb=\"2\" wrap=\"balance\" weight=\"bold\">\n No permissions match your search\n </Text>\n <Button\n size=\"1\"\n color=\"gray\"\n variant=\"outline\"\n onClick={() => setFilter(\"\")}\n >\n Clear search\n </Button>\n </Flex>\n )}\n </Flex>\n </Flex>\n </Form.Field>\n );\n}\n\nfunction SelectedPermissions({\n total,\n selected,\n onToggle,\n}: {\n total: number;\n selected: number;\n onToggle: () => void;\n}) {\n return (\n <Flex align=\"center\" gap=\"2\">\n <Text size=\"1\" style={{ lineHeight: 1, color: \"var(--gray-11)\" }}>\n {selected === 0\n ? \"No permissions selected\"\n : `${pluralize(\"permission\", selected)} selected`}\n </Text>\n <Text\n size=\"1\"\n onClick={onToggle}\n style={{ cursor: \"pointer\", color: \"var(--accent-10)\" }}\n >\n {total === selected ? \"Deselect all\" : \"Select all\"}\n </Text>\n </Flex>\n );\n}\n\nexport function CreateApiKeyButton() {\n const { dispatch } = useApiKeysContext();\n return (\n <Button onClick={() => dispatch({ type: \"OPEN_CREATE_DIALOG\" })}>\n Create API key\n </Button>\n );\n}\n"],"mappings":"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","names":["errors","error","data"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api-keys/create-api-key.tsx"],"sourcesContent":["import {\n Box,\n Checkbox,\n Flex,\n ScrollArea,\n Text,\n Callout,\n} from \"@radix-ui/themes\";\nimport {\n Dialog,\n Label,\n Button,\n TextField,\n TextFieldSlot,\n} from \"../elements.js\";\nimport * as Form from \"@radix-ui/react-form\";\nimport {\n ExclamationTriangleIcon,\n InfoCircledIcon,\n MagnifyingGlassIcon,\n} from \"@radix-ui/react-icons\";\nimport { CopyButton, CopyIconButton } from \"../copy-button.js\";\nimport * as React from \"react\";\nimport { pluralize } from \"../utils.js\";\nimport {\n useListOrganizationApiKeyPermissions,\n ListOrganizationApiKeyPermission,\n} from \"../../api/endpoint.js\";\nimport { useCreateApiKey } from \"../api/api-key.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\n\nexport function CreateApiKeyDialog() {\n const {\n state: { createDialogOpen, createdApiKey },\n dispatch,\n } = useApiKeysContext();\n\n return (\n <Dialog.Root\n open={createDialogOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({ type: \"CLOSE_CREATE_DIALOG\" });\n }\n }}\n >\n {createdApiKey ? (\n <SaveApiKeyContent apiKey={createdApiKey.value} />\n ) : (\n <CreateApiKeyForm\n // always remount the form when the dialog is opened to reset the validation errors\n key={`${createDialogOpen}`}\n />\n )}\n </Dialog.Root>\n );\n}\n\nfunction CreateApiKeyForm() {\n const { dispatch } = useApiKeysContext();\n const [errors, setErrors] = React.useState<{\n name: boolean;\n }>({ name: false });\n\n const validate = (formData: FormData) => {\n const name = formData.get(\"name\")?.toString() ?? \"\";\n const errors = { name: !name.trim().length };\n setErrors(errors);\n const isValid = Object.values(errors).every((error) => error === false);\n return isValid;\n };\n\n const {\n mutate: createOrganizationApiKey,\n error,\n isPending,\n isSuccess,\n } = useCreateApiKey();\n const permissions = useListOrganizationApiKeyPermissions({ limit: 100 });\n\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n Create API key\n </Dialog.Title>\n <Form.Root\n onSubmit={(e) => {\n if (isPending) return;\n e.preventDefault();\n const data = new FormData(e.currentTarget);\n const isValid = validate(data);\n if (!isValid) {\n return;\n }\n\n createOrganizationApiKey(\n {\n data: {\n name: data.get(\"name\")?.toString() ?? \"\",\n permissions: data.getAll(\"permission\").map(String) || [],\n },\n },\n {\n onSuccess: (data) => {\n dispatch({ type: \"SET_CREATED_API_KEY\", apiKey: data });\n },\n },\n );\n }}\n >\n <Flex direction=\"column\" align=\"stretch\" gap=\"4\">\n {error && (\n <Callout.Root color=\"red\" role=\"alert\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n An error occurred while creating the API key.\n </Callout.Text>\n </Callout.Root>\n )}\n <Form.Field name=\"name\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"2\">\n <Form.Label asChild>\n <Label>Name</Label>\n </Form.Label>\n <Form.Control asChild>\n <TextField\n data-1p-ignore\n autoComplete=\"off\"\n placeholder=\"A descriptive name for the API key\"\n />\n </Form.Control>\n {errors.name && (\n <Form.Message asChild>\n <Text size=\"2\" color=\"red\">\n The name is required\n </Text>\n </Form.Message>\n )}\n </Flex>\n </Form.Field>\n {permissions.isSuccess && permissions.data.data.length > 0 && (\n <PermissionsField permissions={permissions.data.data} />\n )}\n </Flex>\n\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={isPending || isSuccess}>\n Cancel\n </Button>\n </Dialog.Close>\n <Button type=\"submit\" loading={isPending || isSuccess}>\n Create API key\n </Button>\n </Flex>\n </Form.Root>\n </Dialog.Content>\n );\n}\n\nfunction SaveApiKeyContent({ apiKey }: { apiKey: string }) {\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n Save your key\n </Dialog.Title>\n <Dialog.Description size=\"2\">\n Please save this API key in a secure location. If you lose it,\n you'll need to generate a new one.\n </Dialog.Description>\n <Callout.Root mt=\"5\" mb=\"4\">\n <Callout.Icon>\n <InfoCircledIcon />\n </Callout.Icon>\n <Callout.Text>\n You won't be able to access the key again. Please copy it now.\n </Callout.Text>\n </Callout.Root>\n <TextField value={apiKey} readOnly>\n <TextFieldSlot side=\"right\">\n <CopyIconButton value={apiKey} />\n </TextFieldSlot>\n </TextField>\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <CopyButton value={apiKey}>Copy and close</CopyButton>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n );\n}\n\nfunction Permission({\n checked,\n permission,\n onChange,\n}: {\n checked: boolean;\n permission: ListOrganizationApiKeyPermission;\n onChange: (isChecked: boolean) => void;\n}) {\n return (\n <label\n htmlFor={permission.slug}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"var(--space-2) var(--space-4)\",\n gap: \"var(--space-3)\",\n borderBottom: \"1px solid var(--gray-6)\",\n cursor: \"pointer\",\n }}\n >\n <Checkbox\n checked={checked}\n id={permission.slug}\n name=\"permission\"\n value={permission.slug}\n onCheckedChange={(e) => onChange(e === \"indeterminate\" ? false : e)}\n />\n <Flex direction=\"column\">\n <Text size=\"2\" weight=\"bold\">\n {permission.name}\n </Text>\n <Text size=\"2\" color=\"gray\">\n {permission.description}\n </Text>\n </Flex>\n </label>\n );\n}\n\nfunction PermissionsField({\n permissions = [],\n}: {\n permissions: ListOrganizationApiKeyPermission[];\n}) {\n const [selectedPermissions, setSelectedPermissions] = React.useState<\n ListOrganizationApiKeyPermission[]\n >([]);\n const [filter, setFilter] = React.useState(\"\");\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n const filteredPermissions = React.useMemo(() => {\n return permissions.filter((p) => {\n return (\n !filter.trim().length ||\n p.description?.toLowerCase().match(filter.toLowerCase()) ||\n p.name.toLowerCase().match(filter.toLowerCase()) ||\n p.slug.toLowerCase().match(filter.toLowerCase())\n );\n });\n }, [permissions, filter]);\n\n React.useEffect(() => {\n const onResize = () => {\n if (fieldRef.current && filteredPermissions.length !== 0) {\n fieldRef.current.style.minHeight = \"unset\";\n }\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, [filteredPermissions.length]);\n\n return (\n <Form.Field name=\"permissions\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"1\">\n <Form.Label asChild>\n <Label>Permissions</Label>\n </Form.Label>\n <Text size=\"2\" mb=\"2\" color=\"gray\">\n Only enable the minimum permissions required for your use case.\n </Text>\n <Flex\n ref={fieldRef}\n style={{\n borderRadius: \"var(--radius-3)\",\n borderColor: \"var(--gray-6)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n direction=\"column\"\n align=\"stretch\"\n >\n <TextField\n name=\"search\"\n value={filter}\n size=\"2\"\n onChange={(e) => {\n if (fieldRef.current) {\n fieldRef.current.style.minHeight =\n fieldRef.current.clientHeight + 2 + \"px\";\n }\n setFilter(e.target.value);\n }}\n style={{\n height: \"40px\",\n borderRadius: \"var(--radius-3) var(--radius-3) 0 0\",\n boxShadow: \"none\",\n }}\n placeholder=\"Search\"\n >\n <TextFieldSlot side=\"left\" px=\"3\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextFieldSlot>\n </TextField>\n {filteredPermissions.length > 0 ? (\n <>\n <ScrollArea\n scrollbars=\"vertical\"\n style={{\n flex: 1,\n maxHeight: \"calc(50vh - 150px)\",\n border: \"1px solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n {filteredPermissions.map((permission) => (\n <Permission\n checked={selectedPermissions.some(\n (sp) => sp.slug === permission.slug,\n )}\n key={permission.slug}\n permission={permission}\n onChange={(isChecked) =>\n setSelectedPermissions((prev) =>\n isChecked\n ? [...prev, permission]\n : prev.filter((sp) => sp.slug !== permission.slug),\n )\n }\n />\n ))}\n </ScrollArea>\n <Box\n px=\"4\"\n py=\"3\"\n mt={\"-1px\"}\n flexGrow=\"0\"\n style={{\n borderTop: \"0 solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n <SelectedPermissions\n total={permissions.length}\n selected={selectedPermissions.length}\n onToggle={() =>\n setSelectedPermissions((prev) =>\n prev.length === permissions.length ? [] : permissions,\n )\n }\n />\n </Box>\n </>\n ) : (\n <Flex\n gap=\"4\"\n pt=\"6\"\n pb=\"6\"\n style={{ borderTop: \"1px solid var(--gray-6)\" }}\n flexGrow=\"1\"\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n >\n <MagnifyingGlassIcon\n style={{\n color: \"var(--gray-9)\",\n width: \"var(--space-5)\",\n height: \"var(--space-5)\",\n }}\n />\n <Text size=\"2\" align=\"center\" mb=\"2\" wrap=\"balance\" weight=\"bold\">\n No permissions match your search\n </Text>\n <Button\n variant=\"secondary\"\n size=\"1\"\n onClick={() => setFilter(\"\")}\n >\n Clear search\n </Button>\n </Flex>\n )}\n </Flex>\n </Flex>\n </Form.Field>\n );\n}\n\nfunction SelectedPermissions({\n total,\n selected,\n onToggle,\n}: {\n total: number;\n selected: number;\n onToggle: () => void;\n}) {\n return (\n <Flex align=\"center\" gap=\"2\">\n <Text size=\"1\" style={{ lineHeight: 1, color: \"var(--gray-11)\" }}>\n {selected === 0\n ? \"No permissions selected\"\n : `${pluralize(\"permission\", selected)} selected`}\n </Text>\n <Text\n size=\"1\"\n onClick={onToggle}\n style={{ cursor: \"pointer\", color: \"var(--accent-10)\" }}\n >\n {total === selected ? \"Deselect all\" : \"Select all\"}\n </Text>\n </Flex>\n );\n}\n\nexport function CreateApiKeyButton() {\n const { dispatch } = useApiKeysContext();\n return (\n <Button\n variant=\"secondary\"\n onClick={() => dispatch({ type: \"OPEN_CREATE_DIALOG\" })}\n >\n Create API key\n </Button>\n );\n}\n"],"mappings":"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","names":["errors","error","data"]}
|
|
@@ -28,6 +28,7 @@ var import_endpoint = require("../../api/endpoint.js");
|
|
|
28
28
|
var import_endpoint2 = require("../../api/endpoint.js");
|
|
29
29
|
var import_react_query = require("@tanstack/react-query");
|
|
30
30
|
var import_react_icons = require("@radix-ui/react-icons");
|
|
31
|
+
var import_elements = require("../elements.js");
|
|
31
32
|
function RevokeApiKeyDialog({
|
|
32
33
|
apiKey,
|
|
33
34
|
open,
|
|
@@ -49,10 +50,10 @@ function RevokeApiKeyDialog({
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
});
|
|
52
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
53
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
53
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Content, { maxWidth: "529px", children: [
|
|
54
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Title, { mb: "2", children: "Revoke API key?" }),
|
|
54
55
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "column", gap: "5", children: [
|
|
55
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
56
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Description, { size: "2", children: [
|
|
56
57
|
"This API key will be immediately disabled. API request made using this key will be rejected, which could cause any systems still depending on it to break.",
|
|
57
58
|
" ",
|
|
58
59
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "This action cannot be undone." })
|
|
@@ -63,14 +64,13 @@ function RevokeApiKeyDialog({
|
|
|
63
64
|
] }),
|
|
64
65
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_api_key_details_card.ApiKeyDetailsCard, { apiKey }),
|
|
65
66
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { justify: "end", gap: "2", children: [
|
|
66
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
67
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Cancel, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: "Cancel" }) }),
|
|
67
68
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
68
|
-
|
|
69
|
+
import_elements.Button,
|
|
69
70
|
{
|
|
71
|
+
variant: "destructive",
|
|
70
72
|
disabled: isPending || isSuccess,
|
|
71
73
|
loading: isPending || isSuccess,
|
|
72
|
-
variant: "solid",
|
|
73
|
-
color: "red",
|
|
74
74
|
onClick: () => deleteOrganizationApiKey({ apiKeyId: apiKey.id }),
|
|
75
75
|
children: "Revoke key"
|
|
76
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api-keys/revoke-api-key-dialog.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api-keys/revoke-api-key-dialog.tsx"],"sourcesContent":["import { Flex, Callout } from \"@radix-ui/themes\";\nimport { ApiKeyDetailsCard } from \"./api-key-details-card.js\";\nimport {\n getListOrganizationApiKeysQueryKey,\n ListOrganizationApiKeysResponseData,\n} from \"../../api/endpoint.js\";\nimport { useDeleteOrganizationApiKey } from \"../../api/endpoint.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { ExclamationTriangleIcon } from \"@radix-ui/react-icons\";\nimport { AlertDialog, Button } from \"../elements.js\";\n\nexport function RevokeApiKeyDialog({\n apiKey,\n open,\n onOpenChange,\n}: {\n apiKey: ListOrganizationApiKeysResponseData;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const queryClient = useQueryClient();\n const {\n mutate: deleteOrganizationApiKey,\n isPending,\n error,\n isSuccess,\n } = useDeleteOrganizationApiKey({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationApiKeysQueryKey(),\n });\n onOpenChange(false);\n },\n },\n });\n\n return (\n <AlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content maxWidth=\"529px\">\n <AlertDialog.Title mb=\"2\">Revoke API key?</AlertDialog.Title>\n <Flex direction=\"column\" gap=\"5\">\n <AlertDialog.Description size=\"2\">\n This API key will be immediately disabled. API request made using\n this key will be rejected, which could cause any systems still\n depending on it to break.{\" \"}\n <strong>This action cannot be undone.</strong>\n </AlertDialog.Description>\n {error && (\n <Callout.Root color=\"red\" role=\"alert\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n An error occurred while revoking the API key.\n </Callout.Text>\n </Callout.Root>\n )}\n <ApiKeyDetailsCard apiKey={apiKey} />\n <Flex justify=\"end\" gap=\"2\">\n <AlertDialog.Cancel>\n <Button variant=\"secondary\">Cancel</Button>\n </AlertDialog.Cancel>\n <Button\n variant=\"destructive\"\n disabled={isPending || isSuccess}\n loading={isPending || isSuccess}\n onClick={() => deleteOrganizationApiKey({ apiKeyId: apiKey.id })}\n >\n Revoke key\n </Button>\n </Flex>\n </Flex>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCQ;AAxCR,oBAA8B;AAC9B,kCAAkC;AAClC,sBAGO;AACP,IAAAA,mBAA4C;AAC5C,yBAA+B;AAC/B,yBAAwC;AACxC,sBAAoC;AAE7B,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,kBAAc,mCAAe;AACnC,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,8CAA4B;AAAA,IAC9B,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,cAAU,oDAAmC;AAAA,QAC/C,CAAC;AACD,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,4CAAC,4BAAY,MAAZ,EAAiB,MAAY,cAC5B,uDAAC,4BAAY,SAAZ,EAAoB,UAAS,SAC5B;AAAA,gDAAC,4BAAY,OAAZ,EAAkB,IAAG,KAAI,6BAAe;AAAA,IACzC,6CAAC,sBAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,mDAAC,4BAAY,aAAZ,EAAwB,MAAK,KAAI;AAAA;AAAA,QAGN;AAAA,QAC1B,4CAAC,YAAO,2CAA6B;AAAA,SACvC;AAAA,MACC,SACC,6CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,MAAK,SAC7B;AAAA,oDAAC,sBAAQ,MAAR,EACC,sDAAC,8CAAwB,GAC3B;AAAA,QACA,4CAAC,sBAAQ,MAAR,EAAa,2DAEd;AAAA,SACF;AAAA,MAEF,4CAAC,iDAAkB,QAAgB;AAAA,MACnC,6CAAC,sBAAK,SAAQ,OAAM,KAAI,KACtB;AAAA,oDAAC,4BAAY,QAAZ,EACC,sDAAC,0BAAO,SAAQ,aAAY,oBAAM,GACpC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,UAAU,aAAa;AAAA,YACvB,SAAS,aAAa;AAAA,YACtB,SAAS,MAAM,yBAAyB,EAAE,UAAU,OAAO,GAAG,CAAC;AAAA,YAChE;AAAA;AAAA,QAED;AAAA,SACF;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":["import_endpoint"]}
|
|
@@ -23,13 +23,14 @@ __export(skeleton_table_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(skeleton_table_exports);
|
|
24
24
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
25
|
var import_themes = require("@radix-ui/themes");
|
|
26
|
+
var import_elements = require("../elements.js");
|
|
26
27
|
function SkeletonTable({
|
|
27
28
|
numRows,
|
|
28
29
|
columns
|
|
29
30
|
}) {
|
|
30
31
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Table.Root, { children: [
|
|
31
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Row, { children: columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
32
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Body, { children: Array.from({ length: numRows }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Row, { children: columns.map((column, index2) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Cell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
32
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Row, { children: columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: column.children }) }, index)) }) }),
|
|
33
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Body, { children: Array.from({ length: numRows }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Row, { children: columns.map((column, index2) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Cell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: column.children }) }, index2)) }, index)) })
|
|
33
34
|
] });
|
|
34
35
|
}
|
|
35
36
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api-keys/skeleton-table.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api-keys/skeleton-table.tsx"],"sourcesContent":["import { Table } from \"@radix-ui/themes\";\nimport { Skeleton } from \"../elements.js\";\n\nexport function SkeletonTable({\n numRows,\n columns,\n}: {\n numRows: number;\n columns: Table.ColumnHeaderCellProps[];\n}) {\n return (\n <Table.Root>\n <Table.Header>\n <Table.Row>\n {columns.map((column, index) => (\n <Table.ColumnHeaderCell key={index}>\n <Skeleton>{column.children}</Skeleton>\n </Table.ColumnHeaderCell>\n ))}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {Array.from({ length: numRows }).map((_, index) => (\n <Table.Row key={index}>\n {columns.map((column, index) => (\n <Table.Cell key={index}>\n <Skeleton>{column.children}</Skeleton>\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWI;AAXJ,oBAAsB;AACtB,sBAAyB;AAElB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGG;AACD,SACE,6CAAC,oBAAM,MAAN,EACC;AAAA,gDAAC,oBAAM,QAAN,EACC,sDAAC,oBAAM,KAAN,EACE,kBAAQ,IAAI,CAAC,QAAQ,UACpB,4CAAC,oBAAM,kBAAN,EACC,sDAAC,4BAAU,iBAAO,UAAS,KADA,KAE7B,CACD,GACH,GACF;AAAA,IACA,4CAAC,oBAAM,MAAN,EACE,gBAAM,KAAK,EAAE,QAAQ,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,UACvC,4CAAC,oBAAM,KAAN,EACE,kBAAQ,IAAI,CAAC,QAAQA,WACpB,4CAAC,oBAAM,MAAN,EACC,sDAAC,4BAAU,iBAAO,UAAS,KADZA,MAEjB,CACD,KALa,KAMhB,CACD,GACH;AAAA,KACF;AAEJ;","names":["index"]}
|
|
@@ -48,14 +48,14 @@ function ChangePasswordDialog({
|
|
|
48
48
|
setOpen(false);
|
|
49
49
|
}, []);
|
|
50
50
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
51
|
-
|
|
51
|
+
import_elements.Dialog.Root,
|
|
52
52
|
{
|
|
53
53
|
...props,
|
|
54
54
|
open: props.open || open,
|
|
55
55
|
onOpenChange: props.onOpenChange || setOpen,
|
|
56
56
|
children: [
|
|
57
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
58
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.
|
|
57
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Trigger, { children }),
|
|
58
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Content, { maxWidth: "480px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Content, { onClose: handleClose }) })
|
|
59
59
|
]
|
|
60
60
|
}
|
|
61
61
|
);
|
|
@@ -91,8 +91,8 @@ function Content({ onClose }) {
|
|
|
91
91
|
});
|
|
92
92
|
};
|
|
93
93
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
94
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
95
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
94
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Title, { mb: "5", children: "Change Password" }),
|
|
95
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Description, { children: "Change your account password" }) }),
|
|
96
96
|
errorMessage && errorMessage !== "Invalid credentials" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Callout.Root, { color: "red", my: "-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Callout.Text, { children: errorMessage }) }) : null,
|
|
97
97
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
98
98
|
Form.Root,
|
|
@@ -197,9 +197,10 @@ function Content({ onClose }) {
|
|
|
197
197
|
)
|
|
198
198
|
] }),
|
|
199
199
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { mt: "5", gap: "3", justify: "end", children: [
|
|
200
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
201
|
-
import_elements.
|
|
200
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Close, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
201
|
+
import_elements.Button,
|
|
202
202
|
{
|
|
203
|
+
variant: "secondary",
|
|
203
204
|
type: "button",
|
|
204
205
|
disabled: changePassword.isPending || changePassword.isSuccess,
|
|
205
206
|
children: "Cancel"
|
|
@@ -208,11 +209,12 @@ function Content({ onClose }) {
|
|
|
208
209
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
209
210
|
import_save_button.SaveButton,
|
|
210
211
|
{
|
|
211
|
-
|
|
212
|
+
type: "submit",
|
|
212
213
|
loading: changePassword.isPending,
|
|
213
214
|
done: changePassword.isSuccess,
|
|
214
215
|
onDone: onClose,
|
|
215
|
-
|
|
216
|
+
disabled: disableSubmit || void 0,
|
|
217
|
+
children: "Change password"
|
|
216
218
|
}
|
|
217
219
|
)
|
|
218
220
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/change-password-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Dialog, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as Form from \"@radix-ui/react-form\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport {\n DialogContent,\n Label,\n PasswordField,\n PrimaryButton,\n SecondaryButton,\n} from \"./elements.js\";\nimport { useUpdatePassword } from \"../api/endpoint.js\";\nimport { SaveButton } from \"./save-button.js\";\n\ninterface ChangePasswordDialogProps extends Dialog.RootProps {\n children?: ReactNode;\n}\n\nexport function ChangePasswordDialog({\n children,\n ...props\n}: ChangePasswordDialogProps) {\n const [open, setOpen] = React.useState(false);\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>{children}</Dialog.Trigger>\n\n <DialogContent maxWidth=\"480px\">\n <Content onClose={handleClose} />\n </DialogContent>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps {\n onClose: () => void;\n}\n\nfunction Content({ onClose }: ContentProps) {\n const changePassword = useUpdatePassword({\n mutation: {\n onError: (error) => {\n const errorMsg = getMutationErrorMessage(error);\n if (errorMsg === \"Invalid credentials\") {\n setServerErrors({\n currentPassword:\n \"Your current password is incorrect. Please, try again.\",\n });\n }\n },\n },\n });\n const [disableSubmit, setDisableSubmit] = React.useState(true);\n const [serverErrors, setServerErrors] = React.useState<{\n currentPassword?: string;\n password?: string;\n confirmPassword?: string;\n }>({});\n\n const errorMessage = React.useMemo(() => {\n if (changePassword.error) {\n return getMutationErrorMessage(changePassword.error);\n }\n\n return null;\n }, [changePassword.error]);\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formData = new FormData(event.currentTarget);\n const currentPassword = formData.get(\"oldPassword\")?.toString() ?? \"\";\n const newPassword = formData.get(\"password\")?.toString() ?? \"\";\n\n changePassword.mutate({\n data: { currentPassword, newPassword },\n });\n };\n\n return (\n <>\n <Dialog.Title mb=\"5\">Change Password</Dialog.Title>\n <VisuallyHidden>\n <Dialog.Description>Change your account password</Dialog.Description>\n </VisuallyHidden>\n\n {errorMessage && errorMessage !== \"Invalid credentials\" ? (\n <Callout.Root color=\"red\" my=\"-2\">\n <Callout.Text>{errorMessage}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Form.Root\n onSubmit={handleSubmit}\n onChange={(event) => {\n const formData = new FormData(event.currentTarget);\n const currentPassword = formData.get(\"oldPassword\")?.toString() ?? \"\";\n const newPassword = formData.get(\"password\")?.toString() ?? \"\";\n const confirmPassword =\n formData.get(\"confirmPassword\")?.toString() ?? \"\";\n\n setDisableSubmit(\n currentPassword === \"\" ||\n newPassword === \"\" ||\n confirmPassword === \"\",\n );\n setServerErrors({});\n }}\n onClearServerErrors={() => {\n setServerErrors({});\n }}\n >\n <Flex mt=\"5\" direction=\"column\" gap=\"4\">\n <Form.Field\n name=\"oldPassword\"\n asChild\n serverInvalid={!serverErrors.currentPassword}\n >\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>Enter your current password</Label>\n </Form.Label>\n\n <Form.Control asChild>\n <PasswordField\n autoFocus\n required\n disabled={\n changePassword.isPending || changePassword.isSuccess\n }\n autoComplete=\"current-password\"\n placeholder=\"Current password\"\n />\n </Form.Control>\n\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n Please enter your current password\n </Text>\n </Form.Message>\n\n {serverErrors.currentPassword && (\n <Form.Message asChild>\n <Text size=\"2\" color=\"red\">\n {serverErrors.currentPassword}\n </Text>\n </Form.Message>\n )}\n </Flex>\n </Form.Field>\n\n <Form.Field\n name=\"password\"\n asChild\n serverInvalid={!serverErrors.password}\n >\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>Enter your new password</Label>\n </Form.Label>\n\n <Form.Control asChild>\n <PasswordField\n autoComplete=\"new-password\"\n placeholder=\"New password\"\n required\n disabled={\n changePassword.isPending || changePassword.isSuccess\n }\n />\n </Form.Control>\n\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n Please enter your new password\n </Text>\n </Form.Message>\n <Form.Message match={(value) => value.length < 8} asChild>\n <Text size=\"2\" color=\"red\">\n Password must be at least 8 characters\n </Text>\n </Form.Message>\n <Form.Message\n match={(value, formData) =>\n value === formData.get(\"oldPassword\")\n }\n asChild\n >\n <Text size=\"2\" color=\"red\">\n You cannot reuse your current password\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n\n <Form.Field\n name=\"confirmPassword\"\n asChild\n serverInvalid={!serverErrors.confirmPassword}\n >\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>Confirm your new password</Label>\n </Form.Label>\n\n <Form.Control asChild>\n <PasswordField\n autoComplete=\"new-password\"\n placeholder=\"Confirm new password\"\n required\n disabled={\n changePassword.isPending || changePassword.isSuccess\n }\n />\n </Form.Control>\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n Please confirm your new password\n </Text>\n </Form.Message>\n <Form.Message\n match={(value, formData) => value !== formData.get(\"password\")}\n asChild\n >\n <Text size=\"2\" color=\"red\">\n The new passwords you entered don’t match.\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n </Flex>\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <SecondaryButton\n type=\"button\"\n disabled={changePassword.isPending || changePassword.isSuccess}\n >\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <SaveButton\n asChild\n loading={changePassword.isPending}\n done={changePassword.isSuccess}\n onDone={onClose}\n >\n <PrimaryButton type=\"submit\" disabled={disableSubmit}>\n Change password\n </PrimaryButton>\n </SaveButton>\n </Flex>\n </Form.Root>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">{errorMessage}</section>\n </VisuallyHidden>\n </>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return error.message;\n }\n\n return \"Something went wrong. Please try again.\";\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/change-password-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as Form from \"@radix-ui/react-form\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport { Button, Dialog, Label, PasswordField } from \"./elements.js\";\nimport { useUpdatePassword } from \"../api/endpoint.js\";\nimport { SaveButton } from \"./save-button.js\";\n\ninterface ChangePasswordDialogProps extends Dialog.RootProps {\n children?: ReactNode;\n}\n\nexport function ChangePasswordDialog({\n children,\n ...props\n}: ChangePasswordDialogProps) {\n const [open, setOpen] = React.useState(false);\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>{children}</Dialog.Trigger>\n\n <Dialog.Content maxWidth=\"480px\">\n <Content onClose={handleClose} />\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps {\n onClose: () => void;\n}\n\nfunction Content({ onClose }: ContentProps) {\n const changePassword = useUpdatePassword({\n mutation: {\n onError: (error) => {\n const errorMsg = getMutationErrorMessage(error);\n if (errorMsg === \"Invalid credentials\") {\n setServerErrors({\n currentPassword:\n \"Your current password is incorrect. Please, try again.\",\n });\n }\n },\n },\n });\n const [disableSubmit, setDisableSubmit] = React.useState(true);\n const [serverErrors, setServerErrors] = React.useState<{\n currentPassword?: string;\n password?: string;\n confirmPassword?: string;\n }>({});\n\n const errorMessage = React.useMemo(() => {\n if (changePassword.error) {\n return getMutationErrorMessage(changePassword.error);\n }\n\n return null;\n }, [changePassword.error]);\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formData = new FormData(event.currentTarget);\n const currentPassword = formData.get(\"oldPassword\")?.toString() ?? \"\";\n const newPassword = formData.get(\"password\")?.toString() ?? \"\";\n\n changePassword.mutate({\n data: { currentPassword, newPassword },\n });\n };\n\n return (\n <>\n <Dialog.Title mb=\"5\">Change Password</Dialog.Title>\n <VisuallyHidden>\n <Dialog.Description>Change your account password</Dialog.Description>\n </VisuallyHidden>\n\n {errorMessage && errorMessage !== \"Invalid credentials\" ? (\n <Callout.Root color=\"red\" my=\"-2\">\n <Callout.Text>{errorMessage}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Form.Root\n onSubmit={handleSubmit}\n onChange={(event) => {\n const formData = new FormData(event.currentTarget);\n const currentPassword = formData.get(\"oldPassword\")?.toString() ?? \"\";\n const newPassword = formData.get(\"password\")?.toString() ?? \"\";\n const confirmPassword =\n formData.get(\"confirmPassword\")?.toString() ?? \"\";\n\n setDisableSubmit(\n currentPassword === \"\" ||\n newPassword === \"\" ||\n confirmPassword === \"\",\n );\n setServerErrors({});\n }}\n onClearServerErrors={() => {\n setServerErrors({});\n }}\n >\n <Flex mt=\"5\" direction=\"column\" gap=\"4\">\n <Form.Field\n name=\"oldPassword\"\n asChild\n serverInvalid={!serverErrors.currentPassword}\n >\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>Enter your current password</Label>\n </Form.Label>\n\n <Form.Control asChild>\n <PasswordField\n autoFocus\n required\n disabled={\n changePassword.isPending || changePassword.isSuccess\n }\n autoComplete=\"current-password\"\n placeholder=\"Current password\"\n />\n </Form.Control>\n\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n Please enter your current password\n </Text>\n </Form.Message>\n\n {serverErrors.currentPassword && (\n <Form.Message asChild>\n <Text size=\"2\" color=\"red\">\n {serverErrors.currentPassword}\n </Text>\n </Form.Message>\n )}\n </Flex>\n </Form.Field>\n\n <Form.Field\n name=\"password\"\n asChild\n serverInvalid={!serverErrors.password}\n >\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>Enter your new password</Label>\n </Form.Label>\n\n <Form.Control asChild>\n <PasswordField\n autoComplete=\"new-password\"\n placeholder=\"New password\"\n required\n disabled={\n changePassword.isPending || changePassword.isSuccess\n }\n />\n </Form.Control>\n\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n Please enter your new password\n </Text>\n </Form.Message>\n <Form.Message match={(value) => value.length < 8} asChild>\n <Text size=\"2\" color=\"red\">\n Password must be at least 8 characters\n </Text>\n </Form.Message>\n <Form.Message\n match={(value, formData) =>\n value === formData.get(\"oldPassword\")\n }\n asChild\n >\n <Text size=\"2\" color=\"red\">\n You cannot reuse your current password\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n\n <Form.Field\n name=\"confirmPassword\"\n asChild\n serverInvalid={!serverErrors.confirmPassword}\n >\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>Confirm your new password</Label>\n </Form.Label>\n\n <Form.Control asChild>\n <PasswordField\n autoComplete=\"new-password\"\n placeholder=\"Confirm new password\"\n required\n disabled={\n changePassword.isPending || changePassword.isSuccess\n }\n />\n </Form.Control>\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n Please confirm your new password\n </Text>\n </Form.Message>\n <Form.Message\n match={(value, formData) => value !== formData.get(\"password\")}\n asChild\n >\n <Text size=\"2\" color=\"red\">\n The new passwords you entered don’t match.\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n </Flex>\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button\n variant=\"secondary\"\n type=\"button\"\n disabled={changePassword.isPending || changePassword.isSuccess}\n >\n Cancel\n </Button>\n </Dialog.Close>\n\n <SaveButton\n type=\"submit\"\n loading={changePassword.isPending}\n done={changePassword.isSuccess}\n onDone={onClose}\n disabled={disableSubmit || undefined}\n >\n Change password\n </SaveButton>\n </Flex>\n </Form.Root>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">{errorMessage}</section>\n </VisuallyHidden>\n </>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return error.message;\n }\n\n return \"Something went wrong. Please try again.\";\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 ChangePasswordDialogProps extends
|
|
5
|
+
interface ChangePasswordDialogProps extends RootProps {
|
|
6
6
|
children?: ReactNode;
|
|
7
7
|
}
|
|
8
8
|
declare function ChangePasswordDialog({ children, ...props }: ChangePasswordDialogProps): react_jsx_runtime.JSX.Element;
|
|
@@ -28,47 +28,69 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var copy_button_exports = {};
|
|
30
30
|
__export(copy_button_exports, {
|
|
31
|
-
CopyButton: () => CopyButton
|
|
31
|
+
CopyButton: () => CopyButton,
|
|
32
|
+
CopyIconButton: () => CopyIconButton
|
|
32
33
|
});
|
|
33
34
|
module.exports = __toCommonJS(copy_button_exports);
|
|
34
35
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
35
36
|
var React = __toESM(require("react"), 1);
|
|
37
|
+
var import_elements = require("./elements.js");
|
|
36
38
|
var import_react_icons = require("@radix-ui/react-icons");
|
|
37
39
|
var import_themes = require("@radix-ui/themes");
|
|
38
40
|
const CopyButton = React.forwardRef(
|
|
39
|
-
function CopyButton2({ value, asChild, children, style, withIcon =
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
await navigator.clipboard.writeText(value);
|
|
46
|
-
setHasCopied(true);
|
|
47
|
-
if (timeoutRef.current) {
|
|
48
|
-
window.clearTimeout(timeoutRef.current);
|
|
49
|
-
}
|
|
50
|
-
timeoutRef.current = window.setTimeout(() => {
|
|
51
|
-
setHasCopied(false);
|
|
52
|
-
}, 3e3);
|
|
53
|
-
} catch (err) {
|
|
54
|
-
console.error("Failed to copy text:", err);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
React.useEffect(() => {
|
|
58
|
-
return () => {
|
|
59
|
-
if (timeoutRef.current) {
|
|
60
|
-
window.clearTimeout(timeoutRef.current);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
}, []);
|
|
64
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Comp, { onPointerUp: handleClick, ref, ...props, children: [
|
|
65
|
-
withIcon && (hasCopied ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.CopyIcon, {})),
|
|
41
|
+
function CopyButton2({ value, asChild, children, style, withIcon = false, ...props }, ref) {
|
|
42
|
+
const Comp = asChild ? import_themes.Slot : import_elements.Button;
|
|
43
|
+
const [hasCopied, copy] = useCopy(value);
|
|
44
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Comp, { type: "button", onPointerUp: copy, ref, ...props, children: [
|
|
45
|
+
withIcon && (hasCopied ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.CheckIcon, { "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.CopyIcon, { "aria-hidden": true })),
|
|
66
46
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Slottable, { children })
|
|
67
47
|
] });
|
|
68
48
|
}
|
|
69
49
|
);
|
|
50
|
+
const CopyIconButton = React.forwardRef(function CopyIconButton2({ value, style, ...props }, ref) {
|
|
51
|
+
const [hasCopied, copy] = useCopy(value);
|
|
52
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
53
|
+
import_elements.IconButton,
|
|
54
|
+
{
|
|
55
|
+
type: "button",
|
|
56
|
+
onPointerUp: copy,
|
|
57
|
+
ref,
|
|
58
|
+
title: hasCopied ? "Copied" : "Copy to clipboard",
|
|
59
|
+
"aria-label": "Copy to clipboard",
|
|
60
|
+
...props,
|
|
61
|
+
children: hasCopied ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.CopyIcon, {})
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
function useCopy(value) {
|
|
66
|
+
const [hasCopied, setHasCopied] = React.useState(false);
|
|
67
|
+
const timeoutRef = React.useRef(void 0);
|
|
68
|
+
const copy = async () => {
|
|
69
|
+
try {
|
|
70
|
+
await navigator.clipboard.writeText(value);
|
|
71
|
+
setHasCopied(true);
|
|
72
|
+
if (timeoutRef.current) {
|
|
73
|
+
window.clearTimeout(timeoutRef.current);
|
|
74
|
+
}
|
|
75
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
76
|
+
setHasCopied(false);
|
|
77
|
+
}, 3e3);
|
|
78
|
+
} catch (err) {
|
|
79
|
+
console.error("Failed to copy text:", err);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
React.useEffect(() => {
|
|
83
|
+
return () => {
|
|
84
|
+
if (timeoutRef.current) {
|
|
85
|
+
window.clearTimeout(timeoutRef.current);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}, []);
|
|
89
|
+
return [hasCopied, copy];
|
|
90
|
+
}
|
|
70
91
|
// Annotate the CommonJS export names for ESM import in node:
|
|
71
92
|
0 && (module.exports = {
|
|
72
|
-
CopyButton
|
|
93
|
+
CopyButton,
|
|
94
|
+
CopyIconButton
|
|
73
95
|
});
|
|
74
96
|
//# sourceMappingURL=copy-button.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/copy-button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CheckIcon, CopyIcon } from \"@radix-ui/react-icons\";\nimport { Slot, Slottable } from \"@radix-ui/themes\";\n\ninterface
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/copy-button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { IconButton, Button } from \"./elements.js\";\nimport { CheckIcon, CopyIcon } from \"@radix-ui/react-icons\";\nimport { Slot, Slottable } from \"@radix-ui/themes\";\n\ninterface CopyButtonOwnProps {\n value: string;\n withIcon?: boolean;\n}\n\ninterface CopyButtonProps\n extends CopyButtonOwnProps,\n Omit<React.ComponentProps<typeof Button>, keyof CopyButtonOwnProps> {}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n function CopyButton(\n { value, asChild, children, style, withIcon = false, ...props },\n ref,\n ) {\n const Comp = asChild ? Slot : Button;\n const [hasCopied, copy] = useCopy(value);\n return (\n <Comp type=\"button\" onPointerUp={copy} ref={ref} {...props}>\n {withIcon &&\n (hasCopied ? <CheckIcon aria-hidden /> : <CopyIcon aria-hidden />)}\n <Slottable>{children}</Slottable>\n </Comp>\n );\n },\n);\n\ninterface CopyIconButtonOwnProps {\n value: string;\n}\n\ninterface CopyIconButtonProps\n extends CopyIconButtonOwnProps,\n Omit<\n React.ComponentProps<typeof IconButton>,\n \"asChild\" | \"children\" | keyof CopyIconButtonOwnProps\n > {}\n\nexport const CopyIconButton = React.forwardRef<\n HTMLButtonElement,\n CopyIconButtonProps\n>(function CopyIconButton({ value, style, ...props }, ref) {\n const [hasCopied, copy] = useCopy(value);\n return (\n <IconButton\n type=\"button\"\n onPointerUp={copy}\n ref={ref}\n title={hasCopied ? \"Copied\" : \"Copy to clipboard\"}\n aria-label=\"Copy to clipboard\"\n {...props}\n >\n {hasCopied ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n );\n});\n\nfunction useCopy(value: string) {\n const [hasCopied, setHasCopied] = React.useState(false);\n const timeoutRef = React.useRef<number | undefined>(undefined);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setHasCopied(true);\n\n // Clear any existing timeout\n if (timeoutRef.current) {\n window.clearTimeout(timeoutRef.current);\n }\n\n // Set new timeout\n timeoutRef.current = window.setTimeout(() => {\n setHasCopied(false);\n }, 3000);\n } catch (err) {\n console.error(\"Failed to copy text:\", err);\n }\n };\n\n // Cleanup timeout on unmount\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return [hasCopied, copy] as const;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBM;AAtBN,YAAuB;AACvB,sBAAmC;AACnC,yBAAoC;AACpC,oBAAgC;AAWzB,MAAM,aAAa,MAAM;AAAA,EAC9B,SAASA,YACP,EAAE,OAAO,SAAS,UAAU,OAAO,WAAW,OAAO,GAAG,MAAM,GAC9D,KACA;AACA,UAAM,OAAO,UAAU,qBAAO;AAC9B,UAAM,CAAC,WAAW,IAAI,IAAI,QAAQ,KAAK;AACvC,WACE,6CAAC,QAAK,MAAK,UAAS,aAAa,MAAM,KAAW,GAAG,OAClD;AAAA,mBACE,YAAY,4CAAC,gCAAU,eAAW,MAAC,IAAK,4CAAC,+BAAS,eAAW,MAAC;AAAA,MACjE,4CAAC,2BAAW,UAAS;AAAA,OACvB;AAAA,EAEJ;AACF;AAaO,MAAM,iBAAiB,MAAM,WAGlC,SAASC,gBAAe,EAAE,OAAO,OAAO,GAAG,MAAM,GAAG,KAAK;AACzD,QAAM,CAAC,WAAW,IAAI,IAAI,QAAQ,KAAK;AACvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAa;AAAA,MACb;AAAA,MACA,OAAO,YAAY,WAAW;AAAA,MAC9B,cAAW;AAAA,MACV,GAAG;AAAA,MAEH,sBAAY,4CAAC,gCAAU,IAAK,4CAAC,+BAAS;AAAA;AAAA,EACzC;AAEJ,CAAC;AAED,SAAS,QAAQ,OAAe;AAC9B,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AACtD,QAAM,aAAa,MAAM,OAA2B,MAAS;AAE7D,QAAM,OAAO,YAAY;AACvB,QAAI;AACF,YAAM,UAAU,UAAU,UAAU,KAAK;AACzC,mBAAa,IAAI;AAGjB,UAAI,WAAW,SAAS;AACtB,eAAO,aAAa,WAAW,OAAO;AAAA,MACxC;AAGA,iBAAW,UAAU,OAAO,WAAW,MAAM;AAC3C,qBAAa,KAAK;AAAA,MACpB,GAAG,GAAI;AAAA,IACT,SAAS,KAAK;AACZ,cAAQ,MAAM,wBAAwB,GAAG;AAAA,IAC3C;AAAA,EACF;AAGA,QAAM,UAAU,MAAM;AACpB,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,eAAO,aAAa,WAAW,OAAO;AAAA,MACxC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,WAAW,IAAI;AACzB;","names":["CopyButton","CopyIconButton"]}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { Button, IconButton } from './elements.cjs';
|
|
3
|
+
import '@radix-ui/themes';
|
|
4
|
+
import '@radix-ui/themes/props';
|
|
5
|
+
import '../dialog-C15qCLN3.cjs';
|
|
6
|
+
import '@radix-ui/themes/components/dialog';
|
|
7
|
+
import '../alert-dialog-BlG3_awx.cjs';
|
|
8
|
+
import '@radix-ui/themes/components/alert-dialog';
|
|
9
|
+
import '../dropdown-menu-BQ5LtvdR.cjs';
|
|
10
|
+
import '@radix-ui/themes/components/dropdown-menu';
|
|
11
|
+
import '../select-KR89Qnvm.cjs';
|
|
12
|
+
import '@radix-ui/themes/components/select';
|
|
2
13
|
|
|
3
|
-
interface
|
|
14
|
+
interface CopyButtonOwnProps {
|
|
4
15
|
value: string;
|
|
5
16
|
withIcon?: boolean;
|
|
6
|
-
asChild?: boolean;
|
|
7
17
|
}
|
|
8
|
-
|
|
18
|
+
interface CopyButtonProps extends CopyButtonOwnProps, Omit<React.ComponentProps<typeof Button>, keyof CopyButtonOwnProps> {
|
|
19
|
+
}
|
|
20
|
+
declare const CopyButton: React.ForwardRefExoticComponent<Omit<CopyButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
21
|
+
interface CopyIconButtonOwnProps {
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
interface CopyIconButtonProps extends CopyIconButtonOwnProps, Omit<React.ComponentProps<typeof IconButton>, "asChild" | "children" | keyof CopyIconButtonOwnProps> {
|
|
25
|
+
}
|
|
26
|
+
declare const CopyIconButton: React.ForwardRefExoticComponent<Omit<CopyIconButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
9
27
|
|
|
10
|
-
export { CopyButton };
|
|
28
|
+
export { CopyButton, CopyIconButton };
|
|
@@ -24,6 +24,7 @@ __export(delete_domain_dialog_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(delete_domain_dialog_exports);
|
|
25
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
26
|
var import_themes = require("@radix-ui/themes");
|
|
27
|
+
var import_elements = require("./elements.js");
|
|
27
28
|
const DeleteDomainDialog = (props) => {
|
|
28
29
|
const message = (() => {
|
|
29
30
|
switch (props.domain.state) {
|
|
@@ -53,14 +54,14 @@ const DeleteDomainDialog = (props) => {
|
|
|
53
54
|
props.onDeleteDomain(props.domain.id);
|
|
54
55
|
props.onOpenChange(false);
|
|
55
56
|
};
|
|
56
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
57
|
-
props.children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
58
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
59
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
57
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Root, { open: props.open, onOpenChange: props.onOpenChange, children: [
|
|
58
|
+
props.children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Trigger, { children: props.children }),
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Content, { style: { maxWidth: "488px" }, children: [
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Title, { mb: "2", children: "Remove domain" }),
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Description, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, children: message }) }),
|
|
61
62
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { justify: "end", gap: "2", mt: "5", children: [
|
|
62
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
63
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
63
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Cancel, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: "Cancel" }) }),
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "destructive", onClick: handleDeleteDomain, children: "Remove domain" })
|
|
64
65
|
] })
|
|
65
66
|
] })
|
|
66
67
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/delete-domain-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/delete-domain-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Flex, Text } from \"@radix-ui/themes\";\nimport { OrganizationDomain } from \"../api/endpoint.js\";\nimport { AlertDialog, Button } from \"./elements.js\";\n\ninterface DeleteDomainDialogProps {\n children?: React.ReactNode;\n domain: OrganizationDomain;\n onDeleteDomain: (domainId: string) => void;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const DeleteDomainDialog = (props: DeleteDomainDialogProps) => {\n const message = (() => {\n switch (props.domain.state) {\n case \"Verified\":\n case \"LegacyVerified\":\n return (\n <>\n <Text size=\"2\">\n Users with the email domain <b>{props.domain.domain}</b> will no\n longer be considered verified. This action is immediate and cannot\n be undone.\n </Text>\n </>\n );\n case \"Failed\":\n return (\n <>\n <Text>\n Are you sure you want to remove the domain{\" \"}\n <b>{props.domain.domain}</b>? This action is immediate and cannot\n be undone.\n </Text>\n </>\n );\n default:\n return (\n <>\n <Text>\n Removing <b>{props.domain.domain}</b> will cancel the DNS record\n verification process. This action is immediate and cannot be\n undone.\n </Text>\n </>\n );\n }\n })();\n\n const handleDeleteDomain = () => {\n props.onDeleteDomain(props.domain.id);\n props.onOpenChange(false);\n };\n\n return (\n <AlertDialog.Root open={props.open} onOpenChange={props.onOpenChange}>\n {props.children && (\n <AlertDialog.Trigger>{props.children}</AlertDialog.Trigger>\n )}\n\n <AlertDialog.Content style={{ maxWidth: \"488px\" }}>\n <AlertDialog.Title mb=\"2\">Remove domain</AlertDialog.Title>\n <AlertDialog.Description>\n <Text size=\"2\" highContrast>\n {message}\n </Text>\n </AlertDialog.Description>\n <Flex justify=\"end\" gap=\"2\" mt=\"5\">\n <AlertDialog.Cancel>\n <Button variant=\"secondary\">Cancel</Button>\n </AlertDialog.Cancel>\n <Button variant=\"destructive\" onClick={handleDeleteDomain}>\n Remove domain\n </Button>\n </Flex>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBU;AAlBV,oBAA2B;AAE3B,sBAAoC;AAU7B,MAAM,qBAAqB,CAAC,UAAmC;AACpE,QAAM,WAAW,MAAM;AACrB,YAAQ,MAAM,OAAO,OAAO;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AACH,eACE,2EACE,uDAAC,sBAAK,MAAK,KAAI;AAAA;AAAA,UACe,4CAAC,OAAG,gBAAM,OAAO,QAAO;AAAA,UAAI;AAAA,WAG1D,GACF;AAAA,MAEJ,KAAK;AACH,eACE,2EACE,uDAAC,sBAAK;AAAA;AAAA,UACuC;AAAA,UAC3C,4CAAC,OAAG,gBAAM,OAAO,QAAO;AAAA,UAAI;AAAA,WAE9B,GACF;AAAA,MAEJ;AACE,eACE,2EACE,uDAAC,sBAAK;AAAA;AAAA,UACK,4CAAC,OAAG,gBAAM,OAAO,QAAO;AAAA,UAAI;AAAA,WAGvC,GACF;AAAA,IAEN;AAAA,EACF,GAAG;AAEH,QAAM,qBAAqB,MAAM;AAC/B,UAAM,eAAe,MAAM,OAAO,EAAE;AACpC,UAAM,aAAa,KAAK;AAAA,EAC1B;AAEA,SACE,6CAAC,4BAAY,MAAZ,EAAiB,MAAM,MAAM,MAAM,cAAc,MAAM,cACrD;AAAA,UAAM,YACL,4CAAC,4BAAY,SAAZ,EAAqB,gBAAM,UAAS;AAAA,IAGvC,6CAAC,4BAAY,SAAZ,EAAoB,OAAO,EAAE,UAAU,QAAQ,GAC9C;AAAA,kDAAC,4BAAY,OAAZ,EAAkB,IAAG,KAAI,2BAAa;AAAA,MACvC,4CAAC,4BAAY,aAAZ,EACC,sDAAC,sBAAK,MAAK,KAAI,cAAY,MACxB,mBACH,GACF;AAAA,MACA,6CAAC,sBAAK,SAAQ,OAAM,KAAI,KAAI,IAAG,KAC7B;AAAA,oDAAC,4BAAY,QAAZ,EACC,sDAAC,0BAAO,SAAQ,aAAY,oBAAM,GACpC;AAAA,QACA,4CAAC,0BAAO,SAAQ,eAAc,SAAS,oBAAoB,2BAE3D;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
|