{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "discussion-kit",
  "dependencies": [],
  "registryDependencies": [
    "https://platejs.org/r/block-discussion.json"
  ],
  "files": [
    {
      "path": "src/registry/components/editor/plugins/discussion-kit.tsx",
      "content": "'use client';\n\nimport type { TComment } from '@/registry/ui/comment';\n\nimport { createPlatePlugin } from 'platejs/react';\n\nimport { BlockDiscussion } from '@/registry/ui/block-discussion';\n\nexport type TDiscussion = {\n  id: string;\n  comments: TComment[];\n  createdAt: Date;\n  isResolved: boolean;\n  userId: string;\n  documentContent?: string;\n};\n\nconst BLOCK_SUGGESTION_SELECTOR = '[data-block-suggestion=\"true\"]';\n\nconst getTargetElement = (target: EventTarget | null) => {\n  if (target instanceof HTMLElement) return target;\n  if (target instanceof Node) return target.parentElement;\n\n  return null;\n};\n\nexport const getDiscussionClickTarget = ({\n  selector,\n  target,\n}: {\n  selector: string;\n  target: EventTarget | null;\n}) => {\n  const element = getTargetElement(target);\n\n  if (!element) return null;\n\n  return element.closest(selector) as HTMLElement | null;\n};\n\nexport const getDiscussionBlockClickTarget = ({\n  selector = BLOCK_SUGGESTION_SELECTOR,\n  target,\n}: {\n  selector?: string;\n  target: EventTarget | null;\n}) =>\n  getDiscussionClickTarget({\n    selector,\n    target,\n  });\n\nconst discussionsData: TDiscussion[] = [\n  {\n    id: 'discussion1',\n    comments: [\n      {\n        id: 'comment1',\n        contentRich: [\n          {\n            children: [\n              {\n                text: 'Comments are a great way to provide feedback and discuss changes.',\n              },\n            ],\n            type: 'p',\n          },\n        ],\n        createdAt: new Date(Date.now() - 600_000),\n        discussionId: 'discussion1',\n        isEdited: false,\n        userId: 'charlie',\n      },\n      {\n        id: 'comment2',\n        contentRich: [\n          {\n            children: [\n              {\n                text: 'Agreed! The link to the docs makes it easy to learn more.',\n              },\n            ],\n            type: 'p',\n          },\n        ],\n        createdAt: new Date(Date.now() - 500_000),\n        discussionId: 'discussion1',\n        isEdited: false,\n        userId: 'bob',\n      },\n    ],\n    createdAt: new Date(),\n    documentContent: 'comments',\n    isResolved: false,\n    userId: 'charlie',\n  },\n  {\n    id: 'discussion2',\n    comments: [\n      {\n        id: 'comment1',\n        contentRich: [\n          {\n            children: [\n              {\n                text: 'Nice demonstration of overlapping annotations with both comments and suggestions!',\n              },\n            ],\n            type: 'p',\n          },\n        ],\n        createdAt: new Date(Date.now() - 300_000),\n        discussionId: 'discussion2',\n        isEdited: false,\n        userId: 'bob',\n      },\n      {\n        id: 'comment2',\n        contentRich: [\n          {\n            children: [\n              {\n                text: 'This helps users understand how powerful the editor can be.',\n              },\n            ],\n            type: 'p',\n          },\n        ],\n        createdAt: new Date(Date.now() - 200_000),\n        discussionId: 'discussion2',\n        isEdited: false,\n        userId: 'charlie',\n      },\n    ],\n    createdAt: new Date(),\n    documentContent: 'overlapping',\n    isResolved: false,\n    userId: 'bob',\n  },\n];\n\nconst avatarUrl = (seed: string) =>\n  `https://api.dicebear.com/9.x/glass/svg?seed=${seed}`;\n\nconst usersData: Record<\n  string,\n  { id: string; avatarUrl: string; name: string; hue?: number }\n> = {\n  alice: {\n    id: 'alice',\n    avatarUrl: avatarUrl('alice6'),\n    name: 'Alice',\n  },\n  bob: {\n    id: 'bob',\n    avatarUrl: avatarUrl('bob4'),\n    name: 'Bob',\n  },\n  charlie: {\n    id: 'charlie',\n    avatarUrl: avatarUrl('charlie2'),\n    name: 'Charlie',\n  },\n};\n\n// This plugin is purely UI. It's only used to store the discussions and users data\nexport const discussionPlugin = createPlatePlugin({\n  key: 'discussion',\n  options: {\n    currentUserId: 'alice',\n    discussions: discussionsData,\n    users: usersData,\n  },\n})\n  .configure({\n    render: { aboveNodes: BlockDiscussion },\n  })\n  .extendSelectors(({ getOption }) => ({\n    currentUser: () => getOption('users')[getOption('currentUserId')],\n    user: (id: string) => getOption('users')[id],\n  }));\n\nexport const DiscussionKit = [discussionPlugin];\n",
      "type": "registry:component",
      "target": "@components/editor/plugins/discussion-kit.tsx"
    }
  ],
  "type": "registry:component"
}