@windoc/react 0.2.7 → 0.2.8

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 { EditorInstance, RangeStylePayload, ICatalogItem, IComment } 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}\n\nexport function Editor({\n defaultValue,\n options: userOptions,\n onChange,\n onReady,\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 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 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\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 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 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: { isReadonly: boolean; editorTextFocus: boolean }) => {\n return !payload.isReadonly && payload.editorTextFocus\n },\n callback: (command: { executeInsertElementList: (elements: object[]) => void }) => {\n new Signature({\n onConfirm(payload: { value: string; width: number; height: number } | null) {\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\n const closeDropdowns = (evt: MouseEvent) => {\n const visibleDom = document.querySelector('.visible')\n if (!visibleDom || visibleDom.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 instance?.destroy()\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 value={{\n pageNoList, pageNo, pageSize, wordCount, rowNo, colNo, pageScale,\n setPageNoList, setPageNo, setPageSize, setWordCount, setRowNo, setColNo, setPageScale,\n handleToggleCatalogAction\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={() => { if (!isDisabled) editorRef.current?.command.executeUndo() }}\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={() => { if (!isDisabled) editorRef.current?.command.executeRedo() }}\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 className=\"menu-item__column\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\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 (containerRef.current && !containerRef.current.contains(e.target as Node)) {\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 size={16} onClick={() => setVisible(!visible)} style={{ cursor: 'pointer' }} />\n {visible && (\n <div className=\"table-dropdown\">\n <div className=\"table-dropdown-header\">\n <span>{hoverRow > 0 ? `${hoverRow} × ${hoverCol}` : 'Insert Table'}</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 = 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 className=\"menu-item__title\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Toggle Heading\">{activeLabel}</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 >{label}</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: 'Sans Serif' },\n { family: 'Times New Roman', label: 'Serif' },\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 = 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 className=\"menu-item__font\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Font\">{activeLabel}</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 >{label}</li>\n ))}\n </ul>\n </div>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { useEditor } from '../EditorContext'\n\nconst SIZES = [56, 48, 34, 32, 29, 24, 21, 20, 18, 16, 14, 12, 10, 8]\n\nexport default function FontSizeTool() {\n const { editorRef, rangeStyle } = useEditor()\n const optionsRef = useRef<HTMLDivElement>(null)\n\n const activeSize = rangeStyle?.size ?? 16\n\n const handleSize = (size: number) => {\n editorRef.current?.command.executeSize(size)\n }\n\n return (\n <div className=\"menu-item__size\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Font Size\">{activeSize}</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 >{size}</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) ? `${activeMargin}.0` : String(activeMargin)\n\n const handleLineHeight = (value: string) => {\n editorRef.current?.command.executeRowMargin(Number(value))\n }\n\n return (\n <div className=\"menu-item__line-height\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Line Height\">{activeLabel}</span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {LINE_HEIGHTS.map(h => (\n <li\n key={h}\n className={String(activeMargin) === h || activeLabel === h ? 'active' : ''}\n onClick={() => handleLineHeight(h)}\n >{h}</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 ['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff'],\n ['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff'],\n ['#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc'],\n ['#dd7e6b', '#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#a4c2f4', '#9fc5e8', '#b4a7d6', '#d5a6bd'],\n ['#cc4125', '#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6d9eeb', '#6fa8dc', '#8e7cc3', '#c27ba0'],\n ['#a61c00', '#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3c78d8', '#3d85c6', '#674ea7', '#a64d79'],\n ['#85200c', '#990000', '#b45f06', '#bf9000', '#38761d', '#134f5c', '#1155cc', '#0b5394', '#351c75', '#741b47'],\n ['#5b0f00', '#660000', '#783f04', '#7f6000', '#274e13', '#0c343d', '#1c4587', '#073763', '#20124d', '#4c1130'],\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 className=\"menu-item__color\" title=\"Font Color\" onClick={() => dropdownRef.current?.classList.toggle('visible')}>\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 ['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff'],\n ['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff'],\n ['#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc'],\n ['#dd7e6b', '#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#a4c2f4', '#9fc5e8', '#b4a7d6', '#d5a6bd'],\n ['#cc4125', '#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6d9eeb', '#6fa8dc', '#8e7cc3', '#c27ba0'],\n ['#a61c00', '#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3c78d8', '#3d85c6', '#674ea7', '#a64d79'],\n ['#85200c', '#990000', '#b45f06', '#bf9000', '#38761d', '#134f5c', '#1155cc', '#0b5394', '#351c75', '#741b47'],\n ['#5b0f00', '#660000', '#783f04', '#7f6000', '#274e13', '#0c343d', '#1c4587', '#073763', '#20124d', '#4c1130'],\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 className=\"menu-item__highlight\" title=\"Highlight\" onClick={() => dropdownRef.current?.classList.toggle('visible')}>\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 className={`menu-item__bold ${isActive ? 'active' : ''}`} title={`Bold(${isApple ? '⌘' : 'Ctrl'}+B)`} onClick={() => editorRef.current?.command.executeBold()}>\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 className={`menu-item__italic ${isActive ? 'active' : ''}`} title={`Italic(${isApple ? '⌘' : 'Ctrl'}+I)`} onClick={() => editorRef.current?.command.executeItalic()}>\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 className={`menu-item__underline ${isActive ? 'active' : ''}`} title={`Underline(${isApple ? '⌘' : 'Ctrl'}+U)`}>\n <UnderlineIcon size={16} onClick={() => editorRef.current?.command.executeUnderline()} style={{ cursor: 'pointer' }} />\n <span className=\"select\" onClick={() => optionsRef.current?.classList.toggle('visible')}></span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {STYLES.map(style => (\n <li key={style} data-decoration-style={style} onClick={() => {\n editorRef.current?.command.executeUnderline({ style })\n }}><i></i></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 className={`menu-item__strikeout ${isActive ? 'active' : ''}`} title=\"Strikethrough\" onClick={() => editorRef.current?.command.executeStrikeout()}>\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 className={`menu-item__left ${isActive ? 'active' : ''}`} title={`Left align(${isApple ? '⌘' : 'Ctrl'}+L)`} onClick={() => editorRef.current?.command.executeRowFlex('left')}>\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 className={`menu-item__center ${isActive ? 'active' : ''}`} title={`Center align(${isApple ? '⌘' : 'Ctrl'}+E)`} onClick={() => editorRef.current?.command.executeRowFlex('center')}>\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 className={`menu-item__right ${isActive ? 'active' : ''}`} title={`Right align(${isApple ? '⌘' : 'Ctrl'}+R)`} onClick={() => editorRef.current?.command.executeRowFlex('right')}>\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 = rangeStyle?.rowFlex === 'justify' || rangeStyle?.rowFlex === 'alignment'\n return (\n <div className={`menu-item__justify ${isActive ? 'active' : ''}`} title={`Distribute(${isApple ? '⌘' : 'Ctrl'}+Shift+J)`} onClick={() => editorRef.current?.command.executeRowFlex('justify')}>\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({ option, onClick }: { option: PresetOption; onClick: () => void }) {\n return (\n <div\n onClick={onClick}\n className=\"list-preset-cell\"\n title={option.label}\n >\n {option.preview.map((item, i) => (\n <div key={i} className=\"list-preset-line\" style={{ paddingLeft: `${i * 10}px` }}>\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 handleList = (type: string | null, style?: string) => {\n editorRef.current?.command.executeList(type, style)\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 }\n\n const handleIndent = (e: React.MouseEvent) => {\n e.stopPropagation()\n editorRef.current?.command.executeListIndent()\n }\n\n const handleOutdent = (e: React.MouseEvent) => {\n e.stopPropagation()\n editorRef.current?.command.executeListOutdent()\n }\n\n return (\n <div className={`menu-item__list ${isActive ? 'active' : ''}`} title={`List(${isApple ? '⌘' : 'Ctrl'}+Shift+U)`}>\n <List size={16} onClick={() => optionsRef.current?.classList.toggle('visible')} style={{ cursor: 'pointer' }} />\n <div className=\"options\" ref={optionsRef}>\n <div style={{ padding: '8px', width: '320px' }}>\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 onClick={handleIndent} className=\"list-quick-btn\" title=\"Indent (Tab)\">\n <Indent size={14} />\n </button>\n <button onClick={handleOutdent} className=\"list-quick-btn\" title=\"Outdent (Shift+Tab)\">\n <Outdent size={14} />\n </button>\n </div>\n\n {/* Ordered List Presets */}\n <div style={{ marginBottom: '8px' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', fontSize: '11px', color: '#667085', marginBottom: '6px', fontWeight: 500 }}>\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 style={{ display: 'flex', alignItems: 'center', gap: '4px', fontSize: '11px', color: '#667085', marginBottom: '6px', fontWeight: 500 }}>\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 className=\"menu-item__image\" onClick={() => document.getElementById('image')?.click()}>\n <ImageIcon size={16} />\n <input type=\"file\" id=\"image\" accept=\".png, .jpg, .jpeg, .svg, .gif\" onChange={handleImageUpload} />\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 = (dashArray: number[]) => {\n editorRef.current?.command.executeSeparator(dashArray, { lineWidth: selectedWidth })\n }\n\n return (\n <div className=\"menu-item__separator\" title=\"Separator\">\n <Minus size={16} onClick={() => optionsRef.current?.classList.toggle('visible')} style={{ cursor: 'pointer' }} />\n <div className=\"options\" ref={optionsRef}>\n <div style={{ padding: '8px 10px 10px', width: '200px' }}>\n <ul style={{ margin: 0, padding: 0, listStyle: 'none' }}>\n {DASH_STYLES.map(({ label, dashArray }) => (\n <li\n key={label}\n onClick={() => handleSeparator(dashArray)}\n style={{ display: 'flex', alignItems: 'center', gap: '10px', padding: '5px 6px', cursor: 'pointer', borderRadius: '4px' }}\n >\n <svg style={{ flex: 1, minWidth: 0, overflow: 'hidden' }} height=\"8\">\n <line\n x1=\"0\" y1=\"4\" x2=\"100%\" y2=\"4\"\n stroke={lineColor}\n strokeWidth={selectedWidth}\n strokeDasharray={dashArray.length ? dashArray.join(',') : 'none'}\n />\n </svg>\n <span style={{ fontSize: '11px', color: '#475467', whiteSpace: 'nowrap', flexShrink: 0 }}>{label}</span>\n </li>\n ))}\n </ul>\n\n <div style={{ borderTop: '1px solid #e4e7ec', marginTop: '8px', paddingTop: '8px' }}>\n <div style={{ fontSize: '11px', color: '#667085', marginBottom: '6px', fontWeight: 500 }}>Line Width</div>\n <div style={{ display: 'flex', gap: '4px' }}>\n {LINE_WIDTHS.map(({ label, value }) => (\n <button\n key={value}\n onClick={(e) => { e.stopPropagation(); setSelectedWidth(value) }}\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 </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 className=\"menu-item__insert-element\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\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 className=\"catalog-mode\" title=\"Catalog\" onClick={handleToggleCatalogAction}>\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\">Paging</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>Visible Pages: <span className=\"page-no-list\">{pageNoList}</span></span>\n <span className=\"footer-divider\" />\n <span>Pages: <span className=\"page-no\">{pageNo}</span>/<span className=\"page-size\">{pageSize}</span></span>\n <span className=\"footer-divider\" />\n <span>Words: <span className=\"word-count\">{wordCount}</span></span>\n <span className=\"footer-divider\" />\n <span>Row: <span className=\"row-no\">{rowNo}</span></span>\n <span className=\"footer-divider\" />\n <span>Column: <span className=\"col-no\">{colNo}</span></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 = modeIndexRef.current === MODE_LIST.length - 1 ? 0 : 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 className=\"editor-mode\" title=\"Click to change mode\" onClick={handleModeChange}>{editorMode}</div>\n )\n}\n","import { useEditor } from '../EditorContext'\n\nexport default function PageScaleMinusTool() {\n const { editorRef } = useEditor()\n return (\n <div className=\"page-scale-minus\" title=\"Zoom Out (Ctrl+-)\" onClick={() => editorRef.current?.command.executePageScaleMinus()}>\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 className=\"page-scale-percentage\" title=\"Zoom Level\" onClick={() => editorRef.current?.command.executePageScaleRecovery()}>\n {pageScale}%\n </span>\n )\n}\n","import { useEditor } from '../EditorContext'\n\nexport default function PageScaleAddTool() {\n const { editorRef } = useEditor()\n return (\n <div className=\"page-scale-add\" title=\"Zoom In (Ctrl+=)\" onClick={() => editorRef.current?.command.executePageScaleAdd()}>\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 key={label} onClick={() => handlePaperSize(width, height)} className={active ? 'active' : ''}>{label}</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 onClick={() => handlePaperDirection('vertical')} className=\"active\">Portrait</li>\n <li onClick={() => handlePaperDirection('horizontal')}>Landscape</li>\n </ul>\n </div>\n </div>\n )\n}\n","import { useEditor } from '../EditorContext'\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] = editorRef.current.command.getPaperMargin()\n new Dialog({\n title: 'Page Margins',\n data: [\n { type: 'text', label: 'Top Margin', name: 'top', required: true, value: `${topMargin}`, placeholder: 'Please enter top margin' },\n { type: 'text', label: 'Bottom Margin', name: 'bottom', required: true, value: `${bottomMargin}`, placeholder: 'Please enter bottom margin' },\n { type: 'text', label: 'Left Margin', name: 'left', required: true, value: `${leftMargin}`, placeholder: 'Please enter left margin' },\n { type: 'text', label: 'Right Margin', name: 'right', required: true, value: `${rightMargin}`, placeholder: 'Please enter right margin' }\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 Number(top), Number(right), Number(bottom), Number(left)\n ])\n }\n })\n }\n\n return (\n <div className=\"paper-margin\" title=\"Page Margins\" onClick={handlePaperMargin}>\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 className=\"editor-option\" title=\"Editor Settings\" onClick={handleEditorOption}>\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 (containerRef.current && !containerRef.current.contains(e.target as Node)) {\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((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 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 className=\"watermark-footer\" ref={containerRef} onClick={() => setVisible(!visible)}>\n <i title=\"Watermark\"></i>\n {visible && (\n <div className=\"watermark-footer-panel\" ref={panelRef} onClick={(e) => e.stopPropagation()}>\n {/* Tabs */}\n <div className=\"wm-panel-tabs\">\n <button className={`wm-panel-tab ${tab === 'text' ? 'active' : ''}`} onClick={() => setTab('text')}>\n Text\n </button>\n <button className={`wm-panel-tab ${tab === 'image' ? 'active' : ''}`} onClick={() => setTab('image')}>\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 type=\"text\" value={text} onChange={(e) => setText(e.target.value)} placeholder=\"Watermark text\" />\n </div>\n <div className=\"wm-panel-field\">\n <label>Font</label>\n <select value={font} onChange={(e) => setFont(e.target.value)}>\n {FONTS.map((f) => (\n <option key={f.family} value={f.family}>{f.label}</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 style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button className=\"wm-panel-upload\" onClick={() => fileInputRef.current?.click()}>Choose File</button>\n <input ref={fileInputRef} type=\"file\" accept=\"image/*\" style={{ display: 'none' }} onChange={handleFileUpload} />\n {imageData && <span style={{ fontSize: '11px', color: '#667085' }}>Loaded</span>}\n </div>\n </div>\n {imageData && (\n <div className=\"wm-panel-field\">\n <div className=\"wm-panel-preview\">\n <img src={imageData} alt=\"preview\" style={{ maxWidth: '100%', maxHeight: '48px', objectFit: 'contain' }} />\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 type=\"number\" value={imgWidth} min={10} onChange={(e) => setImgWidth(Number(e.target.value))} />\n </div>\n <div className=\"wm-panel-field wm-panel-field-half\">\n <label>H</label>\n <input type=\"number\" value={imgHeight} min={10} onChange={(e) => setImgHeight(Number(e.target.value))} />\n </div>\n </div>\n </>\n )}\n\n {/* Shared */}\n <div className=\"wm-panel-field\">\n <label>Opacity <span className=\"wm-panel-value\">{opacity}%</span></label>\n <input type=\"range\" min={0} max={100} value={opacity} onChange={(e) => setOpacity(Number(e.target.value))} className=\"wm-panel-slider\" />\n </div>\n <div className=\"wm-panel-field\">\n <label>Rotation <span className=\"wm-panel-value\">{rotation}°</span></label>\n <input type=\"range\" min={-90} max={90} value={rotation} onChange={(e) => setRotation(Number(e.target.value))} className=\"wm-panel-slider\" />\n </div>\n <div className=\"wm-panel-field\">\n <label>Position</label>\n <div className=\"wm-panel-toggle\">\n <button className={!inFront ? 'active' : ''} onClick={() => setInFront(false)}>Behind</button>\n <button className={inFront ? 'active' : ''} onClick={() => setInFront(true)}>In Front</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}>Remove</button>\n <button className=\"wm-panel-btn-apply\" onClick={handleApply}>Apply</button>\n </div>\n </div>\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 { EditorInstance, RangeStylePayload, ICatalogItem, IComment } 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}\n\nexport function Editor({\n defaultValue,\n options: userOptions,\n onChange,\n onReady,\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 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 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\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 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 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: { isReadonly: boolean; editorTextFocus: boolean }) => {\n return !payload.isReadonly && payload.editorTextFocus\n },\n callback: (command: { executeInsertElementList: (elements: object[]) => void }) => {\n new Signature({\n onConfirm(payload: { value: string; width: number; height: number } | null) {\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\n const 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 instance?.destroy()\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 value={{\n pageNoList, pageNo, pageSize, wordCount, rowNo, colNo, pageScale,\n setPageNoList, setPageNo, setPageSize, setWordCount, setRowNo, setColNo, setPageScale,\n handleToggleCatalogAction\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={() => { if (!isDisabled) editorRef.current?.command.executeUndo() }}\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={() => { if (!isDisabled) editorRef.current?.command.executeRedo() }}\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 className=\"menu-item__column\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\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 (containerRef.current && !containerRef.current.contains(e.target as Node)) {\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 size={16} onClick={() => setVisible(!visible)} style={{ cursor: 'pointer' }} />\n {visible && (\n <div className=\"table-dropdown\">\n <div className=\"table-dropdown-header\">\n <span>{hoverRow > 0 ? `${hoverRow} × ${hoverCol}` : 'Insert Table'}</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 = 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 className=\"menu-item__title\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Toggle Heading\">{activeLabel}</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 >{label}</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 = 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 className=\"menu-item__font\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Font\">{activeLabel}</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 >{label}</li>\n ))}\n </ul>\n </div>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { useEditor } from '../EditorContext'\n\nconst SIZES = [56, 48, 34, 32, 29, 24, 21, 20, 18, 16, 14, 12, 10, 8]\n\nexport default function FontSizeTool() {\n const { editorRef, rangeStyle } = useEditor()\n const optionsRef = useRef<HTMLDivElement>(null)\n\n const activeSize = rangeStyle?.size ?? 16\n\n const handleSize = (size: number) => {\n editorRef.current?.command.executeSize(size)\n }\n\n return (\n <div className=\"menu-item__size\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Font Size\">{activeSize}</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 >{size}</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) ? `${activeMargin}.0` : String(activeMargin)\n\n const handleLineHeight = (value: string) => {\n editorRef.current?.command.executeRowMargin(Number(value))\n }\n\n return (\n <div className=\"menu-item__line-height\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\n <span className=\"select\" title=\"Line Height\">{activeLabel}</span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {LINE_HEIGHTS.map(h => (\n <li\n key={h}\n className={String(activeMargin) === h || activeLabel === h ? 'active' : ''}\n onClick={() => handleLineHeight(h)}\n >{h}</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 ['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff'],\n ['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff'],\n ['#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc'],\n ['#dd7e6b', '#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#a4c2f4', '#9fc5e8', '#b4a7d6', '#d5a6bd'],\n ['#cc4125', '#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6d9eeb', '#6fa8dc', '#8e7cc3', '#c27ba0'],\n ['#a61c00', '#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3c78d8', '#3d85c6', '#674ea7', '#a64d79'],\n ['#85200c', '#990000', '#b45f06', '#bf9000', '#38761d', '#134f5c', '#1155cc', '#0b5394', '#351c75', '#741b47'],\n ['#5b0f00', '#660000', '#783f04', '#7f6000', '#274e13', '#0c343d', '#1c4587', '#073763', '#20124d', '#4c1130'],\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 className=\"menu-item__color\" title=\"Font Color\" onClick={() => dropdownRef.current?.classList.toggle('visible')}>\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 ['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff'],\n ['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff'],\n ['#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc'],\n ['#dd7e6b', '#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#a4c2f4', '#9fc5e8', '#b4a7d6', '#d5a6bd'],\n ['#cc4125', '#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6d9eeb', '#6fa8dc', '#8e7cc3', '#c27ba0'],\n ['#a61c00', '#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3c78d8', '#3d85c6', '#674ea7', '#a64d79'],\n ['#85200c', '#990000', '#b45f06', '#bf9000', '#38761d', '#134f5c', '#1155cc', '#0b5394', '#351c75', '#741b47'],\n ['#5b0f00', '#660000', '#783f04', '#7f6000', '#274e13', '#0c343d', '#1c4587', '#073763', '#20124d', '#4c1130'],\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 className=\"menu-item__highlight\" title=\"Highlight\" onClick={() => dropdownRef.current?.classList.toggle('visible')}>\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 className={`menu-item__bold ${isActive ? 'active' : ''}`} title={`Bold(${isApple ? '⌘' : 'Ctrl'}+B)`} onClick={() => editorRef.current?.command.executeBold()}>\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 className={`menu-item__italic ${isActive ? 'active' : ''}`} title={`Italic(${isApple ? '⌘' : 'Ctrl'}+I)`} onClick={() => editorRef.current?.command.executeItalic()}>\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 className={`menu-item__underline ${isActive ? 'active' : ''}`} title={`Underline(${isApple ? '⌘' : 'Ctrl'}+U)`}>\n <UnderlineIcon size={16} onClick={() => editorRef.current?.command.executeUnderline()} style={{ cursor: 'pointer' }} />\n <span className=\"select\" onClick={() => optionsRef.current?.classList.toggle('visible')}></span>\n <div className=\"options\" ref={optionsRef}>\n <ul>\n {STYLES.map(style => (\n <li key={style} data-decoration-style={style} onClick={() => {\n editorRef.current?.command.executeUnderline({ style })\n }}><i></i></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 className={`menu-item__strikeout ${isActive ? 'active' : ''}`} title=\"Strikethrough\" onClick={() => editorRef.current?.command.executeStrikeout()}>\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 className={`menu-item__left ${isActive ? 'active' : ''}`} title={`Left align(${isApple ? '⌘' : 'Ctrl'}+L)`} onClick={() => editorRef.current?.command.executeRowFlex('left')}>\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 className={`menu-item__center ${isActive ? 'active' : ''}`} title={`Center align(${isApple ? '⌘' : 'Ctrl'}+E)`} onClick={() => editorRef.current?.command.executeRowFlex('center')}>\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 className={`menu-item__right ${isActive ? 'active' : ''}`} title={`Right align(${isApple ? '⌘' : 'Ctrl'}+R)`} onClick={() => editorRef.current?.command.executeRowFlex('right')}>\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 = rangeStyle?.rowFlex === 'justify' || rangeStyle?.rowFlex === 'alignment'\n return (\n <div className={`menu-item__justify ${isActive ? 'active' : ''}`} title={`Distribute(${isApple ? '⌘' : 'Ctrl'}+Shift+J)`} onClick={() => editorRef.current?.command.executeRowFlex('justify')}>\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({ option, onClick }: { option: PresetOption; onClick: () => void }) {\n return (\n <div\n onClick={onClick}\n className=\"list-preset-cell\"\n title={option.label}\n >\n {option.preview.map((item, i) => (\n <div key={i} className=\"list-preset-line\" style={{ paddingLeft: `${i * 10}px` }}>\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 handleList = (type: string | null, style?: string) => {\n editorRef.current?.command.executeList(type, style)\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 }\n\n const handleIndent = (e: React.MouseEvent) => {\n e.stopPropagation()\n editorRef.current?.command.executeListIndent()\n }\n\n const handleOutdent = (e: React.MouseEvent) => {\n e.stopPropagation()\n editorRef.current?.command.executeListOutdent()\n }\n\n return (\n <div className={`menu-item__list ${isActive ? 'active' : ''}`} title={`List(${isApple ? '⌘' : 'Ctrl'}+Shift+U)`}>\n <List size={16} onClick={() => optionsRef.current?.classList.toggle('visible')} style={{ cursor: 'pointer' }} />\n <div className=\"options\" ref={optionsRef}>\n <div style={{ padding: '8px', width: '320px' }}>\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 onClick={handleIndent} className=\"list-quick-btn\" title=\"Indent (Tab)\">\n <Indent size={14} />\n </button>\n <button onClick={handleOutdent} className=\"list-quick-btn\" title=\"Outdent (Shift+Tab)\">\n <Outdent size={14} />\n </button>\n </div>\n\n {/* Ordered List Presets */}\n <div style={{ marginBottom: '8px' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', fontSize: '11px', color: '#667085', marginBottom: '6px', fontWeight: 500 }}>\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 style={{ display: 'flex', alignItems: 'center', gap: '4px', fontSize: '11px', color: '#667085', marginBottom: '6px', fontWeight: 500 }}>\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 className=\"menu-item__image\" onClick={() => document.getElementById('image')?.click()}>\n <ImageIcon size={16} />\n <input type=\"file\" id=\"image\" accept=\".png, .jpg, .jpeg, .svg, .gif\" onChange={handleImageUpload} />\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 = (dashArray: number[]) => {\n editorRef.current?.command.executeSeparator(dashArray, { lineWidth: selectedWidth })\n }\n\n return (\n <div className=\"menu-item__separator\" title=\"Separator\">\n <Minus size={16} onClick={() => optionsRef.current?.classList.toggle('visible')} style={{ cursor: 'pointer' }} />\n <div className=\"options\" ref={optionsRef}>\n <div style={{ padding: '8px 10px 10px', width: '200px' }}>\n <ul style={{ margin: 0, padding: 0, listStyle: 'none' }}>\n {DASH_STYLES.map(({ label, dashArray }) => (\n <li\n key={label}\n onClick={() => handleSeparator(dashArray)}\n style={{ display: 'flex', alignItems: 'center', gap: '10px', padding: '5px 6px', cursor: 'pointer', borderRadius: '4px' }}\n >\n <svg style={{ flex: 1, minWidth: 0, overflow: 'hidden' }} height=\"8\">\n <line\n x1=\"0\" y1=\"4\" x2=\"100%\" y2=\"4\"\n stroke={lineColor}\n strokeWidth={selectedWidth}\n strokeDasharray={dashArray.length ? dashArray.join(',') : 'none'}\n />\n </svg>\n <span style={{ fontSize: '11px', color: '#475467', whiteSpace: 'nowrap', flexShrink: 0 }}>{label}</span>\n </li>\n ))}\n </ul>\n\n <div style={{ borderTop: '1px solid #e4e7ec', marginTop: '8px', paddingTop: '8px' }}>\n <div style={{ fontSize: '11px', color: '#667085', marginBottom: '6px', fontWeight: 500 }}>Line Width</div>\n <div style={{ display: 'flex', gap: '4px' }}>\n {LINE_WIDTHS.map(({ label, value }) => (\n <button\n key={value}\n onClick={(e) => { e.stopPropagation(); setSelectedWidth(value) }}\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 </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 className=\"menu-item__insert-element\" onClick={() => optionsRef.current?.classList.toggle('visible')}>\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 className=\"catalog-mode\" title=\"Catalog\" onClick={handleToggleCatalogAction}>\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\">Paging</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>Visible Pages: <span className=\"page-no-list\">{pageNoList}</span></span>\n <span className=\"footer-divider\" />\n <span>Pages: <span className=\"page-no\">{pageNo}</span>/<span className=\"page-size\">{pageSize}</span></span>\n <span className=\"footer-divider\" />\n <span>Words: <span className=\"word-count\">{wordCount}</span></span>\n <span className=\"footer-divider\" />\n <span>Row: <span className=\"row-no\">{rowNo}</span></span>\n <span className=\"footer-divider\" />\n <span>Column: <span className=\"col-no\">{colNo}</span></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 = modeIndexRef.current === MODE_LIST.length - 1 ? 0 : 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 className=\"editor-mode\" title=\"Click to change mode\" onClick={handleModeChange}>{editorMode}</div>\n )\n}\n","import { useEditor } from '../EditorContext'\n\nexport default function PageScaleMinusTool() {\n const { editorRef } = useEditor()\n return (\n <div className=\"page-scale-minus\" title=\"Zoom Out (Ctrl+-)\" onClick={() => editorRef.current?.command.executePageScaleMinus()}>\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 className=\"page-scale-percentage\" title=\"Zoom Level\" onClick={() => editorRef.current?.command.executePageScaleRecovery()}>\n {pageScale}%\n </span>\n )\n}\n","import { useEditor } from '../EditorContext'\n\nexport default function PageScaleAddTool() {\n const { editorRef } = useEditor()\n return (\n <div className=\"page-scale-add\" title=\"Zoom In (Ctrl+=)\" onClick={() => editorRef.current?.command.executePageScaleAdd()}>\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 key={label} onClick={() => handlePaperSize(width, height)} className={active ? 'active' : ''}>{label}</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 onClick={() => handlePaperDirection('vertical')} className=\"active\">Portrait</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] = editorRef.current.command.getPaperMargin()\n new Dialog({\n title: 'Page Margins',\n data: [\n { type: 'text', label: 'Top Margin (cm)', name: 'top', required: true, value: `${pxToCm(topMargin)}`, placeholder: 'e.g. 2.54' },\n { type: 'text', label: 'Bottom Margin (cm)', name: 'bottom', required: true, value: `${pxToCm(bottomMargin)}`, placeholder: 'e.g. 2.54' },\n { type: 'text', label: 'Left Margin (cm)', name: 'left', required: true, value: `${pxToCm(leftMargin)}`, placeholder: 'e.g. 2.54' },\n { type: 'text', label: 'Right Margin (cm)', name: 'right', required: true, value: `${pxToCm(rightMargin)}`, placeholder: 'e.g. 2.54' }\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)), cmToPx(Number(right)), cmToPx(Number(bottom)), cmToPx(Number(left))\n ])\n }\n })\n }\n\n return (\n <div className=\"paper-margin\" title=\"Page Margins\" onClick={handlePaperMargin}>\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 className=\"editor-option\" title=\"Editor Settings\" onClick={handleEditorOption}>\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 (containerRef.current && !containerRef.current.contains(e.target as Node)) {\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((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 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 className=\"watermark-footer\" ref={containerRef} onClick={() => setVisible(!visible)}>\n <i title=\"Watermark\"></i>\n {visible && (\n <>\n <div className=\"wm-panel-mask\" onClick={(e) => { e.stopPropagation(); setVisible(false) }} />\n <div className=\"watermark-footer-panel\" ref={panelRef} onClick={(e) => e.stopPropagation()}>\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 className={`wm-panel-tab ${tab === 'text' ? 'active' : ''}`} onClick={() => setTab('text')}>\n Text\n </button>\n <button className={`wm-panel-tab ${tab === 'image' ? 'active' : ''}`} onClick={() => setTab('image')}>\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 type=\"text\" value={text} onChange={(e) => setText(e.target.value)} placeholder=\"Watermark text\" />\n </div>\n <div className=\"wm-panel-field\">\n <label>Font</label>\n <select value={font} onChange={(e) => setFont(e.target.value)}>\n {FONTS.map((f) => (\n <option key={f.family} value={f.family}>{f.label}</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 style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button className=\"wm-panel-upload\" onClick={() => fileInputRef.current?.click()}>Choose File</button>\n <input ref={fileInputRef} type=\"file\" accept=\"image/*\" style={{ display: 'none' }} onChange={handleFileUpload} />\n {imageData && <span style={{ fontSize: '11px', color: '#667085' }}>Loaded</span>}\n </div>\n </div>\n {imageData && (\n <div className=\"wm-panel-field\">\n <div className=\"wm-panel-preview\">\n <img src={imageData} alt=\"preview\" style={{ maxWidth: '100%', maxHeight: '48px', objectFit: 'contain' }} />\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 type=\"number\" value={imgWidth} min={10} onChange={(e) => setImgWidth(Number(e.target.value))} />\n </div>\n <div className=\"wm-panel-field wm-panel-field-half\">\n <label>H</label>\n <input type=\"number\" value={imgHeight} min={10} onChange={(e) => setImgHeight(Number(e.target.value))} />\n </div>\n </div>\n </>\n )}\n\n {/* Shared */}\n <div className=\"wm-panel-field\">\n <label>Opacity <span className=\"wm-panel-value\">{opacity}%</span></label>\n <input type=\"range\" min={0} max={100} value={opacity} onChange={(e) => setOpacity(Number(e.target.value))} className=\"wm-panel-slider\" />\n </div>\n <div className=\"wm-panel-field\">\n <label>Rotation <span className=\"wm-panel-value\">{rotation}°</span></label>\n <input type=\"range\" min={-90} max={90} value={rotation} onChange={(e) => setRotation(Number(e.target.value))} className=\"wm-panel-slider\" />\n </div>\n <div className=\"wm-panel-field\">\n <label>Position</label>\n <div className=\"wm-panel-toggle\">\n <button className={!inFront ? 'active' : ''} onClick={() => setInFront(false)}>Behind</button>\n <button className={inFront ? 'active' : ''} onClick={() => setInFront(true)}>In Front</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}>Remove</button>\n <button className=\"wm-panel-btn-apply\" onClick={handleApply}>Apply</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"]}