diff --git a/app/src/admin/ArticleEditor.jsx b/app/src/admin/ArticleEditor.jsx new file mode 100644 index 0000000..94ccebf --- /dev/null +++ b/app/src/admin/ArticleEditor.jsx @@ -0,0 +1,742 @@ +import { useState, useEffect, useRef, useCallback } from 'react'; +import { useToast, TypeBadge, CategoryBadge, pillBtn, inputStyle } from '../../teknav-ui.jsx'; +import { LazyDiagram } from '../components/lazy-diagram.jsx'; +import { adminApi } from '../lib/admin-api.js'; +import { revisionsApi, presenceApi } from '../lib/engagement-api.js'; +import { iconNode } from '../lib/icon.jsx'; +import linkIcon from '../assets/icons/link.svg'; +import imageIcon from '../assets/icons/image.svg'; +import squarePenIcon from '../assets/icons/square-pen.svg'; +import pencilIcon from '../assets/icons/pencil.svg'; +import lockIcon from '../assets/icons/lock.svg'; +import starIcon from '../assets/icons/star.svg'; +import triangleAlertIcon from '../assets/icons/triangle-alert.svg'; +import { BRAND, DIAGRAM_CHOICES, PanelState, actionBtn } from './Shared.jsx'; + +function ArtifactStudio({ selectedDiagram, onSelectDiagram, onInsert }) { + const [mode, setMode] = useState('library'); + const [codeType, setCodeType] = useState('mermaid'); + const [code, setCode] = useState(''); + const [uploadState, setUploadState] = useState({ busy: false, message: '' }); + + const insertCodeArtifact = () => { + if (!code.trim()) return; + const safeCode = code.replace(//g, '>'); + onInsert?.(`\n
${safeCode}فقط دیاگرامهای واقعی پشتیبانیشده در کد نمایش داده میشوند؛ قالب نمونه یا محتوای آزمایشی درج نمیشود.
+{code}
+ ) : (
+ {form.subtitle}
} +{form.summary}
+ {form.diagram && ( +