- Token successfully created!
-
-
- This is your unique API key and it is non-recoverable. If you lose this key, you will
- need to create a new one.
-
-
-
-
- ) : (
-
- )}
- >
- );
-}
diff --git a/packages/web/app/src/components/v2/modals/index.ts b/packages/web/app/src/components/v2/modals/index.ts
index 5a057b31a..90509d734 100644
--- a/packages/web/app/src/components/v2/modals/index.ts
+++ b/packages/web/app/src/components/v2/modals/index.ts
@@ -1,6 +1,5 @@
export { ChangePermissionsModal } from './change-permissions';
export { ConnectSchemaModal } from './connect-schema';
-export { CreateAccessTokenModal } from './create-access-token';
export { DeleteOrganizationModal } from './delete-organization';
export { DeleteProjectModal } from './delete-project';
export { DeleteTargetModal } from './delete-target';
diff --git a/packages/web/app/src/lib/urql-cache.ts b/packages/web/app/src/lib/urql-cache.ts
index 0a41557f8..04f40f81c 100644
--- a/packages/web/app/src/lib/urql-cache.ts
+++ b/packages/web/app/src/lib/urql-cache.ts
@@ -10,7 +10,7 @@ import type { DeleteChannelsButton_DeleteChannelsMutation } from '@/components/p
import type { CreateOperationMutationType } from '@/components/target/laboratory/create-operation-modal';
import type { DeleteCollectionMutationType } from '@/components/target/laboratory/delete-collection-modal';
import type { DeleteOperationMutationType } from '@/components/target/laboratory/delete-operation-modal';
-import type { CreateAccessToken_CreateTokenMutation } from '@/components/v2/modals/create-access-token';
+import type { CreateAccessToken_CreateTokenMutation } from '@/components/target/settings/registry-access-token';
import type { DeleteOrganizationDocument } from '@/components/v2/modals/delete-organization';
import { type DeleteProjectMutation } from '@/components/v2/modals/delete-project';
import { type DeleteTargetMutation } from '@/components/v2/modals/delete-target';
diff --git a/packages/web/app/src/pages/target-settings.tsx b/packages/web/app/src/pages/target-settings.tsx
index d0a5cde89..7fe515e38 100644
--- a/packages/web/app/src/pages/target-settings.tsx
+++ b/packages/web/app/src/pages/target-settings.tsx
@@ -7,6 +7,7 @@ import * as Yup from 'yup';
import { Page, TargetLayout } from '@/components/layouts/target';
import { SchemaEditor } from '@/components/schema-editor';
import { CDNAccessTokens } from '@/components/target/settings/cdn-access-tokens';
+import { CreateAccessTokenModal } from '@/components/target/settings/registry-access-token';
import { SchemaContracts } from '@/components/target/settings/schema-contracts';
import { Button } from '@/components/ui/button';
import { CardDescription } from '@/components/ui/card';
@@ -26,7 +27,7 @@ import { TimeAgo } from '@/components/ui/time-ago';
import { useToast } from '@/components/ui/use-toast';
import { Combobox } from '@/components/v2/combobox';
import { Input } from '@/components/v2/input';
-import { CreateAccessTokenModal, DeleteTargetModal } from '@/components/v2/modals';
+import { DeleteTargetModal } from '@/components/v2/modals';
import { Switch } from '@/components/v2/switch';
import { Table, TBody, Td, Tr } from '@/components/v2/table';
import { Tag } from '@/components/v2/tag';
diff --git a/packages/web/app/src/stories/registry-access-token.stories.tsx b/packages/web/app/src/stories/registry-access-token.stories.tsx
new file mode 100644
index 000000000..f4c8c3ba3
--- /dev/null
+++ b/packages/web/app/src/stories/registry-access-token.stories.tsx
@@ -0,0 +1,119 @@
+import { useState } from 'react';
+import { useForm } from 'react-hook-form';
+import { z } from 'zod';
+import { usePermissionsManager } from '@/components/organization/Permissions';
+import {
+ CreatedTokenContent,
+ GenerateTokenContent,
+} from '@/components/target/settings/registry-access-token';
+import { Button } from '@/components/ui/button';
+import { Dialog, DialogTrigger } from '@/components/ui/dialog';
+import { TargetAccessScope } from '@/gql/graphql';
+import { zodResolver } from '@hookform/resolvers/zod';
+import { Meta, StoryObj } from '@storybook/react';
+
+const meta: Meta = {
+ title: 'Modals/Create Access Token',
+ component: CreatedTokenContent,
+};
+
+export default meta;
+type Story = StoryObj;
+
+const formSchema = z.object({
+ tokenDescription: z
+ .string()
+ .min(2, { message: 'Token description must be at least 2 characters long' }),
+});
+
+export const GenerateToken: Story = {
+ render: () => {
+ const [openModal, setOpenModal] = useState(false);
+ const toggleModalOpen = () => setOpenModal(!openModal);
+
+ const form = useForm>({
+ mode: 'onChange',
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ tokenDescription: '',
+ },
+ });
+
+ const manager = {
+ canAccessOrganization: () => true,
+ canAccessProject: () => true,
+ canAccessTarget: () => true,
+ noneSelected: false,
+ organizationScopes: [],
+ projectScopes: [],
+ targetScopes: [],
+ setOrganizationScopes: () => {},
+ setProjectScopes: () => {},
+ setTargetScopes: () => {},
+ submit: () => {},
+ } as unknown as ReturnType;
+
+ const [selectedScope, setSelectedScope] = useState<'no-access' | TargetAccessScope>(
+ 'no-access',
+ );
+ const noPermissionsSelected = selectedScope === 'no-access';
+
+ return (
+
+ );
+ },
+};
+
+export const CreatedToken: Story = {
+ render: () => {
+ const [openModal, setOpenModal] = useState(false);
+ const toggleModalOpen = () => setOpenModal(!openModal);
+
+ return (
+
+ );
+ },
+};