{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "transforms-classic",
  "dependencies": [
    "@platejs/callout",
    "@platejs/code-block",
    "@platejs/date",
    "@platejs/layout",
    "@platejs/link",
    "@platejs/list-classic",
    "@platejs/math",
    "@platejs/media",
    "@platejs/table"
  ],
  "files": [
    {
      "path": "src/registry/components/editor/transforms-classic.ts",
      "content": "'use client';\n\nimport type { PlateEditor } from 'platejs/react';\n\nimport { insertCallout } from '@platejs/callout';\nimport { insertCodeBlock, toggleCodeBlock } from '@platejs/code-block';\nimport { insertDate } from '@platejs/date';\nimport { insertFootnote } from '@platejs/footnote';\nimport { insertColumnGroup, toggleColumnGroup } from '@platejs/layout';\nimport { triggerFloatingLink } from '@platejs/link/react';\nimport { toggleList } from '@platejs/list-classic';\nimport { insertEquation, insertInlineEquation } from '@platejs/math';\nimport {\n  insertAudioPlaceholder,\n  insertFilePlaceholder,\n  insertMedia,\n  insertVideoPlaceholder,\n} from '@platejs/media';\nimport { SuggestionPlugin } from '@platejs/suggestion/react';\nimport { TablePlugin } from '@platejs/table/react';\nimport { insertToc } from '@platejs/toc';\nimport {\n  type NodeEntry,\n  type Path,\n  type TElement,\n  KEYS,\n  PathApi,\n} from 'platejs';\n\nconst ACTION_THREE_COLUMNS = 'action_three_columns';\nconst ACTION_FOOTNOTE = 'action_footnote';\n\nconst insertBlockMap: Record<\n  string,\n  (editor: PlateEditor, type: string) => void\n> = {\n  [ACTION_THREE_COLUMNS]: (editor) =>\n    insertColumnGroup(editor, { columns: 3, select: true }),\n  [KEYS.audio]: (editor) => insertAudioPlaceholder(editor, { select: true }),\n  [KEYS.callout]: (editor) => insertCallout(editor, { select: true }),\n  [KEYS.codeBlock]: (editor) => insertCodeBlock(editor, { select: true }),\n  [KEYS.equation]: (editor) => insertEquation(editor, { select: true }),\n  [KEYS.file]: (editor) => insertFilePlaceholder(editor, { select: true }),\n  [KEYS.img]: (editor) =>\n    insertMedia(editor, {\n      select: true,\n      type: KEYS.img,\n    }),\n  [KEYS.mediaEmbed]: (editor) =>\n    insertMedia(editor, {\n      select: true,\n      type: KEYS.mediaEmbed,\n    }),\n  [KEYS.table]: (editor) =>\n    editor.getTransforms(TablePlugin).insert.table({}, { select: true }),\n  [KEYS.toc]: (editor) => insertToc(editor, { select: true }),\n  [KEYS.video]: (editor) => insertVideoPlaceholder(editor, { select: true }),\n};\n\nconst insertInlineMap: Record<\n  string,\n  (editor: PlateEditor, type: string) => void\n> = {\n  [KEYS.date]: (editor) => insertDate(editor, { select: true }),\n  [ACTION_FOOTNOTE]: (editor) => insertFootnote(editor, { select: true }),\n  [KEYS.inlineEquation]: (editor) =>\n    insertInlineEquation(editor, '', { select: true }),\n  [KEYS.link]: (editor) => triggerFloatingLink(editor, { focused: true }),\n};\n\nexport const insertBlock = (editor: PlateEditor, type: string) => {\n  editor.tf.withoutNormalizing(() => {\n    const block = editor.api.block();\n\n    if (!block) return;\n    if (type in insertBlockMap) {\n      insertBlockMap[type](editor, type);\n    } else {\n      editor.tf.insertNodes(editor.api.create.block({ type }), {\n        at: PathApi.next(block[1]),\n        select: true,\n      });\n    }\n    if (getBlockType(block[0]) !== type) {\n      editor.getApi(SuggestionPlugin).suggestion.withoutSuggestions(() => {\n        editor.tf.removeNodes({ previousEmptyBlock: true });\n      });\n    }\n  });\n};\n\nexport const insertInlineElement = (editor: PlateEditor, type: string) => {\n  if (insertInlineMap[type]) {\n    insertInlineMap[type](editor, type);\n  }\n};\n\nconst setBlockMap: Record<string, (editor: PlateEditor, type: string) => void> =\n  {\n    [ACTION_THREE_COLUMNS]: (editor) =>\n      toggleColumnGroup(editor, { columns: 3 }),\n    [KEYS.codeBlock]: (editor) => toggleCodeBlock(editor),\n    [KEYS.olClassic]: (editor) =>\n      toggleList(editor, { type: editor.getType(KEYS.olClassic) }),\n    [KEYS.taskList]: (editor) =>\n      toggleList(editor, { type: editor.getType(KEYS.taskList) }),\n    [KEYS.ulClassic]: (editor) =>\n      toggleList(editor, { type: editor.getType(KEYS.ulClassic) }),\n  };\n\nexport const setBlockType = (\n  editor: PlateEditor,\n  type: string,\n  { at }: { at?: Path } = {}\n) => {\n  editor.tf.withoutNormalizing(() => {\n    const setEntry = (entry: NodeEntry<TElement>) => {\n      const [node, path] = entry;\n\n      if (type in setBlockMap) {\n        return setBlockMap[type](editor, type);\n      }\n      if (node.type !== type) {\n        editor.tf.setNodes({ type }, { at: path });\n      }\n    };\n\n    if (at) {\n      const entry = editor.api.node<TElement>(at);\n\n      if (entry) {\n        setEntry(entry);\n\n        return;\n      }\n    }\n\n    const entries = editor.api.blocks({ mode: 'lowest' });\n\n    entries.forEach((entry) => {\n      setEntry(entry);\n    });\n  });\n};\n\nexport const getBlockType = (block: TElement) => block.type;\n",
      "type": "registry:component",
      "target": "@components/editor/transforms-classic.ts"
    }
  ],
  "type": "registry:component"
}