@windoc/react 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/Editor.tsx","../src/EditorContext.tsx","../src/FooterContext.tsx","../src/toolbar/UndoTool.tsx","../src/toolbar/RedoTool.tsx","../src/toolbar/ColumnTool.tsx","../src/toolbar/TableTool.tsx","../src/toolbar/TitleTool.tsx","../src/toolbar/FontTool.tsx","../src/toolbar/FontSizeTool.tsx","../src/toolbar/LineHeightTool.tsx","../src/toolbar/ColorTool.tsx","../src/toolbar/HighlightTool.tsx","../src/toolbar/BoldTool.tsx","../src/toolbar/ItalicTool.tsx","../src/toolbar/UnderlineTool.tsx","../src/toolbar/StrikeoutTool.tsx","../src/toolbar/LeftAlignTool.tsx","../src/toolbar/CenterAlignTool.tsx","../src/toolbar/RightAlignTool.tsx","../src/toolbar/JustifyTool.tsx","../src/toolbar/ListTool.tsx","../src/toolbar/ImageTool.tsx","../src/toolbar/SeparatorTool.tsx","../src/toolbar/WatermarkTool.tsx","../src/toolbar/PageBreakTool.tsx","../src/EditorToolbar.tsx","../src/footer/CatalogToggleTool.tsx","../src/footer/PageModeTool.tsx","../src/footer/FooterStatus.tsx","../src/footer/EditorModeTool.tsx","../src/footer/PageScaleMinusTool.tsx","../src/footer/PageScalePercentageTool.tsx","../src/footer/PageScaleAddTool.tsx","../src/footer/PaperSizeTool.tsx","../src/footer/PaperDirectionTool.tsx","../src/footer/PaperMarginTool.tsx","../src/footer/FullscreenTool.tsx","../src/footer/EditorOptionTool.tsx","../src/footer/WatermarkFooterTool.tsx","../src/EditorFooter.tsx"],"sourcesContent":["// Main component\nexport { Editor } from './Editor';\n\n// Contexts & hooks\nexport { EditorProvider, useEditor } from './EditorContext';\nexport { FooterProvider, useFooter } from './FooterContext';\n\n// Prebuilt composable components\nexport { default as EditorToolbar } from './EditorToolbar';\nexport { default as EditorFooter } from './EditorFooter';\n\n// Individual toolbar tools\nexport { default as UndoTool } from './toolbar/UndoTool';\nexport { default as RedoTool } from './toolbar/RedoTool';\nexport { default as BoldTool } from './toolbar/BoldTool';\nexport { default as ItalicTool } from './toolbar/ItalicTool';\nexport { default as UnderlineTool } from './toolbar/UnderlineTool';\nexport { default as StrikeoutTool } from './toolbar/StrikeoutTool';\nexport { default as ColorTool } from './toolbar/ColorTool';\nexport { default as HighlightTool } from './toolbar/HighlightTool';\nexport { default as FontTool } from './toolbar/FontTool';\nexport { default as FontSizeTool } from './toolbar/FontSizeTool';\nexport { default as TitleTool } from './toolbar/TitleTool';\nexport { default as LineHeightTool } from './toolbar/LineHeightTool';\nexport { default as LeftAlignTool } from './toolbar/LeftAlignTool';\nexport { default as CenterAlignTool } from './toolbar/CenterAlignTool';\nexport { default as RightAlignTool } from './toolbar/RightAlignTool';\nexport { default as JustifyTool } from './toolbar/JustifyTool';\nexport { default as ListTool } from './toolbar/ListTool';\nexport { default as TableTool } from './toolbar/TableTool';\nexport { default as ImageTool } from './toolbar/ImageTool';\nexport { default as ColumnTool } from './toolbar/ColumnTool';\nexport { default as SeparatorTool } from './toolbar/SeparatorTool';\nexport { default as PageBreakTool } from './toolbar/PageBreakTool';\nexport { default as WatermarkTool } from './toolbar/WatermarkTool';\n\n// Individual footer tools\nexport { default as CatalogToggleTool } from './footer/CatalogToggleTool';\nexport { default as PageModeTool } from './footer/PageModeTool';\nexport { default as FooterStatus } from './footer/FooterStatus';\nexport { default as EditorModeTool } from './footer/EditorModeTool';\nexport { default as PageScaleMinusTool } from './footer/PageScaleMinusTool';\nexport { default as PageScalePercentageTool } from './footer/PageScalePercentageTool';\nexport { default as PageScaleAddTool } from './footer/PageScaleAddTool';\nexport { default as PaperSizeTool } from './footer/PaperSizeTool';\nexport { default as PaperDirectionTool } from './footer/PaperDirectionTool';\nexport { default as PaperMarginTool } from './footer/PaperMarginTool';\nexport { default as FullscreenTool } from './footer/FullscreenTool';\nexport { default as EditorOptionTool } from './footer/EditorOptionTool';\nexport { default as WatermarkFooterTool } from './footer/WatermarkFooterTool';\n\n// Types\nexport type {\n EditorInstance,\n RangeStylePayload,\n ICatalogItem,\n IComment\n} from './types';\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { EditorInstance, RangeStylePayload } from './types';\nimport { EditorProvider } from './EditorContext';\nimport { FooterProvider, useFooter } from './FooterContext';\nimport EditorToolbar from './EditorToolbar';\nimport EditorFooter from './EditorFooter';\n\ninterface EditorOptions {\n margins?: number[];\n defaultBasicRowMarginHeight?: number;\n watermark?: { data: string; size?: number; color?: string; opacity?: number };\n header?: { top?: number; disabled?: boolean };\n footer?: { bottom?: number; disabled?: boolean; backgroundColor?: string };\n pageNumber?: {\n disabled?: boolean;\n format?: string;\n color?: string;\n font?: string;\n size?: number;\n rowFlex?: string;\n bottom?: number;\n };\n placeholder?: { data: string };\n zone?: { tipDisabled?: boolean };\n maskMargin?: number[];\n scrollContainerSelector?: string;\n [key: string]: unknown;\n}\n\ninterface EditorData {\n header?: object[];\n main: object[];\n footer?: object[];\n}\n\ninterface EditorProps {\n /** Initial document data */\n defaultValue?: EditorData;\n /** Editor configuration options */\n options?: EditorOptions;\n /** Called when editor content changes */\n onChange?: (data: object) => void;\n /** Called when editor instance is ready */\n onReady?: (editor: EditorInstance) => void;\n /** Show built-in toolbar (default: true) */\n toolbar?: boolean;\n /** Show built-in footer/statusbar (default: true) */\n footer?: boolean;\n /** Custom toolbar component to replace built-in one */\n renderToolbar?: React.ReactNode;\n /** Custom footer component to replace built-in one */\n renderFooter?: React.ReactNode;\n /** Additional content rendered inside EditorProvider (e.g. sidebars) */\n children?: React.ReactNode;\n /** CSS class for the editor container */\n className?: string;\n /** Inline style for the editor container */\n style?: React.CSSProperties;\n /** Enable drag-and-drop badge insertion */\n onDrop?: (e: React.DragEvent, editor: EditorInstance) => void;\n /** Called when cursor/selection style changes — use this instead of overwriting editor.listener.rangeStyleChange via onReady */\n onRangeStyleChange?: (payload: RangeStylePayload) => void;\n}\n\nexport function Editor({\n defaultValue,\n options: userOptions,\n onChange,\n onReady,\n onRangeStyleChange,\n toolbar = true,\n footer = true,\n renderToolbar,\n renderFooter,\n children,\n className,\n style,\n onDrop: userOnDrop\n}: EditorProps) {\n return (\n <FooterProvider>\n <EditorInner\n defaultValue={defaultValue}\n options={userOptions}\n onChange={onChange}\n onReady={onReady}\n onRangeStyleChange={onRangeStyleChange}\n toolbar={toolbar}\n footer={footer}\n renderToolbar={renderToolbar}\n renderFooter={renderFooter}\n className={className}\n style={style}\n onDrop={userOnDrop}\n >\n {children}\n </EditorInner>\n </FooterProvider>\n );\n}\n\nfunction EditorInner({\n defaultValue,\n options: userOptions,\n onChange,\n onReady,\n onRangeStyleChange,\n toolbar = true,\n footer = true,\n renderToolbar,\n renderFooter,\n children,\n className,\n style,\n onDrop: userOnDrop\n}: Omit<EditorProps, 'onDrop'> & { onDrop?: EditorProps['onDrop'] }) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<EditorInstance | null>(null);\n const [rangeStyle, setRangeStyle] = useState<RangeStylePayload | null>(null);\n\n const {\n setPageNoList,\n setPageNo,\n setPageSize,\n setWordCount,\n setRowNo,\n setColNo,\n setPageScale\n } = useFooter();\n\n useEffect(() => {\n let instance: EditorInstance | null = null;\n let cancelled = false;\n let closeDropdowns: ((evt: MouseEvent) => void) | null = null;\n\n const initEditor = async () => {\n if (!containerRef.current) return;\n\n const {\n default: EditorClass,\n KeyMap,\n EditorMode,\n EditorZone,\n ElementType,\n Dialog,\n Signature\n } = await import('@windoc/core');\n\n // Guard: if cleanup already ran before async resolved, bail out\n if (cancelled) return;\n\n const data = (defaultValue ?? { main: [] }) as any;\n\n instance = new EditorClass(\n containerRef.current!,\n data,\n (userOptions ?? {}) as any\n ) as unknown as EditorInstance;\n\n editorRef.current = instance;\n\n // Setup listeners\n instance.listener.rangeStyleChange = (payload: RangeStylePayload) => {\n setRangeStyle(payload);\n onRangeStyleChange?.(payload);\n const rangeContext = instance?.command.getRangeContext();\n if (rangeContext) {\n setRowNo(rangeContext.startRowNo + 1);\n setColNo(rangeContext.startColNo + 1);\n }\n };\n\n instance.listener.visiblePageNoListChange = (payload: number[]) => {\n setPageNoList(payload.map(i => i + 1).join(', '));\n };\n\n instance.listener.pageSizeChange = (payload: number) => {\n setPageSize(payload);\n };\n\n instance.listener.intersectionPageNoChange = (payload: number) => {\n setPageNo(payload + 1);\n };\n\n instance.listener.pageScaleChange = (payload: number) => {\n setPageScale(Math.floor(payload * 10 * 10));\n };\n\n instance.listener.contentChange = async () => {\n const count = await instance?.command.getWordCount();\n setWordCount(count || 0);\n if (onChange) {\n const value = instance?.command.getValue();\n if (value) onChange(value);\n }\n };\n\n // Register shortcuts\n instance.register.shortcutList([\n {\n key: KeyMap.P,\n mod: true,\n isGlobal: true,\n callback: (command: { executePrint: () => void }) => {\n command.executePrint();\n }\n },\n {\n key: KeyMap.MINUS,\n ctrl: true,\n isGlobal: true,\n callback: (command: { executePageScaleMinus: () => void }) => {\n command.executePageScaleMinus();\n }\n },\n {\n key: KeyMap.EQUAL,\n ctrl: true,\n isGlobal: true,\n callback: (command: { executePageScaleAdd: () => void }) => {\n command.executePageScaleAdd();\n }\n },\n {\n key: KeyMap.ZERO,\n ctrl: true,\n isGlobal: true,\n callback: (command: { executePageScaleRecovery: () => void }) => {\n command.executePageScaleRecovery();\n }\n }\n ]);\n\n // Register context menus\n instance.register.contextMenuList([\n {\n name: 'Signature',\n icon: 'signature',\n when: (payload: {\n isReadonly: boolean;\n editorTextFocus: boolean;\n }) => {\n return !payload.isReadonly && payload.editorTextFocus;\n },\n callback: (command: {\n executeInsertElementList: (elements: object[]) => void;\n }) => {\n new Signature({\n onConfirm(\n payload: { value: string; width: number; height: number } | null\n ) {\n if (!payload) return;\n const { value, width, height } = payload;\n if (!value || !width || !height) return;\n command.executeInsertElementList([\n { value, width, height, type: ElementType.IMAGE }\n ]);\n }\n });\n }\n },\n {\n name: 'Format Cleanup',\n icon: 'word-tool',\n when: (payload: { isReadonly: boolean }) => !payload.isReadonly,\n callback: (command: { executeWordTool: () => void }) => {\n command.executeWordTool();\n }\n }\n ]);\n\n // Global click handler to close dropdowns — store ref for cleanup\n closeDropdowns = (evt: MouseEvent) => {\n const visibleDom = document.querySelector('.visible');\n if (!visibleDom) return;\n const parent = visibleDom.parentElement;\n if (parent && parent.contains(evt.target as Node)) return;\n visibleDom.classList.remove('visible');\n };\n window.addEventListener('click', closeDropdowns, { capture: true });\n\n // Initial content change\n const count = await instance.command.getWordCount();\n setWordCount(count || 0);\n\n // Notify consumer\n onReady?.(instance);\n };\n\n initEditor();\n\n return () => {\n cancelled = true;\n instance?.destroy();\n editorRef.current = null;\n if (closeDropdowns) {\n window.removeEventListener('click', closeDropdowns, { capture: true });\n closeDropdowns = null;\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n if (userOnDrop && editorRef.current) {\n userOnDrop(e, editorRef.current);\n }\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n };\n\n return (\n <EditorProvider editorRef={editorRef} rangeStyle={rangeStyle}>\n {toolbar && !renderToolbar && <EditorToolbar />}\n {renderToolbar}\n {children}\n <div\n className={className ?? 'editor'}\n style={style ?? { flex: 1, minHeight: 0, overflow: 'auto' }}\n ref={containerRef}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n {footer && !renderFooter && <EditorFooter />}\n {renderFooter}\n </EditorProvider>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useEffect, useState } from 'react';\nimport type { MutableRefObject } from 'react';\nimport type { EditorInstance, RangeStylePayload } from './types';\n\ninterface EditorContextValue {\n editorRef: MutableRefObject<EditorInstance | null>;\n isApple: boolean;\n rangeStyle: RangeStylePayload | null;\n}\n\nconst EditorContext = createContext<EditorContextValue | null>(null);\n\nexport function EditorProvider({\n editorRef,\n rangeStyle,\n children\n}: {\n editorRef: MutableRefObject<EditorInstance | null>;\n rangeStyle: RangeStylePayload | null;\n children: React.ReactNode;\n}) {\n const [isApple, setIsApple] = useState(false);\n\n useEffect(() => {\n setIsApple(/Mac OS X/.test(navigator.userAgent));\n }, []);\n\n return (\n <EditorContext.Provider value={{ editorRef, isApple, rangeStyle }}>\n {children}\n </EditorContext.Provider>\n );\n}\n\nexport function useEditor() {\n const ctx = useContext(EditorContext);\n if (!ctx) throw new Error('useEditor must be used within EditorProvider');\n return ctx;\n}\n","'use client';\n\nimport { createContext, useContext, useState } from 'react';\n\ninterface FooterContextValue {\n pageNoList: string;\n pageNo: number;\n pageSize: number;\n wordCount: number;\n rowNo: number;\n colNo: number;\n pageScale: number;\n setPageNoList: (v: string) => void;\n setPageNo: (v: number) => void;\n setPageSize: (v: number) => void;\n setWordCount: (v: number) => void;\n setRowNo: (v: number) => void;\n setColNo: (v: number) => void;\n setPageScale: (v: number) => void;\n handleToggleCatalogAction?: () => void;\n}\n\nconst FooterContext = createContext<FooterContextValue | null>(null);\n\nexport function FooterProvider({\n handleToggleCatalogAction,\n children\n}: {\n handleToggleCatalogAction?: () => void;\n children: React.ReactNode;\n}) {\n const [pageNoList, setPageNoList] = useState('1');\n const [pageNo, setPageNo] = useState(1);\n const [pageSize, setPageSize] = useState(1);\n const [wordCount, setWordCount] = useState(0);\n const [rowNo, setRowNo] = useState(0);\n const [colNo, setColNo] = useState(0);\n const [pageScale, setPageScale] = useState(100);\n\n return (\n <FooterContext.Provider\n value={{\n pageNoList,\n pageNo,\n pageSize,\n wordCount,\n rowNo,\n colNo,\n pageScale,\n setPageNoList,\n setPageNo,\n setPageSize,\n setWordCount,\n setRowNo,\n setColNo,\n setPageScale,\n handleToggleCatalogAction\n }}\n >\n {children}\n </FooterContext.Provider>\n );\n}\n\nexport function useFooter() {\n const ctx = useContext(FooterContext);\n if (!ctx) throw new Error('useFooter must be used within FooterProvider');\n return ctx;\n}\n","import { Undo } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function UndoTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isDisabled = rangeStyle ? !rangeStyle.undo : true;\n return (\n <div\n className={`menu-item__undo${isDisabled ? ' disabled' : ''}`}\n title={`Undo(${isApple ? '⌘' : 'Ctrl'}+Z)`}\n onClick={() => {\n if (!isDisabled) editorRef.current?.command.executeUndo();\n }}\n >\n <Undo size={16} />\n </div>\n );\n}\n","import { Redo } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function RedoTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isDisabled = rangeStyle ? !rangeStyle.redo : true;\n return (\n <div\n className={`menu-item__redo${isDisabled ? ' disabled' : ''}`}\n title={`Redo(${isApple ? '⌘' : 'Ctrl'}+Y)`}\n onClick={() => {\n if (!isDisabled) editorRef.current?.command.executeRedo();\n }}\n >\n <Redo size={16} />\n </div>\n );\n}\n","import { useRef, useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function ColumnTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const [currentColumns, setCurrentColumns] = useState(1);\n const [gap, setGap] = useState(20);\n\n const handleColumn = (col: number) => {\n editorRef.current?.command.executeColumnCount(col);\n setCurrentColumns(col);\n };\n\n const handleGapChange = (value: number) => {\n const clampedValue = Math.max(0, Math.min(100, value));\n setGap(clampedValue);\n editorRef.current?.command.executeColumnGap(clampedValue);\n };\n\n return (\n <div\n className=\"menu-item__column\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Column Layout\">\n {currentColumns === 1 ? '1 Column' : `${currentColumns} Columns`}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <div onClick={e => e.stopPropagation()}>\n <ul>\n <li onClick={() => handleColumn(1)}>1 Column</li>\n <li onClick={() => handleColumn(2)}>2 Columns</li>\n </ul>\n {currentColumns > 1 && (\n <>\n <div className=\"option-divider\" />\n <div className=\"option-row\">\n <label>Gap (px)</label>\n <input\n type=\"number\"\n min={0}\n max={100}\n value={gap}\n onChange={e => handleGapChange(Number(e.target.value))}\n onClick={e => e.stopPropagation()}\n />\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport { Table } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function TableTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n const [hoverRow, setHoverRow] = useState(0);\n const [hoverCol, setHoverCol] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!visible) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setVisible(false);\n setHoverRow(0);\n setHoverCol(0);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [visible]);\n\n const handleInsertTable = () => {\n if (hoverRow > 0 && hoverCol > 0) {\n editorRef.current?.command.executeInsertTable(hoverRow, hoverCol);\n }\n setVisible(false);\n setHoverRow(0);\n setHoverCol(0);\n };\n\n return (\n <div ref={containerRef} className=\"menu-item__table\" title=\"Table\">\n <Table\n size={16}\n onClick={() => setVisible(!visible)}\n style={{ cursor: 'pointer' }}\n />\n {visible && (\n <div className=\"table-dropdown\">\n <div className=\"table-dropdown-header\">\n <span>\n {hoverRow > 0 ? `${hoverRow} × ${hoverCol}` : 'Insert Table'}\n </span>\n </div>\n <div className=\"table-dropdown-grid\" onClick={handleInsertTable}>\n {Array.from({ length: 8 }).map((_, rowIdx) => (\n <div key={rowIdx} className=\"table-dropdown-row\">\n {Array.from({ length: 8 }).map((_, colIdx) => (\n <div\n key={colIdx}\n className={`table-dropdown-cell ${rowIdx < hoverRow && colIdx < hoverCol ? 'active' : ''}`}\n onMouseEnter={() => {\n setHoverRow(rowIdx + 1);\n setHoverCol(colIdx + 1);\n }}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst LEVELS: { level: string | null; label: string }[] = [\n { level: null, label: 'Body' },\n { level: 'first', label: 'Heading 1' },\n { level: 'second', label: 'Heading 2' },\n { level: 'third', label: 'Heading 3' },\n { level: 'fourth', label: 'Heading 4' },\n { level: 'fifth', label: 'Heading 5' },\n { level: 'sixth', label: 'Heading 6' }\n];\n\nexport default function TitleTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeLevel = rangeStyle?.level || null;\n const activeLabel =\n LEVELS.find(l => l.level === activeLevel)?.label || 'Body';\n\n const handleTitle = (level: string | null) => {\n editorRef.current?.command.executeTitle(level);\n };\n\n return (\n <div\n className=\"menu-item__title\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Toggle Heading\">\n {activeLabel}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {LEVELS.map(({ level, label }) => (\n <li\n key={label}\n className={activeLevel === level ? 'active' : ''}\n {...(level ? { 'data-level': level } : {})}\n onClick={() => handleTitle(level)}\n >\n {label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst FONTS = [\n { family: 'Arial', label: 'Arial' },\n { family: 'Times New Roman', label: 'Times New Roman' },\n { family: 'Georgia', label: 'Georgia' },\n { family: 'Verdana', label: 'Verdana' },\n { family: 'Trebuchet MS', label: 'Trebuchet MS' },\n { family: 'Courier New', label: 'Courier New' },\n { family: 'Comic Sans MS', label: 'Comic Sans MS' },\n { family: 'Impact', label: 'Impact' }\n];\n\nexport default function FontTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeFont = rangeStyle?.font || 'Arial';\n const activeLabel =\n FONTS.find(f => f.family === activeFont)?.label || activeFont;\n\n const handleFont = (family: string) => {\n editorRef.current?.command.executeFont(family);\n };\n\n return (\n <div\n className=\"menu-item__font\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Font\">\n {activeLabel}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {FONTS.map(({ family, label }) => (\n <li\n key={family}\n data-family={family}\n className={activeFont === family ? 'active' : ''}\n style={{ fontFamily: family }}\n onClick={() => handleFont(family)}\n >\n {label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst SIZES = [72, 48, 36, 24, 20, 18, 16, 14, 12, 11, 10, 9, 8];\n\nexport default function FontSizeTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeSize = rangeStyle?.size ?? 11;\n\n const handleSize = (size: number) => {\n editorRef.current?.command.executeSize(size);\n };\n\n return (\n <div\n className=\"menu-item__size\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Font Size\">\n {activeSize}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {SIZES.map(size => (\n <li\n key={size}\n className={activeSize === size ? 'active' : ''}\n onClick={() => handleSize(size)}\n >\n {size}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst LINE_HEIGHTS = ['1.0', '1.15', '1.5', '2.0', '2.5'];\n\nexport default function LineHeightTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeMargin = rangeStyle?.rowMargin ?? 1;\n const activeLabel = Number.isInteger(activeMargin)\n ? `${activeMargin}.0`\n : String(activeMargin);\n\n const handleLineHeight = (value: string) => {\n editorRef.current?.command.executeRowMargin(Number(value));\n };\n\n return (\n <div\n className=\"menu-item__line-height\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Line Height\">\n {activeLabel}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {LINE_HEIGHTS.map(h => (\n <li\n key={h}\n className={\n String(activeMargin) === h || activeLabel === h ? 'active' : ''\n }\n onClick={() => handleLineHeight(h)}\n >\n {h}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { Baseline, RotateCcw } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst COLOR_PALETTE = [\n [\n '#000000',\n '#434343',\n '#666666',\n '#999999',\n '#b7b7b7',\n '#cccccc',\n '#d9d9d9',\n '#efefef',\n '#f3f3f3',\n '#ffffff'\n ],\n [\n '#980000',\n '#ff0000',\n '#ff9900',\n '#ffff00',\n '#00ff00',\n '#00ffff',\n '#4a86e8',\n '#0000ff',\n '#9900ff',\n '#ff00ff'\n ],\n [\n '#e6b8af',\n '#f4cccc',\n '#fce5cd',\n '#fff2cc',\n '#d9ead3',\n '#d0e0e3',\n '#c9daf8',\n '#cfe2f3',\n '#d9d2e9',\n '#ead1dc'\n ],\n [\n '#dd7e6b',\n '#ea9999',\n '#f9cb9c',\n '#ffe599',\n '#b6d7a8',\n '#a2c4c9',\n '#a4c2f4',\n '#9fc5e8',\n '#b4a7d6',\n '#d5a6bd'\n ],\n [\n '#cc4125',\n '#e06666',\n '#f6b26b',\n '#ffd966',\n '#93c47d',\n '#76a5af',\n '#6d9eeb',\n '#6fa8dc',\n '#8e7cc3',\n '#c27ba0'\n ],\n [\n '#a61c00',\n '#cc0000',\n '#e69138',\n '#f1c232',\n '#6aa84f',\n '#45818e',\n '#3c78d8',\n '#3d85c6',\n '#674ea7',\n '#a64d79'\n ],\n [\n '#85200c',\n '#990000',\n '#b45f06',\n '#bf9000',\n '#38761d',\n '#134f5c',\n '#1155cc',\n '#0b5394',\n '#351c75',\n '#741b47'\n ],\n [\n '#5b0f00',\n '#660000',\n '#783f04',\n '#7f6000',\n '#274e13',\n '#0c343d',\n '#1c4587',\n '#073763',\n '#20124d',\n '#4c1130'\n ]\n];\n\nexport default function ColorTool() {\n const { editorRef, rangeStyle } = useEditor();\n const dropdownRef = useRef<HTMLDivElement>(null);\n const activeColor = rangeStyle?.color || '#000000';\n\n const handleColor = (color: string) => {\n editorRef.current?.command.executeColor(color);\n };\n\n const handleReset = () => {\n editorRef.current?.command.executeColor(null);\n };\n\n return (\n <div\n className=\"menu-item__color\"\n title=\"Font Color\"\n onClick={() => dropdownRef.current?.classList.toggle('visible')}\n >\n <Baseline size={16} />\n <span style={{ backgroundColor: activeColor }}></span>\n <input id=\"color\" type=\"color\" readOnly tabIndex={-1} />\n <div className=\"color-palette-dropdown\" ref={dropdownRef}>\n <div onClick={e => e.stopPropagation()}>\n <button className=\"color-palette-reset\" onClick={handleReset}>\n <RotateCcw size={12} />\n Reset\n </button>\n <div className=\"color-palette-grid\">\n {COLOR_PALETTE.map((row, ri) => (\n <div key={ri} className=\"color-palette-row\">\n {row.map(color => (\n <div\n key={color}\n className={`color-palette-swatch${activeColor.toLowerCase() === color.toLowerCase() ? ' active' : ''}`}\n style={{ backgroundColor: color }}\n onClick={() => handleColor(color)}\n title={color}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { Highlighter, RotateCcw } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst HIGHLIGHT_PALETTE = [\n [\n '#000000',\n '#434343',\n '#666666',\n '#999999',\n '#b7b7b7',\n '#cccccc',\n '#d9d9d9',\n '#efefef',\n '#f3f3f3',\n '#ffffff'\n ],\n [\n '#980000',\n '#ff0000',\n '#ff9900',\n '#ffff00',\n '#00ff00',\n '#00ffff',\n '#4a86e8',\n '#0000ff',\n '#9900ff',\n '#ff00ff'\n ],\n [\n '#e6b8af',\n '#f4cccc',\n '#fce5cd',\n '#fff2cc',\n '#d9ead3',\n '#d0e0e3',\n '#c9daf8',\n '#cfe2f3',\n '#d9d2e9',\n '#ead1dc'\n ],\n [\n '#dd7e6b',\n '#ea9999',\n '#f9cb9c',\n '#ffe599',\n '#b6d7a8',\n '#a2c4c9',\n '#a4c2f4',\n '#9fc5e8',\n '#b4a7d6',\n '#d5a6bd'\n ],\n [\n '#cc4125',\n '#e06666',\n '#f6b26b',\n '#ffd966',\n '#93c47d',\n '#76a5af',\n '#6d9eeb',\n '#6fa8dc',\n '#8e7cc3',\n '#c27ba0'\n ],\n [\n '#a61c00',\n '#cc0000',\n '#e69138',\n '#f1c232',\n '#6aa84f',\n '#45818e',\n '#3c78d8',\n '#3d85c6',\n '#674ea7',\n '#a64d79'\n ],\n [\n '#85200c',\n '#990000',\n '#b45f06',\n '#bf9000',\n '#38761d',\n '#134f5c',\n '#1155cc',\n '#0b5394',\n '#351c75',\n '#741b47'\n ],\n [\n '#5b0f00',\n '#660000',\n '#783f04',\n '#7f6000',\n '#274e13',\n '#0c343d',\n '#1c4587',\n '#073763',\n '#20124d',\n '#4c1130'\n ]\n];\n\nexport default function HighlightTool() {\n const { editorRef, rangeStyle } = useEditor();\n const dropdownRef = useRef<HTMLDivElement>(null);\n const activeColor = rangeStyle?.highlight || '';\n\n const handleColor = (color: string) => {\n editorRef.current?.command.executeHighlight(color);\n };\n\n const handleReset = () => {\n editorRef.current?.command.executeHighlight(null);\n };\n\n return (\n <div\n className=\"menu-item__highlight\"\n title=\"Highlight\"\n onClick={() => dropdownRef.current?.classList.toggle('visible')}\n >\n <Highlighter size={16} />\n <span style={{ backgroundColor: activeColor || '#ffff00' }}></span>\n <input id=\"highlight\" type=\"color\" readOnly tabIndex={-1} />\n <div className=\"color-palette-dropdown\" ref={dropdownRef}>\n <div onClick={e => e.stopPropagation()}>\n <button className=\"color-palette-reset\" onClick={handleReset}>\n <RotateCcw size={12} />\n None\n </button>\n <div className=\"color-palette-grid\">\n {HIGHLIGHT_PALETTE.map((row, ri) => (\n <div key={ri} className=\"color-palette-row\">\n {row.map(color => (\n <div\n key={color}\n className={`color-palette-swatch${activeColor && activeColor.toLowerCase() === color.toLowerCase() ? ' active' : ''}`}\n style={{ backgroundColor: color }}\n onClick={() => handleColor(color)}\n title={color}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Bold } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function BoldTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.bold === true;\n return (\n <div\n className={`menu-item__bold ${isActive ? 'active' : ''}`}\n title={`Bold(${isApple ? '⌘' : 'Ctrl'}+B)`}\n onClick={() => editorRef.current?.command.executeBold()}\n >\n <Bold size={16} />\n </div>\n );\n}\n","import { Italic } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function ItalicTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.italic === true;\n return (\n <div\n className={`menu-item__italic ${isActive ? 'active' : ''}`}\n title={`Italic(${isApple ? '⌘' : 'Ctrl'}+I)`}\n onClick={() => editorRef.current?.command.executeItalic()}\n >\n <Italic size={16} />\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { Underline as UnderlineIcon } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst STYLES = ['solid', 'double', 'dashed', 'dotted', 'wavy'];\n\nexport default function UnderlineTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const isActive = rangeStyle?.underline === true;\n\n return (\n <div\n className={`menu-item__underline ${isActive ? 'active' : ''}`}\n title={`Underline(${isApple ? '⌘' : 'Ctrl'}+U)`}\n >\n <UnderlineIcon\n size={16}\n onClick={() => editorRef.current?.command.executeUnderline()}\n style={{ cursor: 'pointer' }}\n />\n <span\n className=\"select\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n ></span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {STYLES.map(style => (\n <li\n key={style}\n data-decoration-style={style}\n onClick={() => {\n editorRef.current?.command.executeUnderline({ style });\n }}\n >\n <i></i>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { Strikethrough } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function StrikeoutTool() {\n const { editorRef, rangeStyle } = useEditor();\n const isActive = rangeStyle?.strikeout === true;\n return (\n <div\n className={`menu-item__strikeout ${isActive ? 'active' : ''}`}\n title=\"Strikethrough\"\n onClick={() => editorRef.current?.command.executeStrikeout()}\n >\n <Strikethrough size={16} />\n </div>\n );\n}\n","import { AlignLeft } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function LeftAlignTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = !rangeStyle?.rowFlex || rangeStyle.rowFlex === 'left';\n return (\n <div\n className={`menu-item__left ${isActive ? 'active' : ''}`}\n title={`Left align(${isApple ? '⌘' : 'Ctrl'}+L)`}\n onClick={() => editorRef.current?.command.executeRowFlex('left')}\n >\n <AlignLeft size={16} />\n </div>\n );\n}\n","import { AlignCenter } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function CenterAlignTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.rowFlex === 'center';\n return (\n <div\n className={`menu-item__center ${isActive ? 'active' : ''}`}\n title={`Center align(${isApple ? '⌘' : 'Ctrl'}+E)`}\n onClick={() => editorRef.current?.command.executeRowFlex('center')}\n >\n <AlignCenter size={16} />\n </div>\n );\n}\n","import { AlignRight } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function RightAlignTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.rowFlex === 'right';\n return (\n <div\n className={`menu-item__right ${isActive ? 'active' : ''}`}\n title={`Right align(${isApple ? '⌘' : 'Ctrl'}+R)`}\n onClick={() => editorRef.current?.command.executeRowFlex('right')}\n >\n <AlignRight size={16} />\n </div>\n );\n}\n","import { AlignJustify } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function JustifyTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive =\n rangeStyle?.rowFlex === 'justify' || rangeStyle?.rowFlex === 'alignment';\n return (\n <div\n className={`menu-item__justify ${isActive ? 'active' : ''}`}\n title={`Distribute(${isApple ? '⌘' : 'Ctrl'}+Shift+J)`}\n onClick={() => editorRef.current?.command.executeRowFlex('justify')}\n >\n <AlignJustify size={16} />\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { List, ListOrdered, Indent, Outdent } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\ninterface PresetOption {\n preset: string;\n label: string;\n preview: string[];\n}\n\nconst OL_PRESETS: PresetOption[] = [\n { preset: 'olDefault', label: 'Default', preview: ['1.', 'a.', 'i.'] },\n { preset: 'olParen', label: 'Parenthesis', preview: ['1)', 'a)', 'i)'] },\n { preset: 'olOutline', label: 'Outline', preview: ['1.', '1.1.', '1.1.1.'] },\n { preset: 'olUpperA', label: 'Upper Alpha', preview: ['A.', 'a.', 'i.'] },\n { preset: 'olRoman', label: 'Roman', preview: ['I.', 'A.', '1.'] },\n { preset: 'olZeroPad', label: 'Zero Pad', preview: ['01.', 'a.', 'i.'] }\n];\n\nconst UL_PRESETS: PresetOption[] = [\n { preset: 'ulDefault', label: 'Default', preview: ['●', '○', '■'] },\n { preset: 'ulDiamond', label: 'Diamond', preview: ['◆', '➤', '■'] },\n { preset: 'ulHollowSq', label: 'Hollow Square', preview: ['□', '□', '□'] },\n { preset: 'ulArrow', label: 'Arrow', preview: ['→', '◆', '●'] },\n { preset: 'ulStar', label: 'Star', preview: ['★', '○', '■'] },\n { preset: 'ulCheckArr', label: 'Check Arrow', preview: ['➤', '○', '■'] }\n];\n\nfunction PresetCell({\n option,\n onClick\n}: {\n option: PresetOption;\n onClick: () => void;\n}) {\n return (\n <div onClick={onClick} className=\"list-preset-cell\" title={option.label}>\n {option.preview.map((item, i) => (\n <div\n key={i}\n className=\"list-preset-line\"\n style={{ paddingLeft: `${i * 10}px` }}\n >\n <span className=\"list-preset-marker\">{item}</span>\n <span className=\"list-preset-text\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport default function ListTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const isActive = !!rangeStyle?.listType;\n\n const close = () => optionsRef.current?.classList.remove('visible');\n\n const handleList = (type: string | null, style?: string) => {\n editorRef.current?.command.executeList(type, style);\n close();\n };\n\n const handlePreset = (type: 'ol' | 'ul', preset: string) => {\n const style = type === 'ol' ? 'decimal' : 'disc';\n editorRef.current?.command.executeListWithPreset(type, style, preset);\n close();\n };\n\n const handleIndent = (e: React.MouseEvent) => {\n e.stopPropagation();\n editorRef.current?.command.executeListIndent();\n close();\n };\n\n const handleOutdent = (e: React.MouseEvent) => {\n e.stopPropagation();\n editorRef.current?.command.executeListOutdent();\n close();\n };\n\n return (\n <div\n className={`menu-item__list ${isActive ? 'active' : ''}`}\n title={`List(${isApple ? '⌘' : 'Ctrl'}+Shift+U)`}\n >\n <List\n size={16}\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n style={{ cursor: 'pointer' }}\n />\n <div className=\"options\" ref={optionsRef} style={{ width: '320px' }}>\n <div style={{ padding: '8px' }}>\n {/* Quick Actions */}\n <div style={{ display: 'flex', gap: '4px', marginBottom: '8px' }}>\n <button\n onClick={() => handleList('ul', 'checkbox')}\n className=\"list-quick-btn\"\n >\n Checkbox\n </button>\n <button\n onClick={handleIndent}\n className=\"list-quick-btn\"\n title=\"Indent (Tab)\"\n >\n <Indent size={14} />\n </button>\n <button\n onClick={handleOutdent}\n className=\"list-quick-btn\"\n title=\"Outdent (Shift+Tab)\"\n >\n <Outdent size={14} />\n </button>\n </div>\n\n {/* Ordered List Presets */}\n <div style={{ marginBottom: '8px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '11px',\n color: '#667085',\n marginBottom: '6px',\n fontWeight: 500\n }}\n >\n <ListOrdered size={12} />\n Ordered List\n </div>\n <div className=\"list-preset-grid\">\n {OL_PRESETS.map(option => (\n <PresetCell\n key={option.preset}\n option={option}\n onClick={() => handlePreset('ol', option.preset)}\n />\n ))}\n </div>\n </div>\n\n {/* Unordered List Presets */}\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '11px',\n color: '#667085',\n marginBottom: '6px',\n fontWeight: 500\n }}\n >\n <List size={12} />\n Unordered List\n </div>\n <div className=\"list-preset-grid\">\n {UL_PRESETS.map(option => (\n <PresetCell\n key={option.preset}\n option={option}\n onClick={() => handlePreset('ul', option.preset)}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Image as ImageIcon } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function ImageTool() {\n const { editorRef } = useEditor();\n\n const handleImageUpload = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const img = new Image();\n img.src = reader.result as string;\n img.onload = () => {\n editorRef.current?.command.executeImage({\n value: reader.result as string,\n width: img.width,\n height: img.height\n });\n };\n };\n e.target.value = '';\n };\n\n return (\n <div\n className=\"menu-item__image\"\n onClick={() => document.getElementById('image')?.click()}\n >\n <ImageIcon size={16} />\n <input\n type=\"file\"\n id=\"image\"\n accept=\".png, .jpg, .jpeg, .svg, .gif\"\n onChange={handleImageUpload}\n />\n </div>\n );\n}\n","import { useRef, useState } from 'react';\nimport { Minus } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst DASH_STYLES: { label: string; dashArray: number[] }[] = [\n { label: 'Solid', dashArray: [] },\n { label: 'Dotted', dashArray: [1, 1] },\n { label: 'Dashed', dashArray: [3, 1] },\n { label: 'Long Dash', dashArray: [4, 4] }\n];\n\nconst LINE_WIDTHS: { label: string; value: number }[] = [\n { label: 'Thin', value: 1 },\n { label: 'Medium', value: 2 },\n { label: 'Thick', value: 4 }\n];\n\nexport default function SeparatorTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const [selectedWidth, setSelectedWidth] = useState(1);\n\n const lineColor = '#344054';\n\n const handleSeparator = (e: React.MouseEvent, dashArray: number[]) => {\n e.stopPropagation();\n editorRef.current?.command.executeSeparator(dashArray, {\n lineWidth: selectedWidth\n });\n optionsRef.current?.classList.remove('visible');\n };\n\n return (\n <div className=\"menu-item\" title=\"Separator\">\n <span\n className=\"menu-item__separator\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n cursor: 'pointer',\n margin: '0 2px',\n borderRadius: '8px',\n color: '#475467',\n transition: 'all 0.2s',\n position: 'relative'\n }}\n >\n <Minus size={16} />\n <div\n className=\"options\"\n ref={optionsRef}\n style={{ width: '220px', height: 'auto' }}\n >\n <div style={{ padding: '8px 10px 10px' }}>\n <ul style={{ margin: 0, padding: 0, listStyle: 'none' }}>\n {DASH_STYLES.map(({ label, dashArray }) => (\n <li\n key={label}\n onClick={e => handleSeparator(e, dashArray)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '5px 6px',\n cursor: 'pointer',\n borderRadius: '4px'\n }}\n >\n <svg\n style={{ flex: 1, minWidth: 0, overflow: 'hidden' }}\n height=\"8\"\n >\n <line\n x1=\"0\"\n y1=\"4\"\n x2=\"100%\"\n y2=\"4\"\n stroke={lineColor}\n strokeWidth={selectedWidth}\n strokeDasharray={\n dashArray.length ? dashArray.join(',') : 'none'\n }\n />\n </svg>\n <span\n style={{\n fontSize: '11px',\n color: '#475467',\n whiteSpace: 'nowrap',\n flexShrink: 0\n }}\n >\n {label}\n </span>\n </li>\n ))}\n </ul>\n\n <div\n style={{\n borderTop: '1px solid #e4e7ec',\n marginTop: '8px',\n paddingTop: '8px'\n }}\n >\n <div\n style={{\n fontSize: '11px',\n color: '#667085',\n marginBottom: '6px',\n fontWeight: 500\n }}\n >\n Line Width\n </div>\n <div style={{ display: 'flex', gap: '4px' }}>\n {LINE_WIDTHS.map(({ label, value }) => (\n <button\n key={value}\n onClick={e => {\n e.stopPropagation();\n setSelectedWidth(value);\n }}\n style={{\n flex: 1,\n padding: '3px 6px',\n fontSize: '11px',\n border: `1px solid ${selectedWidth === value ? '#3b82f6' : '#d0d5dd'}`,\n borderRadius: '4px',\n background: selectedWidth === value ? '#eff6ff' : '#fff',\n color: selectedWidth === value ? '#3b82f6' : '#475467',\n cursor: 'pointer',\n fontWeight: selectedWidth === value ? 600 : 400\n }}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n </span>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function InsertElementTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const handleHeader = () => {\n if (!editorRef.current) return;\n const options = editorRef.current.command.getOptions();\n if (options.header.disabled) {\n // Header doesn't exist yet — enable it\n options.header.disabled = false;\n editorRef.current.command.executeForceUpdate();\n }\n // Navigate to header zone for editing\n editorRef.current.command.executeSetZone('header');\n };\n\n return (\n <div\n className=\"menu-item__insert-element\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <i title=\"Insert Element\"></i>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n <li onClick={handleHeader}>Add Header</li>\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function PageBreakTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const handlePageBreak = () => {\n editorRef.current?.command.executePageBreak();\n };\n\n const handleColumnBreak = () => {\n editorRef.current?.command.executeColumnBreak();\n };\n\n return (\n <div\n className=\"menu-item__page-break\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <i title=\"Break\"></i>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n <li onClick={handlePageBreak}>Page Break</li>\n <li onClick={handleColumnBreak}>Column Break</li>\n </ul>\n </div>\n </div>\n );\n}\n","import UndoTool from './toolbar/UndoTool';\nimport RedoTool from './toolbar/RedoTool';\n// import PainterTool from \"./toolbar/PainterTool\";\n// import ClearFormatTool from \"./toolbar/ClearFormatTool\";\nimport ColumnTool from './toolbar/ColumnTool';\nimport TableTool from './toolbar/TableTool';\nimport TitleTool from './toolbar/TitleTool';\nimport FontTool from './toolbar/FontTool';\nimport FontSizeTool from './toolbar/FontSizeTool';\nimport LineHeightTool from './toolbar/LineHeightTool';\n// import SizeAddTool from \"./toolbar/SizeAddTool\";\n// import SizeMinusTool from \"./toolbar/SizeMinusTool\";\nimport ColorTool from './toolbar/ColorTool';\nimport HighlightTool from './toolbar/HighlightTool';\nimport BoldTool from './toolbar/BoldTool';\nimport ItalicTool from './toolbar/ItalicTool';\nimport UnderlineTool from './toolbar/UnderlineTool';\nimport StrikeoutTool from './toolbar/StrikeoutTool';\n// import SuperscriptTool from \"./toolbar/SuperscriptTool\";\n// import SubscriptTool from \"./toolbar/SubscriptTool\";\nimport LeftAlignTool from './toolbar/LeftAlignTool';\nimport CenterAlignTool from './toolbar/CenterAlignTool';\nimport RightAlignTool from './toolbar/RightAlignTool';\nimport JustifyTool from './toolbar/JustifyTool';\n// import AlignmentTool from \"./toolbar/AlignmentTool\";\n// import RowMarginTool from \"./toolbar/RowMarginTool\";\nimport ListTool from './toolbar/ListTool';\nimport ImageTool from './toolbar/ImageTool';\n// import HyperlinkTool from \"./toolbar/HyperlinkTool\";\nimport SeparatorTool from './toolbar/SeparatorTool';\nimport InsertElementTool from './toolbar/WatermarkTool';\n// import CodeBlockTool from \"./toolbar/CodeBlockTool\";\nimport PageBreakTool from './toolbar/PageBreakTool';\n// import ControlTool from \"./toolbar/ControlTool\";\n// import CheckboxTool from \"./toolbar/CheckboxTool\";\n// import RadioTool from \"./toolbar/RadioTool\";\n// import LaTeXTool from \"./toolbar/LaTeXTool\";\n// import DateTool from \"./toolbar/DateTool\";\n// import BlockTool from \"./toolbar/BlockTool\";\n// import SearchTool from \"./toolbar/SearchTool\";\n// import PrintTool from \"./toolbar/PrintTool\";\n\nexport default function EditorToolbar() {\n return (\n <div className=\"menu\" editor-component=\"menu\">\n {/* Undo/Redo */}\n <div className=\"menu-item\">\n <UndoTool />\n <RedoTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Column Layout */}\n <div className=\"menu-item\">\n <ColumnTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Break */}\n <div className=\"menu-item\">\n <PageBreakTool />\n <SeparatorTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Table */}\n <div className=\"menu-item\">\n <TableTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Typography */}\n <div className=\"menu-item\">\n <TitleTool />\n <FontTool />\n <FontSizeTool />\n <LineHeightTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Text Formatting */}\n <div className=\"menu-item\">\n <ColorTool />\n <HighlightTool />\n <BoldTool />\n <ItalicTool />\n <UnderlineTool />\n <StrikeoutTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Text Alignment */}\n <div className=\"menu-item\">\n <LeftAlignTool />\n <CenterAlignTool />\n <RightAlignTool />\n <JustifyTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Lists */}\n <div className=\"menu-item\">\n <ListTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Media */}\n <div className=\"menu-item\">\n <ImageTool />\n </div>\n <div className=\"menu-item\">\n <InsertElementTool />\n </div>\n </div>\n );\n}\n","import { useFooter } from '../FooterContext';\n\nexport default function CatalogToggleTool() {\n const { handleToggleCatalogAction } = useFooter();\n return (\n <div\n className=\"catalog-mode\"\n title=\"Catalog\"\n onClick={handleToggleCatalogAction}\n >\n <i></i>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function PageModeTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n\n const handlePageMode = (mode: string) => {\n editorRef.current?.command.executePageMode(mode);\n setVisible(false);\n };\n\n return (\n <div className=\"page-mode\" onClick={() => setVisible(!visible)}>\n <i title=\"Page Mode\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n <li onClick={() => handlePageMode('paging')} className=\"active\">\n Paging\n </li>\n <li onClick={() => handlePageMode('continuity')}>Continuity</li>\n </ul>\n </div>\n </div>\n );\n}\n","import { useFooter } from '../FooterContext';\n\nexport default function FooterStatus() {\n const { pageNoList, pageNo, pageSize, wordCount, rowNo, colNo } = useFooter();\n return (\n <>\n <span>\n Visible Pages: <span className=\"page-no-list\">{pageNoList}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Pages: <span className=\"page-no\">{pageNo}</span>/\n <span className=\"page-size\">{pageSize}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Words: <span className=\"word-count\">{wordCount}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Row: <span className=\"row-no\">{rowNo}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Column: <span className=\"col-no\">{colNo}</span>\n </span>\n </>\n );\n}\n","import { useState, useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst MODE_LIST = [\n { mode: 'edit', name: 'Edit Mode' },\n { mode: 'clean', name: 'Clean Mode' },\n { mode: 'readonly', name: 'Read-only Mode' },\n { mode: 'form', name: 'Form Mode' },\n { mode: 'print', name: 'Print Mode' },\n { mode: 'design', name: 'Design Mode' },\n { mode: 'graffiti', name: 'Graffiti Mode' }\n];\n\nexport default function EditorModeTool() {\n const { editorRef } = useEditor();\n const [editorMode, setEditorMode] = useState('Edit Mode');\n const modeIndexRef = useRef(0);\n\n const handleModeChange = () => {\n modeIndexRef.current =\n modeIndexRef.current === MODE_LIST.length - 1\n ? 0\n : modeIndexRef.current + 1;\n const { name, mode } = MODE_LIST[modeIndexRef.current];\n setEditorMode(name);\n editorRef.current?.command.executeMode(mode);\n const isReadonly = mode === 'readonly';\n const enableMenuList = ['search', 'print'];\n document.querySelectorAll<HTMLDivElement>('.menu-item>div').forEach(dom => {\n const menu = dom.dataset.menu;\n if (isReadonly && (!menu || !enableMenuList.includes(menu))) {\n dom.classList.add('disable');\n } else {\n dom.classList.remove('disable');\n }\n });\n };\n\n return (\n <div\n className=\"editor-mode\"\n title=\"Click to change mode\"\n onClick={handleModeChange}\n >\n {editorMode}\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\n\nexport default function PageScaleMinusTool() {\n const { editorRef } = useEditor();\n return (\n <div\n className=\"page-scale-minus\"\n title=\"Zoom Out (Ctrl+-)\"\n onClick={() => editorRef.current?.command.executePageScaleMinus()}\n >\n <i></i>\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\nimport { useFooter } from '../FooterContext';\n\nexport default function PageScalePercentageTool() {\n const { editorRef } = useEditor();\n const { pageScale } = useFooter();\n return (\n <span\n className=\"page-scale-percentage\"\n title=\"Zoom Level\"\n onClick={() => editorRef.current?.command.executePageScaleRecovery()}\n >\n {pageScale}%\n </span>\n );\n}\n","import { useEditor } from '../EditorContext';\n\nexport default function PageScaleAddTool() {\n const { editorRef } = useEditor();\n return (\n <div\n className=\"page-scale-add\"\n title=\"Zoom In (Ctrl+=)\"\n onClick={() => editorRef.current?.command.executePageScaleAdd()}\n >\n <i></i>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst SIZES = [\n { label: 'A4', width: 794, height: 1123, active: true },\n { label: 'A2', width: 1593, height: 2251 },\n { label: 'A3', width: 1125, height: 1593 },\n { label: 'A5', width: 565, height: 796 }\n];\n\nexport default function PaperSizeTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n\n const handlePaperSize = (width: number, height: number) => {\n editorRef.current?.command.executePaperSize(width, height);\n setVisible(false);\n };\n\n return (\n <div className=\"paper-size\" onClick={() => setVisible(!visible)}>\n <i title=\"Paper Type\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n {SIZES.map(({ label, width, height, active }) => (\n <li\n key={label}\n onClick={() => handlePaperSize(width, height)}\n className={active ? 'active' : ''}\n >\n {label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function PaperDirectionTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n\n const handlePaperDirection = (direction: string) => {\n editorRef.current?.command.executePaperDirection(direction);\n setVisible(false);\n };\n\n return (\n <div className=\"paper-direction\" onClick={() => setVisible(!visible)}>\n <i title=\"Paper Direction\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n <li\n onClick={() => handlePaperDirection('vertical')}\n className=\"active\"\n >\n Portrait\n </li>\n <li onClick={() => handlePaperDirection('horizontal')}>Landscape</li>\n </ul>\n </div>\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\nimport { pxToCm, cmToPx } from '@windoc/core';\n\nexport default function PaperMarginTool() {\n const { editorRef } = useEditor();\n\n const handlePaperMargin = async () => {\n if (!editorRef.current) return;\n const { Dialog } = await import('@windoc/core');\n const [topMargin, rightMargin, bottomMargin, leftMargin] =\n editorRef.current.command.getPaperMargin();\n new Dialog({\n title: 'Page Margins',\n data: [\n {\n type: 'text',\n label: 'Top Margin (cm)',\n name: 'top',\n required: true,\n value: `${pxToCm(topMargin)}`,\n placeholder: 'e.g. 2.54'\n },\n {\n type: 'text',\n label: 'Bottom Margin (cm)',\n name: 'bottom',\n required: true,\n value: `${pxToCm(bottomMargin)}`,\n placeholder: 'e.g. 2.54'\n },\n {\n type: 'text',\n label: 'Left Margin (cm)',\n name: 'left',\n required: true,\n value: `${pxToCm(leftMargin)}`,\n placeholder: 'e.g. 2.54'\n },\n {\n type: 'text',\n label: 'Right Margin (cm)',\n name: 'right',\n required: true,\n value: `${pxToCm(rightMargin)}`,\n placeholder: 'e.g. 2.54'\n }\n ],\n onConfirm: (payload: Array<{ name: string; value: string }>) => {\n const top = payload.find(p => p.name === 'top')?.value;\n if (!top) return;\n const bottom = payload.find(p => p.name === 'bottom')?.value;\n if (!bottom) return;\n const left = payload.find(p => p.name === 'left')?.value;\n if (!left) return;\n const right = payload.find(p => p.name === 'right')?.value;\n if (!right) return;\n editorRef.current?.command.executeSetPaperMargin([\n cmToPx(Number(top)),\n cmToPx(Number(right)),\n cmToPx(Number(bottom)),\n cmToPx(Number(left))\n ]);\n }\n });\n };\n\n return (\n <div\n className=\"paper-margin\"\n title=\"Page Margins\"\n onClick={handlePaperMargin}\n >\n <i></i>\n </div>\n );\n}\n","export default function FullscreenTool() {\n const handleFullscreen = () => {\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else {\n document.exitFullscreen();\n }\n };\n\n return (\n <div className=\"fullscreen\" title=\"Fullscreen\" onClick={handleFullscreen}>\n <i></i>\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\n\nexport default function EditorOptionTool() {\n const { editorRef } = useEditor();\n\n const handleEditorOption = async () => {\n if (!editorRef.current) return;\n const { Dialog } = await import('@windoc/core');\n const options = editorRef.current.command.getOptions();\n new Dialog({\n title: 'Editor Configuration',\n data: [\n {\n type: 'textarea',\n name: 'option',\n width: 350,\n height: 300,\n required: true,\n value: JSON.stringify(options, null, 2),\n placeholder: 'Please enter editor configuration'\n }\n ],\n onConfirm: (payload: Array<{ name: string; value: string }>) => {\n const newOptionValue = payload.find(p => p.name === 'option')?.value;\n if (!newOptionValue) return;\n const newOption = JSON.parse(newOptionValue);\n editorRef.current?.command.executeUpdateOptions(newOption);\n }\n });\n };\n\n return (\n <div\n className=\"editor-option\"\n title=\"Editor Settings\"\n onClick={handleEditorOption}\n >\n <i></i>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst COLOR_PALETTE = [\n ['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc'],\n ['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff'],\n ['#4a86e8', '#0000ff', '#9900ff', '#ff00ff', '#e6b8af', '#f4cccc']\n];\n\nconst FONTS = [\n { family: 'Arial', label: 'Sans Serif' },\n { family: 'Times New Roman', label: 'Serif' }\n];\n\nexport default function WatermarkFooterTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n const [tab, setTab] = useState<'text' | 'image'>('text');\n const containerRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // Text watermark state\n const [text, setText] = useState('WATERMARK');\n const [font, setFont] = useState('Arial');\n const [color, setColor] = useState('#AEB5C0');\n const [opacity, setOpacity] = useState(30);\n const [rotation, setRotation] = useState(-45);\n const [inFront, setInFront] = useState(false);\n\n // Image watermark state\n const [imageData, setImageData] = useState('');\n const [imgWidth, setImgWidth] = useState(200);\n const [imgHeight, setImgHeight] = useState(200);\n\n // Click outside to close\n useEffect(() => {\n if (!visible) return;\n const handler = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setVisible(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [visible]);\n\n // Smart positioning\n useEffect(() => {\n if (!visible || !panelRef.current) return;\n const el = panelRef.current;\n el.style.right = '';\n el.style.left = '';\n const rect = el.getBoundingClientRect();\n if (rect.right > window.innerWidth) {\n el.style.left = 'unset';\n el.style.right = '0';\n }\n if (rect.left < 0) {\n el.style.left = `${-rect.left + 4}px`;\n }\n }, [visible]);\n\n const handleFileUpload = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n setImageData(result);\n const img = new Image();\n img.onload = () => {\n const maxDim = 300;\n let w = img.naturalWidth;\n let h = img.naturalHeight;\n if (w > maxDim || h > maxDim) {\n const ratio = Math.min(maxDim / w, maxDim / h);\n w = Math.round(w * ratio);\n h = Math.round(h * ratio);\n }\n setImgWidth(w);\n setImgHeight(h);\n };\n img.src = result;\n };\n reader.readAsDataURL(file);\n },\n []\n );\n\n const handleApply = () => {\n if (!editorRef.current) return;\n if (tab === 'text') {\n if (!text.trim()) return;\n editorRef.current.command.executeAddWatermark({\n data: text,\n type: 'text',\n color,\n opacity: opacity / 100,\n size: 120,\n font,\n rotation,\n inFront\n });\n } else {\n if (!imageData) return;\n editorRef.current.command.executeAddWatermark({\n data: imageData,\n type: 'image',\n opacity: opacity / 100,\n rotation,\n inFront,\n width: imgWidth,\n height: imgHeight\n });\n }\n setVisible(false);\n };\n\n const handleDelete = () => {\n editorRef.current?.command.executeDeleteWatermark();\n setVisible(false);\n };\n\n return (\n <div\n className=\"watermark-footer\"\n ref={containerRef}\n onClick={() => setVisible(!visible)}\n >\n <i title=\"Watermark\"></i>\n {visible && (\n <>\n <div\n className=\"wm-panel-mask\"\n onClick={e => {\n e.stopPropagation();\n setVisible(false);\n }}\n />\n <div\n className=\"watermark-footer-panel\"\n ref={panelRef}\n onClick={e => e.stopPropagation()}\n >\n {/* Title */}\n <div className=\"wm-panel-title\">\n <span>Watermark</span>\n <i onClick={() => setVisible(false)} />\n </div>\n\n {/* Tabs */}\n <div className=\"wm-panel-tabs\">\n <button\n className={`wm-panel-tab ${tab === 'text' ? 'active' : ''}`}\n onClick={() => setTab('text')}\n >\n Text\n </button>\n <button\n className={`wm-panel-tab ${tab === 'image' ? 'active' : ''}`}\n onClick={() => setTab('image')}\n >\n Image\n </button>\n </div>\n\n <div className=\"wm-panel-body\">\n {tab === 'text' ? (\n <>\n <div className=\"wm-panel-field\">\n <label>Text</label>\n <input\n type=\"text\"\n value={text}\n onChange={e => setText(e.target.value)}\n placeholder=\"Watermark text\"\n />\n </div>\n <div className=\"wm-panel-field\">\n <label>Font</label>\n <select\n value={font}\n onChange={e => setFont(e.target.value)}\n >\n {FONTS.map(f => (\n <option key={f.family} value={f.family}>\n {f.label}\n </option>\n ))}\n </select>\n </div>\n <div className=\"wm-panel-field\">\n <label>Color</label>\n <div className=\"wm-panel-colors\">\n {COLOR_PALETTE.flat().map(c => (\n <div\n key={c}\n className={`wm-panel-color ${color.toLowerCase() === c.toLowerCase() ? 'active' : ''}`}\n style={{ backgroundColor: c }}\n onClick={() => setColor(c)}\n />\n ))}\n </div>\n </div>\n </>\n ) : (\n <>\n <div className=\"wm-panel-field\">\n <label>Image</label>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px'\n }}\n >\n <button\n className=\"wm-panel-upload\"\n onClick={() => fileInputRef.current?.click()}\n >\n Choose File\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n style={{ display: 'none' }}\n onChange={handleFileUpload}\n />\n {imageData && (\n <span style={{ fontSize: '11px', color: '#667085' }}>\n Loaded\n </span>\n )}\n </div>\n </div>\n {imageData && (\n <div className=\"wm-panel-field\">\n <div className=\"wm-panel-preview\">\n <img\n src={imageData}\n alt=\"preview\"\n style={{\n maxWidth: '100%',\n maxHeight: '48px',\n objectFit: 'contain'\n }}\n />\n </div>\n </div>\n )}\n <div className=\"wm-panel-field-row\">\n <div className=\"wm-panel-field wm-panel-field-half\">\n <label>W</label>\n <input\n type=\"number\"\n value={imgWidth}\n min={10}\n onChange={e => setImgWidth(Number(e.target.value))}\n />\n </div>\n <div className=\"wm-panel-field wm-panel-field-half\">\n <label>H</label>\n <input\n type=\"number\"\n value={imgHeight}\n min={10}\n onChange={e => setImgHeight(Number(e.target.value))}\n />\n </div>\n </div>\n </>\n )}\n\n {/* Shared */}\n <div className=\"wm-panel-field\">\n <label>\n Opacity <span className=\"wm-panel-value\">{opacity}%</span>\n </label>\n <input\n type=\"range\"\n min={0}\n max={100}\n value={opacity}\n onChange={e => setOpacity(Number(e.target.value))}\n className=\"wm-panel-slider\"\n />\n </div>\n <div className=\"wm-panel-field\">\n <label>\n Rotation <span className=\"wm-panel-value\">{rotation}°</span>\n </label>\n <input\n type=\"range\"\n min={-90}\n max={90}\n value={rotation}\n onChange={e => setRotation(Number(e.target.value))}\n className=\"wm-panel-slider\"\n />\n </div>\n <div className=\"wm-panel-field\">\n <label>Position</label>\n <div className=\"wm-panel-toggle\">\n <button\n className={!inFront ? 'active' : ''}\n onClick={() => setInFront(false)}\n >\n Behind\n </button>\n <button\n className={inFront ? 'active' : ''}\n onClick={() => setInFront(true)}\n >\n In Front\n </button>\n </div>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"wm-panel-actions\">\n <button className=\"wm-panel-btn-delete\" onClick={handleDelete}>\n Remove\n </button>\n <button className=\"wm-panel-btn-apply\" onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n","import CatalogToggleTool from './footer/CatalogToggleTool';\nimport PageModeTool from './footer/PageModeTool';\nimport FooterStatus from './footer/FooterStatus';\nimport EditorModeTool from './footer/EditorModeTool';\nimport PageScaleMinusTool from './footer/PageScaleMinusTool';\nimport PageScalePercentageTool from './footer/PageScalePercentageTool';\nimport PageScaleAddTool from './footer/PageScaleAddTool';\nimport PaperSizeTool from './footer/PaperSizeTool';\nimport PaperDirectionTool from './footer/PaperDirectionTool';\nimport PaperMarginTool from './footer/PaperMarginTool';\nimport FullscreenTool from './footer/FullscreenTool';\nimport EditorOptionTool from './footer/EditorOptionTool';\nimport WatermarkFooterTool from './footer/WatermarkFooterTool';\n\nexport default function EditorFooter() {\n return (\n <div className=\"footer\" editor-component=\"footer\">\n <div>\n <CatalogToggleTool />\n <PageModeTool />\n <FooterStatus />\n </div>\n <EditorModeTool />\n <div>\n <PageScaleMinusTool />\n <PageScalePercentageTool />\n <PageScaleAddTool />\n <PaperSizeTool />\n <PaperDirectionTool />\n <PaperMarginTool />\n <WatermarkFooterTool />\n <FullscreenTool />\n <EditorOptionTool />\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","_","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","UnderlineIcon","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ImageIcon","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","SIZES","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","COLOR_PALETTE","FONTS","import_jsx_runtime","import_jsx_runtime","count"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/Editor.tsx","../src/EditorContext.tsx","../src/FooterContext.tsx","../src/toolbar/UndoTool.tsx","../src/toolbar/RedoTool.tsx","../src/toolbar/ColumnTool.tsx","../src/toolbar/TableTool.tsx","../src/toolbar/TitleTool.tsx","../src/toolbar/FontTool.tsx","../src/toolbar/FontSizeTool.tsx","../src/toolbar/LineHeightTool.tsx","../src/toolbar/ColorTool.tsx","../src/toolbar/HighlightTool.tsx","../src/toolbar/BoldTool.tsx","../src/toolbar/ItalicTool.tsx","../src/toolbar/UnderlineTool.tsx","../src/toolbar/StrikeoutTool.tsx","../src/toolbar/LeftAlignTool.tsx","../src/toolbar/CenterAlignTool.tsx","../src/toolbar/RightAlignTool.tsx","../src/toolbar/JustifyTool.tsx","../src/toolbar/ListTool.tsx","../src/toolbar/ImageTool.tsx","../src/toolbar/SeparatorTool.tsx","../src/toolbar/WatermarkTool.tsx","../src/toolbar/PageBreakTool.tsx","../src/EditorToolbar.tsx","../src/footer/CatalogToggleTool.tsx","../src/footer/PageModeTool.tsx","../src/footer/FooterStatus.tsx","../src/footer/EditorModeTool.tsx","../src/footer/PageScaleMinusTool.tsx","../src/footer/PageScalePercentageTool.tsx","../src/footer/PageScaleAddTool.tsx","../src/footer/PaperSizeTool.tsx","../src/footer/PaperDirectionTool.tsx","../src/footer/PaperMarginTool.tsx","../src/footer/FullscreenTool.tsx","../src/footer/EditorOptionTool.tsx","../src/footer/WatermarkFooterTool.tsx","../src/EditorFooter.tsx"],"sourcesContent":["// Main component\nexport { Editor } from './Editor';\n\n// Contexts & hooks\nexport { EditorProvider, useEditor } from './EditorContext';\nexport { FooterProvider, useFooter } from './FooterContext';\n\n// Prebuilt composable components\nexport { default as EditorToolbar } from './EditorToolbar';\nexport { default as EditorFooter } from './EditorFooter';\n\n// Individual toolbar tools\nexport { default as UndoTool } from './toolbar/UndoTool';\nexport { default as RedoTool } from './toolbar/RedoTool';\nexport { default as BoldTool } from './toolbar/BoldTool';\nexport { default as ItalicTool } from './toolbar/ItalicTool';\nexport { default as UnderlineTool } from './toolbar/UnderlineTool';\nexport { default as StrikeoutTool } from './toolbar/StrikeoutTool';\nexport { default as ColorTool } from './toolbar/ColorTool';\nexport { default as HighlightTool } from './toolbar/HighlightTool';\nexport { default as FontTool } from './toolbar/FontTool';\nexport { default as FontSizeTool } from './toolbar/FontSizeTool';\nexport { default as TitleTool } from './toolbar/TitleTool';\nexport { default as LineHeightTool } from './toolbar/LineHeightTool';\nexport { default as LeftAlignTool } from './toolbar/LeftAlignTool';\nexport { default as CenterAlignTool } from './toolbar/CenterAlignTool';\nexport { default as RightAlignTool } from './toolbar/RightAlignTool';\nexport { default as JustifyTool } from './toolbar/JustifyTool';\nexport { default as ListTool } from './toolbar/ListTool';\nexport { default as TableTool } from './toolbar/TableTool';\nexport { default as ImageTool } from './toolbar/ImageTool';\nexport { default as ColumnTool } from './toolbar/ColumnTool';\nexport { default as SeparatorTool } from './toolbar/SeparatorTool';\nexport { default as PageBreakTool } from './toolbar/PageBreakTool';\nexport { default as WatermarkTool } from './toolbar/WatermarkTool';\n\n// Individual footer tools\nexport { default as CatalogToggleTool } from './footer/CatalogToggleTool';\nexport { default as PageModeTool } from './footer/PageModeTool';\nexport { default as FooterStatus } from './footer/FooterStatus';\nexport { default as EditorModeTool } from './footer/EditorModeTool';\nexport { default as PageScaleMinusTool } from './footer/PageScaleMinusTool';\nexport { default as PageScalePercentageTool } from './footer/PageScalePercentageTool';\nexport { default as PageScaleAddTool } from './footer/PageScaleAddTool';\nexport { default as PaperSizeTool } from './footer/PaperSizeTool';\nexport { default as PaperDirectionTool } from './footer/PaperDirectionTool';\nexport { default as PaperMarginTool } from './footer/PaperMarginTool';\nexport { default as FullscreenTool } from './footer/FullscreenTool';\nexport { default as EditorOptionTool } from './footer/EditorOptionTool';\nexport { default as WatermarkFooterTool } from './footer/WatermarkFooterTool';\n\n// Types\nexport type {\n EditorInstance,\n RangeStylePayload,\n ICatalogItem,\n IComment\n} from './types';\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { EditorInstance, RangeStylePayload } from './types';\nimport { EditorProvider } from './EditorContext';\nimport { FooterProvider, useFooter } from './FooterContext';\nimport EditorToolbar from './EditorToolbar';\nimport EditorFooter from './EditorFooter';\n\ninterface EditorOptions {\n margins?: number[];\n defaultBasicRowMarginHeight?: number;\n watermark?: { data: string; size?: number; color?: string; opacity?: number };\n header?: { top?: number; disabled?: boolean };\n footer?: { bottom?: number; disabled?: boolean; backgroundColor?: string };\n pageNumber?: {\n disabled?: boolean;\n format?: string;\n color?: string;\n font?: string;\n size?: number;\n rowFlex?: string;\n bottom?: number;\n };\n placeholder?: { data: string };\n zone?: { tipDisabled?: boolean };\n maskMargin?: number[];\n scrollContainerSelector?: string;\n [key: string]: unknown;\n}\n\ninterface EditorData {\n header?: object[];\n main: object[];\n footer?: object[];\n}\n\ninterface EditorProps {\n /** Initial document data */\n defaultValue?: EditorData;\n /** Editor configuration options */\n options?: EditorOptions;\n /** Called when editor content changes */\n onChange?: (data: object) => void;\n /** Called when editor instance is ready */\n onReady?: (editor: EditorInstance) => void;\n /** Show built-in toolbar (default: true) */\n toolbar?: boolean;\n /** Show built-in footer/statusbar (default: true) */\n footer?: boolean;\n /** Custom toolbar component to replace built-in one */\n renderToolbar?: React.ReactNode;\n /** Custom footer component to replace built-in one */\n renderFooter?: React.ReactNode;\n /** Additional content rendered inside EditorProvider (e.g. sidebars) */\n children?: React.ReactNode;\n /** CSS class for the editor container */\n className?: string;\n /** Inline style for the editor container */\n style?: React.CSSProperties;\n /** Enable drag-and-drop badge insertion */\n onDrop?: (e: React.DragEvent, editor: EditorInstance) => void;\n /** Called when cursor/selection style changes — use this instead of overwriting editor.listener.rangeStyleChange via onReady */\n onRangeStyleChange?: (payload: RangeStylePayload) => void;\n}\n\nexport function Editor({\n defaultValue,\n options: userOptions,\n onChange,\n onReady,\n onRangeStyleChange,\n toolbar = true,\n footer = true,\n renderToolbar,\n renderFooter,\n children,\n className,\n style,\n onDrop: userOnDrop\n}: EditorProps) {\n return (\n <FooterProvider>\n <EditorInner\n defaultValue={defaultValue}\n options={userOptions}\n onChange={onChange}\n onReady={onReady}\n onRangeStyleChange={onRangeStyleChange}\n toolbar={toolbar}\n footer={footer}\n renderToolbar={renderToolbar}\n renderFooter={renderFooter}\n className={className}\n style={style}\n onDrop={userOnDrop}\n >\n {children}\n </EditorInner>\n </FooterProvider>\n );\n}\n\nfunction EditorInner({\n defaultValue,\n options: userOptions,\n onChange,\n onReady,\n onRangeStyleChange,\n toolbar = true,\n footer = true,\n renderToolbar,\n renderFooter,\n children,\n className,\n style,\n onDrop: userOnDrop\n}: Omit<EditorProps, 'onDrop'> & { onDrop?: EditorProps['onDrop'] }) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<EditorInstance | null>(null);\n const [rangeStyle, setRangeStyle] = useState<RangeStylePayload | null>(null);\n\n const {\n setPageNoList,\n setPageNo,\n setPageSize,\n setWordCount,\n setRowNo,\n setColNo,\n setPageScale\n } = useFooter();\n\n useEffect(() => {\n let instance: EditorInstance | null = null;\n let cancelled = false;\n let closeDropdowns: ((evt: MouseEvent) => void) | null = null;\n\n const initEditor = async () => {\n if (!containerRef.current) return;\n\n const {\n default: EditorClass,\n KeyMap,\n EditorMode,\n EditorZone,\n ElementType,\n Dialog,\n Signature\n } = await import('@windoc/core');\n\n // Guard: if cleanup already ran before async resolved, bail out\n if (cancelled) return;\n\n const data = (defaultValue ?? { main: [] }) as any;\n\n instance = new EditorClass(\n containerRef.current!,\n data,\n (userOptions ?? {}) as any\n ) as unknown as EditorInstance;\n\n editorRef.current = instance;\n\n // Setup listeners\n instance.listener.rangeStyleChange = (payload: RangeStylePayload) => {\n setRangeStyle(payload);\n onRangeStyleChange?.(payload);\n const rangeContext = instance?.command.getRangeContext();\n if (rangeContext) {\n setRowNo(rangeContext.startRowNo + 1);\n setColNo(rangeContext.startColNo + 1);\n }\n };\n\n instance.listener.visiblePageNoListChange = (payload: number[]) => {\n setPageNoList(payload.map(i => i + 1).join(', '));\n };\n\n instance.listener.pageSizeChange = (payload: number) => {\n setPageSize(payload);\n };\n\n instance.listener.intersectionPageNoChange = (payload: number) => {\n setPageNo(payload + 1);\n };\n\n instance.listener.pageScaleChange = (payload: number) => {\n setPageScale(Math.floor(payload * 10 * 10));\n };\n\n instance.listener.contentChange = async () => {\n const count = await instance?.command.getWordCount();\n setWordCount(count || 0);\n if (onChange) {\n const value = instance?.command.getValue();\n if (value) onChange(value);\n }\n };\n\n // Register shortcuts\n instance.register.shortcutList([\n {\n key: KeyMap.P,\n mod: true,\n isGlobal: true,\n callback: (command: { executePrint: () => void }) => {\n command.executePrint();\n }\n },\n {\n key: KeyMap.MINUS,\n ctrl: true,\n isGlobal: true,\n callback: (command: { executePageScaleMinus: () => void }) => {\n command.executePageScaleMinus();\n }\n },\n {\n key: KeyMap.EQUAL,\n ctrl: true,\n isGlobal: true,\n callback: (command: { executePageScaleAdd: () => void }) => {\n command.executePageScaleAdd();\n }\n },\n {\n key: KeyMap.ZERO,\n ctrl: true,\n isGlobal: true,\n callback: (command: { executePageScaleRecovery: () => void }) => {\n command.executePageScaleRecovery();\n }\n }\n ]);\n\n // Register context menus\n instance.register.contextMenuList([\n {\n name: 'Signature',\n icon: 'signature',\n when: (payload: {\n isReadonly: boolean;\n editorTextFocus: boolean;\n }) => {\n return !payload.isReadonly && payload.editorTextFocus;\n },\n callback: (command: {\n executeInsertElementList: (elements: object[]) => void;\n }) => {\n new Signature({\n onConfirm(\n payload: { value: string; width: number; height: number } | null\n ) {\n if (!payload) return;\n const { value, width, height } = payload;\n if (!value || !width || !height) return;\n command.executeInsertElementList([\n { value, width, height, type: ElementType.IMAGE }\n ]);\n }\n });\n }\n },\n {\n name: 'Format Cleanup',\n icon: 'word-tool',\n when: (payload: { isReadonly: boolean }) => !payload.isReadonly,\n callback: (command: { executeWordTool: () => void }) => {\n command.executeWordTool();\n }\n }\n ]);\n\n // Global click handler to close dropdowns — store ref for cleanup\n closeDropdowns = (evt: MouseEvent) => {\n const visibleDom = document.querySelector('.visible');\n if (!visibleDom) return;\n const parent = visibleDom.parentElement;\n if (parent && parent.contains(evt.target as Node)) return;\n visibleDom.classList.remove('visible');\n };\n window.addEventListener('click', closeDropdowns, { capture: true });\n\n // Initial content change\n const count = await instance.command.getWordCount();\n setWordCount(count || 0);\n\n // Notify consumer\n onReady?.(instance);\n };\n\n initEditor();\n\n return () => {\n cancelled = true;\n instance?.destroy();\n editorRef.current = null;\n if (closeDropdowns) {\n window.removeEventListener('click', closeDropdowns, { capture: true });\n closeDropdowns = null;\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n if (userOnDrop && editorRef.current) {\n userOnDrop(e, editorRef.current);\n }\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n };\n\n return (\n <EditorProvider editorRef={editorRef} rangeStyle={rangeStyle}>\n {toolbar && !renderToolbar && <EditorToolbar />}\n {renderToolbar}\n {children}\n <div\n className={className ?? 'editor'}\n style={style ?? { flex: 1, minHeight: 0, overflow: 'auto' }}\n ref={containerRef}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n {footer && !renderFooter && <EditorFooter />}\n {renderFooter}\n </EditorProvider>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useEffect, useState } from 'react';\nimport type { MutableRefObject } from 'react';\nimport type { EditorInstance, RangeStylePayload } from './types';\n\ninterface EditorContextValue {\n editorRef: MutableRefObject<EditorInstance | null>;\n isApple: boolean;\n rangeStyle: RangeStylePayload | null;\n}\n\nconst EditorContext = createContext<EditorContextValue | null>(null);\n\nexport function EditorProvider({\n editorRef,\n rangeStyle,\n children\n}: {\n editorRef: MutableRefObject<EditorInstance | null>;\n rangeStyle: RangeStylePayload | null;\n children: React.ReactNode;\n}) {\n const [isApple, setIsApple] = useState(false);\n\n useEffect(() => {\n setIsApple(/Mac OS X/.test(navigator.userAgent));\n }, []);\n\n return (\n <EditorContext.Provider value={{ editorRef, isApple, rangeStyle }}>\n {children}\n </EditorContext.Provider>\n );\n}\n\nexport function useEditor() {\n const ctx = useContext(EditorContext);\n if (!ctx) throw new Error('useEditor must be used within EditorProvider');\n return ctx;\n}\n","'use client';\n\nimport { createContext, useContext, useState } from 'react';\n\ninterface FooterContextValue {\n pageNoList: string;\n pageNo: number;\n pageSize: number;\n wordCount: number;\n rowNo: number;\n colNo: number;\n pageScale: number;\n setPageNoList: (v: string) => void;\n setPageNo: (v: number) => void;\n setPageSize: (v: number) => void;\n setWordCount: (v: number) => void;\n setRowNo: (v: number) => void;\n setColNo: (v: number) => void;\n setPageScale: (v: number) => void;\n handleToggleCatalogAction?: () => void;\n}\n\nconst FooterContext = createContext<FooterContextValue | null>(null);\n\nexport function FooterProvider({\n handleToggleCatalogAction,\n children\n}: {\n handleToggleCatalogAction?: () => void;\n children: React.ReactNode;\n}) {\n const [pageNoList, setPageNoList] = useState('1');\n const [pageNo, setPageNo] = useState(1);\n const [pageSize, setPageSize] = useState(1);\n const [wordCount, setWordCount] = useState(0);\n const [rowNo, setRowNo] = useState(0);\n const [colNo, setColNo] = useState(0);\n const [pageScale, setPageScale] = useState(100);\n\n return (\n <FooterContext.Provider\n value={{\n pageNoList,\n pageNo,\n pageSize,\n wordCount,\n rowNo,\n colNo,\n pageScale,\n setPageNoList,\n setPageNo,\n setPageSize,\n setWordCount,\n setRowNo,\n setColNo,\n setPageScale,\n handleToggleCatalogAction\n }}\n >\n {children}\n </FooterContext.Provider>\n );\n}\n\nexport function useFooter() {\n const ctx = useContext(FooterContext);\n if (!ctx) throw new Error('useFooter must be used within FooterProvider');\n return ctx;\n}\n","import { Undo } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function UndoTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isDisabled = rangeStyle ? !rangeStyle.undo : true;\n return (\n <div\n className={`menu-item__undo${isDisabled ? ' disabled' : ''}`}\n title={`Undo(${isApple ? '⌘' : 'Ctrl'}+Z)`}\n onClick={() => {\n if (!isDisabled) editorRef.current?.command.executeUndo();\n }}\n >\n <Undo size={16} />\n </div>\n );\n}\n","import { Redo } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function RedoTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isDisabled = rangeStyle ? !rangeStyle.redo : true;\n return (\n <div\n className={`menu-item__redo${isDisabled ? ' disabled' : ''}`}\n title={`Redo(${isApple ? '⌘' : 'Ctrl'}+Y)`}\n onClick={() => {\n if (!isDisabled) editorRef.current?.command.executeRedo();\n }}\n >\n <Redo size={16} />\n </div>\n );\n}\n","import { useRef, useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function ColumnTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const [currentColumns, setCurrentColumns] = useState(1);\n const [gap, setGap] = useState(20);\n\n const handleColumn = (col: number) => {\n editorRef.current?.command.executeColumnCount(col);\n setCurrentColumns(col);\n };\n\n const handleGapChange = (value: number) => {\n const clampedValue = Math.max(0, Math.min(100, value));\n setGap(clampedValue);\n editorRef.current?.command.executeColumnGap(clampedValue);\n };\n\n return (\n <div\n className=\"menu-item__column\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Column Layout\">\n {currentColumns === 1 ? '1 Column' : `${currentColumns} Columns`}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <div onClick={e => e.stopPropagation()}>\n <ul>\n <li onClick={() => handleColumn(1)}>1 Column</li>\n <li onClick={() => handleColumn(2)}>2 Columns</li>\n </ul>\n {currentColumns > 1 && (\n <>\n <div className=\"option-divider\" />\n <div className=\"option-row\">\n <label>Gap (px)</label>\n <input\n type=\"number\"\n min={0}\n max={100}\n value={gap}\n onChange={e => handleGapChange(Number(e.target.value))}\n onClick={e => e.stopPropagation()}\n />\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport { Table } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function TableTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n const [hoverRow, setHoverRow] = useState(0);\n const [hoverCol, setHoverCol] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!visible) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setVisible(false);\n setHoverRow(0);\n setHoverCol(0);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [visible]);\n\n const handleInsertTable = () => {\n if (hoverRow > 0 && hoverCol > 0) {\n editorRef.current?.command.executeInsertTable(hoverRow, hoverCol);\n }\n setVisible(false);\n setHoverRow(0);\n setHoverCol(0);\n };\n\n return (\n <div ref={containerRef} className=\"menu-item__table\" title=\"Table\">\n <Table\n size={16}\n onClick={() => setVisible(!visible)}\n style={{ cursor: 'pointer' }}\n />\n {visible && (\n <div className=\"table-dropdown\">\n <div className=\"table-dropdown-header\">\n <span>\n {hoverRow > 0 ? `${hoverRow} × ${hoverCol}` : 'Insert Table'}\n </span>\n </div>\n <div className=\"table-dropdown-grid\" onClick={handleInsertTable}>\n {Array.from({ length: 8 }).map((_, rowIdx) => (\n <div key={rowIdx} className=\"table-dropdown-row\">\n {Array.from({ length: 8 }).map((_, colIdx) => (\n <div\n key={colIdx}\n className={`table-dropdown-cell ${rowIdx < hoverRow && colIdx < hoverCol ? 'active' : ''}`}\n onMouseEnter={() => {\n setHoverRow(rowIdx + 1);\n setHoverCol(colIdx + 1);\n }}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst LEVELS: { level: string | null; label: string }[] = [\n { level: null, label: 'Body' },\n { level: 'first', label: 'Heading 1' },\n { level: 'second', label: 'Heading 2' },\n { level: 'third', label: 'Heading 3' },\n { level: 'fourth', label: 'Heading 4' },\n { level: 'fifth', label: 'Heading 5' },\n { level: 'sixth', label: 'Heading 6' }\n];\n\nexport default function TitleTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeLevel = rangeStyle?.level || null;\n const activeLabel =\n LEVELS.find(l => l.level === activeLevel)?.label || 'Body';\n\n const handleTitle = (level: string | null) => {\n editorRef.current?.command.executeTitle(level);\n };\n\n return (\n <div\n className=\"menu-item__title\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Toggle Heading\">\n {activeLabel}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {LEVELS.map(({ level, label }) => (\n <li\n key={label}\n className={activeLevel === level ? 'active' : ''}\n {...(level ? { 'data-level': level } : {})}\n onClick={() => handleTitle(level)}\n >\n {label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst FONTS = [\n { family: 'Arial', label: 'Arial' },\n { family: 'Times New Roman', label: 'Times New Roman' },\n { family: 'Georgia', label: 'Georgia' },\n { family: 'Verdana', label: 'Verdana' },\n { family: 'Trebuchet MS', label: 'Trebuchet MS' },\n { family: 'Courier New', label: 'Courier New' },\n { family: 'Comic Sans MS', label: 'Comic Sans MS' },\n { family: 'Impact', label: 'Impact' }\n];\n\nexport default function FontTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeFont = rangeStyle?.font || 'Arial';\n const activeLabel =\n FONTS.find(f => f.family === activeFont)?.label || activeFont;\n\n const handleFont = (family: string) => {\n editorRef.current?.command.executeFont(family);\n };\n\n return (\n <div\n className=\"menu-item__font\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Font\">\n {activeLabel}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {FONTS.map(({ family, label }) => (\n <li\n key={family}\n data-family={family}\n className={activeFont === family ? 'active' : ''}\n style={{ fontFamily: family }}\n onClick={() => handleFont(family)}\n >\n {label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst SIZES = [72, 48, 36, 24, 20, 18, 16, 14, 12, 11, 10, 9, 8, 7];\n\nexport default function FontSizeTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeSize = rangeStyle?.size ?? 11;\n\n const handleSize = (size: number) => {\n editorRef.current?.command.executeSize(size);\n };\n\n return (\n <div\n className=\"menu-item__size\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Font Size\">\n {activeSize}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {SIZES.map(size => (\n <li\n key={size}\n className={activeSize === size ? 'active' : ''}\n onClick={() => handleSize(size)}\n >\n {size}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst LINE_HEIGHTS = ['1.0', '1.15', '1.5', '2.0', '2.5'];\n\nexport default function LineHeightTool() {\n const { editorRef, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const activeMargin = rangeStyle?.rowMargin ?? 1;\n const activeLabel = Number.isInteger(activeMargin)\n ? `${activeMargin}.0`\n : String(activeMargin);\n\n const handleLineHeight = (value: string) => {\n editorRef.current?.command.executeRowMargin(Number(value));\n };\n\n return (\n <div\n className=\"menu-item__line-height\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <span className=\"select\" title=\"Line Height\">\n {activeLabel}\n </span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {LINE_HEIGHTS.map(h => (\n <li\n key={h}\n className={\n String(activeMargin) === h || activeLabel === h ? 'active' : ''\n }\n onClick={() => handleLineHeight(h)}\n >\n {h}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { Baseline, RotateCcw } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst COLOR_PALETTE = [\n [\n '#000000',\n '#434343',\n '#666666',\n '#999999',\n '#b7b7b7',\n '#cccccc',\n '#d9d9d9',\n '#efefef',\n '#f3f3f3',\n '#ffffff'\n ],\n [\n '#980000',\n '#ff0000',\n '#ff9900',\n '#ffff00',\n '#00ff00',\n '#00ffff',\n '#4a86e8',\n '#0000ff',\n '#9900ff',\n '#ff00ff'\n ],\n [\n '#e6b8af',\n '#f4cccc',\n '#fce5cd',\n '#fff2cc',\n '#d9ead3',\n '#d0e0e3',\n '#c9daf8',\n '#cfe2f3',\n '#d9d2e9',\n '#ead1dc'\n ],\n [\n '#dd7e6b',\n '#ea9999',\n '#f9cb9c',\n '#ffe599',\n '#b6d7a8',\n '#a2c4c9',\n '#a4c2f4',\n '#9fc5e8',\n '#b4a7d6',\n '#d5a6bd'\n ],\n [\n '#cc4125',\n '#e06666',\n '#f6b26b',\n '#ffd966',\n '#93c47d',\n '#76a5af',\n '#6d9eeb',\n '#6fa8dc',\n '#8e7cc3',\n '#c27ba0'\n ],\n [\n '#a61c00',\n '#cc0000',\n '#e69138',\n '#f1c232',\n '#6aa84f',\n '#45818e',\n '#3c78d8',\n '#3d85c6',\n '#674ea7',\n '#a64d79'\n ],\n [\n '#85200c',\n '#990000',\n '#b45f06',\n '#bf9000',\n '#38761d',\n '#134f5c',\n '#1155cc',\n '#0b5394',\n '#351c75',\n '#741b47'\n ],\n [\n '#5b0f00',\n '#660000',\n '#783f04',\n '#7f6000',\n '#274e13',\n '#0c343d',\n '#1c4587',\n '#073763',\n '#20124d',\n '#4c1130'\n ]\n];\n\nexport default function ColorTool() {\n const { editorRef, rangeStyle } = useEditor();\n const dropdownRef = useRef<HTMLDivElement>(null);\n const activeColor = rangeStyle?.color || '#000000';\n\n const handleColor = (color: string) => {\n editorRef.current?.command.executeColor(color);\n };\n\n const handleReset = () => {\n editorRef.current?.command.executeColor(null);\n };\n\n return (\n <div\n className=\"menu-item__color\"\n title=\"Font Color\"\n onClick={() => dropdownRef.current?.classList.toggle('visible')}\n >\n <Baseline size={16} />\n <span style={{ backgroundColor: activeColor }}></span>\n <input id=\"color\" type=\"color\" readOnly tabIndex={-1} />\n <div className=\"color-palette-dropdown\" ref={dropdownRef}>\n <div onClick={e => e.stopPropagation()}>\n <button className=\"color-palette-reset\" onClick={handleReset}>\n <RotateCcw size={12} />\n Reset\n </button>\n <div className=\"color-palette-grid\">\n {COLOR_PALETTE.map((row, ri) => (\n <div key={ri} className=\"color-palette-row\">\n {row.map(color => (\n <div\n key={color}\n className={`color-palette-swatch${activeColor.toLowerCase() === color.toLowerCase() ? ' active' : ''}`}\n style={{ backgroundColor: color }}\n onClick={() => handleColor(color)}\n title={color}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { Highlighter, RotateCcw } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst HIGHLIGHT_PALETTE = [\n [\n '#000000',\n '#434343',\n '#666666',\n '#999999',\n '#b7b7b7',\n '#cccccc',\n '#d9d9d9',\n '#efefef',\n '#f3f3f3',\n '#ffffff'\n ],\n [\n '#980000',\n '#ff0000',\n '#ff9900',\n '#ffff00',\n '#00ff00',\n '#00ffff',\n '#4a86e8',\n '#0000ff',\n '#9900ff',\n '#ff00ff'\n ],\n [\n '#e6b8af',\n '#f4cccc',\n '#fce5cd',\n '#fff2cc',\n '#d9ead3',\n '#d0e0e3',\n '#c9daf8',\n '#cfe2f3',\n '#d9d2e9',\n '#ead1dc'\n ],\n [\n '#dd7e6b',\n '#ea9999',\n '#f9cb9c',\n '#ffe599',\n '#b6d7a8',\n '#a2c4c9',\n '#a4c2f4',\n '#9fc5e8',\n '#b4a7d6',\n '#d5a6bd'\n ],\n [\n '#cc4125',\n '#e06666',\n '#f6b26b',\n '#ffd966',\n '#93c47d',\n '#76a5af',\n '#6d9eeb',\n '#6fa8dc',\n '#8e7cc3',\n '#c27ba0'\n ],\n [\n '#a61c00',\n '#cc0000',\n '#e69138',\n '#f1c232',\n '#6aa84f',\n '#45818e',\n '#3c78d8',\n '#3d85c6',\n '#674ea7',\n '#a64d79'\n ],\n [\n '#85200c',\n '#990000',\n '#b45f06',\n '#bf9000',\n '#38761d',\n '#134f5c',\n '#1155cc',\n '#0b5394',\n '#351c75',\n '#741b47'\n ],\n [\n '#5b0f00',\n '#660000',\n '#783f04',\n '#7f6000',\n '#274e13',\n '#0c343d',\n '#1c4587',\n '#073763',\n '#20124d',\n '#4c1130'\n ]\n];\n\nexport default function HighlightTool() {\n const { editorRef, rangeStyle } = useEditor();\n const dropdownRef = useRef<HTMLDivElement>(null);\n const activeColor = rangeStyle?.highlight || '';\n\n const handleColor = (color: string) => {\n editorRef.current?.command.executeHighlight(color);\n };\n\n const handleReset = () => {\n editorRef.current?.command.executeHighlight(null);\n };\n\n return (\n <div\n className=\"menu-item__highlight\"\n title=\"Highlight\"\n onClick={() => dropdownRef.current?.classList.toggle('visible')}\n >\n <Highlighter size={16} />\n <span style={{ backgroundColor: activeColor || '#ffff00' }}></span>\n <input id=\"highlight\" type=\"color\" readOnly tabIndex={-1} />\n <div className=\"color-palette-dropdown\" ref={dropdownRef}>\n <div onClick={e => e.stopPropagation()}>\n <button className=\"color-palette-reset\" onClick={handleReset}>\n <RotateCcw size={12} />\n None\n </button>\n <div className=\"color-palette-grid\">\n {HIGHLIGHT_PALETTE.map((row, ri) => (\n <div key={ri} className=\"color-palette-row\">\n {row.map(color => (\n <div\n key={color}\n className={`color-palette-swatch${activeColor && activeColor.toLowerCase() === color.toLowerCase() ? ' active' : ''}`}\n style={{ backgroundColor: color }}\n onClick={() => handleColor(color)}\n title={color}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Bold } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function BoldTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.bold === true;\n return (\n <div\n className={`menu-item__bold ${isActive ? 'active' : ''}`}\n title={`Bold(${isApple ? '⌘' : 'Ctrl'}+B)`}\n onClick={() => editorRef.current?.command.executeBold()}\n >\n <Bold size={16} />\n </div>\n );\n}\n","import { Italic } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function ItalicTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.italic === true;\n return (\n <div\n className={`menu-item__italic ${isActive ? 'active' : ''}`}\n title={`Italic(${isApple ? '⌘' : 'Ctrl'}+I)`}\n onClick={() => editorRef.current?.command.executeItalic()}\n >\n <Italic size={16} />\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { Underline as UnderlineIcon } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst STYLES = ['solid', 'double', 'dashed', 'dotted', 'wavy'];\n\nexport default function UnderlineTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const isActive = rangeStyle?.underline === true;\n\n return (\n <div\n className={`menu-item__underline ${isActive ? 'active' : ''}`}\n title={`Underline(${isApple ? '⌘' : 'Ctrl'}+U)`}\n >\n <UnderlineIcon\n size={16}\n onClick={() => editorRef.current?.command.executeUnderline()}\n style={{ cursor: 'pointer' }}\n />\n <span\n className=\"select\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n ></span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {STYLES.map(style => (\n <li\n key={style}\n data-decoration-style={style}\n onClick={() => {\n editorRef.current?.command.executeUnderline({ style });\n }}\n >\n <i></i>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { Strikethrough } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function StrikeoutTool() {\n const { editorRef, rangeStyle } = useEditor();\n const isActive = rangeStyle?.strikeout === true;\n return (\n <div\n className={`menu-item__strikeout ${isActive ? 'active' : ''}`}\n title=\"Strikethrough\"\n onClick={() => editorRef.current?.command.executeStrikeout()}\n >\n <Strikethrough size={16} />\n </div>\n );\n}\n","import { AlignLeft } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function LeftAlignTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = !rangeStyle?.rowFlex || rangeStyle.rowFlex === 'left';\n return (\n <div\n className={`menu-item__left ${isActive ? 'active' : ''}`}\n title={`Left align(${isApple ? '⌘' : 'Ctrl'}+L)`}\n onClick={() => editorRef.current?.command.executeRowFlex('left')}\n >\n <AlignLeft size={16} />\n </div>\n );\n}\n","import { AlignCenter } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function CenterAlignTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.rowFlex === 'center';\n return (\n <div\n className={`menu-item__center ${isActive ? 'active' : ''}`}\n title={`Center align(${isApple ? '⌘' : 'Ctrl'}+E)`}\n onClick={() => editorRef.current?.command.executeRowFlex('center')}\n >\n <AlignCenter size={16} />\n </div>\n );\n}\n","import { AlignRight } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function RightAlignTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive = rangeStyle?.rowFlex === 'right';\n return (\n <div\n className={`menu-item__right ${isActive ? 'active' : ''}`}\n title={`Right align(${isApple ? '⌘' : 'Ctrl'}+R)`}\n onClick={() => editorRef.current?.command.executeRowFlex('right')}\n >\n <AlignRight size={16} />\n </div>\n );\n}\n","import { AlignJustify } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function JustifyTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const isActive =\n rangeStyle?.rowFlex === 'justify' || rangeStyle?.rowFlex === 'alignment';\n return (\n <div\n className={`menu-item__justify ${isActive ? 'active' : ''}`}\n title={`Distribute(${isApple ? '⌘' : 'Ctrl'}+Shift+J)`}\n onClick={() => editorRef.current?.command.executeRowFlex('justify')}\n >\n <AlignJustify size={16} />\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { List, ListOrdered, Indent, Outdent } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\ninterface PresetOption {\n preset: string;\n label: string;\n preview: string[];\n}\n\nconst OL_PRESETS: PresetOption[] = [\n { preset: 'olDefault', label: 'Default', preview: ['1.', 'a.', 'i.'] },\n { preset: 'olParen', label: 'Parenthesis', preview: ['1)', 'a)', 'i)'] },\n { preset: 'olOutline', label: 'Outline', preview: ['1.', '1.1.', '1.1.1.'] },\n { preset: 'olUpperA', label: 'Upper Alpha', preview: ['A.', 'a.', 'i.'] },\n { preset: 'olRoman', label: 'Roman', preview: ['I.', 'A.', '1.'] },\n { preset: 'olZeroPad', label: 'Zero Pad', preview: ['01.', 'a.', 'i.'] }\n];\n\nconst UL_PRESETS: PresetOption[] = [\n { preset: 'ulDefault', label: 'Default', preview: ['●', '○', '■'] },\n { preset: 'ulDiamond', label: 'Diamond', preview: ['◆', '➤', '■'] },\n { preset: 'ulHollowSq', label: 'Hollow Square', preview: ['□', '□', '□'] },\n { preset: 'ulArrow', label: 'Arrow', preview: ['→', '◆', '●'] },\n { preset: 'ulStar', label: 'Star', preview: ['★', '○', '■'] },\n { preset: 'ulCheckArr', label: 'Check Arrow', preview: ['➤', '○', '■'] }\n];\n\nfunction PresetCell({\n option,\n onClick\n}: {\n option: PresetOption;\n onClick: () => void;\n}) {\n return (\n <div onClick={onClick} className=\"list-preset-cell\" title={option.label}>\n {option.preview.map((item, i) => (\n <div\n key={i}\n className=\"list-preset-line\"\n style={{ paddingLeft: `${i * 10}px` }}\n >\n <span className=\"list-preset-marker\">{item}</span>\n <span className=\"list-preset-text\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport default function ListTool() {\n const { editorRef, isApple, rangeStyle } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const isActive = !!rangeStyle?.listType;\n\n const close = () => optionsRef.current?.classList.remove('visible');\n\n const handleList = (type: string | null, style?: string) => {\n editorRef.current?.command.executeList(type, style);\n close();\n };\n\n const handlePreset = (type: 'ol' | 'ul', preset: string) => {\n const style = type === 'ol' ? 'decimal' : 'disc';\n editorRef.current?.command.executeListWithPreset(type, style, preset);\n close();\n };\n\n const handleIndent = (e: React.MouseEvent) => {\n e.stopPropagation();\n editorRef.current?.command.executeListIndent();\n close();\n };\n\n const handleOutdent = (e: React.MouseEvent) => {\n e.stopPropagation();\n editorRef.current?.command.executeListOutdent();\n close();\n };\n\n return (\n <div\n className={`menu-item__list ${isActive ? 'active' : ''}`}\n title={`List(${isApple ? '⌘' : 'Ctrl'}+Shift+U)`}\n >\n <List\n size={16}\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n style={{ cursor: 'pointer' }}\n />\n <div className=\"options\" ref={optionsRef} style={{ width: '320px' }}>\n <div style={{ padding: '8px' }}>\n {/* Quick Actions */}\n <div style={{ display: 'flex', gap: '4px', marginBottom: '8px' }}>\n <button\n onClick={() => handleList('ul', 'checkbox')}\n className=\"list-quick-btn\"\n >\n Checkbox\n </button>\n <button\n onClick={handleIndent}\n className=\"list-quick-btn\"\n title=\"Indent (Tab)\"\n >\n <Indent size={14} />\n </button>\n <button\n onClick={handleOutdent}\n className=\"list-quick-btn\"\n title=\"Outdent (Shift+Tab)\"\n >\n <Outdent size={14} />\n </button>\n </div>\n\n {/* Ordered List Presets */}\n <div style={{ marginBottom: '8px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '11px',\n color: '#667085',\n marginBottom: '6px',\n fontWeight: 500\n }}\n >\n <ListOrdered size={12} />\n Ordered List\n </div>\n <div className=\"list-preset-grid\">\n {OL_PRESETS.map(option => (\n <PresetCell\n key={option.preset}\n option={option}\n onClick={() => handlePreset('ol', option.preset)}\n />\n ))}\n </div>\n </div>\n\n {/* Unordered List Presets */}\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '11px',\n color: '#667085',\n marginBottom: '6px',\n fontWeight: 500\n }}\n >\n <List size={12} />\n Unordered List\n </div>\n <div className=\"list-preset-grid\">\n {UL_PRESETS.map(option => (\n <PresetCell\n key={option.preset}\n option={option}\n onClick={() => handlePreset('ul', option.preset)}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Image as ImageIcon } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nexport default function ImageTool() {\n const { editorRef } = useEditor();\n\n const handleImageUpload = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const img = new Image();\n img.src = reader.result as string;\n img.onload = () => {\n editorRef.current?.command.executeImage({\n value: reader.result as string,\n width: img.width,\n height: img.height\n });\n };\n };\n e.target.value = '';\n };\n\n return (\n <div\n className=\"menu-item__image\"\n onClick={() => document.getElementById('image')?.click()}\n >\n <ImageIcon size={16} />\n <input\n type=\"file\"\n id=\"image\"\n accept=\".png, .jpg, .jpeg, .svg, .gif\"\n onChange={handleImageUpload}\n />\n </div>\n );\n}\n","import { useRef, useState } from 'react';\nimport { Minus } from 'lucide-react';\nimport { useEditor } from '../EditorContext';\n\nconst DASH_STYLES: { label: string; dashArray: number[] }[] = [\n { label: 'Solid', dashArray: [] },\n { label: 'Dotted', dashArray: [1, 1] },\n { label: 'Dashed', dashArray: [3, 1] },\n { label: 'Long Dash', dashArray: [4, 4] }\n];\n\nconst LINE_WIDTHS: { label: string; value: number }[] = [\n { label: 'Thin', value: 1 },\n { label: 'Medium', value: 2 },\n { label: 'Thick', value: 4 }\n];\n\nexport default function SeparatorTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n const [selectedWidth, setSelectedWidth] = useState(1);\n\n const lineColor = '#344054';\n\n const handleSeparator = (e: React.MouseEvent, dashArray: number[]) => {\n e.stopPropagation();\n editorRef.current?.command.executeSeparator(dashArray, {\n lineWidth: selectedWidth\n });\n optionsRef.current?.classList.remove('visible');\n };\n\n return (\n <div className=\"menu-item\" title=\"Separator\">\n <span\n className=\"menu-item__separator\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n cursor: 'pointer',\n margin: '0 2px',\n borderRadius: '8px',\n color: '#475467',\n transition: 'all 0.2s',\n position: 'relative'\n }}\n >\n <Minus size={16} />\n <div\n className=\"options\"\n ref={optionsRef}\n style={{ width: '220px', height: 'auto' }}\n >\n <div style={{ padding: '8px 10px 10px' }}>\n <ul style={{ margin: 0, padding: 0, listStyle: 'none' }}>\n {DASH_STYLES.map(({ label, dashArray }) => (\n <li\n key={label}\n onClick={e => handleSeparator(e, dashArray)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '5px 6px',\n cursor: 'pointer',\n borderRadius: '4px'\n }}\n >\n <svg\n style={{ flex: 1, minWidth: 0, overflow: 'hidden' }}\n height=\"8\"\n >\n <line\n x1=\"0\"\n y1=\"4\"\n x2=\"100%\"\n y2=\"4\"\n stroke={lineColor}\n strokeWidth={selectedWidth}\n strokeDasharray={\n dashArray.length ? dashArray.join(',') : 'none'\n }\n />\n </svg>\n <span\n style={{\n fontSize: '11px',\n color: '#475467',\n whiteSpace: 'nowrap',\n flexShrink: 0\n }}\n >\n {label}\n </span>\n </li>\n ))}\n </ul>\n\n <div\n style={{\n borderTop: '1px solid #e4e7ec',\n marginTop: '8px',\n paddingTop: '8px'\n }}\n >\n <div\n style={{\n fontSize: '11px',\n color: '#667085',\n marginBottom: '6px',\n fontWeight: 500\n }}\n >\n Line Width\n </div>\n <div style={{ display: 'flex', gap: '4px' }}>\n {LINE_WIDTHS.map(({ label, value }) => (\n <button\n key={value}\n onClick={e => {\n e.stopPropagation();\n setSelectedWidth(value);\n }}\n style={{\n flex: 1,\n padding: '3px 6px',\n fontSize: '11px',\n border: `1px solid ${selectedWidth === value ? '#3b82f6' : '#d0d5dd'}`,\n borderRadius: '4px',\n background: selectedWidth === value ? '#eff6ff' : '#fff',\n color: selectedWidth === value ? '#3b82f6' : '#475467',\n cursor: 'pointer',\n fontWeight: selectedWidth === value ? 600 : 400\n }}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n </span>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function InsertElementTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const handleHeader = () => {\n if (!editorRef.current) return;\n const options = editorRef.current.command.getOptions();\n if (options.header.disabled) {\n // Header doesn't exist yet — enable it\n options.header.disabled = false;\n editorRef.current.command.executeForceUpdate();\n }\n // Navigate to header zone for editing\n editorRef.current.command.executeSetZone('header');\n };\n\n return (\n <div\n className=\"menu-item__insert-element\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <i title=\"Insert Element\"></i>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n <li onClick={handleHeader}>Add Header</li>\n </ul>\n </div>\n </div>\n );\n}\n","import { useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function PageBreakTool() {\n const { editorRef } = useEditor();\n const optionsRef = useRef<HTMLDivElement>(null);\n\n const handlePageBreak = () => {\n editorRef.current?.command.executePageBreak();\n };\n\n const handleColumnBreak = () => {\n editorRef.current?.command.executeColumnBreak();\n };\n\n return (\n <div\n className=\"menu-item__page-break\"\n onClick={() => optionsRef.current?.classList.toggle('visible')}\n >\n <i title=\"Break\"></i>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n <li onClick={handlePageBreak}>Page Break</li>\n <li onClick={handleColumnBreak}>Column Break</li>\n </ul>\n </div>\n </div>\n );\n}\n","import UndoTool from './toolbar/UndoTool';\nimport RedoTool from './toolbar/RedoTool';\n// import PainterTool from \"./toolbar/PainterTool\";\n// import ClearFormatTool from \"./toolbar/ClearFormatTool\";\nimport ColumnTool from './toolbar/ColumnTool';\nimport TableTool from './toolbar/TableTool';\nimport TitleTool from './toolbar/TitleTool';\nimport FontTool from './toolbar/FontTool';\nimport FontSizeTool from './toolbar/FontSizeTool';\nimport LineHeightTool from './toolbar/LineHeightTool';\n// import SizeAddTool from \"./toolbar/SizeAddTool\";\n// import SizeMinusTool from \"./toolbar/SizeMinusTool\";\nimport ColorTool from './toolbar/ColorTool';\nimport HighlightTool from './toolbar/HighlightTool';\nimport BoldTool from './toolbar/BoldTool';\nimport ItalicTool from './toolbar/ItalicTool';\nimport UnderlineTool from './toolbar/UnderlineTool';\nimport StrikeoutTool from './toolbar/StrikeoutTool';\n// import SuperscriptTool from \"./toolbar/SuperscriptTool\";\n// import SubscriptTool from \"./toolbar/SubscriptTool\";\nimport LeftAlignTool from './toolbar/LeftAlignTool';\nimport CenterAlignTool from './toolbar/CenterAlignTool';\nimport RightAlignTool from './toolbar/RightAlignTool';\nimport JustifyTool from './toolbar/JustifyTool';\n// import AlignmentTool from \"./toolbar/AlignmentTool\";\n// import RowMarginTool from \"./toolbar/RowMarginTool\";\nimport ListTool from './toolbar/ListTool';\nimport ImageTool from './toolbar/ImageTool';\n// import HyperlinkTool from \"./toolbar/HyperlinkTool\";\nimport SeparatorTool from './toolbar/SeparatorTool';\nimport InsertElementTool from './toolbar/WatermarkTool';\n// import CodeBlockTool from \"./toolbar/CodeBlockTool\";\nimport PageBreakTool from './toolbar/PageBreakTool';\n// import ControlTool from \"./toolbar/ControlTool\";\n// import CheckboxTool from \"./toolbar/CheckboxTool\";\n// import RadioTool from \"./toolbar/RadioTool\";\n// import LaTeXTool from \"./toolbar/LaTeXTool\";\n// import DateTool from \"./toolbar/DateTool\";\n// import BlockTool from \"./toolbar/BlockTool\";\n// import SearchTool from \"./toolbar/SearchTool\";\n// import PrintTool from \"./toolbar/PrintTool\";\n\nexport default function EditorToolbar() {\n return (\n <div className=\"menu\" editor-component=\"menu\">\n {/* Undo/Redo */}\n <div className=\"menu-item\">\n <UndoTool />\n <RedoTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Column Layout */}\n <div className=\"menu-item\">\n <ColumnTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Break */}\n <div className=\"menu-item\">\n <PageBreakTool />\n <SeparatorTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Table */}\n <div className=\"menu-item\">\n <TableTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Typography */}\n <div className=\"menu-item\">\n <TitleTool />\n <FontTool />\n <FontSizeTool />\n <LineHeightTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Text Formatting */}\n <div className=\"menu-item\">\n <ColorTool />\n <HighlightTool />\n <BoldTool />\n <ItalicTool />\n <UnderlineTool />\n <StrikeoutTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Text Alignment */}\n <div className=\"menu-item\">\n <LeftAlignTool />\n <CenterAlignTool />\n <RightAlignTool />\n <JustifyTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Lists */}\n <div className=\"menu-item\">\n <ListTool />\n </div>\n <div className=\"menu-divider\"></div>\n\n {/* Media */}\n <div className=\"menu-item\">\n <ImageTool />\n </div>\n <div className=\"menu-item\">\n <InsertElementTool />\n </div>\n </div>\n );\n}\n","import { useFooter } from '../FooterContext';\n\nexport default function CatalogToggleTool() {\n const { handleToggleCatalogAction } = useFooter();\n return (\n <div\n className=\"catalog-mode\"\n title=\"Catalog\"\n onClick={handleToggleCatalogAction}\n >\n <i></i>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function PageModeTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n\n const handlePageMode = (mode: string) => {\n editorRef.current?.command.executePageMode(mode);\n setVisible(false);\n };\n\n return (\n <div className=\"page-mode\" onClick={() => setVisible(!visible)}>\n <i title=\"Page Mode\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n <li onClick={() => handlePageMode('paging')} className=\"active\">\n Paging\n </li>\n <li onClick={() => handlePageMode('continuity')}>Continuity</li>\n </ul>\n </div>\n </div>\n );\n}\n","import { useFooter } from '../FooterContext';\n\nexport default function FooterStatus() {\n const { pageNoList, pageNo, pageSize, wordCount, rowNo, colNo } = useFooter();\n return (\n <>\n <span>\n Visible Pages: <span className=\"page-no-list\">{pageNoList}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Pages: <span className=\"page-no\">{pageNo}</span>/\n <span className=\"page-size\">{pageSize}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Words: <span className=\"word-count\">{wordCount}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Row: <span className=\"row-no\">{rowNo}</span>\n </span>\n <span className=\"footer-divider\" />\n <span>\n Column: <span className=\"col-no\">{colNo}</span>\n </span>\n </>\n );\n}\n","import { useState, useRef } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst MODE_LIST = [\n { mode: 'edit', name: 'Edit Mode' },\n { mode: 'clean', name: 'Clean Mode' },\n { mode: 'readonly', name: 'Read-only Mode' },\n { mode: 'form', name: 'Form Mode' },\n { mode: 'print', name: 'Print Mode' },\n { mode: 'design', name: 'Design Mode' },\n { mode: 'graffiti', name: 'Graffiti Mode' }\n];\n\nexport default function EditorModeTool() {\n const { editorRef } = useEditor();\n const [editorMode, setEditorMode] = useState('Edit Mode');\n const modeIndexRef = useRef(0);\n\n const handleModeChange = () => {\n modeIndexRef.current =\n modeIndexRef.current === MODE_LIST.length - 1\n ? 0\n : modeIndexRef.current + 1;\n const { name, mode } = MODE_LIST[modeIndexRef.current];\n setEditorMode(name);\n editorRef.current?.command.executeMode(mode);\n const isReadonly = mode === 'readonly';\n const enableMenuList = ['search', 'print'];\n document.querySelectorAll<HTMLDivElement>('.menu-item>div').forEach(dom => {\n const menu = dom.dataset.menu;\n if (isReadonly && (!menu || !enableMenuList.includes(menu))) {\n dom.classList.add('disable');\n } else {\n dom.classList.remove('disable');\n }\n });\n };\n\n return (\n <div\n className=\"editor-mode\"\n title=\"Click to change mode\"\n onClick={handleModeChange}\n >\n {editorMode}\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\n\nexport default function PageScaleMinusTool() {\n const { editorRef } = useEditor();\n return (\n <div\n className=\"page-scale-minus\"\n title=\"Zoom Out (Ctrl+-)\"\n onClick={() => editorRef.current?.command.executePageScaleMinus()}\n >\n <i></i>\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\nimport { useFooter } from '../FooterContext';\n\nexport default function PageScalePercentageTool() {\n const { editorRef } = useEditor();\n const { pageScale } = useFooter();\n return (\n <span\n className=\"page-scale-percentage\"\n title=\"Zoom Level\"\n onClick={() => editorRef.current?.command.executePageScaleRecovery()}\n >\n {pageScale}%\n </span>\n );\n}\n","import { useEditor } from '../EditorContext';\n\nexport default function PageScaleAddTool() {\n const { editorRef } = useEditor();\n return (\n <div\n className=\"page-scale-add\"\n title=\"Zoom In (Ctrl+=)\"\n onClick={() => editorRef.current?.command.executePageScaleAdd()}\n >\n <i></i>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst SIZES = [\n { label: 'A4', width: 794, height: 1123, active: true },\n { label: 'A2', width: 1593, height: 2251 },\n { label: 'A3', width: 1125, height: 1593 },\n { label: 'A5', width: 565, height: 796 }\n];\n\nexport default function PaperSizeTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n\n const handlePaperSize = (width: number, height: number) => {\n editorRef.current?.command.executePaperSize(width, height);\n setVisible(false);\n };\n\n return (\n <div className=\"paper-size\" onClick={() => setVisible(!visible)}>\n <i title=\"Paper Type\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n {SIZES.map(({ label, width, height, active }) => (\n <li\n key={label}\n onClick={() => handlePaperSize(width, height)}\n className={active ? 'active' : ''}\n >\n {label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useEditor } from '../EditorContext';\n\nexport default function PaperDirectionTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n\n const handlePaperDirection = (direction: string) => {\n editorRef.current?.command.executePaperDirection(direction);\n setVisible(false);\n };\n\n return (\n <div className=\"paper-direction\" onClick={() => setVisible(!visible)}>\n <i title=\"Paper Direction\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n <li\n onClick={() => handlePaperDirection('vertical')}\n className=\"active\"\n >\n Portrait\n </li>\n <li onClick={() => handlePaperDirection('horizontal')}>Landscape</li>\n </ul>\n </div>\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\nimport { pxToCm, cmToPx } from '@windoc/core';\n\nexport default function PaperMarginTool() {\n const { editorRef } = useEditor();\n\n const handlePaperMargin = async () => {\n if (!editorRef.current) return;\n const { Dialog } = await import('@windoc/core');\n const [topMargin, rightMargin, bottomMargin, leftMargin] =\n editorRef.current.command.getPaperMargin();\n new Dialog({\n title: 'Page Margins',\n data: [\n {\n type: 'text',\n label: 'Top Margin (cm)',\n name: 'top',\n required: true,\n value: `${pxToCm(topMargin)}`,\n placeholder: 'e.g. 2.54'\n },\n {\n type: 'text',\n label: 'Bottom Margin (cm)',\n name: 'bottom',\n required: true,\n value: `${pxToCm(bottomMargin)}`,\n placeholder: 'e.g. 2.54'\n },\n {\n type: 'text',\n label: 'Left Margin (cm)',\n name: 'left',\n required: true,\n value: `${pxToCm(leftMargin)}`,\n placeholder: 'e.g. 2.54'\n },\n {\n type: 'text',\n label: 'Right Margin (cm)',\n name: 'right',\n required: true,\n value: `${pxToCm(rightMargin)}`,\n placeholder: 'e.g. 2.54'\n }\n ],\n onConfirm: (payload: Array<{ name: string; value: string }>) => {\n const top = payload.find(p => p.name === 'top')?.value;\n if (!top) return;\n const bottom = payload.find(p => p.name === 'bottom')?.value;\n if (!bottom) return;\n const left = payload.find(p => p.name === 'left')?.value;\n if (!left) return;\n const right = payload.find(p => p.name === 'right')?.value;\n if (!right) return;\n editorRef.current?.command.executeSetPaperMargin([\n cmToPx(Number(top)),\n cmToPx(Number(right)),\n cmToPx(Number(bottom)),\n cmToPx(Number(left))\n ]);\n }\n });\n };\n\n return (\n <div\n className=\"paper-margin\"\n title=\"Page Margins\"\n onClick={handlePaperMargin}\n >\n <i></i>\n </div>\n );\n}\n","export default function FullscreenTool() {\n const handleFullscreen = () => {\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else {\n document.exitFullscreen();\n }\n };\n\n return (\n <div className=\"fullscreen\" title=\"Fullscreen\" onClick={handleFullscreen}>\n <i></i>\n </div>\n );\n}\n","import { useEditor } from '../EditorContext';\n\nexport default function EditorOptionTool() {\n const { editorRef } = useEditor();\n\n const handleEditorOption = async () => {\n if (!editorRef.current) return;\n const { Dialog } = await import('@windoc/core');\n const options = editorRef.current.command.getOptions();\n new Dialog({\n title: 'Editor Configuration',\n data: [\n {\n type: 'textarea',\n name: 'option',\n width: 350,\n height: 300,\n required: true,\n value: JSON.stringify(options, null, 2),\n placeholder: 'Please enter editor configuration'\n }\n ],\n onConfirm: (payload: Array<{ name: string; value: string }>) => {\n const newOptionValue = payload.find(p => p.name === 'option')?.value;\n if (!newOptionValue) return;\n const newOption = JSON.parse(newOptionValue);\n editorRef.current?.command.executeUpdateOptions(newOption);\n }\n });\n };\n\n return (\n <div\n className=\"editor-option\"\n title=\"Editor Settings\"\n onClick={handleEditorOption}\n >\n <i></i>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport { useEditor } from '../EditorContext';\n\nconst COLOR_PALETTE = [\n ['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc'],\n ['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff'],\n ['#4a86e8', '#0000ff', '#9900ff', '#ff00ff', '#e6b8af', '#f4cccc']\n];\n\nconst FONTS = [\n { family: 'Arial', label: 'Sans Serif' },\n { family: 'Times New Roman', label: 'Serif' }\n];\n\nexport default function WatermarkFooterTool() {\n const { editorRef } = useEditor();\n const [visible, setVisible] = useState(false);\n const [tab, setTab] = useState<'text' | 'image'>('text');\n const containerRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // Text watermark state\n const [text, setText] = useState('WATERMARK');\n const [font, setFont] = useState('Arial');\n const [color, setColor] = useState('#AEB5C0');\n const [opacity, setOpacity] = useState(30);\n const [rotation, setRotation] = useState(-45);\n const [inFront, setInFront] = useState(false);\n\n // Image watermark state\n const [imageData, setImageData] = useState('');\n const [imgWidth, setImgWidth] = useState(200);\n const [imgHeight, setImgHeight] = useState(200);\n\n // Click outside to close\n useEffect(() => {\n if (!visible) return;\n const handler = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setVisible(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [visible]);\n\n // Smart positioning\n useEffect(() => {\n if (!visible || !panelRef.current) return;\n const el = panelRef.current;\n el.style.right = '';\n el.style.left = '';\n const rect = el.getBoundingClientRect();\n if (rect.right > window.innerWidth) {\n el.style.left = 'unset';\n el.style.right = '0';\n }\n if (rect.left < 0) {\n el.style.left = `${-rect.left + 4}px`;\n }\n }, [visible]);\n\n const handleFileUpload = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n setImageData(result);\n const img = new Image();\n img.onload = () => {\n const maxDim = 300;\n let w = img.naturalWidth;\n let h = img.naturalHeight;\n if (w > maxDim || h > maxDim) {\n const ratio = Math.min(maxDim / w, maxDim / h);\n w = Math.round(w * ratio);\n h = Math.round(h * ratio);\n }\n setImgWidth(w);\n setImgHeight(h);\n };\n img.src = result;\n };\n reader.readAsDataURL(file);\n },\n []\n );\n\n const handleApply = () => {\n if (!editorRef.current) return;\n if (tab === 'text') {\n if (!text.trim()) return;\n editorRef.current.command.executeAddWatermark({\n data: text,\n type: 'text',\n color,\n opacity: opacity / 100,\n size: 120,\n font,\n rotation,\n inFront\n });\n } else {\n if (!imageData) return;\n editorRef.current.command.executeAddWatermark({\n data: imageData,\n type: 'image',\n opacity: opacity / 100,\n rotation,\n inFront,\n width: imgWidth,\n height: imgHeight\n });\n }\n setVisible(false);\n };\n\n const handleDelete = () => {\n editorRef.current?.command.executeDeleteWatermark();\n setVisible(false);\n };\n\n return (\n <div\n className=\"watermark-footer\"\n ref={containerRef}\n onClick={() => setVisible(!visible)}\n >\n <i title=\"Watermark\"></i>\n {visible && (\n <>\n <div\n className=\"wm-panel-mask\"\n onClick={e => {\n e.stopPropagation();\n setVisible(false);\n }}\n />\n <div\n className=\"watermark-footer-panel\"\n ref={panelRef}\n onClick={e => e.stopPropagation()}\n >\n {/* Title */}\n <div className=\"wm-panel-title\">\n <span>Watermark</span>\n <i onClick={() => setVisible(false)} />\n </div>\n\n {/* Tabs */}\n <div className=\"wm-panel-tabs\">\n <button\n className={`wm-panel-tab ${tab === 'text' ? 'active' : ''}`}\n onClick={() => setTab('text')}\n >\n Text\n </button>\n <button\n className={`wm-panel-tab ${tab === 'image' ? 'active' : ''}`}\n onClick={() => setTab('image')}\n >\n Image\n </button>\n </div>\n\n <div className=\"wm-panel-body\">\n {tab === 'text' ? (\n <>\n <div className=\"wm-panel-field\">\n <label>Text</label>\n <input\n type=\"text\"\n value={text}\n onChange={e => setText(e.target.value)}\n placeholder=\"Watermark text\"\n />\n </div>\n <div className=\"wm-panel-field\">\n <label>Font</label>\n <select\n value={font}\n onChange={e => setFont(e.target.value)}\n >\n {FONTS.map(f => (\n <option key={f.family} value={f.family}>\n {f.label}\n </option>\n ))}\n </select>\n </div>\n <div className=\"wm-panel-field\">\n <label>Color</label>\n <div className=\"wm-panel-colors\">\n {COLOR_PALETTE.flat().map(c => (\n <div\n key={c}\n className={`wm-panel-color ${color.toLowerCase() === c.toLowerCase() ? 'active' : ''}`}\n style={{ backgroundColor: c }}\n onClick={() => setColor(c)}\n />\n ))}\n </div>\n </div>\n </>\n ) : (\n <>\n <div className=\"wm-panel-field\">\n <label>Image</label>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px'\n }}\n >\n <button\n className=\"wm-panel-upload\"\n onClick={() => fileInputRef.current?.click()}\n >\n Choose File\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n style={{ display: 'none' }}\n onChange={handleFileUpload}\n />\n {imageData && (\n <span style={{ fontSize: '11px', color: '#667085' }}>\n Loaded\n </span>\n )}\n </div>\n </div>\n {imageData && (\n <div className=\"wm-panel-field\">\n <div className=\"wm-panel-preview\">\n <img\n src={imageData}\n alt=\"preview\"\n style={{\n maxWidth: '100%',\n maxHeight: '48px',\n objectFit: 'contain'\n }}\n />\n </div>\n </div>\n )}\n <div className=\"wm-panel-field-row\">\n <div className=\"wm-panel-field wm-panel-field-half\">\n <label>W</label>\n <input\n type=\"number\"\n value={imgWidth}\n min={10}\n onChange={e => setImgWidth(Number(e.target.value))}\n />\n </div>\n <div className=\"wm-panel-field wm-panel-field-half\">\n <label>H</label>\n <input\n type=\"number\"\n value={imgHeight}\n min={10}\n onChange={e => setImgHeight(Number(e.target.value))}\n />\n </div>\n </div>\n </>\n )}\n\n {/* Shared */}\n <div className=\"wm-panel-field\">\n <label>\n Opacity <span className=\"wm-panel-value\">{opacity}%</span>\n </label>\n <input\n type=\"range\"\n min={0}\n max={100}\n value={opacity}\n onChange={e => setOpacity(Number(e.target.value))}\n className=\"wm-panel-slider\"\n />\n </div>\n <div className=\"wm-panel-field\">\n <label>\n Rotation <span className=\"wm-panel-value\">{rotation}°</span>\n </label>\n <input\n type=\"range\"\n min={-90}\n max={90}\n value={rotation}\n onChange={e => setRotation(Number(e.target.value))}\n className=\"wm-panel-slider\"\n />\n </div>\n <div className=\"wm-panel-field\">\n <label>Position</label>\n <div className=\"wm-panel-toggle\">\n <button\n className={!inFront ? 'active' : ''}\n onClick={() => setInFront(false)}\n >\n Behind\n </button>\n <button\n className={inFront ? 'active' : ''}\n onClick={() => setInFront(true)}\n >\n In Front\n </button>\n </div>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"wm-panel-actions\">\n <button className=\"wm-panel-btn-delete\" onClick={handleDelete}>\n Remove\n </button>\n <button className=\"wm-panel-btn-apply\" onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n","import CatalogToggleTool from './footer/CatalogToggleTool';\nimport PageModeTool from './footer/PageModeTool';\nimport FooterStatus from './footer/FooterStatus';\nimport EditorModeTool from './footer/EditorModeTool';\nimport PageScaleMinusTool from './footer/PageScaleMinusTool';\nimport PageScalePercentageTool from './footer/PageScalePercentageTool';\nimport PageScaleAddTool from './footer/PageScaleAddTool';\nimport PaperSizeTool from './footer/PaperSizeTool';\nimport PaperDirectionTool from './footer/PaperDirectionTool';\nimport PaperMarginTool from './footer/PaperMarginTool';\nimport FullscreenTool from './footer/FullscreenTool';\nimport EditorOptionTool from './footer/EditorOptionTool';\nimport WatermarkFooterTool from './footer/WatermarkFooterTool';\n\nexport default function EditorFooter() {\n return (\n <div className=\"footer\" editor-component=\"footer\">\n <div>\n <CatalogToggleTool />\n <PageModeTool />\n <FooterStatus />\n </div>\n <EditorModeTool />\n <div>\n <PageScaleMinusTool />\n <PageScalePercentageTool />\n <PageScaleAddTool />\n <PaperSizeTool />\n <PaperDirectionTool />\n <PaperMarginTool />\n <WatermarkFooterTool />\n <FullscreenTool />\n <EditorOptionTool />\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","_","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","UnderlineIcon","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ImageIcon","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","SIZES","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","COLOR_PALETTE","FONTS","import_jsx_runtime","import_jsx_runtime","count"]}