react-next-editor-js 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/EditorContext.ts","../src/react/ErrorBoundary.tsx","../src/react/toolbar/icons.tsx","../src/react/toolbar/ToolbarButton.tsx","../src/react/toolbar/ColorButton.tsx","../src/react/toolbar/Toolbar.tsx","../src/react/StatusBar.tsx","../src/react/Editor.tsx"],"names":["createContext","useContext","Component","jsx","useState","useRef","useEffect","jsxs","importDocx","DEFAULT_TOOLBAR_GROUPS","useCallback","useMemo","Fragment","countDocument","DEFAULT_FEATURES","DEFAULT_PAGE","DEFAULT_STRINGS","DEFAULT_FONT_FAMILIES","DEFAULT_FONT_SIZES","DEFAULT_COLOR_PALETTE","resolvePageDimensions","forwardRef","EditorInner","buildSchema","createCommands","createDoc","EditorState","PMNode","documentToText","documentToHtml","exportDocument","useImperativeHandle","preloadSanitizer","paginated","buildPlugins","createEditorState","EditorView","IndexedDBStore","engine","DocumentPersistence","SyncEngine","ConnectivityMonitor","requestPersistentStorage","TextSelection","themeToCssVars","Editor"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { EditorContextValue } from './types';\n\n/** Context providing the live view/state/commands to the toolbar and children. */\nexport const EditorContext = createContext<EditorContextValue | null>(null);\n\n/** Access the editor context; throws if used outside an <Editor>. */\nexport function useEditorContext(): EditorContextValue {\n const ctx = useContext(EditorContext);\n if (!ctx) {\n throw new Error('useEditorContext must be used within a react-next-editor <Editor>.');\n }\n return ctx;\n}\n","'use client';\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n onError?: (error: Error) => void;\n fallbackMessage?: string;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\n/**\n * Wraps the editor so a failure in one feature/instance cannot bring down the\n * host app (F-11.2). Degrades to a recoverable state with a clear message and a\n * retry button; reports the error via `onError` for monitoring (F-11.8).\n */\nexport class EditorErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n // eslint-disable-next-line no-console\n console.error('[react-next-editor] Editor error contained by boundary:', error, info);\n this.props.onError?.(error);\n }\n\n private readonly handleReset = () => {\n this.setState({ error: null });\n };\n\n render(): ReactNode {\n if (this.state.error) {\n return (\n <div className=\"rne-root\">\n <div className=\"rne-error\" role=\"alert\">\n <strong>{this.props.fallbackMessage ?? 'The editor encountered a problem.'}</strong>\n <p>Your latest saved content is preserved locally. You can try to recover the editor.</p>\n <button type=\"button\" onClick={this.handleReset}>\n Reload editor\n </button>\n </div>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","'use client';\n\nimport type { JSX } from 'react';\n\n/**\n * Compact 24×24 inline SVG icons for toolbar controls. Inline so the package has\n * no icon-font dependency and icons inherit `currentColor` for theming.\n */\nconst PATHS: Record<string, JSX.Element> = {\n undo: <path d=\"M12 5V1L7 6l5 5V7a6 6 0 1 1-6 6H4a8 8 0 1 0 8-8z\" />,\n redo: <path d=\"M12 5V1l5 5-5 5V7a6 6 0 1 0 6 6h2a8 8 0 1 1-8-8z\" />,\n bold: (\n <path d=\"M7 5h6a3.5 3.5 0 0 1 1.5 6.66A3.5 3.5 0 0 1 13 19H7V5zm3 2v3h3a1.5 1.5 0 0 0 0-3h-3zm0 5v4h3a2 2 0 0 0 0-4h-3z\" />\n ),\n italic: <path d=\"M10 4h7v2h-2.3l-3 12H14v2H7v-2h2.3l3-12H10V4z\" />,\n underline: <path d=\"M6 4v7a6 6 0 0 0 12 0V4h-2.5v7a3.5 3.5 0 0 1-7 0V4H6zm-1 16h14v2H5v-2z\" />,\n strikethrough: (\n <path d=\"M3 11h18v2H3v-2zm9-7c2.5 0 4 1.3 4.3 3h-2.4c-.2-.7-.8-1.2-1.9-1.2-1.2 0-2 .6-2 1.5 0 .5.3.9 1 1.2H9.2C8.5 9 8 8.2 8 7.2 8 5.3 9.7 4 12 4zm2 11.5c0 1.9-1.6 3.5-4.2 3.5-2.6 0-4.3-1.4-4.5-3.4h2.4c.2.9 1 1.5 2.2 1.5 1.3 0 2.1-.6 2.1-1.6 0-.2 0-.4-.1-.5H14z\" />\n ),\n superscript: (\n <path d=\"M4 7l4 5-4 5h2.5L9 13.5 11.5 17H14l-4-5 4-5h-2.5L9 10.5 6.5 7H4zm16-1c0-.8-.6-1.5-1.7-1.5-.9 0-1.6.5-1.8 1.3h1c.1-.3.4-.5.8-.5.4 0 .7.2.7.6 0 .6-1 1-2.3 2.1V9h3.6v-.9h-1.9c1-.8 1.6-1.3 1.6-2.2z\" />\n ),\n subscript: (\n <path d=\"M4 4l4 5-4 5h2.5L9 10.5 11.5 14H14l-4-5 4-5h-2.5L9 7.5 6.5 4H4zm16 13c0-.8-.6-1.5-1.7-1.5-.9 0-1.6.5-1.8 1.3h1c.1-.3.4-.5.8-.5.4 0 .7.2.7.6 0 .6-1 1-2.3 2.1V20h3.6v-.9h-1.9c1-.8 1.6-1.3 1.6-2.1z\" />\n ),\n code: <path d=\"M9 7l-5 5 5 5 1.4-1.4L6.8 12l3.6-3.6L9 7zm6 0l-1.4 1.4L17.2 12l-3.6 3.6L15 17l5-5-5-5z\" />,\n textColor: <path d=\"M5 18h14v2H5v-2zM9.6 4h2.8l4.1 11h-2.3l-1-3H8.8l-1 3H5.5L9.6 4zm-.2 6.1h3.2L11 5.6 9.4 10.1z\" />,\n highlight: <path d=\"M4 18h16v3H4v-3zM15.6 3.4l3 3-7.8 7.8-3.6.6.6-3.6 7.8-7.8zM6 13l3 3H6v-3z\" />,\n clearFormatting: (\n <path d=\"M6 5v2h5l-2.8 9h2.5l2.8-9H19V5H6zM4.7 17.3 17.3 4.7l1.4 1.4L6.1 18.7l-1.4-1.4z\" />\n ),\n alignLeft: <path d=\"M3 4h18v2H3V4zm0 5h12v2H3V9zm0 5h18v2H3v-2zm0 5h12v2H3v-2z\" />,\n alignCenter: <path d=\"M3 4h18v2H3V4zm3 5h12v2H6V9zm-3 5h18v2H3v-2zm3 5h12v2H6v-2z\" />,\n alignRight: <path d=\"M3 4h18v2H3V4zm6 5h12v2H9V9zm-6 5h18v2H3v-2zm6 5h12v2H9v-2z\" />,\n alignJustify: <path d=\"M3 4h18v2H3V4zm0 5h18v2H3V9zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\" />,\n bulletList: (\n <path d=\"M4 5.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm4 .5h13v2H8V6zm-4 4.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm4 .5h13v2H8v-2zm-4 4.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm4 .5h13v2H8v-2z\" />\n ),\n orderedList: (\n <path d=\"M3 6h1V3H2v1h1v2zm5 0h13v2H8V6zm0 5h13v2H8v-2zm0 5h13v2H8v-2zM2 12.8h2v.5H3v.5h1v.5H2v.7h3v-3H2v.8zm1 4.2H2v.8h1.8v.4L2 19v.9h3V17H4l-1 .5V17z\" />\n ),\n taskList: (\n <path d=\"M3 5h6v6H3V5zm2 2v2h2V7H5zm6-1h10v2H11V6zm0 5h10v2H11v-2zm0 5h10v2H11v-2zM3 15.4l1.4-1.4 1.1 1.1 2.6-2.6L9.5 14l-4 4L3 15.4z\" />\n ),\n indent: <path d=\"M3 4h18v2H3V4zm8 5h10v2H11V9zm0 5h10v2H11v-2zm-8 5h18v2H3v-2zm0-9 4 3-4 3V10z\" />,\n outdent: <path d=\"M3 4h18v2H3V4zm8 5h10v2H11V9zm0 5h10v2H11v-2zm-8 5h18v2H3v-2zM7 10v6l-4-3 4-3z\" />,\n blockquote: (\n <path d=\"M7 7c-2 0-3.5 1.6-3.5 3.6 0 1.8 1.3 3 2.9 3 .2 0 .4 0 .6-.1-.4 1-1.4 1.8-2.5 2.1l.6 1.4C7.7 16.9 9.5 14.8 9.5 12 9.5 9.2 8.4 7 7 7zm9 0c-2 0-3.5 1.6-3.5 3.6 0 1.8 1.3 3 2.9 3 .2 0 .4 0 .6-.1-.4 1-1.4 1.8-2.5 2.1l.6 1.4c2.1-.6 3.9-2.7 3.9-5.5C18.5 9.2 17.4 7 16 7z\" />\n ),\n horizontalRule: <path d=\"M3 11h18v2H3v-2z\" />,\n link: (\n <path d=\"M10.6 13.4a1 1 0 0 0 1.4 0l3-3a3 3 0 0 0-4.3-4.3l-1.5 1.5 1.4 1.4 1.5-1.5a1 1 0 0 1 1.5 1.5l-3 3a1 1 0 0 0 0 1.4zm2.8-2.8a1 1 0 0 0-1.4 0l-3 3A3 3 0 0 0 13.3 18l1.5-1.5-1.4-1.4-1.5 1.5a1 1 0 0 1-1.5-1.5l3-3a1 1 0 0 0 0-1.4z\" />\n ),\n image: (\n <path d=\"M4 4h16a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1zm1 2v9l4-4 3 3 3-3 3 3V6H5zm3 1.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3z\" />\n ),\n table: (\n <path d=\"M3 4h18v16H3V4zm2 2v3h5V6H5zm7 0v3h7V6h-7zm-7 5v3h5v-3H5zm7 0v3h7v-3h-7zm-7 5v2h5v-2H5zm7 0v2h7v-2h-7z\" />\n ),\n pageBreak: (\n <path d=\"M6 3h8l4 4v4h-2V8h-3V5H6v6H4V3h2zm-2 13h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v5H4v-5z\" />\n ),\n importDocx: (\n <path d=\"M5 3h9l5 5v6h-2V9h-4V5H7v14h5v2H5V3zm8 11 4 4 4-4h-3v-4h-2v4h-3z\" />\n ),\n};\n\nexport function ToolbarIcon({ name }: { name: string }): JSX.Element {\n const path = PATHS[name];\n if (!path) {\n return <span aria-hidden=\"true\">{name.slice(0, 2)}</span>;\n }\n return (\n <svg className=\"rne-btn-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {path}\n </svg>\n );\n}\n","'use client';\n\nimport type { EditorCommand } from '../../core/commands/helpers';\nimport { useEditorContext } from '../EditorContext';\nimport { ToolbarIcon } from './icons';\n\ninterface ToolbarButtonProps {\n iconName: string;\n label: string;\n command: EditorCommand;\n}\n\n/** A single command button reflecting active/enabled state (F-10.6, NF-4). */\nexport function ToolbarButton({ iconName, label, command }: ToolbarButtonProps) {\n const { state, run } = useEditorContext();\n const active = state ? (command.isActive?.(state) ?? false) : false;\n const enabled = state ? (command.isEnabled ? command.isEnabled(state) : true) : false;\n\n return (\n <button\n type=\"button\"\n className={`rne-btn${active ? ' rne-btn--active' : ''}`}\n title={label}\n aria-label={label}\n aria-pressed={command.isActive ? active : undefined}\n disabled={!enabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => run(command.run)}\n >\n <ToolbarIcon name={iconName} />\n </button>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport type { Command } from 'prosemirror-state';\nimport { useEditorContext } from '../EditorContext';\nimport { ToolbarIcon } from './icons';\n\ninterface ColorButtonProps {\n iconName: 'textColor' | 'highlight';\n label: string;\n /** Build a command that applies the chosen color. */\n apply: (color: string) => Command;\n /** Build a command that clears the color, if supported. */\n clear?: () => Command;\n /** The currently-active color, for the swatch. */\n activeColor?: string | null;\n}\n\n/** A color picker button with a palette popover (text color / highlight). */\nexport function ColorButton({ iconName, label, apply, clear, activeColor }: ColorButtonProps) {\n const { run, colorPalette } = useEditorContext();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [open]);\n\n return (\n <div className=\"rne-color-btn\" ref={containerRef}>\n <button\n ref={buttonRef}\n type=\"button\"\n className=\"rne-btn\"\n title={label}\n aria-label={label}\n aria-haspopup=\"true\"\n aria-expanded={open}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((v) => !v)}\n >\n <span style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <ToolbarIcon name={iconName} />\n <span className=\"rne-color-swatch\" style={{ background: activeColor ?? '#000' }} />\n </span>\n </button>\n {open && (\n <div\n className=\"rne-color-popover\"\n role=\"menu\"\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n setOpen(false);\n buttonRef.current?.focus();\n }\n }}\n >\n {colorPalette.map((color) => (\n <button\n key={color}\n type=\"button\"\n className=\"rne-color-cell\"\n style={{ background: color }}\n title={color}\n aria-label={color}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n run(apply(color));\n setOpen(false);\n }}\n />\n ))}\n {clear && (\n <button\n type=\"button\"\n className=\"rne-color-cell\"\n style={{ background: '#fff', gridColumn: 'span 8', height: 22 }}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n run(clear());\n setOpen(false);\n }}\n >\n ✕\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { type ChangeEvent, Fragment, type KeyboardEvent, useCallback, useMemo, useRef } from 'react';\nimport type { EditorState } from 'prosemirror-state';\nimport type { FeatureFlags, ToolbarConfig, ToolbarItemId } from '../../config/types';\nimport { DEFAULT_TOOLBAR_GROUPS } from '../../config/defaults';\nimport { useEditorContext } from '../EditorContext';\nimport { ToolbarButton } from './ToolbarButton';\nimport { ColorButton } from './ColorButton';\nimport { ToolbarIcon } from './icons';\n\nconst FEATURE_OF: Partial<Record<ToolbarItemId, keyof FeatureFlags>> = {\n bold: 'bold',\n italic: 'italic',\n underline: 'underline',\n strikethrough: 'strikethrough',\n superscript: 'superscript',\n subscript: 'subscript',\n code: 'code',\n paragraphStyle: 'headings',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n textColor: 'textColor',\n highlight: 'highlight',\n clearFormatting: 'clearFormatting',\n alignLeft: 'alignment',\n alignCenter: 'alignment',\n alignRight: 'alignment',\n alignJustify: 'alignment',\n bulletList: 'bulletList',\n orderedList: 'orderedList',\n taskList: 'taskList',\n indent: 'indentation',\n outdent: 'indentation',\n blockquote: 'blockquote',\n horizontalRule: 'horizontalRule',\n link: 'link',\n image: 'image',\n table: 'table',\n pageBreak: 'pageBreak',\n importDocx: 'docxImport',\n undo: 'history',\n redo: 'history',\n};\n\n/** Item ids backed directly by a registry command (rendered as icon buttons). */\nconst COMMAND_ITEMS = new Set<ToolbarItemId>([\n 'undo',\n 'redo',\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'superscript',\n 'subscript',\n 'code',\n 'clearFormatting',\n 'alignLeft',\n 'alignCenter',\n 'alignRight',\n 'alignJustify',\n 'bulletList',\n 'orderedList',\n 'taskList',\n 'indent',\n 'outdent',\n 'blockquote',\n 'horizontalRule',\n 'pageBreak',\n]);\n\nfunction activeBlockValue(state: EditorState | null): string {\n if (!state) return 'p';\n const node = state.selection.$head.parent;\n if (node.type.name === 'heading') return `h${node.attrs.level as number}`;\n return 'p';\n}\n\ninterface ToolbarProps {\n config?: ToolbarConfig;\n}\n\n/** Data-driven, keyboard-accessible toolbar (F-1–F-3, F-10.6, NF-4). */\nexport function Toolbar({ config }: ToolbarProps) {\n const ctx = useEditorContext();\n const { state, commands, strings, features, run, fontFamilies, fontSizes, importDocx } = ctx;\n\n const groups = config?.groups ?? DEFAULT_TOOLBAR_GROUPS;\n const sticky = config?.sticky ?? true;\n const toolbarRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const onImportFile = useCallback(\n async (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n e.target.value = ''; // allow re-importing the same file\n if (!file) return;\n try {\n await importDocx(file);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[react-next-editor] DOCX import failed:', err);\n }\n },\n [importDocx],\n );\n\n // Arrow-key navigation between toolbar buttons (WCAG toolbar pattern). Tab\n // order is preserved; arrows move focus among enabled buttons. Selects keep\n // their native arrow behaviour (and remain reachable via Tab), so they are not\n // part of the arrow ring.\n const onToolbarKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) return;\n const active = document.activeElement as HTMLElement | null;\n if (active?.tagName === 'SELECT') return;\n const root = toolbarRef.current;\n if (!root) return;\n const items = Array.from(root.querySelectorAll<HTMLElement>('button:not([disabled])'));\n if (items.length === 0) return;\n const idx = active ? items.indexOf(active) : -1;\n if (idx === -1) return;\n e.preventDefault();\n let next = idx;\n if (e.key === 'ArrowRight') next = (idx + 1) % items.length;\n else if (e.key === 'ArrowLeft') next = (idx - 1 + items.length) % items.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = items.length - 1;\n items[next]?.focus();\n }, []);\n\n const renderedGroups = useMemo(() => {\n return groups\n .map((group) => group.filter((id) => isItemAvailable(id, features, commands)))\n .filter((group) => group.length > 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [groups, features, commands]);\n\n const labelFor = (id: ToolbarItemId): string =>\n (strings as unknown as Record<string, string>)[id] ?? id;\n\n function renderItem(id: ToolbarItemId) {\n if (COMMAND_ITEMS.has(id)) {\n const command = commands.registry[id];\n if (!command) return null;\n return <ToolbarButton key={id} iconName={id} label={labelFor(id)} command={command} />;\n }\n\n switch (id) {\n case 'paragraphStyle':\n return (\n <select\n key={id}\n className=\"rne-select\"\n aria-label={strings.paragraphStyle}\n value={activeBlockValue(state)}\n onMouseDown={(e) => e.stopPropagation()}\n onChange={(e) => {\n const v = e.target.value;\n if (v === 'p') run(commands.blocks.setParagraph());\n else run(commands.blocks.setHeading(Number(v.slice(1))));\n }}\n >\n <option value=\"p\">{strings.paragraph}</option>\n {[1, 2, 3, 4, 5, 6].map((lvl) => (\n <option key={lvl} value={`h${lvl}`}>{`${strings.heading} ${lvl}`}</option>\n ))}\n </select>\n );\n case 'fontFamily':\n return (\n <select\n key={id}\n className=\"rne-select\"\n aria-label={strings.fontFamily}\n value={state ? (commands.marks.getActiveFontFamily(state) ?? '') : ''}\n onChange={(e) => {\n const v = e.target.value;\n run(v ? commands.marks.setFontFamily(v) : commands.marks.clearFontFamily());\n }}\n >\n <option value=\"\">{strings.fontFamily}</option>\n {fontFamilies.map((f) => (\n <option key={f} value={f} style={{ fontFamily: f }}>\n {f}\n </option>\n ))}\n </select>\n );\n case 'fontSize':\n return (\n <select\n key={id}\n className=\"rne-select\"\n style={{ maxWidth: 70 }}\n aria-label={strings.fontSize}\n value={state ? (commands.marks.getActiveFontSize(state) ?? '') : ''}\n onChange={(e) => {\n const v = e.target.value;\n run(v ? commands.marks.setFontSize(Number(v)) : commands.marks.clearFontSize());\n }}\n >\n <option value=\"\">{strings.fontSize}</option>\n {fontSizes.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n );\n case 'textColor':\n return (\n <ColorButton\n key={id}\n iconName=\"textColor\"\n label={strings.textColor}\n apply={(c) => commands.marks.setTextColor(c)}\n clear={() => commands.marks.clearTextColor()}\n activeColor={state ? commands.marks.getActiveTextColor(state) : null}\n />\n );\n case 'highlight':\n return (\n <ColorButton\n key={id}\n iconName=\"highlight\"\n label={strings.highlight}\n apply={(c) => commands.marks.setHighlight(c)}\n clear={() => commands.marks.clearHighlight()}\n />\n );\n case 'link':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.link}\n aria-label={strings.link}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n if (!state) return;\n const prev = commands.links.getActiveLink(state);\n const url = window.prompt(strings.linkPrompt, prev?.href ?? 'https://');\n if (url === null) return;\n if (url.trim() === '') run(commands.links.removeLink);\n else run(commands.links.setLink({ href: url.trim() }));\n }}\n >\n <ToolbarIcon name=\"link\" />\n </button>\n );\n case 'image':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.image}\n aria-label={strings.image}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n const url = window.prompt(strings.imagePrompt, 'https://');\n if (!url || !url.trim()) return;\n // Prompt for alt text so inserted images are accessible (NF-4).\n const alt = window.prompt(strings.imageAltPrompt, '');\n run(commands.insert.image({ src: url.trim(), alt: alt?.trim() || null }));\n }}\n >\n <ToolbarIcon name=\"image\" />\n </button>\n );\n case 'table':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.insertTable}\n aria-label={strings.insertTable}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => run(commands.insert.table(3, 3, true))}\n >\n <ToolbarIcon name=\"table\" />\n </button>\n );\n case 'importDocx':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.importDocx}\n aria-label={strings.importDocx}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => fileInputRef.current?.click()}\n >\n <ToolbarIcon name=\"importDocx\" />\n </button>\n );\n default:\n return null;\n }\n }\n\n return (\n <div\n ref={toolbarRef}\n className={`rne-toolbar${sticky ? ' rne-toolbar--sticky' : ''}`}\n role=\"toolbar\"\n aria-label=\"Formatting\"\n onKeyDown={onToolbarKeyDown}\n >\n {renderedGroups.map((group, gi) => (\n <Fragment key={gi}>\n {gi > 0 && <span className=\"rne-toolbar-separator\" aria-hidden=\"true\" />}\n <div className=\"rne-toolbar-group\">{group.map(renderItem)}</div>\n </Fragment>\n ))}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={onImportFile}\n />\n </div>\n );\n}\n\nfunction isItemAvailable(\n id: ToolbarItemId,\n features: FeatureFlags,\n commands: ReturnType<typeof useEditorContext>['commands'],\n): boolean {\n if (id === 'separator') return false;\n const feature = FEATURE_OF[id];\n if (feature && !features[feature]) return false;\n if (COMMAND_ITEMS.has(id) && !commands.registry[id]) return false;\n return true;\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { SaveStatus } from '../config/types';\nimport { countDocument, type DocumentStats } from '../core/utils';\nimport { useEditorContext } from './EditorContext';\n\nconst STATUS_LABEL: Record<SaveStatus, string> = {\n idle: '',\n savingLocal: 'Saving…',\n savedLocal: 'Saved locally',\n syncing: 'Syncing…',\n synced: 'Synced',\n syncFailed: 'Sync failed',\n offline: 'Offline',\n};\n\ninterface StatusBarProps {\n saveStatus: SaveStatus;\n hasPersistence: boolean;\n}\n\n/**\n * Word/character count (F-4.5) and visible save/sync status (F-9.4, NF-10).\n *\n * The count is an O(n) document walk, so it is recomputed only when the document\n * actually changes (not on selection changes) and is debounced — keeping typing\n * responsive on large documents (NF-1).\n */\nexport function StatusBar({ saveStatus, hasPersistence }: StatusBarProps) {\n const { state, strings } = useEditorContext();\n const doc = state?.doc;\n const [stats, setStats] = useState<DocumentStats | null>(null);\n\n useEffect(() => {\n if (!doc) {\n setStats(null);\n return;\n }\n // `doc` identity is stable across selection-only transactions, so this fires\n // only on real edits. Debounce to avoid walking a large doc on every keystroke.\n const id = setTimeout(() => setStats(countDocument(doc)), 300);\n return () => clearTimeout(id);\n }, [doc]);\n\n return (\n <div className=\"rne-statusbar\">\n <span>\n {stats\n ? `${stats.words} ${strings.words} · ${stats.characters} ${strings.characters}`\n : ''}\n </span>\n {hasPersistence && saveStatus !== 'idle' && (\n <span className=\"rne-status-badge\">\n <span className={`rne-status-dot rne-status-dot--${saveStatus}`} />\n {STATUS_LABEL[saveStatus]}\n </span>\n )}\n </div>\n );\n}\n","'use client';\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { EditorView } from 'prosemirror-view';\nimport { type Command, EditorState, TextSelection } from 'prosemirror-state';\nimport { Node as PMNode, type Schema } from 'prosemirror-model';\n\nimport type { DocumentJSON, EditorStrings, FeatureFlags, PageConfig, SaveStatus } from '../config/types';\nimport {\n DEFAULT_COLOR_PALETTE,\n DEFAULT_FEATURES,\n DEFAULT_FONT_FAMILIES,\n DEFAULT_FONT_SIZES,\n DEFAULT_PAGE,\n DEFAULT_STRINGS,\n resolvePageDimensions,\n themeToCssVars,\n} from '../config/defaults';\nimport { buildSchema } from '../core/schema/schema';\nimport { buildPlugins } from '../core/plugins/index';\nimport type { PaginationGeometry } from '../core/pagination/plugin';\nimport { createCommands, type CommandSet } from '../core/commands/index';\nimport { createDoc, createEditorState } from '../core/state/createEditorState';\nimport { preloadSanitizer } from '../security/sanitize';\nimport { documentToText } from '../export/text';\nimport { documentToHtml } from '../export/html';\nimport { exportDocument } from '../export/index';\nimport { DocumentPersistence } from '../persistence/autosave';\nimport { IndexedDBStore, requestPersistentStorage } from '../persistence/indexeddb';\nimport { ConnectivityMonitor } from '../sync/connectivity';\nimport { SyncEngine } from '../sync/engine';\nimport { EditorContext } from './EditorContext';\nimport { EditorErrorBoundary } from './ErrorBoundary';\nimport { Toolbar } from './toolbar/Toolbar';\nimport { StatusBar } from './StatusBar';\nimport type { EditorContextValue, EditorProps, EditorRef } from './types';\n\ninterface ResolvedConfig {\n features: FeatureFlags;\n page: PageConfig;\n strings: EditorStrings;\n fontFamilies: string[];\n fontSizes: number[];\n colorPalette: string[];\n editable: boolean;\n placeholder: string | undefined;\n}\n\nfunction resolveConfig(props: EditorProps): ResolvedConfig {\n return {\n features: { ...DEFAULT_FEATURES, ...props.features },\n page: {\n ...DEFAULT_PAGE,\n ...props.page,\n margins: { ...DEFAULT_PAGE.margins, ...props.page?.margins },\n },\n strings: { ...DEFAULT_STRINGS, ...props.strings },\n fontFamilies: props.fontFamilies ?? DEFAULT_FONT_FAMILIES,\n fontSizes: props.fontSizes ?? DEFAULT_FONT_SIZES,\n colorPalette: props.colorPalette ?? DEFAULT_COLOR_PALETTE,\n editable: !(props.readOnly || props.mode === 'readonly'),\n placeholder: props.placeholder,\n };\n}\n\n/** CSS pixels per millimetre at 96 DPI (the CSS reference). */\nconst PX_PER_MM = 96 / 25.4;\n/** Visual gap (px) drawn on the canvas between consecutive page sheets. */\nconst PAGE_GAP_PX = 24;\n\n/** Convert a page configuration (mm) into concrete pixel geometry, or null. */\nfunction computePaginationGeometry(page: PageConfig): PaginationGeometry | null {\n if (page.pagination !== 'visual') return null;\n const { width, height } = resolvePageDimensions(page);\n const m = page.margins;\n const pageWidthPx = width * PX_PER_MM;\n const pageHeightPx = height * PX_PER_MM;\n const marginTopPx = m.top * PX_PER_MM;\n const marginBottomPx = m.bottom * PX_PER_MM;\n const marginLeftPx = m.left * PX_PER_MM;\n const contentWidthPx = Math.max(1, (width - m.left - m.right) * PX_PER_MM);\n const contentHeightPx = pageHeightPx - marginTopPx - marginBottomPx;\n if (contentHeightPx <= 0) return null;\n return {\n pageWidthPx,\n pageHeightPx,\n marginTopPx,\n marginBottomPx,\n marginLeftPx,\n contentWidthPx,\n contentHeightPx,\n interPageOffsetPx: marginBottomPx + PAGE_GAP_PX + marginTopPx,\n };\n}\n\nconst EditorInner = forwardRef<EditorRef, EditorProps>(function EditorInner(props, ref) {\n const mountRef = useRef<HTMLDivElement | null>(null);\n const viewRef = useRef<EditorView | null>(null);\n const persistenceRef = useRef<DocumentPersistence | null>(null);\n const pageBgRef = useRef<HTMLDivElement | null>(null);\n const remeasureRef = useRef<(() => void) | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n const config = useMemo(() => resolveConfig(props), [props]);\n const cfgRef = useRef(config);\n cfgRef.current = config;\n\n // Build the editing engine (schema + commands) once per feature set + placeholder.\n const featureKey = useMemo(() => JSON.stringify(config.features), [config.features]);\n const engine = useMemo(() => {\n const schema: Schema = buildSchema(config.features);\n const commands: CommandSet = createCommands(schema);\n return { schema, commands };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [featureKey]);\n\n const [editorState, setEditorState] = useState<EditorState | null>(null);\n const [saveStatus, setSaveStatus] = useState<SaveStatus>('idle');\n const [ready, setReady] = useState(false);\n\n // ---- Imperative handle (F-10.15, F-10.16) ----\n const getJSON = useCallback((): DocumentJSON => {\n const view = viewRef.current;\n return (view ? view.state.doc.toJSON() : createDoc(engine.schema, null).toJSON()) as DocumentJSON;\n }, [engine.schema]);\n\n const setContent = useCallback(\n (content: DocumentJSON | string | null) => {\n const view = viewRef.current;\n if (!view) return;\n const doc = createDoc(view.state.schema, content);\n const state = EditorState.create({ doc, plugins: view.state.plugins });\n view.updateState(state);\n setEditorState(state);\n },\n [],\n );\n\n const importDocxIntoEditor = useCallback(\n async (file: ArrayBuffer | Uint8Array | Blob): Promise<{ warnings: string[] }> => {\n const view = viewRef.current;\n if (!view) return { warnings: [] };\n const { importDocx } = await import('../import/docx');\n const result = await importDocx(file, view.state.schema);\n // Replace the whole document via a dispatched transaction so the change is\n // undoable and flows through onChange/autosave like any other edit.\n const node = PMNode.fromJSON(view.state.schema, result.doc);\n const v = viewRef.current;\n if (v) {\n const tr = v.state.tr.replaceWith(0, v.state.doc.content.size, node.content);\n v.dispatch(tr.scrollIntoView());\n }\n return { warnings: result.warnings };\n },\n [],\n );\n\n const handle = useMemo<EditorRef>(\n () => ({\n getJSON,\n getText: (options) => documentToText(getJSON(), options),\n getHTML: () => documentToHtml(getJSON()),\n setContent,\n importDocx: importDocxIntoEditor,\n focus: () => viewRef.current?.focus(),\n isDirty: () => persistenceRef.current?.isDirty() ?? false,\n save: async () => {\n await persistenceRef.current?.saveNow(getJSON());\n },\n clearLocalData: async () => {\n await persistenceRef.current?.clearLocal();\n },\n exportAs: (format, filename) =>\n exportDocument(getJSON(), format, {\n filename: filename ?? propsRef.current.documentId,\n page: cfgRef.current.page,\n title: filename ?? propsRef.current.documentId,\n }),\n getView: () => viewRef.current,\n getState: () => viewRef.current?.state ?? null,\n getSchema: () => viewRef.current?.state.schema ?? null,\n }),\n [getJSON, setContent, importDocxIntoEditor],\n );\n\n useImperativeHandle(ref, () => handle, [handle]);\n\n // ---- Create the ProseMirror view once (golden rule: PM owns the DOM) ----\n useEffect(() => {\n const mount = mountRef.current;\n if (!mount) return;\n\n void preloadSanitizer();\n\n const paginated = cfgRef.current.page.pagination === 'visual';\n const plugins = buildPlugins(engine.schema, {\n placeholder: cfgRef.current.placeholder,\n history: cfgRef.current.features.history,\n extraPlugins: propsRef.current.extensions?.plugins,\n pagination: paginated\n ? {\n getGeometry: () => computePaginationGeometry(cfgRef.current.page),\n getBackgroundLayer: () => pageBgRef.current,\n header: cfgRef.current.page.header,\n footer: cfgRef.current.page.footer,\n register: (fn) => {\n remeasureRef.current = fn;\n },\n }\n : undefined,\n });\n\n const initialContent =\n propsRef.current.value ?? propsRef.current.initialContent ?? null;\n const state = createEditorState({ schema: engine.schema, plugins, content: initialContent });\n\n const view = new EditorView(mount, {\n state,\n editable: () => !(propsRef.current.readOnly || propsRef.current.mode === 'readonly'),\n attributes: {\n class: 'rne-prosemirror',\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': propsRef.current.ariaLabel ?? 'Document editor',\n dir: propsRef.current.dir ?? 'ltr',\n },\n dispatchTransaction(tr) {\n const v = viewRef.current;\n if (!v) return;\n const newState = v.state.apply(tr);\n v.updateState(newState);\n setEditorState(newState);\n\n const p = propsRef.current;\n if (tr.docChanged) {\n const json = newState.doc.toJSON() as DocumentJSON;\n p.onChange?.(json, handle);\n persistenceRef.current?.scheduleSave(json);\n }\n if (tr.selectionSet) {\n p.onSelectionChange?.(newState);\n }\n },\n });\n\n viewRef.current = view;\n setEditorState(view.state);\n setReady(true);\n propsRef.current.onReady?.(handle);\n\n return () => {\n view.destroy();\n viewRef.current = null;\n setReady(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [engine]);\n\n // ---- Keep editability in sync without recreating the view ----\n useEffect(() => {\n viewRef.current?.setProps({\n editable: () => config.editable,\n });\n // Re-render to update toolbar disabled state.\n setEditorState((s) => s);\n }, [config.editable]);\n\n // ---- Local persistence, crash recovery (F-9.2, F-11.9), and sync (F-9.6–F-9.9, F-9.14) ----\n useEffect(() => {\n const documentId = props.documentId;\n const persistenceEnabled = props.persistence?.enabled ?? !!documentId;\n if (!documentId || !persistenceEnabled || !ready) return;\n\n const store = props.persistence?.store ?? new IndexedDBStore();\n const sync = props.sync;\n const auto = sync?.auto ?? true;\n\n let engine: SyncEngine | null = null;\n let monitor: ConnectivityMonitor | null = null;\n\n // Shared status handler: surfaces both local-save and sync transitions, and\n // triggers an upload after each successful local save when online (F-9.6).\n const handleStatus = (status: SaveStatus, detail?: { error?: string }) => {\n setSaveStatus(status);\n propsRef.current.onSaveStatusChange?.(status, detail);\n if (status === 'savedLocal' && engine && auto && (monitor?.isOnline() ?? true)) {\n void engine.flush();\n }\n };\n\n const persistence = new DocumentPersistence({\n documentId,\n store,\n debounceMs: props.persistence?.debounceMs,\n metadata: props.metadata,\n onStatus: handleStatus,\n });\n persistenceRef.current = persistence;\n\n if (sync?.remote) {\n engine = new SyncEngine({\n store,\n remote: sync.remote,\n maxAttempts: sync.maxAttempts,\n onStatus: handleStatus,\n onConflict: sync.onConflict,\n });\n const remotePing = sync.remote.ping?.bind(sync.remote);\n monitor = new ConnectivityMonitor({\n ping: remotePing,\n intervalMs: sync.pingIntervalMs,\n onChange: (online) => {\n if (online) {\n if (auto && engine) void engine.flush();\n } else {\n handleStatus('offline');\n }\n },\n });\n monitor.start();\n if (auto) void engine.flush(); // attempt to drain any queue from a prior session\n }\n\n if (props.persistence?.requestPersistent !== false) {\n void requestPersistentStorage();\n }\n\n let cancelled = false;\n void (async () => {\n const record = await persistence.load();\n if (cancelled || !record) return;\n // Only restore from local storage when no explicit controlled value is set.\n if (propsRef.current.value == null) {\n setContent(record.doc);\n }\n })();\n\n return () => {\n cancelled = true;\n monitor?.stop();\n engine?.cancel();\n void persistence.destroy();\n persistenceRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.documentId, ready, props.sync?.remote]);\n\n // ---- Controlled value sync (F-10.20) ----\n useEffect(() => {\n const view = viewRef.current;\n if (!view || props.value == null) return;\n const current = JSON.stringify(view.state.doc.toJSON());\n const next = JSON.stringify(props.value);\n if (current === next) return;\n const doc = createDoc(view.state.schema, props.value);\n const selectionPos = Math.min(view.state.selection.from, doc.content.size);\n const state = EditorState.create({ doc, plugins: view.state.plugins });\n const withSel = state.apply(\n state.tr.setSelection(TextSelection.create(state.doc, Math.max(0, selectionPos))),\n );\n view.updateState(withSel);\n setEditorState(withSel);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.value]);\n\n // ---- Context for toolbar/children ----\n const runCommand = useCallback((command: Command): boolean => {\n const view = viewRef.current;\n if (!view) return false;\n const result = command(view.state, view.dispatch, view);\n view.focus();\n return result;\n }, []);\n\n const contextValue = useMemo<EditorContextValue>(\n () => ({\n view: viewRef.current,\n state: editorState,\n schema: engine.schema,\n commands: engine.commands,\n strings: config.strings,\n features: config.features,\n fontFamilies: config.fontFamilies,\n fontSizes: config.fontSizes,\n colorPalette: config.colorPalette,\n editable: config.editable,\n run: runCommand,\n importDocx: importDocxIntoEditor,\n }),\n [editorState, engine, config, runCommand, importDocxIntoEditor],\n );\n\n // ---- Layout / page surface ----\n const { width } = resolvePageDimensions(config.page);\n const showChrome = config.page.showPageChrome;\n const paginated = config.page.pagination === 'visual';\n\n // Stable signature of the page geometry; force a re-measure when it changes.\n const pageGeometryKey = useMemo(\n () =>\n JSON.stringify({\n p: config.page.pagination,\n s: config.page.size,\n o: config.page.orientation,\n w: config.page.widthMm,\n h: config.page.heightMm,\n m: config.page.margins,\n hdr: config.page.header,\n ftr: config.page.footer,\n }),\n [config.page],\n );\n useEffect(() => {\n if (paginated) remeasureRef.current?.();\n }, [pageGeometryKey, paginated]);\n\n const geometry = useMemo(\n () => computePaginationGeometry(config.page),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [pageGeometryKey],\n );\n\n const rootStyle = useMemo(() => {\n const base: Record<string, string> = {\n ...themeToCssVars(props.theme),\n '--rne-page-width': `${width}mm`,\n '--rne-page-padding': `${config.page.margins.top}mm ${config.page.margins.right}mm ${config.page.margins.bottom}mm ${config.page.margins.left}mm`,\n };\n if (geometry) {\n base['--rne-page-w'] = `${geometry.pageWidthPx}px`;\n base['--rne-page-h'] = `${geometry.pageHeightPx}px`;\n base['--rne-content-w'] = `${geometry.contentWidthPx}px`;\n base['--rne-mt'] = `${geometry.marginTopPx}px`;\n base['--rne-ml'] = `${geometry.marginLeftPx}px`;\n }\n return { ...base, ...(props.style as Record<string, string> | undefined) };\n }, [props.theme, props.style, width, config.page.margins, geometry]);\n\n const toolbarEnabled = props.toolbar !== false && (props.toolbar?.enabled ?? true) && config.editable;\n const statusBarEnabled = props.statusBar ?? true;\n\n return (\n <EditorContext.Provider value={contextValue}>\n <div\n className={`rne-root${props.className ? ` ${props.className}` : ''}`}\n style={rootStyle as React.CSSProperties}\n data-ready={ready}\n dir={props.dir ?? 'ltr'}\n >\n {toolbarEnabled && <Toolbar config={props.toolbar || undefined} />}\n {props.children}\n <div\n className={`rne-canvas${showChrome ? '' : ' rne-canvas--plain'}${paginated ? ' rne-canvas--paged' : ''}`}\n >\n {paginated ? (\n <div className=\"rne-paged\">\n <div ref={pageBgRef} className=\"rne-page-bg\" aria-hidden=\"true\" />\n <div ref={mountRef} className=\"rne-mount rne-mount--paged\" />\n </div>\n ) : (\n <div className=\"rne-page\">\n <div ref={mountRef} className=\"rne-mount\" />\n </div>\n )}\n </div>\n {statusBarEnabled && <StatusBar saveStatus={saveStatus} hasPersistence={!!props.documentId} />}\n </div>\n </EditorContext.Provider>\n );\n});\n\n/**\n * The embeddable rich document editor (F-10.17). Client-only — load via\n * `next/dynamic(() => import('react-next-editor').then(m => m.Editor), { ssr: false })`.\n * Wrapped in an error boundary so a failure never takes down the host (F-11.2).\n */\nexport const Editor = forwardRef<EditorRef, EditorProps>(function Editor(props, ref) {\n return (\n <EditorErrorBoundary onError={props.onError}>\n <EditorInner {...props} ref={ref} />\n </EditorErrorBoundary>\n );\n});\n"]}
1
+ {"version":3,"sources":["../src/react/EditorContext.ts","../src/react/ErrorBoundary.tsx","../src/react/toolbar/icons.tsx","../src/react/toolbar/ToolbarButton.tsx","../src/react/toolbar/ColorButton.tsx","../src/react/toolbar/Toolbar.tsx","../src/react/StatusBar.tsx","../src/react/Editor.tsx","../src/react/DocumentView.tsx"],"names":["createContext","useContext","Component","jsx","useState","useRef","useEffect","jsxs","importDocx","DEFAULT_TOOLBAR_GROUPS","useCallback","useMemo","Fragment","countDocument","DEFAULT_FEATURES","DEFAULT_PAGE","DEFAULT_STRINGS","DEFAULT_FONT_FAMILIES","DEFAULT_FONT_SIZES","DEFAULT_COLOR_PALETTE","resolvePageDimensions","forwardRef","EditorInner","buildSchema","createCommands","createDoc","EditorState","PMNode","documentToText","documentToHtml","exportDocument","useImperativeHandle","preloadSanitizer","paginated","buildPlugins","createEditorState","EditorView","IndexedDBStore","engine","DocumentPersistence","SyncEngine","ConnectivityMonitor","requestPersistentStorage","TextSelection","themeToCssVars","Editor","sanitizeHtmlSync"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { EditorContextValue } from './types';\n\n/** Context providing the live view/state/commands to the toolbar and children. */\nexport const EditorContext = createContext<EditorContextValue | null>(null);\n\n/** Access the editor context; throws if used outside an <Editor>. */\nexport function useEditorContext(): EditorContextValue {\n const ctx = useContext(EditorContext);\n if (!ctx) {\n throw new Error('useEditorContext must be used within a react-next-editor <Editor>.');\n }\n return ctx;\n}\n","'use client';\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n onError?: (error: Error) => void;\n fallbackMessage?: string;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\n/**\n * Wraps the editor so a failure in one feature/instance cannot bring down the\n * host app (F-11.2). Degrades to a recoverable state with a clear message and a\n * retry button; reports the error via `onError` for monitoring (F-11.8).\n */\nexport class EditorErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n // eslint-disable-next-line no-console\n console.error('[react-next-editor] Editor error contained by boundary:', error, info);\n this.props.onError?.(error);\n }\n\n private readonly handleReset = () => {\n this.setState({ error: null });\n };\n\n render(): ReactNode {\n if (this.state.error) {\n return (\n <div className=\"rne-root\">\n <div className=\"rne-error\" role=\"alert\">\n <strong>{this.props.fallbackMessage ?? 'The editor encountered a problem.'}</strong>\n <p>Your latest saved content is preserved locally. You can try to recover the editor.</p>\n <button type=\"button\" onClick={this.handleReset}>\n Reload editor\n </button>\n </div>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","'use client';\n\nimport type { JSX } from 'react';\n\n/**\n * Compact 24×24 inline SVG icons for toolbar controls. Inline so the package has\n * no icon-font dependency and icons inherit `currentColor` for theming.\n */\nconst PATHS: Record<string, JSX.Element> = {\n undo: <path d=\"M12 5V1L7 6l5 5V7a6 6 0 1 1-6 6H4a8 8 0 1 0 8-8z\" />,\n redo: <path d=\"M12 5V1l5 5-5 5V7a6 6 0 1 0 6 6h2a8 8 0 1 1-8-8z\" />,\n bold: (\n <path d=\"M7 5h6a3.5 3.5 0 0 1 1.5 6.66A3.5 3.5 0 0 1 13 19H7V5zm3 2v3h3a1.5 1.5 0 0 0 0-3h-3zm0 5v4h3a2 2 0 0 0 0-4h-3z\" />\n ),\n italic: <path d=\"M10 4h7v2h-2.3l-3 12H14v2H7v-2h2.3l3-12H10V4z\" />,\n underline: <path d=\"M6 4v7a6 6 0 0 0 12 0V4h-2.5v7a3.5 3.5 0 0 1-7 0V4H6zm-1 16h14v2H5v-2z\" />,\n strikethrough: (\n <path d=\"M3 11h18v2H3v-2zm9-7c2.5 0 4 1.3 4.3 3h-2.4c-.2-.7-.8-1.2-1.9-1.2-1.2 0-2 .6-2 1.5 0 .5.3.9 1 1.2H9.2C8.5 9 8 8.2 8 7.2 8 5.3 9.7 4 12 4zm2 11.5c0 1.9-1.6 3.5-4.2 3.5-2.6 0-4.3-1.4-4.5-3.4h2.4c.2.9 1 1.5 2.2 1.5 1.3 0 2.1-.6 2.1-1.6 0-.2 0-.4-.1-.5H14z\" />\n ),\n superscript: (\n <path d=\"M4 7l4 5-4 5h2.5L9 13.5 11.5 17H14l-4-5 4-5h-2.5L9 10.5 6.5 7H4zm16-1c0-.8-.6-1.5-1.7-1.5-.9 0-1.6.5-1.8 1.3h1c.1-.3.4-.5.8-.5.4 0 .7.2.7.6 0 .6-1 1-2.3 2.1V9h3.6v-.9h-1.9c1-.8 1.6-1.3 1.6-2.2z\" />\n ),\n subscript: (\n <path d=\"M4 4l4 5-4 5h2.5L9 10.5 11.5 14H14l-4-5 4-5h-2.5L9 7.5 6.5 4H4zm16 13c0-.8-.6-1.5-1.7-1.5-.9 0-1.6.5-1.8 1.3h1c.1-.3.4-.5.8-.5.4 0 .7.2.7.6 0 .6-1 1-2.3 2.1V20h3.6v-.9h-1.9c1-.8 1.6-1.3 1.6-2.1z\" />\n ),\n code: <path d=\"M9 7l-5 5 5 5 1.4-1.4L6.8 12l3.6-3.6L9 7zm6 0l-1.4 1.4L17.2 12l-3.6 3.6L15 17l5-5-5-5z\" />,\n textColor: <path d=\"M5 18h14v2H5v-2zM9.6 4h2.8l4.1 11h-2.3l-1-3H8.8l-1 3H5.5L9.6 4zm-.2 6.1h3.2L11 5.6 9.4 10.1z\" />,\n highlight: <path d=\"M4 18h16v3H4v-3zM15.6 3.4l3 3-7.8 7.8-3.6.6.6-3.6 7.8-7.8zM6 13l3 3H6v-3z\" />,\n clearFormatting: (\n <path d=\"M6 5v2h5l-2.8 9h2.5l2.8-9H19V5H6zM4.7 17.3 17.3 4.7l1.4 1.4L6.1 18.7l-1.4-1.4z\" />\n ),\n alignLeft: <path d=\"M3 4h18v2H3V4zm0 5h12v2H3V9zm0 5h18v2H3v-2zm0 5h12v2H3v-2z\" />,\n alignCenter: <path d=\"M3 4h18v2H3V4zm3 5h12v2H6V9zm-3 5h18v2H3v-2zm3 5h12v2H6v-2z\" />,\n alignRight: <path d=\"M3 4h18v2H3V4zm6 5h12v2H9V9zm-6 5h18v2H3v-2zm6 5h12v2H9v-2z\" />,\n alignJustify: <path d=\"M3 4h18v2H3V4zm0 5h18v2H3V9zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\" />,\n bulletList: (\n <path d=\"M4 5.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm4 .5h13v2H8V6zm-4 4.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm4 .5h13v2H8v-2zm-4 4.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm4 .5h13v2H8v-2z\" />\n ),\n orderedList: (\n <path d=\"M3 6h1V3H2v1h1v2zm5 0h13v2H8V6zm0 5h13v2H8v-2zm0 5h13v2H8v-2zM2 12.8h2v.5H3v.5h1v.5H2v.7h3v-3H2v.8zm1 4.2H2v.8h1.8v.4L2 19v.9h3V17H4l-1 .5V17z\" />\n ),\n taskList: (\n <path d=\"M3 5h6v6H3V5zm2 2v2h2V7H5zm6-1h10v2H11V6zm0 5h10v2H11v-2zm0 5h10v2H11v-2zM3 15.4l1.4-1.4 1.1 1.1 2.6-2.6L9.5 14l-4 4L3 15.4z\" />\n ),\n indent: <path d=\"M3 4h18v2H3V4zm8 5h10v2H11V9zm0 5h10v2H11v-2zm-8 5h18v2H3v-2zm0-9 4 3-4 3V10z\" />,\n outdent: <path d=\"M3 4h18v2H3V4zm8 5h10v2H11V9zm0 5h10v2H11v-2zm-8 5h18v2H3v-2zM7 10v6l-4-3 4-3z\" />,\n blockquote: (\n <path d=\"M7 7c-2 0-3.5 1.6-3.5 3.6 0 1.8 1.3 3 2.9 3 .2 0 .4 0 .6-.1-.4 1-1.4 1.8-2.5 2.1l.6 1.4C7.7 16.9 9.5 14.8 9.5 12 9.5 9.2 8.4 7 7 7zm9 0c-2 0-3.5 1.6-3.5 3.6 0 1.8 1.3 3 2.9 3 .2 0 .4 0 .6-.1-.4 1-1.4 1.8-2.5 2.1l.6 1.4c2.1-.6 3.9-2.7 3.9-5.5C18.5 9.2 17.4 7 16 7z\" />\n ),\n horizontalRule: <path d=\"M3 11h18v2H3v-2z\" />,\n link: (\n <path d=\"M10.6 13.4a1 1 0 0 0 1.4 0l3-3a3 3 0 0 0-4.3-4.3l-1.5 1.5 1.4 1.4 1.5-1.5a1 1 0 0 1 1.5 1.5l-3 3a1 1 0 0 0 0 1.4zm2.8-2.8a1 1 0 0 0-1.4 0l-3 3A3 3 0 0 0 13.3 18l1.5-1.5-1.4-1.4-1.5 1.5a1 1 0 0 1-1.5-1.5l3-3a1 1 0 0 0 0-1.4z\" />\n ),\n image: (\n <path d=\"M4 4h16a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1zm1 2v9l4-4 3 3 3-3 3 3V6H5zm3 1.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3z\" />\n ),\n table: (\n <path d=\"M3 4h18v16H3V4zm2 2v3h5V6H5zm7 0v3h7V6h-7zm-7 5v3h5v-3H5zm7 0v3h7v-3h-7zm-7 5v2h5v-2H5zm7 0v2h7v-2h-7z\" />\n ),\n pageBreak: (\n <path d=\"M6 3h8l4 4v4h-2V8h-3V5H6v6H4V3h2zm-2 13h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v5H4v-5z\" />\n ),\n importDocx: (\n <path d=\"M5 3h9l5 5v6h-2V9h-4V5H7v14h5v2H5V3zm8 11 4 4 4-4h-3v-4h-2v4h-3z\" />\n ),\n};\n\nexport function ToolbarIcon({ name }: { name: string }): JSX.Element {\n const path = PATHS[name];\n if (!path) {\n return <span aria-hidden=\"true\">{name.slice(0, 2)}</span>;\n }\n return (\n <svg className=\"rne-btn-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {path}\n </svg>\n );\n}\n","'use client';\n\nimport type { EditorCommand } from '../../core/commands/helpers';\nimport { useEditorContext } from '../EditorContext';\nimport { ToolbarIcon } from './icons';\n\ninterface ToolbarButtonProps {\n iconName: string;\n label: string;\n command: EditorCommand;\n}\n\n/** A single command button reflecting active/enabled state (F-10.6, NF-4). */\nexport function ToolbarButton({ iconName, label, command }: ToolbarButtonProps) {\n const { state, run } = useEditorContext();\n const active = state ? (command.isActive?.(state) ?? false) : false;\n const enabled = state ? (command.isEnabled ? command.isEnabled(state) : true) : false;\n\n return (\n <button\n type=\"button\"\n className={`rne-btn${active ? ' rne-btn--active' : ''}`}\n title={label}\n aria-label={label}\n aria-pressed={command.isActive ? active : undefined}\n disabled={!enabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => run(command.run)}\n >\n <ToolbarIcon name={iconName} />\n </button>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport type { Command } from 'prosemirror-state';\nimport { useEditorContext } from '../EditorContext';\nimport { ToolbarIcon } from './icons';\n\ninterface ColorButtonProps {\n iconName: 'textColor' | 'highlight';\n label: string;\n /** Build a command that applies the chosen color. */\n apply: (color: string) => Command;\n /** Build a command that clears the color, if supported. */\n clear?: () => Command;\n /** The currently-active color, for the swatch. */\n activeColor?: string | null;\n}\n\n/** A color picker button with a palette popover (text color / highlight). */\nexport function ColorButton({ iconName, label, apply, clear, activeColor }: ColorButtonProps) {\n const { run, colorPalette } = useEditorContext();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [open]);\n\n return (\n <div className=\"rne-color-btn\" ref={containerRef}>\n <button\n ref={buttonRef}\n type=\"button\"\n className=\"rne-btn\"\n title={label}\n aria-label={label}\n aria-haspopup=\"true\"\n aria-expanded={open}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((v) => !v)}\n >\n <span style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <ToolbarIcon name={iconName} />\n <span className=\"rne-color-swatch\" style={{ background: activeColor ?? '#000' }} />\n </span>\n </button>\n {open && (\n <div\n className=\"rne-color-popover\"\n role=\"menu\"\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n setOpen(false);\n buttonRef.current?.focus();\n }\n }}\n >\n {colorPalette.map((color) => (\n <button\n key={color}\n type=\"button\"\n className=\"rne-color-cell\"\n style={{ background: color }}\n title={color}\n aria-label={color}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n run(apply(color));\n setOpen(false);\n }}\n />\n ))}\n {clear && (\n <button\n type=\"button\"\n className=\"rne-color-cell\"\n style={{ background: '#fff', gridColumn: 'span 8', height: 22 }}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n run(clear());\n setOpen(false);\n }}\n >\n ✕\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { type ChangeEvent, Fragment, type KeyboardEvent, useCallback, useMemo, useRef } from 'react';\nimport type { EditorState } from 'prosemirror-state';\nimport type { FeatureFlags, ToolbarConfig, ToolbarItemId } from '../../config/types';\nimport { DEFAULT_TOOLBAR_GROUPS } from '../../config/defaults';\nimport { useEditorContext } from '../EditorContext';\nimport { ToolbarButton } from './ToolbarButton';\nimport { ColorButton } from './ColorButton';\nimport { ToolbarIcon } from './icons';\n\nconst FEATURE_OF: Partial<Record<ToolbarItemId, keyof FeatureFlags>> = {\n bold: 'bold',\n italic: 'italic',\n underline: 'underline',\n strikethrough: 'strikethrough',\n superscript: 'superscript',\n subscript: 'subscript',\n code: 'code',\n paragraphStyle: 'headings',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n textColor: 'textColor',\n highlight: 'highlight',\n clearFormatting: 'clearFormatting',\n alignLeft: 'alignment',\n alignCenter: 'alignment',\n alignRight: 'alignment',\n alignJustify: 'alignment',\n bulletList: 'bulletList',\n orderedList: 'orderedList',\n taskList: 'taskList',\n indent: 'indentation',\n outdent: 'indentation',\n blockquote: 'blockquote',\n horizontalRule: 'horizontalRule',\n link: 'link',\n image: 'image',\n table: 'table',\n pageBreak: 'pageBreak',\n importDocx: 'docxImport',\n undo: 'history',\n redo: 'history',\n};\n\n/** Item ids backed directly by a registry command (rendered as icon buttons). */\nconst COMMAND_ITEMS = new Set<ToolbarItemId>([\n 'undo',\n 'redo',\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'superscript',\n 'subscript',\n 'code',\n 'clearFormatting',\n 'alignLeft',\n 'alignCenter',\n 'alignRight',\n 'alignJustify',\n 'bulletList',\n 'orderedList',\n 'taskList',\n 'indent',\n 'outdent',\n 'blockquote',\n 'horizontalRule',\n 'pageBreak',\n]);\n\nfunction activeBlockValue(state: EditorState | null): string {\n if (!state) return 'p';\n const node = state.selection.$head.parent;\n if (node.type.name === 'heading') return `h${node.attrs.level as number}`;\n return 'p';\n}\n\ninterface ToolbarProps {\n config?: ToolbarConfig;\n}\n\n/** Data-driven, keyboard-accessible toolbar (F-1–F-3, F-10.6, NF-4). */\nexport function Toolbar({ config }: ToolbarProps) {\n const ctx = useEditorContext();\n const { state, commands, strings, features, run, fontFamilies, fontSizes, importDocx } = ctx;\n\n const groups = config?.groups ?? DEFAULT_TOOLBAR_GROUPS;\n const sticky = config?.sticky ?? true;\n const toolbarRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const onImportFile = useCallback(\n async (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n e.target.value = ''; // allow re-importing the same file\n if (!file) return;\n try {\n await importDocx(file);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[react-next-editor] DOCX import failed:', err);\n }\n },\n [importDocx],\n );\n\n // Arrow-key navigation between toolbar buttons (WCAG toolbar pattern). Tab\n // order is preserved; arrows move focus among enabled buttons. Selects keep\n // their native arrow behaviour (and remain reachable via Tab), so they are not\n // part of the arrow ring.\n const onToolbarKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) return;\n const active = document.activeElement as HTMLElement | null;\n if (active?.tagName === 'SELECT') return;\n const root = toolbarRef.current;\n if (!root) return;\n const items = Array.from(root.querySelectorAll<HTMLElement>('button:not([disabled])'));\n if (items.length === 0) return;\n const idx = active ? items.indexOf(active) : -1;\n if (idx === -1) return;\n e.preventDefault();\n let next = idx;\n if (e.key === 'ArrowRight') next = (idx + 1) % items.length;\n else if (e.key === 'ArrowLeft') next = (idx - 1 + items.length) % items.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = items.length - 1;\n items[next]?.focus();\n }, []);\n\n const renderedGroups = useMemo(() => {\n return groups\n .map((group) => group.filter((id) => isItemAvailable(id, features, commands)))\n .filter((group) => group.length > 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [groups, features, commands]);\n\n const labelFor = (id: ToolbarItemId): string =>\n (strings as unknown as Record<string, string>)[id] ?? id;\n\n function renderItem(id: ToolbarItemId) {\n if (COMMAND_ITEMS.has(id)) {\n const command = commands.registry[id];\n if (!command) return null;\n return <ToolbarButton key={id} iconName={id} label={labelFor(id)} command={command} />;\n }\n\n switch (id) {\n case 'paragraphStyle':\n return (\n <select\n key={id}\n className=\"rne-select\"\n aria-label={strings.paragraphStyle}\n value={activeBlockValue(state)}\n onMouseDown={(e) => e.stopPropagation()}\n onChange={(e) => {\n const v = e.target.value;\n if (v === 'p') run(commands.blocks.setParagraph());\n else run(commands.blocks.setHeading(Number(v.slice(1))));\n }}\n >\n <option value=\"p\">{strings.paragraph}</option>\n {[1, 2, 3, 4, 5, 6].map((lvl) => (\n <option key={lvl} value={`h${lvl}`}>{`${strings.heading} ${lvl}`}</option>\n ))}\n </select>\n );\n case 'fontFamily':\n return (\n <select\n key={id}\n className=\"rne-select\"\n aria-label={strings.fontFamily}\n value={state ? (commands.marks.getActiveFontFamily(state) ?? '') : ''}\n onChange={(e) => {\n const v = e.target.value;\n run(v ? commands.marks.setFontFamily(v) : commands.marks.clearFontFamily());\n }}\n >\n <option value=\"\">{strings.fontFamily}</option>\n {fontFamilies.map((f) => (\n <option key={f} value={f} style={{ fontFamily: f }}>\n {f}\n </option>\n ))}\n </select>\n );\n case 'fontSize':\n return (\n <select\n key={id}\n className=\"rne-select\"\n style={{ maxWidth: 70 }}\n aria-label={strings.fontSize}\n value={state ? (commands.marks.getActiveFontSize(state) ?? '') : ''}\n onChange={(e) => {\n const v = e.target.value;\n run(v ? commands.marks.setFontSize(Number(v)) : commands.marks.clearFontSize());\n }}\n >\n <option value=\"\">{strings.fontSize}</option>\n {fontSizes.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n );\n case 'textColor':\n return (\n <ColorButton\n key={id}\n iconName=\"textColor\"\n label={strings.textColor}\n apply={(c) => commands.marks.setTextColor(c)}\n clear={() => commands.marks.clearTextColor()}\n activeColor={state ? commands.marks.getActiveTextColor(state) : null}\n />\n );\n case 'highlight':\n return (\n <ColorButton\n key={id}\n iconName=\"highlight\"\n label={strings.highlight}\n apply={(c) => commands.marks.setHighlight(c)}\n clear={() => commands.marks.clearHighlight()}\n />\n );\n case 'link':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.link}\n aria-label={strings.link}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n if (!state) return;\n const prev = commands.links.getActiveLink(state);\n const url = window.prompt(strings.linkPrompt, prev?.href ?? 'https://');\n if (url === null) return;\n if (url.trim() === '') run(commands.links.removeLink);\n else run(commands.links.setLink({ href: url.trim() }));\n }}\n >\n <ToolbarIcon name=\"link\" />\n </button>\n );\n case 'image':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.image}\n aria-label={strings.image}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n const url = window.prompt(strings.imagePrompt, 'https://');\n if (!url || !url.trim()) return;\n // Prompt for alt text so inserted images are accessible (NF-4).\n const alt = window.prompt(strings.imageAltPrompt, '');\n run(commands.insert.image({ src: url.trim(), alt: alt?.trim() || null }));\n }}\n >\n <ToolbarIcon name=\"image\" />\n </button>\n );\n case 'table':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.insertTable}\n aria-label={strings.insertTable}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => run(commands.insert.table(3, 3, true))}\n >\n <ToolbarIcon name=\"table\" />\n </button>\n );\n case 'importDocx':\n return (\n <button\n key={id}\n type=\"button\"\n className=\"rne-btn\"\n title={strings.importDocx}\n aria-label={strings.importDocx}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => fileInputRef.current?.click()}\n >\n <ToolbarIcon name=\"importDocx\" />\n </button>\n );\n default:\n return null;\n }\n }\n\n return (\n <div\n ref={toolbarRef}\n className={`rne-toolbar${sticky ? ' rne-toolbar--sticky' : ''}`}\n role=\"toolbar\"\n aria-label=\"Formatting\"\n onKeyDown={onToolbarKeyDown}\n >\n {renderedGroups.map((group, gi) => (\n <Fragment key={gi}>\n {gi > 0 && <span className=\"rne-toolbar-separator\" aria-hidden=\"true\" />}\n <div className=\"rne-toolbar-group\">{group.map(renderItem)}</div>\n </Fragment>\n ))}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={onImportFile}\n />\n </div>\n );\n}\n\nfunction isItemAvailable(\n id: ToolbarItemId,\n features: FeatureFlags,\n commands: ReturnType<typeof useEditorContext>['commands'],\n): boolean {\n if (id === 'separator') return false;\n const feature = FEATURE_OF[id];\n if (feature && !features[feature]) return false;\n if (COMMAND_ITEMS.has(id) && !commands.registry[id]) return false;\n return true;\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { SaveStatus } from '../config/types';\nimport { countDocument, type DocumentStats } from '../core/utils';\nimport { useEditorContext } from './EditorContext';\n\nconst STATUS_LABEL: Record<SaveStatus, string> = {\n idle: '',\n savingLocal: 'Saving…',\n savedLocal: 'Saved locally',\n syncing: 'Syncing…',\n synced: 'Synced',\n syncFailed: 'Sync failed',\n offline: 'Offline',\n};\n\ninterface StatusBarProps {\n saveStatus: SaveStatus;\n hasPersistence: boolean;\n}\n\n/**\n * Word/character count (F-4.5) and visible save/sync status (F-9.4, NF-10).\n *\n * The count is an O(n) document walk, so it is recomputed only when the document\n * actually changes (not on selection changes) and is debounced — keeping typing\n * responsive on large documents (NF-1).\n */\nexport function StatusBar({ saveStatus, hasPersistence }: StatusBarProps) {\n const { state, strings } = useEditorContext();\n const doc = state?.doc;\n const [stats, setStats] = useState<DocumentStats | null>(null);\n\n useEffect(() => {\n if (!doc) {\n setStats(null);\n return;\n }\n // `doc` identity is stable across selection-only transactions, so this fires\n // only on real edits. Debounce to avoid walking a large doc on every keystroke.\n const id = setTimeout(() => setStats(countDocument(doc)), 300);\n return () => clearTimeout(id);\n }, [doc]);\n\n return (\n <div className=\"rne-statusbar\">\n <span>\n {stats\n ? `${stats.words} ${strings.words} · ${stats.characters} ${strings.characters}`\n : ''}\n </span>\n {hasPersistence && saveStatus !== 'idle' && (\n <span className=\"rne-status-badge\">\n <span className={`rne-status-dot rne-status-dot--${saveStatus}`} />\n {STATUS_LABEL[saveStatus]}\n </span>\n )}\n </div>\n );\n}\n","'use client';\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { EditorView } from 'prosemirror-view';\nimport { type Command, EditorState, TextSelection } from 'prosemirror-state';\nimport { Node as PMNode, type Schema } from 'prosemirror-model';\n\nimport type { DocumentJSON, EditorStrings, FeatureFlags, PageConfig, SaveStatus } from '../config/types';\nimport {\n DEFAULT_COLOR_PALETTE,\n DEFAULT_FEATURES,\n DEFAULT_FONT_FAMILIES,\n DEFAULT_FONT_SIZES,\n DEFAULT_PAGE,\n DEFAULT_STRINGS,\n resolvePageDimensions,\n themeToCssVars,\n} from '../config/defaults';\nimport { buildSchema } from '../core/schema/schema';\nimport { buildPlugins } from '../core/plugins/index';\nimport type { PaginationGeometry } from '../core/pagination/plugin';\nimport { createCommands, type CommandSet } from '../core/commands/index';\nimport { createDoc, createEditorState } from '../core/state/createEditorState';\nimport { preloadSanitizer } from '../security/sanitize';\nimport { documentToText } from '../export/text';\nimport { documentToHtml } from '../export/html';\nimport { exportDocument } from '../export/index';\nimport { DocumentPersistence } from '../persistence/autosave';\nimport { IndexedDBStore, requestPersistentStorage } from '../persistence/indexeddb';\nimport { ConnectivityMonitor } from '../sync/connectivity';\nimport { SyncEngine } from '../sync/engine';\nimport { EditorContext } from './EditorContext';\nimport { EditorErrorBoundary } from './ErrorBoundary';\nimport { Toolbar } from './toolbar/Toolbar';\nimport { StatusBar } from './StatusBar';\nimport type { EditorContextValue, EditorProps, EditorRef } from './types';\n\ninterface ResolvedConfig {\n features: FeatureFlags;\n page: PageConfig;\n strings: EditorStrings;\n fontFamilies: string[];\n fontSizes: number[];\n colorPalette: string[];\n editable: boolean;\n placeholder: string | undefined;\n}\n\nfunction resolveConfig(props: EditorProps): ResolvedConfig {\n return {\n features: { ...DEFAULT_FEATURES, ...props.features },\n page: {\n ...DEFAULT_PAGE,\n ...props.page,\n margins: { ...DEFAULT_PAGE.margins, ...props.page?.margins },\n },\n strings: { ...DEFAULT_STRINGS, ...props.strings },\n fontFamilies: props.fontFamilies ?? DEFAULT_FONT_FAMILIES,\n fontSizes: props.fontSizes ?? DEFAULT_FONT_SIZES,\n colorPalette: props.colorPalette ?? DEFAULT_COLOR_PALETTE,\n editable: !(props.readOnly || props.mode === 'readonly'),\n placeholder: props.placeholder,\n };\n}\n\n/** CSS pixels per millimetre at 96 DPI (the CSS reference). */\nconst PX_PER_MM = 96 / 25.4;\n/** Visual gap (px) drawn on the canvas between consecutive page sheets. */\nconst PAGE_GAP_PX = 24;\n\n/** Convert a page configuration (mm) into concrete pixel geometry, or null. */\nfunction computePaginationGeometry(page: PageConfig): PaginationGeometry | null {\n if (page.pagination !== 'visual') return null;\n const { width, height } = resolvePageDimensions(page);\n const m = page.margins;\n const pageWidthPx = width * PX_PER_MM;\n const pageHeightPx = height * PX_PER_MM;\n const marginTopPx = m.top * PX_PER_MM;\n const marginBottomPx = m.bottom * PX_PER_MM;\n const marginLeftPx = m.left * PX_PER_MM;\n const contentWidthPx = Math.max(1, (width - m.left - m.right) * PX_PER_MM);\n const contentHeightPx = pageHeightPx - marginTopPx - marginBottomPx;\n if (contentHeightPx <= 0) return null;\n return {\n pageWidthPx,\n pageHeightPx,\n marginTopPx,\n marginBottomPx,\n marginLeftPx,\n contentWidthPx,\n contentHeightPx,\n interPageOffsetPx: marginBottomPx + PAGE_GAP_PX + marginTopPx,\n };\n}\n\nconst EditorInner = forwardRef<EditorRef, EditorProps>(function EditorInner(props, ref) {\n const mountRef = useRef<HTMLDivElement | null>(null);\n const viewRef = useRef<EditorView | null>(null);\n const persistenceRef = useRef<DocumentPersistence | null>(null);\n const pageBgRef = useRef<HTMLDivElement | null>(null);\n const remeasureRef = useRef<(() => void) | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n const config = useMemo(() => resolveConfig(props), [props]);\n const cfgRef = useRef(config);\n cfgRef.current = config;\n\n // Build the editing engine (schema + commands) once per feature set + placeholder.\n const featureKey = useMemo(() => JSON.stringify(config.features), [config.features]);\n const engine = useMemo(() => {\n const schema: Schema = buildSchema(config.features);\n const commands: CommandSet = createCommands(schema);\n return { schema, commands };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [featureKey]);\n\n const [editorState, setEditorState] = useState<EditorState | null>(null);\n const [saveStatus, setSaveStatus] = useState<SaveStatus>('idle');\n const [ready, setReady] = useState(false);\n\n // ---- Imperative handle (F-10.15, F-10.16) ----\n const getJSON = useCallback((): DocumentJSON => {\n const view = viewRef.current;\n return (view ? view.state.doc.toJSON() : createDoc(engine.schema, null).toJSON()) as DocumentJSON;\n }, [engine.schema]);\n\n const setContent = useCallback(\n (content: DocumentJSON | string | null) => {\n const view = viewRef.current;\n if (!view) return;\n const doc = createDoc(view.state.schema, content);\n const state = EditorState.create({ doc, plugins: view.state.plugins });\n view.updateState(state);\n setEditorState(state);\n },\n [],\n );\n\n const importDocxIntoEditor = useCallback(\n async (file: ArrayBuffer | Uint8Array | Blob): Promise<{ warnings: string[] }> => {\n const view = viewRef.current;\n if (!view) return { warnings: [] };\n const { importDocx } = await import('../import/docx');\n const result = await importDocx(file, view.state.schema);\n // Replace the whole document via a dispatched transaction so the change is\n // undoable and flows through onChange/autosave like any other edit.\n const node = PMNode.fromJSON(view.state.schema, result.doc);\n const v = viewRef.current;\n if (v) {\n const tr = v.state.tr.replaceWith(0, v.state.doc.content.size, node.content);\n v.dispatch(tr.scrollIntoView());\n }\n return { warnings: result.warnings };\n },\n [],\n );\n\n const handle = useMemo<EditorRef>(\n () => ({\n getJSON,\n getText: (options) => documentToText(getJSON(), options),\n getHTML: () => documentToHtml(getJSON()),\n setContent,\n importDocx: importDocxIntoEditor,\n focus: () => viewRef.current?.focus(),\n isDirty: () => persistenceRef.current?.isDirty() ?? false,\n save: async () => {\n await persistenceRef.current?.saveNow(getJSON());\n },\n clearLocalData: async () => {\n await persistenceRef.current?.clearLocal();\n },\n exportAs: (format, filename) =>\n exportDocument(getJSON(), format, {\n filename: filename ?? propsRef.current.documentId,\n page: cfgRef.current.page,\n title: filename ?? propsRef.current.documentId,\n }),\n getView: () => viewRef.current,\n getState: () => viewRef.current?.state ?? null,\n getSchema: () => viewRef.current?.state.schema ?? null,\n }),\n [getJSON, setContent, importDocxIntoEditor],\n );\n\n useImperativeHandle(ref, () => handle, [handle]);\n\n // ---- Create the ProseMirror view once (golden rule: PM owns the DOM) ----\n useEffect(() => {\n const mount = mountRef.current;\n if (!mount) return;\n\n void preloadSanitizer();\n\n const paginated = cfgRef.current.page.pagination === 'visual';\n const plugins = buildPlugins(engine.schema, {\n placeholder: cfgRef.current.placeholder,\n history: cfgRef.current.features.history,\n extraPlugins: propsRef.current.extensions?.plugins,\n pagination: paginated\n ? {\n getGeometry: () => computePaginationGeometry(cfgRef.current.page),\n getBackgroundLayer: () => pageBgRef.current,\n header: cfgRef.current.page.header,\n footer: cfgRef.current.page.footer,\n register: (fn) => {\n remeasureRef.current = fn;\n },\n }\n : undefined,\n });\n\n const initialContent =\n propsRef.current.value ?? propsRef.current.initialContent ?? null;\n const state = createEditorState({ schema: engine.schema, plugins, content: initialContent });\n\n const view = new EditorView(mount, {\n state,\n editable: () => !(propsRef.current.readOnly || propsRef.current.mode === 'readonly'),\n attributes: {\n class: 'rne-prosemirror',\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': propsRef.current.ariaLabel ?? 'Document editor',\n dir: propsRef.current.dir ?? 'ltr',\n },\n dispatchTransaction(tr) {\n const v = viewRef.current;\n if (!v) return;\n const newState = v.state.apply(tr);\n v.updateState(newState);\n setEditorState(newState);\n\n const p = propsRef.current;\n if (tr.docChanged) {\n const json = newState.doc.toJSON() as DocumentJSON;\n p.onChange?.(json, handle);\n persistenceRef.current?.scheduleSave(json);\n }\n if (tr.selectionSet) {\n p.onSelectionChange?.(newState);\n }\n },\n });\n\n viewRef.current = view;\n setEditorState(view.state);\n setReady(true);\n propsRef.current.onReady?.(handle);\n\n return () => {\n view.destroy();\n viewRef.current = null;\n setReady(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [engine]);\n\n // ---- Keep editability in sync without recreating the view ----\n useEffect(() => {\n viewRef.current?.setProps({\n editable: () => config.editable,\n });\n // Re-render to update toolbar disabled state.\n setEditorState((s) => s);\n }, [config.editable]);\n\n // ---- Local persistence, crash recovery (F-9.2, F-11.9), and sync (F-9.6–F-9.9, F-9.14) ----\n useEffect(() => {\n const documentId = props.documentId;\n const persistenceEnabled = props.persistence?.enabled ?? !!documentId;\n if (!documentId || !persistenceEnabled || !ready) return;\n\n const store = props.persistence?.store ?? new IndexedDBStore();\n const sync = props.sync;\n const auto = sync?.auto ?? true;\n\n let engine: SyncEngine | null = null;\n let monitor: ConnectivityMonitor | null = null;\n\n // Shared status handler: surfaces both local-save and sync transitions, and\n // triggers an upload after each successful local save when online (F-9.6).\n const handleStatus = (status: SaveStatus, detail?: { error?: string }) => {\n setSaveStatus(status);\n propsRef.current.onSaveStatusChange?.(status, detail);\n if (status === 'savedLocal' && engine && auto && (monitor?.isOnline() ?? true)) {\n void engine.flush();\n }\n };\n\n const persistence = new DocumentPersistence({\n documentId,\n store,\n debounceMs: props.persistence?.debounceMs,\n metadata: props.metadata,\n onStatus: handleStatus,\n });\n persistenceRef.current = persistence;\n\n if (sync?.remote) {\n engine = new SyncEngine({\n store,\n remote: sync.remote,\n maxAttempts: sync.maxAttempts,\n onStatus: handleStatus,\n onConflict: sync.onConflict,\n });\n const remotePing = sync.remote.ping?.bind(sync.remote);\n monitor = new ConnectivityMonitor({\n ping: remotePing,\n intervalMs: sync.pingIntervalMs,\n onChange: (online) => {\n if (online) {\n if (auto && engine) void engine.flush();\n } else {\n handleStatus('offline');\n }\n },\n });\n monitor.start();\n if (auto) void engine.flush(); // attempt to drain any queue from a prior session\n }\n\n if (props.persistence?.requestPersistent !== false) {\n void requestPersistentStorage();\n }\n\n let cancelled = false;\n void (async () => {\n const record = await persistence.load();\n if (cancelled || !record) return;\n // Only restore from local storage when no explicit controlled value is set.\n if (propsRef.current.value == null) {\n setContent(record.doc);\n }\n })();\n\n return () => {\n cancelled = true;\n monitor?.stop();\n engine?.cancel();\n void persistence.destroy();\n persistenceRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.documentId, ready, props.sync?.remote]);\n\n // ---- Controlled value sync (F-10.20) ----\n useEffect(() => {\n const view = viewRef.current;\n if (!view || props.value == null) return;\n const current = JSON.stringify(view.state.doc.toJSON());\n const next = JSON.stringify(props.value);\n if (current === next) return;\n const doc = createDoc(view.state.schema, props.value);\n const selectionPos = Math.min(view.state.selection.from, doc.content.size);\n const state = EditorState.create({ doc, plugins: view.state.plugins });\n const withSel = state.apply(\n state.tr.setSelection(TextSelection.create(state.doc, Math.max(0, selectionPos))),\n );\n view.updateState(withSel);\n setEditorState(withSel);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.value]);\n\n // ---- Context for toolbar/children ----\n const runCommand = useCallback((command: Command): boolean => {\n const view = viewRef.current;\n if (!view) return false;\n const result = command(view.state, view.dispatch, view);\n view.focus();\n return result;\n }, []);\n\n const contextValue = useMemo<EditorContextValue>(\n () => ({\n view: viewRef.current,\n state: editorState,\n schema: engine.schema,\n commands: engine.commands,\n strings: config.strings,\n features: config.features,\n fontFamilies: config.fontFamilies,\n fontSizes: config.fontSizes,\n colorPalette: config.colorPalette,\n editable: config.editable,\n run: runCommand,\n importDocx: importDocxIntoEditor,\n }),\n [editorState, engine, config, runCommand, importDocxIntoEditor],\n );\n\n // ---- Layout / page surface ----\n const { width } = resolvePageDimensions(config.page);\n const showChrome = config.page.showPageChrome;\n const paginated = config.page.pagination === 'visual';\n\n // Stable signature of the page geometry; force a re-measure when it changes.\n const pageGeometryKey = useMemo(\n () =>\n JSON.stringify({\n p: config.page.pagination,\n s: config.page.size,\n o: config.page.orientation,\n w: config.page.widthMm,\n h: config.page.heightMm,\n m: config.page.margins,\n hdr: config.page.header,\n ftr: config.page.footer,\n }),\n [config.page],\n );\n useEffect(() => {\n if (paginated) remeasureRef.current?.();\n }, [pageGeometryKey, paginated]);\n\n const geometry = useMemo(\n () => computePaginationGeometry(config.page),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [pageGeometryKey],\n );\n\n const rootStyle = useMemo(() => {\n const base: Record<string, string> = {\n ...themeToCssVars(props.theme),\n '--rne-page-width': `${width}mm`,\n '--rne-page-padding': `${config.page.margins.top}mm ${config.page.margins.right}mm ${config.page.margins.bottom}mm ${config.page.margins.left}mm`,\n };\n if (geometry) {\n base['--rne-page-w'] = `${geometry.pageWidthPx}px`;\n base['--rne-page-h'] = `${geometry.pageHeightPx}px`;\n base['--rne-content-w'] = `${geometry.contentWidthPx}px`;\n base['--rne-mt'] = `${geometry.marginTopPx}px`;\n base['--rne-ml'] = `${geometry.marginLeftPx}px`;\n }\n return { ...base, ...(props.style as Record<string, string> | undefined) };\n }, [props.theme, props.style, width, config.page.margins, geometry]);\n\n const toolbarEnabled = props.toolbar !== false && (props.toolbar?.enabled ?? true) && config.editable;\n const statusBarEnabled = props.statusBar ?? true;\n\n return (\n <EditorContext.Provider value={contextValue}>\n <div\n className={`rne-root${props.className ? ` ${props.className}` : ''}`}\n style={rootStyle as React.CSSProperties}\n data-ready={ready}\n dir={props.dir ?? 'ltr'}\n >\n {toolbarEnabled && <Toolbar config={props.toolbar || undefined} />}\n {props.children}\n <div\n className={`rne-canvas${showChrome ? '' : ' rne-canvas--plain'}${paginated ? ' rne-canvas--paged' : ''}`}\n >\n {paginated ? (\n <div className=\"rne-paged\">\n <div ref={pageBgRef} className=\"rne-page-bg\" aria-hidden=\"true\" />\n <div ref={mountRef} className=\"rne-mount rne-mount--paged\" />\n </div>\n ) : (\n <div className=\"rne-page\">\n <div ref={mountRef} className=\"rne-mount\" />\n </div>\n )}\n </div>\n {statusBarEnabled && <StatusBar saveStatus={saveStatus} hasPersistence={!!props.documentId} />}\n </div>\n </EditorContext.Provider>\n );\n});\n\n/**\n * The embeddable rich document editor (F-10.17). Client-only — load via\n * `next/dynamic(() => import('react-next-editor').then(m => m.Editor), { ssr: false })`.\n * Wrapped in an error boundary so a failure never takes down the host (F-11.2).\n */\nexport const Editor = forwardRef<EditorRef, EditorProps>(function Editor(props, ref) {\n return (\n <EditorErrorBoundary onError={props.onError}>\n <EditorInner {...props} ref={ref} />\n </EditorErrorBoundary>\n );\n});\n","'use client';\n\nimport { useEffect, useMemo, useState, type CSSProperties, type ReactElement } from 'react';\nimport type { DocumentJSON } from '../config/types';\nimport { documentToHtml } from '../export/html';\nimport { preloadSanitizer, sanitizeHtmlSync } from '../security/sanitize';\n\nexport interface DocumentViewProps {\n /** The document to render: ProseMirror JSON, a JSON string, or null/undefined. */\n value: DocumentJSON | string | null | undefined;\n /** Extra class appended to the root element. */\n className?: string;\n style?: CSSProperties;\n}\n\n/** Parse/normalize the input to a document node, or null if it is not one. */\nfunction toDoc(value: DocumentViewProps['value']): DocumentJSON | null {\n if (!value) return null;\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value) as DocumentJSON;\n return parsed?.type === 'doc' ? parsed : null;\n } catch {\n return null;\n }\n }\n return value.type === 'doc' ? value : null;\n}\n\n/**\n * Lightweight, read-only document renderer. Unlike {@link Editor}, it does NOT\n * mount a ProseMirror `EditorView` — it serializes the document to HTML with the\n * shared {@link documentToHtml} serializer and renders it directly. Ideal for\n * cards, lists, previews, and any place that only needs to *display* content\n * cheaply (no editing, no toolbar, minimal cost per instance).\n *\n * Security: `documentToHtml` already emits only whitelisted, escaped HTML with\n * sanitized URLs/CSS, so output is safe even for attacker-controlled JSON. Once\n * the DOM sanitizer has loaded, a DOMPurify pass is applied as defense-in-depth.\n *\n * Styling: wrap your app once with the package stylesheet\n * (`import 'react-next-editor-js/styles.css'`) so `.rne-document-view` content is\n * themed consistently with the editor.\n */\nexport function DocumentView({ value, className, style }: DocumentViewProps): ReactElement {\n // Preload the DOM sanitizer so the defense-in-depth pass becomes active.\n const [sanitizerReady, setSanitizerReady] = useState(false);\n useEffect(() => {\n let alive = true;\n void preloadSanitizer().then(() => {\n if (alive) setSanitizerReady(true);\n });\n return () => {\n alive = false;\n };\n }, []);\n\n const html = useMemo(() => {\n const doc = toDoc(value);\n if (!doc) return '';\n const raw = documentToHtml(doc);\n // `raw` is already safe; apply DOMPurify once available for defense-in-depth.\n return sanitizerReady ? sanitizeHtmlSync(raw) : raw;\n }, [value, sanitizerReady]);\n\n return (\n <div\n className={`rne-root rne-document-view${className ? ` ${className}` : ''}`}\n style={style}\n // eslint-disable-next-line react/no-danger -- html is produced by the package's\n // own sanitizing serializer (and DOMPurify-hardened once loaded).\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { Component, ReactNode, ErrorInfo, JSX } from 'react';
2
+ import { CSSProperties, ReactElement, Component, ReactNode, ErrorInfo, JSX } from 'react';
3
3
  import { EditorState, Plugin, Command } from 'prosemirror-state';
4
4
  import { EditorView } from 'prosemirror-view';
5
5
  import { Schema } from 'prosemirror-model';
@@ -188,6 +188,30 @@ interface EditorContextValue {
188
188
  */
189
189
  declare const Editor: react.ForwardRefExoticComponent<EditorProps & react.RefAttributes<EditorRef>>;
190
190
 
191
+ interface DocumentViewProps {
192
+ /** The document to render: ProseMirror JSON, a JSON string, or null/undefined. */
193
+ value: DocumentJSON | string | null | undefined;
194
+ /** Extra class appended to the root element. */
195
+ className?: string;
196
+ style?: CSSProperties;
197
+ }
198
+ /**
199
+ * Lightweight, read-only document renderer. Unlike {@link Editor}, it does NOT
200
+ * mount a ProseMirror `EditorView` — it serializes the document to HTML with the
201
+ * shared {@link documentToHtml} serializer and renders it directly. Ideal for
202
+ * cards, lists, previews, and any place that only needs to *display* content
203
+ * cheaply (no editing, no toolbar, minimal cost per instance).
204
+ *
205
+ * Security: `documentToHtml` already emits only whitelisted, escaped HTML with
206
+ * sanitized URLs/CSS, so output is safe even for attacker-controlled JSON. Once
207
+ * the DOM sanitizer has loaded, a DOMPurify pass is applied as defense-in-depth.
208
+ *
209
+ * Styling: wrap your app once with the package stylesheet
210
+ * (`import 'react-next-editor-js/styles.css'`) so `.rne-document-view` content is
211
+ * themed consistently with the editor.
212
+ */
213
+ declare function DocumentView({ value, className, style }: DocumentViewProps): ReactElement;
214
+
191
215
  interface ErrorBoundaryProps {
192
216
  children: ReactNode;
193
217
  onError?: (error: Error) => void;
@@ -245,4 +269,4 @@ interface StatusBarProps {
245
269
  */
246
270
  declare function StatusBar({ saveStatus, hasPersistence }: StatusBarProps): react.JSX.Element;
247
271
 
248
- export { CommandSet, DocumentJSON, DocxNodeConverter, Editor, EditorCommand, EditorContext, type EditorContextValue, EditorErrorBoundary, type EditorEvents, type EditorExtensions, EditorMode, type EditorProps, type EditorRef, EditorStrings, FeatureFlags, LocalStoreAdapter, PageConfig, type PersistenceConfig, RemoteSyncAdapter, SaveStatus, StatusBar, StoredDocument, type SyncConfig, TextConversionOptions, ThemeTokens, Toolbar, ToolbarButton, ToolbarConfig, ToolbarIcon, useEditorContext };
272
+ export { CommandSet, DocumentJSON, DocumentView, type DocumentViewProps, DocxNodeConverter, Editor, EditorCommand, EditorContext, type EditorContextValue, EditorErrorBoundary, type EditorEvents, type EditorExtensions, EditorMode, type EditorProps, type EditorRef, EditorStrings, FeatureFlags, LocalStoreAdapter, PageConfig, type PersistenceConfig, RemoteSyncAdapter, SaveStatus, StatusBar, StoredDocument, type SyncConfig, TextConversionOptions, ThemeTokens, Toolbar, ToolbarButton, ToolbarConfig, ToolbarIcon, useEditorContext };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { Component, ReactNode, ErrorInfo, JSX } from 'react';
2
+ import { CSSProperties, ReactElement, Component, ReactNode, ErrorInfo, JSX } from 'react';
3
3
  import { EditorState, Plugin, Command } from 'prosemirror-state';
4
4
  import { EditorView } from 'prosemirror-view';
5
5
  import { Schema } from 'prosemirror-model';
@@ -188,6 +188,30 @@ interface EditorContextValue {
188
188
  */
189
189
  declare const Editor: react.ForwardRefExoticComponent<EditorProps & react.RefAttributes<EditorRef>>;
190
190
 
191
+ interface DocumentViewProps {
192
+ /** The document to render: ProseMirror JSON, a JSON string, or null/undefined. */
193
+ value: DocumentJSON | string | null | undefined;
194
+ /** Extra class appended to the root element. */
195
+ className?: string;
196
+ style?: CSSProperties;
197
+ }
198
+ /**
199
+ * Lightweight, read-only document renderer. Unlike {@link Editor}, it does NOT
200
+ * mount a ProseMirror `EditorView` — it serializes the document to HTML with the
201
+ * shared {@link documentToHtml} serializer and renders it directly. Ideal for
202
+ * cards, lists, previews, and any place that only needs to *display* content
203
+ * cheaply (no editing, no toolbar, minimal cost per instance).
204
+ *
205
+ * Security: `documentToHtml` already emits only whitelisted, escaped HTML with
206
+ * sanitized URLs/CSS, so output is safe even for attacker-controlled JSON. Once
207
+ * the DOM sanitizer has loaded, a DOMPurify pass is applied as defense-in-depth.
208
+ *
209
+ * Styling: wrap your app once with the package stylesheet
210
+ * (`import 'react-next-editor-js/styles.css'`) so `.rne-document-view` content is
211
+ * themed consistently with the editor.
212
+ */
213
+ declare function DocumentView({ value, className, style }: DocumentViewProps): ReactElement;
214
+
191
215
  interface ErrorBoundaryProps {
192
216
  children: ReactNode;
193
217
  onError?: (error: Error) => void;
@@ -245,4 +269,4 @@ interface StatusBarProps {
245
269
  */
246
270
  declare function StatusBar({ saveStatus, hasPersistence }: StatusBarProps): react.JSX.Element;
247
271
 
248
- export { CommandSet, DocumentJSON, DocxNodeConverter, Editor, EditorCommand, EditorContext, type EditorContextValue, EditorErrorBoundary, type EditorEvents, type EditorExtensions, EditorMode, type EditorProps, type EditorRef, EditorStrings, FeatureFlags, LocalStoreAdapter, PageConfig, type PersistenceConfig, RemoteSyncAdapter, SaveStatus, StatusBar, StoredDocument, type SyncConfig, TextConversionOptions, ThemeTokens, Toolbar, ToolbarButton, ToolbarConfig, ToolbarIcon, useEditorContext };
272
+ export { CommandSet, DocumentJSON, DocumentView, type DocumentViewProps, DocxNodeConverter, Editor, EditorCommand, EditorContext, type EditorContextValue, EditorErrorBoundary, type EditorEvents, type EditorExtensions, EditorMode, type EditorProps, type EditorRef, EditorStrings, FeatureFlags, LocalStoreAdapter, PageConfig, type PersistenceConfig, RemoteSyncAdapter, SaveStatus, StatusBar, StoredDocument, type SyncConfig, TextConversionOptions, ThemeTokens, Toolbar, ToolbarButton, ToolbarConfig, ToolbarIcon, useEditorContext };
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { buildSchema, createCommands, createDoc, buildPlugins, createEditorState, countDocument } from './chunk-VLC7SZMT.js';
2
2
  export { buildPlugins, buildSchema, countDocument, createCommands, createDoc, createEditorState, defaultSchema } from './chunk-VLC7SZMT.js';
3
- import { exportDocument } from './chunk-IG2YLUFW.js';
4
- export { downloadBlob, downloadText, exportDocument, printDocumentToPdf } from './chunk-IG2YLUFW.js';
3
+ import { exportDocument } from './chunk-ABNK7F64.js';
4
+ export { downloadBlob, downloadText, exportDocument, printDocumentToPdf } from './chunk-ABNK7F64.js';
5
5
  import { IndexedDBStore, DocumentPersistence, SyncEngine, ConnectivityMonitor, requestPersistentStorage } from './chunk-O4GTLC3T.js';
6
6
  export { ConflictError, ConnectivityMonitor, DocumentPersistence, IndexedDBStore, MemoryStore, SyncEngine, requestPersistentStorage } from './chunk-O4GTLC3T.js';
7
- import { documentToText } from './chunk-QROUNVQK.js';
8
- export { documentToDocxBlob, documentToDocxBuffer, documentToText } from './chunk-QROUNVQK.js';
7
+ import { documentToText } from './chunk-65YACENL.js';
8
+ export { documentToDocxBlob, documentToDocxBuffer, documentToText } from './chunk-65YACENL.js';
9
9
  import './chunk-G6YRIEK4.js';
10
10
  export { importDocx } from './chunk-QIUIYBCZ.js';
11
11
  import { documentToHtml } from './chunk-7VYJDBH7.js';
12
12
  export { buildPrintDocument, documentToHtml } from './chunk-7VYJDBH7.js';
13
13
  import './chunk-T6FR37IC.js';
14
- import { preloadSanitizer } from './chunk-6NTSXJX4.js';
14
+ import { preloadSanitizer, sanitizeHtmlSync } from './chunk-6NTSXJX4.js';
15
15
  export { sanitizeHtml, sanitizeImageSrc, sanitizeUrl } from './chunk-6NTSXJX4.js';
16
16
  import { resolvePageDimensions, themeToCssVars, DEFAULT_COLOR_PALETTE, DEFAULT_FONT_SIZES, DEFAULT_FONT_FAMILIES, DEFAULT_STRINGS, DEFAULT_PAGE, DEFAULT_FEATURES, DEFAULT_TOOLBAR_GROUPS } from './chunk-JQXTWLHL.js';
17
17
  export { DEFAULT_COLOR_PALETTE, DEFAULT_FEATURES, DEFAULT_FONT_FAMILIES, DEFAULT_FONT_SIZES, DEFAULT_PAGE, DEFAULT_STRINGS, DEFAULT_TOOLBAR_GROUPS, PAGE_DIMENSIONS_MM, resolvePageDimensions, themeToCssVars } from './chunk-JQXTWLHL.js';
@@ -879,7 +879,45 @@ var EditorInner = forwardRef(function EditorInner2(props, ref) {
879
879
  var Editor = forwardRef(function Editor2(props, ref) {
880
880
  return /* @__PURE__ */ jsx(EditorErrorBoundary, { onError: props.onError, children: /* @__PURE__ */ jsx(EditorInner, { ...props, ref }) });
881
881
  });
882
+ function toDoc(value) {
883
+ if (!value) return null;
884
+ if (typeof value === "string") {
885
+ try {
886
+ const parsed = JSON.parse(value);
887
+ return parsed?.type === "doc" ? parsed : null;
888
+ } catch {
889
+ return null;
890
+ }
891
+ }
892
+ return value.type === "doc" ? value : null;
893
+ }
894
+ function DocumentView({ value, className, style }) {
895
+ const [sanitizerReady, setSanitizerReady] = useState(false);
896
+ useEffect(() => {
897
+ let alive = true;
898
+ void preloadSanitizer().then(() => {
899
+ if (alive) setSanitizerReady(true);
900
+ });
901
+ return () => {
902
+ alive = false;
903
+ };
904
+ }, []);
905
+ const html = useMemo(() => {
906
+ const doc = toDoc(value);
907
+ if (!doc) return "";
908
+ const raw = documentToHtml(doc);
909
+ return sanitizerReady ? sanitizeHtmlSync(raw) : raw;
910
+ }, [value, sanitizerReady]);
911
+ return /* @__PURE__ */ jsx(
912
+ "div",
913
+ {
914
+ className: `rne-root rne-document-view${className ? ` ${className}` : ""}`,
915
+ style,
916
+ dangerouslySetInnerHTML: { __html: html }
917
+ }
918
+ );
919
+ }
882
920
 
883
- export { Editor, EditorContext, EditorErrorBoundary, StatusBar, Toolbar, ToolbarButton, ToolbarIcon, useEditorContext };
921
+ export { DocumentView, Editor, EditorContext, EditorErrorBoundary, StatusBar, Toolbar, ToolbarButton, ToolbarIcon, useEditorContext };
884
922
  //# sourceMappingURL=index.js.map
885
923
  //# sourceMappingURL=index.js.map