@overlap/rte 0.1.0
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 +269 -0
- package/dist/components/Dropdown.d.ts +19 -0
- package/dist/components/Dropdown.d.ts.map +1 -0
- package/dist/components/Editor.d.ts +4 -0
- package/dist/components/Editor.d.ts.map +1 -0
- package/dist/components/FloatingToolbar.d.ts +10 -0
- package/dist/components/FloatingToolbar.d.ts.map +1 -0
- package/dist/components/IconWrapper.d.ts +10 -0
- package/dist/components/IconWrapper.d.ts.map +1 -0
- package/dist/components/Icons.d.ts +32 -0
- package/dist/components/Icons.d.ts.map +1 -0
- package/dist/components/Toolbar.d.ts +10 -0
- package/dist/components/Toolbar.d.ts.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/index.d.ts +208 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +2080 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2116 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/base.d.ts +10 -0
- package/dist/plugins/base.d.ts.map +1 -0
- package/dist/plugins/clearFormatting.d.ts +6 -0
- package/dist/plugins/clearFormatting.d.ts.map +1 -0
- package/dist/plugins/colors.d.ts +4 -0
- package/dist/plugins/colors.d.ts.map +1 -0
- package/dist/plugins/fontSize.d.ts +3 -0
- package/dist/plugins/fontSize.d.ts.map +1 -0
- package/dist/plugins/headings.d.ts +3 -0
- package/dist/plugins/headings.d.ts.map +1 -0
- package/dist/plugins/image.d.ts +6 -0
- package/dist/plugins/image.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +14 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/optional.d.ts +19 -0
- package/dist/plugins/optional.d.ts.map +1 -0
- package/dist/styles.css +638 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/clearFormatting.d.ts +21 -0
- package/dist/utils/clearFormatting.d.ts.map +1 -0
- package/dist/utils/content.d.ts +12 -0
- package/dist/utils/content.d.ts.map +1 -0
- package/dist/utils/history.d.ts +14 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/listIndent.d.ts +9 -0
- package/dist/utils/listIndent.d.ts.map +1 -0
- package/dist/utils/stateReflection.d.ts +18 -0
- package/dist/utils/stateReflection.d.ts.map +1 -0
- package/package.json +48 -0
- package/src/components/Dropdown.tsx +103 -0
- package/src/components/Editor.css +2 -0
- package/src/components/Editor.tsx +785 -0
- package/src/components/FloatingToolbar.tsx +214 -0
- package/src/components/IconWrapper.tsx +14 -0
- package/src/components/Icons.tsx +145 -0
- package/src/components/Toolbar.tsx +137 -0
- package/src/components/index.ts +3 -0
- package/src/index.ts +19 -0
- package/src/plugins/base.tsx +91 -0
- package/src/plugins/clearFormatting.tsx +31 -0
- package/src/plugins/colors.tsx +122 -0
- package/src/plugins/fontSize.tsx +81 -0
- package/src/plugins/headings.tsx +76 -0
- package/src/plugins/image.tsx +189 -0
- package/src/plugins/index.ts +54 -0
- package/src/plugins/optional.tsx +221 -0
- package/src/styles.css +638 -0
- package/src/types.ts +92 -0
- package/src/utils/clearFormatting.ts +244 -0
- package/src/utils/content.ts +290 -0
- package/src/utils/history.ts +59 -0
- package/src/utils/listIndent.ts +171 -0
- package/src/utils/stateReflection.ts +175 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/Icons.tsx","../src/components/IconWrapper.tsx","../src/plugins/base.tsx","../src/plugins/clearFormatting.tsx","../src/plugins/index.ts","../src/components/Dropdown.tsx","../src/utils/stateReflection.ts","../src/plugins/colors.tsx","../src/plugins/fontSize.tsx","../src/plugins/headings.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/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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\"/>\n </svg>\n);\n\nexport const UnderlineIcon: React.FC<IconProps> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M6 5v.18L8.82 8h2.4L7.73 4.36C7.26 3.85 6.61 3.5 6 3.5c-1.11 0-2 .89-2 2 0 .61.35 1.26.86 1.73L6 5zm14.27 2.5L18.73 9H21v1h-4.27L15 8.27l1.23-1.23c.5-.5 1.15-.73 1.77-.73 1.11 0 2 .89 2 2 0 .62-.23 1.27-.73 1.77L18.27 13H21v1h-5.27l-2-2H9.73l-2 2H3v-1h4.27l2-2H7v-1h2.73l2-2H12v-1h-2.27l2-2h4.54zM5 15h14v2H5v-2z\"/>\n </svg>\n);\n\nexport const LinkIcon: React.FC<IconProps> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\"/>\n </svg>\n);\n\nexport const BulletListIcon: React.FC<IconProps> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z\"/>\n </svg>\n);\n\nexport const HeadingIcon: React.FC<IconProps> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M5 4v3h5.5v12h3V7H19V4H5z\"/>\n </svg>\n);\n\nexport const FontSizeIcon: React.FC<IconProps> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M9 4v3h5v12h3V7h5V4H9zm-6 8h3v8h3v-8h3V10H3z\"/>\n </svg>\n);\n\nexport const ImageIcon: React.FC<IconProps> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\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> = ({ width = 18, height = 18, className }) => (\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className}>\n <path d=\"M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z\"/>\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};\n\nexport const Icon: React.FC<{ icon: string; width?: number; height?: number; className?: string }> = ({ 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 <IconComponent width={width} height={height} className={className} />;\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 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 { Plugin } from '../types';\nimport { createInlinePlugin, createCommandPlugin } from './base';\nimport { clearFormattingPlugin } from './clearFormatting';\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 * Standard-Plugin-Liste\n */\nexport const defaultPlugins: Plugin[] = [\n undoPlugin,\n redoPlugin,\n boldPlugin,\n italicPlugin,\n underlinePlugin,\n clearFormattingPlugin,\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 { 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 from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { Dropdown } from '../components/Dropdown';\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(headings: string[] = defaultHeadings): 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: (props: ButtonProps & { onSelect?: (value: string) => void; editorAPI?: EditorAPI; currentValue?: string }) => {\n // Aktuelles Heading aus State Reflection\n const currentValue = props.currentValue || (props.editorAPI ? getCurrentHeading(props.editorAPI, headings) : 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 = 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\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 {\n createBackgroundColorPlugin,\n createTextColorPlugin,\n} from \"../plugins/colors\";\nimport { createFontSizePlugin } from \"../plugins/fontSize\";\nimport { createHeadingsPlugin } from \"../plugins/headings\";\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 if (headings && headings.length > 0) {\n allPlugins.push(createHeadingsPlugin(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') 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 }, [\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 const selection = window.getSelection();\n\n const isSelectionInEditor =\n selection &&\n selection.rangeCount > 0 &&\n editor.contains(\n selection.getRangeAt(0).commonAncestorContainer\n );\n\n const isEditorFocused =\n document.activeElement === editor ||\n editor.contains(document.activeElement) ||\n isSelectionInEditor;\n\n if (!isEditorFocused) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n if (\n isSelectionInEditor &&\n selection &&\n selection.rangeCount > 0\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 && editor.contains(listItem)) {\n e.stopImmediatePropagation();\n\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 document.execCommand(\"insertText\", false, \"\\t\");\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);\n\n return () => {\n editor.removeEventListener(\"input\", handleInput);\n editor.removeEventListener(\"keydown\", handleKeyDown);\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 React from 'react';\nimport { Plugin, EditorAPI, ButtonProps } from '../types';\nimport { IconWrapper } from '../components/IconWrapper';\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 ${props.isActive ? 'rte-toolbar-button-active' : ''}`}\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 = 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(existingLink.firstChild, existingLink);\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 = 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 = 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 ${props.isActive ? 'rte-toolbar-button-active' : ''}`}\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 = 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 = 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 ${props.isActive ? 'rte-toolbar-button-active' : ''}`}\n title=\"Aufzählungsliste\"\n aria-label=\"Aufzählungsliste\"\n >\n <IconWrapper icon=\"mdi:format-list-bulleted\" width={18} height={18} />\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 ${props.isActive ? 'rte-toolbar-button-active' : ''}`}\n title=\"Nummerierte Liste\"\n aria-label=\"Nummerierte Liste\"\n >\n <IconWrapper icon=\"mdi:format-list-numbered\" width={18} height={18} />\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\n"],"names":["_jsx","useState","useRef","useEffect","_jsxs","_Fragment","useMemo","useCallback"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Plugin } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Basis-Plugin für Inline-Formatierungen
|
|
4
|
+
*/
|
|
5
|
+
export declare function createInlinePlugin(name: string, command: string, icon: string, label: string): Plugin;
|
|
6
|
+
/**
|
|
7
|
+
* Basis-Plugin für Commands
|
|
8
|
+
*/
|
|
9
|
+
export declare function createCommandPlugin(name: string, command: string, icon: string, label: string): Plugin;
|
|
10
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/plugins/base.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAG1D;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CAyCR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CA0BR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearFormatting.d.ts","sourceRoot":"","sources":["../../src/plugins/clearFormatting.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAG1D;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAsBnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/plugins/colors.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAe1D,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,MAAM,EAAoC,GAAG,MAAM,CAmDhG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,GAAE,MAAM,EAAoC,GAAG,MAAM,CAmDtG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fontSize.d.ts","sourceRoot":"","sources":["../../src/plugins/fontSize.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAI1D,wBAAgB,oBAAoB,CAAC,SAAS,GAAE,MAAM,EAA6B,GAAG,MAAM,CA0E3F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headings.d.ts","sourceRoot":"","sources":["../../src/plugins/headings.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAe1D,wBAAgB,oBAAoB,CAAC,QAAQ,GAAE,MAAM,EAAoB,GAAG,MAAM,CA0DjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/plugins/image.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAG1D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAoLzF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Plugin } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Standard-Plugins
|
|
4
|
+
*/
|
|
5
|
+
export declare const boldPlugin: Plugin;
|
|
6
|
+
export declare const italicPlugin: Plugin;
|
|
7
|
+
export declare const underlinePlugin: Plugin;
|
|
8
|
+
export declare const undoPlugin: Plugin;
|
|
9
|
+
export declare const redoPlugin: Plugin;
|
|
10
|
+
/**
|
|
11
|
+
* Standard-Plugin-Liste
|
|
12
|
+
*/
|
|
13
|
+
export declare const defaultPlugins: Plugin[];
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAKxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAK1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAK7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAKxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAKxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,EAOlC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Plugin } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Link-Plugin mit verbesserter Funktionalität
|
|
4
|
+
*/
|
|
5
|
+
export declare function createLinkPlugin(): Plugin;
|
|
6
|
+
export declare const linkPlugin: Plugin;
|
|
7
|
+
/**
|
|
8
|
+
* Blockquote-Plugin
|
|
9
|
+
*/
|
|
10
|
+
export declare const blockquotePlugin: Plugin;
|
|
11
|
+
/**
|
|
12
|
+
* Unordered List Plugin
|
|
13
|
+
*/
|
|
14
|
+
export declare const unorderedListPlugin: Plugin;
|
|
15
|
+
/**
|
|
16
|
+
* Ordered List Plugin
|
|
17
|
+
*/
|
|
18
|
+
export declare const orderedListPlugin: Plugin;
|
|
19
|
+
//# sourceMappingURL=optional.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../src/plugins/optional.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA0B,MAAM,UAAU,CAAC;AAG1D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAuFzC;AAED,eAAO,MAAM,UAAU,QAAqB,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAsD9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MA2BjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MA2B/B,CAAC"}
|