@windoc/react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/index.d.mts +393 -0
  2. package/dist/index.d.ts +393 -0
  3. package/dist/index.js +1661 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +1582 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +39 -0
  8. package/src/styles/editor.css +1786 -0
  9. package/src/styles/images/alignment.svg +1 -0
  10. package/src/styles/images/arrow-left.svg +1 -0
  11. package/src/styles/images/arrow-right.svg +1 -0
  12. package/src/styles/images/block.svg +1 -0
  13. package/src/styles/images/bold.svg +1 -0
  14. package/src/styles/images/catalog.svg +1 -0
  15. package/src/styles/images/center.svg +1 -0
  16. package/src/styles/images/checkbox.svg +1 -0
  17. package/src/styles/images/close.svg +1 -0
  18. package/src/styles/images/codeblock.svg +1 -0
  19. package/src/styles/images/color.svg +1 -0
  20. package/src/styles/images/column.svg +4 -0
  21. package/src/styles/images/control.svg +1 -0
  22. package/src/styles/images/date.svg +1 -0
  23. package/src/styles/images/exit-fullscreen.svg +1 -0
  24. package/src/styles/images/format.svg +1 -0
  25. package/src/styles/images/highlight.svg +1 -0
  26. package/src/styles/images/hyperlink.svg +1 -0
  27. package/src/styles/images/image.svg +1 -0
  28. package/src/styles/images/insert-element.svg +5 -0
  29. package/src/styles/images/italic.svg +1 -0
  30. package/src/styles/images/justify.svg +7 -0
  31. package/src/styles/images/latex.svg +1 -0
  32. package/src/styles/images/left.svg +1 -0
  33. package/src/styles/images/line-dash-dot-dot.svg +1 -0
  34. package/src/styles/images/line-dash-dot.svg +1 -0
  35. package/src/styles/images/line-dash-large-gap.svg +1 -0
  36. package/src/styles/images/line-dash-small-gap.svg +1 -0
  37. package/src/styles/images/line-dot.svg +1 -0
  38. package/src/styles/images/line-double.svg +1 -0
  39. package/src/styles/images/line-height.svg +8 -0
  40. package/src/styles/images/line-single.svg +1 -0
  41. package/src/styles/images/line-wavy.svg +1 -0
  42. package/src/styles/images/list.svg +1 -0
  43. package/src/styles/images/option.svg +1 -0
  44. package/src/styles/images/page-break.svg +1 -0
  45. package/src/styles/images/page-mode.svg +1 -0
  46. package/src/styles/images/page-scale-add.svg +1 -0
  47. package/src/styles/images/page-scale-minus.svg +1 -0
  48. package/src/styles/images/painter.svg +1 -0
  49. package/src/styles/images/paper-direction.svg +1 -0
  50. package/src/styles/images/paper-margin.svg +1 -0
  51. package/src/styles/images/paper-size.svg +1 -0
  52. package/src/styles/images/print.svg +1 -0
  53. package/src/styles/images/radio.svg +4 -0
  54. package/src/styles/images/redo.svg +1 -0
  55. package/src/styles/images/request-fullscreen.svg +1 -0
  56. package/src/styles/images/right.svg +1 -0
  57. package/src/styles/images/row-margin.svg +1 -0
  58. package/src/styles/images/search.svg +1 -0
  59. package/src/styles/images/separator.svg +1 -0
  60. package/src/styles/images/signature-undo.svg +1 -0
  61. package/src/styles/images/signature.svg +1 -0
  62. package/src/styles/images/size-add.svg +1 -0
  63. package/src/styles/images/size-minus.svg +1 -0
  64. package/src/styles/images/strikeout.svg +1 -0
  65. package/src/styles/images/subscript.svg +1 -0
  66. package/src/styles/images/superscript.svg +1 -0
  67. package/src/styles/images/table.svg +1 -0
  68. package/src/styles/images/title.svg +1 -0
  69. package/src/styles/images/trash.svg +1 -0
  70. package/src/styles/images/underline.svg +1 -0
  71. package/src/styles/images/undo.svg +1 -0
  72. package/src/styles/images/watermark.svg +1 -0
  73. package/src/styles/images/word-tool.svg +1 -0
@@ -0,0 +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"]}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@windoc/react",
3
+ "version": "0.1.0",
4
+ "description": "React bindings for windoc editor",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./style.css": "./src/styles/editor.css"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "src/styles"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsup",
22
+ "dev": "tsup --watch"
23
+ },
24
+ "peerDependencies": {
25
+ "lucide-react": ">=0.300.0",
26
+ "react": ">=18",
27
+ "react-dom": ">=18"
28
+ },
29
+ "dependencies": {
30
+ "@windoc/core": "^0.1.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/react": "^19",
34
+ "@types/react-dom": "^19",
35
+ "lucide-react": "^0.563.0",
36
+ "tsup": "^8.0.0",
37
+ "typescript": "^5"
38
+ }
39
+ }