@overlap/rte 0.1.4 → 0.1.6
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/README.md +52 -40
- package/dist/components/Editor.d.ts.map +1 -1
- package/dist/components/Icons.d.ts +2 -0
- package/dist/components/Icons.d.ts.map +1 -1
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/hooks/useCheckbox.d.ts +23 -0
- package/dist/hooks/useCheckbox.d.ts.map +1 -0
- package/dist/hooks/useEditorEvents.d.ts +18 -0
- package/dist/hooks/useEditorEvents.d.ts.map +1 -0
- package/dist/hooks/useEditorInit.d.ts +23 -0
- package/dist/hooks/useEditorInit.d.ts.map +1 -0
- package/dist/hooks/useEditorSelection.d.ts +7 -0
- package/dist/hooks/useEditorSelection.d.ts.map +1 -0
- package/dist/index.d.ts +45 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +1294 -628
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1295 -626
- package/dist/index.js.map +1 -1
- package/dist/plugins/blockFormat.d.ts +2 -2
- package/dist/plugins/blockFormat.d.ts.map +1 -1
- package/dist/styles.css +476 -386
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/checkbox.d.ts +27 -0
- package/dist/utils/checkbox.d.ts.map +1 -0
- package/dist/utils/content.d.ts +19 -2
- package/dist/utils/content.d.ts.map +1 -1
- package/dist/utils/dom.d.ts +31 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/package.json +1 -7
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/Icons.tsx","../src/components/Dropdown.tsx","../src/components/IconWrapper.tsx","../src/plugins/base.tsx","../src/plugins/blockFormat.tsx","../src/plugins/clearFormatting.tsx","../src/plugins/index.tsx","../src/utils/stateReflection.ts","../src/plugins/colors.tsx","../src/plugins/fontSize.tsx","../src/plugins/image.tsx","../src/utils/clearFormatting.ts","../src/utils/content.ts","../src/utils/history.ts","../src/utils/listIndent.ts","../src/components/Toolbar.tsx","../src/components/Editor.tsx","../src/plugins/headings.tsx","../src/plugins/optional.tsx"],"sourcesContent":["import React from \"react\";\n\ninterface IconProps {\n width?: number;\n height?: number;\n className?: string;\n}\n\nexport const BoldIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\" />\n </svg>\n);\n\nexport const UnderlineIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z\" />\n </svg>\n);\n\nexport const ClearFormattingIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M6 5v3h5v11h2V8h5V5H6z\" />\n <path d=\"M20.5 3.5L3.5 20.5l1.06 1.06L21.56 4.56z\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" />\n </svg>\n);\n\nexport const QuoteIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\" />\n </svg>\n);\n\nexport const NumberedListIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 11.9V11H2zm6-5v2h14V6H8zm0 14h14v-2H8v2zm0-6h14v-2H8v2z\" />\n </svg>\n);\n\nexport const TextColorIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M2 20h20v4H2v-4zm3.49-3h2.42l1.27-3.58h5.64L16.09 17h2.42L13.25 3h-2.5L5.49 17zm4.22-5.61l2.03-5.79h.12l2.03 5.79H9.71z\" />\n </svg>\n);\n\nexport const BackgroundColorIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M17.5 4.5c-1.95 0-4.05.4-5.5 1.5-1.45-1.1-3.55-1.5-5.5-1.5-1.45 0-2.99.22-4.28.79C1.49 5.62 1 6.33 1 7.14v11.28c0 1.3 1.22 2.26 2.48 1.94.98-.25 2.02-.36 3.02-.36 1.56 0 3.22.26 4.56.92.6.3 1.28.3 1.88 0 1.34-.67 3-.92 4.56-.92 1 0 2.04.11 3.02.36C22.78 20.68 24 19.72 24 18.42V7.14c0-.81-.49-1.52-1.22-1.85-1.29-.57-2.83-.79-4.28-.79zM21 17.23c0 .63-.58 1.09-1.2.98-.75-.14-1.53-.2-2.3-.2-1.7 0-4.15.65-5.5 1.5V8c1.35-.85 3.8-1.5 5.5-1.5.77 0 1.55.06 2.3.2.62.11 1.2.58 1.2 1.18v9.35z\" />\n <rect\n x=\"4\"\n y=\"13\"\n width=\"16\"\n height=\"6\"\n fill=\"currentColor\"\n opacity=\"0.5\"\n />\n </svg>\n);\n\nexport const HeadingIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M5 4v3h5.5v12h3V7H19V4H5z\" />\n </svg>\n);\n\nexport const FontSizeIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M9 4v3h5v12h3V7h5V4H9zm-6 8h3v8h3v-8h3V10H3z\" />\n </svg>\n);\n\nexport const ImageIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n);\n\nexport const CloseIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nexport const LoadingIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\" />\n </svg>\n);\n\nexport const UploadIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z\" />\n </svg>\n);\n\nexport const IndentIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3 21h18v-2H3v2zM3 8l4 4-4 4V8zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\" />\n </svg>\n);\n\nexport const OutdentIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3 21h18v-2H3v2zM11 8l4 4-4 4V8zM3 3v2h18V3H3zm0 4h10v2H3V7zm0 4h10v2H3v-2zm0 4h18v2H3v-2z\" />\n </svg>\n);\n\nconst iconMap: Record<string, React.FC<IconProps>> = {\n \"mdi:format-bold\": BoldIcon,\n \"mdi:format-italic\": ItalicIcon,\n \"mdi:format-underline\": UnderlineIcon,\n \"mdi:undo\": UndoIcon,\n \"mdi:redo\": RedoIcon,\n \"mdi:format-clear\": ClearFormattingIcon,\n \"mdi:link\": LinkIcon,\n \"mdi:format-quote-close\": QuoteIcon,\n \"mdi:format-list-bulleted\": BulletListIcon,\n \"mdi:format-list-numbered\": NumberedListIcon,\n \"mdi:format-color-text\": TextColorIcon,\n \"mdi:format-color-fill\": BackgroundColorIcon,\n \"mdi:format-header-1\": HeadingIcon,\n \"mdi:format-size\": FontSizeIcon,\n \"mdi:image\": ImageIcon,\n \"mdi:close\": CloseIcon,\n \"mdi:loading\": LoadingIcon,\n \"mdi:upload\": UploadIcon,\n \"mdi:format-indent-increase\": IndentIcon,\n \"mdi:format-indent-decrease\": OutdentIcon,\n};\n\nexport const Icon: React.FC<{\n icon: string;\n width?: number;\n height?: number;\n className?: string;\n}> = ({ icon, width = 18, height = 18, className }) => {\n const IconComponent = iconMap[icon];\n if (!IconComponent) {\n return <span style={{ width, height, display: \"inline-block\" }} />;\n }\n return (\n <IconComponent width={width} height={height} className={className} />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Icon } from './Icons';\n\ninterface DropdownProps {\n icon: string;\n label: string;\n options: Array<{ value: string; label: string; icon?: string; color?: string; preview?: string; headingPreview?: string }>;\n onSelect: (value: string) => void;\n currentValue?: string;\n disabled?: boolean;\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n icon,\n label,\n options,\n onSelect,\n currentValue,\n disabled,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const handleSelect = (value: string) => {\n onSelect(value);\n setIsOpen(false);\n };\n\n const currentOption = options.find(opt => opt.value === currentValue);\n\n return (\n <div className=\"rte-dropdown\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={`rte-toolbar-button rte-dropdown-button ${currentOption ? 'rte-dropdown-button-has-value' : ''}`}\n title={label}\n aria-label={label}\n >\n <Icon icon={icon} width={18} height={18} />\n {currentOption && (\n <span className=\"rte-dropdown-value\">{currentOption.label}</span>\n )}\n </button>\n {isOpen && (\n <div className=\"rte-dropdown-menu\">\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n className={`rte-dropdown-item ${currentValue === option.value ? 'rte-dropdown-item-active' : ''}`}\n onClick={() => handleSelect(option.value)}\n >\n {option.color && (\n <span \n className={`rte-dropdown-color-preview ${currentValue === option.value ? 'active' : ''}`}\n style={{ backgroundColor: option.color }}\n />\n )}\n {option.preview && !option.headingPreview && (\n <span \n className=\"rte-dropdown-fontsize-preview\"\n style={{ fontSize: `${option.preview}px` }}\n >\n Aa\n </span>\n )}\n {option.headingPreview && (\n <span \n className={`rte-dropdown-heading-preview ${option.headingPreview}`}\n >\n {option.headingPreview === 'p' ? 'Normal' : option.headingPreview.toUpperCase()}\n </span>\n )}\n {option.icon && <Icon icon={option.icon} width={16} height={16} />}\n <span style={{ flex: 1, fontWeight: currentValue === option.value ? 600 : 400 }}>\n {option.label}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { Icon } from './Icons';\n\ninterface IconWrapperProps {\n icon: string;\n width?: number;\n height?: number;\n className?: string;\n}\n\nexport const IconWrapper: React.FC<IconWrapperProps> = ({ icon, width = 18, height = 18, className }) => {\n return <Icon icon={icon} width={width} height={height} className={className} />;\n};\n\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\n\n/**\n * Basis-Plugin für Inline-Formatierungen\n */\nexport function createInlinePlugin(\n name: string,\n command: string,\n icon: string,\n label: string\n): Plugin {\n return {\n name,\n type: 'inline',\n command,\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${props.isActive ? 'rte-toolbar-button-active' : ''}`}\n title={label}\n aria-label={label}\n >\n <IconWrapper icon={icon} width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(command);\n },\n isActive: (editor: EditorAPI) => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return false;\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n \n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n \n if (!element) return false;\n \n return document.queryCommandState(command);\n },\n canExecute: (editor: EditorAPI) => {\n // Formatierung sollte auch ohne Selection möglich sein\n // (z.B. wenn Editor leer ist, wird beim Klick eine Selection erstellt)\n return true;\n },\n };\n}\n\n/**\n * Basis-Plugin für Commands\n */\nexport function createCommandPlugin(\n name: string,\n command: string,\n icon: string,\n label: string\n): Plugin {\n return {\n name,\n type: 'command',\n command,\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title={label}\n aria-label={label}\n >\n <IconWrapper icon={icon} width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(command);\n },\n canExecute: (editor: EditorAPI) => {\n if (command === 'undo') return editor.canUndo();\n if (command === 'redo') return editor.canRedo();\n return true;\n },\n };\n}\n\n","import { Dropdown } from \"../components/Dropdown\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\n\nconst defaultHeadings = [\"h1\", \"h2\", \"h3\"];\n\nconst headingLabels: Record<string, string> = {\n h1: \"Überschrift 1\",\n h2: \"Überschrift 2\",\n h3: \"Überschrift 3\",\n h4: \"Überschrift 4\",\n h5: \"Überschrift 5\",\n h6: \"Überschrift 6\",\n};\n\n/**\n * Erstellt ein Block-Format-Plugin, das Headlines, Listen und Quote in einem Dropdown kombiniert\n * @param headings - Array von Heading-Levels (z.B. [\"h1\", \"h2\", \"h3\"])\n */\nexport function createBlockFormatPlugin(\n headings: string[] = defaultHeadings\n): Plugin {\n const options = [\n { value: \"p\", label: \"Normal\", headingPreview: \"p\" },\n ...headings.map((h) => ({\n value: h,\n label: headingLabels[h] || h.toUpperCase(),\n headingPreview: h,\n })),\n {\n value: \"ul\",\n label: \"Aufzählungsliste\",\n icon: \"mdi:format-list-bulleted\",\n },\n {\n value: \"ol\",\n label: \"Nummerierte Liste\",\n icon: \"mdi:format-list-numbered\",\n },\n { value: \"blockquote\", label: \"Zitat\", icon: \"mdi:format-quote-close\" },\n ];\n\n return {\n name: \"blockFormat\",\n type: \"block\",\n renderButton: (\n props: ButtonProps & {\n onSelect?: (value: string) => void;\n editorAPI?: EditorAPI;\n currentValue?: string;\n }\n ) => {\n // Aktuelles Format bestimmen\n const editor = props.editorAPI;\n let currentValue = props.currentValue;\n\n if (!currentValue && editor) {\n const selection = editor.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (element) {\n const tagName = element.tagName.toLowerCase();\n\n // Prüfe auf Heading\n if (headings.includes(tagName)) {\n currentValue = tagName;\n }\n // Prüfe auf Blockquote\n else if (element.closest(\"blockquote\")) {\n currentValue = \"blockquote\";\n }\n // Prüfe auf Liste\n else if (element.closest(\"ul\")) {\n currentValue = \"ul\";\n } else if (element.closest(\"ol\")) {\n currentValue = \"ol\";\n }\n // Prüfe auf Paragraph\n else if (tagName === \"p\") {\n currentValue = \"p\";\n }\n }\n }\n }\n\n return (\n <Dropdown\n icon=\"mdi:format-header-1\"\n label=\"Format\"\n options={options}\n onSelect={(value) => {\n // onSelect wird von der Toolbar übergeben und ruft handlePluginClick auf\n if (props.onSelect) {\n props.onSelect(value);\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n getCurrentValue: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return undefined;\n\n const tagName = element.tagName.toLowerCase();\n\n // Prüfe auf Heading\n if (headings.includes(tagName)) {\n return tagName;\n }\n // Prüfe auf Blockquote\n if (element.closest(\"blockquote\")) {\n return \"blockquote\";\n }\n // Prüfe auf Liste\n if (element.closest(\"ul\")) {\n return \"ul\";\n }\n if (element.closest(\"ol\")) {\n return \"ol\";\n }\n // Prüfe auf Paragraph\n if (tagName === \"p\") {\n return \"p\";\n }\n\n return undefined;\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (!value) return;\n\n if (value === \"ul\") {\n editor.executeCommand(\"insertUnorderedList\");\n } else if (value === \"ol\") {\n editor.executeCommand(\"insertOrderedList\");\n } else if (value === \"blockquote\") {\n const selection = editor.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (element?.closest(\"blockquote\")) {\n editor.executeCommand(\"formatBlock\", \"<p>\");\n } else {\n editor.executeCommand(\"formatBlock\", \"<blockquote>\");\n }\n }\n } else {\n editor.executeCommand(\"formatBlock\", `<${value}>`);\n }\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n const tagName = element.tagName.toLowerCase();\n return (\n headings.includes(tagName) ||\n element.closest(\"blockquote\") !== null ||\n element.closest(\"ul\") !== null ||\n element.closest(\"ol\") !== null\n );\n },\n canExecute: () => true,\n };\n}\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\n\n/**\n * Clear Formatting Plugin - Entfernt alle Formatierungen\n */\nexport const clearFormattingPlugin: Plugin = {\n name: 'clearFormatting',\n type: 'command',\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Formatierung entfernen\"\n aria-label=\"Formatierung entfernen\"\n >\n <IconWrapper icon=\"mdi:format-clear\" width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.clearFormatting();\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0 && !selection.isCollapsed;\n },\n};\n\n","import { IconWrapper } from \"../components/IconWrapper\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\nimport { createCommandPlugin, createInlinePlugin } from \"./base\";\nimport { createBlockFormatPlugin } from \"./blockFormat\";\nimport { clearFormattingPlugin } from \"./clearFormatting\";\n\nconst defaultHeadings = [\"h1\", \"h2\", \"h3\"];\n\n/**\n * Standard-Plugins\n */\nexport const boldPlugin: Plugin = createInlinePlugin(\n \"bold\",\n \"bold\",\n \"mdi:format-bold\",\n \"Fett\"\n);\n\nexport const italicPlugin: Plugin = createInlinePlugin(\n \"italic\",\n \"italic\",\n \"mdi:format-italic\",\n \"Kursiv\"\n);\n\nexport const underlinePlugin: Plugin = createInlinePlugin(\n \"underline\",\n \"underline\",\n \"mdi:format-underline\",\n \"Unterstrichen\"\n);\n\nexport const undoPlugin: Plugin = createCommandPlugin(\n \"undo\",\n \"undo\",\n \"mdi:undo\",\n \"Rückgängig\"\n);\n\nexport const redoPlugin: Plugin = createCommandPlugin(\n \"redo\",\n \"redo\",\n \"mdi:redo\",\n \"Wiederholen\"\n);\n\n/**\n * Indent List Item Plugin (Tab für Unterliste)\n */\nconst indentListItemPlugin: Plugin = {\n name: \"indentListItem\",\n type: \"command\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Einrücken (Unterliste)\"\n aria-label=\"Einrücken (Unterliste)\"\n >\n <IconWrapper\n icon=\"mdi:format-indent-increase\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.indentListItem();\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"li\")\n : (container as HTMLElement).closest(\"li\");\n\n return listItem !== null;\n },\n};\n\n/**\n * Outdent List Item Plugin (Shift+Tab)\n */\nconst outdentListItemPlugin: Plugin = {\n name: \"outdentListItem\",\n type: \"command\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Ausrücken\"\n aria-label=\"Ausrücken\"\n >\n <IconWrapper\n icon=\"mdi:format-indent-decrease\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.outdentListItem();\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"li\")\n : (container as HTMLElement).closest(\"li\");\n\n if (!listItem) return false;\n\n // Prüfe ob in verschachtelter Liste\n const list = listItem.parentElement;\n if (!list || (list.tagName !== \"UL\" && list.tagName !== \"OL\"))\n return false;\n\n const parentListItem = list.parentElement;\n return parentListItem !== null && parentListItem.tagName === \"LI\";\n },\n};\n\n// Export plugins for direct use\nexport { indentListItemPlugin, outdentListItemPlugin };\n\n/**\n * Standard-Plugin-Liste\n * Die Plugins werden hier direkt referenziert, um sicherzustellen, dass sie in defaultPlugins enthalten sind\n */\nconst _indentPlugin = indentListItemPlugin;\nconst _outdentPlugin = outdentListItemPlugin;\n\n/**\n * Standard Block-Format Plugin (Headlines, Listen, Quote in einem Dropdown)\n * Verwendet standardmäßig h1, h2, h3, kann aber über Editor-Props angepasst werden\n */\nconst defaultBlockFormatPlugin = createBlockFormatPlugin(defaultHeadings);\n\nexport const defaultPlugins: Plugin[] = [\n undoPlugin,\n redoPlugin,\n boldPlugin,\n italicPlugin,\n underlinePlugin,\n defaultBlockFormatPlugin,\n clearFormattingPlugin,\n _indentPlugin,\n _outdentPlugin,\n];\n","import { EditorAPI } from '../types';\n\n/**\n * Liest die aktuelle Font-Size aus dem DOM an der Cursor-Position\n */\nexport function getCurrentFontSize(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Element mit fontSize\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n const fontSize = window.getComputedStyle(current).fontSize;\n if (fontSize && fontSize !== 'inherit' && fontSize !== 'initial') {\n // Konvertiere \"16px\" zu \"16\"\n const size = parseInt(fontSize, 10);\n if (!isNaN(size)) {\n return size.toString();\n }\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n/**\n * Liest die aktuelle Textfarbe aus dem DOM an der Cursor-Position\n */\nexport function getCurrentTextColor(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Element mit color\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n // Prüfe zuerst inline style (hat Priorität)\n const inlineColor = current.style.color;\n if (inlineColor && inlineColor.trim()) {\n // Wenn bereits Hex, direkt zurückgeben\n if (inlineColor.startsWith('#')) {\n return inlineColor;\n }\n // Wenn RGB/RGBA, konvertieren\n const rgbMatch = inlineColor.match(/\\d+/g);\n if (rgbMatch && rgbMatch.length >= 3) {\n const hex = '#' + rgbMatch.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n \n // Dann computed style\n const color = window.getComputedStyle(current).color;\n if (color && color !== 'inherit' && color !== 'initial' && color !== 'rgb(0, 0, 0)' && color !== 'rgba(0, 0, 0, 0)') {\n // Konvertiere RGB zu Hex\n const rgb = color.match(/\\d+/g);\n if (rgb && rgb.length >= 3) {\n const hex = '#' + rgb.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n/**\n * Liest die aktuelle Hintergrundfarbe aus dem DOM an der Cursor-Position\n */\nexport function getCurrentBackgroundColor(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Element mit backgroundColor\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n // Prüfe zuerst inline style (hat Priorität)\n const inlineBgColor = current.style.backgroundColor;\n if (inlineBgColor && inlineBgColor.trim()) {\n // Wenn bereits Hex, direkt zurückgeben\n if (inlineBgColor.startsWith('#')) {\n return inlineBgColor;\n }\n // Wenn RGB/RGBA, konvertieren\n const rgbMatch = inlineBgColor.match(/\\d+/g);\n if (rgbMatch && rgbMatch.length >= 3) {\n const hex = '#' + rgbMatch.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n \n // Dann computed style\n const bgColor = window.getComputedStyle(current).backgroundColor;\n if (bgColor && bgColor !== 'inherit' && bgColor !== 'initial' && bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent') {\n // Konvertiere RGB zu Hex\n const rgb = bgColor.match(/\\d+/g);\n if (rgb && rgb.length >= 3) {\n const hex = '#' + rgb.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n/**\n * Liest das aktuelle Heading-Level aus dem DOM an der Cursor-Position\n */\nexport function getCurrentHeading(editor: EditorAPI, availableHeadings: string[]): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Block-Element\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n const tagName = current.tagName.toLowerCase();\n if (availableHeadings.includes(tagName)) {\n return tagName;\n }\n if (tagName === 'p') {\n return 'p';\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { Dropdown } from '../components/Dropdown';\nimport { getCurrentTextColor, getCurrentBackgroundColor } from '../utils/stateReflection';\n\nconst defaultColors = [\n { value: '#000000', label: 'Schwarz', color: '#000000' },\n { value: '#333333', label: 'Dunkelgrau', color: '#333333' },\n { value: '#666666', label: 'Grau', color: '#666666' },\n { value: '#ff0000', label: 'Rot', color: '#ff0000' },\n { value: '#0000ff', label: 'Blau', color: '#0000ff' },\n { value: '#00aa00', label: 'Grün', color: '#00aa00' },\n { value: '#ffaa00', label: 'Orange', color: '#ffaa00' },\n { value: '#aa00ff', label: 'Lila', color: '#aa00ff' },\n];\n\nexport function createTextColorPlugin(colors: string[] = defaultColors.map(c => c.value)): Plugin {\n // Finde Labels für bekannte Farben\n const getColorLabel = (color: string): string => {\n const found = defaultColors.find(c => c.value.toLowerCase() === color.toLowerCase());\n return found ? found.label : color;\n };\n \n const colorOptions = colors.map(color => ({\n value: color,\n label: getColorLabel(color),\n color,\n }));\n\n return {\n name: 'textColor',\n type: 'inline',\n renderButton: (props: ButtonProps & { onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n // Aktuelle Textfarbe aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentTextColor(props.editorAPI) : undefined);\n \n return (\n <Dropdown\n icon=\"mdi:format-color-text\"\n label=\"Textfarbe\"\n options={colorOptions.map(opt => ({\n value: opt.value,\n label: opt.label,\n color: opt.color,\n }))}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (value) {\n editor.executeCommand('foreColor', value);\n }\n },\n canExecute: () => true,\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentTextColor(editor);\n },\n };\n}\n\nexport function createBackgroundColorPlugin(colors: string[] = defaultColors.map(c => c.value)): Plugin {\n // Finde Labels für bekannte Farben\n const getColorLabel = (color: string): string => {\n const found = defaultColors.find(c => c.value.toLowerCase() === color.toLowerCase());\n return found ? found.label : color;\n };\n \n const colorOptions = colors.map(color => ({\n value: color,\n label: getColorLabel(color),\n color,\n }));\n\n return {\n name: 'backgroundColor',\n type: 'inline',\n renderButton: (props: ButtonProps & { onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n // Aktuelle Hintergrundfarbe aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentBackgroundColor(props.editorAPI) : undefined);\n \n return (\n <Dropdown\n icon=\"mdi:format-color-fill\"\n label=\"Hintergrundfarbe\"\n options={colorOptions.map(opt => ({\n value: opt.value,\n label: opt.label,\n color: opt.color,\n }))}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (value) {\n editor.executeCommand('backColor', value);\n }\n },\n canExecute: () => true,\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentBackgroundColor(editor);\n },\n };\n}\n\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { Dropdown } from '../components/Dropdown';\nimport { getCurrentFontSize } from '../utils/stateReflection';\n\nexport function createFontSizePlugin(fontSizes: number[] = [12, 14, 16, 18, 20, 24]): Plugin {\n return {\n name: 'fontSize',\n type: 'inline',\n renderButton: (props: ButtonProps & { fontSizes?: number[]; onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n const sizes = props.fontSizes || fontSizes;\n const options = sizes.map(size => ({\n value: size.toString(),\n label: `${size}px`,\n preview: size.toString(),\n }));\n\n // Aktuelle Font-Size aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentFontSize(props.editorAPI) : undefined);\n\n return (\n <Dropdown\n icon=\"mdi:format-size\"\n label=\"Schriftgröße\"\n options={options}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentFontSize(editor);\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (value) {\n // Setze inline style für präzise Größe\n const selection = editor.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n let element: HTMLElement | null = null;\n \n if (range.commonAncestorContainer.nodeType === Node.TEXT_NODE) {\n element = range.commonAncestorContainer.parentElement;\n } else {\n element = range.commonAncestorContainer as HTMLElement;\n }\n \n if (element) {\n // Erstelle oder aktualisiere span mit fontSize\n const span = document.createElement('span');\n span.style.fontSize = `${value}px`;\n \n try {\n range.surroundContents(span);\n } catch (e) {\n // Falls surroundContents fehlschlägt\n const contents = range.extractContents();\n span.appendChild(contents);\n range.insertNode(span);\n }\n \n // Cursor setzen\n range.setStartAfter(span);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n }\n },\n canExecute: () => true,\n };\n}\n\n","import React, { useState, useRef } from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\n\n/**\n * Image-Plugin mit URL-Eingabe und File-Upload\n */\nexport function createImagePlugin(onImageUpload?: (file: File) => Promise<string>): Plugin {\n return {\n name: 'image',\n type: 'block',\n renderButton: (props: ButtonProps & { editorAPI?: EditorAPI }) => {\n const [showModal, setShowModal] = useState(false);\n const [imageUrl, setImageUrl] = useState('');\n const [altText, setAltText] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleInsertImage = () => {\n if (!props.editorAPI) return;\n \n const src = imageUrl.trim();\n \n if (!src) {\n alert('Bitte geben Sie eine Bild-URL ein');\n return;\n }\n\n // Verwende executeCommand, das alles korrekt handhabt\n // Alt-Text wird später über das Datenmodell gespeichert\n props.editorAPI.executeCommand('insertImage', src);\n\n // Modal schließen\n setShowModal(false);\n setImageUrl('');\n setAltText('');\n };\n\n const handleFileSelect = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file || !onImageUpload) return;\n\n if (!file.type.startsWith('image/')) {\n alert('Bitte wählen Sie eine Bilddatei aus');\n return;\n }\n\n setIsUploading(true);\n\n try {\n const uploadedUrl = await onImageUpload(file);\n setImageUrl(uploadedUrl);\n } catch (error) {\n console.error('Image upload failed:', error);\n alert('Fehler beim Hochladen des Bildes');\n } finally {\n setIsUploading(false);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }\n };\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setShowModal(true)}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Bild einfügen\"\n aria-label=\"Bild einfügen\"\n >\n <IconWrapper icon=\"mdi:image\" width={18} height={18} />\n </button>\n\n {showModal && (\n <div\n className=\"rte-image-modal-overlay\"\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n setShowModal(false);\n }\n }}\n >\n <div className=\"rte-image-modal\">\n <div className=\"rte-image-modal-header\">\n <h3>Bild einfügen</h3>\n <button\n type=\"button\"\n onClick={() => setShowModal(false)}\n className=\"rte-image-modal-close\"\n aria-label=\"Schließen\"\n >\n <IconWrapper icon=\"mdi:close\" width={20} height={20} />\n </button>\n </div>\n\n <div className=\"rte-image-modal-content\">\n {onImageUpload && (\n <div className=\"rte-image-upload-section\">\n <label className=\"rte-image-upload-label\">\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n />\n <div className=\"rte-image-upload-button\">\n {isUploading ? (\n <>\n <IconWrapper icon=\"mdi:loading\" width={24} height={24} className=\"rte-spin\" />\n <span>Wird hochgeladen...</span>\n </>\n ) : (\n <>\n <IconWrapper icon=\"mdi:upload\" width={24} height={24} />\n <span>Datei auswählen</span>\n </>\n )}\n </div>\n </label>\n </div>\n )}\n\n <div className=\"rte-image-url-section\">\n <label>\n Bild-URL\n <input\n type=\"url\"\n value={imageUrl}\n onChange={(e) => setImageUrl(e.target.value)}\n placeholder=\"https://example.com/image.jpg\"\n className=\"rte-image-url-input\"\n />\n </label>\n </div>\n\n <div className=\"rte-image-alt-section\">\n <label>\n Alt-Text (optional)\n <input\n type=\"text\"\n value={altText}\n onChange={(e) => setAltText(e.target.value)}\n placeholder=\"Bildbeschreibung\"\n className=\"rte-image-alt-input\"\n />\n </label>\n </div>\n\n {imageUrl && (\n <div className=\"rte-image-preview\">\n <img src={imageUrl} alt={altText || 'Preview'} />\n </div>\n )}\n </div>\n\n <div className=\"rte-image-modal-footer\">\n <button\n type=\"button\"\n onClick={() => setShowModal(false)}\n className=\"rte-image-modal-cancel\"\n >\n Abbrechen\n </button>\n <button\n type=\"button\"\n onClick={handleInsertImage}\n disabled={!imageUrl.trim() || isUploading}\n className=\"rte-image-modal-insert\"\n >\n Einfügen\n </button>\n </div>\n </div>\n </div>\n )}\n </>\n );\n },\n execute: (editor: EditorAPI) => {\n // Wird über renderButton gehandhabt\n },\n canExecute: () => true,\n };\n}\n\n","/**\n * Entfernt alle Formatierungen aus der aktuellen Selection\n */\nexport function clearFormatting(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n \n // Wenn Selection leer ist, nichts zu tun\n if (range.collapsed) return;\n\n try {\n // Verwende document.execCommand für Standard-Formatierungen\n document.execCommand('removeFormat', false);\n document.execCommand('unlink', false);\n \n // Entferne alle inline styles und Formatierungen manuell\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el)) {\n const tagName = el.tagName.toLowerCase();\n \n // Entferne Inline-Formatierungen (strong, em, u, span, a, etc.)\n if (['strong', 'b', 'em', 'i', 'u', 'span', 'a', 'font'].includes(tagName)) {\n // Ersetze durch Text-Node\n const text = el.textContent || '';\n const textNode = document.createTextNode(text);\n el.parentNode?.replaceChild(textNode, el);\n }\n \n // Entferne alle Styles\n if (el.style.length > 0) {\n el.removeAttribute('style');\n }\n \n // Konvertiere Headings zu Paragraphs\n if (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tagName)) {\n const p = document.createElement('p');\n while (el.firstChild) {\n p.appendChild(el.firstChild);\n }\n el.parentNode?.replaceChild(p, el);\n }\n }\n }\n node = walker.nextNode();\n }\n \n // Normalisiere: Entferne leere Formatierungs-Tags\n const normalizeWalker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n node = normalizeWalker.currentNode as Node;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n \n if (['strong', 'b', 'em', 'i', 'u', 'span'].includes(tagName) && !el.textContent?.trim()) {\n el.parentNode?.removeChild(el);\n }\n }\n node = normalizeWalker.nextNode();\n }\n \n } catch (error) {\n console.error('Error clearing formatting:', error);\n // Fallback: Einfache Methode\n document.execCommand('removeFormat', false);\n document.execCommand('unlink', false);\n }\n}\n\n/**\n * Entfernt nur Textfarbe\n */\nexport function clearTextColor(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n \n // Finde alle Elemente mit color style\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el) && el.style.color) {\n elements.push(el);\n }\n }\n node = walker.nextNode();\n }\n \n elements.forEach(el => {\n el.style.color = '';\n if (!el.style.length) {\n el.removeAttribute('style');\n }\n });\n}\n\n/**\n * Entfernt nur Hintergrundfarbe\n */\nexport function clearBackgroundColor(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n \n // Finde alle Elemente mit backgroundColor style\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el) && el.style.backgroundColor) {\n elements.push(el);\n }\n }\n node = walker.nextNode();\n }\n \n elements.forEach(el => {\n el.style.backgroundColor = '';\n if (!el.style.length) {\n el.removeAttribute('style');\n }\n });\n}\n\n/**\n * Entfernt nur Font-Size\n */\nexport function clearFontSize(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n \n // Finde alle Elemente mit fontSize style\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el) && el.style.fontSize) {\n elements.push(el);\n }\n }\n node = walker.nextNode();\n }\n \n elements.forEach(el => {\n el.style.fontSize = '';\n if (!el.style.length) {\n el.removeAttribute('style');\n }\n });\n}\n\n/**\n * Entfernt Links (behält Text)\n */\nexport function clearLinks(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n \n // Finde alle Links in der Selection\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode: (node: Node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (el.tagName.toLowerCase() === 'a' && range.intersectsNode(el)) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n }\n );\n \n const links: HTMLAnchorElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE && (node as HTMLElement).tagName.toLowerCase() === 'a') {\n links.push(node as HTMLAnchorElement);\n }\n node = walker.nextNode();\n }\n \n // Entferne Links (behält Text)\n links.forEach(link => {\n const parent = link.parentNode;\n if (parent) {\n while (link.firstChild) {\n parent.insertBefore(link.firstChild, link);\n }\n parent.removeChild(link);\n }\n });\n}\n\n","import React from \"react\";\nimport { EditorContent, EditorNode } from \"../types\";\n\nexport function domToContent(element: HTMLElement): EditorContent {\n const blocks: EditorNode[] = [];\n\n function processNode(node: Node): EditorNode | null {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent;\n if (text === null || text === undefined) return null;\n return { type: \"text\", text };\n }\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n\n if (tagName === \"img\") {\n const attributes: Record<string, string> = {};\n const src = el.getAttribute(\"src\");\n const alt = el.getAttribute(\"alt\");\n if (src) attributes.src = src;\n if (alt) attributes.alt = alt;\n return {\n type: \"image\",\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n if (\n [\n \"p\",\n \"div\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"blockquote\",\n \"ul\",\n \"ol\",\n \"li\",\n ].includes(tagName)\n ) {\n const children: EditorNode[] = [];\n Array.from(el.childNodes).forEach((child) => {\n const processed = processNode(child);\n if (processed) children.push(processed);\n });\n\n const attributes: Record<string, string> = {};\n if (tagName === \"a\") {\n const href = el.getAttribute(\"href\");\n if (href) attributes.href = href;\n }\n\n return {\n type: tagName,\n children: children.length > 0 ? children : [],\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n if (\n [\"strong\", \"b\", \"em\", \"i\", \"u\", \"a\", \"span\"].includes(tagName)\n ) {\n const children: EditorNode[] = [];\n Array.from(el.childNodes).forEach((child) => {\n const processed = processNode(child);\n if (processed) children.push(processed);\n });\n\n const attributes: Record<string, string> = {};\n\n Array.from(el.attributes).forEach((attr) => {\n attributes[attr.name] = attr.value;\n });\n\n if (tagName === \"a\") {\n const href = el.getAttribute(\"href\");\n if (href) attributes.href = href;\n return {\n type: \"link\",\n children: children.length > 0 ? children : undefined,\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n if (tagName === \"span\") {\n const style = el.getAttribute(\"style\");\n if (style) {\n const styleObj: Record<string, string> = {};\n style.split(\";\").forEach((rule) => {\n const [key, value] = rule\n .split(\":\")\n .map((s) => s.trim());\n if (key && value) {\n if (key === \"font-size\") {\n attributes.fontSize = value;\n } else if (key === \"color\") {\n attributes.color = value;\n } else if (key === \"background-color\") {\n attributes.backgroundColor = value;\n }\n }\n });\n }\n }\n\n return {\n type:\n tagName === \"strong\" || tagName === \"b\"\n ? \"bold\"\n : tagName === \"em\" || tagName === \"i\"\n ? \"italic\"\n : tagName === \"u\"\n ? \"underline\"\n : tagName,\n children: children.length > 0 ? children : undefined,\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n const children: EditorNode[] = [];\n Array.from(el.childNodes).forEach((child) => {\n const processed = processNode(child);\n if (processed) children.push(processed);\n });\n\n if (children.length > 0) {\n return {\n type: tagName,\n children,\n };\n }\n }\n\n return null;\n }\n\n Array.from(element.childNodes).forEach((node) => {\n const processed = processNode(node);\n if (processed) {\n if (processed.type === \"text\") {\n blocks.push({ type: \"p\", children: [processed] });\n } else {\n blocks.push(processed);\n }\n }\n });\n\n if (blocks.length === 0) {\n blocks.push({ type: \"p\", children: [] });\n }\n\n return { blocks };\n}\n\nexport function contentToDOM(\n content: EditorContent,\n container: HTMLElement,\n customLinkComponent?: React.ComponentType<{\n href: string;\n children: React.ReactNode;\n [key: string]: any;\n }>,\n customHeadingRenderer?: (\n level: string,\n children: React.ReactNode\n ) => React.ReactElement\n): void {\n container.innerHTML = \"\";\n\n function createNode(node: EditorNode): Node {\n if (node.type === \"text\" && node.text !== undefined) {\n return document.createTextNode(node.text);\n }\n\n if (node.type === \"image\") {\n const img = document.createElement(\"img\");\n if (node.attributes) {\n if (node.attributes.src)\n img.setAttribute(\"src\", node.attributes.src);\n if (node.attributes.alt)\n img.setAttribute(\"alt\", node.attributes.alt);\n if (node.attributes.uploading === \"true\") {\n img.setAttribute(\"data-uploading\", \"true\");\n }\n }\n img.style.maxWidth = \"100%\";\n img.style.height = \"auto\";\n img.style.display = \"block\";\n img.style.margin = \"16px 0\";\n return img;\n }\n\n const tagMap: Record<string, string> = {\n bold: \"strong\",\n italic: \"em\",\n underline: \"u\",\n link: \"a\",\n };\n\n let tagName = tagMap[node.type] || node.type;\n\n if (node.type === \"link\" && customLinkComponent) {\n tagName = \"a\";\n if (node.attributes) {\n node.attributes[\"data-custom-link\"] = \"true\";\n }\n }\n\n const element = document.createElement(tagName);\n\n if (node.attributes) {\n Object.entries(node.attributes).forEach(([key, value]) => {\n if (\n key === \"fontSize\" ||\n key === \"color\" ||\n key === \"backgroundColor\"\n ) {\n const currentStyle = element.getAttribute(\"style\") || \"\";\n if (key === \"fontSize\") {\n element.setAttribute(\n \"style\",\n `${currentStyle}font-size: ${value};`.trim()\n );\n } else if (key === \"color\") {\n element.setAttribute(\n \"style\",\n `${currentStyle}color: ${value};`.trim()\n );\n } else if (key === \"backgroundColor\") {\n element.setAttribute(\n \"style\",\n `${currentStyle}background-color: ${value};`.trim()\n );\n }\n } else {\n element.setAttribute(key, value);\n }\n });\n }\n\n if (node.children) {\n node.children.forEach((child) => {\n const childNode = createNode(child);\n element.appendChild(childNode);\n });\n }\n\n return element;\n }\n\n content.blocks.forEach((block) => {\n const blockNode = createNode(block);\n container.appendChild(blockNode);\n });\n}\n\nexport function createEmptyContent(): EditorContent {\n return {\n blocks: [{ type: \"p\", children: [] }],\n };\n}\n\nexport function htmlToContent(htmlString: string): EditorContent {\n const tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = htmlString.trim();\n return domToContent(tempDiv);\n}\n\nexport function contentToHTML(content: EditorContent): string {\n const tempDiv = document.createElement(\"div\");\n contentToDOM(content, tempDiv);\n return tempDiv.innerHTML;\n}\n","import { EditorContent } from '../types';\n\nexport class HistoryManager {\n private history: EditorContent[] = [];\n private currentIndex: number = -1;\n private maxHistorySize: number = 50;\n\n push(content: EditorContent): void {\n // Entferne alle Einträge nach currentIndex (wenn wir zurückgegangen sind)\n this.history = this.history.slice(0, this.currentIndex + 1);\n \n // Füge neuen Eintrag hinzu\n this.history.push(JSON.parse(JSON.stringify(content))); // Deep clone\n this.currentIndex++;\n \n // Begrenze die Historie\n if (this.history.length > this.maxHistorySize) {\n this.history.shift();\n this.currentIndex--;\n }\n }\n\n undo(): EditorContent | null {\n if (this.canUndo()) {\n this.currentIndex--;\n return JSON.parse(JSON.stringify(this.history[this.currentIndex]));\n }\n return null;\n }\n\n redo(): EditorContent | null {\n if (this.canRedo()) {\n this.currentIndex++;\n return JSON.parse(JSON.stringify(this.history[this.currentIndex]));\n }\n return null;\n }\n\n canUndo(): boolean {\n return this.currentIndex > 0;\n }\n\n canRedo(): boolean {\n return this.currentIndex < this.history.length - 1;\n }\n\n getCurrent(): EditorContent | null {\n if (this.currentIndex >= 0 && this.currentIndex < this.history.length) {\n return JSON.parse(JSON.stringify(this.history[this.currentIndex]));\n }\n return null;\n }\n\n reset(): void {\n this.history = [];\n this.currentIndex = -1;\n }\n}\n\n","/**\n * Erhöht den Einrückungs-Level eines List-Items (Tab)\n */\nexport function indentListItem(selection: Selection): boolean {\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem = container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest('li')\n : (container as HTMLElement).closest('li');\n\n if (!listItem) return false;\n\n const list = listItem.parentElement;\n if (!list || (list.tagName !== 'UL' && list.tagName !== 'OL')) return false;\n\n // Prüfe ob bereits verschachtelt (max depth check)\n let depth = 0;\n let current: HTMLElement | null = listItem;\n while (current) {\n const parent: HTMLElement | null = current.parentElement;\n if (parent && (parent.tagName === 'UL' || parent.tagName === 'OL')) {\n depth++;\n current = parent.closest('li');\n } else {\n break;\n }\n }\n\n // Max depth: 6 (wie in HTML Standard)\n if (depth >= 6) return false;\n\n // Finde vorheriges List-Item\n const previousItem = listItem.previousElementSibling as HTMLElement | null;\n \n if (previousItem && previousItem.tagName === 'LI') {\n // Erstelle verschachtelte Liste im vorherigen Item\n let nestedList = previousItem.querySelector('ul, ol');\n \n if (!nestedList) {\n // Erstelle neue verschachtelte Liste\n nestedList = document.createElement(list.tagName.toLowerCase() as 'ul' | 'ol');\n previousItem.appendChild(nestedList);\n }\n \n // Verschiebe aktuelles Item in verschachtelte Liste\n nestedList.appendChild(listItem);\n \n // Cursor setzen\n const textNode = listItem.firstChild;\n if (textNode && textNode.nodeType === Node.TEXT_NODE) {\n range.setStart(textNode, 0);\n range.collapse(true);\n } else if (listItem.firstChild) {\n range.setStart(listItem.firstChild, 0);\n range.collapse(true);\n } else {\n const newText = document.createTextNode('');\n listItem.appendChild(newText);\n range.setStart(newText, 0);\n range.collapse(true);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n \n return true;\n } else {\n // Kein vorheriges Item - erstelle neue verschachtelte Liste im aktuellen Item\n const nestedList = document.createElement(list.tagName.toLowerCase() as 'ul' | 'ol');\n \n // Verschiebe alle nachfolgenden Items in die verschachtelte Liste\n let nextSibling = listItem.nextElementSibling;\n while (nextSibling && nextSibling.tagName === 'LI') {\n const toMove = nextSibling;\n nextSibling = nextSibling.nextElementSibling;\n nestedList.appendChild(toMove);\n }\n \n if (nestedList.children.length > 0) {\n listItem.appendChild(nestedList);\n } else {\n // Wenn keine nachfolgenden Items, erstelle leeres Sub-Item\n const subItem = document.createElement('li');\n nestedList.appendChild(subItem);\n listItem.appendChild(nestedList);\n \n // Cursor ins Sub-Item setzen\n const newText = document.createTextNode('');\n subItem.appendChild(newText);\n range.setStart(newText, 0);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n \n return true;\n }\n}\n\n/**\n * Reduziert den Einrückungs-Level eines List-Items (Shift+Tab)\n */\nexport function outdentListItem(selection: Selection): boolean {\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem = container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest('li')\n : (container as HTMLElement).closest('li');\n\n if (!listItem) return false;\n\n const list = listItem.parentElement;\n if (!list || (list.tagName !== 'UL' && list.tagName !== 'OL')) return false;\n\n // Prüfe ob in verschachtelter Liste\n const parentListItem = list.parentElement;\n if (!parentListItem || parentListItem.tagName !== 'LI') {\n // Bereits auf oberstem Level\n return false;\n }\n\n const parentList = parentListItem.parentElement;\n if (!parentList || (parentList.tagName !== 'UL' && parentList.tagName !== 'OL')) {\n return false;\n }\n\n // Verschiebe Item auf oberes Level\n // Finde Position nach dem Parent-Item\n const insertAfter = parentListItem;\n \n // Verschiebe Item und alle nachfolgenden Items aus der verschachtelten Liste\n const itemsToMove: HTMLElement[] = [listItem];\n let nextSibling = listItem.nextElementSibling;\n while (nextSibling && nextSibling.tagName === 'LI') {\n itemsToMove.push(nextSibling as HTMLElement);\n nextSibling = nextSibling.nextElementSibling;\n }\n\n // Füge Items nach dem Parent-Item ein\n itemsToMove.forEach(item => {\n parentList.insertBefore(item, insertAfter.nextSibling);\n });\n\n // Entferne leere verschachtelte Liste\n if (list.children.length === 0) {\n list.remove();\n }\n\n // Cursor setzen\n const textNode = listItem.firstChild;\n if (textNode && textNode.nodeType === Node.TEXT_NODE) {\n range.setStart(textNode, 0);\n range.collapse(true);\n } else if (listItem.firstChild) {\n range.setStart(listItem.firstChild, 0);\n range.collapse(true);\n } else {\n const newText = document.createTextNode('');\n listItem.appendChild(newText);\n range.setStart(newText, 0);\n range.collapse(true);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n\n return true;\n}\n\n","import React, { useEffect, useState } from \"react\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\n\ninterface ToolbarProps {\n plugins: Plugin[];\n editorAPI: EditorAPI;\n className?: string;\n}\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n plugins,\n editorAPI,\n className,\n}) => {\n const [updateTrigger, setUpdateTrigger] = useState(0);\n const [isClient, setIsClient] = useState(false);\n\n useEffect(() => {\n setIsClient(true);\n \n const handleSelectionChange = () => {\n setUpdateTrigger((prev) => prev + 1);\n };\n\n const handleMouseUp = () => {\n setTimeout(handleSelectionChange, 10);\n };\n\n const handleKeyUp = () => {\n setTimeout(handleSelectionChange, 10);\n };\n\n if (typeof document !== 'undefined') {\n document.addEventListener(\"selectionchange\", handleSelectionChange);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"keyup\", handleKeyUp);\n }\n\n return () => {\n if (typeof document !== 'undefined') {\n document.removeEventListener(\n \"selectionchange\",\n handleSelectionChange\n );\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"keyup\", handleKeyUp);\n }\n };\n }, []);\n\n const handlePluginClick = (plugin: Plugin, value?: string) => {\n if (plugin.canExecute?.(editorAPI) !== false) {\n if (plugin.execute) {\n plugin.execute(editorAPI, value);\n } else if (plugin.command && value !== undefined) {\n editorAPI.executeCommand(plugin.command, value);\n } else if (plugin.command) {\n editorAPI.executeCommand(plugin.command);\n }\n setTimeout(() => setUpdateTrigger((prev) => prev + 1), 50);\n }\n };\n\n const leftPlugins = plugins.filter((p) => p.name !== \"clearFormatting\");\n const clearFormattingPlugin = plugins.find(\n (p) => p.name === \"clearFormatting\"\n );\n\n return (\n <div className={`rte-toolbar rte-toolbar-sticky ${className || \"\"}`}>\n <div className=\"rte-toolbar-left\">\n {leftPlugins.map((plugin) => {\n if (!plugin.renderButton) return null;\n\n const isActive = isClient && plugin.isActive\n ? plugin.isActive(editorAPI)\n : false;\n const canExecute = isClient && plugin.canExecute\n ? plugin.canExecute(editorAPI)\n : true;\n\n const currentValue = isClient && plugin.getCurrentValue\n ? plugin.getCurrentValue(editorAPI)\n : undefined;\n\n const buttonProps: ButtonProps & { [key: string]: any } = {\n isActive,\n onClick: () => handlePluginClick(plugin),\n disabled: !canExecute,\n onSelect: (value: string) =>\n handlePluginClick(plugin, value),\n editorAPI,\n currentValue,\n };\n\n return (\n <React.Fragment key={plugin.name}>\n {plugin.renderButton(buttonProps)}\n </React.Fragment>\n );\n })}\n </div>\n\n {clearFormattingPlugin && clearFormattingPlugin.renderButton && (\n <div className=\"rte-toolbar-right\">\n <div className=\"rte-toolbar-divider\" />\n {(() => {\n const isActive = isClient && clearFormattingPlugin.isActive\n ? clearFormattingPlugin.isActive(editorAPI)\n : false;\n const canExecute = isClient && clearFormattingPlugin.canExecute\n ? clearFormattingPlugin.canExecute(editorAPI)\n : true;\n\n const buttonProps: ButtonProps & {\n [key: string]: any;\n } = {\n isActive,\n onClick: () =>\n handlePluginClick(clearFormattingPlugin),\n disabled: !canExecute,\n editorAPI,\n };\n\n return (\n <React.Fragment key={clearFormattingPlugin.name}>\n {clearFormattingPlugin.renderButton(\n buttonProps\n )}\n </React.Fragment>\n );\n })()}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { defaultPlugins } from \"../plugins\";\nimport { createBlockFormatPlugin } from \"../plugins/blockFormat\";\nimport {\n createBackgroundColorPlugin,\n createTextColorPlugin,\n} from \"../plugins/colors\";\nimport { createFontSizePlugin } from \"../plugins/fontSize\";\nimport { createImagePlugin } from \"../plugins/image\";\nimport { EditorAPI, EditorContent, EditorProps } from \"../types\";\nimport {\n clearBackgroundColor,\n clearFontSize,\n clearFormatting,\n clearLinks,\n clearTextColor,\n} from \"../utils/clearFormatting\";\nimport {\n contentToDOM,\n contentToHTML,\n createEmptyContent,\n domToContent,\n htmlToContent,\n} from \"../utils/content\";\nimport { HistoryManager } from \"../utils/history\";\nimport { indentListItem, outdentListItem } from \"../utils/listIndent\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport const Editor: React.FC<EditorProps> = ({\n initialContent,\n onChange,\n plugins: providedPlugins,\n placeholder = \"Text eingeben...\",\n className,\n toolbarClassName,\n editorClassName,\n fontSizes,\n colors,\n headings,\n customLinkComponent,\n customHeadingRenderer,\n customRenderer,\n onEditorAPIReady,\n theme,\n onImageUpload,\n}) => {\n const plugins = useMemo(() => {\n const allPlugins = [...(providedPlugins || defaultPlugins)];\n\n if (fontSizes && fontSizes.length > 0) {\n allPlugins.push(createFontSizePlugin(fontSizes));\n }\n\n if (colors && colors.length > 0) {\n allPlugins.push(createTextColorPlugin(colors));\n allPlugins.push(createBackgroundColorPlugin(colors));\n }\n\n // BlockFormat Plugin ist bereits in defaultPlugins enthalten\n // Wenn custom headings angegeben sind, ersetze das Standard-Plugin\n if (headings && headings.length > 0) {\n // Entferne das Standard-BlockFormat-Plugin\n const blockFormatIndex = allPlugins.findIndex(\n (p) => p.name === \"blockFormat\"\n );\n if (blockFormatIndex !== -1) {\n allPlugins.splice(blockFormatIndex, 1);\n }\n // Füge das Plugin mit custom Headlines hinzu\n allPlugins.push(createBlockFormatPlugin(headings));\n }\n\n allPlugins.push(createImagePlugin(onImageUpload));\n\n return allPlugins;\n }, [providedPlugins, fontSizes, colors, headings, onImageUpload]);\n const editorRef = useRef<HTMLDivElement>(null);\n const historyRef = useRef<HistoryManager>(new HistoryManager());\n const isUpdatingRef = useRef(false);\n\n const notifyChange = useCallback(\n (content: EditorContent) => {\n if (onChange && !isUpdatingRef.current) {\n onChange(content);\n }\n },\n [onChange]\n );\n\n const restoreSelection = useCallback((editor: HTMLElement) => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\")\n return;\n const range = document.createRange();\n const selection = window.getSelection();\n\n if (editor.firstChild) {\n range.setStart(editor.firstChild, 0);\n range.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }, []);\n\n const editorAPI = useMemo<EditorAPI>(() => {\n const executeCommand = (command: string, value?: string): boolean => {\n const editor = editorRef.current;\n if (!editor) return false;\n\n if (\n command !== \"undo\" &&\n command !== \"redo\" &&\n command !== \"insertImage\"\n ) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n }\n\n if (command === \"undo\") {\n const content = historyRef.current.undo();\n if (content && editor) {\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n restoreSelection(editor);\n isUpdatingRef.current = false;\n notifyChange(content);\n }\n return true;\n }\n\n if (command === \"redo\") {\n const content = historyRef.current.redo();\n if (content && editor) {\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n restoreSelection(editor);\n isUpdatingRef.current = false;\n notifyChange(content);\n }\n return true;\n }\n\n if (command === \"insertImage\" && value) {\n let selection = window.getSelection();\n if (!selection) return false;\n\n if (document.activeElement !== editor) {\n editor.focus();\n }\n\n if (selection.rangeCount === 0) {\n const range = document.createRange();\n if (editor.childNodes.length > 0) {\n const lastChild =\n editor.childNodes[editor.childNodes.length - 1];\n range.setStartAfter(lastChild);\n range.collapse(true);\n } else {\n const img = document.createElement(\"img\");\n img.setAttribute(\"src\", value);\n img.setAttribute(\"alt\", \"\");\n img.style.maxWidth = \"100%\";\n img.style.height = \"auto\";\n img.style.display = \"block\";\n img.style.margin = \"16px 0\";\n editor.appendChild(img);\n\n const newRange = document.createRange();\n newRange.setStartAfter(img);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n isUpdatingRef.current = true;\n setTimeout(() => {\n if (editor) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n isUpdatingRef.current = false;\n notifyChange(currentContent);\n }\n }, 0);\n return true;\n }\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n if (selection.rangeCount === 0) return false;\n const range = selection.getRangeAt(0);\n\n const container = range.commonAncestorContainer;\n let parentElement: HTMLElement | null = null;\n\n if (container.nodeType === Node.TEXT_NODE) {\n parentElement = container.parentElement;\n } else if (container.nodeType === Node.ELEMENT_NODE) {\n parentElement = container as HTMLElement;\n }\n\n const img = document.createElement(\"img\");\n img.setAttribute(\"src\", value);\n img.setAttribute(\"alt\", \"\");\n img.style.maxWidth = \"100%\";\n img.style.height = \"auto\";\n img.style.display = \"block\";\n img.style.margin = \"16px 0\";\n\n if (\n parentElement &&\n parentElement !== editor &&\n (parentElement.tagName === \"P\" ||\n parentElement.tagName === \"DIV\" ||\n parentElement.tagName === \"H1\" ||\n parentElement.tagName === \"H2\" ||\n parentElement.tagName === \"H3\" ||\n parentElement.tagName === \"H4\" ||\n parentElement.tagName === \"H5\" ||\n parentElement.tagName === \"H6\")\n ) {\n if (parentElement.nextSibling) {\n editor.insertBefore(img, parentElement.nextSibling);\n } else {\n editor.appendChild(img);\n }\n } else {\n try {\n range.insertNode(img);\n } catch (e) {\n editor.appendChild(img);\n }\n }\n\n const newRange = document.createRange();\n newRange.setStartAfter(img);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n isUpdatingRef.current = true;\n setTimeout(() => {\n if (editor) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n isUpdatingRef.current = false;\n notifyChange(currentContent);\n }\n }, 0);\n\n return true;\n }\n\n const selection = window.getSelection();\n let savedRange: Range | null = null;\n\n if (selection && selection.rangeCount > 0) {\n savedRange = selection.getRangeAt(0).cloneRange();\n }\n\n if (document.activeElement !== editor) {\n editor.focus();\n }\n\n if (!selection || selection.rangeCount === 0) {\n const range = document.createRange();\n\n if (editor.childNodes.length > 0) {\n const lastChild =\n editor.childNodes[editor.childNodes.length - 1];\n if (lastChild.nodeType === Node.TEXT_NODE) {\n range.setStart(\n lastChild,\n lastChild.textContent?.length || 0\n );\n range.setEnd(\n lastChild,\n lastChild.textContent?.length || 0\n );\n } else {\n range.selectNodeContents(lastChild);\n range.collapse(false);\n }\n } else {\n const p = document.createElement(\"p\");\n editor.appendChild(p);\n const textNode = document.createTextNode(\"\");\n p.appendChild(textNode);\n range.setStart(textNode, 0);\n range.setEnd(textNode, 0);\n }\n\n selection?.removeAllRanges();\n selection?.addRange(range);\n } else if (savedRange) {\n selection.removeAllRanges();\n selection.addRange(savedRange);\n }\n\n document.execCommand(command, false, value);\n\n setTimeout(() => {\n if (editor && !isUpdatingRef.current) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n\n return true;\n };\n\n return {\n executeCommand,\n\n getSelection: (): Selection | null => {\n if (typeof window === \"undefined\") return null;\n return window.getSelection();\n },\n\n getContent: (): EditorContent => {\n const editor = editorRef.current;\n if (!editor) return createEmptyContent();\n return domToContent(editor);\n },\n\n setContent: (content: EditorContent): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n notifyChange(content);\n },\n\n insertBlock: (\n type: string,\n attributes?: Record<string, string>\n ): void => {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const block = document.createElement(type);\n\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n block.setAttribute(key, value);\n });\n }\n\n range.insertNode(block);\n const textNode = document.createTextNode(\"\\u200B\"); // Zero-width space\n block.appendChild(textNode);\n\n // Cursor setzen\n range.setStartAfter(textNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n\n const editor = editorRef.current;\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n },\n\n insertInline: (\n type: string,\n attributes?: Record<string, string>\n ): void => {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const inline = document.createElement(type);\n\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n inline.setAttribute(key, value);\n });\n }\n\n try {\n range.surroundContents(inline);\n } catch (e) {\n // Falls surroundContents fehlschlägt, versuche es anders\n const contents = range.extractContents();\n inline.appendChild(contents);\n range.insertNode(inline);\n }\n\n // Cursor setzen\n range.setStartAfter(inline);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n\n const editor = editorRef.current;\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n },\n\n undo: (): void => {\n executeCommand(\"undo\");\n },\n\n redo: (): void => {\n executeCommand(\"redo\");\n },\n\n canUndo: (): boolean => {\n return historyRef.current.canUndo();\n },\n\n canRedo: (): boolean => {\n return historyRef.current.canRedo();\n },\n\n importHtml: (htmlString: string): EditorContent => {\n const content = htmlToContent(htmlString);\n const editor = editorRef.current;\n if (editor) {\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n notifyChange(content);\n }\n return content;\n },\n\n exportHtml: (): string => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n const content = domToContent(editor);\n return contentToHTML(content);\n },\n\n clearFormatting: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n clearFormatting(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n\n clearTextColor: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n clearTextColor(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n\n clearBackgroundColor: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n clearBackgroundColor(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n\n clearFontSize: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n clearFontSize(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n\n clearLinks: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n clearLinks(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n\n indentListItem: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n indentListItem(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n\n outdentListItem: (): void => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n outdentListItem(selection);\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n }\n },\n };\n }, [\n notifyChange,\n restoreSelection,\n customLinkComponent,\n customHeadingRenderer,\n ]);\n\n useEffect(() => {\n if (onEditorAPIReady) {\n onEditorAPIReady(editorAPI);\n }\n }, [editorAPI, onEditorAPIReady]);\n\n const isInitializedRef = useRef(false);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || isInitializedRef.current) return;\n\n const content = initialContent || createEmptyContent();\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n isInitializedRef.current = true;\n\n let inputTimeout: ReturnType<typeof setTimeout> | null = null;\n const handleInput = () => {\n if (isUpdatingRef.current) return;\n\n const content = domToContent(editor);\n notifyChange(content);\n\n if (inputTimeout) {\n clearTimeout(inputTimeout);\n }\n inputTimeout = setTimeout(() => {\n historyRef.current.push(content);\n inputTimeout = null;\n }, 300);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isModifierPressed = e.metaKey || e.ctrlKey;\n\n if (e.key === \"Tab\" && !isModifierPressed && !e.altKey) {\n // Immer preventDefault aufrufen (wie Lexical), damit Tab den Fokus nicht aus dem Editor entfernt\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const selection = window.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n // Keine Selection: Tab verhindern, Fokus bleibt im Editor\n return;\n }\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n\n if (!editor.contains(container)) {\n // Container nicht im Editor: Tab verhindern\n return;\n }\n\n // Prüfe ob wir in einer Liste sind\n const listItem =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"li\")\n : (container as HTMLElement).closest(\"li\");\n\n if (listItem && editor.contains(listItem)) {\n // In Liste: Indent/Outdent durchführen\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n if (e.shiftKey) {\n outdentListItem(selection);\n } else {\n indentListItem(selection);\n }\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n return;\n }\n\n // Nicht in Liste: Tab verhindern, aber kein Tab-Zeichen einfügen\n // Der Fokus bleibt im Editor (durch preventDefault)\n }\n\n if (isModifierPressed && e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n editorAPI.undo();\n } else if (\n isModifierPressed &&\n (e.key === \"y\" || (e.key === \"z\" && e.shiftKey))\n ) {\n e.preventDefault();\n e.stopPropagation();\n editorAPI.redo();\n }\n };\n\n editor.addEventListener(\"input\", handleInput);\n editor.addEventListener(\"keydown\", handleKeyDown, true);\n\n return () => {\n editor.removeEventListener(\"input\", handleInput);\n editor.removeEventListener(\"keydown\", handleKeyDown, true);\n if (inputTimeout) {\n clearTimeout(inputTimeout);\n }\n };\n }, [editorAPI, notifyChange]);\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n\n const html = e.clipboardData.getData(\"text/html\");\n const text = e.clipboardData.getData(\"text/plain\");\n\n if (html) {\n try {\n const pastedContent = htmlToContent(html);\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n\n range.deleteContents();\n\n const tempDiv = document.createElement(\"div\");\n contentToDOM(\n pastedContent,\n tempDiv,\n customLinkComponent,\n customHeadingRenderer\n );\n\n const fragment = document.createDocumentFragment();\n while (tempDiv.firstChild) {\n fragment.appendChild(tempDiv.firstChild);\n }\n\n range.insertNode(fragment);\n\n if (fragment.lastChild) {\n range.setStartAfter(fragment.lastChild);\n range.collapse(true);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n\n const content = domToContent(editor);\n notifyChange(content);\n }\n } catch (error) {\n document.execCommand(\"insertText\", false, text);\n }\n } else if (text) {\n document.execCommand(\"insertText\", false, text);\n }\n };\n const containerStyle: React.CSSProperties = theme\n ? {\n ...(theme.borderColor &&\n ({\n \"--rte-border-color\": theme.borderColor,\n } as React.CSSProperties)),\n ...(theme.borderRadius &&\n ({\n \"--rte-border-radius\": `${theme.borderRadius}px`,\n } as React.CSSProperties)),\n ...(theme.toolbarBg &&\n ({\n \"--rte-toolbar-bg\": theme.toolbarBg,\n } as React.CSSProperties)),\n ...(theme.buttonHoverBg &&\n ({\n \"--rte-button-hover-bg\": theme.buttonHoverBg,\n } as React.CSSProperties)),\n ...(theme.contentBg &&\n ({\n \"--rte-content-bg\": theme.contentBg,\n } as React.CSSProperties)),\n ...(theme.primaryColor &&\n ({\n \"--rte-primary-color\": theme.primaryColor,\n } as React.CSSProperties)),\n }\n : {};\n\n return (\n <div\n className={`rte-container ${className || \"\"}`}\n style={containerStyle}\n >\n <Toolbar\n plugins={plugins}\n editorAPI={editorAPI}\n className={toolbarClassName}\n />\n <div\n ref={editorRef}\n contentEditable\n className={`rte-editor ${editorClassName || \"\"}`}\n data-placeholder={placeholder}\n onPaste={handlePaste}\n suppressContentEditableWarning\n />\n </div>\n );\n};\n","import { Dropdown } from \"../components/Dropdown\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\nimport { getCurrentHeading } from \"../utils/stateReflection\";\n\nconst defaultHeadings = [\"h1\", \"h2\", \"h3\"];\n\nconst headingLabels: Record<string, string> = {\n h1: \"Überschrift 1\",\n h2: \"Überschrift 2\",\n h3: \"Überschrift 3\",\n h4: \"Überschrift 4\",\n h5: \"Überschrift 5\",\n h6: \"Überschrift 6\",\n};\n\nexport function createHeadingsPlugin(\n headings: string[] = defaultHeadings\n): Plugin {\n const options = [\n { value: \"p\", label: \"Normal\", headingPreview: \"p\" },\n ...headings.map((h) => ({\n value: h,\n label: headingLabels[h] || h.toUpperCase(),\n headingPreview: h,\n })),\n ];\n\n return {\n name: \"headings\",\n type: \"block\",\n renderButton: (\n props: ButtonProps & {\n onSelect?: (value: string) => void;\n editorAPI?: EditorAPI;\n currentValue?: string;\n }\n ) => {\n // Aktuelles Heading aus State Reflection\n const currentValue =\n props.currentValue ||\n (props.editorAPI\n ? getCurrentHeading(props.editorAPI, headings)\n : undefined);\n\n return (\n <Dropdown\n icon=\"mdi:format-header-1\"\n label=\"Überschrift\"\n options={options}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentHeading(editor, headings);\n },\n execute: (editor: EditorAPI, value?: string) => {\n const tag = value || \"p\";\n editor.executeCommand(\"formatBlock\", `<${tag}>`);\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n const tagName = element.tagName.toLowerCase();\n return headings.includes(tagName);\n },\n canExecute: () => true,\n };\n}\n","import { IconWrapper } from \"../components/IconWrapper\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\n\n/**\n * Link-Plugin mit verbesserter Funktionalität\n */\nexport function createLinkPlugin(): Plugin {\n return {\n name: \"link\",\n type: \"inline\",\n command: \"createLink\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Link einfügen\"\n aria-label=\"Link einfügen\"\n >\n <IconWrapper icon=\"mdi:link\" width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n // Prüfe ob bereits ein Link vorhanden ist\n const existingLink = element?.closest(\"a\") as HTMLAnchorElement;\n\n if (existingLink) {\n // Link entfernen\n const parent = existingLink.parentNode;\n if (parent) {\n while (existingLink.firstChild) {\n parent.insertBefore(\n existingLink.firstChild,\n existingLink\n );\n }\n parent.removeChild(existingLink);\n // Content aktualisieren\n const editorEl = editor.getSelection()?.anchorNode;\n if (editorEl) {\n const content = editor.getContent();\n editor.setContent(content);\n }\n }\n } else {\n // Neuen Link einfügen\n const url = prompt(\"URL eingeben:\");\n if (url) {\n editor.executeCommand(\"createLink\", url);\n }\n }\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n return element.closest(\"a\") !== null;\n },\n getCurrentValue: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return undefined;\n\n const link = element.closest(\"a\") as HTMLAnchorElement;\n return link ? link.href : undefined;\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n };\n}\n\nexport const linkPlugin = createLinkPlugin();\n\n/**\n * Blockquote-Plugin\n */\nexport const blockquotePlugin: Plugin = {\n name: \"blockquote\",\n type: \"block\",\n command: \"formatBlock\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Zitat\"\n aria-label=\"Zitat\"\n >\n <IconWrapper icon=\"mdi:format-quote-close\" width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return;\n\n const isBlockquote = element.closest(\"blockquote\") !== null;\n\n if (isBlockquote) {\n editor.executeCommand(\"formatBlock\", \"<p>\");\n } else {\n editor.executeCommand(\"formatBlock\", \"<blockquote>\");\n }\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n return element.closest(\"blockquote\") !== null;\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n};\n\n/**\n * Unordered List Plugin\n */\nexport const unorderedListPlugin: Plugin = {\n name: \"unorderedList\",\n type: \"block\",\n command: \"insertUnorderedList\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Aufzählungsliste\"\n aria-label=\"Aufzählungsliste\"\n >\n <IconWrapper\n icon=\"mdi:format-list-bulleted\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(\"insertUnorderedList\");\n },\n isActive: (editor: EditorAPI) => {\n if (typeof document === \"undefined\") return false;\n return document.queryCommandState(\"insertUnorderedList\");\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n};\n\n/**\n * Ordered List Plugin\n */\nexport const orderedListPlugin: Plugin = {\n name: \"orderedList\",\n type: \"block\",\n command: \"insertOrderedList\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Nummerierte Liste\"\n aria-label=\"Nummerierte Liste\"\n >\n <IconWrapper\n icon=\"mdi:format-list-numbered\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(\"insertOrderedList\");\n },\n isActive: (editor: EditorAPI) => {\n if (typeof document === \"undefined\") return false;\n return document.queryCommandState(\"insertOrderedList\");\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n};\n"],"names":["_jsx","_jsxs","defaultHeadings","headingLabels","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/Icons.tsx","../src/components/Dropdown.tsx","../src/components/IconWrapper.tsx","../src/plugins/base.tsx","../src/utils/dom.ts","../src/plugins/blockFormat.tsx","../src/plugins/clearFormatting.tsx","../src/plugins/index.tsx","../src/utils/stateReflection.ts","../src/plugins/colors.tsx","../src/plugins/fontSize.tsx","../src/plugins/image.tsx","../src/utils/checkbox.ts","../src/utils/clearFormatting.ts","../src/utils/content.ts","../src/utils/history.ts","../src/utils/listIndent.ts","../src/constants.ts","../src/hooks/useCheckbox.ts","../src/hooks/useEditorEvents.ts","../src/hooks/useEditorInit.ts","../src/hooks/useEditorSelection.ts","../src/components/Toolbar.tsx","../src/components/Editor.tsx","../src/plugins/headings.tsx","../src/plugins/optional.tsx"],"sourcesContent":["import React from \"react\";\n\ninterface IconProps {\n width?: number;\n height?: number;\n className?: string;\n}\n\nexport const BoldIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\" />\n </svg>\n);\n\nexport const UnderlineIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z\" />\n </svg>\n);\n\nexport const ClearFormattingIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M6 5v3h5v11h2V8h5V5H6z\" />\n <path d=\"M20.5 3.5L3.5 20.5l1.06 1.06L21.56 4.56z\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" />\n </svg>\n);\n\nexport const QuoteIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\" />\n </svg>\n);\n\nexport const NumberedListIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 11.9V11H2zm6-5v2h14V6H8zm0 14h14v-2H8v2zm0-6h14v-2H8v2z\" />\n </svg>\n);\n\nexport const TextColorIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M2 20h20v4H2v-4zm3.49-3h2.42l1.27-3.58h5.64L16.09 17h2.42L13.25 3h-2.5L5.49 17zm4.22-5.61l2.03-5.79h.12l2.03 5.79H9.71z\" />\n </svg>\n);\n\nexport const BackgroundColorIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n {/* Pinsel */}\n <path d=\"M14.5 2.5L21.5 9.5L13 18L6 11L14.5 2.5Z\" />\n <path d=\"M6 11L13 18\" />\n {/* Hintergrund-Farbbereich */}\n <rect\n x=\"2\"\n y=\"16\"\n width=\"8\"\n height=\"6\"\n fill=\"currentColor\"\n opacity=\"0.6\"\n rx=\"1\"\n />\n {/* Pinselspitze */}\n <path d=\"M21.5 9.5L19 7\" />\n </svg>\n);\n\nexport const HeadingIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M5 4v3h5.5v12h3V7H19V4H5z\" />\n </svg>\n);\n\nexport const FormatIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n {/* Paragraph symbol */}\n <path d=\"M3 4h18v2H3V4zm0 4h12v2H3V8zm0 4h18v2H3v-2zm0 4h12v2H3v-2z\" />\n </svg>\n);\n\nexport const FontSizeIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M9 4v3h5v12h3V7h5V4H9zm-6 8h3v8h3v-8h3V10H3z\" />\n </svg>\n);\n\nexport const ImageIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n);\n\nexport const CloseIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nexport const LoadingIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\" />\n </svg>\n);\n\nexport const UploadIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z\" />\n </svg>\n);\n\nexport const IndentIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3 21h18v-2H3v2zM3 8l4 4-4 4V8zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\" />\n </svg>\n);\n\nexport const OutdentIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3 21h18v-2H3v2zM11 8l4 4-4 4V8zM3 3v2h18V3H3zm0 4h10v2H3V7zm0 4h10v2H3v-2zm0 4h18v2H3v-2z\" />\n </svg>\n);\n\nexport const CheckboxIcon: React.FC<IconProps> = ({\n width = 18,\n height = 18,\n className,\n}) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M19 3H5c-1.11 0-2 .89-2 2v14c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2V5c0-1.11-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n);\n\nconst iconMap: Record<string, React.FC<IconProps>> = {\n \"mdi:format-bold\": BoldIcon,\n \"mdi:format-italic\": ItalicIcon,\n \"mdi:format-underline\": UnderlineIcon,\n \"mdi:undo\": UndoIcon,\n \"mdi:redo\": RedoIcon,\n \"mdi:format-clear\": ClearFormattingIcon,\n \"mdi:link\": LinkIcon,\n \"mdi:format-quote-close\": QuoteIcon,\n \"mdi:format-list-bulleted\": BulletListIcon,\n \"mdi:format-list-numbered\": NumberedListIcon,\n \"mdi:format-color-text\": TextColorIcon,\n \"mdi:format-color-fill\": BackgroundColorIcon,\n \"mdi:format-header-1\": HeadingIcon,\n \"mdi:format-paragraph\": FormatIcon,\n \"mdi:format-size\": FontSizeIcon,\n \"mdi:image\": ImageIcon,\n \"mdi:close\": CloseIcon,\n \"mdi:loading\": LoadingIcon,\n \"mdi:upload\": UploadIcon,\n \"mdi:format-indent-increase\": IndentIcon,\n \"mdi:format-indent-decrease\": OutdentIcon,\n \"mdi:checkbox-marked-outline\": CheckboxIcon,\n};\n\nexport const Icon: React.FC<{\n icon: string;\n width?: number;\n height?: number;\n className?: string;\n}> = ({ icon, width = 18, height = 18, className }) => {\n const IconComponent = iconMap[icon];\n if (!IconComponent) {\n return <span style={{ width, height, display: \"inline-block\" }} />;\n }\n return (\n <IconComponent width={width} height={height} className={className} />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Icon } from './Icons';\n\ninterface DropdownProps {\n icon: string;\n label: string;\n options: Array<{ value: string; label: string; icon?: string; color?: string; preview?: string; headingPreview?: string }>;\n onSelect: (value: string) => void;\n currentValue?: string;\n disabled?: boolean;\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n icon,\n label,\n options,\n onSelect,\n currentValue,\n disabled,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const handleSelect = (value: string) => {\n onSelect(value);\n setIsOpen(false);\n };\n\n const currentOption = options.find(opt => opt.value === currentValue);\n\n return (\n <div className=\"rte-dropdown\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={`rte-toolbar-button rte-dropdown-button ${currentOption ? 'rte-dropdown-button-has-value' : ''}`}\n title={label}\n aria-label={label}\n >\n <Icon icon={icon} width={18} height={18} />\n {currentOption && (\n <span className=\"rte-dropdown-value\">{currentOption.label}</span>\n )}\n </button>\n {isOpen && (\n <div className=\"rte-dropdown-menu\">\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n className={`rte-dropdown-item ${currentValue === option.value ? 'rte-dropdown-item-active' : ''}`}\n onClick={() => handleSelect(option.value)}\n >\n {option.color && (\n <span \n className={`rte-dropdown-color-preview ${currentValue === option.value ? 'active' : ''}`}\n style={{ backgroundColor: option.color }}\n />\n )}\n {option.preview && !option.headingPreview && (\n <span \n className=\"rte-dropdown-fontsize-preview\"\n style={{ fontSize: `${option.preview}px` }}\n >\n Aa\n </span>\n )}\n {option.headingPreview && (\n <span \n className={`rte-dropdown-heading-preview ${option.headingPreview}`}\n >\n {option.headingPreview === 'p' ? 'Normal' : option.headingPreview.toUpperCase()}\n </span>\n )}\n {option.icon && <Icon icon={option.icon} width={16} height={16} />}\n <span style={{ flex: 1, fontWeight: currentValue === option.value ? 600 : 400 }}>\n {option.label}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { Icon } from './Icons';\n\ninterface IconWrapperProps {\n icon: string;\n width?: number;\n height?: number;\n className?: string;\n}\n\nexport const IconWrapper: React.FC<IconWrapperProps> = ({ icon, width = 18, height = 18, className }) => {\n return <Icon icon={icon} width={width} height={height} className={className} />;\n};\n\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\n\n/**\n * Basis-Plugin für Inline-Formatierungen\n */\nexport function createInlinePlugin(\n name: string,\n command: string,\n icon: string,\n label: string\n): Plugin {\n return {\n name,\n type: 'inline',\n command,\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${props.isActive ? 'rte-toolbar-button-active' : ''}`}\n title={label}\n aria-label={label}\n >\n <IconWrapper icon={icon} width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(command);\n },\n isActive: (editor: EditorAPI) => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return false;\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n \n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n \n if (!element) return false;\n \n return document.queryCommandState(command);\n },\n canExecute: (editor: EditorAPI) => {\n // Formatierung sollte auch ohne Selection möglich sein\n // (z.B. wenn Editor leer ist, wird beim Klick eine Selection erstellt)\n return true;\n },\n };\n}\n\n/**\n * Basis-Plugin für Commands\n */\nexport function createCommandPlugin(\n name: string,\n command: string,\n icon: string,\n label: string\n): Plugin {\n return {\n name,\n type: 'command',\n command,\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title={label}\n aria-label={label}\n >\n <IconWrapper icon={icon} width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(command);\n },\n canExecute: (editor: EditorAPI) => {\n if (command === 'undo') return editor.canUndo();\n if (command === 'redo') return editor.canRedo();\n return true;\n },\n };\n}\n\n","/**\n * Pure DOM utility functions.\n * No React dependencies - only native browser APIs.\n */\n\n/**\n * Checks if a UL element is a checkbox list.\n * Detects: own format, Lexical format, and GitHub format.\n */\nexport function isCheckboxList(element: HTMLElement): boolean {\n if (element.tagName !== \"UL\") return false;\n // Own format\n if (element.classList.contains(\"rte-checkbox-list\")) return true;\n // Lexical format (attribute)\n if (element.getAttribute(\"__lexicallisttype\") === \"check\") return true;\n // Lexical theme class (any class containing \"checklist\")\n const hasChecklistClass = Array.from(element.classList).some((cls) =>\n cls.toLowerCase().includes(\"checklist\")\n );\n if (hasChecklistClass) return true;\n // GitHub format\n if (element.classList.contains(\"contains-task-list\")) return true;\n return false;\n}\n\n/**\n * Finds the closest checkbox list ancestor from an element.\n * Works with all supported formats (own, Lexical, GitHub).\n */\nexport function findClosestCheckboxList(\n element: HTMLElement\n): HTMLElement | null {\n let current: HTMLElement | null = element;\n while (current) {\n if (current.tagName === \"UL\" && isCheckboxList(current)) {\n return current;\n }\n current = current.parentElement;\n }\n return null;\n}\n\n/**\n * Checks if a list item has a nested list as its first child (not a leaf item).\n */\nexport function isNestedListItem(li: HTMLElement): boolean {\n const firstChild = li.firstChild;\n return (\n firstChild instanceof HTMLElement &&\n (firstChild.tagName === \"UL\" || firstChild.tagName === \"OL\")\n );\n}\n\n/**\n * Finds the closest list item from a node.\n */\nexport function findClosestListItem(node: Node): HTMLLIElement | null {\n const element =\n node.nodeType === Node.TEXT_NODE\n ? node.parentElement\n : (node as HTMLElement);\n return (element?.closest(\"li\") as HTMLLIElement) || null;\n}\n\n/**\n * Gets the HTMLElement from a selection range container.\n */\nexport function getElementFromContainer(\n container: Node\n): HTMLElement | null {\n return container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n}\n\n/**\n * Sets cursor position in a text node after an async DOM update.\n */\nexport function setCursorInTextNode(\n textNode: Text,\n position: number,\n editor?: HTMLElement\n): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n try {\n const range = document.createRange();\n const maxPos = textNode.textContent?.length || 0;\n const safePos = Math.min(Math.max(0, position), maxPos);\n range.setStart(textNode, safePos);\n range.collapse(true);\n\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n if (editor) editor.focus();\n }\n } catch (_) {\n // Silently fail - cursor positioning is best-effort\n }\n });\n });\n}\n","import { Dropdown } from \"../components/Dropdown\";\nimport { EditorAPI, Plugin } from \"../types\";\nimport { findClosestCheckboxList } from \"../utils/dom\";\n\nconst defaultHeadings = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\n\nconst headingLabels: Record<string, string> = {\n h1: \"Überschrift 1\",\n h2: \"Überschrift 2\",\n h3: \"Überschrift 3\",\n h4: \"Überschrift 4\",\n h5: \"Überschrift 5\",\n h6: \"Überschrift 6\",\n};\n\n/**\n * Creates a Block Format plugin that combines headings, lists, and quote in a dropdown.\n * @param headings - Array of heading levels (e.g. [\"h1\", \"h2\", \"h3\"])\n */\nexport function createBlockFormatPlugin(\n headings: string[] = defaultHeadings\n): Plugin {\n const options = [\n { value: \"p\", label: \"Normal\", headingPreview: \"p\" },\n ...headings.map((h) => ({\n value: h,\n label: headingLabels[h] || h.toUpperCase(),\n headingPreview: h,\n })),\n {\n value: \"ul\",\n label: \"Aufzählungsliste\",\n icon: \"mdi:format-list-bulleted\",\n },\n {\n value: \"ol\",\n label: \"Nummerierte Liste\",\n icon: \"mdi:format-list-numbered\",\n },\n {\n value: \"checkbox-list\",\n label: \"Checkbox-Liste\",\n icon: \"mdi:checkbox-marked-outline\",\n },\n {\n value: \"blockquote\",\n label: \"Zitat\",\n icon: \"mdi:format-quote-close\",\n },\n ];\n\n /** Detects the current block format at the cursor position. */\n function detectCurrentFormat(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return undefined;\n\n const tagName = element.tagName.toLowerCase();\n\n if (headings.includes(tagName)) return tagName;\n if (element.closest(\"blockquote\")) return \"blockquote\";\n if (findClosestCheckboxList(element)) return \"checkbox-list\";\n if (element.closest(\"ul\")) return \"ul\";\n if (element.closest(\"ol\")) return \"ol\";\n if (tagName === \"p\") return \"p\";\n\n return undefined;\n }\n\n return {\n name: \"blockFormat\",\n type: \"block\",\n renderButton: (props) => {\n const editor = props.editorAPI as EditorAPI | undefined;\n const onSelect = props.onSelect as\n | ((value: string) => void)\n | undefined;\n let currentValue = props.currentValue as string | undefined;\n\n if (!currentValue && editor) {\n currentValue = detectCurrentFormat(editor);\n }\n\n return (\n <Dropdown\n icon=\"mdi:format-paragraph\"\n label=\"Format\"\n options={options}\n onSelect={(value) => {\n if (onSelect) onSelect(value);\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n getCurrentValue: (editor: EditorAPI) => detectCurrentFormat(editor),\n execute: (editor: EditorAPI, value?: string) => {\n if (!value) return;\n\n if (value === \"checkbox-list\") {\n const selection = editor.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return;\n\n const checkboxList = findClosestCheckboxList(element);\n if (checkboxList) {\n // Remove checkbox list: convert to normal list\n checkboxList.classList.remove(\"rte-checkbox-list\");\n checkboxList\n .querySelectorAll(\"li[role='checkbox']\")\n .forEach((li) => {\n li.removeAttribute(\"role\");\n li.removeAttribute(\"tabIndex\");\n li.removeAttribute(\"aria-checked\");\n });\n } else {\n editor.executeCommand(\"insertCheckboxList\");\n }\n }\n } else if (value === \"ul\") {\n editor.executeCommand(\"insertUnorderedList\");\n } else if (value === \"ol\") {\n editor.executeCommand(\"insertOrderedList\");\n } else if (value === \"blockquote\") {\n const selection = editor.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (element?.closest(\"blockquote\")) {\n editor.executeCommand(\"formatBlock\", \"<p>\");\n } else {\n editor.executeCommand(\"formatBlock\", \"<blockquote>\");\n }\n }\n } else {\n editor.executeCommand(\"formatBlock\", `<${value}>`);\n }\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n const tagName = element.tagName.toLowerCase();\n return (\n headings.includes(tagName) ||\n element.closest(\"blockquote\") !== null ||\n findClosestCheckboxList(element) !== null ||\n element.closest(\"ul\") !== null ||\n element.closest(\"ol\") !== null\n );\n },\n canExecute: () => true,\n };\n}\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\n\n/**\n * Clear Formatting Plugin - Entfernt alle Formatierungen\n */\nexport const clearFormattingPlugin: Plugin = {\n name: 'clearFormatting',\n type: 'command',\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Formatierung entfernen\"\n aria-label=\"Formatierung entfernen\"\n >\n <IconWrapper icon=\"mdi:format-clear\" width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.clearFormatting();\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0 && !selection.isCollapsed;\n },\n};\n\n","import { IconWrapper } from \"../components/IconWrapper\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\nimport { createCommandPlugin, createInlinePlugin } from \"./base\";\nimport { createBlockFormatPlugin } from \"./blockFormat\";\nimport { clearFormattingPlugin } from \"./clearFormatting\";\n\nconst defaultHeadings = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\n\n/**\n * Standard-Plugins\n */\nexport const boldPlugin: Plugin = createInlinePlugin(\n \"bold\",\n \"bold\",\n \"mdi:format-bold\",\n \"Fett\"\n);\n\nexport const italicPlugin: Plugin = createInlinePlugin(\n \"italic\",\n \"italic\",\n \"mdi:format-italic\",\n \"Kursiv\"\n);\n\nexport const underlinePlugin: Plugin = createInlinePlugin(\n \"underline\",\n \"underline\",\n \"mdi:format-underline\",\n \"Unterstrichen\"\n);\n\nexport const undoPlugin: Plugin = createCommandPlugin(\n \"undo\",\n \"undo\",\n \"mdi:undo\",\n \"Rückgängig\"\n);\n\nexport const redoPlugin: Plugin = createCommandPlugin(\n \"redo\",\n \"redo\",\n \"mdi:redo\",\n \"Wiederholen\"\n);\n\n/**\n * Indent List Item Plugin (Tab für Unterliste)\n */\nconst indentListItemPlugin: Plugin = {\n name: \"indentListItem\",\n type: \"command\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Einrücken (Unterliste)\"\n aria-label=\"Einrücken (Unterliste)\"\n >\n <IconWrapper\n icon=\"mdi:format-indent-increase\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.indentListItem();\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"li\")\n : (container as HTMLElement).closest(\"li\");\n\n return listItem !== null;\n },\n};\n\n/**\n * Outdent List Item Plugin (Shift+Tab)\n */\nconst outdentListItemPlugin: Plugin = {\n name: \"outdentListItem\",\n type: \"command\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Ausrücken\"\n aria-label=\"Ausrücken\"\n >\n <IconWrapper\n icon=\"mdi:format-indent-decrease\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.outdentListItem();\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"li\")\n : (container as HTMLElement).closest(\"li\");\n\n if (!listItem) return false;\n\n // Prüfe ob in verschachtelter Liste\n const list = listItem.parentElement;\n if (!list || (list.tagName !== \"UL\" && list.tagName !== \"OL\"))\n return false;\n\n const parentListItem = list.parentElement;\n return parentListItem !== null && parentListItem.tagName === \"LI\";\n },\n};\n\n// Export plugins for direct use\nexport { indentListItemPlugin, outdentListItemPlugin };\n\n/**\n * Standard-Plugin-Liste\n * Die Plugins werden hier direkt referenziert, um sicherzustellen, dass sie in defaultPlugins enthalten sind\n */\nconst _indentPlugin = indentListItemPlugin;\nconst _outdentPlugin = outdentListItemPlugin;\n\n/**\n * Standard Block-Format Plugin (Headlines, Listen, Quote in einem Dropdown)\n * Verwendet standardmäßig h1, h2, h3, kann aber über Editor-Props angepasst werden\n */\nconst defaultBlockFormatPlugin = createBlockFormatPlugin(defaultHeadings);\n\nexport const defaultPlugins: Plugin[] = [\n undoPlugin,\n redoPlugin,\n defaultBlockFormatPlugin,\n boldPlugin,\n italicPlugin,\n underlinePlugin,\n clearFormattingPlugin,\n _indentPlugin,\n _outdentPlugin,\n];\n","import { EditorAPI } from '../types';\n\n/**\n * Liest die aktuelle Font-Size aus dem DOM an der Cursor-Position\n */\nexport function getCurrentFontSize(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Element mit fontSize\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n const fontSize = window.getComputedStyle(current).fontSize;\n if (fontSize && fontSize !== 'inherit' && fontSize !== 'initial') {\n // Konvertiere \"16px\" zu \"16\"\n const size = parseInt(fontSize, 10);\n if (!isNaN(size)) {\n return size.toString();\n }\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n/**\n * Liest die aktuelle Textfarbe aus dem DOM an der Cursor-Position\n */\nexport function getCurrentTextColor(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Element mit color\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n // Prüfe zuerst inline style (hat Priorität)\n const inlineColor = current.style.color;\n if (inlineColor && inlineColor.trim()) {\n // Wenn bereits Hex, direkt zurückgeben\n if (inlineColor.startsWith('#')) {\n return inlineColor;\n }\n // Wenn RGB/RGBA, konvertieren\n const rgbMatch = inlineColor.match(/\\d+/g);\n if (rgbMatch && rgbMatch.length >= 3) {\n const hex = '#' + rgbMatch.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n \n // Dann computed style\n const color = window.getComputedStyle(current).color;\n if (color && color !== 'inherit' && color !== 'initial' && color !== 'rgb(0, 0, 0)' && color !== 'rgba(0, 0, 0, 0)') {\n // Konvertiere RGB zu Hex\n const rgb = color.match(/\\d+/g);\n if (rgb && rgb.length >= 3) {\n const hex = '#' + rgb.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n/**\n * Liest die aktuelle Hintergrundfarbe aus dem DOM an der Cursor-Position\n */\nexport function getCurrentBackgroundColor(editor: EditorAPI): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Element mit backgroundColor\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n // Prüfe zuerst inline style (hat Priorität)\n const inlineBgColor = current.style.backgroundColor;\n if (inlineBgColor && inlineBgColor.trim()) {\n // Wenn bereits Hex, direkt zurückgeben\n if (inlineBgColor.startsWith('#')) {\n return inlineBgColor;\n }\n // Wenn RGB/RGBA, konvertieren\n const rgbMatch = inlineBgColor.match(/\\d+/g);\n if (rgbMatch && rgbMatch.length >= 3) {\n const hex = '#' + rgbMatch.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n \n // Dann computed style\n const bgColor = window.getComputedStyle(current).backgroundColor;\n if (bgColor && bgColor !== 'inherit' && bgColor !== 'initial' && bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent') {\n // Konvertiere RGB zu Hex\n const rgb = bgColor.match(/\\d+/g);\n if (rgb && rgb.length >= 3) {\n const hex = '#' + rgb.slice(0, 3).map(x => {\n const hex = parseInt(x, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('');\n return hex;\n }\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n/**\n * Liest das aktuelle Heading-Level aus dem DOM an der Cursor-Position\n */\nexport function getCurrentHeading(editor: EditorAPI, availableHeadings: string[]): string | undefined {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element = container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : container as HTMLElement;\n\n if (!element) return undefined;\n\n // Suche nach dem nächsten Block-Element\n let current: HTMLElement | null = element;\n while (current && current !== document.body) {\n const tagName = current.tagName.toLowerCase();\n if (availableHeadings.includes(tagName)) {\n return tagName;\n }\n if (tagName === 'p') {\n return 'p';\n }\n current = current.parentElement;\n }\n\n return undefined;\n}\n\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { Dropdown } from '../components/Dropdown';\nimport { getCurrentTextColor, getCurrentBackgroundColor } from '../utils/stateReflection';\n\nconst defaultColors = [\n { value: '#000000', label: 'Schwarz', color: '#000000' },\n { value: '#333333', label: 'Dunkelgrau', color: '#333333' },\n { value: '#666666', label: 'Grau', color: '#666666' },\n { value: '#ff0000', label: 'Rot', color: '#ff0000' },\n { value: '#0000ff', label: 'Blau', color: '#0000ff' },\n { value: '#00aa00', label: 'Grün', color: '#00aa00' },\n { value: '#ffaa00', label: 'Orange', color: '#ffaa00' },\n { value: '#aa00ff', label: 'Lila', color: '#aa00ff' },\n];\n\nexport function createTextColorPlugin(colors: string[] = defaultColors.map(c => c.value)): Plugin {\n // Finde Labels für bekannte Farben\n const getColorLabel = (color: string): string => {\n const found = defaultColors.find(c => c.value.toLowerCase() === color.toLowerCase());\n return found ? found.label : color;\n };\n \n const colorOptions = colors.map(color => ({\n value: color,\n label: getColorLabel(color),\n color,\n }));\n\n return {\n name: 'textColor',\n type: 'inline',\n renderButton: (props: ButtonProps & { onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n // Aktuelle Textfarbe aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentTextColor(props.editorAPI) : undefined);\n \n return (\n <Dropdown\n icon=\"mdi:format-color-text\"\n label=\"Textfarbe\"\n options={colorOptions.map(opt => ({\n value: opt.value,\n label: opt.label,\n color: opt.color,\n }))}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (value) {\n editor.executeCommand('foreColor', value);\n }\n },\n canExecute: () => true,\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentTextColor(editor);\n },\n };\n}\n\nexport function createBackgroundColorPlugin(colors: string[] = defaultColors.map(c => c.value)): Plugin {\n // Finde Labels für bekannte Farben\n const getColorLabel = (color: string): string => {\n const found = defaultColors.find(c => c.value.toLowerCase() === color.toLowerCase());\n return found ? found.label : color;\n };\n \n const colorOptions = colors.map(color => ({\n value: color,\n label: getColorLabel(color),\n color,\n }));\n\n return {\n name: 'backgroundColor',\n type: 'inline',\n renderButton: (props: ButtonProps & { onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n // Aktuelle Hintergrundfarbe aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentBackgroundColor(props.editorAPI) : undefined);\n \n return (\n <Dropdown\n icon=\"mdi:format-color-fill\"\n label=\"Hintergrundfarbe\"\n options={colorOptions.map(opt => ({\n value: opt.value,\n label: opt.label,\n color: opt.color,\n }))}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (value) {\n editor.executeCommand('backColor', value);\n }\n },\n canExecute: () => true,\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentBackgroundColor(editor);\n },\n };\n}\n\n","import React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { Dropdown } from '../components/Dropdown';\nimport { getCurrentFontSize } from '../utils/stateReflection';\n\nexport function createFontSizePlugin(fontSizes: number[] = [12, 14, 16, 18, 20, 24]): Plugin {\n return {\n name: 'fontSize',\n type: 'inline',\n renderButton: (props: ButtonProps & { fontSizes?: number[]; onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n const sizes = props.fontSizes || fontSizes;\n const options = sizes.map(size => ({\n value: size.toString(),\n label: `${size}px`,\n preview: size.toString(),\n }));\n\n // Aktuelle Font-Size aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentFontSize(props.editorAPI) : undefined);\n\n return (\n <Dropdown\n icon=\"mdi:format-size\"\n label=\"Schriftgröße\"\n options={options}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentFontSize(editor);\n },\n execute: (editor: EditorAPI, value?: string) => {\n if (value) {\n // Setze inline style für präzise Größe\n const selection = editor.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n let element: HTMLElement | null = null;\n \n if (range.commonAncestorContainer.nodeType === Node.TEXT_NODE) {\n element = range.commonAncestorContainer.parentElement;\n } else {\n element = range.commonAncestorContainer as HTMLElement;\n }\n \n if (element) {\n // Erstelle oder aktualisiere span mit fontSize\n const span = document.createElement('span');\n span.style.fontSize = `${value}px`;\n \n try {\n range.surroundContents(span);\n } catch (e) {\n // Falls surroundContents fehlschlägt\n const contents = range.extractContents();\n span.appendChild(contents);\n range.insertNode(span);\n }\n \n // Cursor setzen\n range.setStartAfter(span);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n }\n },\n canExecute: () => true,\n };\n}\n\n","import React, { useState, useRef } from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\n\n/**\n * Image-Plugin mit URL-Eingabe und File-Upload\n */\nexport function createImagePlugin(onImageUpload?: (file: File) => Promise<string>): Plugin {\n return {\n name: 'image',\n type: 'block',\n renderButton: (props: ButtonProps & { editorAPI?: EditorAPI }) => {\n const [showModal, setShowModal] = useState(false);\n const [imageUrl, setImageUrl] = useState('');\n const [altText, setAltText] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleInsertImage = () => {\n if (!props.editorAPI) return;\n \n const src = imageUrl.trim();\n \n if (!src) {\n alert('Bitte geben Sie eine Bild-URL ein');\n return;\n }\n\n // Verwende executeCommand, das alles korrekt handhabt\n // Alt-Text wird später über das Datenmodell gespeichert\n props.editorAPI.executeCommand('insertImage', src);\n\n // Modal schließen\n setShowModal(false);\n setImageUrl('');\n setAltText('');\n };\n\n const handleFileSelect = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file || !onImageUpload) return;\n\n if (!file.type.startsWith('image/')) {\n alert('Bitte wählen Sie eine Bilddatei aus');\n return;\n }\n\n setIsUploading(true);\n\n try {\n const uploadedUrl = await onImageUpload(file);\n setImageUrl(uploadedUrl);\n } catch (error) {\n console.error('Image upload failed:', error);\n alert('Fehler beim Hochladen des Bildes');\n } finally {\n setIsUploading(false);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }\n };\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setShowModal(true)}\n disabled={props.disabled}\n className=\"rte-toolbar-button\"\n title=\"Bild einfügen\"\n aria-label=\"Bild einfügen\"\n >\n <IconWrapper icon=\"mdi:image\" width={18} height={18} />\n </button>\n\n {showModal && (\n <div\n className=\"rte-image-modal-overlay\"\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n setShowModal(false);\n }\n }}\n >\n <div className=\"rte-image-modal\">\n <div className=\"rte-image-modal-header\">\n <h3>Bild einfügen</h3>\n <button\n type=\"button\"\n onClick={() => setShowModal(false)}\n className=\"rte-image-modal-close\"\n aria-label=\"Schließen\"\n >\n <IconWrapper icon=\"mdi:close\" width={20} height={20} />\n </button>\n </div>\n\n <div className=\"rte-image-modal-content\">\n {onImageUpload && (\n <div className=\"rte-image-upload-section\">\n <label className=\"rte-image-upload-label\">\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n />\n <div className=\"rte-image-upload-button\">\n {isUploading ? (\n <>\n <IconWrapper icon=\"mdi:loading\" width={24} height={24} className=\"rte-spin\" />\n <span>Wird hochgeladen...</span>\n </>\n ) : (\n <>\n <IconWrapper icon=\"mdi:upload\" width={24} height={24} />\n <span>Datei auswählen</span>\n </>\n )}\n </div>\n </label>\n </div>\n )}\n\n <div className=\"rte-image-url-section\">\n <label>\n Bild-URL\n <input\n type=\"url\"\n value={imageUrl}\n onChange={(e) => setImageUrl(e.target.value)}\n placeholder=\"https://example.com/image.jpg\"\n className=\"rte-image-url-input\"\n />\n </label>\n </div>\n\n <div className=\"rte-image-alt-section\">\n <label>\n Alt-Text (optional)\n <input\n type=\"text\"\n value={altText}\n onChange={(e) => setAltText(e.target.value)}\n placeholder=\"Bildbeschreibung\"\n className=\"rte-image-alt-input\"\n />\n </label>\n </div>\n\n {imageUrl && (\n <div className=\"rte-image-preview\">\n <img src={imageUrl} alt={altText || 'Preview'} />\n </div>\n )}\n </div>\n\n <div className=\"rte-image-modal-footer\">\n <button\n type=\"button\"\n onClick={() => setShowModal(false)}\n className=\"rte-image-modal-cancel\"\n >\n Abbrechen\n </button>\n <button\n type=\"button\"\n onClick={handleInsertImage}\n disabled={!imageUrl.trim() || isUploading}\n className=\"rte-image-modal-insert\"\n >\n Einfügen\n </button>\n </div>\n </div>\n </div>\n )}\n </>\n );\n },\n execute: (editor: EditorAPI) => {\n // Wird über renderButton gehandhabt\n },\n canExecute: () => true,\n };\n}\n\n","/**\n * Pure checkbox utility functions for checkbox lists.\n * Supports detection of own format, Lexical format, and GitHub format.\n * No React dependencies.\n */\n\nimport { isCheckboxList, isNestedListItem } from \"./dom\";\n\n/**\n * Updates a list item's checkbox attributes (role, aria-checked, tabindex).\n */\nexport function updateListItemChecked(\n li: HTMLLIElement,\n checked: boolean\n): void {\n const parent = li.parentElement;\n if (\n !parent ||\n parent.tagName !== \"UL\" ||\n !isCheckboxList(parent) ||\n isNestedListItem(li)\n ) {\n li.removeAttribute(\"role\");\n li.removeAttribute(\"tabIndex\");\n li.removeAttribute(\"aria-checked\");\n return;\n }\n li.setAttribute(\"role\", \"checkbox\");\n li.setAttribute(\"tabIndex\", \"-1\");\n li.setAttribute(\"aria-checked\", checked ? \"true\" : \"false\");\n}\n\n/**\n * Toggles the checked state of a checkbox list item.\n */\nexport function toggleListItemChecked(li: HTMLLIElement): void {\n const currentChecked = li.getAttribute(\"aria-checked\") === \"true\";\n li.setAttribute(\"aria-checked\", currentChecked ? \"false\" : \"true\");\n if (li.getAttribute(\"role\") !== \"checkbox\") {\n li.setAttribute(\"role\", \"checkbox\");\n li.setAttribute(\"tabIndex\", \"-1\");\n }\n}\n\n/**\n * Ensures all checkbox list items in the editor have correct attributes.\n * Normalizes foreign formats (Lexical, GitHub) to internal format.\n */\nexport function ensureAllCheckboxes(editor: HTMLElement): void {\n const allULs = editor.querySelectorAll(\"ul\");\n allULs.forEach((ul) => {\n if (!isCheckboxList(ul)) return;\n\n // Normalize: ensure our class is always present\n if (!ul.classList.contains(\"rte-checkbox-list\")) {\n ul.classList.add(\"rte-checkbox-list\");\n }\n\n // Handle GitHub format: convert <input type=\"checkbox\"> to aria-checked\n ul.querySelectorAll(\":scope > li\").forEach((li) => {\n const input = li.querySelector(\n 'input[type=\"checkbox\"]'\n ) as HTMLInputElement | null;\n if (input) {\n const checked =\n input.checked || input.hasAttribute(\"checked\");\n if (li.getAttribute(\"aria-checked\") === null) {\n (li as HTMLLIElement).setAttribute(\n \"aria-checked\",\n checked ? \"true\" : \"false\"\n );\n }\n input.remove();\n }\n });\n\n const listItems = ul.querySelectorAll(\":scope > li\");\n listItems.forEach((li) => {\n const htmlLi = li as HTMLLIElement;\n if (!isNestedListItem(htmlLi)) {\n const ariaChecked = htmlLi.getAttribute(\"aria-checked\");\n const checked = ariaChecked === \"true\";\n updateListItemChecked(htmlLi, checked);\n } else {\n htmlLi.removeAttribute(\"role\");\n htmlLi.removeAttribute(\"tabIndex\");\n htmlLi.removeAttribute(\"aria-checked\");\n }\n });\n });\n}\n\n/**\n * Returns the currently focused checkbox list item, or null.\n */\nexport function getActiveCheckListItem(): HTMLElement | null {\n const activeElement = document.activeElement;\n if (\n activeElement &&\n activeElement.tagName === \"LI\" &&\n activeElement.parentElement &&\n isCheckboxList(activeElement.parentElement)\n ) {\n return activeElement as HTMLElement;\n }\n return null;\n}\n\n/**\n * Finds the next or previous checkbox list item sibling.\n */\nexport function findCheckListItemSibling(\n li: HTMLLIElement,\n backward: boolean\n): HTMLLIElement | null {\n let sibling = backward\n ? (li.previousElementSibling as HTMLLIElement)\n : (li.nextElementSibling as HTMLLIElement);\n let parent: HTMLLIElement | null = li;\n\n // Walk up the tree to find a non-null sibling\n while (sibling == null && parent) {\n const parentList = parent.parentElement;\n if (parentList && parentList.tagName === \"UL\") {\n const grandParent = parentList.parentElement;\n if (grandParent && grandParent.tagName === \"LI\") {\n parent = grandParent as HTMLLIElement;\n sibling = backward\n ? (parent.previousElementSibling as HTMLLIElement)\n : (parent.nextElementSibling as HTMLLIElement);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n\n // Walk down the tree to find the first non-nested list item\n while (sibling && sibling.tagName === \"LI\") {\n const child = backward\n ? sibling.lastElementChild\n : sibling.firstElementChild;\n if (\n child &&\n (child.tagName === \"UL\" || child.tagName === \"OL\")\n ) {\n sibling = backward\n ? (child.lastElementChild as HTMLLIElement)\n : (child.firstElementChild as HTMLLIElement);\n } else {\n return sibling;\n }\n }\n\n return null;\n}\n","/**\n * Entfernt alle Formatierungen aus der aktuellen Selection\n */\nexport function clearFormatting(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n \n // Wenn Selection leer ist, nichts zu tun\n if (range.collapsed) return;\n\n try {\n // Verwende document.execCommand für Standard-Formatierungen\n document.execCommand('removeFormat', false);\n document.execCommand('unlink', false);\n \n // Entferne alle inline styles und Formatierungen manuell\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el)) {\n const tagName = el.tagName.toLowerCase();\n \n // Entferne Inline-Formatierungen (strong, em, u, span, a, etc.)\n if (['strong', 'b', 'em', 'i', 'u', 'span', 'a', 'font'].includes(tagName)) {\n // Ersetze durch Text-Node\n const text = el.textContent || '';\n const textNode = document.createTextNode(text);\n el.parentNode?.replaceChild(textNode, el);\n }\n \n // Entferne alle Styles\n if (el.style.length > 0) {\n el.removeAttribute('style');\n }\n \n // Konvertiere Headings zu Paragraphs\n if (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tagName)) {\n const p = document.createElement('p');\n while (el.firstChild) {\n p.appendChild(el.firstChild);\n }\n el.parentNode?.replaceChild(p, el);\n }\n }\n }\n node = walker.nextNode();\n }\n \n // Normalisiere: Entferne leere Formatierungs-Tags\n const normalizeWalker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n node = normalizeWalker.currentNode as Node;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n \n if (['strong', 'b', 'em', 'i', 'u', 'span'].includes(tagName) && !el.textContent?.trim()) {\n el.parentNode?.removeChild(el);\n }\n }\n node = normalizeWalker.nextNode();\n }\n \n } catch (error) {\n console.error('Error clearing formatting:', error);\n // Fallback: Einfache Methode\n document.execCommand('removeFormat', false);\n document.execCommand('unlink', false);\n }\n}\n\n/**\n * Entfernt nur Textfarbe\n */\nexport function clearTextColor(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n \n // Finde alle Elemente mit color style\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el) && el.style.color) {\n elements.push(el);\n }\n }\n node = walker.nextNode();\n }\n \n elements.forEach(el => {\n el.style.color = '';\n if (!el.style.length) {\n el.removeAttribute('style');\n }\n });\n}\n\n/**\n * Entfernt nur Hintergrundfarbe\n */\nexport function clearBackgroundColor(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n \n // Finde alle Elemente mit backgroundColor style\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el) && el.style.backgroundColor) {\n elements.push(el);\n }\n }\n node = walker.nextNode();\n }\n \n elements.forEach(el => {\n el.style.backgroundColor = '';\n if (!el.style.length) {\n el.removeAttribute('style');\n }\n });\n}\n\n/**\n * Entfernt nur Font-Size\n */\nexport function clearFontSize(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n \n // Finde alle Elemente mit fontSize style\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n null\n );\n \n const elements: HTMLElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (range.intersectsNode(el) && el.style.fontSize) {\n elements.push(el);\n }\n }\n node = walker.nextNode();\n }\n \n elements.forEach(el => {\n el.style.fontSize = '';\n if (!el.style.length) {\n el.removeAttribute('style');\n }\n });\n}\n\n/**\n * Entfernt Links (behält Text)\n */\nexport function clearLinks(selection: Selection): void {\n if (!selection || selection.rangeCount === 0) return;\n \n const range = selection.getRangeAt(0);\n \n // Finde alle Links in der Selection\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode: (node: Node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (el.tagName.toLowerCase() === 'a' && range.intersectsNode(el)) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n }\n );\n \n const links: HTMLAnchorElement[] = [];\n let node: Node | null = walker.currentNode as Node;\n \n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE && (node as HTMLElement).tagName.toLowerCase() === 'a') {\n links.push(node as HTMLAnchorElement);\n }\n node = walker.nextNode();\n }\n \n // Entferne Links (behält Text)\n links.forEach(link => {\n const parent = link.parentNode;\n if (parent) {\n while (link.firstChild) {\n parent.insertBefore(link.firstChild, link);\n }\n parent.removeChild(link);\n }\n });\n}\n\n","import React from \"react\";\nimport { EditorContent, EditorNode } from \"../types\";\nimport { ensureAllCheckboxes } from \"./checkbox\";\nimport { isCheckboxList } from \"./dom\";\n\n/**\n * Converts a DOM element (editor root) to EditorContent JSON.\n * Supports own format, Lexical HTML, and GitHub HTML.\n */\nexport function domToContent(element: HTMLElement): EditorContent {\n const blocks: EditorNode[] = [];\n\n // Normalize all checkbox lists before conversion\n ensureAllCheckboxes(element);\n\n function processNode(node: Node): EditorNode | null {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent;\n if (text === null || text === undefined) return null;\n\n // In checkbox lists, skip whitespace-only text nodes\n // if the LI has other meaningful text\n const isOnlyWhitespace = /^[\\s\\u200B]*$/.test(text);\n const isInCheckboxList =\n node.parentElement?.closest(\"ul.rte-checkbox-list\") !== null;\n\n if (isOnlyWhitespace && isInCheckboxList) {\n const li = node.parentElement?.closest(\"li\");\n if (li) {\n const allText = li.textContent || \"\";\n const textWithoutWhitespace = allText.replace(\n /[\\s\\u200B]/g,\n \"\"\n );\n if (textWithoutWhitespace.length > 0) {\n return null;\n }\n }\n }\n\n return { type: \"text\", text };\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n\n // Skip checkbox input elements (GitHub format remnants)\n if (tagName === \"input\" && el.getAttribute(\"type\") === \"checkbox\") {\n return null;\n }\n\n // Handle <br> as empty text\n if (tagName === \"br\") {\n return null;\n }\n\n if (tagName === \"img\") {\n const attributes: Record<string, string> = {};\n const src = el.getAttribute(\"src\");\n const alt = el.getAttribute(\"alt\");\n if (src) attributes.src = src;\n if (alt) attributes.alt = alt;\n return {\n type: \"image\",\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n // Block elements\n if (\n [\n \"p\",\n \"div\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"blockquote\",\n \"ul\",\n \"ol\",\n \"li\",\n ].includes(tagName)\n ) {\n const children: EditorNode[] = [];\n const attributes: Record<string, string> = {};\n\n // Detect checkbox lists (own + Lexical + GitHub formats)\n if (tagName === \"ul\" && isCheckboxList(el)) {\n attributes.class = \"rte-checkbox-list\";\n }\n\n // Detect checkbox list items via aria-checked\n if (tagName === \"li\") {\n const parentUl = el.closest(\"ul\");\n if (\n parentUl &&\n isCheckboxList(parentUl) &&\n el.getAttribute(\"role\") === \"checkbox\"\n ) {\n const ariaChecked = el.getAttribute(\"aria-checked\");\n if (ariaChecked !== null) {\n attributes.checkboxChecked = ariaChecked;\n }\n }\n }\n\n // Process children recursively\n Array.from(el.childNodes).forEach((child) => {\n // Skip checkbox input nodes\n if (\n child.nodeType === Node.ELEMENT_NODE &&\n (child as HTMLElement).tagName.toLowerCase() === \"input\" &&\n (child as HTMLElement).getAttribute(\"type\") === \"checkbox\"\n ) {\n return;\n }\n\n const processed = processNode(child);\n if (processed) {\n children.push(processed);\n }\n });\n\n return {\n type: tagName,\n children: children.length > 0 ? children : [],\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n // Inline elements\n if (\n [\n \"strong\",\n \"b\",\n \"em\",\n \"i\",\n \"u\",\n \"s\",\n \"del\",\n \"strike\",\n \"a\",\n \"span\",\n ].includes(tagName)\n ) {\n const children: EditorNode[] = [];\n Array.from(el.childNodes).forEach((child) => {\n const processed = processNode(child);\n if (processed) children.push(processed);\n });\n\n const attributes: Record<string, string> = {};\n Array.from(el.attributes).forEach((attr) => {\n attributes[attr.name] = attr.value;\n });\n\n // Links\n if (tagName === \"a\") {\n const href = el.getAttribute(\"href\");\n if (href) attributes.href = href;\n return {\n type: \"link\",\n children: children.length > 0 ? children : undefined,\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n // Spans: handle Lexical's white-space: pre-wrap wrapper\n if (tagName === \"span\") {\n const style = el.getAttribute(\"style\") || \"\";\n const hasSemanticStyle =\n style.includes(\"font-size\") ||\n style.includes(\"color\") ||\n style.includes(\"background-color\");\n\n // Transparent wrapper (e.g. Lexical's <span style=\"white-space: pre-wrap;\">)\n // Return text content directly\n if (!hasSemanticStyle) {\n if (\n el.childNodes.length === 1 &&\n el.firstChild?.nodeType === Node.TEXT_NODE\n ) {\n return {\n type: \"text\",\n text: el.firstChild.textContent || \"\",\n };\n }\n // Multiple children: flatten (return each child as-is)\n if (children.length === 1) {\n return children[0];\n }\n // If multiple children, keep as span but without extra attributes\n if (children.length > 1) {\n return {\n type: \"span\",\n children,\n };\n }\n return null;\n }\n\n // Semantic span: extract meaningful style properties\n if (style) {\n style.split(\";\").forEach((rule) => {\n const [key, value] = rule\n .split(\":\")\n .map((s) => s.trim());\n if (key && value) {\n if (key === \"font-size\") {\n attributes.fontSize = value;\n } else if (key === \"color\") {\n attributes.color = value;\n } else if (key === \"background-color\") {\n attributes.backgroundColor = value;\n }\n }\n });\n }\n }\n\n // Map tag names to semantic types\n const type =\n tagName === \"strong\" || tagName === \"b\"\n ? \"bold\"\n : tagName === \"em\" || tagName === \"i\"\n ? \"italic\"\n : tagName === \"u\"\n ? \"underline\"\n : tagName === \"s\" ||\n tagName === \"del\" ||\n tagName === \"strike\"\n ? \"strikethrough\"\n : tagName;\n\n return {\n type,\n children: children.length > 0 ? children : undefined,\n attributes:\n Object.keys(attributes).length > 0\n ? attributes\n : undefined,\n };\n }\n\n return null;\n }\n\n // Process all child nodes of the editor element\n Array.from(element.childNodes).forEach((node) => {\n const processed = processNode(node);\n if (processed) {\n // Wrap bare text nodes in a paragraph\n if (processed.type === \"text\") {\n blocks.push({ type: \"p\", children: [processed] });\n } else {\n blocks.push(processed);\n }\n }\n });\n\n if (blocks.length === 0) {\n blocks.push({ type: \"p\", children: [] });\n }\n\n return { blocks };\n}\n\n/**\n * Converts EditorContent JSON to DOM and appends to the container.\n */\nexport function contentToDOM(\n content: EditorContent,\n container: HTMLElement,\n customLinkComponent?: React.ComponentType<{\n href: string;\n children: React.ReactNode;\n [key: string]: unknown;\n }>,\n customHeadingRenderer?: (\n level: string,\n children: React.ReactNode\n ) => React.ReactElement\n): void {\n container.innerHTML = \"\";\n\n function createNode(node: EditorNode): Node {\n if (node.type === \"text\" && node.text !== undefined) {\n return document.createTextNode(node.text);\n }\n\n if (node.type === \"image\") {\n const img = document.createElement(\"img\");\n if (node.attributes) {\n if (node.attributes.src)\n img.setAttribute(\"src\", node.attributes.src);\n if (node.attributes.alt)\n img.setAttribute(\"alt\", node.attributes.alt);\n if (node.attributes.uploading === \"true\") {\n img.setAttribute(\"data-uploading\", \"true\");\n }\n }\n img.style.maxWidth = \"100%\";\n img.style.height = \"auto\";\n img.style.display = \"block\";\n img.style.margin = \"16px 0\";\n return img;\n }\n\n const tagMap: Record<string, string> = {\n bold: \"strong\",\n italic: \"em\",\n underline: \"u\",\n strikethrough: \"s\",\n link: \"a\",\n };\n\n let tagName = tagMap[node.type] || node.type;\n\n if (node.type === \"link\" && customLinkComponent) {\n tagName = \"a\";\n if (node.attributes) {\n node.attributes[\"data-custom-link\"] = \"true\";\n }\n }\n\n const element = document.createElement(tagName);\n\n if (node.attributes) {\n Object.entries(node.attributes).forEach(([key, value]) => {\n if (key === \"fontSize\") {\n element.style.fontSize = value;\n } else if (key === \"color\") {\n element.style.color = value;\n } else if (key === \"backgroundColor\") {\n element.style.backgroundColor = value;\n } else if (key === \"href\" && tagName === \"a\") {\n element.setAttribute(\"href\", value);\n } else if (key === \"class\") {\n element.className = value;\n } else {\n element.setAttribute(key, value);\n }\n });\n }\n\n if (node.children) {\n node.children.forEach((child) => {\n element.appendChild(createNode(child));\n });\n }\n\n // Set checkbox attributes on list items\n if (\n node.type === \"li\" &&\n node.attributes?.checkboxChecked !== undefined\n ) {\n element.setAttribute(\"role\", \"checkbox\");\n element.setAttribute(\"tabIndex\", \"-1\");\n element.setAttribute(\n \"aria-checked\",\n node.attributes.checkboxChecked\n );\n }\n\n return element;\n }\n\n content.blocks.forEach((block) => {\n container.appendChild(createNode(block));\n });\n\n // Normalize all checkbox lists after DOM creation\n ensureAllCheckboxes(container);\n}\n\n/**\n * Creates empty editor content with a single paragraph.\n */\nexport function createEmptyContent(): EditorContent {\n return {\n blocks: [{ type: \"p\", children: [] }],\n };\n}\n\n/**\n * Converts EditorContent to an HTML string.\n */\nexport function contentToHTML(content: EditorContent): string {\n const tempDiv = document.createElement(\"div\");\n contentToDOM(content, tempDiv);\n return tempDiv.innerHTML;\n}\n\n/**\n * Converts an HTML string to EditorContent.\n * Supports Lexical, GitHub, and standard HTML formats.\n */\nexport function htmlToContent(htmlString: string): EditorContent {\n const tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = htmlString;\n return domToContent(tempDiv);\n}\n","import { EditorContent } from '../types';\n\nexport class HistoryManager {\n private history: EditorContent[] = [];\n private currentIndex: number = -1;\n private maxHistorySize: number = 50;\n\n push(content: EditorContent): void {\n // Entferne alle Einträge nach currentIndex (wenn wir zurückgegangen sind)\n this.history = this.history.slice(0, this.currentIndex + 1);\n \n // Füge neuen Eintrag hinzu\n this.history.push(JSON.parse(JSON.stringify(content))); // Deep clone\n this.currentIndex++;\n \n // Begrenze die Historie\n if (this.history.length > this.maxHistorySize) {\n this.history.shift();\n this.currentIndex--;\n }\n }\n\n undo(): EditorContent | null {\n if (this.canUndo()) {\n this.currentIndex--;\n return JSON.parse(JSON.stringify(this.history[this.currentIndex]));\n }\n return null;\n }\n\n redo(): EditorContent | null {\n if (this.canRedo()) {\n this.currentIndex++;\n return JSON.parse(JSON.stringify(this.history[this.currentIndex]));\n }\n return null;\n }\n\n canUndo(): boolean {\n return this.currentIndex > 0;\n }\n\n canRedo(): boolean {\n return this.currentIndex < this.history.length - 1;\n }\n\n getCurrent(): EditorContent | null {\n if (this.currentIndex >= 0 && this.currentIndex < this.history.length) {\n return JSON.parse(JSON.stringify(this.history[this.currentIndex]));\n }\n return null;\n }\n\n reset(): void {\n this.history = [];\n this.currentIndex = -1;\n }\n}\n\n","/**\n * Erhöht den Einrückungs-Level eines List-Items (Tab)\n */\nexport function indentListItem(selection: Selection): boolean {\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem = container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest('li')\n : (container as HTMLElement).closest('li');\n\n if (!listItem) return false;\n\n const list = listItem.parentElement;\n if (!list || (list.tagName !== 'UL' && list.tagName !== 'OL')) return false;\n\n // Prüfe ob bereits verschachtelt (max depth check)\n let depth = 0;\n let current: HTMLElement | null = listItem;\n while (current) {\n const parent: HTMLElement | null = current.parentElement;\n if (parent && (parent.tagName === 'UL' || parent.tagName === 'OL')) {\n depth++;\n current = parent.closest('li');\n } else {\n break;\n }\n }\n\n // Max depth: 6 (wie in HTML Standard)\n if (depth >= 6) return false;\n\n // Finde vorheriges List-Item\n const previousItem = listItem.previousElementSibling as HTMLElement | null;\n \n if (previousItem && previousItem.tagName === 'LI') {\n // Erstelle verschachtelte Liste im vorherigen Item\n let nestedList = previousItem.querySelector('ul, ol');\n \n if (!nestedList) {\n // Erstelle neue verschachtelte Liste\n nestedList = document.createElement(list.tagName.toLowerCase() as 'ul' | 'ol');\n previousItem.appendChild(nestedList);\n }\n \n // Verschiebe aktuelles Item in verschachtelte Liste\n nestedList.appendChild(listItem);\n \n // Cursor setzen\n const textNode = listItem.firstChild;\n if (textNode && textNode.nodeType === Node.TEXT_NODE) {\n range.setStart(textNode, 0);\n range.collapse(true);\n } else if (listItem.firstChild) {\n range.setStart(listItem.firstChild, 0);\n range.collapse(true);\n } else {\n const newText = document.createTextNode('');\n listItem.appendChild(newText);\n range.setStart(newText, 0);\n range.collapse(true);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n \n return true;\n } else {\n // Kein vorheriges Item - erstelle neue verschachtelte Liste im aktuellen Item\n const nestedList = document.createElement(list.tagName.toLowerCase() as 'ul' | 'ol');\n \n // Verschiebe alle nachfolgenden Items in die verschachtelte Liste\n let nextSibling = listItem.nextElementSibling;\n while (nextSibling && nextSibling.tagName === 'LI') {\n const toMove = nextSibling;\n nextSibling = nextSibling.nextElementSibling;\n nestedList.appendChild(toMove);\n }\n \n if (nestedList.children.length > 0) {\n listItem.appendChild(nestedList);\n } else {\n // Wenn keine nachfolgenden Items, erstelle leeres Sub-Item\n const subItem = document.createElement('li');\n nestedList.appendChild(subItem);\n listItem.appendChild(nestedList);\n \n // Cursor ins Sub-Item setzen\n const newText = document.createTextNode('');\n subItem.appendChild(newText);\n range.setStart(newText, 0);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n \n return true;\n }\n}\n\n/**\n * Reduziert den Einrückungs-Level eines List-Items (Shift+Tab)\n */\nexport function outdentListItem(selection: Selection): boolean {\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem = container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest('li')\n : (container as HTMLElement).closest('li');\n\n if (!listItem) return false;\n\n const list = listItem.parentElement;\n if (!list || (list.tagName !== 'UL' && list.tagName !== 'OL')) return false;\n\n // Prüfe ob in verschachtelter Liste\n const parentListItem = list.parentElement;\n if (!parentListItem || parentListItem.tagName !== 'LI') {\n // Bereits auf oberstem Level\n return false;\n }\n\n const parentList = parentListItem.parentElement;\n if (!parentList || (parentList.tagName !== 'UL' && parentList.tagName !== 'OL')) {\n return false;\n }\n\n // Verschiebe Item auf oberes Level\n // Finde Position nach dem Parent-Item\n const insertAfter = parentListItem;\n \n // Verschiebe Item und alle nachfolgenden Items aus der verschachtelten Liste\n const itemsToMove: HTMLElement[] = [listItem];\n let nextSibling = listItem.nextElementSibling;\n while (nextSibling && nextSibling.tagName === 'LI') {\n itemsToMove.push(nextSibling as HTMLElement);\n nextSibling = nextSibling.nextElementSibling;\n }\n\n // Füge Items nach dem Parent-Item ein\n itemsToMove.forEach(item => {\n parentList.insertBefore(item, insertAfter.nextSibling);\n });\n\n // Entferne leere verschachtelte Liste\n if (list.children.length === 0) {\n list.remove();\n }\n\n // Cursor setzen\n const textNode = listItem.firstChild;\n if (textNode && textNode.nodeType === Node.TEXT_NODE) {\n range.setStart(textNode, 0);\n range.collapse(true);\n } else if (listItem.firstChild) {\n range.setStart(listItem.firstChild, 0);\n range.collapse(true);\n } else {\n const newText = document.createTextNode('');\n listItem.appendChild(newText);\n range.setStart(newText, 0);\n range.collapse(true);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n\n return true;\n}\n\n","/** Debounce time for pushing to history after input (ms) */\nexport const HISTORY_DEBOUNCE_MS = 300;\n\n/** Width of the clickable checkbox area in pixels */\nexport const CHECKBOX_CLICK_ZONE_PX = 40;\n\n/** Maximum nesting depth for lists */\nexport const MAX_LIST_DEPTH = 6;\n\n/** Maximum number of history entries */\nexport const MAX_HISTORY_SIZE = 50;\n","import { useCallback, useEffect } from \"react\";\nimport { CHECKBOX_CLICK_ZONE_PX } from \"../constants\";\nimport { EditorContent } from \"../types\";\nimport {\n ensureAllCheckboxes,\n findCheckListItemSibling,\n getActiveCheckListItem,\n toggleListItemChecked,\n updateListItemChecked,\n} from \"../utils/checkbox\";\nimport {\n findClosestCheckboxList,\n findClosestListItem,\n isCheckboxList,\n isNestedListItem,\n setCursorInTextNode,\n} from \"../utils/dom\";\n\ninterface UseCheckboxOptions {\n editorRef: React.RefObject<HTMLDivElement | null>;\n isUpdatingRef: React.MutableRefObject<boolean>;\n pushToHistory: (content: EditorContent) => void;\n notifyChange: (content: EditorContent) => void;\n getDomContent: () => EditorContent;\n}\n\n/**\n * Hook that manages all checkbox list interactions.\n * Consolidates click handling, keyboard navigation, and checkbox insertion.\n * Uses event delegation (single listener on editor root) for all checkbox events.\n */\nexport function useCheckbox({\n editorRef,\n isUpdatingRef,\n pushToHistory,\n notifyChange,\n getDomContent,\n}: UseCheckboxOptions) {\n // --- Event Listeners (click + pointerdown) ---\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const handleClick = (event: Event): void => {\n const clickTarget = event.target;\n if (!(clickTarget instanceof HTMLElement)) return;\n\n const listItem =\n clickTarget.tagName === \"LI\"\n ? (clickTarget as HTMLLIElement)\n : (clickTarget.closest(\"li\") as HTMLLIElement);\n if (!listItem) return;\n\n const parentNode = listItem.parentElement;\n if (!parentNode || !isCheckboxList(parentNode)) return;\n if (listItem.getAttribute(\"role\") !== \"checkbox\") return;\n if (isNestedListItem(listItem)) return;\n\n const rect = listItem.getBoundingClientRect();\n const clientX = (event as MouseEvent).clientX;\n const isInCheckboxArea =\n listItem.dir === \"rtl\"\n ? clientX >= rect.right - CHECKBOX_CLICK_ZONE_PX\n : clientX <= rect.left + CHECKBOX_CLICK_ZONE_PX;\n\n if (isInCheckboxArea) {\n event.preventDefault();\n event.stopPropagation();\n toggleListItemChecked(listItem);\n // Trigger change event\n const changeEvent = new Event(\"input\", { bubbles: true });\n editor.dispatchEvent(changeEvent);\n }\n };\n\n const handlePointerDown = (event: PointerEvent): void => {\n const target = event.target;\n if (!(target instanceof HTMLElement)) return;\n\n const listItem =\n target.tagName === \"LI\"\n ? target\n : target.closest(\"li\");\n if (!listItem) return;\n if (isNestedListItem(listItem)) return;\n\n const parentNode = listItem.parentElement;\n if (!parentNode || !isCheckboxList(parentNode)) return;\n\n const rect = listItem.getBoundingClientRect();\n const clientX = event.clientX;\n const isInCheckboxArea =\n listItem.dir === \"rtl\"\n ? clientX >= rect.right - CHECKBOX_CLICK_ZONE_PX\n : clientX <= rect.left + CHECKBOX_CLICK_ZONE_PX;\n\n if (isInCheckboxArea) {\n event.preventDefault();\n }\n };\n\n editor.addEventListener(\"click\", handleClick, true);\n editor.addEventListener(\n \"pointerdown\",\n handlePointerDown as EventListener,\n true\n );\n\n return () => {\n editor.removeEventListener(\"click\", handleClick, true);\n editor.removeEventListener(\n \"pointerdown\",\n handlePointerDown as EventListener,\n true\n );\n };\n }, [editorRef]);\n\n // --- Keyboard handlers (called from useEditorEvents) ---\n\n /**\n * Handles checkbox-specific keyboard events.\n * Returns true if the event was handled and should not propagate.\n */\n const handleCheckboxKeyDown = useCallback(\n (e: KeyboardEvent): boolean => {\n // Arrow up/down: navigate between checkbox items\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n const activeItem = getActiveCheckListItem();\n if (activeItem) {\n const backward = e.key === \"ArrowUp\";\n const nextItem = findCheckListItemSibling(\n activeItem as HTMLLIElement,\n backward\n );\n if (nextItem) {\n e.preventDefault();\n nextItem.focus();\n return true;\n }\n }\n }\n\n // Space: toggle checkbox\n if (e.key === \" \") {\n const activeItem = getActiveCheckListItem();\n if (activeItem) {\n e.preventDefault();\n toggleListItemChecked(activeItem as HTMLLIElement);\n const editorEl = activeItem.closest(\".rte-editor\");\n if (editorEl) {\n editorEl.dispatchEvent(\n new Event(\"input\", { bubbles: true })\n );\n }\n return true;\n }\n }\n\n // Escape: blur from checkbox item\n if (e.key === \"Escape\") {\n const activeItem = getActiveCheckListItem();\n if (activeItem) {\n const editorEl = activeItem.closest(\".rte-editor\");\n if (editorEl instanceof HTMLElement) {\n editorEl.focus();\n }\n return true;\n }\n }\n\n // Arrow left: focus list item when cursor is at the start\n if (e.key === \"ArrowLeft\") {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem = findClosestListItem(container);\n if (!listItem) return false;\n\n const parent = listItem.parentElement;\n if (\n parent &&\n isCheckboxList(parent) &&\n range.collapsed &&\n range.startOffset === 0\n ) {\n if (document.activeElement !== listItem) {\n listItem.focus();\n e.preventDefault();\n return true;\n }\n }\n }\n\n return false;\n },\n []\n );\n\n /**\n * Handles Enter key in checkbox lists.\n * Creates a new unchecked item after the current one.\n * Returns true if the event was handled.\n */\n const handleCheckboxEnter = useCallback(\n (e: KeyboardEvent): boolean => {\n if (e.key !== \"Enter\") return false;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const listItem = findClosestListItem(container);\n if (!listItem) return false;\n\n const checkboxList = findClosestCheckboxList(listItem);\n if (!checkboxList) return false;\n\n e.preventDefault();\n\n const newLi = document.createElement(\"li\");\n updateListItemChecked(newLi, false);\n const textNode = document.createTextNode(\" \");\n newLi.appendChild(textNode);\n\n if (listItem.nextSibling) {\n checkboxList.insertBefore(newLi, listItem.nextSibling);\n } else {\n checkboxList.appendChild(newLi);\n }\n\n const editor = editorRef.current;\n if (editor) ensureAllCheckboxes(editor);\n\n const newRange = document.createRange();\n newRange.setStart(textNode, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n if (editor) {\n const content = getDomContent();\n pushToHistory(content);\n notifyChange(content);\n }\n\n return true;\n },\n [editorRef, getDomContent, pushToHistory, notifyChange]\n );\n\n /**\n * Inserts a new checkbox list at the current cursor position,\n * or removes it if already inside one.\n * Returns true on success.\n */\n const insertCheckboxList = useCallback(\n (editor: HTMLElement): boolean => {\n isUpdatingRef.current = true;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) {\n isUpdatingRef.current = false;\n return false;\n }\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) {\n isUpdatingRef.current = false;\n return false;\n }\n\n // Already in a checkbox list? Remove it.\n const existingList = findClosestCheckboxList(element);\n if (existingList) {\n existingList.classList.remove(\"rte-checkbox-list\");\n existingList\n .querySelectorAll(\"li[role='checkbox']\")\n .forEach((li) => {\n li.removeAttribute(\"role\");\n li.removeAttribute(\"tabIndex\");\n li.removeAttribute(\"aria-checked\");\n });\n isUpdatingRef.current = false;\n return true;\n }\n\n // Create new checkbox list\n const ul = document.createElement(\"ul\");\n ul.classList.add(\"rte-checkbox-list\");\n\n const li = document.createElement(\"li\");\n updateListItemChecked(li, false);\n const textNode = document.createTextNode(\" \");\n li.appendChild(textNode);\n ul.appendChild(li);\n\n // Find block element to replace\n const blockElement = element.closest(\n \"p, div, h1, h2, h3, h4, h5, h6, blockquote\"\n );\n const isValidBlockElement =\n blockElement &&\n blockElement !== editor &&\n editor.contains(blockElement) &&\n blockElement.parentElement;\n\n if (isValidBlockElement) {\n const textContent = blockElement.textContent || \"\";\n blockElement.parentElement!.replaceChild(ul, blockElement);\n const finalTextNode = li.firstChild as Text;\n if (finalTextNode) {\n finalTextNode.textContent = textContent || \" \";\n const cursorPos = textContent ? textContent.length : 0;\n setCursorInTextNode(finalTextNode, cursorPos, editor);\n }\n } else {\n try {\n range.deleteContents();\n range.insertNode(ul);\n const finalTextNode = li.firstChild as Text;\n if (finalTextNode) {\n setCursorInTextNode(finalTextNode, 0, editor);\n }\n } catch (_) {\n editor.appendChild(ul);\n const finalTextNode = li.firstChild as Text;\n if (finalTextNode) {\n setCursorInTextNode(finalTextNode, 0, editor);\n }\n }\n }\n\n // After insertion: ensure attributes and save to history\n setTimeout(() => {\n if (!editor) return;\n ensureAllCheckboxes(editor);\n const content = getDomContent();\n pushToHistory(content);\n isUpdatingRef.current = false;\n notifyChange(content);\n }, 100);\n\n return true;\n },\n [isUpdatingRef, getDomContent, pushToHistory, notifyChange]\n );\n\n return {\n ensureAllCheckboxes,\n insertCheckboxList,\n handleCheckboxKeyDown,\n handleCheckboxEnter,\n updateListItemChecked,\n };\n}\n","import { useEffect } from \"react\";\nimport { HISTORY_DEBOUNCE_MS } from \"../constants\";\nimport { EditorContent } from \"../types\";\nimport { ensureAllCheckboxes } from \"../utils/checkbox\";\nimport { domToContent } from \"../utils/content\";\nimport { HistoryManager } from \"../utils/history\";\nimport { indentListItem, outdentListItem } from \"../utils/listIndent\";\n\ninterface UseEditorEventsOptions {\n editorRef: React.RefObject<HTMLDivElement | null>;\n historyRef: React.MutableRefObject<HistoryManager>;\n isUpdatingRef: React.MutableRefObject<boolean>;\n notifyChange: (content: EditorContent) => void;\n handleCheckboxKeyDown: (e: KeyboardEvent) => boolean;\n handleCheckboxEnter: (e: KeyboardEvent) => boolean;\n undo: () => void;\n redo: () => void;\n}\n\n/**\n * Hook that sets up input, keyup, and keydown event listeners on the editor.\n */\nexport function useEditorEvents({\n editorRef,\n historyRef,\n isUpdatingRef,\n notifyChange,\n handleCheckboxKeyDown,\n handleCheckboxEnter,\n undo,\n redo,\n}: UseEditorEventsOptions) {\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n let inputTimeout: ReturnType<typeof setTimeout> | null = null;\n\n const handleInput = () => {\n setTimeout(() => {\n const content = domToContent(editor);\n notifyChange(content);\n\n if (inputTimeout) clearTimeout(inputTimeout);\n inputTimeout = setTimeout(() => {\n historyRef.current.push(content);\n inputTimeout = null;\n }, HISTORY_DEBOUNCE_MS);\n }, 0);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isModifierPressed = e.metaKey || e.ctrlKey;\n\n // Checkbox Enter: create new checkbox item\n if (handleCheckboxEnter(e)) return;\n\n // Checkbox keyboard navigation\n if (handleCheckboxKeyDown(e)) return;\n\n // Tab: indent/outdent in lists\n if (e.key === \"Tab\" && !isModifierPressed && !e.altKey) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n if (!editor.contains(container)) return;\n\n const listItem =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"li\")\n : (container as HTMLElement).closest(\"li\");\n\n if (listItem && editor.contains(listItem)) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n\n if (e.shiftKey) {\n outdentListItem(selection);\n } else {\n indentListItem(selection);\n }\n\n setTimeout(() => {\n if (editor) {\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n return;\n }\n }\n\n // Undo/Redo shortcuts\n if (isModifierPressed && e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n undo();\n } else if (\n isModifierPressed &&\n (e.key === \"y\" || (e.key === \"z\" && e.shiftKey))\n ) {\n e.preventDefault();\n e.stopPropagation();\n redo();\n }\n };\n\n editor.addEventListener(\"input\", handleInput);\n editor.addEventListener(\"keyup\", handleInput);\n editor.addEventListener(\"keydown\", handleKeyDown, true);\n\n return () => {\n editor.removeEventListener(\"input\", handleInput);\n editor.removeEventListener(\"keyup\", handleInput);\n editor.removeEventListener(\"keydown\", handleKeyDown, true);\n if (inputTimeout) clearTimeout(inputTimeout);\n };\n }, [\n editorRef,\n historyRef,\n isUpdatingRef,\n notifyChange,\n handleCheckboxKeyDown,\n handleCheckboxEnter,\n undo,\n redo,\n ]);\n}\n","import { useEffect, useRef } from \"react\";\nimport React from \"react\";\nimport { EditorContent } from \"../types\";\nimport { ensureAllCheckboxes } from \"../utils/checkbox\";\nimport { contentToDOM, createEmptyContent } from \"../utils/content\";\nimport { HistoryManager } from \"../utils/history\";\n\ninterface UseEditorInitOptions {\n editorRef: React.RefObject<HTMLDivElement | null>;\n historyRef: React.MutableRefObject<HistoryManager>;\n isUpdatingRef: React.MutableRefObject<boolean>;\n initialContent?: EditorContent;\n notifyChange: (content: EditorContent) => void;\n customLinkComponent?: React.ComponentType<{\n href: string;\n children: React.ReactNode;\n [key: string]: unknown;\n }>;\n customHeadingRenderer?: (\n level: string,\n children: React.ReactNode\n ) => React.ReactElement;\n}\n\n/**\n * Hook that initializes the editor with initial content and sets up the MutationObserver.\n * Runs once on mount.\n */\nexport function useEditorInit({\n editorRef,\n historyRef,\n isUpdatingRef,\n initialContent,\n customLinkComponent,\n customHeadingRenderer,\n}: UseEditorInitOptions) {\n const isInitializedRef = useRef(false);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || isInitializedRef.current) return;\n\n // Load initial content\n const content = initialContent || createEmptyContent();\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n isInitializedRef.current = true;\n\n // Normalize all checkbox lists (own + Lexical + GitHub formats)\n ensureAllCheckboxes(editor);\n\n // MutationObserver: ensure new checkbox list items get correct attributes\n const observer = new MutationObserver((mutations) => {\n if (isUpdatingRef.current) return;\n\n let needsUpdate = false;\n for (const mutation of mutations) {\n for (let i = 0; i < mutation.addedNodes.length; i++) {\n const node = mutation.addedNodes[i];\n if (node.nodeType !== Node.ELEMENT_NODE) continue;\n const el = node as HTMLElement;\n if (\n el.tagName === \"LI\" &&\n el.closest(\"ul.rte-checkbox-list\")\n ) {\n needsUpdate = true;\n break;\n }\n if (\n el.tagName === \"UL\" &&\n el.classList.contains(\"rte-checkbox-list\")\n ) {\n needsUpdate = true;\n break;\n }\n if (el.querySelector(\"ul.rte-checkbox-list li\")) {\n needsUpdate = true;\n break;\n }\n }\n if (needsUpdate) break;\n }\n\n if (needsUpdate) {\n setTimeout(() => ensureAllCheckboxes(editor), 0);\n }\n });\n\n observer.observe(editor, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n };\n // Only run once on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n","import { useCallback } from \"react\";\n\n/**\n * Hook for editor selection management.\n */\nexport function useEditorSelection() {\n const restoreSelection = useCallback((editor: HTMLElement) => {\n if (\n typeof window === \"undefined\" ||\n typeof document === \"undefined\"\n )\n return;\n const range = document.createRange();\n const selection = window.getSelection();\n\n if (editor.firstChild) {\n range.setStart(editor.firstChild, 0);\n range.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }, []);\n\n return { restoreSelection };\n}\n","import React, { useEffect, useState } from \"react\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\n\ninterface ToolbarProps {\n plugins: Plugin[];\n editorAPI: EditorAPI;\n className?: string;\n}\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n plugins,\n editorAPI,\n className,\n}) => {\n const [updateTrigger, setUpdateTrigger] = useState(0);\n const [isClient, setIsClient] = useState(false);\n\n useEffect(() => {\n setIsClient(true);\n \n const handleSelectionChange = () => {\n setUpdateTrigger((prev) => prev + 1);\n };\n\n const handleMouseUp = () => {\n setTimeout(handleSelectionChange, 10);\n };\n\n const handleKeyUp = () => {\n setTimeout(handleSelectionChange, 10);\n };\n\n if (typeof document !== 'undefined') {\n document.addEventListener(\"selectionchange\", handleSelectionChange);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"keyup\", handleKeyUp);\n }\n\n return () => {\n if (typeof document !== 'undefined') {\n document.removeEventListener(\n \"selectionchange\",\n handleSelectionChange\n );\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"keyup\", handleKeyUp);\n }\n };\n }, []);\n\n const handlePluginClick = (plugin: Plugin, value?: string) => {\n if (plugin.canExecute?.(editorAPI) !== false) {\n if (plugin.execute) {\n plugin.execute(editorAPI, value);\n } else if (plugin.command && value !== undefined) {\n editorAPI.executeCommand(plugin.command, value);\n } else if (plugin.command) {\n editorAPI.executeCommand(plugin.command);\n }\n setTimeout(() => setUpdateTrigger((prev) => prev + 1), 50);\n }\n };\n\n const leftPlugins = plugins.filter((p) => p.name !== \"clearFormatting\");\n const clearFormattingPlugin = plugins.find(\n (p) => p.name === \"clearFormatting\"\n );\n\n return (\n <div className={`rte-toolbar rte-toolbar-sticky ${className || \"\"}`}>\n <div className=\"rte-toolbar-left\">\n {leftPlugins.map((plugin) => {\n if (!plugin.renderButton) return null;\n\n const isActive = isClient && plugin.isActive\n ? plugin.isActive(editorAPI)\n : false;\n const canExecute = isClient && plugin.canExecute\n ? plugin.canExecute(editorAPI)\n : true;\n\n const currentValue = isClient && plugin.getCurrentValue\n ? plugin.getCurrentValue(editorAPI)\n : undefined;\n\n const buttonProps: ButtonProps & { [key: string]: any } = {\n isActive,\n onClick: () => handlePluginClick(plugin),\n disabled: !canExecute,\n onSelect: (value: string) =>\n handlePluginClick(plugin, value),\n editorAPI,\n currentValue,\n };\n\n return (\n <React.Fragment key={plugin.name}>\n {plugin.renderButton(buttonProps)}\n </React.Fragment>\n );\n })}\n </div>\n\n {clearFormattingPlugin && clearFormattingPlugin.renderButton && (\n <div className=\"rte-toolbar-right\">\n <div className=\"rte-toolbar-divider\" />\n {(() => {\n const isActive = isClient && clearFormattingPlugin.isActive\n ? clearFormattingPlugin.isActive(editorAPI)\n : false;\n const canExecute = isClient && clearFormattingPlugin.canExecute\n ? clearFormattingPlugin.canExecute(editorAPI)\n : true;\n\n const buttonProps: ButtonProps & {\n [key: string]: any;\n } = {\n isActive,\n onClick: () =>\n handlePluginClick(clearFormattingPlugin),\n disabled: !canExecute,\n editorAPI,\n };\n\n return (\n <React.Fragment key={clearFormattingPlugin.name}>\n {clearFormattingPlugin.renderButton(\n buttonProps\n )}\n </React.Fragment>\n );\n })()}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { defaultPlugins } from \"../plugins\";\nimport { createBlockFormatPlugin } from \"../plugins/blockFormat\";\nimport {\n createBackgroundColorPlugin,\n createTextColorPlugin,\n} from \"../plugins/colors\";\nimport { createFontSizePlugin } from \"../plugins/fontSize\";\nimport { createImagePlugin } from \"../plugins/image\";\nimport { EditorAPI, EditorContent, EditorProps } from \"../types\";\nimport { ensureAllCheckboxes } from \"../utils/checkbox\";\nimport {\n clearBackgroundColor,\n clearFontSize,\n clearFormatting,\n clearLinks,\n clearTextColor,\n} from \"../utils/clearFormatting\";\nimport {\n contentToDOM,\n contentToHTML,\n createEmptyContent,\n domToContent,\n htmlToContent,\n} from \"../utils/content\";\nimport { HistoryManager } from \"../utils/history\";\nimport { indentListItem, outdentListItem } from \"../utils/listIndent\";\nimport { useCheckbox } from \"../hooks/useCheckbox\";\nimport { useEditorEvents } from \"../hooks/useEditorEvents\";\nimport { useEditorInit } from \"../hooks/useEditorInit\";\nimport { useEditorSelection } from \"../hooks/useEditorSelection\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport const Editor: React.FC<EditorProps> = ({\n initialContent,\n onChange,\n plugins: providedPlugins,\n placeholder = \"Text eingeben...\",\n className,\n toolbarClassName,\n editorClassName,\n fontSizes,\n colors,\n headings,\n customLinkComponent,\n customHeadingRenderer,\n customRenderer,\n onEditorAPIReady,\n theme,\n onImageUpload,\n}) => {\n // --- Shared Refs ---\n const editorRef = useRef<HTMLDivElement>(null);\n const historyRef = useRef<HistoryManager>(new HistoryManager());\n const isUpdatingRef = useRef(false);\n\n // --- Plugins ---\n const plugins = useMemo(() => {\n const allPlugins = [...(providedPlugins || defaultPlugins)];\n\n if (headings && headings.length > 0) {\n const blockFormatIndex = allPlugins.findIndex(\n (p) => p.name === \"blockFormat\"\n );\n if (blockFormatIndex !== -1) {\n allPlugins[blockFormatIndex] =\n createBlockFormatPlugin(headings);\n } else {\n const redoIndex = allPlugins.findIndex(\n (p) => p.name === \"redo\"\n );\n if (redoIndex !== -1) {\n allPlugins.splice(\n redoIndex + 1,\n 0,\n createBlockFormatPlugin(headings)\n );\n } else {\n allPlugins.push(createBlockFormatPlugin(headings));\n }\n }\n }\n\n if (fontSizes && fontSizes.length > 0) {\n const blockFormatIndex = allPlugins.findIndex(\n (p) => p.name === \"blockFormat\"\n );\n if (blockFormatIndex !== -1) {\n allPlugins.splice(\n blockFormatIndex + 1,\n 0,\n createFontSizePlugin(fontSizes)\n );\n } else {\n allPlugins.push(createFontSizePlugin(fontSizes));\n }\n }\n\n if (colors && colors.length > 0) {\n allPlugins.push(createTextColorPlugin(colors));\n allPlugins.push(createBackgroundColorPlugin(colors));\n }\n\n allPlugins.push(createImagePlugin(onImageUpload));\n\n return allPlugins;\n }, [providedPlugins, fontSizes, colors, headings, onImageUpload]);\n\n // --- Callbacks ---\n const notifyChange = useCallback(\n (content: EditorContent) => {\n if (onChange) onChange(content);\n },\n [onChange]\n );\n\n const getDomContent = useCallback((): EditorContent => {\n const editor = editorRef.current;\n if (!editor) return createEmptyContent();\n return domToContent(editor);\n }, []);\n\n const pushToHistory = useCallback((content: EditorContent) => {\n historyRef.current.push(content);\n }, []);\n\n // --- Hooks ---\n const { restoreSelection } = useEditorSelection();\n\n const checkbox = useCheckbox({\n editorRef,\n isUpdatingRef,\n pushToHistory,\n notifyChange,\n getDomContent,\n });\n\n // --- Undo / Redo ---\n const undo = useCallback(() => {\n const content = historyRef.current.undo();\n const editor = editorRef.current;\n if (content && editor) {\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n restoreSelection(editor);\n isUpdatingRef.current = false;\n notifyChange(content);\n }\n }, [\n customLinkComponent,\n customHeadingRenderer,\n restoreSelection,\n notifyChange,\n ]);\n\n const redo = useCallback(() => {\n const content = historyRef.current.redo();\n const editor = editorRef.current;\n if (content && editor) {\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n restoreSelection(editor);\n isUpdatingRef.current = false;\n notifyChange(content);\n }\n }, [\n customLinkComponent,\n customHeadingRenderer,\n restoreSelection,\n notifyChange,\n ]);\n\n // --- Editor API ---\n const editorAPI = useMemo<EditorAPI>(() => {\n const executeCommand = (command: string, value?: string): boolean => {\n const editor = editorRef.current;\n if (!editor) return false;\n\n // Save history before non-history commands\n if (\n command !== \"undo\" &&\n command !== \"redo\" &&\n command !== \"insertImage\" &&\n command !== \"insertCheckboxList\"\n ) {\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n }\n\n if (command === \"undo\") {\n undo();\n return true;\n }\n\n if (command === \"redo\") {\n redo();\n return true;\n }\n\n if (command === \"insertCheckboxList\") {\n return checkbox.insertCheckboxList(editor);\n }\n\n if (command === \"insertImage\" && value) {\n return handleInsertImage(\n editor,\n value,\n isUpdatingRef,\n historyRef,\n notifyChange\n );\n }\n\n // General commands via document.execCommand\n ensureEditorFocused(editor);\n\n document.execCommand(command, false, value);\n\n setTimeout(() => {\n if (editor && !isUpdatingRef.current) {\n ensureAllCheckboxes(editor);\n const content = domToContent(editor);\n notifyChange(content);\n }\n }, 0);\n\n return true;\n };\n\n return {\n executeCommand,\n\n getSelection: (): Selection | null => {\n if (typeof window === \"undefined\") return null;\n return window.getSelection();\n },\n\n getContent: (): EditorContent => {\n const editor = editorRef.current;\n if (!editor) return createEmptyContent();\n ensureAllCheckboxes(editor);\n return domToContent(editor);\n },\n\n setContent: (content: EditorContent): void => {\n const editor = editorRef.current;\n if (!editor) return;\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n notifyChange(content);\n },\n\n insertBlock: (\n type: string,\n attributes?: Record<string, string>\n ): void => {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n const range = selection.getRangeAt(0);\n const block = document.createElement(type);\n if (attributes) {\n Object.entries(attributes).forEach(([key, val]) => {\n block.setAttribute(key, val);\n });\n }\n range.insertNode(block);\n const textNode = document.createTextNode(\"\\u200B\");\n block.appendChild(textNode);\n range.setStartAfter(textNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n const editor = editorRef.current;\n if (editor) notifyChange(domToContent(editor));\n },\n\n insertInline: (\n type: string,\n attributes?: Record<string, string>\n ): void => {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n const range = selection.getRangeAt(0);\n const inline = document.createElement(type);\n if (attributes) {\n Object.entries(attributes).forEach(([key, val]) => {\n inline.setAttribute(key, val);\n });\n }\n try {\n range.surroundContents(inline);\n } catch (_) {\n const contents = range.extractContents();\n inline.appendChild(contents);\n range.insertNode(inline);\n }\n range.setStartAfter(inline);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n const editor = editorRef.current;\n if (editor) notifyChange(domToContent(editor));\n },\n\n undo: (): void => undo(),\n redo: (): void => redo(),\n canUndo: (): boolean => historyRef.current.canUndo(),\n canRedo: (): boolean => historyRef.current.canRedo(),\n\n importHtml: (htmlString: string): EditorContent => {\n const content = htmlToContent(htmlString);\n const editor = editorRef.current;\n if (editor) {\n isUpdatingRef.current = true;\n contentToDOM(\n content,\n editor,\n customLinkComponent,\n customHeadingRenderer\n );\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n notifyChange(content);\n }\n return content;\n },\n\n exportHtml: (): string => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n return contentToHTML(domToContent(editor));\n },\n\n clearFormatting: (): void => {\n executeWithHistory((selection) => clearFormatting(selection));\n },\n clearTextColor: (): void => {\n executeWithHistory((selection) => clearTextColor(selection));\n },\n clearBackgroundColor: (): void => {\n executeWithHistory((selection) =>\n clearBackgroundColor(selection)\n );\n },\n clearFontSize: (): void => {\n executeWithHistory((selection) => clearFontSize(selection));\n },\n clearLinks: (): void => {\n executeWithHistory((selection) => clearLinks(selection));\n },\n indentListItem: (): void => {\n executeWithHistory((selection) => indentListItem(selection));\n },\n outdentListItem: (): void => {\n executeWithHistory((selection) => outdentListItem(selection));\n },\n };\n\n /** Helper: push history, execute operation, then notify change. */\n function executeWithHistory(\n operation: (selection: Selection) => void\n ): void {\n const editor = editorRef.current;\n if (!editor) return;\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n const currentContent = domToContent(editor);\n historyRef.current.push(currentContent);\n operation(selection);\n setTimeout(() => {\n if (editor) notifyChange(domToContent(editor));\n }, 0);\n }\n }, [\n undo,\n redo,\n checkbox,\n notifyChange,\n customLinkComponent,\n customHeadingRenderer,\n ]);\n\n // --- Initialize editor ---\n useEditorInit({\n editorRef,\n historyRef,\n isUpdatingRef,\n initialContent,\n notifyChange,\n customLinkComponent,\n customHeadingRenderer,\n });\n\n // --- Set up event listeners ---\n useEditorEvents({\n editorRef,\n historyRef,\n isUpdatingRef,\n notifyChange,\n handleCheckboxKeyDown: checkbox.handleCheckboxKeyDown,\n handleCheckboxEnter: checkbox.handleCheckboxEnter,\n undo,\n redo,\n });\n\n // --- Expose editor API ---\n useEffect(() => {\n if (onEditorAPIReady) onEditorAPIReady(editorAPI);\n }, [editorAPI, onEditorAPIReady]);\n\n // --- Paste handler ---\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const html = e.clipboardData.getData(\"text/html\");\n const text = e.clipboardData.getData(\"text/plain\");\n\n if (html) {\n try {\n const pastedContent = htmlToContent(html);\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n\n const tempDiv = document.createElement(\"div\");\n contentToDOM(\n pastedContent,\n tempDiv,\n customLinkComponent,\n customHeadingRenderer\n );\n\n const fragment = document.createDocumentFragment();\n while (tempDiv.firstChild) {\n fragment.appendChild(tempDiv.firstChild);\n }\n\n range.insertNode(fragment);\n if (fragment.lastChild) {\n range.setStartAfter(fragment.lastChild);\n range.collapse(true);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n notifyChange(domToContent(editor));\n }\n } catch (_) {\n document.execCommand(\"insertText\", false, text);\n }\n } else if (text) {\n document.execCommand(\"insertText\", false, text);\n }\n };\n\n // --- Theme styles ---\n const containerStyle: React.CSSProperties = theme\n ? {\n ...(theme.borderColor &&\n ({\n \"--rte-border-color\": theme.borderColor,\n } as React.CSSProperties)),\n ...(theme.borderRadius &&\n ({\n \"--rte-border-radius\": `${theme.borderRadius}px`,\n } as React.CSSProperties)),\n ...(theme.toolbarBg &&\n ({\n \"--rte-toolbar-bg\": theme.toolbarBg,\n } as React.CSSProperties)),\n ...(theme.buttonHoverBg &&\n ({\n \"--rte-button-hover-bg\": theme.buttonHoverBg,\n } as React.CSSProperties)),\n ...(theme.contentBg &&\n ({\n \"--rte-content-bg\": theme.contentBg,\n } as React.CSSProperties)),\n ...(theme.primaryColor &&\n ({\n \"--rte-primary-color\": theme.primaryColor,\n } as React.CSSProperties)),\n }\n : {};\n\n return (\n <div\n className={`rte-container ${className || \"\"}`}\n style={containerStyle}\n >\n <Toolbar\n plugins={plugins}\n editorAPI={editorAPI}\n className={toolbarClassName}\n />\n <div\n ref={editorRef}\n contentEditable\n className={`rte-editor ${editorClassName || \"\"}`}\n data-placeholder={placeholder}\n onPaste={handlePaste}\n suppressContentEditableWarning\n />\n </div>\n );\n};\n\n// --- Helper: Insert Image ---\nfunction handleInsertImage(\n editor: HTMLElement,\n value: string,\n isUpdatingRef: React.MutableRefObject<boolean>,\n historyRef: React.MutableRefObject<HistoryManager>,\n notifyChange: (content: EditorContent) => void\n): boolean {\n let selection = window.getSelection();\n if (!selection) return false;\n\n if (document.activeElement !== editor) {\n editor.focus();\n }\n\n if (selection.rangeCount === 0) {\n const range = document.createRange();\n if (editor.childNodes.length > 0) {\n const lastChild = editor.childNodes[editor.childNodes.length - 1];\n range.setStartAfter(lastChild);\n range.collapse(true);\n } else {\n const img = createImageElement(value);\n editor.appendChild(img);\n const newRange = document.createRange();\n newRange.setStartAfter(img);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n saveAndNotify(editor, isUpdatingRef, historyRef, notifyChange);\n return true;\n }\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n if (selection.rangeCount === 0) return false;\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n let parentElement: HTMLElement | null = null;\n\n if (container.nodeType === Node.TEXT_NODE) {\n parentElement = container.parentElement;\n } else if (container.nodeType === Node.ELEMENT_NODE) {\n parentElement = container as HTMLElement;\n }\n\n const img = createImageElement(value);\n\n if (\n parentElement &&\n parentElement !== editor &&\n /^(P|DIV|H[1-6])$/.test(parentElement.tagName)\n ) {\n if (parentElement.nextSibling) {\n editor.insertBefore(img, parentElement.nextSibling);\n } else {\n editor.appendChild(img);\n }\n } else {\n try {\n range.insertNode(img);\n } catch (_) {\n editor.appendChild(img);\n }\n }\n\n const newRange = document.createRange();\n newRange.setStartAfter(img);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n saveAndNotify(editor, isUpdatingRef, historyRef, notifyChange);\n return true;\n}\n\nfunction createImageElement(src: string): HTMLImageElement {\n const img = document.createElement(\"img\");\n img.setAttribute(\"src\", src);\n img.setAttribute(\"alt\", \"\");\n img.style.maxWidth = \"100%\";\n img.style.height = \"auto\";\n img.style.display = \"block\";\n img.style.margin = \"16px 0\";\n return img;\n}\n\nfunction saveAndNotify(\n editor: HTMLElement,\n isUpdatingRef: React.MutableRefObject<boolean>,\n historyRef: React.MutableRefObject<HistoryManager>,\n notifyChange: (content: EditorContent) => void\n): void {\n isUpdatingRef.current = true;\n setTimeout(() => {\n const content = domToContent(editor);\n historyRef.current.push(content);\n isUpdatingRef.current = false;\n notifyChange(content);\n }, 0);\n}\n\n/** Ensures the editor is focused and has a valid selection. */\nfunction ensureEditorFocused(editor: HTMLElement): void {\n const selection = window.getSelection();\n let savedRange: Range | null = null;\n\n if (selection && selection.rangeCount > 0) {\n savedRange = selection.getRangeAt(0).cloneRange();\n }\n\n if (document.activeElement !== editor) {\n editor.focus();\n }\n\n if (!selection || selection.rangeCount === 0) {\n const range = document.createRange();\n if (editor.childNodes.length > 0) {\n const lastChild = editor.childNodes[editor.childNodes.length - 1];\n if (lastChild.nodeType === Node.TEXT_NODE) {\n range.setStart(\n lastChild,\n lastChild.textContent?.length || 0\n );\n range.setEnd(\n lastChild,\n lastChild.textContent?.length || 0\n );\n } else {\n range.selectNodeContents(lastChild);\n range.collapse(false);\n }\n } else {\n const p = document.createElement(\"p\");\n editor.appendChild(p);\n const textNode = document.createTextNode(\"\");\n p.appendChild(textNode);\n range.setStart(textNode, 0);\n range.setEnd(textNode, 0);\n }\n selection?.removeAllRanges();\n selection?.addRange(range);\n } else if (savedRange) {\n selection.removeAllRanges();\n selection.addRange(savedRange);\n }\n}\n","import { Dropdown } from \"../components/Dropdown\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\nimport { getCurrentHeading } from \"../utils/stateReflection\";\n\nconst defaultHeadings = [\"h1\", \"h2\", \"h3\"];\n\nconst headingLabels: Record<string, string> = {\n h1: \"Überschrift 1\",\n h2: \"Überschrift 2\",\n h3: \"Überschrift 3\",\n h4: \"Überschrift 4\",\n h5: \"Überschrift 5\",\n h6: \"Überschrift 6\",\n};\n\nexport function createHeadingsPlugin(\n headings: string[] = defaultHeadings\n): Plugin {\n const options = [\n { value: \"p\", label: \"Normal\", headingPreview: \"p\" },\n ...headings.map((h) => ({\n value: h,\n label: headingLabels[h] || h.toUpperCase(),\n headingPreview: h,\n })),\n ];\n\n return {\n name: \"headings\",\n type: \"block\",\n renderButton: (\n props: ButtonProps & {\n onSelect?: (value: string) => void;\n editorAPI?: EditorAPI;\n currentValue?: string;\n }\n ) => {\n // Aktuelles Heading aus State Reflection\n const currentValue =\n props.currentValue ||\n (props.editorAPI\n ? getCurrentHeading(props.editorAPI, headings)\n : undefined);\n\n return (\n <Dropdown\n icon=\"mdi:format-header-1\"\n label=\"Überschrift\"\n options={options}\n onSelect={(value) => {\n if (props.onSelect) {\n props.onSelect(value);\n } else {\n props.onClick();\n }\n }}\n currentValue={currentValue}\n disabled={props.disabled}\n />\n );\n },\n getCurrentValue: (editor: EditorAPI) => {\n return getCurrentHeading(editor, headings);\n },\n execute: (editor: EditorAPI, value?: string) => {\n const tag = value || \"p\";\n editor.executeCommand(\"formatBlock\", `<${tag}>`);\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n const tagName = element.tagName.toLowerCase();\n return headings.includes(tagName);\n },\n canExecute: () => true,\n };\n}\n","import { IconWrapper } from \"../components/IconWrapper\";\nimport { ButtonProps, EditorAPI, Plugin } from \"../types\";\n\n/**\n * Link-Plugin mit verbesserter Funktionalität\n */\nexport function createLinkPlugin(): Plugin {\n return {\n name: \"link\",\n type: \"inline\",\n command: \"createLink\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Link einfügen\"\n aria-label=\"Link einfügen\"\n >\n <IconWrapper icon=\"mdi:link\" width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n // Prüfe ob bereits ein Link vorhanden ist\n const existingLink = element?.closest(\"a\") as HTMLAnchorElement;\n\n if (existingLink) {\n // Link entfernen\n const parent = existingLink.parentNode;\n if (parent) {\n while (existingLink.firstChild) {\n parent.insertBefore(\n existingLink.firstChild,\n existingLink\n );\n }\n parent.removeChild(existingLink);\n // Content aktualisieren\n const editorEl = editor.getSelection()?.anchorNode;\n if (editorEl) {\n const content = editor.getContent();\n editor.setContent(content);\n }\n }\n } else {\n // Neuen Link einfügen\n const url = prompt(\"URL eingeben:\");\n if (url) {\n editor.executeCommand(\"createLink\", url);\n }\n }\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n return element.closest(\"a\") !== null;\n },\n getCurrentValue: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return undefined;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return undefined;\n\n const link = element.closest(\"a\") as HTMLAnchorElement;\n return link ? link.href : undefined;\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n };\n}\n\nexport const linkPlugin = createLinkPlugin();\n\n/**\n * Blockquote-Plugin\n */\nexport const blockquotePlugin: Plugin = {\n name: \"blockquote\",\n type: \"block\",\n command: \"formatBlock\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Zitat\"\n aria-label=\"Zitat\"\n >\n <IconWrapper icon=\"mdi:format-quote-close\" width={18} height={18} />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return;\n\n const isBlockquote = element.closest(\"blockquote\") !== null;\n\n if (isBlockquote) {\n editor.executeCommand(\"formatBlock\", \"<p>\");\n } else {\n editor.executeCommand(\"formatBlock\", \"<blockquote>\");\n }\n },\n isActive: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const element =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement\n : (container as HTMLElement);\n\n if (!element) return false;\n\n return element.closest(\"blockquote\") !== null;\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n};\n\n/**\n * Unordered List Plugin\n */\nexport const unorderedListPlugin: Plugin = {\n name: \"unorderedList\",\n type: \"block\",\n command: \"insertUnorderedList\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Aufzählungsliste\"\n aria-label=\"Aufzählungsliste\"\n >\n <IconWrapper\n icon=\"mdi:format-list-bulleted\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(\"insertUnorderedList\");\n },\n isActive: (editor: EditorAPI) => {\n if (typeof document === \"undefined\") return false;\n return document.queryCommandState(\"insertUnorderedList\");\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n};\n\n/**\n * Ordered List Plugin\n */\nexport const orderedListPlugin: Plugin = {\n name: \"orderedList\",\n type: \"block\",\n command: \"insertOrderedList\",\n renderButton: (props: ButtonProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n disabled={props.disabled}\n className={`rte-toolbar-button ${\n props.isActive ? \"rte-toolbar-button-active\" : \"\"\n }`}\n title=\"Nummerierte Liste\"\n aria-label=\"Nummerierte Liste\"\n >\n <IconWrapper\n icon=\"mdi:format-list-numbered\"\n width={18}\n height={18}\n />\n </button>\n ),\n execute: (editor: EditorAPI) => {\n editor.executeCommand(\"insertOrderedList\");\n },\n isActive: (editor: EditorAPI) => {\n if (typeof document === \"undefined\") return false;\n return document.queryCommandState(\"insertOrderedList\");\n },\n canExecute: (editor: EditorAPI) => {\n const selection = editor.getSelection();\n return selection !== null && selection.rangeCount > 0;\n },\n};\n"],"names":["_jsx","_jsxs","defaultHeadings","headingLabels","_Fragment"],"mappings":"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"}
|