Code Drawing Node
plate/code-drawing-nodeFreeComponent
Create diagrams from code using PlantUML, Graphviz, Flowchart, or Mermaid.
Live preview
live · rendered by the registry
Rendered by plate on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://platejs.org/r/code-drawing-node.jsonSource
1'use client';23import * as React from 'react';45import type {6 CodeDrawingType,7 TCodeDrawingElement,8 ViewMode,9} from '@platejs/code-drawing';10import {11 VIEW_MODE,12 DEFAULT_MIN_HEIGHT,13 CODE_DRAWING_TYPE_ARRAY,14 VIEW_MODE_ARRAY,15 renderCodeDrawing,16 RENDER_DEBOUNCE_DELAY,17 downloadImage,18 DOWNLOAD_FILENAME,19} from '@platejs/code-drawing';20import type { PlateElementProps } from 'platejs/react';21import {22 PlateElement,23 useEditorRef,24 useEditorSelector,25 useElement,26 useFocusedLast,27 useReadOnly,28 useSelected,29} from 'platejs/react';30import debounce from 'lodash/debounce.js';31import { Trash2, DownloadIcon } from 'lucide-react';3233import { Button } from '@/components/ui/button';34import { useIsMobile } from '@/hooks/use-mobile';35import {36 Popover,37 PopoverAnchor,38 PopoverContent,39} from '@/components/ui/popover';40import {41 Select,42 SelectContent,43 SelectItem,44 SelectTrigger,45 SelectValue,46} from '@/components/ui/select';4748function createDebouncedCodeDrawingRenderer(49 setImage: React.Dispatch<React.SetStateAction<string>>,50 setLoading: React.Dispatch<React.SetStateAction<boolean>>,51 setError: React.Dispatch<React.SetStateAction<string | null>>52) {53 let lastRequestId = 0;5455 return debounce(56 async (code: string | undefined, drawingType: string | undefined) => {57 lastRequestId += 1;58 const requestId = lastRequestId;5960 if (!code?.trim() || !drawingType) {61 setImage('');62 setLoading(false);63 setError(null);64 return;65 }6667 setLoading(true);68 setError(null);6970 try {71 const imageData = await renderCodeDrawing(72 drawingType as CodeDrawingType,73 code74 );7576 if (lastRequestId === requestId) {77 setImage(imageData);78 setError(null);79 }80 } catch (err) {81 if (lastRequestId === requestId) {82 setError(err instanceof Error ? err.message : 'Rendering failed');83 setImage('');84 }85 } finally {86 if (lastRequestId === requestId) {87 setLoading(false);88 }89 }90 },91 RENDER_DEBOUNCE_DELAY92 );93}9495function useCodeDrawingElement({ element }: { element: TCodeDrawingElement }) {96 const editor = useEditorRef();97 const readOnly = useReadOnly();98 const [loading, setLoading] = React.useState(false);99 const [error, setError] = React.useState<string | null>(null);100 const [image, setImage] = React.useState<string>('');101102 const debouncedRender = React.useMemo(103// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from plate
All 324 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ai-kitai-kit | plate | Components | Free | 1 dep | |
| AI Menuai-menu | plate | Components | Free | 5 deps · 2 files | |
| AI Leafai-node | plate | Components | Free | no deps | |
| AI Toolbar Buttonai-toolbar-button | plate | Components | Free | 1 dep | |
| align-base-kitalign-base-kit | plate | Components | Free | 1 dep | |
| align-kitalign-kit | plate | Components | Free | 1 dep | |
| Align Toolbar Buttonalign-toolbar-button | plate | Components | Free | 1 dep | |
| autoformat-classic-kitautoformat-classic-kit | plate | Components | Free | 2 deps |
