{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "slate-to-html",
  "dependencies": [
    "next-themes"
  ],
  "registryDependencies": [
    "https://platejs.org/r/plate-ui.json",
    "https://platejs.org/r/editor-base-kit.json",
    "button"
  ],
  "files": [
    {
      "path": "src/registry/blocks/slate-to-html/page.tsx",
      "content": "import * as React from 'react';\n\nimport { cva } from 'class-variance-authority';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { type Value, normalizeStaticValue } from 'platejs';\nimport { createStaticEditor, serializeHtml } from 'platejs/static';\n\nimport { BaseEditorKit } from '@/registry/components/editor/editor-base-kit';\nimport {\n  EditorClient,\n  EditorViewClient,\n  ExportHtmlButton,\n  HtmlIframe,\n} from '@/registry/components/editor/slate-to-html';\nimport { alignValue } from '@/registry/examples/values/align-value';\nimport { basicBlocksValue } from '@/registry/examples/values/basic-blocks-value';\nimport { basicMarksValue } from '@/registry/examples/values/basic-marks-value';\nimport { columnValue } from '@/registry/examples/values/column-value';\nimport { dateValue } from '@/registry/examples/values/date-value';\nimport { discussionValue } from '@/registry/examples/values/discussion-value';\nimport { equationValue } from '@/registry/examples/values/equation-value';\nimport { fontValue } from '@/registry/examples/values/font-value';\nimport { indentValue } from '@/registry/examples/values/indent-value';\nimport { lineHeightValue } from '@/registry/examples/values/line-height-value';\nimport { linkValue } from '@/registry/examples/values/link-value';\nimport { listValue } from '@/registry/examples/values/list-value';\nimport { mediaValue } from '@/registry/examples/values/media-value';\nimport { mentionValue } from '@/registry/examples/values/mention-value';\nimport { tableValue } from '@/registry/examples/values/table-value';\nimport { tocPlaygroundValue } from '@/registry/examples/values/toc-value';\nimport { createHtmlDocument } from '@/registry/lib/create-html-document';\nimport { EditorStatic } from '@/registry/ui/editor-static';\n\nconst getCachedTailwindCss = React.cache(async () => {\n  const cssPath = path.join(process.cwd(), 'public', 'tailwind.css');\n\n  return await fs.readFile(cssPath, 'utf8');\n});\n\nexport default async function SlateToHtmlBlock() {\n  const createValue = (): Value =>\n    normalizeStaticValue([\n      ...basicBlocksValue,\n      ...basicMarksValue,\n      ...tocPlaygroundValue,\n      ...linkValue,\n      ...tableValue,\n      ...equationValue,\n      ...columnValue,\n      ...mentionValue,\n      ...dateValue,\n      ...fontValue,\n      ...discussionValue,\n      ...alignValue,\n      ...lineHeightValue,\n      ...indentValue,\n      ...listValue,\n      ...mediaValue,\n    ]);\n\n  const editor = createStaticEditor({\n    plugins: BaseEditorKit,\n    value: createValue(),\n  });\n\n  const tailwindCss = await getCachedTailwindCss();\n  const katexCDN = `<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex@0.16.18/dist/katex.css\" integrity=\"sha384-9PvLvaiSKCPkFKB1ZsEoTjgnJn+O3KvEwtsz37/XrkYft3DTk2gHdYvd9oWgW3tV\" crossorigin=\"anonymous\">`;\n\n  // const cookieStore = await cookies();\n  // const theme = cookieStore.get('theme')?.value;\n  const theme = 'light';\n\n  // Get the editor content HTML using EditorStatic\n  const editorHtml = await serializeHtml(editor, {\n    editorComponent: EditorStatic,\n    props: { style: { padding: '0 calc(50% - 350px)', paddingBottom: '' } },\n  });\n\n  // Create the full HTML document\n  const html = createHtmlDocument({\n    editorHtml,\n    katexCDN,\n    tailwindCss,\n    theme,\n  });\n\n  return (\n    <div className=\"grid grid-cols-3 px-4\">\n      <div className=\"p-2\">\n        <h3 className={headingVariants()}>Editor</h3>\n        <EditorClient value={createValue()} />\n      </div>\n\n      <div className=\"p-2\">\n        <h3 className={headingVariants()}>EditorView</h3>\n        <EditorViewClient value={createValue()} />\n      </div>\n\n      <div className=\"relative p-2\">\n        <h3 className={headingVariants()}>HTML Iframe</h3>\n        <ExportHtmlButton\n          className=\"absolute top-10 right-0\"\n          html={html}\n          serverTheme={theme}\n        />\n        <HtmlIframe\n          className=\"h-[7500px] w-full\"\n          html={html}\n          serverTheme={theme}\n        />\n      </div>\n    </div>\n  );\n}\n\nconst headingVariants = cva(\n  'group mt-8 scroll-m-20 font-heading font-semibold text-xl tracking-tight'\n);\n",
      "type": "registry:page",
      "target": "app/html/page.tsx"
    },
    {
      "path": "src/registry/components/editor/slate-to-html.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\n\nimport { useTheme } from 'next-themes';\nimport { Plate, usePlateEditor, usePlateViewEditor } from 'platejs/react';\n\nimport { Button } from '@/components/ui/button';\nimport { EditorKit } from '@/registry/components/editor/editor-kit';\nimport { Editor, EditorView } from '@/registry/ui/editor';\n\nimport { BaseEditorKit } from './editor-base-kit';\n\nfunction useThemedHtml(html: string, serverTheme?: string) {\n  const { resolvedTheme } = useTheme();\n\n  return React.useMemo(() => {\n    if (typeof window === 'undefined') return html;\n    // Only parse and update if theme differs from server\n    if (serverTheme === resolvedTheme) return html;\n\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(html, 'text/html');\n    const htmlElement = doc.documentElement;\n\n    if (resolvedTheme === 'dark') {\n      htmlElement.classList.add('dark');\n    } else {\n      htmlElement.classList.remove('dark');\n    }\n\n    return doc.documentElement.outerHTML;\n  }, [html, resolvedTheme, serverTheme]);\n}\n\nexport function ExportHtmlButton({\n  className,\n  html,\n  serverTheme,\n}: {\n  html: string;\n  className?: string;\n  serverTheme?: string;\n}) {\n  const themedHtml = useThemedHtml(html, serverTheme);\n  const [url, setUrl] = React.useState<string>();\n\n  React.useEffect(() => {\n    const blob = new Blob([themedHtml], { type: 'text/html' });\n    const blobUrl = URL.createObjectURL(blob);\n    // eslint-disable-next-line react-hooks/set-state-in-effect -- Track browser object URL lifecycle for the generated export blob.\n    setUrl(blobUrl);\n\n    return () => {\n      URL.revokeObjectURL(blobUrl);\n    };\n  }, [themedHtml]);\n\n  return (\n    <a\n      className={className}\n      download=\"export-plate.html\"\n      href={url}\n      rel=\"noopener noreferrer\"\n      role=\"button\"\n    >\n      <Button>Export HTML</Button>\n    </a>\n  );\n}\n\nexport function HtmlIframe({\n  html,\n  serverTheme,\n  ...props\n}: {\n  html: string;\n  serverTheme?: string;\n} & React.ComponentProps<'iframe'>) {\n  const content = useThemedHtml(html, serverTheme);\n\n  return <iframe title=\"Preview\" srcDoc={content} {...props} />;\n}\n\nexport function EditorClient({ value }: { value: any }) {\n  const editor = usePlateEditor({\n    override: {\n      enabled: {\n        'fixed-toolbar': false,\n        'floating-toolbar': false,\n      },\n    },\n    plugins: EditorKit,\n    value,\n  });\n\n  return (\n    <Plate readOnly editor={editor}>\n      <Editor variant=\"none\" />\n    </Plate>\n  );\n}\n\nexport const EditorViewClient = ({ value }: { value: any }) => {\n  const editor = usePlateViewEditor({\n    plugins: BaseEditorKit,\n    value,\n  });\n\n  return <EditorView variant=\"none\" editor={editor} />;\n};\n",
      "type": "registry:component",
      "target": "@components/editor/slate-to-html.tsx"
    },
    {
      "path": "src/registry/lib/create-html-document.ts",
      "content": "export function createHtmlDocument({\n  editorHtml,\n  katexCDN,\n  tailwindCss,\n  theme,\n}: {\n  editorHtml: string;\n  tailwindCss: string;\n  katexCDN?: string;\n  theme?: string;\n}): string {\n  return `<!DOCTYPE html>\n<html lang=\"en\"${theme === 'dark' ? ' class=\"dark\"' : ''}>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta name=\"color-scheme\" content=\"light dark\" />\n    <style>${tailwindCss}</style>\n    ${katexCDN}\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link\n      href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400..700&family=JetBrains+Mono:wght@400..700&display=swap\"\n      rel=\"stylesheet\"\n    />\n    <style>\n      :root {\n        --font-sans: 'Inter', 'Inter Fallback';\n        --font-mono: 'JetBrains Mono', 'JetBrains Mono Fallback';\n      }\n    </style>\n  </head>\n  <body>\n    ${editorHtml}\n  </body>\n</html>`;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "src/registry/examples/values/align-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const alignValue: any = (\n  <fragment>\n    <hh2 align=\"right\">Alignment</hh2>\n    <hp align=\"right\">\n      Align text within blocks to create visually appealing and balanced\n      layouts.\n    </hp>\n    <hh3 align=\"center\">Center</hh3>\n    <hp align=\"justify\">\n      Create clean and balanced layouts by justifying block text, providing a\n      professional and polished look.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/basic-blocks-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\nimport { KEYS } from 'platejs';\n\njsx;\n\nexport const basicBlocksValue: any = (\n  <fragment>\n    <hh1>Heading 1</hh1>\n    <hp>\n      This is a top-level heading, typically used for main titles and major\n      section headers.\n    </hp>\n    <hh2>Heading 2</hh2>\n    <hp>\n      Secondary headings help organize content into clear sections and\n      subsections.\n    </hp>\n    <hh3>Heading 3</hh3>\n    <hp>\n      Third-level headings provide further content structure and hierarchy.\n    </hp>\n    <hblockquote>\n      <hp>\n        Blockquotes can group multiple paragraphs, quoted lists, and replies in\n        one container.\n      </hp>\n      <hp>\n        Use nested blockquotes when you need to keep the quote hierarchy\n        explicit.\n      </hp>\n      <hblockquote>\n        <hp>Nested blockquotes keep reply chains readable.</hp>\n      </hblockquote>\n    </hblockquote>\n    <hp>\n      Use headings to create a clear document structure that helps readers\n      navigate your content effectively. Combine them with blockquotes to\n      emphasize important information.\n    </hp>\n    <element type={KEYS.hr}>\n      <htext />\n    </element>\n    <hp>\n      Horizontal rules help visually separate different sections of your\n      content, creating clear breaks between topics or ideas.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/basic-marks-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const basicMarksValue: any = (\n  <fragment>\n    <hh2>Text Formatting</hh2>\n    <hp>\n      Add style and emphasis to your text using various formatting options.\n    </hp>\n    <hp>\n      Make text <htext bold>bold</htext>, <htext italic>italic</htext>,{' '}\n      <htext underline>underlined</htext>, or apply a{' '}\n      <htext bold italic underline>\n        combination\n      </htext>{' '}\n      of these styles for emphasis.\n    </hp>\n    <hp>\n      Add <htext strikethrough>strikethrough</htext> to indicate deleted\n      content, use <htext code>inline code</htext> for technical terms, or{' '}\n      <htext highlight>highlight</htext> important information.\n    </hp>\n    <hp>\n      Format mathematical expressions with <htext subscript>subscript</htext>{' '}\n      and <htext superscript>superscript</htext> text.\n    </hp>\n    <hp>\n      Show keyboard shortcuts like <htext kbd>⌘ + B</htext> for bold or{' '}\n      <htext kbd>⌘ + I</htext> for italic formatting.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/column-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const columnValue: any = (\n  <fragment>\n    <hh2>Column</hh2>\n    <hp>Create column and the border will hidden when viewing</hp>\n    <hcolumngroup layout={[50, 50]}>\n      <hcolumn width=\"50%\">\n        <hp>left 1</hp>\n        <hp>left 2</hp>\n      </hcolumn>\n      <hcolumn width=\"50%\">\n        <hp>right 1</hp>\n        <hp>right 2</hp>\n      </hcolumn>\n    </hcolumngroup>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/discussion-value.tsx",
      "content": "import type { Value } from 'platejs';\n\nexport const discussionValue: Value = [\n  {\n    children: [{ text: 'Discussions' }],\n    type: 'h2',\n  },\n  {\n    children: [\n      { text: 'Review and refine content seamlessly. Use ' },\n      {\n        children: [\n          {\n            suggestion: true,\n            suggestion_playground1: {\n              id: 'playground1',\n              createdAt: Date.now(),\n              type: 'insert',\n              userId: 'alice',\n            },\n            text: 'suggestions',\n          },\n        ],\n        type: 'a',\n        url: '/docs/suggestion',\n      },\n      {\n        suggestion: true,\n        suggestion_playground1: {\n          id: 'playground1',\n          createdAt: Date.now(),\n          type: 'insert',\n          userId: 'alice',\n        },\n        text: ' ',\n      },\n      {\n        suggestion: true,\n        suggestion_playground1: {\n          id: 'playground1',\n          createdAt: Date.now(),\n          type: 'insert',\n          userId: 'alice',\n        },\n        text: 'like this added text',\n      },\n      { text: ' or to ' },\n      {\n        suggestion: true,\n        suggestion_playground2: {\n          id: 'playground2',\n          createdAt: Date.now(),\n          type: 'remove',\n          userId: 'bob',\n        },\n        text: 'mark text for removal',\n      },\n      { text: '. Discuss changes using ' },\n      {\n        children: [\n          { comment: true, comment_discussion1: true, text: 'comments' },\n        ],\n        type: 'a',\n        url: '/docs/comment',\n      },\n      {\n        comment: true,\n        comment_discussion1: true,\n        text: ' on many text segments',\n      },\n      { text: '. You can even have ' },\n      {\n        comment: true,\n        comment_discussion2: true,\n        suggestion: true,\n        suggestion_playground3: {\n          id: 'playground3',\n          createdAt: Date.now(),\n          type: 'insert',\n          userId: 'charlie',\n        },\n        text: 'overlapping',\n      },\n      { text: ' annotations!' },\n    ],\n    type: 'p',\n  },\n];\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/date-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nconst today = new Date().toISOString().split('T')[0];\n\nexport const dateValue: any = (\n  <fragment>\n    <hh2>Date</hh2>\n    <hp>\n      Insert and display dates within your text using inline date elements.\n      These dates can be easily selected and modified using a calendar\n      interface.\n    </hp>\n    <hp>\n      Try selecting{' '}\n      <hdate date=\"2024-01-01\">\n        <htext />\n      </hdate>{' '}\n      or{' '}\n      <hdate date={today}>\n        <htext />\n      </hdate>\n      .\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/equation-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const equationValue: any = (\n  <fragment>\n    <hh2>\n      <htext>Equation</htext>\n    </hh2>\n    <hp indent={1} listStyleType=\"decimal\">\n      <htext>\n        Equations allow you to express complex mathematical concepts in both\n        inline and block formats.\n      </htext>\n    </hp>\n    <hp indent={1} listStart={2} listStyleType=\"decimal\">\n      <htext>Key features:</htext>\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      <htext>LaTeX syntax support</htext>\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      <htext>Inline and block equation formats</htext>\n    </hp>\n    <hp indent={1} listStart={3} listStyleType=\"decimal\">\n      <htext>Inline equation example: </htext>\n      <hinlineequation texExpression=\"E=mc^2\">\n        <htext />\n      </hinlineequation>\n      <htext> (Einstein's famous equation)</htext>\n    </hp>\n    <hp indent={1} listStart={4} listStyleType=\"decimal\">\n      <htext>Block equation examples:</htext>\n    </hp>\n    <hequation texExpression=\"\\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}\">\n      <htext />\n    </hequation>\n    <hp>\n      <htext>The quadratic formula for solving </htext>\n      <hinlineequation texExpression=\"ax^2 + bx + c = 0\">\n        <htext />\n      </hinlineequation>\n      <htext>.</htext>\n    </hp>\n    <hequation texExpression=\"\\int_{a}^{b} f(x) \\, dx = F(b) - F(a)\">\n      <htext />\n    </hequation>\n    <hp>\n      <htext>The fundamental theorem of calculus.</htext>\n    </hp>\n    <hp indent={1} listStart={5} listStyleType=\"decimal\">\n      <htext>Try these actions:</htext>\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      <htext>\n        Click on any equation to edit it. Press Escape to close the menu without\n        editing it.\n      </htext>\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      <htext>\n        You can navigate through the equation by using the arrow keys\n      </htext>\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      <htext>Use the slash command (/equation) to insert a new equation</htext>\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      <htext>\n        Use the slash command (/inline equation) for inline equations\n      </htext>\n    </hp>\n    <hp>\n      <htext>\n        Advanced usage: Combine equations with other elements like tables or\n        code blocks for comprehensive scientific documentation. For example:\n      </htext>\n    </hp>\n    <hp>\n      <htext>The Schrödinger equation, </htext>\n      <hinlineequation texExpression=\"i\\hbar\\frac{\\partial}{\\partial t}\\Psi = \\hat{H}\\Psi\">\n        <htext />\n      </hinlineequation>\n      <htext>, is fundamental in quantum mechanics.</htext>\n    </hp>\n    <hp>\n      <htext>\n        Experiment with different equation types and formatting to create rich,\n        mathematical content in your documents.\n      </htext>\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/font-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const fontValue: any = (\n  <fragment>\n    <hh2>Colors</hh2>\n    <hp>\n      Add{' '}\n      <htext color=\"white\" backgroundColor=\"#df4538\">\n        m\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#e2533a\">\n        u\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#e6603d\">\n        l\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#e96f40\">\n        t\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#ec7d43\">\n        i\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#ef8a45\">\n        p\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#f29948\">\n        l\n      </htext>\n      <htext color=\"white\" backgroundColor=\"#f5a74b\">\n        e\n      </htext>{' '}\n      <htext color=\"rgb(252, 109, 38)\">font</htext> and{' '}\n      <htext color=\"white\" backgroundColor=\"rgb(252, 109, 38)\">\n        background\n      </htext>{' '}\n      colors to create vibrant and eye-catching text.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/indent-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const indentValue: any = (\n  <fragment>\n    <hh2>Indentation</hh2>\n    <hp indent={1}>\n      Easily control the indentation of specific blocks to highlight important\n      information and improve visual structure.\n    </hp>\n    <hp indent={2}>\n      For instance, this paragraph looks like it belongs to the previous one.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/line-height-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const lineHeightValue: any = (\n  <fragment>\n    <hh2>Line Height</hh2>\n    <hp>\n      Control the line height of your text to improve readability and adjust the\n      spacing between lines.\n    </hp>\n    <hp lineHeight={2}>\n      Choose the ideal line height to ensure comfortable reading and an\n      aesthetically pleasing document.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/link-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const linkValue: any = (\n  <fragment>\n    <hh2>Link</hh2>\n    <hp>\n      Add{' '}\n      <ha target=\"_blank\" url=\"https://en.wikipedia.org/wiki/Hypertext\">\n        hyperlinks\n      </ha>{' '}\n      within your text to reference external sources or provide additional\n      information using the Link plugin.\n    </hp>\n    <hp>\n      Effortlessly create hyperlinks using the toolbar or by pasting a URL while\n      selecting the desired text.\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/list-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const listValue: any = (\n  <fragment>\n    <hh2>List</hh2>\n\n    <hp>\n      Create indented lists with multiple levels of indentation and customize\n      the list style type for each level.\n    </hp>\n    <hp checked={true} indent={1} listStyleType=\"todo\">\n      Todo 1\n    </hp>\n\n    <hp indent={1} listStyleType=\"disc\">\n      Disc 1\n    </hp>\n    <hp indent={2} listStyleType=\"disc\">\n      Disc 2\n    </hp>\n    <hp checked={false} indent={3} listStyleType=\"todo\">\n      Todo 2\n    </hp>\n    <hp indent={1} listStyleType=\"upper-roman\">\n      Roman 1\n    </hp>\n    <hp indent={2} listStyleType=\"decimal\">\n      Decimal 11\n    </hp>\n    <hp indent={3} listStart={2} listStyleType=\"decimal\">\n      Decimal 111\n    </hp>\n    <hp indent={3} listStart={2} listStyleType=\"decimal\">\n      Decimal 112\n    </hp>\n\n    {/* <hp indent={3} listStyleType=\"lower-latin\"> */}\n    {/*  7K-T */}\n    {/* </hp> */}\n    {/* <hp indent={3} listStyleType=\"lower-latin\"> */}\n    {/*  7K-TM */}\n    {/* </hp> */}\n    <hp indent={2} listStart={2} listStyleType=\"decimal\">\n      Decimal 12\n    </hp>\n    <hp indent={2} listStart={3} listStyleType=\"decimal\">\n      Decimal 13\n    </hp>\n    {/* <hp indent={2} listStyleType=\"decimal\"> */}\n    {/*  Soyuz TMA (retired) */}\n    {/* </hp> */}\n    {/* <hp indent={2} listStyleType=\"decimal\"> */}\n    {/*  Soyuz TMA-M (retired) */}\n    {/* </hp> */}\n    {/* <hp indent={2} listStyleType=\"decimal\"> */}\n    {/*  Soyuz MS */}\n    {/* </hp> */}\n    <hp indent={1} listStart={2} listStyleType=\"upper-roman\">\n      Roman 2\n    </hp>\n    <hp indent={2} listStyleType=\"decimal\">\n      Decimal 11\n    </hp>\n    <hp indent={2} listStart={2} listStyleType=\"decimal\">\n      Decimal 12\n    </hp>\n    {/* <hp indent={2} listStyleType=\"decimal\"> */}\n    {/*  Discovery */}\n    {/* </hp> */}\n    {/* <hp indent={2} listStyleType=\"decimal\"> */}\n    {/*  Atlantis */}\n    {/* </hp> */}\n    {/* <hp indent={2} listStyleType=\"decimal\"> */}\n    {/*  Endeavour */}\n    {/* </hp> */}\n    <hp indent={1} listStart={3} listStyleType=\"upper-roman\">\n      Roman 3\n    </hp>\n    <hp indent={1} listStart={4} listStyleType=\"upper-roman\">\n      Roman 4\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/media-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const imageValue: any = (\n  <fragment>\n    <hh2>Image</hh2>\n    <hp>Add images by either uploading them or providing the image URL:</hp>\n    <himg\n      align=\"center\"\n      caption={[{ children: [{ text: 'Image caption' }] }]}\n      url=\"https://images.unsplash.com/photo-1712688930249-98e1963af7bd?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n      width=\"55%\"\n    >\n      <htext />\n    </himg>\n    <hp>Customize image captions and resize images.</hp>\n  </fragment>\n);\n\nexport const mediaPlaceholderValue: any = (\n  <fragment>\n    <hh2>Upload</hh2>\n    <hp>\n      Our editor supports various media types for upload, including images,\n      videos, audio, and files.\n    </hp>\n    <hfile\n      name=\"sample.pdf\"\n      align=\"center\"\n      url=\"https://s26.q4cdn.com/900411403/files/doc_downloads/test.pdf\"\n      width=\"80%\"\n      isUpload\n    >\n      <htext />\n    </hfile>\n    <hp indent={1} listStyleType=\"disc\">\n      Real-time upload status and progress tracking\n    </hp>\n    <haudio\n      align=\"center\"\n      url=\"https://samplelib.com/lib/preview/mp3/sample-3s.mp3\"\n      width=\"80%\"\n    >\n      <htext />\n    </haudio>\n    <hp indent={1} listStyleType=\"disc\">\n      Configurable file size limits and batch upload settings\n    </hp>\n    <hvideo\n      align=\"center\"\n      url=\"https://videos.pexels.com/video-files/6769791/6769791-uhd_2560_1440_24fps.mp4\"\n      width=\"80%\"\n      isUpload\n    >\n      <htext />\n    </hvideo>\n    <hp indent={1} listStyleType=\"disc\">\n      Clear error messages for any upload issues\n    </hp>\n    <hp indent={1} listStyleType=\"disc\">\n      Try it now - drag an image from your desktop or click the upload button in\n      the toolbar\n    </hp>\n  </fragment>\n);\n\nexport const mediaValue: any = (\n  <fragment>\n    {imageValue}\n    {mediaPlaceholderValue}\n\n    <hh2>Embed</hh2>\n    <hp>Embed various types of content, such as videos and tweets:</hp>\n    <hmediaembed\n      align=\"center\"\n      url=\"https://www.youtube.com/watch?v=MyiBAziEWUA\"\n    >\n      <htext />\n    </hmediaembed>\n    {/* BUG */}\n    {/* <hmediaembed\n      align=\"center\"\n      url=\"https://twitter.com/zbeyens/status/1677214892212776960\"\n    >\n      <htext />\n    </hmediaembed> */}\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/mention-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const mentionValue: any = (\n  <fragment>\n    <hh2>Mention</hh2>\n    <hp>\n      Mention and reference other users or entities within your text using\n      @-mentions.\n    </hp>\n    <hp>\n      Try mentioning{' '}\n      <hmention key=\"mention_id_1\" value=\"BB-8\">\n        <htext />\n      </hmention>{' '}\n      or{' '}\n      <hmention key=\"mention_id_2\" value=\"Boba Fett\">\n        <htext />\n      </hmention>\n      .\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/table-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const createTable = (spanning?: boolean): any => (\n  <fragment>\n    <htable colSizes={[100, 100, 100, 100]} marginLeft={20}>\n      {spanning ? (\n        <htr>\n          <hth colSpan={4}>\n            <hp>\n              <htext bold>Plugin</htext>\n            </hp>\n          </hth>\n        </htr>\n      ) : (\n        <htr>\n          <hth>\n            <hp>\n              <htext bold>Plugin</htext>\n            </hp>\n          </hth>\n          <hth>\n            <hp>\n              <htext bold>Element</htext>\n            </hp>\n          </hth>\n          <hth>\n            <hp>\n              <htext bold>Inline</htext>\n            </hp>\n          </hth>\n          <hth>\n            <hp>\n              <htext bold>Void</htext>\n            </hp>\n          </hth>\n        </htr>\n      )}\n\n      <htr>\n        <htd>\n          <hp>\n            <htext bold>Heading</htext>\n          </hp>\n        </htd>\n        <htd>\n          <hp>\n            <htext />\n          </hp>\n        </htd>\n        <htd>\n          <hp>\n            <htext />\n          </hp>\n        </htd>\n        <htd>\n          <hp>No</hp>\n        </htd>\n      </htr>\n      <htr>\n        <htd>\n          <hp>\n            <htext bold>Image</htext>\n          </hp>\n        </htd>\n        <htd>\n          <hp>Yes</hp>\n        </htd>\n        <htd>\n          <hp>No</hp>\n        </htd>\n        <htd>\n          <hp>Yes</hp>\n        </htd>\n      </htr>\n      <htr>\n        <htd>\n          <hp>\n            <htext bold>Mention</htext>\n          </hp>\n        </htd>\n        <htd>\n          <hp>Yes</hp>\n        </htd>\n        <htd>\n          <hp>Yes</hp>\n        </htd>\n        <htd>\n          <hp>Yes</hp>\n        </htd>\n      </htr>\n    </htable>\n  </fragment>\n);\n\nexport const tableValue: any = (\n  <fragment>\n    <hh2>Table</hh2>\n    <hp>\n      Create customizable tables with resizable columns and rows, allowing you\n      to design structured layouts.\n    </hp>\n    {createTable()}\n  </fragment>\n);\n\nexport const tableMergeValue: any = (\n  <fragment>\n    <hh3>Table Merge</hh3>\n    <hp>\n      You can disable merging using <htext code>disableMerge: true</htext>{' '}\n      option. Try it out:\n    </hp>\n    {createTable(true)}\n  </fragment>\n);\n",
      "type": "registry:example"
    },
    {
      "path": "src/registry/examples/values/toc-value.tsx",
      "content": "/** @jsxRuntime classic */\n/** @jsx jsx */\nimport { jsx } from '@platejs/test-utils';\n\njsx;\n\nexport const tocValue: any = (\n  <fragment>\n    <hh1>\n      <htext>Table of Contents</htext>\n    </hh1>\n    <hp>\n      <htext>\n        The Table of Contents (TOC) feature allows you to create an\n        automatically updated overview of your document's structure.\n      </htext>\n    </hp>\n    <hp>How to use the Table of Contents:</hp>\n    <hp indent={1} listStyleType=\"disc\">\n      <htext>Type \"/toc\" and press Enter to create the TOC.</htext>\n    </hp>\n    <hp indent={1} listStyleType=\"disc\">\n      <htext>\n        The TOC updates automatically when you modify headings in the document.\n      </htext>\n    </hp>\n    <htoc>\n      <htext />\n    </htoc>\n    <hh2>Example Content</hh2>\n    <hp>\n      <htext>\n        This is an example of content that would be reflected in the Table of\n        Contents.\n      </htext>\n    </hp>\n    <hh3>Subsection</hh3>\n    <hp>\n      <htext>\n        Adding or modifying headings in your document will automatically update\n        the TOC.\n      </htext>\n    </hp>\n    <hh2>Benefits of Using TOC</hh2>\n    <hp>\n      <htext>\n        A Table of Contents improves document navigation and provides a quick\n        overview of your content structure.\n      </htext>\n    </hp>\n  </fragment>\n);\n\nexport const tocPlaygroundValue: any = (\n  <fragment>\n    <htoc>\n      <htext />\n    </htoc>\n    <hp>\n      <htext>\n        Click on any heading in the table of contents to smoothly scroll to that\n        section.\n      </htext>\n    </hp>\n  </fragment>\n);\n",
      "type": "registry:example"
    }
  ],
  "meta": {
    "rsc": true
  },
  "categories": [
    "Serializers"
  ],
  "type": "registry:block"
}