@windoc/react 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +214 -0
- package/dist/index.js +395 -427
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +339 -371
- package/dist/index.mjs.map +1 -1
- package/package.json +27 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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":["'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 { useState } from 'react'\nimport { useEditor } from '../EditorContext'\n\nexport default function ColumnTool() {\n const { editorRef } = useEditor()\n const [visible, setVisible] = useState(false)\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 setVisible(false)\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={() => setVisible(!visible)}>\n <span className=\"select\" title=\"Column Layout\">\n {currentColumns === 1 ? '1 Column' : `${currentColumns} Columns`}\n </span>\n <div\n className={`options ${visible ? 'visible' : ''}`}\n onClick={(e) => e.stopPropagation()}\n >\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 )\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 { useState } 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 [visible, setVisible] = useState(false)\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 setVisible(false)\n }\n\n return (\n <div className=\"menu-item__title\" onClick={() => setVisible(!visible)}>\n <span className=\"select\" title=\"Toggle Heading\">{activeLabel}</span>\n <div className={`options ${visible ? 'visible' : ''}`}>\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 { useState } 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 [visible, setVisible] = useState(false)\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 setVisible(false)\n }\n\n return (\n <div className=\"menu-item__font\" onClick={() => setVisible(!visible)}>\n <span className=\"select\" title=\"Font\">{activeLabel}</span>\n <div className={`options ${visible ? 'visible' : ''}`}>\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 { useState } 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 [visible, setVisible] = useState(false)\n\n const activeSize = rangeStyle?.size ?? 16\n\n const handleSize = (size: number) => {\n editorRef.current?.command.executeSize(size)\n setVisible(false)\n }\n\n return (\n <div className=\"menu-item__size\" onClick={() => setVisible(!visible)}>\n <span className=\"select\" title=\"Font Size\">{activeSize}</span>\n <div className={`options ${visible ? 'visible' : ''}`}>\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 { useState } 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 [visible, setVisible] = useState(false)\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 setVisible(false)\n }\n\n return (\n <div className=\"menu-item__line-height\" onClick={() => setVisible(!visible)}>\n <span className=\"select\" title=\"Line Height\">{activeLabel}</span>\n <div className={`options ${visible ? 'visible' : ''}`}>\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 { useState, useRef, useEffect } 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 [visible, setVisible] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const activeColor = rangeStyle?.color || '#000000'\n\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 const handleColor = (color: string) => {\n editorRef.current?.command.executeColor(color)\n setVisible(false)\n }\n\n const handleReset = () => {\n editorRef.current?.command.executeColor(null)\n setVisible(false)\n }\n\n return (\n <div className=\"menu-item__color\" ref={containerRef} title=\"Font Color\" onClick={() => setVisible(!visible)}>\n <Baseline size={16} />\n <span style={{ backgroundColor: activeColor }}></span>\n <input id=\"color\" type=\"color\" readOnly tabIndex={-1} />\n {visible && (\n <div className=\"color-palette-dropdown\" 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 )}\n </div>\n )\n}\n","import { useState, useRef, useEffect } 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 [visible, setVisible] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const activeColor = rangeStyle?.highlight || ''\n\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 const handleColor = (color: string) => {\n editorRef.current?.command.executeHighlight(color)\n setVisible(false)\n }\n\n const handleReset = () => {\n editorRef.current?.command.executeHighlight(null)\n setVisible(false)\n }\n\n return (\n <div className=\"menu-item__highlight\" ref={containerRef} title=\"Highlight\" onClick={() => setVisible(!visible)}>\n <Highlighter size={16} />\n <span style={{ backgroundColor: activeColor || '#ffff00' }}></span>\n <input id=\"highlight\" type=\"color\" readOnly tabIndex={-1} />\n {visible && (\n <div className=\"color-palette-dropdown\" 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 )}\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 { useState } 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 [visible, setVisible] = useState(false)\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={() => setVisible(!visible)}></span>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n {STYLES.map(style => (\n <li key={style} data-decoration-style={style} onClick={() => {\n editorRef.current?.command.executeUnderline({ style })\n setVisible(false)\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 { useState, useRef, useEffect } 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 [visible, setVisible] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const optionsRef = useRef<HTMLDivElement>(null)\n const isActive = !!rangeStyle?.listType\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: prevent overflow off-screen\n useEffect(() => {\n if (!visible || !optionsRef.current) return\n const el = optionsRef.current\n // Reset position first\n el.style.left = ''\n el.style.right = ''\n\n const rect = el.getBoundingClientRect()\n if (rect.right > window.innerWidth) {\n const overflow = rect.right - window.innerWidth + 8\n el.style.left = `-${overflow}px`\n } else if (rect.left < 0) {\n el.style.left = `${-rect.left + 8}px`\n }\n }, [visible])\n\n const handleList = (type: string | null, style?: string) => {\n editorRef.current?.command.executeList(type, style)\n setVisible(false)\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 setVisible(false)\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 ref={containerRef} className={`menu-item__list ${isActive ? 'active' : ''}`} title={`List(${isApple ? '⌘' : 'Ctrl'}+Shift+U)`}>\n <List size={16} onClick={() => setVisible(!visible)} style={{ cursor: 'pointer' }} />\n <div ref={optionsRef} className={`options ${visible ? 'visible' : ''}`} 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 )\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 { 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 [visible, setVisible] = useState(false)\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 setVisible(false)\n }\n\n return (\n <div className=\"menu-item__separator\" title=\"Separator\">\n <Minus size={16} onClick={() => setVisible(!visible)} style={{ cursor: 'pointer' }} />\n <div className={`options ${visible ? 'visible' : ''}`} 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 )\n}\n","import { useState } from 'react'\nimport { useEditor } from '../EditorContext'\n\nexport default function InsertElementTool() {\n const { editorRef } = useEditor()\n const [visible, setVisible] = useState(false)\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 setVisible(false)\n }\n\n return (\n <div className=\"menu-item__insert-element\" onClick={() => setVisible(!visible)}>\n <i title=\"Insert Element\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\n <ul>\n <li onClick={handleHeader}>Add Header</li>\n </ul>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useEditor } from '../EditorContext'\n\nexport default function PageBreakTool() {\n const { editorRef } = useEditor()\n const [visible, setVisible] = useState(false)\n\n const handlePageBreak = () => {\n editorRef.current?.command.executePageBreak()\n setVisible(false)\n }\n\n const handleColumnBreak = () => {\n editorRef.current?.command.executeColumnBreak()\n setVisible(false)\n }\n\n return (\n <div\n className=\"menu-item__page-break\"\n onClick={() => setVisible(!visible)}\n >\n <i title=\"Break\"></i>\n <div className={`options ${visible ? 'visible' : ''}`}>\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":["useEffect","useRef","useState","createContext","useContext","useState","jsx","jsx","jsx","useState","jsx","useState","useState","useEffect","jsx","jsxs","useState","useEffect","_","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","useState","useRef","useEffect","jsx","jsxs","useState","useRef","useEffect","useState","useRef","useEffect","RotateCcw","jsx","jsxs","useState","useRef","useEffect","RotateCcw","jsx","jsx","useState","jsx","jsxs","useState","jsx","jsx","jsx","jsx","jsx","useState","useRef","useEffect","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","jsx","jsxs","jsx","useState","jsx","jsxs","useState","Fragment","jsx","jsxs","useState","useRef","jsx","useState","useRef","jsx","jsxs","jsx","useState","jsx","jsxs","SIZES","useState","useState","jsx","jsxs","useState","jsx","jsx","jsx","useState","useRef","useEffect","Fragment","jsx","jsxs","COLOR_PALETTE","FONTS","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","count"]}
|
|
1
|
+
{"version":3,"sources":["../src/Editor.tsx","../src/EditorContext.tsx","../src/FooterContext.tsx","../src/toolbar/UndoTool.tsx","../src/toolbar/RedoTool.tsx","../src/toolbar/ColumnTool.tsx","../src/utils/useDropdown.ts","../src/utils/DropdownPortal.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":["'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 { useState } from 'react'\nimport { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\n\nexport default function ColumnTool() {\n const { editorRef } = useEditor()\n const { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} onClick={toggle}>\n <span className=\"select\" title=\"Column Layout\">\n {currentColumns === 1 ? '1 Column' : `${currentColumns} Columns`}\n </span>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { useState, useRef, useEffect, CSSProperties } from 'react'\n\ninterface DropdownPosition {\n top: number\n left: number\n}\n\nexport function useDropdown() {\n const [isOpen, setIsOpen] = useState(false)\n const [position, setPosition] = useState<DropdownPosition>({ top: 0, left: 0 })\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const open = () => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect()\n setPosition({ top: rect.bottom + 2, left: rect.left })\n }\n setIsOpen(true)\n }\n\n const close = () => setIsOpen(false)\n\n const toggle = () => (isOpen ? close() : open())\n\n const portalStyle: CSSProperties = {\n position: 'fixed',\n top: position.top,\n left: position.left,\n zIndex: 9999,\n }\n\n useEffect(() => {\n if (!isOpen) return\n const handler = (e: MouseEvent) => {\n if (triggerRef.current && !triggerRef.current.contains(e.target as Node)) {\n close()\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [isOpen])\n\n return { triggerRef, isOpen, toggle, open, close, portalStyle }\n}\n","import { createPortal } from 'react-dom'\nimport { CSSProperties, ReactNode } from 'react'\n\ninterface DropdownPortalProps {\n isOpen: boolean\n style: CSSProperties\n className?: string\n children: ReactNode\n}\n\nexport default function DropdownPortal({ isOpen, style, className, children }: DropdownPortalProps) {\n if (!isOpen) return null\n return createPortal(\n <div className={className} style={style}>\n {children}\n </div>,\n document.body\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 { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} onClick={toggle}>\n <span className=\"select\" title=\"Toggle Heading\">{activeLabel}</span>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} onClick={toggle}>\n <span className=\"select\" title=\"Font\">{activeLabel}</span>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} onClick={toggle}>\n <span className=\"select\" title=\"Font Size\">{activeSize}</span>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} onClick={toggle}>\n <span className=\"select\" title=\"Line Height\">{activeLabel}</span>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { Baseline, RotateCcw } from 'lucide-react'\nimport { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen: visible, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} title=\"Font Color\" onClick={toggle}>\n <Baseline size={16} />\n <span style={{ backgroundColor: activeColor }}></span>\n <input id=\"color\" type=\"color\" readOnly tabIndex={-1} />\n <DropdownPortal isOpen={visible} style={portalStyle} className=\"color-palette-dropdown\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { Highlighter, RotateCcw } from 'lucide-react'\nimport { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen: visible, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} title=\"Highlight\" onClick={toggle}>\n <Highlighter size={16} />\n <span style={{ backgroundColor: activeColor || '#ffff00' }}></span>\n <input id=\"highlight\" type=\"color\" readOnly tabIndex={-1} />\n <DropdownPortal isOpen={visible} style={portalStyle} className=\"color-palette-dropdown\">\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 </DropdownPortal>\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 { Underline as UnderlineIcon } from 'lucide-react'\nimport { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\n\nconst STYLES = ['solid', 'double', 'dashed', 'dotted', 'wavy']\n\nexport default function UnderlineTool() {\n const { editorRef, isApple, rangeStyle } = useEditor()\n const { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\n const isActive = rangeStyle?.underline === true\n\n return (\n <div className={`menu-item__underline ${isActive ? 'active' : ''}`} ref={triggerRef} title={`Underline(${isApple ? '⌘' : 'Ctrl'}+U)`}>\n <UnderlineIcon size={16} onClick={() => editorRef.current?.command.executeUnderline()} style={{ cursor: 'pointer' }} />\n <span className=\"select\" onClick={toggle}></span>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\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 { List, ListOrdered, Indent, Outdent } from 'lucide-react'\nimport { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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 ref={triggerRef} className={`menu-item__list ${isActive ? 'active' : ''}`} title={`List(${isApple ? '⌘' : 'Ctrl'}+Shift+U)`}>\n <List size={16} onClick={toggle} style={{ cursor: 'pointer' }} />\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\" >\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 </DropdownPortal>\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 { useState } from 'react'\nimport { Minus } from 'lucide-react'\nimport { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\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 { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} title=\"Separator\">\n <Minus size={16} onClick={toggle} style={{ cursor: 'pointer' }} />\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\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 </DropdownPortal>\n </div>\n )\n}\n","import { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\n\nexport default function InsertElementTool() {\n const { editorRef } = useEditor()\n const { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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\" ref={triggerRef} onClick={toggle}>\n <i title=\"Insert Element\"></i>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\n <ul>\n <li onClick={handleHeader}>Add Header</li>\n </ul>\n </DropdownPortal>\n </div>\n )\n}\n","import { useEditor } from '../EditorContext'\nimport { useDropdown } from '../utils/useDropdown'\nimport DropdownPortal from '../utils/DropdownPortal'\n\nexport default function PageBreakTool() {\n const { editorRef } = useEditor()\n const { triggerRef, isOpen, toggle, portalStyle } = useDropdown()\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 ref={triggerRef}\n onClick={toggle}\n >\n <i title=\"Break\"></i>\n <DropdownPortal isOpen={isOpen} style={portalStyle} className=\"options visible\">\n <ul>\n <li onClick={handlePageBreak}>Page Break</li>\n <li onClick={handleColumnBreak}>Column Break</li>\n </ul>\n </DropdownPortal>\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":["useEffect","useRef","useState","createContext","useContext","useState","jsx","jsx","jsx","useState","useState","useEffect","jsx","jsx","useState","useState","useEffect","useRef","jsx","jsxs","useState","useRef","useEffect","_","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","RotateCcw","jsx","jsxs","RotateCcw","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","useState","jsx","jsxs","useState","Fragment","jsx","jsxs","useState","useRef","jsx","useState","useRef","jsx","jsxs","jsx","useState","jsx","jsxs","SIZES","useState","useState","jsx","jsxs","useState","jsx","jsx","jsx","useState","useRef","useEffect","Fragment","jsx","jsxs","COLOR_PALETTE","FONTS","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","count"]}
|