{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "suggestion-kit",
  "dependencies": [
    "@platejs/suggestion"
  ],
  "registryDependencies": [
    "https://platejs.org/r/suggestion-base-kit.json",
    "https://platejs.org/r/suggestion-node.json",
    "https://platejs.org/r/suggestion-toolbar-button.json",
    "https://platejs.org/r/discussion-kit.json"
  ],
  "files": [
    {
      "path": "src/registry/components/editor/plugins/suggestion-kit.tsx",
      "content": "'use client';\n\nimport type {\n  ExtendConfig,\n  TElement,\n  TInlineSuggestionData,\n  TSuggestionData,\n  TSuggestionText,\n} from 'platejs';\n\nimport { KEYS, TextApi, TrailingBlockPlugin } from 'platejs';\nimport {\n  type BaseSuggestionConfig,\n  BaseSuggestionPlugin,\n} from '@platejs/suggestion';\nimport { toTPlatePlugin } from 'platejs/react';\n\nimport {\n  SuggestionLeaf,\n  SuggestionLineBreak,\n  VoidRemoveSuggestionOverlay,\n} from '@/registry/ui/suggestion-node';\nimport {\n  discussionPlugin,\n  getDiscussionBlockClickTarget,\n  getDiscussionClickTarget,\n} from './discussion-kit';\n\nexport type SuggestionConfig = ExtendConfig<\n  BaseSuggestionConfig,\n  {\n    activeId: string | null;\n    hoverId: string | null;\n  }\n>;\n\nconst INLINE_SUGGESTION_TARGET_PLUGINS = [\n  KEYS.date,\n  KEYS.inlineEquation,\n  KEYS.link,\n  KEYS.mention,\n];\n\nfunction getInlineSuggestionData(editor: any, element: TElement) {\n  const suggestionApi = editor.getApi(BaseSuggestionPlugin).suggestion;\n  const data = suggestionApi.suggestionData(element) as\n    | TSuggestionData\n    | TInlineSuggestionData\n    | undefined;\n\n  if (data) return data;\n  if (typeof suggestionApi.dataList !== 'function') return;\n\n  for (const child of element.children) {\n    if (!TextApi.isText(child)) continue;\n\n    const childData = suggestionApi.dataList(child as TSuggestionText).at(-1);\n\n    if (childData) return childData;\n  }\n}\n\nexport const suggestionPlugin = toTPlatePlugin<SuggestionConfig>(\n  BaseSuggestionPlugin,\n  ({ editor }) => ({\n    options: {\n      activeId: null,\n      currentUserId: editor.getOption(discussionPlugin, 'currentUserId'),\n      hoverId: null,\n    },\n  })\n).configure({\n  handlers: {\n    // unset active suggestion when clicking outside of suggestion\n    onClick: ({ api, event, setOption, type }) => {\n      const markTarget = getDiscussionClickTarget({\n        selector: `.slate-${type}`,\n        target: event.target,\n      });\n      const blockTarget = markTarget\n        ? null\n        : getDiscussionBlockClickTarget({\n            target: event.target,\n          });\n\n      if (!markTarget && !blockTarget) {\n        setOption('activeId', null);\n        return;\n      }\n\n      const suggestionEntry = api.suggestion?.node({\n        isText: !blockTarget,\n      });\n\n      setOption(\n        'activeId',\n        suggestionEntry\n          ? (api.suggestion?.nodeId(suggestionEntry[0]) ?? null)\n          : null\n      );\n    },\n  },\n  inject: {\n    isElement: true,\n    nodeProps: {\n      nodeKey: '',\n      styleKey: 'cssText',\n      transformProps: ({ editor, element, props }) => {\n        if (!element) return props;\n\n        const suggestionData = getInlineSuggestionData(editor, element);\n\n        if (!suggestionData) return props;\n\n        return {\n          ...props,\n          'data-inline-suggestion': suggestionData.type,\n        };\n      },\n      transformStyle: () => ({}) as CSSStyleDeclaration,\n    },\n    targetPlugins: INLINE_SUGGESTION_TARGET_PLUGINS,\n  },\n  render: {\n    belowNodes: SuggestionLineBreak as any,\n    belowRootNodes: VoidRemoveSuggestionOverlay as any,\n    node: SuggestionLeaf,\n  },\n});\n\nconst trailingBlockPlugin = TrailingBlockPlugin.configure({\n  options: {\n    insert: (editor, { insert }) => {\n      editor.getApi(suggestionPlugin).suggestion.withoutSuggestions(insert);\n    },\n  },\n});\n\nexport const SuggestionKit = [suggestionPlugin, trailingBlockPlugin];\n",
      "type": "registry:component",
      "target": "@components/editor/plugins/suggestion-kit.tsx"
    }
  ],
  "type": "registry:component"
}