inconel 0.1.42 → 0.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/RichTextEditor/RichTextEditor.cjs +1 -1
- package/dist/cjs/components/RichTextEditor/RichTextEditor.cjs.map +1 -1
- package/dist/cjs/styles.css +1 -1
- package/dist/components/RichTextEditor/RichTextEditor.d.ts +4 -1
- package/dist/components/RichTextEditor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/RichTextEditor/RichTextEditor.js +249 -248
- package/dist/components/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/RichTextEditor/index.d.ts +1 -1
- package/dist/components/RichTextEditor/index.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextEditor.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from 'react'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport './styles.css'\nimport { icons } from './icons'\nimport { sanitizeHtml } from './sanitize'\n\nexport interface RichTextEditorProps extends FieldFeedbackContentProps {\n value?: string\n onChange?: (html: string) => void\n onBlur?: () => void\n label?: string\n placeholder?: string\n id?: string\n disabled?: boolean\n required?: boolean\n fullWidth?: boolean\n className?: string\n /** Editör içerik alanının minimum yüksekliği (px). */\n minHeight?: number\n /** Görsel dosyası seçilince çağrılır; dönen URL görsel olarak eklenir. Verilmezse base64 gömülür. */\n onImageUpload?: (file: File) => Promise<string>\n /**\n * Verilirse araç çubuğuna galeri düğmesi eklenir. Düğmeye basınca çağrılır;\n * uygulama kendi medya kütüphanesini açıp seçilen içeriği `insert(html)` ile ekler.\n */\n onRequestMedia?: (insert: (html: string) => void) => void\n}\n\nconst BLOCKS = [\n { tag: 'p', label: 'Paragraf' },\n { tag: 'h1', label: 'Başlık 1' },\n { tag: 'h2', label: 'Başlık 2' },\n { tag: 'h3', label: 'Başlık 3' },\n { tag: 'blockquote', label: 'Alıntı' },\n]\n\nconst FONT_SIZES = [12, 14, 16, 18, 24, 32]\n\ntype Panel = 'link' | 'image' | 'table' | null\n\nconst CSS_COMMANDS = new Set(['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'])\n\nconst readFileAsDataUrl = (file: File) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(String(reader.result))\n reader.onerror = () => reject(reader.error)\n reader.readAsDataURL(file)\n })\n\ninterface ToolButtonProps {\n label: string\n onClick: () => void\n disabled?: boolean\n active?: boolean\n children: ReactNode\n}\n\nfunction ToolButton({ label, onClick, disabled, active, children }: ToolButtonProps) {\n return (\n <button\n type=\"button\"\n className={`inconel-rte__btn${active ? ' inconel-is-active' : ''}`}\n aria-label={label}\n title={label}\n aria-pressed={active}\n disabled={disabled}\n onMouseDown={(event) => event.preventDefault()}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default function RichTextEditor({\n value = '',\n onChange,\n onBlur,\n label,\n placeholder,\n id,\n disabled = false,\n required,\n fullWidth = true,\n className,\n minHeight = 200,\n onImageUpload,\n onRequestMedia,\n hint,\n errorMessage,\n}: RichTextEditorProps) {\n const generatedId = useId()\n const editorId = id ?? `inconel-rte-${generatedId.replace(/:/g, '')}`\n const hintId = `${editorId}-hint`\n const errorId = `${editorId}-error`\n\n const editorRef = useRef<HTMLDivElement>(null)\n const savedRange = useRef<Range | null>(null)\n const lastHtml = useRef<string | null>(null)\n const [sourceMode, setSourceMode] = useState(false)\n const [source, setSource] = useState('')\n const [panel, setPanel] = useState<Panel>(null)\n const [url, setUrl] = useState('')\n const [formats, setFormats] = useState<Record<string, boolean>>({})\n const [empty, setEmpty] = useState(!value)\n const [inTable, setInTable] = useState(false)\n const [tableSize, setTableSize] = useState({ rows: 3, cols: 3 })\n\n // Dışarıdan gelen value değişince (kendi çıktımız değilse) içeriği güncelle.\n useEffect(() => {\n const editor = editorRef.current\n if (!editor || value === lastHtml.current) return\n const clean = sanitizeHtml(value)\n if (editor.innerHTML !== clean) editor.innerHTML = clean\n lastHtml.current = value\n setEmpty(!editor.textContent && !editor.querySelector('img'))\n }, [value, sourceMode])\n\n const emit = useCallback(() => {\n const editor = editorRef.current\n if (!editor) return\n const hasContent = Boolean(editor.textContent) || Boolean(editor.querySelector('img'))\n const html = hasContent ? sanitizeHtml(editor.innerHTML) : ''\n setEmpty(!hasContent)\n lastHtml.current = html\n onChange?.(html)\n }, [onChange])\n\n const saveSelection = () => {\n const selection = window.getSelection()\n const editor = editorRef.current\n if (\n selection &&\n selection.rangeCount > 0 &&\n editor?.contains(selection.getRangeAt(0).commonAncestorContainer)\n ) {\n savedRange.current = selection.getRangeAt(0).cloneRange()\n }\n }\n\n const restoreSelection = () => {\n editorRef.current?.focus()\n const selection = window.getSelection()\n if (selection && savedRange.current) {\n selection.removeAllRanges()\n selection.addRange(savedRange.current)\n }\n }\n\n const currentCell = () => {\n const node = window.getSelection()?.anchorNode\n const element = node instanceof Element ? node : node?.parentElement\n const cell = element?.closest('td, th') ?? null\n return cell && editorRef.current?.contains(cell) ? (cell as HTMLTableCellElement) : null\n }\n\n const refreshFormats = () => {\n setInTable(Boolean(currentCell()))\n const query = (command: string) => {\n try {\n return document.queryCommandState(command)\n } catch {\n return false\n }\n }\n setFormats({\n bold: query('bold'),\n italic: query('italic'),\n underline: query('underline'),\n strikeThrough: query('strikeThrough'),\n justifyLeft: query('justifyLeft'),\n justifyCenter: query('justifyCenter'),\n justifyRight: query('justifyRight'),\n justifyFull: query('justifyFull'),\n insertUnorderedList: query('insertUnorderedList'),\n insertOrderedList: query('insertOrderedList'),\n })\n }\n\n const exec = (command: string, arg?: string) => {\n restoreSelection()\n // Hizalama CSS (text-align) ile, kalın/italik vb. standart etiketlerle (<b>, <i>, <u>) yazılır\n document.execCommand('styleWithCSS', false, CSS_COMMANDS.has(command) ? 'true' : 'false')\n document.execCommand(command, false, arg)\n saveSelection()\n refreshFormats()\n emit()\n }\n\n const applyFontSize = (px: number) => {\n restoreSelection()\n document.execCommand('styleWithCSS', false, 'false')\n document.execCommand('fontSize', false, '7')\n editorRef.current?.querySelectorAll('font[size=\"7\"]').forEach((font) => {\n const span = document.createElement('span')\n span.style.fontSize = `${px}px`\n span.append(...Array.from(font.childNodes))\n font.replaceWith(span)\n })\n saveSelection()\n emit()\n }\n\n const tableOp = (op: 'addRow' | 'delRow' | 'addCol' | 'delCol' | 'delTable') => {\n restoreSelection()\n const cell = currentCell()\n const row = cell?.parentElement as HTMLTableRowElement | null | undefined\n const table = cell?.closest('table')\n if (!cell || !row || !table) return\n const index = cell.cellIndex\n const blankLike = (source: Element) => {\n const next = document.createElement(source.tagName)\n next.innerHTML = '<br>'\n return next\n }\n\n if (op === 'addRow') {\n const newRow = document.createElement('tr')\n Array.from(row.cells).forEach((c) => newRow.append(blankLike(c.tagName === 'TH' ? document.createElement('td') : c)))\n if (row.parentElement?.tagName === 'THEAD') {\n const body = table.tBodies[0] ?? table.appendChild(document.createElement('tbody'))\n body.prepend(newRow)\n } else {\n row.after(newRow)\n }\n } else if (op === 'delRow') {\n row.remove()\n if (!table.rows.length) table.remove()\n } else if (op === 'addCol') {\n Array.from(table.rows).forEach((tr) => tr.cells[index]?.after(blankLike(tr.cells[index])))\n } else if (op === 'delCol') {\n Array.from(table.rows).forEach((tr) => tr.cells[index]?.remove())\n if (!Array.from(table.rows).some((tr) => tr.cells.length)) table.remove()\n } else {\n table.remove()\n }\n setInTable(false)\n emit()\n }\n\n const insertTable = () => {\n const rows = Math.min(Math.max(tableSize.rows, 1), 20)\n const cols = Math.min(Math.max(tableSize.cols, 1), 10)\n const cells = '<td><br></td>'.repeat(cols)\n const body = `<tr>${cells}</tr>`.repeat(rows)\n insertHtml(\n `<table border=\"1\" width=\"100%\" cellspacing=\"0\" cellpadding=\"6\"><tbody>${body}</tbody></table><p><br></p>`,\n )\n setPanel(null)\n }\n\n const insertHtml = (html: string) => {\n restoreSelection()\n document.execCommand('insertHTML', false, sanitizeHtml(html))\n saveSelection()\n emit()\n }\n\n const openPanel = (next: Exclude<Panel, null>) => {\n saveSelection()\n setUrl('')\n setPanel(panel === next ? null : next)\n }\n\n const submitPanel = () => {\n if (panel === 'table') {\n insertTable()\n return\n }\n const target = url.trim()\n if (!target) return\n if (panel === 'link') {\n exec('createLink', target)\n editorRef.current?.querySelectorAll('a').forEach((a) => {\n if (/^https?:/i.test(a.getAttribute('href') ?? '')) {\n a.setAttribute('target', '_blank')\n a.setAttribute('rel', 'noopener noreferrer')\n }\n })\n emit()\n } else if (panel === 'image') {\n exec('insertImage', target)\n }\n setPanel(null)\n }\n\n const handleImageFile = async (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0]\n event.target.value = ''\n if (!file || !file.type.startsWith('image/')) return\n const src = onImageUpload ? await onImageUpload(file) : await readFileAsDataUrl(file)\n exec('insertImage', src)\n setPanel(null)\n }\n\n const handlePaste = (event: React.ClipboardEvent<HTMLDivElement>) => {\n const html = event.clipboardData.getData('text/html')\n if (html) {\n event.preventDefault()\n document.execCommand('insertHTML', false, sanitizeHtml(html))\n emit()\n }\n }\n\n const toggleSource = () => {\n if (sourceMode) {\n const clean = sanitizeHtml(source)\n lastHtml.current = null\n if (editorRef.current) editorRef.current.innerHTML = clean\n lastHtml.current = clean\n setEmpty(!clean)\n onChange?.(clean)\n } else {\n setSource(sanitizeHtml(editorRef.current?.innerHTML ?? ''))\n }\n setPanel(null)\n setSourceMode(!sourceMode)\n }\n\n const describedBy =\n [hint && !errorMessage ? hintId : undefined, errorMessage ? errorId : undefined]\n .filter(Boolean)\n .join(' ') || undefined\n const toolsDisabled = disabled || sourceMode\n\n const btn = (\n command: string,\n text: string,\n content: ReactNode,\n arg?: string,\n ) => (\n <ToolButton\n label={text}\n active={formats[command]}\n disabled={toolsDisabled}\n onClick={() => exec(command, arg)}\n >\n {content}\n </ToolButton>\n )\n\n return (\n <div\n className={[\n 'inconel-field',\n fullWidth ? 'inconel-field--full-width' : '',\n className ?? '',\n ].join(' ')}\n >\n {label && (\n <label className=\"inconel-field__label\" htmlFor={editorId}>\n {label}\n {required && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div\n className={[\n 'inconel-rte',\n errorMessage ? 'inconel-is-invalid' : '',\n disabled ? 'inconel-is-disabled' : '',\n ].join(' ')}\n >\n <div className=\"inconel-rte__toolbar\" role=\"toolbar\" aria-label=\"Biçimlendirme\">\n {btn('bold', 'Kalın', icons.bold)}\n {btn('italic', 'İtalik', icons.italic)}\n {btn('underline', 'Altı çizili', icons.underline)}\n {btn('strikeThrough', 'Üstü çizili', icons.strike)}\n <span className=\"inconel-rte__sep\" />\n <select\n className=\"inconel-rte__select\"\n aria-label=\"Biçim\"\n disabled={toolsDisabled}\n value=\"\"\n onChange={(event) => {\n if (event.target.value) exec('formatBlock', event.target.value)\n }}\n >\n <option value=\"\">Biçim</option>\n {BLOCKS.map((block) => (\n <option key={block.tag} value={block.tag}>\n {block.label}\n </option>\n ))}\n </select>\n <select\n className=\"inconel-rte__select\"\n aria-label=\"Yazı boyutu\"\n disabled={toolsDisabled}\n value=\"\"\n onChange={(event) => {\n if (event.target.value) applyFontSize(Number(event.target.value))\n }}\n >\n <option value=\"\">Boyut</option>\n {FONT_SIZES.map((size) => (\n <option key={size} value={size}>\n {size}px\n </option>\n ))}\n </select>\n <span className=\"inconel-rte__sep\" />\n {btn('justifyLeft', 'Sola hizala', icons.alignLeft)}\n {btn('justifyCenter', 'Ortala', icons.alignCenter)}\n {btn('justifyRight', 'Sağa hizala', icons.alignRight)}\n {btn('justifyFull', 'İki yana yasla', icons.alignJustify)}\n <span className=\"inconel-rte__sep\" />\n {btn('insertUnorderedList', 'Madde işaretli liste', icons.listUl)}\n {btn('insertOrderedList', 'Numaralı liste', icons.listOl)}\n {btn('outdent', 'Girintiyi azalt', icons.outdent)}\n {btn('indent', 'Girintiyi artır', icons.indent)}\n {btn('removeFormat', 'Biçimi temizle', icons.clearFormat)}\n <span className=\"inconel-rte__sep\" />\n <ToolButton\n label=\"Bağlantı ekle\"\n disabled={toolsDisabled}\n active={panel === 'link'}\n onClick={() => openPanel('link')}\n >\n {icons.link}\n </ToolButton>\n <ToolButton\n label=\"Tablo ekle\"\n disabled={toolsDisabled}\n active={panel === 'table'}\n onClick={() => openPanel('table')}\n >\n {icons.table}\n </ToolButton>\n <ToolButton\n label=\"Görsel ekle\"\n disabled={toolsDisabled}\n active={panel === 'image'}\n onClick={() => openPanel('image')}\n >\n {icons.image}\n </ToolButton>\n {onRequestMedia && (\n <ToolButton\n label=\"Medya galerisi\"\n disabled={toolsDisabled}\n onClick={() => {\n saveSelection()\n onRequestMedia(insertHtml)\n }}\n >\n {icons.gallery}\n </ToolButton>\n )}\n <span className=\"inconel-rte__sep\" />\n {btn('undo', 'Geri al', icons.undo)}\n {btn('redo', 'Yinele', icons.redo)}\n <ToolButton\n label=\"HTML kaynağı\"\n disabled={disabled}\n active={sourceMode}\n onClick={toggleSource}\n >\n {icons.code}\n </ToolButton>\n </div>\n\n {panel === 'table' && !sourceMode && (\n <div className=\"inconel-rte__panel\">\n <label className=\"inconel-rte__field\">\n Satır\n <input\n type=\"number\"\n min={1}\n max={20}\n className=\"inconel-rte__input inconel-rte__input--num\"\n value={tableSize.rows}\n onChange={(event) => setTableSize({ ...tableSize, rows: Number(event.target.value) })}\n />\n </label>\n <label className=\"inconel-rte__field\">\n Sütun\n <input\n type=\"number\"\n min={1}\n max={10}\n className=\"inconel-rte__input inconel-rte__input--num\"\n value={tableSize.cols}\n onChange={(event) => setTableSize({ ...tableSize, cols: Number(event.target.value) })}\n />\n </label>\n <button type=\"button\" className=\"inconel-rte__action\" onClick={submitPanel}>\n Tablo ekle\n </button>\n </div>\n )}\n\n {inTable && !sourceMode && !disabled && (\n <div className=\"inconel-rte__panel\" role=\"toolbar\" aria-label=\"Tablo\">\n {(\n [\n ['addRow', 'Satır ekle'],\n ['delRow', 'Satırı sil'],\n ['addCol', 'Sütun ekle'],\n ['delCol', 'Sütunu sil'],\n ['delTable', 'Tabloyu sil'],\n ] as const\n ).map(([op, text]) => (\n <button\n key={op}\n type=\"button\"\n className=\"inconel-rte__action\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => tableOp(op)}\n >\n {text}\n </button>\n ))}\n </div>\n )}\n\n {panel && panel !== 'table' && !sourceMode && (\n <div className=\"inconel-rte__panel\">\n <input\n type=\"url\"\n className=\"inconel-rte__input\"\n aria-label={panel === 'link' ? 'Bağlantı adresi' : 'Görsel adresi'}\n placeholder={panel === 'link' ? 'https://…' : 'Görsel URL (https://…)'}\n value={url}\n autoFocus\n onChange={(event) => setUrl(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n submitPanel()\n }\n }}\n />\n <button type=\"button\" className=\"inconel-rte__action\" onClick={submitPanel}>\n Ekle\n </button>\n {panel === 'image' && (\n <label className=\"inconel-rte__action\">\n Dosya seç\n <input\n type=\"file\"\n accept=\"image/*\"\n hidden\n aria-label=\"Görsel dosyası\"\n onChange={handleImageFile}\n />\n </label>\n )}\n </div>\n )}\n\n {sourceMode ? (\n <textarea\n id={editorId}\n className=\"inconel-rte__source\"\n style={{ minHeight }}\n aria-label={label ?? 'HTML kaynağı'}\n value={source}\n disabled={disabled}\n spellCheck={false}\n onChange={(event) => setSource(event.target.value)}\n />\n ) : (\n <div className=\"inconel-rte__surface\" style={{ minHeight }}>\n {empty && placeholder && (\n <span className=\"inconel-rte__placeholder\" aria-hidden=\"true\">\n {placeholder}\n </span>\n )}\n <div\n ref={editorRef}\n id={editorId}\n className=\"inconel-rte__content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={label}\n aria-required={required}\n aria-invalid={Boolean(errorMessage)}\n aria-describedby={describedBy}\n aria-disabled={disabled}\n contentEditable={!disabled}\n suppressContentEditableWarning\n style={{ minHeight }}\n onInput={emit}\n onPaste={handlePaste}\n onKeyUp={() => {\n saveSelection()\n refreshFormats()\n }}\n onMouseUp={() => {\n saveSelection()\n refreshFormats()\n }}\n onBlur={() => {\n saveSelection()\n onBlur?.()\n }}\n />\n </div>\n )}\n </div>\n <FieldFeedback hint={hint} errorMessage={errorMessage} hintId={hintId} errorId={errorId} />\n </div>\n )\n}\n"],"names":["BLOCKS","FONT_SIZES","CSS_COMMANDS","readFileAsDataUrl","file","resolve","reject","reader","ToolButton","label","onClick","disabled","active","children","jsx","event","RichTextEditor","value","onChange","onBlur","placeholder","id","required","fullWidth","className","minHeight","onImageUpload","onRequestMedia","hint","errorMessage","generatedId","useId","editorId","hintId","errorId","editorRef","useRef","savedRange","lastHtml","sourceMode","setSourceMode","useState","source","setSource","panel","setPanel","url","setUrl","formats","setFormats","empty","setEmpty","inTable","setInTable","tableSize","setTableSize","useEffect","editor","clean","sanitizeHtml","emit","useCallback","hasContent","html","saveSelection","selection","restoreSelection","currentCell","node","cell","refreshFormats","query","command","exec","arg","applyFontSize","px","font","span","tableOp","op","row","table","index","blankLike","next","newRow","c","tr","insertTable","rows","cols","body","insertHtml","openPanel","submitPanel","target","a","handleImageFile","src","handlePaste","toggleSource","describedBy","toolsDisabled","btn","text","content","jsxs","icons","block","size","FieldFeedback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RichTextEditor.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["import {\n Fragment,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from 'react'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport './styles.css'\nimport { icons } from './icons'\nimport { sanitizeHtml } from './sanitize'\n\nexport type RichTextTool =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strikethrough'\n | 'blockFormat'\n | 'fontSize'\n | 'alignLeft'\n | 'alignCenter'\n | 'alignRight'\n | 'alignJustify'\n | 'unorderedList'\n | 'orderedList'\n | 'outdent'\n | 'indent'\n | 'clearFormat'\n | 'link'\n | 'table'\n | 'image'\n | 'media'\n | 'undo'\n | 'redo'\n | 'source'\n\nexport interface RichTextEditorProps extends FieldFeedbackContentProps {\n value?: string\n onChange?: (html: string) => void\n onBlur?: () => void\n label?: string\n placeholder?: string\n id?: string\n disabled?: boolean\n required?: boolean\n fullWidth?: boolean\n className?: string\n /** Editör içerik alanının minimum yüksekliği (px). */\n minHeight?: number\n /** Görsel dosyası seçilince çağrılır; dönen URL görsel olarak eklenir. Verilmezse base64 gömülür. */\n onImageUpload?: (file: File) => Promise<string>\n /**\n * Verilirse araç çubuğuna galeri düğmesi eklenir. Düğmeye basınca çağrılır;\n * uygulama kendi medya kütüphanesini açıp seçilen içeriği `insert(html)` ile ekler.\n */\n onRequestMedia?: (insert: (html: string) => void) => void\n /** Araç çubuğundan çıkarılacak araçlar, ör. `['table', 'source', 'fontSize']`. */\n excludeTools?: RichTextTool[]\n}\n\nconst BLOCKS = [\n { tag: 'p', label: 'Paragraf' },\n { tag: 'h1', label: 'Başlık 1' },\n { tag: 'h2', label: 'Başlık 2' },\n { tag: 'h3', label: 'Başlık 3' },\n { tag: 'blockquote', label: 'Alıntı' },\n]\n\nconst FONT_SIZES = [12, 14, 16, 18, 24, 32]\n\ntype Panel = 'link' | 'image' | 'table' | null\n\nconst CSS_COMMANDS = new Set(['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'])\n\nconst readFileAsDataUrl = (file: File) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(String(reader.result))\n reader.onerror = () => reject(reader.error)\n reader.readAsDataURL(file)\n })\n\ninterface ToolButtonProps {\n label: string\n onClick: () => void\n disabled?: boolean\n active?: boolean\n children: ReactNode\n}\n\nfunction ToolButton({ label, onClick, disabled, active, children }: ToolButtonProps) {\n return (\n <button\n type=\"button\"\n className={`inconel-rte__btn${active ? ' inconel-is-active' : ''}`}\n aria-label={label}\n title={label}\n aria-pressed={active}\n disabled={disabled}\n onMouseDown={(event) => event.preventDefault()}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default function RichTextEditor({\n value = '',\n onChange,\n onBlur,\n label,\n placeholder,\n id,\n disabled = false,\n required,\n fullWidth = true,\n className,\n minHeight = 200,\n onImageUpload,\n onRequestMedia,\n excludeTools = [],\n hint,\n errorMessage,\n}: RichTextEditorProps) {\n const generatedId = useId()\n const editorId = id ?? `inconel-rte-${generatedId.replace(/:/g, '')}`\n const hintId = `${editorId}-hint`\n const errorId = `${editorId}-error`\n\n const editorRef = useRef<HTMLDivElement>(null)\n const savedRange = useRef<Range | null>(null)\n const lastHtml = useRef<string | null>(null)\n const [sourceMode, setSourceMode] = useState(false)\n const [source, setSource] = useState('')\n const [panel, setPanel] = useState<Panel>(null)\n const [url, setUrl] = useState('')\n const [formats, setFormats] = useState<Record<string, boolean>>({})\n const [empty, setEmpty] = useState(!value)\n const [inTable, setInTable] = useState(false)\n const [tableSize, setTableSize] = useState({ rows: 3, cols: 3 })\n\n // Dışarıdan gelen value değişince (kendi çıktımız değilse) içeriği güncelle.\n useEffect(() => {\n const editor = editorRef.current\n if (!editor || value === lastHtml.current) return\n const clean = sanitizeHtml(value)\n if (editor.innerHTML !== clean) editor.innerHTML = clean\n lastHtml.current = value\n setEmpty(!editor.textContent && !editor.querySelector('img'))\n }, [value, sourceMode])\n\n const emit = useCallback(() => {\n const editor = editorRef.current\n if (!editor) return\n const hasContent = Boolean(editor.textContent) || Boolean(editor.querySelector('img'))\n const html = hasContent ? sanitizeHtml(editor.innerHTML) : ''\n setEmpty(!hasContent)\n lastHtml.current = html\n onChange?.(html)\n }, [onChange])\n\n const saveSelection = () => {\n const selection = window.getSelection()\n const editor = editorRef.current\n if (\n selection &&\n selection.rangeCount > 0 &&\n editor?.contains(selection.getRangeAt(0).commonAncestorContainer)\n ) {\n savedRange.current = selection.getRangeAt(0).cloneRange()\n }\n }\n\n const restoreSelection = () => {\n editorRef.current?.focus()\n const selection = window.getSelection()\n if (selection && savedRange.current) {\n selection.removeAllRanges()\n selection.addRange(savedRange.current)\n }\n }\n\n const currentCell = () => {\n const node = window.getSelection()?.anchorNode\n const element = node instanceof Element ? node : node?.parentElement\n const cell = element?.closest('td, th') ?? null\n return cell && editorRef.current?.contains(cell) ? (cell as HTMLTableCellElement) : null\n }\n\n const refreshFormats = () => {\n setInTable(Boolean(currentCell()))\n const query = (command: string) => {\n try {\n return document.queryCommandState(command)\n } catch {\n return false\n }\n }\n setFormats({\n bold: query('bold'),\n italic: query('italic'),\n underline: query('underline'),\n strikeThrough: query('strikeThrough'),\n justifyLeft: query('justifyLeft'),\n justifyCenter: query('justifyCenter'),\n justifyRight: query('justifyRight'),\n justifyFull: query('justifyFull'),\n insertUnorderedList: query('insertUnorderedList'),\n insertOrderedList: query('insertOrderedList'),\n })\n }\n\n const exec = (command: string, arg?: string) => {\n restoreSelection()\n // Hizalama CSS (text-align) ile, kalın/italik vb. standart etiketlerle (<b>, <i>, <u>) yazılır\n document.execCommand('styleWithCSS', false, CSS_COMMANDS.has(command) ? 'true' : 'false')\n document.execCommand(command, false, arg)\n saveSelection()\n refreshFormats()\n emit()\n }\n\n const applyFontSize = (px: number) => {\n restoreSelection()\n document.execCommand('styleWithCSS', false, 'false')\n document.execCommand('fontSize', false, '7')\n editorRef.current?.querySelectorAll('font[size=\"7\"]').forEach((font) => {\n const span = document.createElement('span')\n span.style.fontSize = `${px}px`\n span.append(...Array.from(font.childNodes))\n font.replaceWith(span)\n })\n saveSelection()\n emit()\n }\n\n const tableOp = (op: 'addRow' | 'delRow' | 'addCol' | 'delCol' | 'delTable') => {\n restoreSelection()\n const cell = currentCell()\n const row = cell?.parentElement as HTMLTableRowElement | null | undefined\n const table = cell?.closest('table')\n if (!cell || !row || !table) return\n const index = cell.cellIndex\n const blankLike = (source: Element) => {\n const next = document.createElement(source.tagName)\n next.innerHTML = '<br>'\n return next\n }\n\n if (op === 'addRow') {\n const newRow = document.createElement('tr')\n Array.from(row.cells).forEach((c) => newRow.append(blankLike(c.tagName === 'TH' ? document.createElement('td') : c)))\n if (row.parentElement?.tagName === 'THEAD') {\n const body = table.tBodies[0] ?? table.appendChild(document.createElement('tbody'))\n body.prepend(newRow)\n } else {\n row.after(newRow)\n }\n } else if (op === 'delRow') {\n row.remove()\n if (!table.rows.length) table.remove()\n } else if (op === 'addCol') {\n Array.from(table.rows).forEach((tr) => tr.cells[index]?.after(blankLike(tr.cells[index])))\n } else if (op === 'delCol') {\n Array.from(table.rows).forEach((tr) => tr.cells[index]?.remove())\n if (!Array.from(table.rows).some((tr) => tr.cells.length)) table.remove()\n } else {\n table.remove()\n }\n setInTable(false)\n emit()\n }\n\n const insertTable = () => {\n const rows = Math.min(Math.max(tableSize.rows, 1), 20)\n const cols = Math.min(Math.max(tableSize.cols, 1), 10)\n const cells = '<td><br></td>'.repeat(cols)\n const body = `<tr>${cells}</tr>`.repeat(rows)\n insertHtml(\n `<table border=\"1\" width=\"100%\" cellspacing=\"0\" cellpadding=\"6\"><tbody>${body}</tbody></table><p><br></p>`,\n )\n setPanel(null)\n }\n\n const insertHtml = (html: string) => {\n restoreSelection()\n document.execCommand('insertHTML', false, sanitizeHtml(html))\n saveSelection()\n emit()\n }\n\n const openPanel = (next: Exclude<Panel, null>) => {\n saveSelection()\n setUrl('')\n setPanel(panel === next ? null : next)\n }\n\n const submitPanel = () => {\n if (panel === 'table') {\n insertTable()\n return\n }\n const target = url.trim()\n if (!target) return\n if (panel === 'link') {\n exec('createLink', target)\n editorRef.current?.querySelectorAll('a').forEach((a) => {\n if (/^https?:/i.test(a.getAttribute('href') ?? '')) {\n a.setAttribute('target', '_blank')\n a.setAttribute('rel', 'noopener noreferrer')\n }\n })\n emit()\n } else if (panel === 'image') {\n exec('insertImage', target)\n }\n setPanel(null)\n }\n\n const handleImageFile = async (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0]\n event.target.value = ''\n if (!file || !file.type.startsWith('image/')) return\n const src = onImageUpload ? await onImageUpload(file) : await readFileAsDataUrl(file)\n exec('insertImage', src)\n setPanel(null)\n }\n\n const handlePaste = (event: React.ClipboardEvent<HTMLDivElement>) => {\n const html = event.clipboardData.getData('text/html')\n if (html) {\n event.preventDefault()\n document.execCommand('insertHTML', false, sanitizeHtml(html))\n emit()\n }\n }\n\n const toggleSource = () => {\n if (sourceMode) {\n const clean = sanitizeHtml(source)\n lastHtml.current = null\n if (editorRef.current) editorRef.current.innerHTML = clean\n lastHtml.current = clean\n setEmpty(!clean)\n onChange?.(clean)\n } else {\n setSource(sanitizeHtml(editorRef.current?.innerHTML ?? ''))\n }\n setPanel(null)\n setSourceMode(!sourceMode)\n }\n\n const describedBy =\n [hint && !errorMessage ? hintId : undefined, errorMessage ? errorId : undefined]\n .filter(Boolean)\n .join(' ') || undefined\n const toolsDisabled = disabled || sourceMode\n\n const btn = (\n command: string,\n text: string,\n content: ReactNode,\n arg?: string,\n ) => (\n <ToolButton\n label={text}\n active={formats[command]}\n disabled={toolsDisabled}\n onClick={() => exec(command, arg)}\n >\n {content}\n </ToolButton>\n )\n\n const blockSelect = (\n <select\n className=\"inconel-rte__select\"\n aria-label=\"Biçim\"\n disabled={toolsDisabled}\n value=\"\"\n onChange={(event) => {\n if (event.target.value) exec('formatBlock', event.target.value)\n }}\n >\n <option value=\"\">Biçim</option>\n {BLOCKS.map((block) => (\n <option key={block.tag} value={block.tag}>\n {block.label}\n </option>\n ))}\n </select>\n )\n\n const fontSizeSelect = (\n <select\n className=\"inconel-rte__select\"\n aria-label=\"Yazı boyutu\"\n disabled={toolsDisabled}\n value=\"\"\n onChange={(event) => {\n if (event.target.value) applyFontSize(Number(event.target.value))\n }}\n >\n <option value=\"\">Boyut</option>\n {FONT_SIZES.map((size) => (\n <option key={size} value={size}>\n {size}px\n </option>\n ))}\n </select>\n )\n\n const panelButton = (label: string, target: Exclude<Panel, null>, content: ReactNode) => (\n <ToolButton\n label={label}\n disabled={toolsDisabled}\n active={panel === target}\n onClick={() => openPanel(target)}\n >\n {content}\n </ToolButton>\n )\n\n // Her grup bir ayraçla ayrılır; `excludeTools` ile çıkarılan araçlar ve boş kalan gruplar gösterilmez.\n const excluded = new Set(excludeTools)\n const groups = (\n [\n [\n { key: 'bold', node: btn('bold', 'Kalın', icons.bold) },\n { key: 'italic', node: btn('italic', 'İtalik', icons.italic) },\n { key: 'underline', node: btn('underline', 'Altı çizili', icons.underline) },\n { key: 'strikethrough', node: btn('strikeThrough', 'Üstü çizili', icons.strike) },\n ],\n [\n { key: 'blockFormat', node: blockSelect },\n { key: 'fontSize', node: fontSizeSelect },\n ],\n [\n { key: 'alignLeft', node: btn('justifyLeft', 'Sola hizala', icons.alignLeft) },\n { key: 'alignCenter', node: btn('justifyCenter', 'Ortala', icons.alignCenter) },\n { key: 'alignRight', node: btn('justifyRight', 'Sağa hizala', icons.alignRight) },\n { key: 'alignJustify', node: btn('justifyFull', 'İki yana yasla', icons.alignJustify) },\n ],\n [\n { key: 'unorderedList', node: btn('insertUnorderedList', 'Madde işaretli liste', icons.listUl) },\n { key: 'orderedList', node: btn('insertOrderedList', 'Numaralı liste', icons.listOl) },\n { key: 'outdent', node: btn('outdent', 'Girintiyi azalt', icons.outdent) },\n { key: 'indent', node: btn('indent', 'Girintiyi artır', icons.indent) },\n { key: 'clearFormat', node: btn('removeFormat', 'Biçimi temizle', icons.clearFormat) },\n ],\n [\n { key: 'link', node: panelButton('Bağlantı ekle', 'link', icons.link) },\n { key: 'table', node: panelButton('Tablo ekle', 'table', icons.table) },\n { key: 'image', node: panelButton('Görsel ekle', 'image', icons.image) },\n ...(onRequestMedia\n ? [\n {\n key: 'media',\n node: (\n <ToolButton\n label=\"Medya galerisi\"\n disabled={toolsDisabled}\n onClick={() => {\n saveSelection()\n onRequestMedia(insertHtml)\n }}\n >\n {icons.gallery}\n </ToolButton>\n ),\n },\n ]\n : []),\n ],\n [\n { key: 'undo', node: btn('undo', 'Geri al', icons.undo) },\n { key: 'redo', node: btn('redo', 'Yinele', icons.redo) },\n {\n key: 'source',\n node: (\n <ToolButton\n label=\"HTML kaynağı\"\n disabled={disabled}\n active={sourceMode}\n onClick={toggleSource}\n >\n {icons.code}\n </ToolButton>\n ),\n },\n ],\n ] as { key: RichTextTool; node: ReactNode }[][]\n )\n .map((group) => group.filter((item) => !excluded.has(item.key)))\n .filter((group) => group.length > 0)\n\n return (\n <div\n className={[\n 'inconel-field',\n fullWidth ? 'inconel-field--full-width' : '',\n className ?? '',\n ].join(' ')}\n >\n {label && (\n <label className=\"inconel-field__label\" htmlFor={editorId}>\n {label}\n {required && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div\n className={[\n 'inconel-rte',\n errorMessage ? 'inconel-is-invalid' : '',\n disabled ? 'inconel-is-disabled' : '',\n ].join(' ')}\n >\n <div className=\"inconel-rte__toolbar\" role=\"toolbar\" aria-label=\"Biçimlendirme\">\n {groups.map((group, index) => (\n <Fragment key={index}>\n {index > 0 && <span className=\"inconel-rte__sep\" />}\n {group.map((item) => (\n <Fragment key={item.key}>{item.node}</Fragment>\n ))}\n </Fragment>\n ))}\n </div>\n\n {panel === 'table' && !sourceMode && (\n <div className=\"inconel-rte__panel\">\n <label className=\"inconel-rte__field\">\n Satır\n <input\n type=\"number\"\n min={1}\n max={20}\n className=\"inconel-rte__input inconel-rte__input--num\"\n value={tableSize.rows}\n onChange={(event) => setTableSize({ ...tableSize, rows: Number(event.target.value) })}\n />\n </label>\n <label className=\"inconel-rte__field\">\n Sütun\n <input\n type=\"number\"\n min={1}\n max={10}\n className=\"inconel-rte__input inconel-rte__input--num\"\n value={tableSize.cols}\n onChange={(event) => setTableSize({ ...tableSize, cols: Number(event.target.value) })}\n />\n </label>\n <button type=\"button\" className=\"inconel-rte__action\" onClick={submitPanel}>\n Tablo ekle\n </button>\n </div>\n )}\n\n {inTable && !sourceMode && !disabled && (\n <div className=\"inconel-rte__panel\" role=\"toolbar\" aria-label=\"Tablo\">\n {(\n [\n ['addRow', 'Satır ekle'],\n ['delRow', 'Satırı sil'],\n ['addCol', 'Sütun ekle'],\n ['delCol', 'Sütunu sil'],\n ['delTable', 'Tabloyu sil'],\n ] as const\n ).map(([op, text]) => (\n <button\n key={op}\n type=\"button\"\n className=\"inconel-rte__action\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => tableOp(op)}\n >\n {text}\n </button>\n ))}\n </div>\n )}\n\n {panel && panel !== 'table' && !sourceMode && (\n <div className=\"inconel-rte__panel\">\n <input\n type=\"url\"\n className=\"inconel-rte__input\"\n aria-label={panel === 'link' ? 'Bağlantı adresi' : 'Görsel adresi'}\n placeholder={panel === 'link' ? 'https://…' : 'Görsel URL (https://…)'}\n value={url}\n autoFocus\n onChange={(event) => setUrl(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n submitPanel()\n }\n }}\n />\n <button type=\"button\" className=\"inconel-rte__action\" onClick={submitPanel}>\n Ekle\n </button>\n {panel === 'image' && (\n <label className=\"inconel-rte__action\">\n Dosya seç\n <input\n type=\"file\"\n accept=\"image/*\"\n hidden\n aria-label=\"Görsel dosyası\"\n onChange={handleImageFile}\n />\n </label>\n )}\n </div>\n )}\n\n {sourceMode ? (\n <textarea\n id={editorId}\n className=\"inconel-rte__source\"\n style={{ minHeight }}\n aria-label={label ?? 'HTML kaynağı'}\n value={source}\n disabled={disabled}\n spellCheck={false}\n onChange={(event) => setSource(event.target.value)}\n />\n ) : (\n <div className=\"inconel-rte__surface\" style={{ minHeight }}>\n {empty && placeholder && (\n <span className=\"inconel-rte__placeholder\" aria-hidden=\"true\">\n {placeholder}\n </span>\n )}\n <div\n ref={editorRef}\n id={editorId}\n className=\"inconel-rte__content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={label}\n aria-required={required}\n aria-invalid={Boolean(errorMessage)}\n aria-describedby={describedBy}\n aria-disabled={disabled}\n contentEditable={!disabled}\n suppressContentEditableWarning\n style={{ minHeight }}\n onInput={emit}\n onPaste={handlePaste}\n onKeyUp={() => {\n saveSelection()\n refreshFormats()\n }}\n onMouseUp={() => {\n saveSelection()\n refreshFormats()\n }}\n onBlur={() => {\n saveSelection()\n onBlur?.()\n }}\n />\n </div>\n )}\n </div>\n <FieldFeedback hint={hint} errorMessage={errorMessage} hintId={hintId} errorId={errorId} />\n </div>\n )\n}\n"],"names":["BLOCKS","FONT_SIZES","CSS_COMMANDS","readFileAsDataUrl","file","resolve","reject","reader","ToolButton","label","onClick","disabled","active","children","jsx","event","RichTextEditor","value","onChange","onBlur","placeholder","id","required","fullWidth","className","minHeight","onImageUpload","onRequestMedia","excludeTools","hint","errorMessage","generatedId","useId","editorId","hintId","errorId","editorRef","useRef","savedRange","lastHtml","sourceMode","setSourceMode","useState","source","setSource","panel","setPanel","url","setUrl","formats","setFormats","empty","setEmpty","inTable","setInTable","tableSize","setTableSize","useEffect","editor","clean","sanitizeHtml","emit","useCallback","hasContent","html","saveSelection","selection","restoreSelection","currentCell","node","cell","refreshFormats","query","command","exec","arg","applyFontSize","px","font","span","tableOp","op","row","table","index","blankLike","next","newRow","c","tr","insertTable","rows","cols","body","insertHtml","openPanel","submitPanel","target","a","handleImageFile","src","handlePaste","toggleSource","describedBy","toolsDisabled","btn","text","content","blockSelect","jsxs","block","fontSizeSelect","size","panelButton","excluded","groups","icons","group","item","Fragment","FieldFeedback"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default as RichTextEditor } from './RichTextEditor';
|
|
2
|
-
export type { RichTextEditorProps } from './RichTextEditor';
|
|
2
|
+
export type { RichTextEditorProps, RichTextTool } from './RichTextEditor';
|
|
3
3
|
export { sanitizeHtml } from './sanitize';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RichTextEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RichTextEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC5D,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA"}
|