@k2b/ui 0.41.0 → 0.42.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.
- package/dist/base.css +22 -0
- package/dist/browser/actions/Dropdown.js +220 -110
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/actions/menu-search.js +166 -0
- package/dist/browser/actions/menu-search.js.map +1 -0
- package/dist/browser/actions/menu-sheet.js +107 -13
- package/dist/browser/actions/menu-sheet.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +13 -1
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/inputs/IconChoices.js +121 -0
- package/dist/browser/inputs/IconChoices.js.map +1 -0
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/intl/messages.js +6 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +118 -93
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/text-editor/format.js +11 -7
- package/dist/browser/text-editor/format.js.map +1 -1
- package/dist/browser/text-editor/table.js +39 -11
- package/dist/browser/text-editor/table.js.map +1 -1
- package/dist/browser/text-editor.js +1 -1
- package/dist/browser/text-editor.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +118 -40
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/actions/menu-search.js +113 -0
- package/dist/ssr/actions/menu-search.js.map +1 -0
- package/dist/ssr/actions/menu-sheet.js +82 -13
- package/dist/ssr/actions/menu-sheet.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +13 -1
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/inputs/IconChoices.js +59 -0
- package/dist/ssr/inputs/IconChoices.js.map +1 -0
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/intl/messages.js +6 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +40 -20
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/text-editor/format.js +11 -7
- package/dist/ssr/text-editor/format.js.map +1 -1
- package/dist/ssr/text-editor/table.js +39 -11
- package/dist/ssr/text-editor/table.js.map +1 -1
- package/dist/ssr/text-editor.js +1 -1
- package/dist/ssr/text-editor.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +34 -3
- package/dist/types/actions/index.d.ts +1 -1
- package/dist/types/actions/menu-search.d.ts +27 -0
- package/dist/types/actions/menu-sheet.d.ts +5 -1
- package/dist/types/inputs/IconChoices.d.ts +19 -0
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/intl/messages.d.ts +3 -0
- package/dist/types/layout/AppWorkspace.d.ts +6 -1
- package/dist/types/text-editor/table.d.ts +2 -0
- package/dist/types/text-editor.d.ts +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["text-editor/table.ts"],"sourcesContent":["/**\n * Editable table grid for the formatted view.\n *\n * A Markdown table is replaced by a grid whose cells are small plain-text\n * editing surfaces. Typing in a cell turns into the minimal text change inside\n * that cell's Markdown range (see markdown-table.ts), so the stored format stays\n * Markdown and concurrent edits merge at character level.\n *\n * Rules that keep it stable:\n * - the grid DOM is patched in place (`updateDOM`), never rebuilt while a cell\n * has focus unless the shape changed;\n * - the focused cell is never rewritten while an IME composition runs;\n * remote text for that cell waits until `compositionend`;\n * - every structural action is one transaction, so one undo step.\n */\nimport { history, historyKeymap, isolateHistory } from \"@codemirror/commands\";\nimport { syntaxTree } from \"@codemirror/language\";\nimport {\n type ChangeDesc,\n ChangeSet,\n Compartment,\n EditorState,\n type Extension,\n Facet,\n Prec,\n StateEffect,\n StateField,\n Text,\n} from \"@codemirror/state\";\nimport { Decoration, type DecorationSet, EditorView, keymap, ViewPlugin, WidgetType } from \"@codemirror/view\";\nimport { convertClipboardHtml, inspectClipboard, parseClipboardHtml } from \"./clipboard\";\nimport { clipboardLoading } from \"./clipboard-loading\";\nimport { type InlineFormat, inlineFormat } from \"./format\";\nimport { markdownLanguage } from \"./language\";\nimport * as T from \"./markdown-table\";\nimport { textEditorMessages } from \"./messages\";\n\nexport type TableTarget = { tableFrom: number; rowFrom: number; columnFrom: number; row: number; column: number };\n/** Resolve a server-returned identity against the current document immediately before focus. */\nexport type TableFocusTarget = () => TableTarget | null;\nexport type TableHost = {\n undo: () => void;\n redo: () => void;\n boundary: () => void;\n cellLabel: (row: number, column: number, name?: string) => string;\n sourceLabels?: () => {\n edit: string;\n valid: string;\n invalid: string;\n changed: string;\n structural: string;\n applying?: string;\n applyFailed?: string;\n done: string;\n discard: string;\n continue: string;\n line?: (line: number) => string;\n separator?: (header: number, separator: number) => string;\n extra?: (line: number) => string;\n complete?: string;\n };\n actionLabel?: (action: \"rowMenu\" | \"columnMenu\" | \"addRow\" | \"addColumn\" | \"emptyCell\") => string;\n /** Respect a host's personal Tab-for-focus preference inside cells too. */\n tabMovesFocus?: () => boolean;\n /** Capture durable anchors synchronously, then send the action to the owning server. */\n structure?: {\n available: () => boolean;\n perform: (action: MenuAction, target: TableTarget) => Promise<TableFocusTarget | void>;\n /** Resolves only after the confirmed update is applied; rejects without discarding the draft. */\n replaceSource?: (\n target: TableTarget,\n expected: string,\n source: string,\n caret: { row: number; column: number },\n ) => Promise<TableFocusTarget | void>;\n };\n onError: (code: \"structureUnavailable\" | \"structureFailed\" | \"pasteTooLarge\" | \"textTooLarge\" | \"cellRemoved\") => void;\n onRecovery: (text: string) => void;\n /** Cell focus is separate from CodeMirror contentDOM focus; collaboration maps these offsets to its own cursor. */\n onCellSelection?: (selection: { anchor: number; head: number } | null) => void;\n onDroppedImages?: (count: number, files: File[]) => void;\n maxLength: number;\n maxPasteCells: number;\n /** App-owned presentation, e.g. formula results. Called only outside the active cell. */\n renderCell?: (element: HTMLElement, raw: string, table: T.Table, row: number, column: number) => void;\n};\nexport type MenuAction =\n | \"completeColumns\"\n | \"rowAbove\"\n | \"rowBelow\"\n | \"colLeft\"\n | \"colRight\"\n | \"deleteRow\"\n | \"deleteCol\"\n | \"moveRowUp\"\n | \"moveRowDown\"\n | \"moveColLeft\"\n | \"moveColRight\"\n | \"toggleHeader\"\n | \"deleteTable\"\n | \"alignLeft\"\n | \"alignCenter\"\n | \"alignRight\";\n\nexport const tableHost = Facet.define<TableHost, TableHost | null>({ combine: (v) => v[0] ?? null });\n\ntype Active = { index: number; r: number; c: number; composing: boolean };\nconst active = new WeakMap<EditorView, Active>();\nconst pendingContextMenus = new WeakMap<EditorView, AbortController>();\n\n/**\n * What the focused cell's DOM was last synced to: the cell text and its start\n * in the document, plus every document change since. A commit diffs the DOM\n * against `base` and maps the result through `desc`, so text that other\n * people typed meanwhile (during an IME composition, for example) survives.\n */\ntype Sync = {\n el: HTMLElement;\n baseFrom: number;\n base: string;\n desc: ChangeDesc;\n committing: boolean;\n refocusSelection: [number, number] | null;\n selection?: [number, number];\n edges: number[];\n};\nconst syncs = new WeakMap<EditorView, Sync>();\n// An unmaterialized ragged cell has no source identity yet. Never infer its\n// baseline from a later numeric position after another transaction changes it.\nconst missingCells = new WeakMap<EditorView, { el: HTMLElement; changed: boolean }>();\nconst rebuilding = new WeakSet<EditorView>();\n/** A structural action that moves focus itself; a rebuild then does not restore the old caret. */\nconst targeted = new WeakSet<EditorView>();\nconst refreshTables = StateEffect.define<null>();\n\n// Browsers write a trailing or doubled space as U+00A0; a typed no-break space between words stays.\n\nconst parsedTables = new WeakMap<EditorState, T.Table[]>();\nexport const tablesIn = (state: EditorState): T.Table[] => {\n const cached = parsedTables.get(state);\n if (cached) return cached;\n const tables = T.findTables(state.doc.toString());\n parsedTables.set(state, tables);\n return tables;\n};\n\nconst currentTable = (view: EditorView, dom: HTMLElement): T.Table | null => {\n if (!dom.isConnected || !view.dom.contains(dom)) return null;\n const pos = view.posAtDOM(dom);\n return tablesIn(view.state).find((t) => pos >= t.from && pos <= t.to) ?? null;\n};\nconst tableIndex = (view: EditorView, dom: HTMLElement): number => {\n if (!dom.isConnected || !view.dom.contains(dom)) return -1;\n const pos = view.posAtDOM(dom);\n return tablesIn(view.state).findIndex((t) => pos >= t.from && pos <= t.to);\n};\n/** The grid element of the n-th table, looked up again: CodeMirror may have replaced it. */\nconst findWrap = (view: EditorView, index: number): HTMLElement | null =>\n [...view.contentDOM.querySelectorAll<HTMLElement>(\".k2b-ste-table\")].find((el) => tableIndex(view, el) === index) ?? null;\n\ntype Hit = { table: T.Table; r: number; c: number; cell: T.Cell };\nconst cellAtPos = (state: EditorState, pos: number): Hit | null => {\n for (const table of tablesIn(state)) {\n if (pos < table.from || pos > table.to) continue;\n for (let r = 0; r < T.rowCount(table); r++) {\n const line = T.gridLine(table, r)!;\n if (pos < line.from || pos > line.to) continue;\n const before = line.pipes.filter((p) => p < pos).length;\n const c = Math.max(0, Math.min(line.cells.length - 1, line.leadingPipe ? before - 1 : before));\n const cell = line.cells[c];\n return cell ? { table, r, c, cell } : null;\n }\n }\n return null;\n};\n\nconst cellSurvives = (sync: Sync): boolean => {\n const survived = new Set<number>();\n sync.desc.iterGaps((from, _newFrom, length) => {\n for (const edge of sync.edges) if (edge >= from && edge < from + length) survived.add(edge);\n });\n return survived.size === sync.edges.length;\n};\n\nconst resync = (view: EditorView, el: HTMLElement, cell: T.Cell) => {\n const hit = cellAtPos(view.state, cell.from);\n const line = hit && T.gridLine(hit.table, hit.r);\n const edges: number[] = [];\n if (line && hit) {\n const left = line.leadingPipe ? line.pipes[hit.c] : hit.c === 0 ? line.from - 1 : line.pipes[hit.c - 1];\n const right = (line.leadingPipe ? line.pipes[hit.c + 1] : line.pipes[hit.c]) ?? line.to;\n if (left !== undefined && left >= 0) edges.push(left);\n if (right < view.state.doc.length) edges.push(right);\n }\n syncs.set(view, {\n el,\n baseFrom: cell.from,\n base: cell.text,\n desc: ChangeSet.empty(view.state.doc.length).desc,\n committing: false,\n refocusSelection: null,\n edges,\n });\n};\n\nconst escapeHtml = (s: string) => s.replace(/[&<>\"]/g, (ch) => `&${{ \"&\": \"amp\", \"<\": \"lt\", \">\": \"gt\", '\"': \"quot\" }[ch]};`);\n/** Render the same Markdown tokens as prose, keeping code and escaped markers literal. */\nconst renderInline = (raw: string) => {\n const text = raw;\n const tree = markdownLanguage.parser.parse(text);\n const render = (node: typeof tree.topNode): string => {\n const tags: Record<string, [string, string, string[]]> = {\n StrongEmphasis: [\"<strong>\", \"</strong>\", [\"EmphasisMark\"]],\n Emphasis: [\"<em>\", \"</em>\", [\"EmphasisMark\"]],\n Strikethrough: [\"<s>\", \"</s>\", [\"StrikethroughMark\"]],\n InlineCode: ['<code class=\"k2b-ste-code\">', \"</code>\", [\"CodeMark\"]],\n Link: ['<span class=\"k2b-ste-link\">', \"</span>\", [\"LinkMark\", \"URL\", \"LinkTitle\"]],\n };\n if (node.name === \"Escape\") return escapeHtml(text.slice(node.from + 1, node.to));\n const spec = tags[node.name];\n let result = spec?.[0] ?? \"\";\n let from = node.from;\n for (let child = node.firstChild; child; child = child.nextSibling) {\n result += escapeHtml(node.name === \"InlineCode\" ? T.displayCell(text.slice(from, child.from)) : text.slice(from, child.from));\n if (!spec?.[2].includes(child.name)) result += render(child);\n from = child.to;\n }\n const tail = text.slice(from, node.to);\n return result + escapeHtml(node.name === \"InlineCode\" ? T.displayCell(tail) : tail) + (spec?.[1] ?? \"\");\n };\n return render(tree.topNode);\n};\n\nconst renderCell = (view: EditorView, element: HTMLElement, raw: string, table: T.Table, row: number, column: number) => {\n const render = view.state.facet(tableHost)?.renderCell;\n if (render) render(element, raw, table, row, column);\n else element.innerHTML = renderInline(raw);\n};\n\nconst cellAt = (dom: HTMLElement, r: number, c: number) => dom.querySelector<HTMLElement>(`.k2b-ste-cell[data-r=\"${r}\"][data-c=\"${c}\"]`);\n\nconst caretOffset = (el: HTMLElement): number => {\n const sel = el.ownerDocument.getSelection();\n if (!sel || !sel.rangeCount || !el.contains(sel.anchorNode)) return el.textContent?.length ?? 0;\n const range = sel.getRangeAt(0).cloneRange();\n range.selectNodeContents(el);\n range.setEnd(sel.anchorNode!, sel.anchorOffset);\n return range.toString().length;\n};\nconst selectionOffsets = (el: HTMLElement): [number, number] => {\n const selection = el.ownerDocument.getSelection();\n const offset = (node: Node | null, at: number) => {\n if (!node || !el.contains(node)) return caretOffset(el);\n const range = el.ownerDocument.createRange();\n range.selectNodeContents(el);\n range.setEnd(node, at);\n return range.toString().length;\n };\n return [\n offset(selection?.anchorNode ?? null, selection?.anchorOffset ?? 0),\n offset(selection?.focusNode ?? null, selection?.focusOffset ?? 0),\n ];\n};\n\nconst placeSelection = (el: HTMLElement, anchor: number, head = anchor) => {\n el.focus({ preventScroll: true });\n const selection = el.ownerDocument.getSelection();\n const text = el.firstChild;\n if (!selection) return;\n if (text?.nodeType === Node.TEXT_NODE) {\n const length = text.textContent?.length ?? 0;\n selection.setBaseAndExtent(text, Math.max(0, Math.min(anchor, length)), text, Math.max(0, Math.min(head, length)));\n } else selection.setBaseAndExtent(el, 0, el, 0);\n};\nconst placeCaret = (el: HTMLElement, offset: number) => placeSelection(el, offset);\n\nconst hasHeader = (t: T.Table) => t.lines[0]!.cells.some((cell) => cell.text.length > 0);\nconst firstRow = (t: T.Table) => (hasHeader(t) ? 0 : 1);\nconst shapeOf = (t: T.Table) => `${T.rowCount(t)}x${width(t)}:${firstRow(t)}`;\nconst renderedDocuments = new WeakMap<HTMLElement, Text>();\n/**\n * How far the grid may reach left of the text: its grip gutter and the first\n * cell's padding sit there, so cell text lines up with the paragraphs. It\n * never reaches past the first ancestor that clips, which would cut the grips.\n */\nconst bleed = (view: EditorView, wrap: HTMLElement): number => {\n const content = view.contentDOM;\n const line = content.querySelector<HTMLElement>(\".cm-line\");\n const cell = wrap.querySelector<HTMLElement>(\".k2b-ste-cell\");\n const wanted =\n Number.parseFloat(getComputedStyle(wrap).paddingLeft) +\n (cell ? Number.parseFloat(getComputedStyle(cell).paddingLeft) : 0) -\n (line ? Number.parseFloat(getComputedStyle(line).paddingLeft) : 0);\n const start = content.getBoundingClientRect().left + Number.parseFloat(getComputedStyle(content).paddingLeft);\n let limit = 0;\n for (let element = content.parentElement; element; element = element.parentElement)\n if (getComputedStyle(element).overflowX !== \"visible\") {\n limit = element.getBoundingClientRect().left + element.clientLeft;\n break;\n }\n return Math.max(0, Math.min(wanted, Math.floor(start - limit)));\n};\nconst measureScroll = (view: EditorView, wrap: HTMLElement) =>\n view.requestMeasure({\n key: wrap,\n read: () => ({ left: wrap.scrollLeft, width: wrap.clientWidth, total: wrap.scrollWidth, bleed: bleed(view, wrap) }),\n write: ({ left, width, total, bleed }) => {\n if (!wrap.isConnected) return;\n wrap.toggleAttribute(\"data-scrolled\", left > 0);\n wrap.toggleAttribute(\"data-more\", left + width < total - 1);\n wrap.style.setProperty(\"--k2b-ste-bleed\", `${bleed}px`);\n },\n });\n\nclass GridWidget extends WidgetType {\n constructor(\n readonly table: T.Table,\n readonly readOnly: boolean,\n ) {\n super();\n }\n // Always update the existing DOM on document/refresh transactions. A shape\n // deferred during composition must be patched even when the next table value\n // is equal; app-owned formulas may also depend on cells outside this table.\n override toDOM(view: EditorView) {\n const wrap = document.createElement(\"div\");\n wrap.className = \"k2b-ste-table\";\n wrap.contentEditable = \"false\";\n wrap.dataset.shape = shapeOf(this.table);\n wrap.append(buildGrid(view, this.table, wrap));\n wrap.addEventListener(\"pointerleave\", () => {\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu\").forEach((grip) => delete grip.dataset.hovered);\n });\n wrap.addEventListener(\"scroll\", () => {\n wrap.toggleAttribute(\"data-scrolled\", wrap.scrollLeft > 0);\n wrap.toggleAttribute(\"data-more\", wrap.scrollLeft + wrap.clientWidth < wrap.scrollWidth - 1);\n });\n renderedDocuments.set(wrap, view.state.doc);\n setEditable(wrap, !this.readOnly, view);\n measureScroll(view, wrap);\n return wrap;\n }\n override updateDOM(dom: HTMLElement, view: EditorView) {\n const act = active.get(view);\n measureScroll(view, dom);\n if (dom.dataset.shape !== shapeOf(this.table)) {\n const focused = dom.contains(document.activeElement) ? (document.activeElement as HTMLElement) : null;\n // Never rebuild under a running IME composition; the commit at compositionend refreshes.\n if (focused && act?.composing) {\n dom.dataset.pendingShape = \"1\";\n return true;\n }\n const sync = syncs.get(view);\n if (focused && sync?.el === focused && !targeted.has(view)) sync.refocusSelection = selectionOffsets(focused);\n dom.dataset.shape = shapeOf(this.table);\n delete dom.dataset.pendingShape;\n rebuilding.add(view);\n const source = sources.get(dom)?.element;\n if (source) {\n // Keep the draft editor connected while the confirmed grid changes.\n // Detaching it loses native focus before its receipt can return the\n // caret to the cell selected in the draft.\n for (const child of [...dom.childNodes]) if (child !== source) child.remove();\n dom.insertBefore(buildGrid(view, this.table, dom), source);\n } else dom.replaceChildren(buildGrid(view, this.table, dom));\n renderedDocuments.set(dom, view.state.doc);\n rebuilding.delete(view);\n setEditable(dom, !this.readOnly, view);\n dom.dispatchEvent(\n new CustomEvent(\"k2b-ste-table-structure\", {\n bubbles: true,\n detail: { rows: T.rowCount(this.table), columns: this.table.columns },\n }),\n );\n return true;\n }\n // Host formulas depend on document changes, not selection-only effects.\n // Replacing an inactive cell's descendants during pointerdown removes the\n // click target before the browser focuses it and can select the whole note.\n const refreshPresentation = renderedDocuments.get(dom) !== view.state.doc;\n patchGrid(view, this.table, dom, refreshPresentation);\n renderedDocuments.set(dom, view.state.doc);\n setEditable(dom, !this.readOnly, view);\n return true;\n }\n override destroy(dom: HTMLElement) {\n const source = sources.get(dom);\n if (source) {\n const draft = source.editor.state.doc.toString();\n if (draft !== source.base) queueMicrotask(() => source.recover(draft));\n source.cleanup();\n source.editor.destroy();\n sources.delete(dom);\n }\n }\n override ignoreEvent() {\n return true;\n }\n override get estimatedHeight() {\n return (T.rowCount(this.table) - firstRow(this.table)) * 41 + 16;\n }\n}\n\ntype SourceSession = {\n element: HTMLElement;\n editor: EditorView;\n base: string;\n recover: (text: string) => void;\n readOnly: Compartment;\n cleanup: () => void;\n pending: boolean;\n};\nconst sources = new WeakMap<HTMLElement, SourceSession>();\n\n/** A local source draft for one table. Invalid drafts never replace shared text.\n * Collaborative structure changes require the host's confirmed anchored action. */\nexport const editTableSource = (view: EditorView, wrap: HTMLElement) => {\n const table = currentTable(view, wrap);\n if (!table || view.state.readOnly || sources.has(wrap)) return;\n const host = view.state.facet(tableHost);\n const en = textEditorMessages.resolve([\"en\"]).t;\n const labels = host?.sourceLabels?.() ?? {\n edit: en.editMarkdown,\n valid: en.markdownValid,\n invalid: en.markdownInvalid,\n changed: en.markdownChanged,\n structural: en.markdownStructural,\n done: en.showTable,\n discard: en.discardMarkdown,\n continue: en.continueMarkdown,\n line: en.markdownLine,\n separator: (header, separator) => en.markdownSeparator({ header, separator }),\n extra: en.markdownExtra,\n complete: en.completeColumns,\n };\n const base = view.state.sliceDoc(table.from, table.to);\n const original = active.get(view);\n const originalCell = original && T.gridLine(table, original.r)?.cells[original.c];\n const overlay = document.createElement(\"div\");\n overlay.className = \"k2b-ste-table-source\";\n const bar = document.createElement(\"div\");\n bar.className = \"k2b-ste-source-bar\";\n const status = document.createElement(\"span\");\n status.textContent = labels.valid;\n status.setAttribute(\"role\", \"status\");\n const body = document.createElement(\"div\");\n body.className = \"k2b-ste-source-body\";\n const error = document.createElement(\"div\");\n error.className = \"k2b-ste-source-error\";\n error.setAttribute(\"role\", \"alert\");\n error.hidden = true;\n const button = (label: string, run: () => void) => {\n const element = document.createElement(\"button\");\n element.type = \"button\";\n element.textContent = label;\n element.onclick = run;\n return element;\n };\n const close = (r: number, c: number, changed: number[] = [], restoreFocus = true) => {\n sources.get(wrap)?.cleanup();\n sources.delete(wrap);\n source.destroy();\n overlay.remove();\n delete wrap.dataset.source;\n wrap.style.removeProperty(\"height\");\n const current = currentTable(view, wrap);\n if (current && restoreFocus)\n move(view, wrap, Math.max(firstRow(current), Math.min(r, T.rowCount(current) - 1)), Math.min(c, current.columns - 1));\n wrap\n .querySelectorAll<HTMLElement>(\"tr\")\n .forEach((row) => row.toggleAttribute(\"data-source-changed\", changed.includes(Number(row.dataset.r))));\n };\n const fail = (message: string, line?: number, complete?: () => void, focus = true) => {\n error.hidden = false;\n error.dataset.tone = complete ? \"warning\" : \"error\";\n status.textContent = labels.edit;\n const selectLine = () => {\n const target = source.state.doc.line(Math.min(line ?? 1, source.state.doc.lines));\n source.dispatch({ selection: { anchor: target.from, head: target.to }, scrollIntoView: true });\n source.focus();\n };\n error.replaceChildren(\n document.createTextNode(`${complete || line === undefined ? \"\" : (labels.line?.(line) ?? en.markdownLine(line))}${message}`),\n ...(complete ? [button(labels.complete ?? en.completeColumns, complete)] : []),\n button(labels.continue, selectLine),\n button(labels.discard, () => close(original?.r ?? 0, original?.c ?? 0)),\n );\n if (focus) source.focus();\n };\n const parsed = () => {\n const draft = source.state.doc.toString();\n const tables = T.findTables(draft);\n const next = tables[0];\n return next &&\n tables.length === 1 &&\n next.from === 0 &&\n next.to === draft.length &&\n !T.inspectTableStructure(draft).extraCells &&\n !T.inspectTableStructure(draft).missingSeparator\n ? next\n : null;\n };\n const apply = (): void => {\n if (view.state.readOnly || sources.get(wrap)?.pending) return;\n const current = currentTable(view, wrap);\n const draft = source.state.doc.toString();\n const candidate = T.findTables(draft)[0];\n const extra = candidate?.lines.find((line) => line.cells.length > candidate.columns);\n if (candidate && candidate.from === 0 && candidate.to === draft.length && extra) {\n const line = source.state.doc.lineAt(extra.from).number;\n return fail(labels.extra?.(line) ?? en.markdownExtra(line), line, () => {\n source.dispatch({ changes: T.completeColumns(candidate) });\n apply();\n });\n }\n const next = parsed();\n if (!next) {\n // Count source cells for diagnostics only; the public GFM parser remains\n // the authority for whether this draft can replace a table.\n const split = (text: string) => {\n const cells = [\"\"];\n for (let index = 0; index < text.length; index++) {\n const char = text[index]!;\n if (char === \"\\\\\" && index + 1 < text.length) cells[cells.length - 1] += char + text[++index];\n else if (char === \"|\") cells.push(\"\");\n else cells[cells.length - 1] += char;\n }\n if (cells.length > 1 && !cells[0]!.trim()) cells.shift();\n if (cells.length > 1 && !cells.at(-1)!.trim()) cells.pop();\n return cells.map((cell) => cell.trim());\n };\n if (source.state.doc.lines > 1) {\n const header = split(source.state.doc.line(1).text),\n separator = split(source.state.doc.line(2).text);\n if (separator.every((cell) => /^:?-+:?$/.test(cell)) && header.length !== separator.length)\n return fail(\n labels.separator?.(header.length, separator.length) ??\n en.markdownSeparator({ header: header.length, separator: separator.length }),\n 2,\n );\n if (!separator.every((cell) => /^:?-+:?$/.test(cell))) return fail(labels.invalid, 2);\n }\n return fail(labels.invalid, candidate ? source.state.doc.lineAt(Math.min(candidate.to + 1, draft.length)).number : 1);\n }\n if (!current || view.state.sliceDoc(current.from, current.to) !== base) return fail(labels.changed);\n let changes: T.Change[] = [];\n let structural = false;\n if (host?.structure) {\n structural =\n shapeOf(current) !== shapeOf(next) ||\n view.state.sliceDoc(current.lines[1]!.from, current.lines[1]!.to) !== source.state.sliceDoc(next.lines[1]!.from, next.lines[1]!.to);\n if (!structural) {\n for (let r = 0; r < T.rowCount(next); r++) {\n const old = T.gridLine(current, r)!;\n const row = T.gridLine(next, r)!;\n for (let c = 0; c < next.columns; c++) {\n const before = old.cells[c],\n after = row.cells[c];\n if (!before || !after) {\n structural = true;\n break;\n }\n if (before.text !== after.text) changes.push(...T.cellChanges(before.text, T.displayCell(after.text), before.from));\n }\n }\n // Formatting pipes and padding is structural even when dimensions match.\n structural ||=\n T.applyChanges(\n base,\n changes.map((change) => ({\n ...change,\n from: change.from - current.from,\n to: change.to - current.from,\n })),\n ) !== draft;\n }\n } else changes = [{ from: current.from, to: current.to, insert: draft }];\n const hit = cellAtPos(EditorState.create({ doc: source.state.doc }), source.state.selection.main.head);\n const changed = Array.from({ length: T.rowCount(next) }, (_, row) => row).filter((row) => {\n const before = T.gridLine(current, row),\n after = T.gridLine(next, row);\n return !before || !after || view.state.sliceDoc(before.from, before.to) !== source.state.sliceDoc(after.from, after.to);\n });\n if (structural) {\n const structure = host?.structure;\n if (!structure?.replaceSource) return fail(labels.structural);\n if (!structure.available()) {\n host?.onError(\"structureUnavailable\");\n return;\n }\n const session = sources.get(wrap)!;\n session.pending = true;\n // Keep native focus on the action while waiting. Disabling a focused\n // button blurs it to body, losing the draft's focus ownership on receipt.\n // The pending guard above prevents keyboard and pointer resubmission.\n done.setAttribute(\"aria-disabled\", \"true\");\n overlay.setAttribute(\"aria-busy\", \"true\");\n status.textContent = labels.applying ?? en.applyingTable;\n source.dispatch({ effects: readOnly.reconfigure(EditorState.readOnly.of(true)) });\n // The host captures the table witnesses synchronously, before any await.\n const target = {\n tableFrom: current.from,\n rowFrom: current.lines[0]!.from,\n columnFrom: current.lines[0]!.cells[0]!.from,\n row: 0,\n column: 0,\n };\n const settled = () => {\n if (sources.get(wrap) !== session) return false;\n session.pending = false;\n done.removeAttribute(\"aria-disabled\");\n overlay.removeAttribute(\"aria-busy\");\n source.dispatch({ effects: readOnly.reconfigure(EditorState.readOnly.of(view.state.readOnly)) });\n return true;\n };\n try {\n void structure.replaceSource(target, base, draft, { row: hit?.r ?? 0, column: hit?.c ?? 0 }).then(\n (resolve) => {\n if (settled()) {\n const restoreFocus = overlay.contains(view.dom.ownerDocument.activeElement);\n close(0, 0, changed, false);\n if (restoreFocus && resolve) focusTableTarget(view, resolve());\n }\n },\n () => {\n if (settled())\n fail(\n labels.applyFailed ?? en.markdownApplyFailed,\n undefined,\n undefined,\n overlay.contains(view.dom.ownerDocument.activeElement),\n );\n },\n );\n } catch {\n if (settled()) fail(labels.applyFailed ?? en.markdownApplyFailed);\n }\n return;\n }\n if (changes.length && !dispatchChanges(view, changes, true)) return;\n close(hit?.r ?? original?.r ?? 0, hit?.c ?? original?.c ?? 0, changed);\n };\n const readOnly = new Compartment();\n const source = new EditorView({\n parent: body,\n state: EditorState.create({\n doc: base,\n selection: { anchor: Math.max(0, (originalCell?.from ?? table.from) - table.from) },\n extensions: [\n readOnly.of(EditorState.readOnly.of(false)),\n history(),\n keymap.of([\n {\n key: \"Escape\",\n run: () => {\n apply();\n return true;\n },\n },\n ...historyKeymap,\n ]),\n EditorView.contentAttributes.of({ \"aria-label\": labels.edit }),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n status.textContent = parsed() ? labels.valid : labels.invalid;\n error.hidden = true;\n }\n }),\n ],\n }),\n });\n const done = button(labels.done, apply);\n done.className = \"k2b-button\";\n done.dataset.size = \"sm\";\n bar.append(status, done);\n overlay.append(bar, body, error);\n const beforeUnload = (event: BeforeUnloadEvent) => {\n if (source.state.doc.toString() === base) return;\n event.preventDefault();\n event.returnValue = \"\";\n };\n view.dom.ownerDocument.defaultView?.addEventListener(\"beforeunload\", beforeUnload);\n sources.set(wrap, {\n element: overlay,\n pending: false,\n editor: source,\n base,\n readOnly,\n recover: (text) => host?.onRecovery(text),\n cleanup: () => view.dom.ownerDocument.defaultView?.removeEventListener(\"beforeunload\", beforeUnload),\n });\n wrap.style.height = `${wrap.getBoundingClientRect().height}px`;\n wrap.dataset.source = \"1\";\n wrap.querySelectorAll(\"tr\").forEach((row) => row.removeAttribute(\"data-source-changed\"));\n wrap.append(overlay);\n source.focus();\n};\n\nconst setEditable = (wrap: HTMLElement, on: boolean, view: EditorView) => {\n wrap.dataset.readonly = on ? \"0\" : \"1\";\n const source = sources.get(wrap);\n if (source && source.editor.state.readOnly !== (!on || source.pending))\n source.editor.dispatch({ effects: source.readOnly.reconfigure(EditorState.readOnly.of(!on || source.pending)) });\n wrap.querySelectorAll<HTMLButtonElement>(\".k2b-ste-grip, .k2b-ste-table-add button\").forEach((button) => {\n const structure = view.state.facet(tableHost)?.structure;\n button.disabled = !on || (button.classList.contains(\"k2b-ste-addColumn\") && !!structure && !structure.available());\n button.hidden = !on;\n });\n wrap.querySelector(\"table\")?.setAttribute(\"aria-readonly\", String(!on));\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((cell) => {\n cell.setAttribute(\"aria-readonly\", String(!on));\n if (!on) {\n cell.contentEditable = \"false\";\n // Losing edit access must restore presentation and detach the mutable\n // cell baseline before later remote updates reconcile the document.\n if (cell.dataset.editing === \"1\") {\n cell.dataset.editing = \"0\";\n const table = currentTable(view, wrap);\n if (table) renderCell(view, cell, cell.dataset.raw ?? \"\", table, Number(cell.dataset.r), Number(cell.dataset.c));\n }\n if (syncs.get(view)?.el === cell) syncs.delete(view);\n if (missingCells.get(view)?.el === cell) missingCells.delete(view);\n } else {\n const wasReadOnly = cell.contentEditable === \"false\";\n cell.contentEditable = \"plaintext-only\";\n if (cell.contentEditable !== \"plaintext-only\") cell.contentEditable = \"true\";\n // Regaining access while this cell still has focus must enter editing\n // through the same handler as a click, before typing can replace a result.\n if (wasReadOnly && cell === cell.ownerDocument.activeElement) {\n cell.blur();\n cell.focus({ preventScroll: true });\n }\n }\n });\n};\n\n/** Grid width: the widest row, so text beyond the header's columns stays visible (never hidden). */\nconst width = (t: T.Table) => t.lines.reduce((width, line) => Math.max(width, line.cells.length), t.columns);\nconst cells = (t: T.Table) => {\n const columns = width(t);\n return Array.from({ length: T.rowCount(t) }, (_, r) => Array.from({ length: columns }, (_, c) => T.gridLine(t, r)?.cells[c]?.text ?? \"\"));\n};\n\nconst focusCell = (el: HTMLElement, offset: number) => {\n el.dataset.editing = \"1\";\n el.textContent = T.displayCell(el.dataset.raw ?? \"\");\n placeCaret(el, offset);\n};\n\nconst buildGrid = (view: EditorView, t: T.Table, wrap: HTMLElement) => {\n const table = document.createElement(\"table\");\n const grid = cells(t);\n wrap.dataset.header = String(hasHeader(t));\n grid.forEach((row, r) => {\n if (r < firstRow(t)) return;\n const tr = document.createElement(\"tr\");\n tr.dataset.r = String(r);\n row.forEach((raw, c) => {\n const td = document.createElement(r === 0 ? \"th\" : \"td\");\n td.style.textAlign = t.align[c] ?? \"left\";\n // A cell beyond the header's columns: email renderers drop it, so it is marked for review.\n if (c >= t.columns && (T.gridLine(t, r)?.cells.length ?? 0) > c) td.dataset.extra = \"1\";\n const cell = document.createElement(\"div\");\n cell.className = \"k2b-ste-cell\";\n cell.dataset.r = String(r);\n cell.dataset.c = String(c);\n cell.dataset.raw = raw;\n cell.contentEditable = \"plaintext-only\";\n if (cell.contentEditable !== \"plaintext-only\") cell.contentEditable = \"true\";\n cell.spellcheck = true;\n cell.tabIndex = -1;\n cell.setAttribute(\"role\", \"textbox\");\n // The cell menu has no button; screen readers announce its key.\n cell.setAttribute(\"aria-keyshortcuts\", \"Shift+F10\");\n cell.setAttribute(\n \"aria-label\",\n view.state.facet(tableHost)?.cellLabel(r, c, T.displayCell(grid[0]?.[c] ?? \"\")) ?? `${r + 1}, ${c + 1}`,\n );\n if (r === 1 && c === 0 && !raw)\n cell.dataset.placeholder = view.state.facet(tableHost)?.actionLabel?.(\"emptyCell\") ?? \"Type or paste cells\";\n renderCell(view, cell, raw, t, r, c);\n wire(view, cell, wrap);\n td.setAttribute(\"role\", r === 0 ? \"columnheader\" : \"gridcell\");\n td.append(cell);\n // Grips sit in the gutters outside the grid and stay out of the Tab order; Shift+F10 is the key path.\n const grip = (kind: \"rowMenu\" | \"columnMenu\") => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.tabIndex = -1;\n button.className = `k2b-ste-grip k2b-ste-${kind}`;\n button.dataset.c = String(c);\n button.setAttribute(\n \"aria-label\",\n view.state.facet(tableHost)?.actionLabel?.(kind) ?? (kind === \"rowMenu\" ? \"Row menu\" : \"Column menu\"),\n );\n button.setAttribute(\"aria-haspopup\", \"menu\");\n // Full icon names: icon subsets keep only the names that appear in the bundle.\n button.innerHTML = `<i class=\"ti ${kind === \"rowMenu\" ? \"ti-grip-vertical\" : \"ti-grip-horizontal\"}\" aria-hidden=\"true\"></i>`;\n button.onmousedown = (event) => event.preventDefault();\n button.onclick = () => {\n cell.focus({ preventScroll: true });\n wrap.dispatchEvent(\n new CustomEvent(\"k2b-ste-cell-menu\", {\n bubbles: true,\n detail: { cell, anchor: button, scope: kind === \"rowMenu\" ? \"row\" : \"column\" },\n }),\n );\n };\n td.append(button);\n };\n if (c === 0) grip(\"rowMenu\");\n if (r === firstRow(t)) grip(\"columnMenu\");\n tr.append(td);\n });\n tr.setAttribute(\"role\", \"row\");\n table.append(tr);\n });\n table.setAttribute(\"role\", \"grid\");\n // Exactly one grid entry point; internal movement uses the cell keys.\n const first = table.querySelector<HTMLElement>(\".k2b-ste-cell\");\n if (first) first.tabIndex = 0;\n const footer = document.createElement(\"div\");\n footer.className = \"k2b-ste-table-add\";\n for (const action of [\"addRow\", \"addColumn\"] as const) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = `k2b-ste-${action}`;\n const label = view.state.facet(tableHost)?.actionLabel?.(action) ?? (action === \"addRow\" ? \"Row\" : \"Column\");\n button.innerHTML = '<i class=\"ti ti-plus\" aria-hidden=\"true\"></i>';\n if (action === \"addRow\") button.append(label);\n button.setAttribute(\"aria-label\", action === \"addRow\" ? `+ ${label}` : label);\n button.onmousedown = (event) => event.preventDefault();\n button.onclick = () => {\n const current = currentTable(view, wrap);\n if (current)\n runTableAction(view, current.from, T.rowCount(current) - 1, current.columns - 1, action === \"addRow\" ? \"rowBelow\" : \"colRight\");\n };\n footer.append(button);\n }\n const fragment = document.createDocumentFragment();\n fragment.append(table, footer);\n return fragment;\n};\n\nconst patchGrid = (view: EditorView, t: T.Table, dom: HTMLElement, refreshPresentation: boolean) => {\n const grid = cells(t);\n dom.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((el) => {\n const r = Number(el.dataset.r);\n const c = Number(el.dataset.c);\n const raw = grid[r]?.[c] ?? \"\";\n const parent = el.parentElement as HTMLElement;\n parent.style.textAlign = t.align[c] ?? \"left\";\n el.setAttribute(\"aria-label\", view.state.facet(tableHost)?.cellLabel(r, c, T.displayCell(grid[0]?.[c] ?? \"\")) ?? `${r + 1}, ${c + 1}`);\n if (c >= t.columns && (T.gridLine(t, r)?.cells.length ?? 0) > c) parent.dataset.extra = \"1\";\n else delete parent.dataset.extra;\n if (el.dataset.raw === raw && !(refreshPresentation && view.state.facet(tableHost)?.renderCell)) return;\n el.dataset.raw = raw;\n if (el.dataset.editing === \"1\") {\n // The focused cell is refreshed after the update, with mapped caret (see `followChanges`).\n el.dataset.stale = \"1\";\n return;\n }\n renderCell(view, el, raw, t, r, c);\n });\n};\n\nconst dispatchChanges = (view: EditorView, changes: T.Change[], structural = false, selection?: { anchor: number; head: number }) => {\n if (!changes.length || view.state.readOnly) return false;\n const length = view.state.doc.length + changes.reduce((n, c) => n + c.insert.length - (c.to - c.from), 0);\n if (length > (view.state.facet(tableHost)?.maxLength ?? Infinity)) {\n view.state.facet(tableHost)?.onError(\"textTooLarge\");\n return false;\n }\n const host = view.state.facet(tableHost);\n if (structural) host?.boundary();\n if (structural) targeted.add(view);\n try {\n view.dispatch({\n changes: [...changes].sort((a, b) => a.from - b.from).map((change) => ({ ...change, insert: Text.of(change.insert.split(\"\\n\")) })),\n selection,\n annotations: structural ? isolateHistory.of(\"full\") : undefined,\n userEvent: structural ? \"input.table.structure\" : \"input.type.table\",\n });\n } finally {\n targeted.delete(view);\n }\n if (structural) host?.boundary();\n return true;\n};\n\nconst recoverMissingCell = (view: EditorView, el: HTMLElement) => {\n const input = el.textContent ?? \"\";\n if (input) view.state.facet(tableHost)?.onRecovery(input);\n view.state.facet(tableHost)?.onError(\"cellRemoved\");\n el.dataset.editing = \"0\";\n const wrap = el.closest<HTMLElement>(\".k2b-ste-table\");\n const table = wrap && currentTable(view, wrap);\n if (table) renderCell(view, el, el.dataset.raw ?? \"\", table, Number(el.dataset.r), Number(el.dataset.c));\n el.blur();\n};\n\nconst commitCell = (view: EditorView, el: HTMLElement, wrap: HTMLElement) => {\n const missing = missingCells.get(view);\n if (missing?.el === el && missing.changed) {\n recoverMissingCell(view, el);\n return;\n }\n let sync = syncs.get(view);\n if (!sync || sync.el !== el) {\n const t = currentTable(view, wrap);\n const cell = t && T.gridLine(t, Number(el.dataset.r))?.cells[Number(el.dataset.c)];\n if (!cell) {\n if (!t || view.state.readOnly) {\n const host = view.state.facet(tableHost);\n host?.onRecovery(el.textContent ?? \"\");\n if (!t) host?.onError(\"cellRemoved\");\n return;\n }\n const row = Number(el.dataset.r),\n column = Number(el.dataset.c);\n const changes = T.setCellText(t, row, column, T.escapeCell(el.textContent ?? \"\"));\n missingCells.delete(view);\n if (!dispatchChanges(view, changes)) {\n view.state.facet(tableHost)?.onRecovery(el.textContent ?? \"\");\n el.textContent = \"\";\n return;\n }\n const updated = tablesIn(view.state).find((table) => table.from === t.from);\n const created = updated && T.gridLine(updated, row)?.cells[column];\n if (created) {\n resync(view, el, created);\n el.dataset.raw = created.text;\n }\n return;\n }\n resync(view, el, cell);\n sync = syncs.get(view)!;\n }\n const next = (el.textContent ?? \"\").replace(/\\u00a0(?=\\s|$)|(?<=\\s|^)\\u00a0/g, \" \");\n const mappedFrom = sync.desc.mapPos(sync.baseFrom, 1);\n const hit = cellAtPos(view.state, mappedFrom);\n if (!cellSurvives(sync) || !hit) {\n const host = view.state.facet(tableHost);\n host?.onRecovery(next);\n host?.onError(\"cellRemoved\");\n syncs.delete(view);\n view.dispatch({ effects: refreshTables.of(null) });\n return;\n }\n const changes = T.mappedCellChanges(sync.base, next, sync.baseFrom, sync.desc);\n if (!changes.length) {\n // A cancelled composition still needs to reveal remote changes and shape updates.\n view.dispatch({ effects: refreshTables.of(null) });\n return;\n }\n const set = ChangeSet.of(changes, view.state.doc.length);\n const from = set.mapPos(sync.desc.mapPos(sync.baseFrom, -1), -1);\n const to = set.mapPos(sync.desc.mapPos(sync.baseFrom + sync.base.length, 1), 1);\n const [anchorOffset, headOffset] = selectionOffsets(el);\n const localChanges = T.cellChanges(sync.base, next, sync.baseFrom);\n const localSet = ChangeSet.of(localChanges, sync.desc.length);\n const localRaw = T.applyChanges(\n sync.base,\n localChanges.map((change) => ({ ...change, from: change.from - sync.baseFrom, to: change.to - sync.baseFrom })),\n );\n const localMap = T.cellDisplayMap(localRaw);\n const remoteAfterLocal = sync.desc.mapDesc(localSet.desc);\n const position = (offset: number) =>\n remoteAfterLocal.mapPos(localSet.mapPos(sync.baseFrom, -1) + (localMap.offsets[offset] ?? localRaw.length), 1);\n const selection = { anchor: position(anchorOffset), head: position(headOffset) };\n sync.committing = true;\n const accepted = dispatchChanges(view, changes, false, selection);\n sync.committing = false;\n if (!accepted) {\n view.state.facet(tableHost)?.onRecovery(next);\n el.textContent = T.displayCell(sync.base);\n view.dispatch({ effects: refreshTables.of(null) });\n return;\n }\n // Keep the focused input's full extent, including a just-typed trailing space.\n // The Markdown parser trims padding and cannot distinguish it from that space.\n const raw = view.state.sliceDoc(from, to);\n const current = cellAtPos(view.state, from);\n const index = current ? tablesIn(view.state).findIndex((table) => table.from === current.table.from) : -1;\n const currentWrap = findWrap(view, index);\n const target = current && currentWrap && cellAt(currentWrap, current.r, current.c);\n if (!target) {\n syncs.delete(view);\n return;\n }\n // Composition deferred reconciliation. Even a connected element may now\n // occupy another column after a same-size structural edit.\n if (target !== el) {\n if (el.isConnected) {\n el.dataset.editing = \"0\";\n const oldTable = currentTable(view, wrap);\n if (oldTable) renderCell(view, el, el.dataset.raw ?? \"\", oldTable, Number(el.dataset.r), Number(el.dataset.c));\n }\n focusCell(target, 0);\n }\n target.dataset.raw = raw;\n target.dataset.stale = \"0\";\n resync(view, target, { from, to, text: raw });\n const shown = T.displayCell(raw);\n if (((target.textContent ?? \"\") !== shown || target !== el) && !active.get(view)?.composing) {\n target.textContent = shown;\n placeSelection(\n target,\n T.displayCell(view.state.sliceDoc(from, selection.anchor)).length,\n T.displayCell(view.state.sliceDoc(from, selection.head)).length,\n );\n }\n if (wrap.dataset.pendingShape === \"1\") view.dispatch({ effects: refreshTables.of(null) });\n queueCellSelection(view, target);\n};\n\n/** After every update: track changes for the focused cell, refresh it, or refocus it after a rebuild. */\nconst followChanges = EditorView.updateListener.of((update) => {\n const view = update.view;\n const sync = syncs.get(view);\n const missing = missingCells.get(view);\n if (missing && !missing.changed && update.docChanged) {\n missing.changed = true;\n if (!active.get(view)?.composing) recoverMissingCell(view, missing.el);\n }\n if (!sync) return;\n if (update.docChanged) sync.desc = sync.desc.composeDesc(update.changes.desc);\n if (sync.committing || active.get(view)?.composing) return;\n const caretAt = (caret: number) => sync.desc.mapPos(sync.baseFrom + (T.cellDisplayMap(sync.base).offsets[caret] ?? sync.base.length), 1);\n const explicit = update.transactions.some((tr) => tr.selection !== undefined);\n if (!sync.refocusSelection && sync.el.dataset.stale !== \"1\" && !update.docChanged && !explicit) return;\n const selected = sync.refocusSelection ?? (document.activeElement === sync.el ? selectionOffsets(sync.el) : (sync.selection ?? [0, 0]));\n const anchor = explicit ? update.state.selection.main.anchor : caretAt(selected[0]),\n head = explicit ? update.state.selection.main.head : caretAt(selected[1]);\n const hadFocus = sync.refocusSelection !== null || document.activeElement === sync.el;\n sync.refocusSelection = null;\n const hit = cellAtPos(view.state, sync.desc.mapPos(sync.baseFrom, 1));\n if (!hit) return;\n const index = tablesIn(view.state).findIndex((t) => t.from === hit.table.from);\n const wrap = findWrap(view, index);\n const el = wrap && cellAt(wrap, hit.r, hit.c);\n if (!el) return;\n const survives = cellSurvives(sync);\n const from = survives ? sync.desc.mapPos(sync.baseFrom, -1) : hit.cell.from,\n to = survives ? sync.desc.mapPos(sync.baseFrom + sync.base.length, 1) : hit.cell.to;\n const raw = view.state.sliceDoc(from, to);\n const mapped = T.cellDisplayMap(raw);\n const offset = (pos: number) => {\n const at = mapped.offsets.findIndex((n) => n >= pos - from);\n return at < 0 ? mapped.text.length : at;\n };\n if (el !== sync.el && sync.el.isConnected) {\n sync.el.dataset.editing = \"0\";\n const oldWrap = sync.el.closest<HTMLElement>(\".k2b-ste-table\");\n const oldTable = oldWrap && currentTable(view, oldWrap);\n if (oldTable) renderCell(view, sync.el, sync.el.dataset.raw ?? \"\", oldTable, Number(sync.el.dataset.r), Number(sync.el.dataset.c));\n }\n el.dataset.stale = \"0\";\n if (hadFocus) {\n focusCell(el, 0);\n el.dataset.raw = raw;\n el.textContent = mapped.text;\n placeSelection(el, offset(anchor), offset(head));\n }\n resync(view, el, { from, to, text: raw });\n const current = syncs.get(view);\n if (current) current.selection = [offset(anchor), offset(head)];\n});\n\nconst move = (view: EditorView, wrap: HTMLElement, r: number, c: number, edge: \"start\" | \"end\" = \"end\") => {\n const index = active.get(view)?.index ?? -1;\n const target = wrap.isConnected ? wrap : findWrap(view, index);\n const el = target && cellAt(target, r, c);\n if (el) {\n focusCell(el, edge === \"start\" ? 0 : T.displayCell(el.dataset.raw ?? \"\").length);\n if (target) {\n target.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((cell) => (cell.tabIndex = cell === el ? 0 : -1));\n const bounds = target.getBoundingClientRect();\n const box = el.getBoundingClientRect();\n const frozen = c > 0 ? (target.querySelector(\"tr > :first-child\")?.getBoundingClientRect().width ?? 0) : 0;\n if (box.left < bounds.left + frozen) target.scrollLeft -= bounds.left + frozen - box.left;\n else if (box.right > bounds.right - 16) target.scrollLeft += box.right - bounds.right + 16;\n }\n }\n};\n\n/** Source identities, never visual row indexes, decide menu and shortcut boundaries. */\nconst actionAllowed = (t: T.Table, r: number, c: number, action: MenuAction): boolean => {\n if (!Number.isInteger(r) || !Number.isInteger(c) || r < 0 || r >= T.rowCount(t) || c < 0 || c >= width(t)) return false;\n switch (action) {\n case \"rowAbove\":\n case \"deleteRow\":\n return r > 0;\n case \"moveRowUp\":\n return r > 1;\n case \"moveRowDown\":\n return r > 0 && r < T.rowCount(t) - 1;\n case \"deleteCol\":\n return t.columns > 1 || c >= t.columns;\n case \"moveColLeft\":\n case \"moveColRight\":\n return (\n c < t.columns && (action === \"moveColLeft\" ? c > 0 : c < t.columns - 1) && t.lines.every((line) => line.cells.length === t.columns)\n );\n case \"toggleHeader\":\n return hasHeader(t) || !!(t.lines[2]?.cells.some((cell) => cell.text) && t.lines[2].cells.length <= t.columns);\n default:\n return true;\n }\n};\n\nexport const tableActionEnabled = (view: EditorView, wrap: HTMLElement, action: MenuAction): boolean => {\n const t = currentTable(view, wrap),\n act = active.get(view);\n if (!t || !act || view.state.readOnly || !actionAllowed(t, act.r, act.c, action)) return false;\n const structure = view.state.facet(tableHost)?.structure;\n return !structure || structure.available() || (action === \"rowBelow\" && act.r === T.rowCount(t) - 1);\n};\n\n/** Copy the visible table through the browser clipboard, with spreadsheet and rich-text payloads. */\nexport const copyTable = async (view: EditorView, wrap: HTMLElement, format: \"table\" | \"markdown\"): Promise<void> => {\n const t = currentTable(view, wrap);\n if (!t) throw new Error(\"Table is no longer available\");\n if (format === \"markdown\") {\n await navigator.clipboard.writeText(view.state.sliceDoc(t.from, t.to));\n return;\n }\n // Reuse the host's presentation for values (including computed cells), even\n // when the live cell currently exposes its editable source. Controls never\n // become spreadsheet contents. Markdown copy above remains byte-exact.\n const grid = cells(t)\n .slice(firstRow(t))\n .map((row, r) =>\n row.map((raw, c) => {\n const element = view.dom.ownerDocument.createElement(\"div\");\n renderCell(view, element, raw, t, r + firstRow(t), c);\n element\n .querySelectorAll('button, [role=\"button\"], [aria-hidden=\"true\"], [hidden], script, style, template')\n .forEach((node) => node.remove());\n return element.textContent ?? \"\";\n }),\n );\n const text = grid\n .map((row) => row.map((value) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value)).join(\"\\t\"))\n .join(\"\\n\");\n const html = `<table>${grid\n .map(\n (row, r) =>\n `<tr>${row\n .map((value) => {\n const tag = hasHeader(t) && r === 0 ? \"th\" : \"td\";\n return `<${tag}>${escapeHtml(value)}</${tag}>`;\n })\n .join(\"\")}</tr>`,\n )\n .join(\"\")}</table>`;\n if (typeof ClipboardItem !== \"undefined\" && navigator.clipboard?.write)\n await navigator.clipboard.write([\n new ClipboardItem({\n \"text/plain\": new Blob([text], { type: \"text/plain\" }),\n \"text/html\": new Blob([html], { type: \"text/html\" }),\n }),\n ]);\n else await navigator.clipboard.writeText(text);\n};\n\nexport const runMenuAction = (view: EditorView, wrap: HTMLElement, action: MenuAction) => {\n const t = currentTable(view, wrap);\n const act = active.get(view);\n if (t && act) runTableAction(view, t.from, act.r, act.c, action);\n};\n\n/** No ordinal fallback: only a freshly resolved table/row/column can receive focus. */\nconst focusTableTarget = (view: EditorView, target: TableTarget | null) => {\n if (!target || !view.dom.isConnected || view.state.readOnly) return;\n const tables = tablesIn(view.state);\n const index = tables.findIndex((table) => table.from === target.tableFrom);\n const table = tables[index];\n if (\n !table ||\n target.row < firstRow(table) ||\n T.gridLine(table, target.row)?.from !== target.rowFrom ||\n table.lines[0]?.cells[target.column]?.from !== target.columnFrom\n )\n return;\n const wrap = findWrap(view, index);\n if (!wrap) return;\n active.set(view, { index, r: target.row, c: target.column, composing: false });\n move(view, wrap, target.row, target.column);\n const selected = cellAt(wrap, target.row, target.column);\n if (selected && view.dom.ownerDocument.activeElement !== selected)\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: selected } }));\n};\n\n/** Structural actions also work in source mode, without a mounted table widget. */\nexport const runTableAction = (\n view: EditorView,\n tableFrom: number,\n r: number,\n c: number,\n action: MenuAction,\n /** `false` when the gesture already moved the caret out of the table: the result must not pull it back. */\n options: { follow?: boolean } = {},\n) => {\n const tables = tablesIn(view.state);\n const index = tables.findIndex((table) => table.from === tableFrom);\n const t = tables[index];\n if (!t || view.state.readOnly || !actionAllowed(t, r, c, action)) return;\n const host = view.state.facet(tableHost);\n // F3 A: only an append at the end is safe without the server.\n if (host?.structure && !(action === \"rowBelow\" && r === T.rowCount(t) - 1)) {\n if (!host.structure.available()) {\n host.onError(\"structureUnavailable\");\n return;\n }\n const row = T.gridLine(t, r);\n const column = t.lines[0]?.cells[Math.min(c, t.columns - 1)];\n if (!row || !column) {\n host.onError(\"structureFailed\");\n return;\n }\n // A new user gesture while waiting owns the caret. Remote redraws do not.\n const interactionRoot = view.dom;\n let follow = options.follow !== false,\n settled = false;\n const relinquish = () => {\n follow = false;\n };\n const finish = () => {\n settled = true;\n interactionRoot.removeEventListener(\"pointerdown\", relinquish, true);\n interactionRoot.removeEventListener(\"keydown\", relinquish, true);\n };\n queueMicrotask(() => {\n if (settled) return;\n interactionRoot.addEventListener(\"pointerdown\", relinquish, true);\n interactionRoot.addEventListener(\"keydown\", relinquish, true);\n });\n // Invocation is synchronous so a host can capture CRDT anchors before any await.\n try {\n void host.structure\n .perform(action, { tableFrom: t.from, rowFrom: row.from, columnFrom: column.from, row: r, column: c })\n .then((resolve) => {\n const focused = view.dom.ownerDocument.activeElement;\n const ownsFocus =\n !focused ||\n focused === view.dom.ownerDocument.body ||\n view.dom.contains(focused) ||\n focused.closest(\".k2b-gesture-menu__sheet-menu\");\n if (follow && ownsFocus && resolve) focusTableTarget(view, resolve());\n })\n .catch(() => host.onError(\"structureFailed\"))\n .finally(finish);\n } catch {\n finish();\n host.onError(\"structureFailed\");\n }\n return;\n }\n const ops: Record<MenuAction, () => T.Change[]> = {\n completeColumns: () => T.completeColumns(t),\n rowAbove: () => T.insertRow(t, Math.max(0, r - 1)),\n rowBelow: () => T.insertRow(t, r),\n colLeft: () => T.insertColumn(t, c),\n colRight: () => T.insertColumn(t, c + 1),\n deleteRow: () => T.deleteRow(t, r),\n deleteCol: () => T.deleteColumn(t, c),\n moveRowUp: () => T.moveRow(view.state.doc.toString(), t, r, r - 1),\n moveRowDown: () => T.moveRow(view.state.doc.toString(), t, r, r + 1),\n moveColLeft: () => T.moveColumn(t, c, c - 1),\n moveColRight: () => T.moveColumn(t, c, c + 1),\n toggleHeader: () => T.toggleHeader(view.state.doc.toString(), t),\n deleteTable: () => T.deleteTable(t),\n alignLeft: () => T.setAlign(t, c, \"left\"),\n alignCenter: () => T.setAlign(t, c, \"center\"),\n alignRight: () => T.setAlign(t, c, \"right\"),\n };\n const next = {\n moveRowUp: [r - 1, c],\n moveRowDown: [r + 1, c],\n moveColLeft: [r, c - 1],\n moveColRight: [r, c + 1],\n toggleHeader: [hasHeader(t) ? r + 1 : Math.max(0, r - 1), c],\n rowAbove: [r === 0 ? 1 : r, c],\n rowBelow: [r + 1, c],\n colLeft: [r, c],\n colRight: [r, c + 1],\n deleteRow: [Math.max(1, r - 1), c],\n deleteCol: [r, Math.max(0, c - 1)],\n } as Record<string, [number, number]>;\n if (!dispatchChanges(view, ops[action](), true) || options.follow === false) return;\n if (action === \"deleteTable\") {\n active.delete(view);\n syncs.delete(view);\n view.focus();\n view.dispatch({ selection: { anchor: Math.min(t.from, view.state.doc.length) } });\n return;\n }\n const target = next[action] ?? [r, c];\n const wrap = findWrap(view, index);\n if (wrap) {\n active.set(view, { index, r: target[0]!, c: target[1]!, composing: false });\n move(view, wrap, target[0]!, target[1]!);\n // A modal sheet makes the grid inert. Still update its selected context\n // from this synchronous local transaction; focus returns when it closes.\n const selected = cellAt(wrap, target[0]!, target[1]!);\n if (selected && view.dom.ownerDocument.activeElement !== selected)\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: selected } }));\n }\n};\n\n/** Cells one paste may write; larger blocks are refused visibly instead of running thousands of transactions. */\nconst MAX_PASTE_CELLS = 2000;\n\nconst pasteGrid = (view: EditorView, wrap: HTMLElement, startR: number, startC: number, grid: string[][]) => {\n const cellCount = grid.reduce((n, row) => n + row.length, 0);\n if (view.state.readOnly) return;\n if (cellCount > (view.state.facet(tableHost)?.maxPasteCells ?? MAX_PASTE_CELLS)) {\n view.state.facet(tableHost)?.onError(\"pasteTooLarge\");\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-paste-too-large\", { bubbles: true, detail: { cells: cellCount, max: MAX_PASTE_CELLS } }));\n return;\n }\n const host = view.state.facet(tableHost);\n const initial = currentTable(view, wrap);\n if (!initial) return;\n if (host?.structure && grid.some((row) => startC + row.length > initial.columns)) {\n host.onError(\"structureUnavailable\");\n return;\n }\n // One transaction gives paste a single undo step and avoids a partial paste.\n let text = view.state.sliceDoc(initial.from, initial.to);\n let composed = ChangeSet.empty(text.length);\n const apply = (changes: T.Change[]) => {\n const set = ChangeSet.of(\n changes.map((change) => ({ ...change, insert: Text.of(change.insert.split(\"\\n\")) })),\n text.length,\n );\n text = set.apply(Text.of(text.split(\"\\n\"))).toString();\n composed = composed.compose(set);\n };\n for (let i = 0; i < grid.length; i++) {\n let t = T.findTables(text)[0];\n if (!t) return;\n if (startR + i >= T.rowCount(t)) apply(T.insertRow(t, T.rowCount(t) - 1));\n for (let j = 0; j < grid[i]!.length; j++) {\n t = T.findTables(text)[0];\n if (!t) return;\n if (startC + j >= t.columns) apply(T.insertColumn(t, t.columns));\n t = T.findTables(text)[0];\n if (!t) return;\n apply(T.setCellText(t, startR + i, startC + j, T.escapeCell(grid[i]![j] ?? \"\")));\n }\n }\n const changes: T.Change[] = [];\n composed.iterChanges((from, to, _newFrom, _newTo, insert) =>\n changes.push({ from: initial.from + from, to: initial.from + to, insert: insert.toString() }),\n );\n dispatchChanges(view, changes, true);\n};\n\nconst wire = (view: EditorView, el: HTMLElement, wrap: HTMLElement) => {\n const pos = () => ({ r: Number(el.dataset.r), c: Number(el.dataset.c) });\n el.addEventListener(\"focus\", () => {\n const grid = wrap.querySelector(\"table\");\n if (grid && !grid.hasAttribute(\"data-sized\")) {\n const widths = Array.from(grid.rows[0]?.cells ?? []).map((cell) => cell.getBoundingClientRect().width);\n if (widths.every((width) => width > 0)) {\n const columns = document.createElement(\"colgroup\");\n for (const width of widths) {\n const column = document.createElement(\"col\");\n column.style.width = `${width}px`;\n columns.append(column);\n }\n grid.prepend(columns);\n grid.style.width = `${widths.reduce((sum, width) => sum + width, 0)}px`;\n grid.style.tableLayout = \"fixed\";\n grid.dataset.sized = \"1\";\n }\n }\n active.set(view, { index: tableIndex(view, wrap), ...pos(), composing: false });\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((cell) => (cell.tabIndex = cell === el ? 0 : -1));\n wrap.dataset.activeR = el.dataset.r;\n wrap.dataset.activeC = el.dataset.c;\n // Without hover, a phone shows the grips of the focused cell's row and column.\n wrap\n .querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu\")\n .forEach((grip) => grip.toggleAttribute(\"data-current\", grip.dataset.c === el.dataset.c));\n if (view.state.readOnly) {\n // A read-only cell selects rendered text; it never enters source editing.\n // Keyboard entry may have prepared editable text before focusing it.\n if (el.dataset.editing === \"1\") {\n el.dataset.editing = \"0\";\n const table = currentTable(view, wrap);\n if (table) renderCell(view, el, el.dataset.raw ?? \"\", table, Number(el.dataset.r), Number(el.dataset.c));\n }\n syncs.delete(view);\n missingCells.delete(view);\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: el } }));\n return;\n }\n const t = currentTable(view, wrap);\n const cell = t && T.gridLine(t, Number(el.dataset.r))?.cells[Number(el.dataset.c)];\n missingCells.delete(view);\n if (cell) resync(view, el, cell);\n else {\n syncs.delete(view);\n missingCells.set(view, { el, changed: false });\n }\n if (el.dataset.editing !== \"1\") {\n el.dataset.editing = \"1\";\n const shown = T.displayCell(el.dataset.raw ?? \"\");\n // Only cells with formatting change their text; plain cells keep the caret where the tap put it.\n if (el.textContent !== shown || el.childElementCount > 0) {\n el.textContent = shown;\n placeCaret(el, shown.length);\n }\n }\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: el } }));\n queueCellSelection(view, el);\n });\n el.addEventListener(\"blur\", () => {\n if (rebuilding.has(view)) return;\n const sync = syncs.get(view);\n if (sync?.el === el) sync.selection = selectionOffsets(el);\n el.dataset.editing = \"0\";\n queueMicrotask(() => {\n // Chromium blurs a focused cell while CodeMirror removes its widget.\n // Wait for that update before consulting CodeMirror's DOM mapping. A\n // removed widget has no mapping in the newly configured source view.\n if (!wrap.isConnected) return;\n const focused = el.ownerDocument.activeElement;\n const table = currentTable(view, wrap);\n // Read-only focus never changed presentation. Replacing it on blur would\n // detach the text nodes held by the person's native selection.\n if (table && !view.state.readOnly && el.dataset.editing !== \"1\")\n renderCell(view, el, el.dataset.raw ?? \"\", table, Number(el.dataset.r), Number(el.dataset.c));\n if (!wrap.contains(focused)) {\n delete wrap.dataset.activeR;\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu[data-current]\").forEach((grip) => delete grip.dataset.current);\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-blur\", { bubbles: true }));\n if (!(focused instanceof HTMLElement && focused.classList.contains(\"k2b-ste-cell\") && view.dom.contains(focused)))\n view.state.facet(tableHost)?.onCellSelection?.(null);\n }\n });\n });\n el.addEventListener(\"compositionstart\", () => {\n if (view.state.readOnly) return;\n const act = active.get(view);\n if (act) act.composing = true;\n });\n el.addEventListener(\"compositionend\", () => {\n if (view.state.readOnly) return;\n const act = active.get(view);\n if (act) act.composing = false;\n commitCell(view, el, wrap);\n });\n el.addEventListener(\"beforeinput\", (event) => {\n if (view.state.readOnly) {\n event.preventDefault();\n return;\n }\n if (event.inputType === \"historyUndo\" || event.inputType === \"historyRedo\") {\n event.preventDefault();\n const host = view.state.facet(tableHost);\n if (event.inputType === \"historyUndo\") host?.undo();\n else host?.redo();\n }\n });\n el.addEventListener(\"input\", (event) => {\n // During composition the text is provisional; the browser owns the DOM.\n if (view.state.readOnly || (event as InputEvent).isComposing || active.get(view)?.composing) return;\n commitCell(view, el, wrap);\n });\n el.addEventListener(\"paste\", (event) => {\n event.preventDefault();\n if (view.state.readOnly) return;\n const data = event.clipboardData;\n if (!data) return;\n const host = view.state.facet(tableHost);\n const clipboard = inspectClipboard(data, { maxLength: host?.maxLength ?? Infinity, maxPasteCells: host?.maxPasteCells ?? 2000 });\n if (\"error\" in clipboard) {\n host?.onError(clipboard.error);\n return;\n }\n const { html, text, images, files } = clipboard;\n if (images) host?.onDroppedImages?.(images, files);\n const grid = (html ? htmlTableGrid(html) : null) ?? T.parseTsv(text);\n const { r, c } = pos();\n if (grid?.length) pasteGrid(view, wrap, r, c, grid);\n else {\n const inline = (html && convertClipboardHtml(html, false)?.markdown) || text;\n document.execCommand(\"insertText\", false, inline.replace(/\\s*\\r?\\n\\s*/g, \" \"));\n }\n });\n el.addEventListener(\"pointerenter\", () => {\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu\").forEach((grip, column) => {\n grip.toggleAttribute(\"data-hovered\", column === Number(el.dataset.c));\n });\n });\n el.addEventListener(\"contextmenu\", (event) => {\n event.preventDefault();\n pendingContextMenus.get(view)?.abort();\n el.focus({ preventScroll: true });\n const open = () => {\n if (el.isConnected)\n wrap.dispatchEvent(\n new CustomEvent(\"k2b-ste-cell-menu\", { bubbles: true, detail: { cell: el, x: event.clientX, y: event.clientY } }),\n );\n };\n // WebKit fires contextmenu on right-button down. Opening a native popover\n // then lets that same press dismiss it on release. Chrome fires after up.\n if (event.button === 2 && (event.buttons & 2) !== 0) {\n const pending = new AbortController();\n pendingContextMenus.set(view, pending);\n const cancel = () => {\n pending.abort();\n if (pendingContextMenus.get(view) === pending) pendingContextMenus.delete(view);\n };\n el.ownerDocument.addEventListener(\n \"mouseup\",\n (release) => {\n if (release.button !== 2) return;\n cancel();\n open();\n },\n { signal: pending.signal },\n );\n el.ownerDocument.addEventListener(\"pointercancel\", cancel, { signal: pending.signal, once: true });\n el.ownerDocument.defaultView?.addEventListener(\"blur\", cancel, { signal: pending.signal, once: true });\n } else open();\n });\n el.addEventListener(\"keydown\", (event) => {\n if (event.defaultPrevented) return; // A host completion/snippet handled this key.\n const host = view.state.facet(tableHost);\n const t = currentTable(view, wrap);\n if (!t) return;\n const { r, c } = pos();\n const mod = event.metaKey || event.ctrlKey;\n if (event.isComposing) return;\n if (event.key === \"ContextMenu\" || (event.key === \"F10\" && event.shiftKey)) {\n event.preventDefault();\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-menu\", { bubbles: true, detail: { cell: el } }));\n return;\n }\n // Preserve native selection/copy/navigation for non-editable rendered text.\n if (view.state.readOnly) return;\n if (mod && !event.shiftKey && event.key.toLowerCase() === \"a\") {\n // Nested contenteditables do not scope native Select All consistently.\n // Keep replacement and formatting inside this cell in every host.\n event.preventDefault();\n event.stopPropagation();\n placeSelection(el, 0, el.textContent?.length ?? 0);\n queueCellSelection(view, el);\n return;\n }\n if (mod && [\"b\", \"i\", \"k\"].includes(event.key.toLowerCase())) {\n event.preventDefault();\n const command = event.key.toLowerCase() === \"b\" ? \"bold\" : event.key.toLowerCase() === \"i\" ? \"italic\" : \"link\";\n formatActiveCell(view, command);\n return;\n }\n if (mod && event.key.toLowerCase() === \"z\") {\n event.preventDefault();\n if (event.shiftKey) host?.redo();\n else host?.undo();\n return;\n }\n if (mod && event.key.toLowerCase() === \"y\") {\n event.preventDefault();\n host?.redo();\n return;\n }\n if (event.altKey && !mod && !event.shiftKey) {\n const actions: Record<string, MenuAction> = {\n ArrowUp: \"moveRowUp\",\n ArrowDown: \"moveRowDown\",\n ArrowLeft: \"moveColLeft\",\n ArrowRight: \"moveColRight\",\n };\n const action = actions[event.key];\n if (action) {\n event.preventDefault();\n runTableAction(view, t.from, r, c, action);\n return;\n }\n }\n if (event.key === \"Tab\") {\n if (host?.tabMovesFocus?.()) return;\n event.preventDefault();\n const last = r === T.rowCount(t) - 1 && c === t.columns - 1;\n if (!event.shiftKey && last) {\n dispatchChanges(view, T.insertRow(t, r), true);\n move(view, wrap, r + 1, 0);\n return;\n }\n const index = r * t.columns + c + (event.shiftKey ? -1 : 1);\n if (index < firstRow(t) * t.columns) {\n leave(view, wrap, \"before\");\n return;\n }\n move(view, wrap, Math.floor(index / t.columns), index % t.columns);\n const next = findWrap(view, tableIndex(view, wrap));\n const cell = next && cellAt(next, Math.floor(index / t.columns), index % t.columns);\n if (cell) placeSelection(cell, 0, cell.textContent?.length ?? 0);\n return;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (event.shiftKey) return; // a cell holds one line\n const last = T.rowCount(t) - 1;\n if (r < last) move(view, wrap, r + 1, c);\n else if (r > 1 && T.gridLine(t, last)?.cells.every((cell) => !T.displayCell(cell.text).trim())) {\n // Match the list-like exit: remove the empty trailing row when allowed.\n // F3 A keeps deletion server-only; offline we can still leave the table.\n if (!host?.structure || host.structure.available()) runTableAction(view, t.from, r, c, \"deleteRow\", { follow: false });\n leave(view, wrap, \"after\");\n } else if (dispatchChanges(view, T.insertRow(t, last), true)) move(view, wrap, last + 1, c);\n return;\n }\n if ((event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") && !event.shiftKey && !mod && !event.altKey) {\n const [anchor, head] = selectionOffsets(el);\n const right = event.key === \"ArrowRight\";\n if (anchor !== head || head !== (right ? (el.textContent?.length ?? 0) : 0)) return;\n event.preventDefault();\n const next = r * t.columns + c + (right ? 1 : -1);\n if (next >= firstRow(t) * t.columns && next < T.rowCount(t) * t.columns)\n move(view, wrap, Math.floor(next / t.columns), next % t.columns, right ? \"start\" : \"end\");\n else leave(view, wrap, right ? \"after\" : \"before\");\n return;\n }\n if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n if (event.shiftKey || event.altKey || mod || !atCellVisualEdge(el, event.key === \"ArrowDown\")) return;\n const next = r + (event.key === \"ArrowUp\" ? -1 : 1);\n event.preventDefault();\n if (next >= firstRow(t) && next < T.rowCount(t)) move(view, wrap, next, c);\n else leave(view, wrap, next < firstRow(t) ? \"before\" : \"after\");\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n leave(view, wrap, \"after\");\n return;\n }\n // Mod-Home/End leave the grid for the note's start or end; the browser would only move inside the cell's page region.\n if (mod && !event.shiftKey && !event.altKey && (event.key === \"Home\" || event.key === \"End\")) {\n event.preventDefault();\n if (event.key === \"End\" && t.to === view.state.doc.length) return leave(view, wrap, \"after\");\n view.focus();\n view.dispatch({ selection: { anchor: event.key === \"Home\" ? 0 : view.state.doc.length }, scrollIntoView: true });\n }\n });\n};\n\n/** Route formatting to the active cell instead of the hidden outer-editor caret. */\nexport const formatActiveCell = (view: EditorView, name: InlineFormat): boolean => {\n const act = active.get(view);\n const wrap = act && findWrap(view, act.index);\n const el = act && wrap && cellAt(wrap, act.r, act.c);\n const table = wrap && currentTable(view, wrap);\n const source = wrap && sources.get(wrap);\n if (source?.element.contains(view.dom.ownerDocument.activeElement)) {\n if (!view.state.readOnly && !source.editor.state.readOnly) source.editor.dispatch(inlineFormat(source.editor.state, name));\n return true;\n }\n if (!el || !table || !act || view.state.readOnly) return false;\n const missing = missingCells.get(view);\n if (missing?.el === el && missing.changed) {\n recoverMissingCell(view, el);\n return true;\n }\n let sync = syncs.get(view);\n let base = view.state;\n let materialized = ChangeSet.empty(base.doc.length);\n let cell = T.gridLine(table, act.r)?.cells[act.c];\n if (!cell) {\n const changes = T.setCellText(table, act.r, act.c, \"\");\n materialized = base.changes(changes);\n base = base.update({ changes: materialized }).state;\n cell = T.gridLine(tablesIn(base).find((t) => t.from === table.from)!, act.r)?.cells[act.c];\n sync = undefined;\n }\n if (!cell) return true;\n const offsets = sync?.el === el ? (el.dataset.editing === \"1\" ? selectionOffsets(el) : (sync.selection ?? [0, 0])) : [0, 0];\n const map = T.cellDisplayMap(sync?.el === el ? sync.base : cell.text);\n const position = (offset: number) =>\n sync?.el === el\n ? sync.desc.mapPos(sync.baseFrom + (map.offsets[offset] ?? sync.base.length), 1)\n : cell!.from + (map.offsets[offset] ?? cell!.text.length);\n base = base.update({ selection: { anchor: position(offsets[0]!), head: position(offsets[1]!) } }).state;\n const formatted = base.update(inlineFormat(base, name));\n const changes: T.Change[] = [];\n materialized.compose(formatted.changes).iterChanges((from, to, _a, _b, insert) => changes.push({ from, to, insert: insert.toString() }));\n const selection = formatted.state.selection.main;\n missingCells.delete(view);\n if (sync) sync.committing = true;\n const accepted = dispatchChanges(view, changes, true, selection);\n if (sync) sync.committing = false;\n if (!accepted) return true;\n const hit = cellAtPos(view.state, selection.head);\n const currentWrap =\n hit &&\n findWrap(\n view,\n tablesIn(view.state).findIndex((t) => t.from === hit.table.from),\n );\n const target = hit && currentWrap && cellAt(currentWrap, hit.r, hit.c);\n if (target && hit) {\n focusCell(target, 0);\n placeSelection(\n target,\n T.displayCell(view.state.sliceDoc(hit.cell.from, selection.anchor)).length,\n T.displayCell(view.state.sliceDoc(hit.cell.from, selection.head)).length,\n );\n resync(view, target, hit.cell);\n }\n return true;\n};\n\nconst syncCellSelection = (view: EditorView, el = syncs.get(view)?.el) => {\n const sync = syncs.get(view);\n if (!el?.isConnected || document.activeElement !== el || sync?.el !== el || active.get(view)?.composing) return;\n const [a, h] = selectionOffsets(el);\n const map = T.cellDisplayMap(sync.base);\n const position = (offset: number) => sync.desc.mapPos(sync.baseFrom + (map.offsets[offset] ?? sync.base.length), 1);\n const anchor = position(a),\n head = position(h);\n if (anchor !== view.state.selection.main.anchor || head !== view.state.selection.main.head)\n view.dispatch({ selection: { anchor, head } });\n view.state.facet(tableHost)?.onCellSelection?.({ anchor, head });\n};\nconst pendingSelection = new WeakSet<EditorView>();\nconst queueCellSelection = (view: EditorView, el: HTMLElement) => {\n if (pendingSelection.has(view)) return;\n pendingSelection.add(view);\n queueMicrotask(() => {\n pendingSelection.delete(view);\n syncCellSelection(view, el);\n });\n};\nconst atCellVisualEdge = (el: HTMLElement, down: boolean) => {\n const selection = el.ownerDocument.getSelection();\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\n const range = selection.getRangeAt(0).cloneRange();\n range.collapse(false);\n let caret = range.getBoundingClientRect();\n if (!caret.height) {\n // A collapsed range at a container boundary has no rectangle in WebKit.\n // Measure the neighbouring character without changing the user's selection.\n const at = selectionOffsets(el)[1];\n const walker = el.ownerDocument.createTreeWalker(el, NodeFilter.SHOW_TEXT);\n let remaining = at;\n for (let node = walker.nextNode(); node; node = walker.nextNode()) {\n const length = node.textContent?.length ?? 0;\n if (remaining <= length && length) {\n const start = Math.min(remaining, length - 1);\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n caret = range.getBoundingClientRect();\n break;\n }\n remaining -= length;\n }\n }\n if (!caret.height) return !(el.textContent ?? \"\").length;\n const box = el.getBoundingClientRect(),\n style = getComputedStyle(el);\n const lineHeight = Number.parseFloat(style.lineHeight) || caret.height;\n return down\n ? box.bottom - caret.bottom <= Number.parseFloat(style.paddingBottom) + lineHeight / 2\n : caret.top - box.top <= Number.parseFloat(style.paddingTop) + lineHeight / 2;\n};\nconst enterTable = (view: EditorView, down: boolean) => {\n const selection = view.state.selection.main;\n if (!selection.empty) return false;\n const line = view.state.doc.lineAt(selection.head);\n if (view.state.doc.lineAt(view.moveVertically(selection, down).head).number === line.number) return false;\n const tables = tablesIn(view.state);\n const index = tables.findIndex((t) =>\n down\n ? t.from > line.to && view.state.doc.lineAt(t.from).number === line.number + 1\n : t.to < line.from && view.state.doc.lineAt(t.to).number === line.number - 1,\n );\n const table = tables[index];\n const wrap = findWrap(view, index);\n const el = table && wrap && cellAt(wrap, down ? firstRow(table) : T.rowCount(table) - 1, 0);\n if (!el) return false;\n focusCell(el, 0);\n return true;\n};\n\nconst leave = (view: EditorView, wrap: HTMLElement, where: \"before\" | \"after\") => {\n const t = currentTable(view, wrap);\n if (!t) return;\n // An EOF table needs an actual paragraph to receive the caret.\n if (where === \"after\" && t.to === view.state.doc.length && !view.state.readOnly)\n dispatchChanges(view, [{ from: t.to, to: t.to, insert: \"\\n\\n\" }]);\n const anchor = where === \"before\" ? Math.max(0, t.from - 1) : Math.min(view.state.doc.length, t.to + 1);\n view.focus();\n view.dispatch({ selection: { anchor }, scrollIntoView: true });\n};\n\n/** First `<table>` of pasted HTML as a grid (Excel, Sheets, Word, web pages). */\nexport const htmlTableGrid = (html: string): string[][] | null => {\n const doc = parseClipboardHtml(html);\n const table = doc.querySelector(\"table\");\n if (!table) return null;\n const rows = [...table.querySelectorAll(\"tr\")].map((tr) =>\n [...tr.querySelectorAll(\"th,td\")].map((cell) => (cell.textContent ?? \"\").replace(/\\s+/g, \" \").trim()),\n );\n return rows.filter((row) => row.length).length ? rows.filter((row) => row.length) : null;\n};\n\nconst decorate = (state: EditorState): DecorationSet =>\n Decoration.set(\n tablesIn(state).map((t) => Decoration.replace({ widget: new GridWidget(t, state.readOnly), block: true }).range(t.from, t.to)),\n true,\n );\n\nexport const tableGrid = (): Extension => [\n clipboardLoading((view) => view.state.facet(tableHost), syncCellSelection),\n Prec.highest(\n keymap.of([\n { key: \"ArrowDown\", run: (view) => enterTable(view, true) },\n { key: \"ArrowUp\", run: (view) => enterTable(view, false) },\n ]),\n ),\n ViewPlugin.define((view) => {\n const selection = () => {\n const el = syncs.get(view)?.el;\n if (el) queueCellSelection(view, el);\n };\n view.dom.ownerDocument.addEventListener(\"selectionchange\", selection);\n // The editor's width decides how far grids may reach beside the text and whether more columns follow.\n const resize =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n for (const wrap of view.contentDOM.querySelectorAll<HTMLElement>(\".k2b-ste-table\")) measureScroll(view, wrap);\n });\n resize?.observe(view.dom);\n return {\n destroy() {\n resize?.disconnect();\n pendingContextMenus.get(view)?.abort();\n pendingContextMenus.delete(view);\n view.dom.ownerDocument.removeEventListener(\"selectionchange\", selection);\n syncs.delete(view);\n missingCells.delete(view);\n active.delete(view);\n view.state.facet(tableHost)?.onCellSelection?.(null);\n },\n };\n }),\n StateField.define<DecorationSet>({\n create: decorate,\n update: (value, tr) =>\n tr.docChanged ||\n tr.effects.some((e) => e.is(refreshTables)) ||\n tr.startState.readOnly !== tr.state.readOnly ||\n syntaxTree(tr.startState) !== syntaxTree(tr.state)\n ? decorate(tr.state)\n : value,\n provide: (field) => [EditorView.decorations.from(field), EditorView.atomicRanges.of((view) => view.state.field(field))],\n }),\n followChanges,\n];\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["text-editor/table.ts"],"sourcesContent":["/**\n * Editable table grid for the formatted view.\n *\n * A Markdown table is replaced by a grid whose cells are small plain-text\n * editing surfaces. Typing in a cell turns into the minimal text change inside\n * that cell's Markdown range (see markdown-table.ts), so the stored format stays\n * Markdown and concurrent edits merge at character level.\n *\n * Rules that keep it stable:\n * - the grid DOM is patched in place (`updateDOM`), never rebuilt while a cell\n * has focus unless the shape changed;\n * - the focused cell is never rewritten while an IME composition runs;\n * remote text for that cell waits until `compositionend`;\n * - every structural action is one transaction, so one undo step.\n */\nimport { history, historyKeymap, isolateHistory } from \"@codemirror/commands\";\nimport { syntaxTree } from \"@codemirror/language\";\nimport {\n type ChangeDesc,\n ChangeSet,\n Compartment,\n EditorState,\n type Extension,\n Facet,\n Prec,\n StateEffect,\n StateField,\n Text,\n} from \"@codemirror/state\";\nimport { Decoration, type DecorationSet, EditorView, keymap, ViewPlugin, WidgetType } from \"@codemirror/view\";\nimport { convertClipboardHtml, inspectClipboard, parseClipboardHtml } from \"./clipboard\";\nimport { clipboardLoading } from \"./clipboard-loading\";\nimport { type InlineFormat, inlineFormat } from \"./format\";\nimport { markdownLanguage } from \"./language\";\nimport * as T from \"./markdown-table\";\nimport { textEditorMessages } from \"./messages\";\n\nexport type TableTarget = { tableFrom: number; rowFrom: number; columnFrom: number; row: number; column: number };\n/** Resolve a server-returned identity against the current document immediately before focus. */\nexport type TableFocusTarget = () => TableTarget | null;\nexport type TableHost = {\n undo: () => void;\n redo: () => void;\n boundary: () => void;\n cellLabel: (row: number, column: number, name?: string) => string;\n sourceLabels?: () => {\n edit: string;\n valid: string;\n invalid: string;\n changed: string;\n structural: string;\n applying?: string;\n applyFailed?: string;\n done: string;\n discard: string;\n continue: string;\n line?: (line: number) => string;\n separator?: (header: number, separator: number) => string;\n extra?: (line: number) => string;\n complete?: string;\n };\n actionLabel?: (action: \"rowMenu\" | \"columnMenu\" | \"addRow\" | \"addColumn\" | \"emptyCell\") => string;\n /** Respect a host's personal Tab-for-focus preference inside cells too. */\n tabMovesFocus?: () => boolean;\n /** Capture durable anchors synchronously, then send the action to the owning server. */\n structure?: {\n available: () => boolean;\n perform: (action: MenuAction, target: TableTarget) => Promise<TableFocusTarget | void>;\n /** Resolves only after the confirmed update is applied; rejects without discarding the draft. */\n replaceSource?: (\n target: TableTarget,\n expected: string,\n source: string,\n caret: { row: number; column: number },\n ) => Promise<TableFocusTarget | void>;\n };\n onError: (code: \"structureUnavailable\" | \"structureFailed\" | \"pasteTooLarge\" | \"textTooLarge\" | \"cellRemoved\") => void;\n onRecovery: (text: string) => void;\n /** Cell focus is separate from CodeMirror contentDOM focus; collaboration maps these offsets to its own cursor. */\n onCellSelection?: (selection: { anchor: number; head: number } | null) => void;\n onDroppedImages?: (count: number, files: File[]) => void;\n maxLength: number;\n maxPasteCells: number;\n /** App-owned presentation, e.g. formula results. Called only outside the active cell. */\n renderCell?: (element: HTMLElement, raw: string, table: T.Table, row: number, column: number) => void;\n};\nexport type MenuAction =\n | \"completeColumns\"\n | \"rowAbove\"\n | \"rowBelow\"\n | \"colLeft\"\n | \"colRight\"\n | \"deleteRow\"\n | \"deleteCol\"\n | \"moveRowUp\"\n | \"moveRowDown\"\n | \"moveColLeft\"\n | \"moveColRight\"\n | \"toggleHeader\"\n | \"deleteTable\"\n | \"alignLeft\"\n | \"alignCenter\"\n | \"alignRight\";\n\nexport const tableHost = Facet.define<TableHost, TableHost | null>({ combine: (v) => v[0] ?? null });\n\ntype Active = { index: number; r: number; c: number; composing: boolean };\nconst active = new WeakMap<EditorView, Active>();\nconst pendingContextMenus = new WeakMap<EditorView, AbortController>();\n\n/**\n * What the focused cell's DOM was last synced to: the cell text and its start\n * in the document, plus every document change since. A commit diffs the DOM\n * against `base` and maps the result through `desc`, so text that other\n * people typed meanwhile (during an IME composition, for example) survives.\n */\ntype Sync = {\n el: HTMLElement;\n baseFrom: number;\n base: string;\n desc: ChangeDesc;\n committing: boolean;\n refocusSelection: [number, number] | null;\n selection?: [number, number];\n edges: number[];\n};\nconst syncs = new WeakMap<EditorView, Sync>();\n// An unmaterialized ragged cell has no source identity yet. Never infer its\n// baseline from a later numeric position after another transaction changes it.\nconst missingCells = new WeakMap<EditorView, { el: HTMLElement; changed: boolean }>();\nconst rebuilding = new WeakSet<EditorView>();\n/** A structural action that moves focus itself; a rebuild then does not restore the old caret. */\nconst targeted = new WeakSet<EditorView>();\nconst refreshTables = StateEffect.define<null>();\n\n// Browsers write a trailing or doubled space as U+00A0; a typed no-break space between words stays.\n\nconst parsedTables = new WeakMap<EditorState, T.Table[]>();\nexport const tablesIn = (state: EditorState): T.Table[] => {\n const cached = parsedTables.get(state);\n if (cached) return cached;\n const tables = T.findTables(state.doc.toString());\n parsedTables.set(state, tables);\n return tables;\n};\n\nconst currentTable = (view: EditorView, dom: HTMLElement): T.Table | null => {\n if (!dom.isConnected || !view.dom.contains(dom)) return null;\n const pos = view.posAtDOM(dom);\n return tablesIn(view.state).find((t) => pos >= t.from && pos <= t.to) ?? null;\n};\nconst tableIndex = (view: EditorView, dom: HTMLElement): number => {\n if (!dom.isConnected || !view.dom.contains(dom)) return -1;\n const pos = view.posAtDOM(dom);\n return tablesIn(view.state).findIndex((t) => pos >= t.from && pos <= t.to);\n};\n/** The grid element of the n-th table, looked up again: CodeMirror may have replaced it. */\nconst findWrap = (view: EditorView, index: number): HTMLElement | null =>\n [...view.contentDOM.querySelectorAll<HTMLElement>(\".k2b-ste-table\")].find((el) => tableIndex(view, el) === index) ?? null;\n\ntype Hit = { table: T.Table; r: number; c: number; cell: T.Cell };\nconst cellAtPos = (state: EditorState, pos: number): Hit | null => {\n for (const table of tablesIn(state)) {\n if (pos < table.from || pos > table.to) continue;\n for (let r = 0; r < T.rowCount(table); r++) {\n const line = T.gridLine(table, r)!;\n if (pos < line.from || pos > line.to) continue;\n const before = line.pipes.filter((p) => p < pos).length;\n const c = Math.max(0, Math.min(line.cells.length - 1, line.leadingPipe ? before - 1 : before));\n const cell = line.cells[c];\n return cell ? { table, r, c, cell } : null;\n }\n }\n return null;\n};\n\nconst cellSurvives = (sync: Sync): boolean => {\n const survived = new Set<number>();\n sync.desc.iterGaps((from, _newFrom, length) => {\n for (const edge of sync.edges) if (edge >= from && edge < from + length) survived.add(edge);\n });\n return survived.size === sync.edges.length;\n};\n\nconst resync = (view: EditorView, el: HTMLElement, cell: T.Cell) => {\n const hit = cellAtPos(view.state, cell.from);\n const line = hit && T.gridLine(hit.table, hit.r);\n const edges: number[] = [];\n if (line && hit) {\n const left = line.leadingPipe ? line.pipes[hit.c] : hit.c === 0 ? line.from - 1 : line.pipes[hit.c - 1];\n const right = (line.leadingPipe ? line.pipes[hit.c + 1] : line.pipes[hit.c]) ?? line.to;\n if (left !== undefined && left >= 0) edges.push(left);\n if (right < view.state.doc.length) edges.push(right);\n }\n syncs.set(view, {\n el,\n baseFrom: cell.from,\n base: cell.text,\n desc: ChangeSet.empty(view.state.doc.length).desc,\n committing: false,\n refocusSelection: null,\n edges,\n });\n};\n\nconst escapeHtml = (s: string) => s.replace(/[&<>\"]/g, (ch) => `&${{ \"&\": \"amp\", \"<\": \"lt\", \">\": \"gt\", '\"': \"quot\" }[ch]};`);\n/** Render the same Markdown tokens as prose, keeping code and escaped markers literal. */\nexport const renderInline = (raw: string) => {\n const text = raw;\n const tree = markdownLanguage.parser.parse(text);\n const render = (node: typeof tree.topNode): string => {\n const tags: Record<string, [string, string, string[]]> = {\n StrongEmphasis: [\"<strong>\", \"</strong>\", [\"EmphasisMark\"]],\n Emphasis: [\"<em>\", \"</em>\", [\"EmphasisMark\"]],\n Strikethrough: [\"<s>\", \"</s>\", [\"StrikethroughMark\"]],\n InlineCode: ['<code class=\"k2b-ste-code\">', \"</code>\", [\"CodeMark\"]],\n Link: ['<span class=\"k2b-ste-link\">', \"</span>\", [\"LinkMark\", \"URL\", \"LinkTitle\"]],\n };\n if (node.name === \"Escape\") return escapeHtml(text.slice(node.from + 1, node.to));\n const spec = tags[node.name];\n let result = spec?.[0] ?? \"\";\n let from = node.from;\n for (let child = node.firstChild; child; child = child.nextSibling) {\n result += escapeHtml(node.name === \"InlineCode\" ? T.displayCell(text.slice(from, child.from)) : text.slice(from, child.from));\n if (!spec?.[2].includes(child.name)) result += render(child);\n from = child.to;\n }\n const tail = text.slice(from, node.to);\n return result + escapeHtml(node.name === \"InlineCode\" ? T.displayCell(tail) : tail) + (spec?.[1] ?? \"\");\n };\n return render(tree.topNode);\n};\n\nconst renderCell = (view: EditorView, element: HTMLElement, raw: string, table: T.Table, row: number, column: number) => {\n const render = view.state.facet(tableHost)?.renderCell;\n if (render) render(element, raw, table, row, column);\n else element.innerHTML = renderInline(raw);\n};\n\nconst cellAt = (dom: HTMLElement, r: number, c: number) => dom.querySelector<HTMLElement>(`.k2b-ste-cell[data-r=\"${r}\"][data-c=\"${c}\"]`);\n\nconst caretOffset = (el: HTMLElement): number => {\n const sel = el.ownerDocument.getSelection();\n if (!sel || !sel.rangeCount || !el.contains(sel.anchorNode)) return el.textContent?.length ?? 0;\n const range = sel.getRangeAt(0).cloneRange();\n range.selectNodeContents(el);\n range.setEnd(sel.anchorNode!, sel.anchorOffset);\n return range.toString().length;\n};\nconst selectionOffsets = (el: HTMLElement): [number, number] => {\n const selection = el.ownerDocument.getSelection();\n const offset = (node: Node | null, at: number) => {\n if (!node || !el.contains(node)) return caretOffset(el);\n const range = el.ownerDocument.createRange();\n range.selectNodeContents(el);\n range.setEnd(node, at);\n return range.toString().length;\n };\n return [\n offset(selection?.anchorNode ?? null, selection?.anchorOffset ?? 0),\n offset(selection?.focusNode ?? null, selection?.focusOffset ?? 0),\n ];\n};\n\nconst placeSelection = (el: HTMLElement, anchor: number, head = anchor) => {\n el.focus({ preventScroll: true });\n const selection = el.ownerDocument.getSelection();\n const text = el.firstChild;\n if (!selection) return;\n if (text?.nodeType === Node.TEXT_NODE) {\n const length = text.textContent?.length ?? 0;\n selection.setBaseAndExtent(text, Math.max(0, Math.min(anchor, length)), text, Math.max(0, Math.min(head, length)));\n } else selection.setBaseAndExtent(el, 0, el, 0);\n};\nconst placeCaret = (el: HTMLElement, offset: number) => placeSelection(el, offset);\n\nconst hasHeader = (t: T.Table) => t.lines[0]!.cells.some((cell) => cell.text.length > 0);\nconst firstRow = (t: T.Table) => (hasHeader(t) ? 0 : 1);\nconst shapeOf = (t: T.Table) => `${T.rowCount(t)}x${width(t)}:${firstRow(t)}`;\nconst renderedDocuments = new WeakMap<HTMLElement, Text>();\n/** The height a table was last drawn with, handed from widget to widget while its shape stays. */\ntype DrawnHeight = { shape: string; height: number | null };\nconst drawnHeights = new WeakMap<HTMLElement, DrawnHeight>();\n/**\n * How far the grid may reach left of the text: its grip gutter and the first\n * cell's padding sit there, so cell text lines up with the paragraphs. It\n * never reaches past the first ancestor that clips, which would cut the grips.\n */\nconst bleed = (view: EditorView, wrap: HTMLElement): number => {\n const content = view.contentDOM;\n const line = content.querySelector<HTMLElement>(\".cm-line\");\n const cell = wrap.querySelector<HTMLElement>(\".k2b-ste-cell\");\n const wanted =\n Number.parseFloat(getComputedStyle(wrap).paddingLeft) +\n (cell ? Number.parseFloat(getComputedStyle(cell).paddingLeft) : 0) -\n (line ? Number.parseFloat(getComputedStyle(line).paddingLeft) : 0);\n const start = content.getBoundingClientRect().left + Number.parseFloat(getComputedStyle(content).paddingLeft);\n let limit = 0;\n for (let element = content.parentElement; element; element = element.parentElement)\n if (getComputedStyle(element).overflowX !== \"visible\") {\n limit = element.getBoundingClientRect().left + element.clientLeft;\n break;\n }\n return Math.max(0, Math.min(wanted, Math.floor(start - limit)));\n};\nconst measureScroll = (view: EditorView, wrap: HTMLElement) =>\n view.requestMeasure({\n key: wrap,\n read: () => ({\n left: wrap.scrollLeft,\n width: wrap.clientWidth,\n total: wrap.scrollWidth,\n bleed: bleed(view, wrap),\n height: wrap.getBoundingClientRect().height / view.scaleY,\n }),\n write: ({ left, width, total, bleed, height }) => {\n if (!wrap.isConnected) return;\n const drawn = drawnHeights.get(wrap);\n // A hidden editor has no height to remember.\n if (drawn && height > 0) drawn.height = height;\n wrap.toggleAttribute(\"data-scrolled\", left > 0);\n wrap.toggleAttribute(\"data-more\", left + width < total - 1);\n wrap.style.setProperty(\"--k2b-ste-bleed\", `${bleed}px`);\n },\n });\n\nclass GridWidget extends WidgetType {\n constructor(\n readonly table: T.Table,\n readonly readOnly: boolean,\n readonly drawn: DrawnHeight,\n ) {\n super();\n }\n // Always update the existing DOM on document/refresh transactions. A shape\n // deferred during composition must be patched even when the next table value\n // is equal; app-owned formulas may also depend on cells outside this table.\n override toDOM(view: EditorView) {\n const wrap = document.createElement(\"div\");\n wrap.className = \"k2b-ste-table\";\n wrap.contentEditable = \"false\";\n wrap.dataset.shape = shapeOf(this.table);\n wrap.append(buildGrid(view, this.table, wrap));\n wrap.addEventListener(\"pointerleave\", () => {\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu\").forEach((grip) => delete grip.dataset.hovered);\n });\n wrap.addEventListener(\"scroll\", () => {\n wrap.toggleAttribute(\"data-scrolled\", wrap.scrollLeft > 0);\n wrap.toggleAttribute(\"data-more\", wrap.scrollLeft + wrap.clientWidth < wrap.scrollWidth - 1);\n });\n renderedDocuments.set(wrap, view.state.doc);\n drawnHeights.set(wrap, this.drawn);\n setEditable(wrap, !this.readOnly, view);\n measureScroll(view, wrap);\n return wrap;\n }\n override updateDOM(dom: HTMLElement, view: EditorView) {\n const act = active.get(view);\n drawnHeights.set(dom, this.drawn);\n measureScroll(view, dom);\n if (dom.dataset.shape !== shapeOf(this.table)) {\n const focused = dom.contains(document.activeElement) ? (document.activeElement as HTMLElement) : null;\n // Never rebuild under a running IME composition; the commit at compositionend refreshes.\n if (focused && act?.composing) {\n dom.dataset.pendingShape = \"1\";\n return true;\n }\n const sync = syncs.get(view);\n if (focused && sync?.el === focused && !targeted.has(view)) sync.refocusSelection = selectionOffsets(focused);\n dom.dataset.shape = shapeOf(this.table);\n delete dom.dataset.pendingShape;\n rebuilding.add(view);\n const source = sources.get(dom)?.element;\n if (source) {\n // Keep the draft editor connected while the confirmed grid changes.\n // Detaching it loses native focus before its receipt can return the\n // caret to the cell selected in the draft.\n for (const child of [...dom.childNodes]) if (child !== source) child.remove();\n dom.insertBefore(buildGrid(view, this.table, dom), source);\n } else dom.replaceChildren(buildGrid(view, this.table, dom));\n renderedDocuments.set(dom, view.state.doc);\n rebuilding.delete(view);\n setEditable(dom, !this.readOnly, view);\n dom.dispatchEvent(\n new CustomEvent(\"k2b-ste-table-structure\", {\n bubbles: true,\n detail: { rows: T.rowCount(this.table), columns: this.table.columns },\n }),\n );\n return true;\n }\n // Host formulas depend on document changes, not selection-only effects.\n // Replacing an inactive cell's descendants during pointerdown removes the\n // click target before the browser focuses it and can select the whole note.\n const refreshPresentation = renderedDocuments.get(dom) !== view.state.doc;\n patchGrid(view, this.table, dom, refreshPresentation);\n renderedDocuments.set(dom, view.state.doc);\n setEditable(dom, !this.readOnly, view);\n return true;\n }\n override destroy(dom: HTMLElement) {\n const source = sources.get(dom);\n if (source) {\n const draft = source.editor.state.doc.toString();\n if (draft !== source.base) queueMicrotask(() => source.recover(draft));\n source.cleanup();\n source.editor.destroy();\n sources.delete(dom);\n }\n }\n override ignoreEvent() {\n return true;\n }\n // Every rebuild replaces the widget, and CodeMirror then takes this height for tables outside the drawn range too.\n // A guess there would shift every line below them, so a table that was drawn keeps its real height.\n override get estimatedHeight() {\n return this.drawn.height ?? (T.rowCount(this.table) - firstRow(this.table)) * 41 + 16;\n }\n}\n\ntype SourceSession = {\n element: HTMLElement;\n editor: EditorView;\n base: string;\n recover: (text: string) => void;\n readOnly: Compartment;\n cleanup: () => void;\n pending: boolean;\n};\nconst sources = new WeakMap<HTMLElement, SourceSession>();\n\n/** A local source draft for one table. Invalid drafts never replace shared text.\n * Collaborative structure changes require the host's confirmed anchored action. */\nexport const editTableSource = (view: EditorView, wrap: HTMLElement) => {\n const table = currentTable(view, wrap);\n if (!table || view.state.readOnly || sources.has(wrap)) return;\n const host = view.state.facet(tableHost);\n const en = textEditorMessages.resolve([\"en\"]).t;\n const labels = host?.sourceLabels?.() ?? {\n edit: en.editMarkdown,\n valid: en.markdownValid,\n invalid: en.markdownInvalid,\n changed: en.markdownChanged,\n structural: en.markdownStructural,\n done: en.showTable,\n discard: en.discardMarkdown,\n continue: en.continueMarkdown,\n line: en.markdownLine,\n separator: (header, separator) => en.markdownSeparator({ header, separator }),\n extra: en.markdownExtra,\n complete: en.completeColumns,\n };\n const base = view.state.sliceDoc(table.from, table.to);\n const original = active.get(view);\n const originalCell = original && T.gridLine(table, original.r)?.cells[original.c];\n const overlay = document.createElement(\"div\");\n overlay.className = \"k2b-ste-table-source\";\n const bar = document.createElement(\"div\");\n bar.className = \"k2b-ste-source-bar\";\n const status = document.createElement(\"span\");\n status.textContent = labels.valid;\n status.setAttribute(\"role\", \"status\");\n const body = document.createElement(\"div\");\n body.className = \"k2b-ste-source-body\";\n const error = document.createElement(\"div\");\n error.className = \"k2b-ste-source-error\";\n error.setAttribute(\"role\", \"alert\");\n error.hidden = true;\n const button = (label: string, run: () => void) => {\n const element = document.createElement(\"button\");\n element.type = \"button\";\n element.textContent = label;\n element.onclick = run;\n return element;\n };\n const close = (r: number, c: number, changed: number[] = [], restoreFocus = true) => {\n sources.get(wrap)?.cleanup();\n sources.delete(wrap);\n source.destroy();\n overlay.remove();\n delete wrap.dataset.source;\n wrap.style.removeProperty(\"height\");\n const current = currentTable(view, wrap);\n if (current && restoreFocus)\n move(view, wrap, Math.max(firstRow(current), Math.min(r, T.rowCount(current) - 1)), Math.min(c, current.columns - 1));\n wrap\n .querySelectorAll<HTMLElement>(\"tr\")\n .forEach((row) => row.toggleAttribute(\"data-source-changed\", changed.includes(Number(row.dataset.r))));\n };\n const fail = (message: string, line?: number, complete?: () => void, focus = true) => {\n error.hidden = false;\n error.dataset.tone = complete ? \"warning\" : \"error\";\n status.textContent = labels.edit;\n const selectLine = () => {\n const target = source.state.doc.line(Math.min(line ?? 1, source.state.doc.lines));\n source.dispatch({ selection: { anchor: target.from, head: target.to }, scrollIntoView: true });\n source.focus();\n };\n error.replaceChildren(\n document.createTextNode(`${complete || line === undefined ? \"\" : (labels.line?.(line) ?? en.markdownLine(line))}${message}`),\n ...(complete ? [button(labels.complete ?? en.completeColumns, complete)] : []),\n button(labels.continue, selectLine),\n button(labels.discard, () => close(original?.r ?? 0, original?.c ?? 0)),\n );\n if (focus) source.focus();\n };\n const parsed = () => {\n const draft = source.state.doc.toString();\n const tables = T.findTables(draft);\n const next = tables[0];\n return next &&\n tables.length === 1 &&\n next.from === 0 &&\n next.to === draft.length &&\n !T.inspectTableStructure(draft).extraCells &&\n !T.inspectTableStructure(draft).missingSeparator\n ? next\n : null;\n };\n const apply = (): void => {\n if (view.state.readOnly || sources.get(wrap)?.pending) return;\n const current = currentTable(view, wrap);\n const draft = source.state.doc.toString();\n const candidate = T.findTables(draft)[0];\n const extra = candidate?.lines.find((line) => line.cells.length > candidate.columns);\n if (candidate && candidate.from === 0 && candidate.to === draft.length && extra) {\n const line = source.state.doc.lineAt(extra.from).number;\n return fail(labels.extra?.(line) ?? en.markdownExtra(line), line, () => {\n source.dispatch({ changes: T.completeColumns(candidate) });\n apply();\n });\n }\n const next = parsed();\n if (!next) {\n // Count source cells for diagnostics only; the public GFM parser remains\n // the authority for whether this draft can replace a table.\n const split = (text: string) => {\n const cells = [\"\"];\n for (let index = 0; index < text.length; index++) {\n const char = text[index]!;\n if (char === \"\\\\\" && index + 1 < text.length) cells[cells.length - 1] += char + text[++index];\n else if (char === \"|\") cells.push(\"\");\n else cells[cells.length - 1] += char;\n }\n if (cells.length > 1 && !cells[0]!.trim()) cells.shift();\n if (cells.length > 1 && !cells.at(-1)!.trim()) cells.pop();\n return cells.map((cell) => cell.trim());\n };\n if (source.state.doc.lines > 1) {\n const header = split(source.state.doc.line(1).text),\n separator = split(source.state.doc.line(2).text);\n if (separator.every((cell) => /^:?-+:?$/.test(cell)) && header.length !== separator.length)\n return fail(\n labels.separator?.(header.length, separator.length) ??\n en.markdownSeparator({ header: header.length, separator: separator.length }),\n 2,\n );\n if (!separator.every((cell) => /^:?-+:?$/.test(cell))) return fail(labels.invalid, 2);\n }\n return fail(labels.invalid, candidate ? source.state.doc.lineAt(Math.min(candidate.to + 1, draft.length)).number : 1);\n }\n if (!current || view.state.sliceDoc(current.from, current.to) !== base) return fail(labels.changed);\n let changes: T.Change[] = [];\n let structural = false;\n if (host?.structure) {\n structural =\n shapeOf(current) !== shapeOf(next) ||\n view.state.sliceDoc(current.lines[1]!.from, current.lines[1]!.to) !== source.state.sliceDoc(next.lines[1]!.from, next.lines[1]!.to);\n if (!structural) {\n for (let r = 0; r < T.rowCount(next); r++) {\n const old = T.gridLine(current, r)!;\n const row = T.gridLine(next, r)!;\n for (let c = 0; c < next.columns; c++) {\n const before = old.cells[c],\n after = row.cells[c];\n if (!before || !after) {\n structural = true;\n break;\n }\n if (before.text !== after.text) changes.push(...T.cellChanges(before.text, T.displayCell(after.text), before.from));\n }\n }\n // Formatting pipes and padding is structural even when dimensions match.\n structural ||=\n T.applyChanges(\n base,\n changes.map((change) => ({\n ...change,\n from: change.from - current.from,\n to: change.to - current.from,\n })),\n ) !== draft;\n }\n } else changes = [{ from: current.from, to: current.to, insert: draft }];\n const hit = cellAtPos(EditorState.create({ doc: source.state.doc }), source.state.selection.main.head);\n const changed = Array.from({ length: T.rowCount(next) }, (_, row) => row).filter((row) => {\n const before = T.gridLine(current, row),\n after = T.gridLine(next, row);\n return !before || !after || view.state.sliceDoc(before.from, before.to) !== source.state.sliceDoc(after.from, after.to);\n });\n if (structural) {\n const structure = host?.structure;\n if (!structure?.replaceSource) return fail(labels.structural);\n if (!structure.available()) {\n host?.onError(\"structureUnavailable\");\n return;\n }\n const session = sources.get(wrap)!;\n session.pending = true;\n // Keep native focus on the action while waiting. Disabling a focused\n // button blurs it to body, losing the draft's focus ownership on receipt.\n // The pending guard above prevents keyboard and pointer resubmission.\n done.setAttribute(\"aria-disabled\", \"true\");\n overlay.setAttribute(\"aria-busy\", \"true\");\n status.textContent = labels.applying ?? en.applyingTable;\n source.dispatch({ effects: readOnly.reconfigure(EditorState.readOnly.of(true)) });\n // The host captures the table witnesses synchronously, before any await.\n const target = {\n tableFrom: current.from,\n rowFrom: current.lines[0]!.from,\n columnFrom: current.lines[0]!.cells[0]!.from,\n row: 0,\n column: 0,\n };\n const settled = () => {\n if (sources.get(wrap) !== session) return false;\n session.pending = false;\n done.removeAttribute(\"aria-disabled\");\n overlay.removeAttribute(\"aria-busy\");\n source.dispatch({ effects: readOnly.reconfigure(EditorState.readOnly.of(view.state.readOnly)) });\n return true;\n };\n try {\n void structure.replaceSource(target, base, draft, { row: hit?.r ?? 0, column: hit?.c ?? 0 }).then(\n (resolve) => {\n if (settled()) {\n const restoreFocus = overlay.contains(view.dom.ownerDocument.activeElement);\n close(0, 0, changed, false);\n if (restoreFocus && resolve) focusTableTarget(view, resolve());\n }\n },\n () => {\n if (settled())\n fail(\n labels.applyFailed ?? en.markdownApplyFailed,\n undefined,\n undefined,\n overlay.contains(view.dom.ownerDocument.activeElement),\n );\n },\n );\n } catch {\n if (settled()) fail(labels.applyFailed ?? en.markdownApplyFailed);\n }\n return;\n }\n if (changes.length && !dispatchChanges(view, changes, true)) return;\n close(hit?.r ?? original?.r ?? 0, hit?.c ?? original?.c ?? 0, changed);\n };\n const readOnly = new Compartment();\n const source = new EditorView({\n parent: body,\n state: EditorState.create({\n doc: base,\n selection: { anchor: Math.max(0, (originalCell?.from ?? table.from) - table.from) },\n extensions: [\n readOnly.of(EditorState.readOnly.of(false)),\n history(),\n keymap.of([\n {\n key: \"Escape\",\n run: () => {\n apply();\n return true;\n },\n },\n ...historyKeymap,\n ]),\n EditorView.contentAttributes.of({ \"aria-label\": labels.edit }),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n status.textContent = parsed() ? labels.valid : labels.invalid;\n error.hidden = true;\n }\n }),\n ],\n }),\n });\n const done = button(labels.done, apply);\n done.className = \"k2b-button\";\n done.dataset.size = \"sm\";\n bar.append(status, done);\n overlay.append(bar, body, error);\n const beforeUnload = (event: BeforeUnloadEvent) => {\n if (source.state.doc.toString() === base) return;\n event.preventDefault();\n event.returnValue = \"\";\n };\n view.dom.ownerDocument.defaultView?.addEventListener(\"beforeunload\", beforeUnload);\n sources.set(wrap, {\n element: overlay,\n pending: false,\n editor: source,\n base,\n readOnly,\n recover: (text) => host?.onRecovery(text),\n cleanup: () => view.dom.ownerDocument.defaultView?.removeEventListener(\"beforeunload\", beforeUnload),\n });\n wrap.style.height = `${wrap.getBoundingClientRect().height}px`;\n wrap.dataset.source = \"1\";\n wrap.querySelectorAll(\"tr\").forEach((row) => row.removeAttribute(\"data-source-changed\"));\n wrap.append(overlay);\n source.focus();\n};\n\nconst setEditable = (wrap: HTMLElement, on: boolean, view: EditorView) => {\n wrap.dataset.readonly = on ? \"0\" : \"1\";\n const source = sources.get(wrap);\n if (source && source.editor.state.readOnly !== (!on || source.pending))\n source.editor.dispatch({ effects: source.readOnly.reconfigure(EditorState.readOnly.of(!on || source.pending)) });\n wrap.querySelectorAll<HTMLButtonElement>(\".k2b-ste-grip, .k2b-ste-table-add button\").forEach((button) => {\n const structure = view.state.facet(tableHost)?.structure;\n button.disabled = !on || (button.classList.contains(\"k2b-ste-addColumn\") && !!structure && !structure.available());\n button.hidden = !on;\n });\n wrap.querySelector(\"table\")?.setAttribute(\"aria-readonly\", String(!on));\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((cell) => {\n cell.setAttribute(\"aria-readonly\", String(!on));\n if (!on) {\n cell.contentEditable = \"false\";\n // Losing edit access must restore presentation and detach the mutable\n // cell baseline before later remote updates reconcile the document.\n if (cell.dataset.editing === \"1\") {\n cell.dataset.editing = \"0\";\n const table = currentTable(view, wrap);\n if (table) renderCell(view, cell, cell.dataset.raw ?? \"\", table, Number(cell.dataset.r), Number(cell.dataset.c));\n }\n if (syncs.get(view)?.el === cell) syncs.delete(view);\n if (missingCells.get(view)?.el === cell) missingCells.delete(view);\n } else {\n const wasReadOnly = cell.contentEditable === \"false\";\n cell.contentEditable = \"plaintext-only\";\n if (cell.contentEditable !== \"plaintext-only\") cell.contentEditable = \"true\";\n // Regaining access while this cell still has focus must enter editing\n // through the same handler as a click, before typing can replace a result.\n if (wasReadOnly && cell === cell.ownerDocument.activeElement) {\n cell.blur();\n cell.focus({ preventScroll: true });\n }\n }\n });\n};\n\n/** Grid width: the widest row, so text beyond the header's columns stays visible (never hidden). */\nconst width = (t: T.Table) => t.lines.reduce((width, line) => Math.max(width, line.cells.length), t.columns);\nconst cells = (t: T.Table) => {\n const columns = width(t);\n return Array.from({ length: T.rowCount(t) }, (_, r) => Array.from({ length: columns }, (_, c) => T.gridLine(t, r)?.cells[c]?.text ?? \"\"));\n};\n\nconst focusCell = (el: HTMLElement, offset: number) => {\n el.dataset.editing = \"1\";\n el.textContent = T.displayCell(el.dataset.raw ?? \"\");\n placeCaret(el, offset);\n};\n\nconst buildGrid = (view: EditorView, t: T.Table, wrap: HTMLElement) => {\n const table = document.createElement(\"table\");\n const grid = cells(t);\n wrap.dataset.header = String(hasHeader(t));\n grid.forEach((row, r) => {\n if (r < firstRow(t)) return;\n const tr = document.createElement(\"tr\");\n tr.dataset.r = String(r);\n row.forEach((raw, c) => {\n const td = document.createElement(r === 0 ? \"th\" : \"td\");\n td.style.textAlign = t.align[c] ?? \"left\";\n // A cell beyond the header's columns: email renderers drop it, so it is marked for review.\n if (c >= t.columns && (T.gridLine(t, r)?.cells.length ?? 0) > c) td.dataset.extra = \"1\";\n const cell = document.createElement(\"div\");\n cell.className = \"k2b-ste-cell\";\n cell.dataset.r = String(r);\n cell.dataset.c = String(c);\n cell.dataset.raw = raw;\n cell.contentEditable = \"plaintext-only\";\n if (cell.contentEditable !== \"plaintext-only\") cell.contentEditable = \"true\";\n cell.spellcheck = true;\n cell.tabIndex = -1;\n cell.setAttribute(\"role\", \"textbox\");\n // The cell menu has no button; screen readers announce its key.\n cell.setAttribute(\"aria-keyshortcuts\", \"Shift+F10\");\n cell.setAttribute(\n \"aria-label\",\n view.state.facet(tableHost)?.cellLabel(r, c, T.displayCell(grid[0]?.[c] ?? \"\")) ?? `${r + 1}, ${c + 1}`,\n );\n if (r === 1 && c === 0 && !raw)\n cell.dataset.placeholder = view.state.facet(tableHost)?.actionLabel?.(\"emptyCell\") ?? \"Type or paste cells\";\n renderCell(view, cell, raw, t, r, c);\n wire(view, cell, wrap);\n td.setAttribute(\"role\", r === 0 ? \"columnheader\" : \"gridcell\");\n td.append(cell);\n // Grips sit in the gutters outside the grid and stay out of the Tab order; Shift+F10 is the key path.\n const grip = (kind: \"rowMenu\" | \"columnMenu\") => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.tabIndex = -1;\n button.className = `k2b-ste-grip k2b-ste-${kind}`;\n button.dataset.c = String(c);\n button.setAttribute(\n \"aria-label\",\n view.state.facet(tableHost)?.actionLabel?.(kind) ?? (kind === \"rowMenu\" ? \"Row menu\" : \"Column menu\"),\n );\n button.setAttribute(\"aria-haspopup\", \"menu\");\n // Full icon names: icon subsets keep only the names that appear in the bundle.\n button.innerHTML = `<i class=\"ti ${kind === \"rowMenu\" ? \"ti-grip-vertical\" : \"ti-grip-horizontal\"}\" aria-hidden=\"true\"></i>`;\n button.onmousedown = (event) => event.preventDefault();\n button.onclick = () => {\n cell.focus({ preventScroll: true });\n wrap.dispatchEvent(\n new CustomEvent(\"k2b-ste-cell-menu\", {\n bubbles: true,\n detail: { cell, anchor: button, scope: kind === \"rowMenu\" ? \"row\" : \"column\" },\n }),\n );\n };\n td.append(button);\n };\n if (c === 0) grip(\"rowMenu\");\n if (r === firstRow(t)) grip(\"columnMenu\");\n tr.append(td);\n });\n tr.setAttribute(\"role\", \"row\");\n table.append(tr);\n });\n table.setAttribute(\"role\", \"grid\");\n // Exactly one grid entry point; internal movement uses the cell keys.\n const first = table.querySelector<HTMLElement>(\".k2b-ste-cell\");\n if (first) first.tabIndex = 0;\n const footer = document.createElement(\"div\");\n footer.className = \"k2b-ste-table-add\";\n for (const action of [\"addRow\", \"addColumn\"] as const) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = `k2b-ste-${action}`;\n const label = view.state.facet(tableHost)?.actionLabel?.(action) ?? (action === \"addRow\" ? \"Row\" : \"Column\");\n button.innerHTML = '<i class=\"ti ti-plus\" aria-hidden=\"true\"></i>';\n if (action === \"addRow\") button.append(label);\n button.setAttribute(\"aria-label\", action === \"addRow\" ? `+ ${label}` : label);\n button.onmousedown = (event) => event.preventDefault();\n button.onclick = () => {\n const current = currentTable(view, wrap);\n if (current)\n runTableAction(view, current.from, T.rowCount(current) - 1, current.columns - 1, action === \"addRow\" ? \"rowBelow\" : \"colRight\");\n };\n footer.append(button);\n }\n const fragment = document.createDocumentFragment();\n fragment.append(table, footer);\n return fragment;\n};\n\nconst patchGrid = (view: EditorView, t: T.Table, dom: HTMLElement, refreshPresentation: boolean) => {\n const grid = cells(t);\n dom.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((el) => {\n const r = Number(el.dataset.r);\n const c = Number(el.dataset.c);\n const raw = grid[r]?.[c] ?? \"\";\n const parent = el.parentElement as HTMLElement;\n parent.style.textAlign = t.align[c] ?? \"left\";\n el.setAttribute(\"aria-label\", view.state.facet(tableHost)?.cellLabel(r, c, T.displayCell(grid[0]?.[c] ?? \"\")) ?? `${r + 1}, ${c + 1}`);\n if (c >= t.columns && (T.gridLine(t, r)?.cells.length ?? 0) > c) parent.dataset.extra = \"1\";\n else delete parent.dataset.extra;\n if (el.dataset.raw === raw && !(refreshPresentation && view.state.facet(tableHost)?.renderCell)) return;\n el.dataset.raw = raw;\n if (el.dataset.editing === \"1\") {\n // The focused cell is refreshed after the update, with mapped caret (see `followChanges`).\n el.dataset.stale = \"1\";\n return;\n }\n renderCell(view, el, raw, t, r, c);\n });\n};\n\nconst dispatchChanges = (view: EditorView, changes: T.Change[], structural = false, selection?: { anchor: number; head: number }) => {\n if (!changes.length || view.state.readOnly) return false;\n const length = view.state.doc.length + changes.reduce((n, c) => n + c.insert.length - (c.to - c.from), 0);\n if (length > (view.state.facet(tableHost)?.maxLength ?? Infinity)) {\n view.state.facet(tableHost)?.onError(\"textTooLarge\");\n return false;\n }\n const host = view.state.facet(tableHost);\n if (structural) host?.boundary();\n if (structural) targeted.add(view);\n try {\n view.dispatch({\n changes: [...changes].sort((a, b) => a.from - b.from).map((change) => ({ ...change, insert: Text.of(change.insert.split(\"\\n\")) })),\n selection,\n annotations: structural ? isolateHistory.of(\"full\") : undefined,\n userEvent: structural ? \"input.table.structure\" : \"input.type.table\",\n });\n } finally {\n targeted.delete(view);\n }\n if (structural) host?.boundary();\n return true;\n};\n\nconst recoverMissingCell = (view: EditorView, el: HTMLElement) => {\n const input = el.textContent ?? \"\";\n if (input) view.state.facet(tableHost)?.onRecovery(input);\n view.state.facet(tableHost)?.onError(\"cellRemoved\");\n el.dataset.editing = \"0\";\n const wrap = el.closest<HTMLElement>(\".k2b-ste-table\");\n const table = wrap && currentTable(view, wrap);\n if (table) renderCell(view, el, el.dataset.raw ?? \"\", table, Number(el.dataset.r), Number(el.dataset.c));\n el.blur();\n};\n\nconst commitCell = (view: EditorView, el: HTMLElement, wrap: HTMLElement) => {\n const missing = missingCells.get(view);\n if (missing?.el === el && missing.changed) {\n recoverMissingCell(view, el);\n return;\n }\n let sync = syncs.get(view);\n if (!sync || sync.el !== el) {\n const t = currentTable(view, wrap);\n const cell = t && T.gridLine(t, Number(el.dataset.r))?.cells[Number(el.dataset.c)];\n if (!cell) {\n if (!t || view.state.readOnly) {\n const host = view.state.facet(tableHost);\n host?.onRecovery(el.textContent ?? \"\");\n if (!t) host?.onError(\"cellRemoved\");\n return;\n }\n const row = Number(el.dataset.r),\n column = Number(el.dataset.c);\n const changes = T.setCellText(t, row, column, T.escapeCell(el.textContent ?? \"\"));\n missingCells.delete(view);\n if (!dispatchChanges(view, changes)) {\n view.state.facet(tableHost)?.onRecovery(el.textContent ?? \"\");\n el.textContent = \"\";\n return;\n }\n const updated = tablesIn(view.state).find((table) => table.from === t.from);\n const created = updated && T.gridLine(updated, row)?.cells[column];\n if (created) {\n resync(view, el, created);\n el.dataset.raw = created.text;\n }\n return;\n }\n resync(view, el, cell);\n sync = syncs.get(view)!;\n }\n const next = (el.textContent ?? \"\").replace(/\\u00a0(?=\\s|$)|(?<=\\s|^)\\u00a0/g, \" \");\n const mappedFrom = sync.desc.mapPos(sync.baseFrom, 1);\n const hit = cellAtPos(view.state, mappedFrom);\n if (!cellSurvives(sync) || !hit) {\n const host = view.state.facet(tableHost);\n host?.onRecovery(next);\n host?.onError(\"cellRemoved\");\n syncs.delete(view);\n view.dispatch({ effects: refreshTables.of(null) });\n return;\n }\n const changes = T.mappedCellChanges(sync.base, next, sync.baseFrom, sync.desc);\n if (!changes.length) {\n // A cancelled composition still needs to reveal remote changes and shape updates.\n view.dispatch({ effects: refreshTables.of(null) });\n return;\n }\n const set = ChangeSet.of(changes, view.state.doc.length);\n const from = set.mapPos(sync.desc.mapPos(sync.baseFrom, -1), -1);\n const to = set.mapPos(sync.desc.mapPos(sync.baseFrom + sync.base.length, 1), 1);\n const [anchorOffset, headOffset] = selectionOffsets(el);\n const localChanges = T.cellChanges(sync.base, next, sync.baseFrom);\n const localSet = ChangeSet.of(localChanges, sync.desc.length);\n const localRaw = T.applyChanges(\n sync.base,\n localChanges.map((change) => ({ ...change, from: change.from - sync.baseFrom, to: change.to - sync.baseFrom })),\n );\n const localMap = T.cellDisplayMap(localRaw);\n const remoteAfterLocal = sync.desc.mapDesc(localSet.desc);\n const position = (offset: number) =>\n remoteAfterLocal.mapPos(localSet.mapPos(sync.baseFrom, -1) + (localMap.offsets[offset] ?? localRaw.length), 1);\n const selection = { anchor: position(anchorOffset), head: position(headOffset) };\n sync.committing = true;\n const accepted = dispatchChanges(view, changes, false, selection);\n sync.committing = false;\n if (!accepted) {\n view.state.facet(tableHost)?.onRecovery(next);\n el.textContent = T.displayCell(sync.base);\n view.dispatch({ effects: refreshTables.of(null) });\n return;\n }\n // Keep the focused input's full extent, including a just-typed trailing space.\n // The Markdown parser trims padding and cannot distinguish it from that space.\n const raw = view.state.sliceDoc(from, to);\n const current = cellAtPos(view.state, from);\n const index = current ? tablesIn(view.state).findIndex((table) => table.from === current.table.from) : -1;\n const currentWrap = findWrap(view, index);\n const target = current && currentWrap && cellAt(currentWrap, current.r, current.c);\n if (!target) {\n syncs.delete(view);\n return;\n }\n // Composition deferred reconciliation. Even a connected element may now\n // occupy another column after a same-size structural edit.\n if (target !== el) {\n if (el.isConnected) {\n el.dataset.editing = \"0\";\n const oldTable = currentTable(view, wrap);\n if (oldTable) renderCell(view, el, el.dataset.raw ?? \"\", oldTable, Number(el.dataset.r), Number(el.dataset.c));\n }\n focusCell(target, 0);\n }\n target.dataset.raw = raw;\n target.dataset.stale = \"0\";\n resync(view, target, { from, to, text: raw });\n const shown = T.displayCell(raw);\n if (((target.textContent ?? \"\") !== shown || target !== el) && !active.get(view)?.composing) {\n target.textContent = shown;\n placeSelection(\n target,\n T.displayCell(view.state.sliceDoc(from, selection.anchor)).length,\n T.displayCell(view.state.sliceDoc(from, selection.head)).length,\n );\n }\n if (wrap.dataset.pendingShape === \"1\") view.dispatch({ effects: refreshTables.of(null) });\n queueCellSelection(view, target);\n};\n\n/** After every update: track changes for the focused cell, refresh it, or refocus it after a rebuild. */\nconst followChanges = EditorView.updateListener.of((update) => {\n const view = update.view;\n const sync = syncs.get(view);\n const missing = missingCells.get(view);\n if (missing && !missing.changed && update.docChanged) {\n missing.changed = true;\n if (!active.get(view)?.composing) recoverMissingCell(view, missing.el);\n }\n if (!sync) return;\n if (update.docChanged) sync.desc = sync.desc.composeDesc(update.changes.desc);\n if (sync.committing || active.get(view)?.composing) return;\n const caretAt = (caret: number) => sync.desc.mapPos(sync.baseFrom + (T.cellDisplayMap(sync.base).offsets[caret] ?? sync.base.length), 1);\n const explicit = update.transactions.some((tr) => tr.selection !== undefined);\n if (!sync.refocusSelection && sync.el.dataset.stale !== \"1\" && !update.docChanged && !explicit) return;\n const selected = sync.refocusSelection ?? (document.activeElement === sync.el ? selectionOffsets(sync.el) : (sync.selection ?? [0, 0]));\n const anchor = explicit ? update.state.selection.main.anchor : caretAt(selected[0]),\n head = explicit ? update.state.selection.main.head : caretAt(selected[1]);\n const hadFocus = sync.refocusSelection !== null || document.activeElement === sync.el;\n sync.refocusSelection = null;\n const hit = cellAtPos(view.state, sync.desc.mapPos(sync.baseFrom, 1));\n if (!hit) return;\n const index = tablesIn(view.state).findIndex((t) => t.from === hit.table.from);\n const wrap = findWrap(view, index);\n const el = wrap && cellAt(wrap, hit.r, hit.c);\n if (!el) return;\n const survives = cellSurvives(sync);\n const from = survives ? sync.desc.mapPos(sync.baseFrom, -1) : hit.cell.from,\n to = survives ? sync.desc.mapPos(sync.baseFrom + sync.base.length, 1) : hit.cell.to;\n const raw = view.state.sliceDoc(from, to);\n const mapped = T.cellDisplayMap(raw);\n const offset = (pos: number) => {\n const at = mapped.offsets.findIndex((n) => n >= pos - from);\n return at < 0 ? mapped.text.length : at;\n };\n if (el !== sync.el && sync.el.isConnected) {\n sync.el.dataset.editing = \"0\";\n const oldWrap = sync.el.closest<HTMLElement>(\".k2b-ste-table\");\n const oldTable = oldWrap && currentTable(view, oldWrap);\n if (oldTable) renderCell(view, sync.el, sync.el.dataset.raw ?? \"\", oldTable, Number(sync.el.dataset.r), Number(sync.el.dataset.c));\n }\n el.dataset.stale = \"0\";\n if (hadFocus) {\n focusCell(el, 0);\n el.dataset.raw = raw;\n el.textContent = mapped.text;\n placeSelection(el, offset(anchor), offset(head));\n }\n resync(view, el, { from, to, text: raw });\n const current = syncs.get(view);\n if (current) current.selection = [offset(anchor), offset(head)];\n});\n\nconst move = (view: EditorView, wrap: HTMLElement, r: number, c: number, edge: \"start\" | \"end\" = \"end\") => {\n const index = active.get(view)?.index ?? -1;\n const target = wrap.isConnected ? wrap : findWrap(view, index);\n const el = target && cellAt(target, r, c);\n if (el) {\n focusCell(el, edge === \"start\" ? 0 : T.displayCell(el.dataset.raw ?? \"\").length);\n if (target) {\n target.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((cell) => (cell.tabIndex = cell === el ? 0 : -1));\n const bounds = target.getBoundingClientRect();\n const box = el.getBoundingClientRect();\n const frozen = c > 0 ? (target.querySelector(\"tr > :first-child\")?.getBoundingClientRect().width ?? 0) : 0;\n if (box.left < bounds.left + frozen) target.scrollLeft -= bounds.left + frozen - box.left;\n else if (box.right > bounds.right - 16) target.scrollLeft += box.right - bounds.right + 16;\n }\n }\n};\n\n/** Source identities, never visual row indexes, decide menu and shortcut boundaries. */\nconst actionAllowed = (t: T.Table, r: number, c: number, action: MenuAction): boolean => {\n if (!Number.isInteger(r) || !Number.isInteger(c) || r < 0 || r >= T.rowCount(t) || c < 0 || c >= width(t)) return false;\n switch (action) {\n case \"rowAbove\":\n case \"deleteRow\":\n return r > 0;\n case \"moveRowUp\":\n return r > 1;\n case \"moveRowDown\":\n return r > 0 && r < T.rowCount(t) - 1;\n case \"deleteCol\":\n return t.columns > 1 || c >= t.columns;\n case \"moveColLeft\":\n case \"moveColRight\":\n return (\n c < t.columns && (action === \"moveColLeft\" ? c > 0 : c < t.columns - 1) && t.lines.every((line) => line.cells.length === t.columns)\n );\n case \"toggleHeader\":\n return hasHeader(t) || !!(t.lines[2]?.cells.some((cell) => cell.text) && t.lines[2].cells.length <= t.columns);\n default:\n return true;\n }\n};\n\nexport const tableActionEnabled = (view: EditorView, wrap: HTMLElement, action: MenuAction): boolean => {\n const t = currentTable(view, wrap),\n act = active.get(view);\n if (!t || !act || view.state.readOnly || !actionAllowed(t, act.r, act.c, action)) return false;\n const structure = view.state.facet(tableHost)?.structure;\n return !structure || structure.available() || (action === \"rowBelow\" && act.r === T.rowCount(t) - 1);\n};\n\n/** Copy the visible table through the browser clipboard, with spreadsheet and rich-text payloads. */\nexport const copyTable = async (view: EditorView, wrap: HTMLElement, format: \"table\" | \"markdown\"): Promise<void> => {\n const t = currentTable(view, wrap);\n if (!t) throw new Error(\"Table is no longer available\");\n if (format === \"markdown\") {\n await navigator.clipboard.writeText(view.state.sliceDoc(t.from, t.to));\n return;\n }\n // Reuse the host's presentation for values (including computed cells), even\n // when the live cell currently exposes its editable source. Controls never\n // become spreadsheet contents. Markdown copy above remains byte-exact.\n const grid = cells(t)\n .slice(firstRow(t))\n .map((row, r) =>\n row.map((raw, c) => {\n const element = view.dom.ownerDocument.createElement(\"div\");\n renderCell(view, element, raw, t, r + firstRow(t), c);\n element\n .querySelectorAll('button, [role=\"button\"], [aria-hidden=\"true\"], [hidden], script, style, template')\n .forEach((node) => node.remove());\n return element.textContent ?? \"\";\n }),\n );\n const text = grid\n .map((row) => row.map((value) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value)).join(\"\\t\"))\n .join(\"\\n\");\n const html = `<table>${grid\n .map(\n (row, r) =>\n `<tr>${row\n .map((value) => {\n const tag = hasHeader(t) && r === 0 ? \"th\" : \"td\";\n return `<${tag}>${escapeHtml(value)}</${tag}>`;\n })\n .join(\"\")}</tr>`,\n )\n .join(\"\")}</table>`;\n if (typeof ClipboardItem !== \"undefined\" && navigator.clipboard?.write)\n await navigator.clipboard.write([\n new ClipboardItem({\n \"text/plain\": new Blob([text], { type: \"text/plain\" }),\n \"text/html\": new Blob([html], { type: \"text/html\" }),\n }),\n ]);\n else await navigator.clipboard.writeText(text);\n};\n\nexport const runMenuAction = (view: EditorView, wrap: HTMLElement, action: MenuAction) => {\n const t = currentTable(view, wrap);\n const act = active.get(view);\n if (t && act) runTableAction(view, t.from, act.r, act.c, action);\n};\n\n/** No ordinal fallback: only a freshly resolved table/row/column can receive focus. */\nconst focusTableTarget = (view: EditorView, target: TableTarget | null) => {\n if (!target || !view.dom.isConnected || view.state.readOnly) return;\n const tables = tablesIn(view.state);\n const index = tables.findIndex((table) => table.from === target.tableFrom);\n const table = tables[index];\n if (\n !table ||\n target.row < firstRow(table) ||\n T.gridLine(table, target.row)?.from !== target.rowFrom ||\n table.lines[0]?.cells[target.column]?.from !== target.columnFrom\n )\n return;\n const wrap = findWrap(view, index);\n if (!wrap) return;\n active.set(view, { index, r: target.row, c: target.column, composing: false });\n move(view, wrap, target.row, target.column);\n const selected = cellAt(wrap, target.row, target.column);\n if (selected && view.dom.ownerDocument.activeElement !== selected)\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: selected } }));\n};\n\n/** Structural actions also work in source mode, without a mounted table widget. */\nexport const runTableAction = (\n view: EditorView,\n tableFrom: number,\n r: number,\n c: number,\n action: MenuAction,\n /** `false` when the gesture already moved the caret out of the table: the result must not pull it back. */\n options: { follow?: boolean } = {},\n) => {\n const tables = tablesIn(view.state);\n const index = tables.findIndex((table) => table.from === tableFrom);\n const t = tables[index];\n if (!t || view.state.readOnly || !actionAllowed(t, r, c, action)) return;\n const host = view.state.facet(tableHost);\n // F3 A: only an append at the end is safe without the server.\n if (host?.structure && !(action === \"rowBelow\" && r === T.rowCount(t) - 1)) {\n if (!host.structure.available()) {\n host.onError(\"structureUnavailable\");\n return;\n }\n const row = T.gridLine(t, r);\n const column = t.lines[0]?.cells[Math.min(c, t.columns - 1)];\n if (!row || !column) {\n host.onError(\"structureFailed\");\n return;\n }\n // A new user gesture while waiting owns the caret. Remote redraws do not.\n const interactionRoot = view.dom;\n let follow = options.follow !== false,\n settled = false;\n const relinquish = () => {\n follow = false;\n };\n const finish = () => {\n settled = true;\n interactionRoot.removeEventListener(\"pointerdown\", relinquish, true);\n interactionRoot.removeEventListener(\"keydown\", relinquish, true);\n };\n queueMicrotask(() => {\n if (settled) return;\n interactionRoot.addEventListener(\"pointerdown\", relinquish, true);\n interactionRoot.addEventListener(\"keydown\", relinquish, true);\n });\n // Invocation is synchronous so a host can capture CRDT anchors before any await.\n try {\n void host.structure\n .perform(action, { tableFrom: t.from, rowFrom: row.from, columnFrom: column.from, row: r, column: c })\n .then((resolve) => {\n const focused = view.dom.ownerDocument.activeElement;\n const ownsFocus =\n !focused ||\n focused === view.dom.ownerDocument.body ||\n view.dom.contains(focused) ||\n focused.closest(\".k2b-gesture-menu__sheet-menu\");\n if (follow && ownsFocus && resolve) focusTableTarget(view, resolve());\n })\n .catch(() => host.onError(\"structureFailed\"))\n .finally(finish);\n } catch {\n finish();\n host.onError(\"structureFailed\");\n }\n return;\n }\n const ops: Record<MenuAction, () => T.Change[]> = {\n completeColumns: () => T.completeColumns(t),\n rowAbove: () => T.insertRow(t, Math.max(0, r - 1)),\n rowBelow: () => T.insertRow(t, r),\n colLeft: () => T.insertColumn(t, c),\n colRight: () => T.insertColumn(t, c + 1),\n deleteRow: () => T.deleteRow(t, r),\n deleteCol: () => T.deleteColumn(t, c),\n moveRowUp: () => T.moveRow(view.state.doc.toString(), t, r, r - 1),\n moveRowDown: () => T.moveRow(view.state.doc.toString(), t, r, r + 1),\n moveColLeft: () => T.moveColumn(t, c, c - 1),\n moveColRight: () => T.moveColumn(t, c, c + 1),\n toggleHeader: () => T.toggleHeader(view.state.doc.toString(), t),\n deleteTable: () => T.deleteTable(t),\n alignLeft: () => T.setAlign(t, c, \"left\"),\n alignCenter: () => T.setAlign(t, c, \"center\"),\n alignRight: () => T.setAlign(t, c, \"right\"),\n };\n const next = {\n moveRowUp: [r - 1, c],\n moveRowDown: [r + 1, c],\n moveColLeft: [r, c - 1],\n moveColRight: [r, c + 1],\n toggleHeader: [hasHeader(t) ? r + 1 : Math.max(0, r - 1), c],\n rowAbove: [r === 0 ? 1 : r, c],\n rowBelow: [r + 1, c],\n colLeft: [r, c],\n colRight: [r, c + 1],\n deleteRow: [Math.max(1, r - 1), c],\n deleteCol: [r, Math.max(0, c - 1)],\n } as Record<string, [number, number]>;\n if (!dispatchChanges(view, ops[action](), true) || options.follow === false) return;\n if (action === \"deleteTable\") {\n active.delete(view);\n syncs.delete(view);\n view.focus();\n view.dispatch({ selection: { anchor: Math.min(t.from, view.state.doc.length) } });\n return;\n }\n const target = next[action] ?? [r, c];\n const wrap = findWrap(view, index);\n if (wrap) {\n active.set(view, { index, r: target[0]!, c: target[1]!, composing: false });\n move(view, wrap, target[0]!, target[1]!);\n // A modal sheet makes the grid inert. Still update its selected context\n // from this synchronous local transaction; focus returns when it closes.\n const selected = cellAt(wrap, target[0]!, target[1]!);\n if (selected && view.dom.ownerDocument.activeElement !== selected)\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: selected } }));\n }\n};\n\n/** Cells one paste may write; larger blocks are refused visibly instead of running thousands of transactions. */\nconst MAX_PASTE_CELLS = 2000;\n\nconst pasteGrid = (view: EditorView, wrap: HTMLElement, startR: number, startC: number, grid: string[][]) => {\n const cellCount = grid.reduce((n, row) => n + row.length, 0);\n if (view.state.readOnly) return;\n if (cellCount > (view.state.facet(tableHost)?.maxPasteCells ?? MAX_PASTE_CELLS)) {\n view.state.facet(tableHost)?.onError(\"pasteTooLarge\");\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-paste-too-large\", { bubbles: true, detail: { cells: cellCount, max: MAX_PASTE_CELLS } }));\n return;\n }\n const host = view.state.facet(tableHost);\n const initial = currentTable(view, wrap);\n if (!initial) return;\n if (host?.structure && grid.some((row) => startC + row.length > initial.columns)) {\n host.onError(\"structureUnavailable\");\n return;\n }\n // One transaction gives paste a single undo step and avoids a partial paste.\n let text = view.state.sliceDoc(initial.from, initial.to);\n let composed = ChangeSet.empty(text.length);\n const apply = (changes: T.Change[]) => {\n const set = ChangeSet.of(\n changes.map((change) => ({ ...change, insert: Text.of(change.insert.split(\"\\n\")) })),\n text.length,\n );\n text = set.apply(Text.of(text.split(\"\\n\"))).toString();\n composed = composed.compose(set);\n };\n for (let i = 0; i < grid.length; i++) {\n let t = T.findTables(text)[0];\n if (!t) return;\n if (startR + i >= T.rowCount(t)) apply(T.insertRow(t, T.rowCount(t) - 1));\n for (let j = 0; j < grid[i]!.length; j++) {\n t = T.findTables(text)[0];\n if (!t) return;\n if (startC + j >= t.columns) apply(T.insertColumn(t, t.columns));\n t = T.findTables(text)[0];\n if (!t) return;\n apply(T.setCellText(t, startR + i, startC + j, T.escapeCell(grid[i]![j] ?? \"\")));\n }\n }\n const changes: T.Change[] = [];\n composed.iterChanges((from, to, _newFrom, _newTo, insert) =>\n changes.push({ from: initial.from + from, to: initial.from + to, insert: insert.toString() }),\n );\n dispatchChanges(view, changes, true);\n};\n\nconst wire = (view: EditorView, el: HTMLElement, wrap: HTMLElement) => {\n const pos = () => ({ r: Number(el.dataset.r), c: Number(el.dataset.c) });\n el.addEventListener(\"focus\", () => {\n const grid = wrap.querySelector(\"table\");\n if (grid && !grid.hasAttribute(\"data-sized\")) {\n const widths = Array.from(grid.rows[0]?.cells ?? []).map((cell) => cell.getBoundingClientRect().width);\n if (widths.every((width) => width > 0)) {\n const columns = document.createElement(\"colgroup\");\n for (const width of widths) {\n const column = document.createElement(\"col\");\n column.style.width = `${width}px`;\n columns.append(column);\n }\n grid.prepend(columns);\n grid.style.width = `${widths.reduce((sum, width) => sum + width, 0)}px`;\n grid.style.tableLayout = \"fixed\";\n grid.dataset.sized = \"1\";\n }\n }\n active.set(view, { index: tableIndex(view, wrap), ...pos(), composing: false });\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-cell\").forEach((cell) => (cell.tabIndex = cell === el ? 0 : -1));\n wrap.dataset.activeR = el.dataset.r;\n wrap.dataset.activeC = el.dataset.c;\n // Without hover, a phone shows the grips of the focused cell's row and column.\n wrap\n .querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu\")\n .forEach((grip) => grip.toggleAttribute(\"data-current\", grip.dataset.c === el.dataset.c));\n if (view.state.readOnly) {\n // A read-only cell selects rendered text; it never enters source editing.\n // Keyboard entry may have prepared editable text before focusing it.\n if (el.dataset.editing === \"1\") {\n el.dataset.editing = \"0\";\n const table = currentTable(view, wrap);\n if (table) renderCell(view, el, el.dataset.raw ?? \"\", table, Number(el.dataset.r), Number(el.dataset.c));\n }\n syncs.delete(view);\n missingCells.delete(view);\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: el } }));\n return;\n }\n const t = currentTable(view, wrap);\n const cell = t && T.gridLine(t, Number(el.dataset.r))?.cells[Number(el.dataset.c)];\n missingCells.delete(view);\n if (cell) resync(view, el, cell);\n else {\n syncs.delete(view);\n missingCells.set(view, { el, changed: false });\n }\n if (el.dataset.editing !== \"1\") {\n el.dataset.editing = \"1\";\n const shown = T.displayCell(el.dataset.raw ?? \"\");\n // Only cells with formatting change their text; plain cells keep the caret where the tap put it.\n if (el.textContent !== shown || el.childElementCount > 0) {\n el.textContent = shown;\n placeCaret(el, shown.length);\n }\n }\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-focus\", { bubbles: true, detail: { cell: el } }));\n queueCellSelection(view, el);\n });\n el.addEventListener(\"blur\", () => {\n if (rebuilding.has(view)) return;\n const sync = syncs.get(view);\n if (sync?.el === el) sync.selection = selectionOffsets(el);\n el.dataset.editing = \"0\";\n queueMicrotask(() => {\n // Chromium blurs a focused cell while CodeMirror removes its widget.\n // Wait for that update before consulting CodeMirror's DOM mapping. A\n // removed widget has no mapping in the newly configured source view.\n if (!wrap.isConnected) return;\n const focused = el.ownerDocument.activeElement;\n const table = currentTable(view, wrap);\n // Read-only focus never changed presentation. Replacing it on blur would\n // detach the text nodes held by the person's native selection.\n if (table && !view.state.readOnly && el.dataset.editing !== \"1\")\n renderCell(view, el, el.dataset.raw ?? \"\", table, Number(el.dataset.r), Number(el.dataset.c));\n if (!wrap.contains(focused)) {\n delete wrap.dataset.activeR;\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu[data-current]\").forEach((grip) => delete grip.dataset.current);\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-blur\", { bubbles: true }));\n if (!(focused instanceof HTMLElement && focused.classList.contains(\"k2b-ste-cell\") && view.dom.contains(focused)))\n view.state.facet(tableHost)?.onCellSelection?.(null);\n }\n });\n });\n el.addEventListener(\"compositionstart\", () => {\n if (view.state.readOnly) return;\n const act = active.get(view);\n if (act) act.composing = true;\n });\n el.addEventListener(\"compositionend\", () => {\n if (view.state.readOnly) return;\n const act = active.get(view);\n if (act) act.composing = false;\n commitCell(view, el, wrap);\n });\n el.addEventListener(\"beforeinput\", (event) => {\n if (view.state.readOnly) {\n event.preventDefault();\n return;\n }\n if (event.inputType === \"historyUndo\" || event.inputType === \"historyRedo\") {\n event.preventDefault();\n const host = view.state.facet(tableHost);\n if (event.inputType === \"historyUndo\") host?.undo();\n else host?.redo();\n }\n });\n el.addEventListener(\"input\", (event) => {\n // During composition the text is provisional; the browser owns the DOM.\n if (view.state.readOnly || (event as InputEvent).isComposing || active.get(view)?.composing) return;\n commitCell(view, el, wrap);\n });\n el.addEventListener(\"paste\", (event) => {\n event.preventDefault();\n if (view.state.readOnly) return;\n const data = event.clipboardData;\n if (!data) return;\n const host = view.state.facet(tableHost);\n const clipboard = inspectClipboard(data, { maxLength: host?.maxLength ?? Infinity, maxPasteCells: host?.maxPasteCells ?? 2000 });\n if (\"error\" in clipboard) {\n host?.onError(clipboard.error);\n return;\n }\n const { html, text, images, files } = clipboard;\n if (images) host?.onDroppedImages?.(images, files);\n const grid = (html ? htmlTableGrid(html) : null) ?? T.parseTsv(text);\n const { r, c } = pos();\n if (grid?.length) pasteGrid(view, wrap, r, c, grid);\n else {\n const inline = (html && convertClipboardHtml(html, false)?.markdown) || text;\n document.execCommand(\"insertText\", false, inline.replace(/\\s*\\r?\\n\\s*/g, \" \"));\n }\n });\n el.addEventListener(\"pointerenter\", () => {\n wrap.querySelectorAll<HTMLElement>(\".k2b-ste-columnMenu\").forEach((grip, column) => {\n grip.toggleAttribute(\"data-hovered\", column === Number(el.dataset.c));\n });\n });\n el.addEventListener(\"contextmenu\", (event) => {\n event.preventDefault();\n pendingContextMenus.get(view)?.abort();\n el.focus({ preventScroll: true });\n const open = () => {\n if (el.isConnected)\n wrap.dispatchEvent(\n new CustomEvent(\"k2b-ste-cell-menu\", { bubbles: true, detail: { cell: el, x: event.clientX, y: event.clientY } }),\n );\n };\n // WebKit fires contextmenu on right-button down. Opening a native popover\n // then lets that same press dismiss it on release. Chrome fires after up.\n if (event.button === 2 && (event.buttons & 2) !== 0) {\n const pending = new AbortController();\n pendingContextMenus.set(view, pending);\n const cancel = () => {\n pending.abort();\n if (pendingContextMenus.get(view) === pending) pendingContextMenus.delete(view);\n };\n el.ownerDocument.addEventListener(\n \"mouseup\",\n (release) => {\n if (release.button !== 2) return;\n cancel();\n open();\n },\n { signal: pending.signal },\n );\n el.ownerDocument.addEventListener(\"pointercancel\", cancel, { signal: pending.signal, once: true });\n el.ownerDocument.defaultView?.addEventListener(\"blur\", cancel, { signal: pending.signal, once: true });\n } else open();\n });\n el.addEventListener(\"keydown\", (event) => {\n if (event.defaultPrevented) return; // A host completion/snippet handled this key.\n const host = view.state.facet(tableHost);\n const t = currentTable(view, wrap);\n if (!t) return;\n const { r, c } = pos();\n const mod = event.metaKey || event.ctrlKey;\n if (event.isComposing) return;\n if (event.key === \"ContextMenu\" || (event.key === \"F10\" && event.shiftKey)) {\n event.preventDefault();\n wrap.dispatchEvent(new CustomEvent(\"k2b-ste-cell-menu\", { bubbles: true, detail: { cell: el } }));\n return;\n }\n // Preserve native selection/copy/navigation for non-editable rendered text.\n if (view.state.readOnly) return;\n if (mod && !event.shiftKey && event.key.toLowerCase() === \"a\") {\n // Nested contenteditables do not scope native Select All consistently.\n // Keep replacement and formatting inside this cell in every host.\n event.preventDefault();\n event.stopPropagation();\n placeSelection(el, 0, el.textContent?.length ?? 0);\n queueCellSelection(view, el);\n return;\n }\n if (mod && [\"b\", \"i\", \"k\"].includes(event.key.toLowerCase())) {\n event.preventDefault();\n const command = event.key.toLowerCase() === \"b\" ? \"bold\" : event.key.toLowerCase() === \"i\" ? \"italic\" : \"link\";\n formatActiveCell(view, command);\n return;\n }\n if (mod && event.key.toLowerCase() === \"z\") {\n event.preventDefault();\n if (event.shiftKey) host?.redo();\n else host?.undo();\n return;\n }\n if (mod && event.key.toLowerCase() === \"y\") {\n event.preventDefault();\n host?.redo();\n return;\n }\n if (event.altKey && !mod && !event.shiftKey) {\n const actions: Record<string, MenuAction> = {\n ArrowUp: \"moveRowUp\",\n ArrowDown: \"moveRowDown\",\n ArrowLeft: \"moveColLeft\",\n ArrowRight: \"moveColRight\",\n };\n const action = actions[event.key];\n if (action) {\n event.preventDefault();\n runTableAction(view, t.from, r, c, action);\n return;\n }\n }\n if (event.key === \"Tab\") {\n if (host?.tabMovesFocus?.()) return;\n event.preventDefault();\n const last = r === T.rowCount(t) - 1 && c === t.columns - 1;\n if (!event.shiftKey && last) {\n dispatchChanges(view, T.insertRow(t, r), true);\n move(view, wrap, r + 1, 0);\n return;\n }\n const index = r * t.columns + c + (event.shiftKey ? -1 : 1);\n if (index < firstRow(t) * t.columns) {\n leave(view, wrap, \"before\");\n return;\n }\n move(view, wrap, Math.floor(index / t.columns), index % t.columns);\n const next = findWrap(view, tableIndex(view, wrap));\n const cell = next && cellAt(next, Math.floor(index / t.columns), index % t.columns);\n if (cell) placeSelection(cell, 0, cell.textContent?.length ?? 0);\n return;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (event.shiftKey) return; // a cell holds one line\n const last = T.rowCount(t) - 1;\n if (r < last) move(view, wrap, r + 1, c);\n else if (r > 1 && T.gridLine(t, last)?.cells.every((cell) => !T.displayCell(cell.text).trim())) {\n // Match the list-like exit: remove the empty trailing row when allowed.\n // F3 A keeps deletion server-only; offline we can still leave the table.\n if (!host?.structure || host.structure.available()) runTableAction(view, t.from, r, c, \"deleteRow\", { follow: false });\n leave(view, wrap, \"after\");\n } else if (dispatchChanges(view, T.insertRow(t, last), true)) move(view, wrap, last + 1, c);\n return;\n }\n if ((event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") && !event.shiftKey && !mod && !event.altKey) {\n const [anchor, head] = selectionOffsets(el);\n const right = event.key === \"ArrowRight\";\n if (anchor !== head || head !== (right ? (el.textContent?.length ?? 0) : 0)) return;\n event.preventDefault();\n const next = r * t.columns + c + (right ? 1 : -1);\n if (next >= firstRow(t) * t.columns && next < T.rowCount(t) * t.columns)\n move(view, wrap, Math.floor(next / t.columns), next % t.columns, right ? \"start\" : \"end\");\n else leave(view, wrap, right ? \"after\" : \"before\");\n return;\n }\n if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n if (event.shiftKey || event.altKey || mod || !atCellVisualEdge(el, event.key === \"ArrowDown\")) return;\n const next = r + (event.key === \"ArrowUp\" ? -1 : 1);\n event.preventDefault();\n if (next >= firstRow(t) && next < T.rowCount(t)) move(view, wrap, next, c);\n else leave(view, wrap, next < firstRow(t) ? \"before\" : \"after\");\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n leave(view, wrap, \"after\");\n return;\n }\n // Mod-Home/End leave the grid for the note's start or end; the browser would only move inside the cell's page region.\n if (mod && !event.shiftKey && !event.altKey && (event.key === \"Home\" || event.key === \"End\")) {\n event.preventDefault();\n if (event.key === \"End\" && t.to === view.state.doc.length) return leave(view, wrap, \"after\");\n view.focus();\n view.dispatch({ selection: { anchor: event.key === \"Home\" ? 0 : view.state.doc.length }, scrollIntoView: true });\n }\n });\n};\n\n/** Route formatting to the active cell instead of the hidden outer-editor caret. */\nexport const formatActiveCell = (view: EditorView, name: InlineFormat): boolean => {\n const act = active.get(view);\n const wrap = act && findWrap(view, act.index);\n const el = act && wrap && cellAt(wrap, act.r, act.c);\n const table = wrap && currentTable(view, wrap);\n const source = wrap && sources.get(wrap);\n if (source?.element.contains(view.dom.ownerDocument.activeElement)) {\n if (!view.state.readOnly && !source.editor.state.readOnly) source.editor.dispatch(inlineFormat(source.editor.state, name));\n return true;\n }\n if (!el || !table || !act || view.state.readOnly) return false;\n const missing = missingCells.get(view);\n if (missing?.el === el && missing.changed) {\n recoverMissingCell(view, el);\n return true;\n }\n let sync = syncs.get(view);\n let base = view.state;\n let materialized = ChangeSet.empty(base.doc.length);\n let cell = T.gridLine(table, act.r)?.cells[act.c];\n if (!cell) {\n const changes = T.setCellText(table, act.r, act.c, \"\");\n materialized = base.changes(changes);\n base = base.update({ changes: materialized }).state;\n cell = T.gridLine(tablesIn(base).find((t) => t.from === table.from)!, act.r)?.cells[act.c];\n sync = undefined;\n }\n if (!cell) return true;\n const offsets = sync?.el === el ? (el.dataset.editing === \"1\" ? selectionOffsets(el) : (sync.selection ?? [0, 0])) : [0, 0];\n const map = T.cellDisplayMap(sync?.el === el ? sync.base : cell.text);\n const position = (offset: number) =>\n sync?.el === el\n ? sync.desc.mapPos(sync.baseFrom + (map.offsets[offset] ?? sync.base.length), 1)\n : cell!.from + (map.offsets[offset] ?? cell!.text.length);\n base = base.update({ selection: { anchor: position(offsets[0]!), head: position(offsets[1]!) } }).state;\n const formatted = base.update(inlineFormat(base, name));\n const changes: T.Change[] = [];\n materialized.compose(formatted.changes).iterChanges((from, to, _a, _b, insert) => changes.push({ from, to, insert: insert.toString() }));\n const selection = formatted.state.selection.main;\n missingCells.delete(view);\n if (sync) sync.committing = true;\n const accepted = dispatchChanges(view, changes, true, selection);\n if (sync) sync.committing = false;\n if (!accepted) return true;\n const hit = cellAtPos(view.state, selection.head);\n const currentWrap =\n hit &&\n findWrap(\n view,\n tablesIn(view.state).findIndex((t) => t.from === hit.table.from),\n );\n const target = hit && currentWrap && cellAt(currentWrap, hit.r, hit.c);\n if (target && hit) {\n focusCell(target, 0);\n placeSelection(\n target,\n T.displayCell(view.state.sliceDoc(hit.cell.from, selection.anchor)).length,\n T.displayCell(view.state.sliceDoc(hit.cell.from, selection.head)).length,\n );\n resync(view, target, hit.cell);\n }\n return true;\n};\n\nconst syncCellSelection = (view: EditorView, el = syncs.get(view)?.el) => {\n const sync = syncs.get(view);\n if (!el?.isConnected || document.activeElement !== el || sync?.el !== el || active.get(view)?.composing) return;\n const [a, h] = selectionOffsets(el);\n const map = T.cellDisplayMap(sync.base);\n const position = (offset: number) => sync.desc.mapPos(sync.baseFrom + (map.offsets[offset] ?? sync.base.length), 1);\n const anchor = position(a),\n head = position(h);\n if (anchor !== view.state.selection.main.anchor || head !== view.state.selection.main.head)\n view.dispatch({ selection: { anchor, head } });\n view.state.facet(tableHost)?.onCellSelection?.({ anchor, head });\n};\nconst pendingSelection = new WeakSet<EditorView>();\nconst queueCellSelection = (view: EditorView, el: HTMLElement) => {\n if (pendingSelection.has(view)) return;\n pendingSelection.add(view);\n queueMicrotask(() => {\n pendingSelection.delete(view);\n syncCellSelection(view, el);\n });\n};\nconst atCellVisualEdge = (el: HTMLElement, down: boolean) => {\n const selection = el.ownerDocument.getSelection();\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\n const range = selection.getRangeAt(0).cloneRange();\n range.collapse(false);\n let caret = range.getBoundingClientRect();\n if (!caret.height) {\n // A collapsed range at a container boundary has no rectangle in WebKit.\n // Measure the neighbouring character without changing the user's selection.\n const at = selectionOffsets(el)[1];\n const walker = el.ownerDocument.createTreeWalker(el, NodeFilter.SHOW_TEXT);\n let remaining = at;\n for (let node = walker.nextNode(); node; node = walker.nextNode()) {\n const length = node.textContent?.length ?? 0;\n if (remaining <= length && length) {\n const start = Math.min(remaining, length - 1);\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n caret = range.getBoundingClientRect();\n break;\n }\n remaining -= length;\n }\n }\n if (!caret.height) return !(el.textContent ?? \"\").length;\n const box = el.getBoundingClientRect(),\n style = getComputedStyle(el);\n const lineHeight = Number.parseFloat(style.lineHeight) || caret.height;\n return down\n ? box.bottom - caret.bottom <= Number.parseFloat(style.paddingBottom) + lineHeight / 2\n : caret.top - box.top <= Number.parseFloat(style.paddingTop) + lineHeight / 2;\n};\nconst enterTable = (view: EditorView, down: boolean) => {\n const selection = view.state.selection.main;\n if (!selection.empty) return false;\n const line = view.state.doc.lineAt(selection.head);\n if (view.state.doc.lineAt(view.moveVertically(selection, down).head).number === line.number) return false;\n const tables = tablesIn(view.state);\n const index = tables.findIndex((t) =>\n down\n ? t.from > line.to && view.state.doc.lineAt(t.from).number === line.number + 1\n : t.to < line.from && view.state.doc.lineAt(t.to).number === line.number - 1,\n );\n const table = tables[index];\n const wrap = findWrap(view, index);\n const el = table && wrap && cellAt(wrap, down ? firstRow(table) : T.rowCount(table) - 1, 0);\n if (!el) return false;\n focusCell(el, 0);\n return true;\n};\n\nconst leave = (view: EditorView, wrap: HTMLElement, where: \"before\" | \"after\") => {\n const t = currentTable(view, wrap);\n if (!t) return;\n // An EOF table needs an actual paragraph to receive the caret.\n if (where === \"after\" && t.to === view.state.doc.length && !view.state.readOnly)\n dispatchChanges(view, [{ from: t.to, to: t.to, insert: \"\\n\\n\" }]);\n const anchor = where === \"before\" ? Math.max(0, t.from - 1) : Math.min(view.state.doc.length, t.to + 1);\n view.focus();\n view.dispatch({ selection: { anchor }, scrollIntoView: true });\n};\n\n/** First `<table>` of pasted HTML as a grid (Excel, Sheets, Word, web pages). */\nexport const htmlTableGrid = (html: string): string[][] | null => {\n const doc = parseClipboardHtml(html);\n const table = doc.querySelector(\"table\");\n if (!table) return null;\n const rows = [...table.querySelectorAll(\"tr\")].map((tr) =>\n [...tr.querySelectorAll(\"th,td\")].map((cell) => (cell.textContent ?? \"\").replace(/\\s+/g, \" \").trim()),\n );\n return rows.filter((row) => row.length).length ? rows.filter((row) => row.length) : null;\n};\n\nconst decorate = (state: EditorState, previous: DecorationSet = Decoration.none, changes?: ChangeDesc): DecorationSet => {\n const drawn = new Map<number, DrawnHeight>();\n for (const cursor = previous.iter(); cursor.value; cursor.next()) {\n const widget = cursor.value.spec.widget;\n if (widget instanceof GridWidget) drawn.set(changes ? changes.mapPos(cursor.from, 1) : cursor.from, widget.drawn);\n }\n return Decoration.set(\n tablesIn(state).map((t) => {\n const shape = shapeOf(t);\n const known = drawn.get(t.from);\n const widget = new GridWidget(t, state.readOnly, known?.shape === shape ? known : { shape, height: null });\n return Decoration.replace({ widget, block: true }).range(t.from, t.to);\n }),\n true,\n );\n};\n\nexport const tableGrid = (): Extension => [\n clipboardLoading((view) => view.state.facet(tableHost), syncCellSelection),\n Prec.highest(\n keymap.of([\n { key: \"ArrowDown\", run: (view) => enterTable(view, true) },\n { key: \"ArrowUp\", run: (view) => enterTable(view, false) },\n ]),\n ),\n ViewPlugin.define((view) => {\n const selection = () => {\n const el = syncs.get(view)?.el;\n if (el) queueCellSelection(view, el);\n };\n view.dom.ownerDocument.addEventListener(\"selectionchange\", selection);\n // The editor's width decides how far grids may reach beside the text and whether more columns follow.\n const resize =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n for (const wrap of view.contentDOM.querySelectorAll<HTMLElement>(\".k2b-ste-table\")) measureScroll(view, wrap);\n });\n resize?.observe(view.dom);\n return {\n destroy() {\n resize?.disconnect();\n pendingContextMenus.get(view)?.abort();\n pendingContextMenus.delete(view);\n view.dom.ownerDocument.removeEventListener(\"selectionchange\", selection);\n syncs.delete(view);\n missingCells.delete(view);\n active.delete(view);\n view.state.facet(tableHost)?.onCellSelection?.(null);\n },\n };\n }),\n StateField.define<DecorationSet>({\n create: (state) => decorate(state),\n update: (value, tr) =>\n tr.docChanged ||\n tr.effects.some((e) => e.is(refreshTables)) ||\n tr.startState.readOnly !== tr.state.readOnly ||\n syntaxTree(tr.startState) !== syntaxTree(tr.state)\n ? decorate(tr.state, value, tr.changes)\n : value,\n provide: (field) => [EditorView.decorations.from(field), EditorView.atomicRanges.of((view) => view.state.field(field))],\n }),\n followChanges,\n];\n"],"mappings":"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","ignoreList":[]}
|