@k2b/ui 0.38.0 → 0.39.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/browser/actions/Dropdown.js +42 -6
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/SelectionToolbar.js +11 -6
- package/dist/browser/actions/SelectionToolbar.js.map +1 -1
- package/dist/browser/actions/Toolbar.js +5 -1
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +11 -2
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +331 -214
- package/dist/browser/text-editor/TextEditor.js.map +1 -1
- package/dist/browser/text-editor/table.js +43 -6
- package/dist/browser/text-editor/table.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +38 -6
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/SelectionToolbar.js +11 -6
- package/dist/ssr/actions/SelectionToolbar.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js +5 -1
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +10 -2
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +225 -96
- package/dist/ssr/text-editor/TextEditor.js.map +1 -1
- package/dist/ssr/text-editor/table.js +43 -6
- package/dist/ssr/text-editor/table.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +15 -1
- package/dist/types/actions/Toolbar.d.ts +6 -1
- package/dist/types/actions/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["text-editor/TextEditor.tsx"],"sourcesContent":["import { history, historyKeymap, redo, undo } from \"@codemirror/commands\";\nimport type { Extension } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport { clipboard } from \"@k2b/stdlib/solid\";\nimport { createEffect, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { Dropdown, type DropdownAction, type DropdownChoice, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { SegmentedControl } from \"../actions/SegmentedControl\";\nimport { Toolbar } from \"../actions/Toolbar\";\nimport { Kbd } from \"../content/Kbd\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { NumberInput } from \"../inputs/NumberInput\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport { formatShortcut, type KeyboardPlatform, keyboardPlatform } from \"../intl/shortcut\";\nimport BottomSheet, { bottomSheetAdaptiveOptions } from \"../layout/BottomSheet\";\nimport { createTextEditor, type TextEditorController, type TextEditorMode, type TextEditorOptions } from \"./engine\";\nimport { commands, formatLabels, type InlineFormat } from \"./format\";\nimport { findTables, inspectTableStructure } from \"./markdown-table\";\nimport { textEditorMessages } from \"./messages\";\nimport {\n copyTable,\n editTableSource,\n formatActiveCell,\n type MenuAction,\n runMenuAction,\n runTableAction,\n type TableHost,\n tableActionEnabled,\n} from \"./table\";\n\nexport type TextEditorProps = {\n label: string;\n initialValue?: string;\n mode?: TextEditorMode;\n onModeChange?: (mode: TextEditorMode) => void;\n readOnly?: boolean;\n loading?: boolean;\n placeholder?: string;\n extensions?: Extension;\n /** Host-owned Markdown presentation; see `createTextEditor`. The host then also styles the editor surface. */\n presentation?: TextEditorOptions[\"presentation\"];\n /** `false` when the host renders its own formatting toolbar and mode control; place `controls.TableMenu` in it. */\n toolbar?: boolean;\n /** Collaboration supplies history and server-owned structure here. */\n host?: Pick<TableHost, \"structure\" | \"renderCell\" | \"onCellSelection\" | \"tabMovesFocus\"> &\n Partial<Pick<TableHost, \"undo\" | \"redo\" | \"boundary\">>;\n maxLength: number;\n maxPasteCells?: number;\n onChange?: (text: string) => void;\n onReady?: (editor: TextEditorController, controls: TextEditorControls) => void;\n /** Return `true` when the host attached the images itself; otherwise the editor shows its attachment hint. */\n onDroppedImages?: (count: number, files: File[]) => boolean | void;\n /** Opens the host's attachment picker when clipboard images cannot be inserted. */\n onAttachImages?: () => void;\n onTableCheck?: (needsCheck: boolean) => void;\n /** Host-owned sync status; its place is reserved across transitions. */\n status?: JSX.Element;\n class?: string;\n};\n\nexport type TableSizePickerProps = {\n maxRows: number;\n maxColumns: number;\n onPick: (size: { rows: number; columns: number }) => void;\n /** Share this picker with slash commands or secondary menus. */\n onReady?: (open: () => void) => void;\n disabled?: boolean;\n class?: string;\n size?: \"xs\" | \"sm\";\n};\n\n/** Shared table-size control: pointer grid on desktop, large fields in a phone sheet. */\nexport function TableSizePicker(props: TableSizePickerProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [rows, setRows] = createSignal<number | null>(3);\n const [columns, setColumns] = createSignal<number | null>(3);\n const [expanded, setExpanded] = createSignal(false);\n const id = createUniqueId();\n const abort = new AbortController();\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n abort.abort();\n });\n let trigger!: HTMLButtonElement;\n let popup!: HTMLDivElement;\n const reset = () => {\n setRows(Math.min(3, props.maxRows));\n setColumns(Math.min(3, props.maxColumns));\n };\n const choose = (r: number, c: number) => {\n popup.hidePopover();\n if (!disposed && !props.disabled) props.onPick({ rows: r, columns: c });\n };\n const open = async () => {\n if (disposed || props.disabled || expanded()) return;\n reset();\n if (!window.matchMedia(\"(max-width: 47.999rem)\").matches) {\n popup.showPopover();\n const anchor = trigger.getBoundingClientRect(),\n box = popup.getBoundingClientRect();\n popup.style.left = `${Math.max(8, Math.min(anchor.left, innerWidth - box.width - 8))}px`;\n popup.style.top = `${Math.max(8, anchor.top > box.height + 8 ? anchor.top - box.height - 8 : Math.min(anchor.bottom + 8, innerHeight - box.height - 8))}px`;\n popup.focus();\n return;\n }\n setExpanded(true);\n const chosen = await dialogCore.open<{ rows: number; columns: number }>(\n (close, context) => (\n <LocaleProvider locale={locale()}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <BottomSheet.Header title={t().insertTable} close={context.requestDismiss} />\n <BottomSheet.Body>\n <div class=\"k2b-ste-size-picker\">\n <NumberInput label={t().rows} value={rows()} onValueChange={setRows} min={1} max={props.maxRows} step={1} />\n <NumberInput label={t().columns} value={columns()} onValueChange={setColumns} min={1} max={props.maxColumns} step={1} />\n </div>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button\n disabled={!rows() || !columns()}\n onClick={() => {\n const r = rows(),\n c = columns();\n if (r && c) close({ rows: r, columns: c });\n }}\n >\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n ),\n { ...bottomSheetAdaptiveOptions, ariaLabel: t().insertTable, history: true, signal: abort.signal },\n );\n setExpanded(false);\n if (chosen && !disposed && !props.disabled) props.onPick(chosen);\n };\n onMount(() => props.onReady?.(() => void open()));\n const keyboard = (event: KeyboardEvent) => {\n const directions: Record<string, [number, number]> = { ArrowUp: [-1, 0], ArrowDown: [1, 0], ArrowLeft: [0, -1], ArrowRight: [0, 1] };\n const direction = directions[event.key];\n if (direction) {\n event.preventDefault();\n setRows(Math.max(1, Math.min(Math.min(9, props.maxRows), (rows() ?? 1) + direction[0])));\n setColumns(Math.max(1, Math.min(Math.min(10, props.maxColumns), (columns() ?? 1) + direction[1])));\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n choose(rows() ?? 1, columns() ?? 1);\n } else if (event.key === \"Escape\") trigger.focus();\n };\n return (\n <>\n <IconButton\n ref={trigger}\n variant=\"ghost\"\n class={props.class}\n size={props.size ?? \"sm\"}\n disabled={props.disabled}\n label={t().insertTable}\n aria-haspopup=\"dialog\"\n aria-controls={id}\n aria-expanded={expanded()}\n tooltip={t().insertTable}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => void open()}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n </IconButton>\n <div\n ref={popup}\n id={id}\n popover=\"auto\"\n class=\"k2b-ste-size-popover\"\n role=\"dialog\"\n aria-label={t().insertTable}\n tabIndex={-1}\n onKeyDown={keyboard}\n on:toggle={() => setExpanded(popup.matches(\":popover-open\"))}\n >\n <div class=\"k2b-ste-size-grid\" role=\"group\" aria-label={t().insertTable}>\n <For each={Array.from({ length: Math.min(9, props.maxRows) }, (_, index) => index + 1)}>\n {(r) => (\n <div class=\"k2b-ste-size-row\">\n <For each={Array.from({ length: Math.min(10, props.maxColumns) }, (_, index) => index + 1)}>\n {(c) => (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={t().insertSize({ rows: r, columns: c })}\n data-selected={r <= (rows() ?? 0) && c <= (columns() ?? 0) ? \"true\" : undefined}\n onPointerEnter={() => {\n setRows(r);\n setColumns(c);\n }}\n onClick={() => choose(r, c)}\n />\n )}\n </For>\n </div>\n )}\n </For>\n </div>\n <div class=\"k2b-ste-size-caption\" role=\"status\">\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </div>\n </div>\n </>\n );\n}\n\ntype TableMenuTrigger = { text?: string; class?: string; size?: \"xs\" | \"sm\"; position?: DropdownPosition };\n/** Shared table controls for a host-owned toolbar (`toolbar={false}`). */\nexport type TextEditorControls = {\n /** A table cell has focus in the formatted view. */\n tableActive: () => boolean;\n /** The shared cell menu behind a host-styled trigger; on phones it opens as a sheet. */\n TableMenu: (props: TableMenuTrigger) => JSX.Element;\n /** Formats the focused cell's selection; `false` when no cell has focus. */\n formatCell: (format: InlineFormat) => boolean;\n /** Shows a host message, such as a server's reason for a rejected table action, in the editor's notice. */\n notify: (message: string) => void;\n};\n\nconst toolbar = [\n [\"bold\", \"bold\"],\n [\"italic\", \"italic\"],\n [\"heading\", \"heading\"],\n [\"bulletList\", \"list\"],\n [\"orderedList\", \"list-numbers\"],\n [\"quote\", \"quote\"],\n [\"link\", \"link\"],\n [\"code\", \"code\"],\n [\"table\", \"table\"],\n [\"rule\", \"separator\"],\n] as const;\nconst actionIcons = {\n rowAbove: \"row-insert-top\",\n rowBelow: \"row-insert-bottom\",\n colLeft: \"column-insert-left\",\n colRight: \"column-insert-right\",\n alignLeft: \"align-left\",\n alignCenter: \"align-center\",\n alignRight: \"align-right\",\n deleteRow: \"row-remove\",\n deleteCol: \"column-remove\",\n moveRowUp: \"arrow-up\",\n moveRowDown: \"arrow-down\",\n moveColLeft: \"arrow-left\",\n moveColRight: \"arrow-right\",\n toggleHeader: \"table-row\",\n deleteTable: \"trash\",\n} as const;\nconst isInlineCommand = (command: string): command is Extract<InlineFormat, string> => inlineCommands.has(command);\nconst shortcuts: Partial<Record<keyof typeof commands, string>> = { bold: \"mod+b\", italic: \"mod+i\", link: \"mod+k\" };\nconst inlineCommands = new Set<string>([\"bold\", \"italic\", \"code\", \"link\", \"strike\"]);\n\n/** A Markdown text field with app-injected collaboration and a directly editable table view. */\nexport function TextEditor(props: TextEditorProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [mode, setMode] = createSignal<TextEditorMode>(props.mode ?? \"formatted\");\n const [ready, setReady] = createSignal(false);\n const [recovery, setRecovery] = createSignal<string>();\n const [notice, setNotice] = createSignal<{ message: string; images?: boolean }>();\n const [cell, setCell] = createSignal<HTMLElement>();\n const [localSource, setLocalSource] = createSignal(false);\n const [announcement, setAnnouncement] = createSignal(\"\");\n const [check, setCheck] = createSignal(false);\n const [missingSeparator, setMissingSeparator] = createSignal(false);\n const [active, setActive] = createSignal(false);\n const [documentRevision, setDocumentRevision] = createSignal(0);\n const [phoneMenu, setPhoneMenu] = createSignal(false);\n const [platform, setPlatform] = createSignal<KeyboardPlatform>(\"other\");\n createEffect(() => {\n const target = cell();\n target?.setAttribute(\"data-active\", \"\");\n onCleanup(() => target?.removeAttribute(\"data-active\"));\n });\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n const text = recovery();\n if (text !== undefined) detachedRecovery(text);\n });\n // A local draft can outlive an island during navigation. Keep its recovery\n // surface in the shared dialog root so disposal never silently drops it.\n const detachedRecovery = (text: string) => {\n const language = locale();\n const labels = t();\n const beforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = \"\";\n };\n window.addEventListener(\"beforeunload\", beforeUnload);\n const show = () =>\n void dialogCore\n .open<\"discard\">(\n (close, context) => {\n context.setDismissHandler(() => {});\n return (\n <LocaleProvider locale={language}>\n <BottomSheet handle={false} onDismiss={() => {}}>\n <BottomSheet.Header title={labels.recoveredInput} />\n <BottomSheet.Body>\n <label class=\"k2b-ste-recovery-label\">\n {labels.recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={text} />\n </label>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button variant=\"ghost\" onClick={() => close(\"discard\")}>\n {labels.discardRecovery}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n );\n },\n { ...bottomSheetAdaptiveOptions, ariaLabel: labels.recoveredInput },\n )\n .then((result) => {\n if (result === \"discard\") window.removeEventListener(\"beforeunload\", beforeUnload);\n // The shared dialog root closes on each island disposal. Retain the\n // draft across subsequent navigation until the person explicitly discards it.\n else queueMicrotask(show);\n });\n show();\n };\n let menuOpen = false;\n let pointerAnchor: { left: string; top: string } | undefined;\n let floatingTrigger: HTMLButtonElement | undefined;\n const tableTriggers = new Set<HTMLButtonElement>();\n let frame = 0;\n const [menuPosition, setMenuPosition] = createSignal({ left: \"0px\", top: \"0px\" });\n let root!: HTMLDivElement;\n let mount!: HTMLDivElement;\n let editor: TextEditorController | undefined;\n const menuBlocked = () => !!props.loading || !ready() || recovery() !== undefined;\n const blocked = () => !!props.readOnly || menuBlocked();\n const updateCheck = () => {\n const issue =\n mode() === \"plain\"\n ? { extraCells: false, missingSeparator: false }\n : inspectTableStructure(editor?.view.state.doc.toString() ?? props.initialValue ?? \"\");\n const needsCheck = issue.extraCells || issue.missingSeparator;\n setMissingSeparator(issue.missingSeparator);\n setCheck(needsCheck);\n props.onTableCheck?.(needsCheck);\n };\n const positionMenu = () => {\n const target = cell();\n if (!target) return;\n const wrap = target.closest<HTMLElement>(\".k2b-ste-table\");\n const table = wrap?.querySelector(\"table\");\n if (!target.isConnected || !wrap || !table || mode() !== \"formatted\") {\n menuOpen = false;\n setCell(undefined);\n checkFocus();\n return;\n }\n const rect = target.getBoundingClientRect();\n const bounds = root.getBoundingClientRect();\n const right = Math.min(table.getBoundingClientRect().right, wrap.getBoundingClientRect().right);\n const position = props.readOnly\n ? {\n left: `${wrap.getBoundingClientRect().left - bounds.left}px`,\n top: `${wrap.getBoundingClientRect().bottom - bounds.top - (window.matchMedia(\"(max-width: 47.999rem)\").matches ? 44 : 0)}px`,\n }\n : { left: `${right - bounds.left - 24}px`, top: `${rect.top - bounds.top + (rect.height - 24) / 2}px` };\n setMenuPosition(pointerAnchor ?? position);\n };\n const schedulePosition = () => {\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n positionMenu();\n });\n };\n const unavailable = () => !!props.host?.structure && !props.host.structure.available();\n const actionDisabled = (action: MenuAction) => {\n documentRevision();\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n return blocked() || !editor || !wrap || !tableActionEnabled(editor.view, wrap, action);\n };\n const isMove = (action: MenuAction) => action.startsWith(\"move\");\n const runAction = (action: MenuAction) => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n const focused = document.activeElement;\n const menuElement = focused instanceof HTMLElement ? focused.closest<HTMLElement>('[role=\"menu\"]') : null;\n if (editor && wrap && !actionDisabled(action)) runMenuAction(editor.view, wrap, action);\n // The phone move sheet remains usable for another move. Local structural\n // focus belongs to the cell only after the menu has closed.\n if (isMove(action) && focused instanceof HTMLElement && menuElement) {\n const restore = () => {\n if (disposed || !menuElement.isConnected) return;\n const target =\n focused.isConnected && !focused.matches(\":disabled\")\n ? focused\n : menuElement.querySelector<HTMLElement>('[role^=\"menuitem\"]:not(:disabled)');\n target?.focus({ preventScroll: true });\n };\n restore();\n queueMicrotask(restore);\n }\n };\n const moveKeys: Partial<Record<MenuAction, string>> = {\n moveRowUp: \"alt+arrowup\",\n moveRowDown: \"alt+arrowdown\",\n moveColLeft: \"alt+arrowleft\",\n moveColRight: \"alt+arrowright\",\n };\n const shortActionLabels = {\n rowAbove: \"menuAbove\",\n rowBelow: \"menuBelow\",\n moveRowUp: \"menuUp\",\n moveRowDown: \"menuDown\",\n deleteRow: \"menuDelete\",\n colLeft: \"menuInsertLeft\",\n colRight: \"menuInsertRight\",\n moveColLeft: \"menuMoveLeft\",\n moveColRight: \"menuMoveRight\",\n deleteCol: \"menuDelete\",\n } as const;\n const menuRow = () => {\n documentRevision();\n return t().menuRow(Number(cell()?.dataset.r ?? 0));\n };\n const menuColumn = () => {\n documentRevision();\n const column = Number(cell()?.dataset.c ?? 0);\n const header = cell()?.closest(\".k2b-ste-table\")?.querySelector<HTMLElement>(`.k2b-ste-cell[data-r=\"0\"][data-c=\"${column}\"]`);\n return t().menuColumn(header?.dataset.raw || t().column(column + 1));\n };\n const menuHeading = () => `${menuRow()} · ${menuColumn()}`;\n const actionItem = (action: keyof typeof actionIcons, choice?: Pick<DropdownChoice, \"choice\" | \"checked\" | \"class\" | \"ariaLabel\">) =>\n ({\n get label() {\n return phoneMenu() && action in shortActionLabels ? t()[shortActionLabels[action as keyof typeof shortActionLabels]] : t()[action];\n },\n icon: `ti ti-${actionIcons[action]}`,\n get disabled() {\n return actionDisabled(action);\n },\n immediate: true,\n trailing: moveKeys[action] ? <Kbd keys={moveKeys[action]!} /> : action === \"rowBelow\" ? <Kbd keys=\"enter\" /> : undefined,\n variant: action === \"deleteRow\" || action === \"deleteCol\" || action === \"deleteTable\" ? \"danger\" : undefined,\n closeOnSelect: !isMove(action),\n action: () => runAction(action),\n ...choice,\n }) satisfies DropdownAction;\n const [copying, setCopying] = createSignal(false);\n const tableCopy = clipboard.createWriter({\n write: ({ view, wrap, format }: { view: EditorView; wrap: HTMLElement; format: \"table\" | \"markdown\" }) => copyTable(view, wrap, format),\n });\n const copy = async (format: \"table\" | \"markdown\") => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (!editor || !wrap || copying()) return;\n setCopying(true);\n setNotice({ message: t().copyingTable });\n const success = await tableCopy.copy({ view: editor.view, wrap, format });\n if (disposed) return;\n setCopying(false);\n setNotice({ message: success ? (format === \"table\" ? t().copiedTable : t().copiedMarkdown) : t().copyFailed });\n };\n const copyItems = (): DropdownAction[] => [\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuCopy : t().copyTable;\n },\n icon: \"ti ti-copy\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"table\");\n },\n },\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuMarkdown : t().copyMarkdown;\n },\n icon: \"ti ti-markdown\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"markdown\");\n },\n },\n ];\n const items = (): DropdownItem[] => {\n if (props.readOnly) return copyItems();\n const align = () => {\n documentRevision();\n return cell()?.parentElement?.style.textAlign || \"left\";\n };\n return [\n {\n get sectionLabel() {\n return menuHeading();\n },\n items: [],\n },\n {\n get sectionLabel() {\n return menuRow();\n },\n items: ([\"rowAbove\", \"rowBelow\", \"moveRowUp\", \"moveRowDown\", \"deleteRow\"] as const).map((action) => actionItem(action)),\n },\n {\n get sectionLabel() {\n return menuColumn();\n },\n items: ([\"colLeft\", \"colRight\", \"moveColLeft\", \"moveColRight\"] as const).map((action) => actionItem(action)),\n },\n {\n sectionLabel: t().alignment,\n layout: \"row\",\n items: ([\"alignLeft\", \"alignCenter\", \"alignRight\"] as const).map((action, index) =>\n actionItem(action, {\n choice: \"radio\",\n class: \"k2b-ste-align-choice\",\n ariaLabel: t()[action],\n checked: () => align() === [\"left\", \"center\", \"right\"][index],\n }),\n ),\n },\n { items: [actionItem(\"deleteCol\")] },\n {\n sectionLabel: t().table,\n items: [\n actionItem(\"toggleHeader\", {\n choice: \"checkbox\",\n class: \"k2b-ste-header-choice\",\n checked: () => {\n documentRevision();\n return cell()?.closest<HTMLElement>(\".k2b-ste-table\")?.dataset.header === \"true\";\n },\n }),\n {\n label: t().editMarkdown,\n icon: \"ti ti-markdown\",\n action: () => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (editor && wrap) editTableSource(editor.view, wrap);\n },\n },\n ...copyItems(),\n actionItem(\"deleteTable\"),\n ...(unavailable() ? [{ label: t().structureUnavailable, disabled: true as const }] : []),\n ],\n },\n ];\n };\n const preserveSelection = (event: MouseEvent) => event.preventDefault();\n const menuChange = (open: boolean) => {\n menuOpen = open;\n };\n const menuClose = () => {\n menuOpen = false;\n pointerAnchor = undefined;\n schedulePosition();\n queueMicrotask(() => {\n if (disposed) return;\n const focused = document.activeElement;\n if (focused instanceof HTMLElement && focused.matches(\".k2b-ste-cell-menu, .k2b-ste-table-tool\")) cell()?.focus();\n checkFocus();\n });\n };\n const menu = (floating: boolean, trigger?: TableMenuTrigger) => (\n // A sheet owns its item inventory until it closes. Replace that owner when\n // edit access changes so an already open sheet cannot retain edit entries.\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items()}\n phone=\"sheet\"\n sheetTop={\n props.readOnly\n ? undefined\n : (close) => (\n <div class=\"k2b-ste-table-sheet-heading\">\n <span title={menuHeading()}>{menuHeading()}</span>\n <Button variant=\"ghost\" onClick={close}>\n {t().done}\n </Button>\n </div>\n )\n }\n menuClass=\"k2b-ste-table-menu\"\n position={floating ? \"right-start\" : (trigger?.position ?? \"bottom-right\")}\n width=\"18rem\"\n label={props.readOnly ? t().copyTable : t().tableMenu}\n disabled={menuBlocked() || localSource() || !cell()?.isConnected}\n onOpenChange={menuChange}\n onClose={menuClose}\n >\n <Dropdown.Trigger\n ref={(element) => {\n if (floating) floatingTrigger = element;\n else {\n tableTriggers.add(element);\n onCleanup(() => tableTriggers.delete(element));\n }\n }}\n class={\n floating\n ? props.readOnly\n ? \"k2b-ste-cell-menu k2b-ste-copy-menu\"\n : \"k2b-ste-cell-menu\"\n : `k2b-ste-tool k2b-ste-table-tool ${trigger?.class ?? \"\"}`\n }\n variant=\"ghost\"\n size={trigger?.size ?? \"sm\"}\n iconOnly={!trigger?.text && !props.readOnly}\n label={trigger?.text ?? (props.readOnly ? t().copyTable : t().tableMenu)}\n aria-pressed={!floating ? true : undefined}\n onMouseDown={preserveSelection}\n >\n <i class={props.readOnly ? \"ti ti-copy\" : floating ? \"ti ti-dots\" : \"ti ti-table\"} aria-hidden=\"true\" />\n {trigger?.text ?? (props.readOnly ? t().copyTable : undefined)}\n <Show when={trigger?.text}>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown>\n )}\n </Show>\n );\n const runFormat = (command: keyof typeof commands) => {\n if (!editor || blocked()) return;\n if (cell()?.isConnected && isInlineCommand(command) && formatActiveCell(editor.view, command)) return;\n commands[command](editor.view);\n };\n const checkFocus = () => {\n if (disposed) return;\n // A host toolbar sits outside this root. Native popover focus moves before\n // its toggle callback, but Dropdown already exposes its synchronous state.\n if (\n menuOpen ||\n [...tableTriggers, floatingTrigger].some((trigger) => trigger?.isConnected && trigger.getAttribute(\"aria-expanded\") === \"true\")\n )\n return;\n const focused = document.activeElement;\n setLocalSource(focused instanceof HTMLElement && !!focused.closest(\".k2b-ste-table-source\"));\n const inside = focused instanceof Node && root.contains(focused);\n setActive(inside);\n if (!inside || focused === editor?.view.contentDOM) setCell(undefined);\n else if (!cell()?.isConnected) setCell(undefined);\n };\n const formatMenu = (command: \"heading\" | \"code\") => (\n <Dropdown\n phone=\"sheet\"\n label={t()[command]}\n disabled={blocked() || (command === \"heading\" && !!cell())}\n onOpenChange={menuChange}\n onClose={menuClose}\n items={\n command === \"heading\"\n ? [\n {\n items: ([\"heading1\", \"heading2\", \"heading3\"] as const).map((name, index) => ({\n label: t()[name],\n icon: `ti ti-h-${index + 1}`,\n action: () => runFormat(name),\n })),\n },\n ]\n : [\n { label: t().inlineCode, icon: \"ti ti-code\", action: () => runFormat(\"code\") },\n { label: t().codeBlock, icon: \"ti ti-source-code\", disabled: !!cell(), action: () => runFormat(\"codeBlock\") },\n { label: t().strike, icon: \"ti ti-strikethrough\", trailing: <Kbd keys=\"mod+shift+x\" />, action: () => runFormat(\"strike\") },\n ]\n }\n >\n <Dropdown.Trigger class=\"k2b-ste-tool\" variant=\"ghost\" size=\"sm\" iconOnly label={t()[command]} onMouseDown={preserveSelection}>\n <i class={`ti ti-${command}`} aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown>\n );\n const selectMode = (next: TextEditorMode) => {\n const restoreEditorFocus = !!editor?.view.contentDOM.contains(document.activeElement);\n menuOpen = false;\n setCell(undefined);\n setMode(next);\n props.onModeChange?.(next);\n if (restoreEditorFocus) queueMicrotask(() => editor?.view.focus());\n };\n onMount(() => {\n setPlatform(keyboardPlatform());\n const menuMedia = window.matchMedia(\"(max-width: 47.999rem)\");\n const menuViewport = () => setPhoneMenu(menuMedia.matches);\n menuViewport();\n menuMedia.addEventListener(\"change\", menuViewport);\n onCleanup(() => menuMedia.removeEventListener(\"change\", menuViewport));\n // A standalone editor has no binding history; collaboration supplies its own instead.\n const nativeHistory = !props.host?.undo;\n editor = createTextEditor({\n parent: mount,\n doc: props.initialValue,\n mode: mode(),\n label: props.label,\n readOnly: props.readOnly,\n placeholder: props.placeholder,\n presentation: props.presentation,\n extensions: [\n nativeHistory ? [history(), keymap.of(historyKeymap)] : [],\n formatLabels.of({\n get link() {\n return t().link;\n },\n column: (column) => t().column(column),\n }),\n EditorView.updateListener.of((update) => {\n schedulePosition();\n if (update.docChanged) queueMicrotask(() => setDocumentRevision((revision) => revision + 1));\n }),\n props.extensions ?? [],\n ],\n host: {\n ...props.host,\n undo: props.host?.undo ?? (() => editor && undo(editor.view)),\n redo: props.host?.redo ?? (() => editor && redo(editor.view)),\n boundary: props.host?.boundary ?? (() => {}),\n cellLabel: (row, column, name) => t().cellLabel({ row, column, name }),\n actionLabel: (name) => t()[name],\n sourceLabels: () => ({\n edit: t().editMarkdown,\n valid: t().markdownValid,\n invalid: t().markdownInvalid,\n changed: t().markdownChanged,\n structural: t().markdownStructural,\n applying: t().applyingTable,\n applyFailed: t().markdownApplyFailed,\n done: phoneMenu() ? t().done : t().showTable,\n discard: t().discardMarkdown,\n continue: t().continueMarkdown,\n line: t().markdownLine,\n separator: (header, separator) => t().markdownSeparator({ header, separator }),\n extra: t().markdownExtra,\n complete: t().completeColumns,\n }),\n maxLength: props.maxLength,\n maxPasteCells: props.maxPasteCells ?? 2000,\n onRecovery: (text) => {\n if (disposed) detachedRecovery(text);\n else setRecovery((previous) => (previous === undefined ? text : `${previous}\\n\\n${text}`));\n },\n onError: (code) => setNotice({ message: t()[code] }),\n },\n onChange: (text) => {\n props.onChange?.(text);\n queueMicrotask(updateCheck);\n },\n onDroppedImages: (count, files) => {\n if (props.onDroppedImages?.(count, files) !== true) setNotice({ message: t().imageHint, images: true });\n },\n });\n const focus = (event: Event) => {\n if (!(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n setActive(true);\n if (!menuOpen) pointerAnchor = undefined;\n setCell(event.detail.cell);\n positionMenu();\n };\n const structureAnnouncement = (event: Event) => {\n if (!(event instanceof CustomEvent)) return;\n const detail: unknown = event.detail;\n if (\n detail &&\n typeof detail === \"object\" &&\n \"rows\" in detail &&\n \"columns\" in detail &&\n typeof detail.rows === \"number\" &&\n typeof detail.columns === \"number\"\n )\n setAnnouncement(t().tableChanged({ rows: detail.rows, columns: detail.columns }));\n };\n const focusChange = () => queueMicrotask(checkFocus);\n let pointerCheck: ReturnType<typeof setTimeout> | undefined;\n const pointer = (event: PointerEvent) => {\n if (event.target instanceof Node && root.contains(event.target)) setActive(true);\n // After the press moved focus: a host toolbar control that keeps focus in the cell keeps it active.\n else if (!menuOpen) {\n clearTimeout(pointerCheck);\n pointerCheck = setTimeout(checkFocus);\n }\n };\n const keyboardMenu = (event: Event) => {\n if (menuBlocked()) return;\n focus(event);\n if (event instanceof CustomEvent) {\n const bounds = root.getBoundingClientRect();\n const anchor = event.detail.anchor instanceof HTMLElement ? event.detail.anchor.getBoundingClientRect() : undefined;\n if (anchor || typeof event.detail.x === \"number\") {\n pointerAnchor = {\n left: `${(anchor?.left ?? event.detail.x) - bounds.left}px`,\n top: `${(anchor?.bottom ?? event.detail.y) - bounds.top}px`,\n };\n positionMenu();\n }\n }\n queueMicrotask(() => {\n if (disposed || !cell()?.isConnected) return;\n const tableTrigger = [...tableTriggers].find((trigger) => trigger.isConnected);\n const trigger =\n (window.matchMedia(\"(max-width: 47.999rem)\").matches && tableTrigger?.isConnected ? tableTrigger : undefined) ?? floatingTrigger;\n trigger?.click();\n });\n };\n const mutations = new MutationObserver(schedulePosition);\n mutations.observe(mount, { childList: true, subtree: true, characterData: true });\n const resize = new ResizeObserver(schedulePosition);\n resize.observe(mount);\n // Safari blurs a contenteditable on mouse-down without focusing the radio.\n // Keep the caret and phone toolbar stationary until the view switch runs.\n const viewMouseDown = (event: MouseEvent) => {\n if (event.target instanceof Element && event.target.closest(\".k2b-ste-views\")) event.preventDefault();\n };\n root.addEventListener(\"mousedown\", viewMouseDown);\n document.addEventListener(\"focusin\", focusChange);\n document.addEventListener(\"pointerdown\", pointer);\n root.addEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.addEventListener(\"k2b-ste-cell-focus\", focus);\n root.addEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.addEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n const tableScroll = (event: Event) => {\n if (\n menuOpen &&\n event.target instanceof HTMLElement &&\n event.target.classList.contains(\"k2b-ste-table\") &&\n floatingTrigger?.getAttribute(\"aria-expanded\") === \"true\"\n )\n floatingTrigger.click();\n schedulePosition();\n };\n window.addEventListener(\"scroll\", tableScroll, true);\n window.addEventListener(\"resize\", schedulePosition);\n const viewport = window.visualViewport;\n const keyboard = () =>\n root.style.setProperty(\n \"--k2b-ste-keyboard\",\n `${Math.max(0, window.innerHeight - (viewport?.height ?? window.innerHeight) - (viewport?.offsetTop ?? 0))}px`,\n );\n viewport?.addEventListener(\"resize\", keyboard);\n viewport?.addEventListener(\"scroll\", keyboard);\n keyboard();\n setReady(true);\n updateCheck();\n props.onReady?.(editor, {\n tableActive: () => mode() === \"formatted\" && !!cell()?.isConnected,\n TableMenu: (trigger) => menu(false, trigger),\n formatCell: (format) => !!editor && !blocked() && !!cell()?.isConnected && formatActiveCell(editor.view, format),\n notify: (message) => setNotice({ message }),\n });\n onCleanup(() => {\n clearTimeout(pointerCheck);\n mutations.disconnect();\n resize.disconnect();\n cancelAnimationFrame(frame);\n root.removeEventListener(\"mousedown\", viewMouseDown);\n document.removeEventListener(\"focusin\", focusChange);\n document.removeEventListener(\"pointerdown\", pointer);\n root.removeEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.removeEventListener(\"k2b-ste-cell-focus\", focus);\n root.removeEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.removeEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.removeEventListener(\"scroll\", tableScroll, true);\n window.removeEventListener(\"resize\", schedulePosition);\n viewport?.removeEventListener(\"resize\", keyboard);\n viewport?.removeEventListener(\"scroll\", keyboard);\n editor?.destroy();\n });\n });\n createEffect(() => {\n if (props.mode !== undefined) setMode(props.mode);\n });\n createEffect(() => {\n if (ready()) {\n const next = mode();\n // Rendering the grid consults reactive host availability. Those reads\n // must not turn a history notification into a nested mode reconfigure.\n untrack(() => {\n menuOpen = false;\n setCell(undefined);\n editor?.setMode(next);\n updateCheck();\n });\n }\n });\n createEffect(() => {\n const label = props.label;\n if (ready()) untrack(() => editor?.setLabel(label));\n });\n createEffect(() => {\n const readOnly = !!props.readOnly || !!props.loading || recovery() !== undefined;\n if (ready()) untrack(() => editor?.setReadOnly(readOnly));\n });\n createEffect(() => {\n documentRevision();\n const disabled = blocked() || unavailable();\n if (ready())\n root.querySelectorAll<HTMLButtonElement>(\".k2b-ste-addColumn\").forEach((button) => {\n button.disabled = disabled;\n });\n });\n return (\n <div\n ref={root}\n class={`k2b-text-editor ${props.class ?? \"\"}`}\n data-mode={mode()}\n data-readonly={props.readOnly ? \"true\" : undefined}\n data-active={active() ? \"true\" : undefined}\n aria-busy={props.loading || !ready()}\n >\n <span class=\"k2b-ste-announcement\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement()}\n </span>\n <Show when={!props.presentation || \"status\" in props || check()}>\n <div class=\"k2b-ste-status\" role=\"status\">\n <span>{props.status}</span>\n <Show when={check()}>\n <span class=\"k2b-ste-check\" title={missingSeparator() ? t().checkSeparatorDetail : t().checkTableDetail}>\n <i class=\"ti ti-alert-triangle\" aria-hidden=\"true\" />\n {t().checkTable}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={blocked() || (!missingSeparator() && unavailable())}\n hidden={props.readOnly}\n tooltip={missingSeparator() ? t().checkSeparatorDetail : unavailable() ? t().structureUnavailable : t().checkTableDetail}\n onMouseDown={preserveSelection}\n onClick={() => {\n if (!editor) return;\n if (missingSeparator()) {\n selectMode(\"source\");\n queueMicrotask(() => editor?.view.focus());\n return;\n }\n const table = findTables(editor.view.state.doc.toString()).find((table) =>\n table.lines.some((row) => row.cells.length > table.columns),\n );\n if (table) runTableAction(editor.view, table.from, 0, 0, \"completeColumns\");\n }}\n >\n {missingSeparator() ? t().reviewMarkdown : t().completeColumns}\n </Button>\n </Show>\n </div>\n </Show>\n <Show when={!props.readOnly && mode() !== \"plain\" && props.toolbar !== false}>\n <div class=\"k2b-ste-toolbar-slot\">\n <Toolbar class=\"k2b-ste-toolbar\" label={t().formatting}>\n <For each={[toolbar.slice(0, 3), toolbar.slice(3, 6), toolbar.slice(6)]}>\n {(group) => (\n <Toolbar.Group class=\"k2b-ste-tool-group\">\n <For each={group}>\n {([command, icon]) =>\n command === \"heading\" || command === \"code\" ? (\n formatMenu(command)\n ) : (\n <Show\n when={command === \"table\" && mode() === \"formatted\" && cell()?.isConnected}\n fallback={\n <IconButton\n class=\"k2b-ste-tool\"\n variant=\"ghost\"\n size=\"sm\"\n label={t()[command]}\n tooltip={\n shortcuts[command]\n ? `${t()[command]} (${formatShortcut(shortcuts[command] ?? \"\", { platform: platform(), locale: locale() }).label})`\n : t()[command]\n }\n disabled={blocked() || (!!cell() && !inlineCommands.has(command) && command !== \"table\")}\n onMouseDown={preserveSelection}\n onClick={() => runFormat(command)}\n >\n <i class={`ti ti-${icon}`} aria-hidden=\"true\" />\n </IconButton>\n }\n >\n {menu(false)}\n </Show>\n )\n }\n </For>\n </Toolbar.Group>\n )}\n </For>\n <SegmentedControl\n class=\"k2b-ste-views\"\n size=\"sm\"\n ariaLabel={t().view}\n value={mode() === \"source\" ? \"source\" : \"formatted\"}\n options={[\n { value: \"formatted\", label: t().formatted, icon: \"ti ti-typography\" },\n { value: \"source\", label: t().source, icon: \"ti ti-markdown\" },\n ]}\n onValueChange={selectMode}\n />\n </Toolbar>\n </div>\n </Show>\n <Show when={props.loading || !ready()}>\n <div class=\"k2b-ste-loading\" role=\"status\" aria-label={t().loading}>\n <For each={[82, 100, 68, 0, 96, 74]}>\n {(width) => (\n <div>\n <span style={{ width: `${width}%` }} />\n </div>\n )}\n </For>\n </div>\n </Show>\n <div ref={mount} class={props.presentation ? \"k2b-ste-app-host\" : \"k2b-ste-host\"} hidden={props.loading || !ready()} />\n <Show when={cell() && mode() === \"formatted\" && !menuBlocked()}>\n <div class=\"k2b-ste-floating-menu\" data-readonly={props.readOnly ? \"true\" : undefined} style={menuPosition()}>\n {menu(true)}\n </div>\n </Show>\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <Show when={notice() || recovery() !== undefined}>\n <div class=\"k2b-ste-notice\">\n <div class=\"k2b-ste-notice-content\">\n <Show when={notice()}>\n <Show when={notice()?.images && props.onAttachImages} fallback={<span>{notice()?.message}</span>}>\n <Button size=\"sm\" variant=\"ghost\" disabled={blocked()} onClick={() => props.onAttachImages?.()}>\n {notice()?.message}\n </Button>\n </Show>\n </Show>\n <Show when={recovery() !== undefined}>\n <label class=\"k2b-ste-recovery-label\">\n {t().recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={recovery()} />\n </label>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setRecovery(undefined);\n if (notice()?.message === t().cellRemoved) setNotice(undefined);\n }}\n >\n {t().discardRecovery}\n </Button>\n </Show>\n </div>\n <Show when={notice()}>\n <IconButton size=\"sm\" variant=\"ghost\" label={t().dismiss} onClick={() => setNotice(undefined)}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["text-editor/TextEditor.tsx"],"sourcesContent":["import { history, historyKeymap, redo, undo } from \"@codemirror/commands\";\nimport type { Extension } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport { clipboard } from \"@k2b/stdlib/solid\";\nimport { createEffect, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport {\n Dropdown,\n type DropdownAction,\n type DropdownAnchor,\n type DropdownChoice,\n type DropdownItem,\n type DropdownPosition,\n} from \"../actions/Dropdown\";\nimport { SegmentedControl } from \"../actions/SegmentedControl\";\nimport { Toolbar } from \"../actions/Toolbar\";\nimport { Kbd } from \"../content/Kbd\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { NumberInput } from \"../inputs/NumberInput\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport { formatShortcut, type KeyboardPlatform, keyboardPlatform } from \"../intl/shortcut\";\nimport BottomSheet, { bottomSheetAdaptiveOptions } from \"../layout/BottomSheet\";\nimport { createTextEditor, type TextEditorController, type TextEditorMode, type TextEditorOptions } from \"./engine\";\nimport { commands, formatLabels, type InlineFormat } from \"./format\";\nimport { findTables, inspectTableStructure } from \"./markdown-table\";\nimport { textEditorMessages } from \"./messages\";\nimport {\n copyTable,\n editTableSource,\n formatActiveCell,\n type MenuAction,\n runMenuAction,\n runTableAction,\n type TableHost,\n tableActionEnabled,\n} from \"./table\";\n\nexport type TextEditorProps = {\n label: string;\n initialValue?: string;\n mode?: TextEditorMode;\n onModeChange?: (mode: TextEditorMode) => void;\n readOnly?: boolean;\n loading?: boolean;\n placeholder?: string;\n extensions?: Extension;\n /** Host-owned Markdown presentation; see `createTextEditor`. The host then also styles the editor surface. */\n presentation?: TextEditorOptions[\"presentation\"];\n /** `false` when the host renders its own formatting toolbar and mode control; place `controls.TableMenu` in it. */\n toolbar?: boolean;\n /** Collaboration supplies history and server-owned structure here. */\n host?: Pick<TableHost, \"structure\" | \"renderCell\" | \"onCellSelection\" | \"tabMovesFocus\"> &\n Partial<Pick<TableHost, \"undo\" | \"redo\" | \"boundary\">>;\n maxLength: number;\n maxPasteCells?: number;\n onChange?: (text: string) => void;\n onReady?: (editor: TextEditorController, controls: TextEditorControls) => void;\n /** Return `true` when the host attached the images itself; otherwise the editor shows its attachment hint. */\n onDroppedImages?: (count: number, files: File[]) => boolean | void;\n /** Opens the host's attachment picker when clipboard images cannot be inserted. */\n onAttachImages?: () => void;\n onTableCheck?: (needsCheck: boolean) => void;\n /** Host-owned sync status; its place is reserved across transitions. */\n status?: JSX.Element;\n class?: string;\n};\n\nexport type TableSizePickerProps = {\n maxRows: number;\n maxColumns: number;\n onPick: (size: { rows: number; columns: number }) => void;\n /** Share this picker with slash commands or secondary menus. */\n onReady?: (open: () => void) => void;\n disabled?: boolean;\n class?: string;\n size?: \"xs\" | \"sm\";\n};\n\n/** Shared table-size control: pointer grid on desktop, large fields in a phone sheet. */\nexport function TableSizePicker(props: TableSizePickerProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [rows, setRows] = createSignal<number | null>(3);\n const [columns, setColumns] = createSignal<number | null>(3);\n const [expanded, setExpanded] = createSignal(false);\n const id = createUniqueId();\n const abort = new AbortController();\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n abort.abort();\n });\n let trigger!: HTMLButtonElement;\n let popup!: HTMLDivElement;\n const reset = () => {\n setRows(Math.min(3, props.maxRows));\n setColumns(Math.min(3, props.maxColumns));\n };\n const choose = (r: number, c: number) => {\n popup.hidePopover();\n if (!disposed && !props.disabled) props.onPick({ rows: r, columns: c });\n };\n const open = async () => {\n if (disposed || props.disabled || expanded()) return;\n reset();\n if (!window.matchMedia(\"(max-width: 47.999rem)\").matches) {\n popup.showPopover();\n const anchor = trigger.getBoundingClientRect(),\n box = popup.getBoundingClientRect();\n popup.style.left = `${Math.max(8, Math.min(anchor.left, innerWidth - box.width - 8))}px`;\n popup.style.top = `${Math.max(8, anchor.top > box.height + 8 ? anchor.top - box.height - 8 : Math.min(anchor.bottom + 8, innerHeight - box.height - 8))}px`;\n popup.focus();\n return;\n }\n setExpanded(true);\n const chosen = await dialogCore.open<{ rows: number; columns: number }>(\n (close, context) => (\n <LocaleProvider locale={locale()}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <BottomSheet.Header title={t().insertTable} close={context.requestDismiss} />\n <BottomSheet.Body>\n <div class=\"k2b-ste-size-picker\">\n <NumberInput label={t().rows} value={rows()} onValueChange={setRows} min={1} max={props.maxRows} step={1} />\n <NumberInput label={t().columns} value={columns()} onValueChange={setColumns} min={1} max={props.maxColumns} step={1} />\n </div>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button\n disabled={!rows() || !columns()}\n onClick={() => {\n const r = rows(),\n c = columns();\n if (r && c) close({ rows: r, columns: c });\n }}\n >\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n ),\n { ...bottomSheetAdaptiveOptions, ariaLabel: t().insertTable, history: true, signal: abort.signal },\n );\n setExpanded(false);\n if (chosen && !disposed && !props.disabled) props.onPick(chosen);\n };\n onMount(() => props.onReady?.(() => void open()));\n const keyboard = (event: KeyboardEvent) => {\n const directions: Record<string, [number, number]> = { ArrowUp: [-1, 0], ArrowDown: [1, 0], ArrowLeft: [0, -1], ArrowRight: [0, 1] };\n const direction = directions[event.key];\n if (direction) {\n event.preventDefault();\n setRows(Math.max(1, Math.min(Math.min(9, props.maxRows), (rows() ?? 1) + direction[0])));\n setColumns(Math.max(1, Math.min(Math.min(10, props.maxColumns), (columns() ?? 1) + direction[1])));\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n choose(rows() ?? 1, columns() ?? 1);\n } else if (event.key === \"Escape\") trigger.focus();\n };\n return (\n <>\n <IconButton\n ref={trigger}\n variant=\"ghost\"\n class={props.class}\n size={props.size ?? \"sm\"}\n disabled={props.disabled}\n label={t().insertTable}\n aria-haspopup=\"dialog\"\n aria-controls={id}\n aria-expanded={expanded()}\n tooltip={t().insertTable}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => void open()}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n </IconButton>\n <div\n ref={popup}\n id={id}\n popover=\"auto\"\n class=\"k2b-ste-size-popover\"\n role=\"dialog\"\n aria-label={t().insertTable}\n tabIndex={-1}\n onKeyDown={keyboard}\n on:toggle={() => setExpanded(popup.matches(\":popover-open\"))}\n >\n <div class=\"k2b-ste-size-grid\" role=\"group\" aria-label={t().insertTable}>\n <For each={Array.from({ length: Math.min(9, props.maxRows) }, (_, index) => index + 1)}>\n {(r) => (\n <div class=\"k2b-ste-size-row\">\n <For each={Array.from({ length: Math.min(10, props.maxColumns) }, (_, index) => index + 1)}>\n {(c) => (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={t().insertSize({ rows: r, columns: c })}\n data-selected={r <= (rows() ?? 0) && c <= (columns() ?? 0) ? \"true\" : undefined}\n onPointerEnter={() => {\n setRows(r);\n setColumns(c);\n }}\n onClick={() => choose(r, c)}\n />\n )}\n </For>\n </div>\n )}\n </For>\n </div>\n <div class=\"k2b-ste-size-caption\" role=\"status\">\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </div>\n </div>\n </>\n );\n}\n\ntype TableMenuTrigger = { text?: string; class?: string; size?: \"xs\" | \"sm\"; position?: DropdownPosition };\n/** Shared table controls for a host-owned toolbar (`toolbar={false}`). */\nexport type TextEditorControls = {\n /** A table cell has focus in the formatted view. */\n tableActive: () => boolean;\n /** The shared cell menu behind a host-styled trigger; on phones it opens as a sheet. */\n TableMenu: (props: TableMenuTrigger) => JSX.Element;\n /** Formats the focused cell's selection; `false` when no cell has focus. */\n formatCell: (format: InlineFormat) => boolean;\n /** Shows a host message, such as a server's reason for a rejected table action, in the editor's notice. */\n notify: (message: string) => void;\n};\n\nconst toolbar = [\n [\"bold\", \"bold\"],\n [\"italic\", \"italic\"],\n [\"heading\", \"heading\"],\n [\"bulletList\", \"list\"],\n [\"orderedList\", \"list-numbers\"],\n [\"quote\", \"quote\"],\n [\"link\", \"link\"],\n [\"code\", \"code\"],\n [\"table\", \"table\"],\n [\"rule\", \"separator\"],\n] as const;\nconst actionIcons = {\n rowAbove: \"row-insert-top\",\n rowBelow: \"row-insert-bottom\",\n colLeft: \"column-insert-left\",\n colRight: \"column-insert-right\",\n alignLeft: \"align-left\",\n alignCenter: \"align-center\",\n alignRight: \"align-right\",\n deleteRow: \"row-remove\",\n deleteCol: \"column-remove\",\n moveRowUp: \"arrow-up\",\n moveRowDown: \"arrow-down\",\n moveColLeft: \"arrow-left\",\n moveColRight: \"arrow-right\",\n toggleHeader: \"table-row\",\n deleteTable: \"trash\",\n} as const;\ntype MenuScope = \"row\" | \"column\" | \"cell\";\nconst isInlineCommand = (command: string): command is Extract<InlineFormat, string> => inlineCommands.has(command);\nconst shortcuts: Partial<Record<keyof typeof commands, string>> = { bold: \"mod+b\", italic: \"mod+i\", link: \"mod+k\" };\nconst inlineCommands = new Set<string>([\"bold\", \"italic\", \"code\", \"link\", \"strike\"]);\n\n/** A Markdown text field with app-injected collaboration and a directly editable table view. */\nexport function TextEditor(props: TextEditorProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [mode, setMode] = createSignal<TextEditorMode>(props.mode ?? \"formatted\");\n const [ready, setReady] = createSignal(false);\n const [recovery, setRecovery] = createSignal<string>();\n const [notice, setNotice] = createSignal<{ message: string; images?: boolean }>();\n const [cell, setCell] = createSignal<HTMLElement>();\n const [localSource, setLocalSource] = createSignal(false);\n const [announcement, setAnnouncement] = createSignal(\"\");\n const [check, setCheck] = createSignal(false);\n const [missingSeparator, setMissingSeparator] = createSignal(false);\n const [active, setActive] = createSignal(false);\n const [documentRevision, setDocumentRevision] = createSignal(0);\n const [phoneMenu, setPhoneMenu] = createSignal(false);\n const [platform, setPlatform] = createSignal<KeyboardPlatform>(\"other\");\n /** What the open cell menu acts on: a row grip, a column grip, or the cell (right-click, keys, toolbar). */\n const [scope, setScope] = createSignal<MenuScope>(\"cell\");\n let grip: HTMLElement | undefined;\n createEffect(() => {\n const target = cell();\n const kind = scope();\n if (!target) return;\n if (kind === \"cell\") {\n target.setAttribute(\"data-active\", \"\");\n onCleanup(() => target.removeAttribute(\"data-active\"));\n return;\n }\n // A grip's menu marks its whole row or column, and the grip stays visible while the menu is open.\n const marked =\n kind === \"row\"\n ? [target.closest(\"tr\")]\n : [...(target.closest(\".k2b-ste-table\")?.querySelectorAll<HTMLElement>(`.k2b-ste-cell[data-c=\"${target.dataset.c}\"]`) ?? [])].map(\n (element) => element.parentElement,\n );\n const opener = grip;\n for (const element of marked) element?.setAttribute(\"data-marked\", \"\");\n opener?.setAttribute(\"data-open\", \"\");\n onCleanup(() => {\n for (const element of marked) element?.removeAttribute(\"data-marked\");\n opener?.removeAttribute(\"data-open\");\n });\n });\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n const text = recovery();\n if (text !== undefined) detachedRecovery(text);\n });\n // A local draft can outlive an island during navigation. Keep its recovery\n // surface in the shared dialog root so disposal never silently drops it.\n const detachedRecovery = (text: string) => {\n const language = locale();\n const labels = t();\n const beforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = \"\";\n };\n window.addEventListener(\"beforeunload\", beforeUnload);\n const show = () =>\n void dialogCore\n .open<\"discard\">(\n (close, context) => {\n context.setDismissHandler(() => {});\n return (\n <LocaleProvider locale={language}>\n <BottomSheet handle={false} onDismiss={() => {}}>\n <BottomSheet.Header title={labels.recoveredInput} />\n <BottomSheet.Body>\n <label class=\"k2b-ste-recovery-label\">\n {labels.recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={text} />\n </label>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button variant=\"ghost\" onClick={() => close(\"discard\")}>\n {labels.discardRecovery}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n );\n },\n { ...bottomSheetAdaptiveOptions, ariaLabel: labels.recoveredInput },\n )\n .then((result) => {\n if (result === \"discard\") window.removeEventListener(\"beforeunload\", beforeUnload);\n // The shared dialog root closes on each island disposal. Retain the\n // draft across subsequent navigation until the person explicitly discards it.\n else queueMicrotask(show);\n });\n show();\n };\n let menuOpen = false;\n let openCellMenu: ((anchor: DropdownAnchor, returnFocus?: () => HTMLElement | undefined) => void) | undefined;\n let closeCellMenu: (() => void) | undefined;\n let copyTrigger: HTMLButtonElement | undefined;\n const tableTriggers = new Set<HTMLButtonElement>();\n let frame = 0;\n const [menuPosition, setMenuPosition] = createSignal({ left: \"0px\", top: \"0px\" });\n let root!: HTMLDivElement;\n let mount!: HTMLDivElement;\n let editor: TextEditorController | undefined;\n const menuBlocked = () => !!props.loading || !ready() || recovery() !== undefined;\n const blocked = () => !!props.readOnly || menuBlocked();\n const updateCheck = () => {\n const issue =\n mode() === \"plain\"\n ? { extraCells: false, missingSeparator: false }\n : inspectTableStructure(editor?.view.state.doc.toString() ?? props.initialValue ?? \"\");\n const needsCheck = issue.extraCells || issue.missingSeparator;\n setMissingSeparator(issue.missingSeparator);\n setCheck(needsCheck);\n props.onTableCheck?.(needsCheck);\n };\n const positionMenu = () => {\n const target = cell();\n if (!target) return;\n const wrap = target.closest<HTMLElement>(\".k2b-ste-table\");\n const table = wrap?.querySelector(\"table\");\n if (!target.isConnected || !wrap || !table || mode() !== \"formatted\") {\n closeCellMenu?.();\n menuOpen = false;\n setCell(undefined);\n checkFocus();\n return;\n }\n // Only the read-only phone copy control sits below its table; every other menu opens beside its anchor.\n if (!props.readOnly) return;\n const bounds = root.getBoundingClientRect();\n setMenuPosition({\n left: `${wrap.getBoundingClientRect().left - bounds.left}px`,\n top: `${wrap.getBoundingClientRect().bottom - bounds.top - (window.matchMedia(\"(max-width: 47.999rem)\").matches ? 44 : 0)}px`,\n });\n };\n const schedulePosition = () => {\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n positionMenu();\n });\n };\n const unavailable = () => !!props.host?.structure && !props.host.structure.available();\n const actionDisabled = (action: MenuAction) => {\n documentRevision();\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n return blocked() || !editor || !wrap || !tableActionEnabled(editor.view, wrap, action);\n };\n const isMove = (action: MenuAction) => action.startsWith(\"move\");\n const runAction = (action: MenuAction) => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n const focused = document.activeElement;\n const menuElement = focused instanceof HTMLElement ? focused.closest<HTMLElement>('[role=\"menu\"]') : null;\n if (editor && wrap && !actionDisabled(action)) runMenuAction(editor.view, wrap, action);\n // The phone move sheet remains usable for another move. Local structural\n // focus belongs to the cell only after the menu has closed.\n if (isMove(action) && focused instanceof HTMLElement && menuElement) {\n const restore = () => {\n if (disposed || !menuElement.isConnected) return;\n const target =\n focused.isConnected && !focused.matches(\":disabled\")\n ? focused\n : menuElement.querySelector<HTMLElement>('[role^=\"menuitem\"]:not(:disabled)');\n target?.focus({ preventScroll: true });\n };\n restore();\n queueMicrotask(restore);\n }\n };\n const moveKeys: Partial<Record<MenuAction, string>> = {\n moveRowUp: \"alt+arrowup\",\n moveRowDown: \"alt+arrowdown\",\n moveColLeft: \"alt+arrowleft\",\n moveColRight: \"alt+arrowright\",\n };\n const shortActionLabels = {\n rowAbove: \"menuAbove\",\n rowBelow: \"menuBelow\",\n moveRowUp: \"menuUp\",\n moveRowDown: \"menuDown\",\n deleteRow: \"menuDelete\",\n colLeft: \"menuInsertLeft\",\n colRight: \"menuInsertRight\",\n moveColLeft: \"menuMoveLeft\",\n moveColRight: \"menuMoveRight\",\n deleteCol: \"menuDelete\",\n } as const;\n const menuRow = () => {\n documentRevision();\n return t().menuRow(Number(cell()?.dataset.r ?? 0));\n };\n const menuColumn = () => {\n documentRevision();\n const column = Number(cell()?.dataset.c ?? 0);\n const header = cell()?.closest(\".k2b-ste-table\")?.querySelector<HTMLElement>(`.k2b-ste-cell[data-r=\"0\"][data-c=\"${column}\"]`);\n return t().menuColumn(header?.dataset.raw || t().column(column + 1));\n };\n const menuHeading = (kind: MenuScope = scope()) =>\n kind === \"row\" ? menuRow() : kind === \"column\" ? menuColumn() : `${menuRow()} · ${menuColumn()}`;\n const actionItem = (\n action: keyof typeof actionIcons,\n choice?: Pick<DropdownChoice, \"choice\" | \"checked\" | \"class\" | \"ariaLabel\">,\n kind: MenuScope = \"cell\",\n ) =>\n ({\n get label() {\n // A grip's sheet has no row or column heading over its entries, so deleting keeps its full name.\n const short = phoneMenu() && action in shortActionLabels && !(kind !== \"cell\" && action.startsWith(\"delete\"));\n return short ? t()[shortActionLabels[action as keyof typeof shortActionLabels]] : t()[action];\n },\n icon: `ti ti-${actionIcons[action]}`,\n get disabled() {\n return actionDisabled(action);\n },\n immediate: true,\n trailing: moveKeys[action] ? <Kbd keys={moveKeys[action]!} /> : action === \"rowBelow\" ? <Kbd keys=\"enter\" /> : undefined,\n variant: action === \"deleteRow\" || action === \"deleteCol\" || action === \"deleteTable\" ? \"danger\" : undefined,\n closeOnSelect: !isMove(action),\n action: () => runAction(action),\n ...choice,\n }) satisfies DropdownAction;\n const [copying, setCopying] = createSignal(false);\n const tableCopy = clipboard.createWriter({\n write: ({ view, wrap, format }: { view: EditorView; wrap: HTMLElement; format: \"table\" | \"markdown\" }) => copyTable(view, wrap, format),\n });\n const copy = async (format: \"table\" | \"markdown\") => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (!editor || !wrap || copying()) return;\n setCopying(true);\n setNotice({ message: t().copyingTable });\n const success = await tableCopy.copy({ view: editor.view, wrap, format });\n if (disposed) return;\n setCopying(false);\n setNotice({ message: success ? (format === \"table\" ? t().copiedTable : t().copiedMarkdown) : t().copyFailed });\n };\n const copyItems = (): DropdownAction[] => [\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuCopy : t().copyTable;\n },\n icon: \"ti ti-copy\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"table\");\n },\n },\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuMarkdown : t().copyMarkdown;\n },\n icon: \"ti ti-markdown\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"markdown\");\n },\n },\n ];\n /** The row grip shows row and table actions, the column grip column, alignment and table actions; the rest everything. */\n const items = (kind: MenuScope): DropdownItem[] => {\n if (props.readOnly) return copyItems();\n const align = () => {\n documentRevision();\n return cell()?.parentElement?.style.textAlign || \"left\";\n };\n const row: DropdownItem[] = [\n {\n get sectionLabel() {\n return kind === \"cell\" ? menuRow() : undefined;\n },\n items: ([\"rowAbove\", \"rowBelow\", \"moveRowUp\", \"moveRowDown\", \"deleteRow\"] as const).map((action) =>\n actionItem(action, undefined, kind),\n ),\n },\n ];\n const column: DropdownItem[] = [\n {\n get sectionLabel() {\n return kind === \"cell\" ? menuColumn() : undefined;\n },\n items: ([\"colLeft\", \"colRight\", \"moveColLeft\", \"moveColRight\"] as const).map((action) => actionItem(action)),\n },\n {\n sectionLabel: t().alignment,\n layout: \"row\",\n items: ([\"alignLeft\", \"alignCenter\", \"alignRight\"] as const).map((action, index) =>\n actionItem(action, {\n choice: \"radio\",\n class: \"k2b-ste-align-choice\",\n ariaLabel: t()[action],\n checked: () => align() === [\"left\", \"center\", \"right\"][index],\n }),\n ),\n },\n { items: [actionItem(\"deleteCol\", undefined, kind)] },\n ];\n return [\n {\n get sectionLabel() {\n return menuHeading(kind);\n },\n items: [],\n },\n ...(kind === \"column\" ? [] : row),\n ...(kind === \"row\" ? [] : column),\n {\n sectionLabel: t().table,\n items: [\n actionItem(\"toggleHeader\", {\n choice: \"checkbox\",\n class: \"k2b-ste-header-choice\",\n checked: () => {\n documentRevision();\n return cell()?.closest<HTMLElement>(\".k2b-ste-table\")?.dataset.header === \"true\";\n },\n }),\n {\n label: t().editMarkdown,\n icon: \"ti ti-markdown\",\n action: () => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (editor && wrap) editTableSource(editor.view, wrap);\n },\n },\n ...copyItems(),\n actionItem(\"deleteTable\"),\n ...(unavailable() ? [{ label: t().structureUnavailable, disabled: true as const }] : []),\n ],\n },\n ];\n };\n const preserveSelection = (event: MouseEvent) => event.preventDefault();\n const menuChange = (open: boolean) => {\n menuOpen = open;\n };\n // A press beside an open table menu only closes it: no cell takes focus, no\n // text is selected and no column is marked. The menu's light dismiss closes it.\n let tableMenuOpen = false;\n const tableMenuChange = (open: boolean) => {\n menuOpen = open;\n tableMenuOpen = open && !phoneMenu();\n };\n let swallow: AbortController | undefined;\n const pressBesideMenu = (event: PointerEvent) => {\n swallow?.abort();\n if (!tableMenuOpen || (event.target instanceof Element && event.target.closest(\".k2b-ste-table-menu\"))) return;\n event.stopPropagation();\n const current = new AbortController();\n swallow = current;\n const block = (blocked: Event) => {\n blocked.preventDefault();\n blocked.stopPropagation();\n if (blocked.type === \"click\" || blocked.type === \"contextmenu\") current.abort();\n };\n for (const type of [\"mousedown\", \"mouseup\", \"click\", \"contextmenu\"])\n document.addEventListener(type, block, { capture: true, signal: current.signal });\n // Only this press is swallowed: its click follows the release in the same task, and a cancelled press never\n // clicks. A key other than a modifier, which may come with the press, starts new input.\n const end = () => current.abort();\n document.addEventListener(\"pointerup\", () => setTimeout(end), { capture: true, once: true, signal: current.signal });\n document.addEventListener(\"pointercancel\", end, { capture: true, once: true, signal: current.signal });\n document.addEventListener(\n \"keydown\",\n (key) => {\n if (![\"Shift\", \"Control\", \"Alt\", \"Meta\"].includes(key.key)) end();\n },\n { capture: true, signal: current.signal },\n );\n };\n const menuClose = () => {\n menuOpen = false;\n tableMenuOpen = false;\n setScope(\"cell\");\n grip = undefined;\n schedulePosition();\n queueMicrotask(() => {\n if (disposed) return;\n const focused = document.activeElement;\n if (focused instanceof HTMLElement && focused.matches(\".k2b-ste-copy-menu, .k2b-ste-table-tool\")) cell()?.focus();\n checkFocus();\n });\n };\n const sheetTop = (kind: () => MenuScope) =>\n props.readOnly\n ? undefined\n : (close: () => void) => (\n <div class=\"k2b-ste-table-sheet-heading\">\n <span title={menuHeading(kind())}>{menuHeading(kind())}</span>\n <Button variant=\"ghost\" onClick={close}>\n {t().done}\n </Button>\n </div>\n );\n const menuLabel = () => (props.readOnly ? t().copyTable : t().tableMenu);\n const menuDisabled = () => menuBlocked() || localSource() || !cell()?.isConnected;\n // A sheet owns its item inventory until it closes. Replace that owner when\n // edit access changes so an already open sheet cannot retain edit entries.\n /** The toolbar's table button: the whole menu for the focused cell. */\n const menu = (trigger?: TableMenuTrigger) => (\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items(\"cell\")}\n phone=\"sheet\"\n sheetTop={sheetTop(() => \"cell\")}\n menuClass=\"k2b-ste-table-menu\"\n position={trigger?.position ?? \"bottom-right\"}\n width=\"18rem\"\n label={menuLabel()}\n disabled={menuDisabled()}\n onOpenChange={tableMenuChange}\n onClose={menuClose}\n >\n <Dropdown.Trigger\n ref={(element) => {\n tableTriggers.add(element);\n onCleanup(() => tableTriggers.delete(element));\n }}\n class={`k2b-ste-tool k2b-ste-table-tool ${trigger?.class ?? \"\"}`}\n variant=\"ghost\"\n size={trigger?.size ?? \"sm\"}\n iconOnly={!trigger?.text}\n label={trigger?.text ?? t().tableMenu}\n aria-pressed={true}\n onMouseDown={preserveSelection}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n {trigger?.text}\n <Show when={trigger?.text}>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown>\n )}\n </Show>\n );\n /** Grips, right-click and Shift+F10 open this menu beside its anchor; it has no button of its own. */\n const cellMenu = () => (\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items(scope())}\n phone=\"sheet\"\n sheetTop={sheetTop(scope)}\n menuClass=\"k2b-ste-table-menu\"\n position=\"bottom-right\"\n width=\"18rem\"\n label={menuLabel()}\n disabled={menuDisabled()}\n onOpenChange={tableMenuChange}\n onClose={menuClose}\n openAt={(open) => {\n openCellMenu = open;\n }}\n closeWith={(close) => {\n closeCellMenu = close;\n }}\n >\n {/* Phones have no right-click: a read-only table keeps a visible copy control below it. */}\n <Show when={props.readOnly && cell() && mode() === \"formatted\" && !menuBlocked()}>\n <Dropdown.Trigger\n ref={(element) => {\n copyTrigger = element;\n }}\n class=\"k2b-ste-copy-menu\"\n variant=\"ghost\"\n size=\"sm\"\n label={t().copyTable}\n onMouseDown={preserveSelection}\n >\n <i class=\"ti ti-copy\" aria-hidden=\"true\" />\n {t().copyTable}\n </Dropdown.Trigger>\n </Show>\n </Dropdown>\n )}\n </Show>\n );\n const runFormat = (command: keyof typeof commands) => {\n if (!editor || blocked()) return;\n if (cell()?.isConnected && isInlineCommand(command) && formatActiveCell(editor.view, command)) return;\n commands[command](editor.view);\n };\n const checkFocus = () => {\n if (disposed) return;\n // A host toolbar sits outside this root. Native popover focus moves before\n // its toggle callback, but Dropdown already exposes its synchronous state.\n if (\n menuOpen ||\n [...tableTriggers, copyTrigger].some((trigger) => trigger?.isConnected && trigger.getAttribute(\"aria-expanded\") === \"true\")\n )\n return;\n const focused = document.activeElement;\n setLocalSource(focused instanceof HTMLElement && !!focused.closest(\".k2b-ste-table-source\"));\n const inside = focused instanceof Node && root.contains(focused);\n setActive(inside);\n if (!inside || focused === editor?.view.contentDOM) setCell(undefined);\n else if (!cell()?.isConnected) setCell(undefined);\n };\n const formatMenu = (command: \"heading\" | \"code\") => (\n <Dropdown\n phone=\"sheet\"\n label={t()[command]}\n disabled={blocked() || (command === \"heading\" && !!cell())}\n onOpenChange={menuChange}\n onClose={menuClose}\n items={\n command === \"heading\"\n ? [\n {\n items: ([\"heading1\", \"heading2\", \"heading3\"] as const).map((name, index) => ({\n label: t()[name],\n icon: `ti ti-h-${index + 1}`,\n action: () => runFormat(name),\n })),\n },\n ]\n : [\n { label: t().inlineCode, icon: \"ti ti-code\", action: () => runFormat(\"code\") },\n { label: t().codeBlock, icon: \"ti ti-source-code\", disabled: !!cell(), action: () => runFormat(\"codeBlock\") },\n { label: t().strike, icon: \"ti ti-strikethrough\", trailing: <Kbd keys=\"mod+shift+x\" />, action: () => runFormat(\"strike\") },\n ]\n }\n >\n <Dropdown.Trigger class=\"k2b-ste-tool\" variant=\"ghost\" size=\"sm\" iconOnly label={t()[command]} onMouseDown={preserveSelection}>\n <i class={`ti ti-${command}`} aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown>\n );\n const selectMode = (next: TextEditorMode) => {\n const restoreEditorFocus = !!editor?.view.contentDOM.contains(document.activeElement);\n menuOpen = false;\n setCell(undefined);\n setMode(next);\n props.onModeChange?.(next);\n if (restoreEditorFocus) queueMicrotask(() => editor?.view.focus());\n };\n onMount(() => {\n setPlatform(keyboardPlatform());\n const menuMedia = window.matchMedia(\"(max-width: 47.999rem)\");\n const menuViewport = () => setPhoneMenu(menuMedia.matches);\n menuViewport();\n menuMedia.addEventListener(\"change\", menuViewport);\n onCleanup(() => menuMedia.removeEventListener(\"change\", menuViewport));\n // A standalone editor has no binding history; collaboration supplies its own instead.\n const nativeHistory = !props.host?.undo;\n editor = createTextEditor({\n parent: mount,\n doc: props.initialValue,\n mode: mode(),\n label: props.label,\n readOnly: props.readOnly,\n placeholder: props.placeholder,\n presentation: props.presentation,\n extensions: [\n nativeHistory ? [history(), keymap.of(historyKeymap)] : [],\n formatLabels.of({\n get link() {\n return t().link;\n },\n column: (column) => t().column(column),\n }),\n EditorView.updateListener.of((update) => {\n schedulePosition();\n if (update.docChanged) queueMicrotask(() => setDocumentRevision((revision) => revision + 1));\n }),\n props.extensions ?? [],\n ],\n host: {\n ...props.host,\n undo: props.host?.undo ?? (() => editor && undo(editor.view)),\n redo: props.host?.redo ?? (() => editor && redo(editor.view)),\n boundary: props.host?.boundary ?? (() => {}),\n cellLabel: (row, column, name) => t().cellLabel({ row, column, name }),\n actionLabel: (name) => t()[name],\n sourceLabels: () => ({\n edit: t().editMarkdown,\n valid: t().markdownValid,\n invalid: t().markdownInvalid,\n changed: t().markdownChanged,\n structural: t().markdownStructural,\n applying: t().applyingTable,\n applyFailed: t().markdownApplyFailed,\n done: phoneMenu() ? t().done : t().showTable,\n discard: t().discardMarkdown,\n continue: t().continueMarkdown,\n line: t().markdownLine,\n separator: (header, separator) => t().markdownSeparator({ header, separator }),\n extra: t().markdownExtra,\n complete: t().completeColumns,\n }),\n maxLength: props.maxLength,\n maxPasteCells: props.maxPasteCells ?? 2000,\n onRecovery: (text) => {\n if (disposed) detachedRecovery(text);\n else setRecovery((previous) => (previous === undefined ? text : `${previous}\\n\\n${text}`));\n },\n onError: (code) => setNotice({ message: t()[code] }),\n },\n onChange: (text) => {\n props.onChange?.(text);\n queueMicrotask(updateCheck);\n },\n onDroppedImages: (count, files) => {\n if (props.onDroppedImages?.(count, files) !== true) setNotice({ message: t().imageHint, images: true });\n },\n });\n const focus = (event: Event) => {\n if (!(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n setActive(true);\n setCell(event.detail.cell);\n positionMenu();\n };\n const structureAnnouncement = (event: Event) => {\n if (!(event instanceof CustomEvent)) return;\n const detail: unknown = event.detail;\n if (\n detail &&\n typeof detail === \"object\" &&\n \"rows\" in detail &&\n \"columns\" in detail &&\n typeof detail.rows === \"number\" &&\n typeof detail.columns === \"number\"\n )\n setAnnouncement(t().tableChanged({ rows: detail.rows, columns: detail.columns }));\n };\n const focusChange = () => queueMicrotask(checkFocus);\n let pointerCheck: ReturnType<typeof setTimeout> | undefined;\n const pointer = (event: PointerEvent) => {\n if (event.target instanceof Node && root.contains(event.target)) setActive(true);\n // After the press moved focus: a host toolbar control that keeps focus in the cell keeps it active.\n else if (!menuOpen) {\n clearTimeout(pointerCheck);\n pointerCheck = setTimeout(checkFocus);\n }\n };\n // A grip opens its row's or column's menu below itself; right-click opens\n // at the pointer and a key below the cell. Focus returns to the cell.\n const keyboardMenu = (event: Event) => {\n if (menuBlocked() || menuOpen || !(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n const target: HTMLElement = event.detail.cell;\n const opener = event.detail.anchor instanceof HTMLElement ? event.detail.anchor : undefined;\n const kind: MenuScope = event.detail.scope === \"row\" || event.detail.scope === \"column\" ? event.detail.scope : \"cell\";\n const { x, y } = event.detail;\n let anchor: DropdownAnchor = opener ?? target;\n if (!opener && typeof x === \"number\" && typeof y === \"number\") {\n // Keep the pointer's place inside the cell, so the menu follows it while the page scrolls.\n const start = target.getBoundingClientRect();\n anchor = {\n getBoundingClientRect: () => {\n const box = target.getBoundingClientRect();\n const left = box.left + x - start.left;\n const top = box.top + y - start.top;\n return { left, top, right: left, bottom: top };\n },\n };\n }\n grip = opener;\n setScope(kind);\n focus(event);\n // Focus returns to the menu's cell as it closes; moving a row or column moves that cell.\n queueMicrotask(() => {\n if (!disposed && cell()?.isConnected) openCellMenu?.(anchor, () => cell());\n });\n };\n const mutations = new MutationObserver(schedulePosition);\n mutations.observe(mount, { childList: true, subtree: true, characterData: true });\n const resize = new ResizeObserver(schedulePosition);\n resize.observe(mount);\n // Safari blurs a contenteditable on mouse-down without focusing the radio.\n // Keep the caret and phone toolbar stationary until the view switch runs.\n const viewMouseDown = (event: MouseEvent) => {\n if (event.target instanceof Element && event.target.closest(\".k2b-ste-views\")) event.preventDefault();\n };\n root.addEventListener(\"mousedown\", viewMouseDown);\n document.addEventListener(\"focusin\", focusChange);\n document.addEventListener(\"pointerdown\", pointer);\n document.addEventListener(\"pointerdown\", pressBesideMenu, true);\n root.addEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.addEventListener(\"k2b-ste-cell-focus\", focus);\n root.addEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.addEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.addEventListener(\"scroll\", schedulePosition, true);\n window.addEventListener(\"resize\", schedulePosition);\n const viewport = window.visualViewport;\n const keyboard = () =>\n root.style.setProperty(\n \"--k2b-ste-keyboard\",\n `${Math.max(0, window.innerHeight - (viewport?.height ?? window.innerHeight) - (viewport?.offsetTop ?? 0))}px`,\n );\n viewport?.addEventListener(\"resize\", keyboard);\n viewport?.addEventListener(\"scroll\", keyboard);\n keyboard();\n setReady(true);\n updateCheck();\n props.onReady?.(editor, {\n tableActive: () => mode() === \"formatted\" && !!cell()?.isConnected,\n TableMenu: (trigger) => menu(trigger),\n formatCell: (format) => !!editor && !blocked() && !!cell()?.isConnected && formatActiveCell(editor.view, format),\n notify: (message) => setNotice({ message }),\n });\n onCleanup(() => {\n clearTimeout(pointerCheck);\n mutations.disconnect();\n resize.disconnect();\n cancelAnimationFrame(frame);\n root.removeEventListener(\"mousedown\", viewMouseDown);\n document.removeEventListener(\"focusin\", focusChange);\n document.removeEventListener(\"pointerdown\", pointer);\n document.removeEventListener(\"pointerdown\", pressBesideMenu, true);\n swallow?.abort();\n root.removeEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.removeEventListener(\"k2b-ste-cell-focus\", focus);\n root.removeEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.removeEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.removeEventListener(\"scroll\", schedulePosition, true);\n window.removeEventListener(\"resize\", schedulePosition);\n viewport?.removeEventListener(\"resize\", keyboard);\n viewport?.removeEventListener(\"scroll\", keyboard);\n editor?.destroy();\n });\n });\n createEffect(() => {\n if (props.mode !== undefined) setMode(props.mode);\n });\n createEffect(() => {\n if (ready()) {\n const next = mode();\n // Rendering the grid consults reactive host availability. Those reads\n // must not turn a history notification into a nested mode reconfigure.\n untrack(() => {\n menuOpen = false;\n setCell(undefined);\n editor?.setMode(next);\n updateCheck();\n });\n }\n });\n createEffect(() => {\n const label = props.label;\n if (ready()) untrack(() => editor?.setLabel(label));\n });\n createEffect(() => {\n const readOnly = !!props.readOnly || !!props.loading || recovery() !== undefined;\n if (ready()) untrack(() => editor?.setReadOnly(readOnly));\n });\n createEffect(() => {\n documentRevision();\n const disabled = blocked() || unavailable();\n if (ready())\n root.querySelectorAll<HTMLButtonElement>(\".k2b-ste-addColumn\").forEach((button) => {\n button.disabled = disabled;\n });\n });\n return (\n <div\n ref={root}\n class={`k2b-text-editor ${props.class ?? \"\"}`}\n data-mode={mode()}\n data-readonly={props.readOnly ? \"true\" : undefined}\n data-active={active() ? \"true\" : undefined}\n aria-busy={props.loading || !ready()}\n >\n <span class=\"k2b-ste-announcement\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement()}\n </span>\n <Show when={!props.presentation || \"status\" in props || check()}>\n <div class=\"k2b-ste-status\" role=\"status\">\n <span>{props.status}</span>\n <Show when={check()}>\n <span class=\"k2b-ste-check\" title={missingSeparator() ? t().checkSeparatorDetail : t().checkTableDetail}>\n <i class=\"ti ti-alert-triangle\" aria-hidden=\"true\" />\n {t().checkTable}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={blocked() || (!missingSeparator() && unavailable())}\n hidden={props.readOnly}\n tooltip={missingSeparator() ? t().checkSeparatorDetail : unavailable() ? t().structureUnavailable : t().checkTableDetail}\n onMouseDown={preserveSelection}\n onClick={() => {\n if (!editor) return;\n if (missingSeparator()) {\n selectMode(\"source\");\n queueMicrotask(() => editor?.view.focus());\n return;\n }\n const table = findTables(editor.view.state.doc.toString()).find((table) =>\n table.lines.some((row) => row.cells.length > table.columns),\n );\n if (table) runTableAction(editor.view, table.from, 0, 0, \"completeColumns\");\n }}\n >\n {missingSeparator() ? t().reviewMarkdown : t().completeColumns}\n </Button>\n </Show>\n </div>\n </Show>\n <Show when={!props.readOnly && mode() !== \"plain\" && props.toolbar !== false}>\n <div class=\"k2b-ste-toolbar-slot\">\n <Toolbar class=\"k2b-ste-toolbar\" label={t().formatting}>\n <For each={[toolbar.slice(0, 3), toolbar.slice(3, 6), toolbar.slice(6)]}>\n {(group) => (\n <Toolbar.Group class=\"k2b-ste-tool-group\">\n <For each={group}>\n {([command, icon]) =>\n command === \"heading\" || command === \"code\" ? (\n formatMenu(command)\n ) : (\n <Show\n when={command === \"table\" && mode() === \"formatted\" && cell()?.isConnected}\n fallback={\n <IconButton\n class=\"k2b-ste-tool\"\n variant=\"ghost\"\n size=\"sm\"\n label={t()[command]}\n tooltip={\n shortcuts[command]\n ? `${t()[command]} (${formatShortcut(shortcuts[command] ?? \"\", { platform: platform(), locale: locale() }).label})`\n : t()[command]\n }\n disabled={blocked() || (!!cell() && !inlineCommands.has(command) && command !== \"table\")}\n onMouseDown={preserveSelection}\n onClick={() => runFormat(command)}\n >\n <i class={`ti ti-${icon}`} aria-hidden=\"true\" />\n </IconButton>\n }\n >\n {menu()}\n </Show>\n )\n }\n </For>\n </Toolbar.Group>\n )}\n </For>\n <SegmentedControl\n class=\"k2b-ste-views\"\n size=\"sm\"\n ariaLabel={t().view}\n value={mode() === \"source\" ? \"source\" : \"formatted\"}\n options={[\n { value: \"formatted\", label: t().formatted, icon: \"ti ti-typography\" },\n { value: \"source\", label: t().source, icon: \"ti ti-markdown\" },\n ]}\n onValueChange={selectMode}\n />\n </Toolbar>\n </div>\n </Show>\n <Show when={props.loading || !ready()}>\n <div class=\"k2b-ste-loading\" role=\"status\" aria-label={t().loading}>\n <For each={[82, 100, 68, 0, 96, 74]}>\n {(width) => (\n <div>\n <span style={{ width: `${width}%` }} />\n </div>\n )}\n </For>\n </div>\n </Show>\n <div ref={mount} class={props.presentation ? \"k2b-ste-app-host\" : \"k2b-ste-host\"} hidden={props.loading || !ready()} />\n <div class=\"k2b-ste-floating-menu\" style={menuPosition()}>\n {cellMenu()}\n </div>\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <Show when={notice() || recovery() !== undefined}>\n <div class=\"k2b-ste-notice\">\n <div class=\"k2b-ste-notice-content\">\n <Show when={notice()}>\n <Show when={notice()?.images && props.onAttachImages} fallback={<span>{notice()?.message}</span>}>\n <Button size=\"sm\" variant=\"ghost\" disabled={blocked()} onClick={() => props.onAttachImages?.()}>\n {notice()?.message}\n </Button>\n </Show>\n </Show>\n <Show when={recovery() !== undefined}>\n <label class=\"k2b-ste-recovery-label\">\n {t().recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={recovery()} />\n </label>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setRecovery(undefined);\n if (notice()?.message === t().cellRemoved) setNotice(undefined);\n }}\n >\n {t().discardRecovery}\n </Button>\n </Show>\n </div>\n <Show when={notice()}>\n <IconButton size=\"sm\" variant=\"ghost\" label={t().dismiss} onClick={() => setNotice(undefined)}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -189,21 +189,42 @@ const hasHeader = t => t.lines[0].cells.some(cell => cell.text.length > 0);
|
|
|
189
189
|
const firstRow = t => hasHeader(t) ? 0 : 1;
|
|
190
190
|
const shapeOf = t => `${T.rowCount(t)}x${width(t)}:${firstRow(t)}`;
|
|
191
191
|
const renderedDocuments = new WeakMap();
|
|
192
|
+
/**
|
|
193
|
+
* How far the grid may reach left of the text: its grip gutter and the first
|
|
194
|
+
* cell's padding sit there, so cell text lines up with the paragraphs. It
|
|
195
|
+
* never reaches past the first ancestor that clips, which would cut the grips.
|
|
196
|
+
*/
|
|
197
|
+
const bleed = (view, wrap) => {
|
|
198
|
+
const content = view.contentDOM;
|
|
199
|
+
const line = content.querySelector(".cm-line");
|
|
200
|
+
const cell = wrap.querySelector(".k2b-ste-cell");
|
|
201
|
+
const wanted = Number.parseFloat(getComputedStyle(wrap).paddingLeft) + (cell ? Number.parseFloat(getComputedStyle(cell).paddingLeft) : 0) - (line ? Number.parseFloat(getComputedStyle(line).paddingLeft) : 0);
|
|
202
|
+
const start = content.getBoundingClientRect().left + Number.parseFloat(getComputedStyle(content).paddingLeft);
|
|
203
|
+
let limit = 0;
|
|
204
|
+
for (let element = content.parentElement; element; element = element.parentElement) if (getComputedStyle(element).overflowX !== "visible") {
|
|
205
|
+
limit = element.getBoundingClientRect().left + element.clientLeft;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
return Math.max(0, Math.min(wanted, Math.floor(start - limit)));
|
|
209
|
+
};
|
|
192
210
|
const measureScroll = (view, wrap) => view.requestMeasure({
|
|
193
211
|
key: wrap,
|
|
194
212
|
read: () => ({
|
|
195
213
|
left: wrap.scrollLeft,
|
|
196
214
|
width: wrap.clientWidth,
|
|
197
|
-
total: wrap.scrollWidth
|
|
215
|
+
total: wrap.scrollWidth,
|
|
216
|
+
bleed: bleed(view, wrap)
|
|
198
217
|
}),
|
|
199
218
|
write: ({
|
|
200
219
|
left,
|
|
201
220
|
width,
|
|
202
|
-
total
|
|
221
|
+
total,
|
|
222
|
+
bleed
|
|
203
223
|
}) => {
|
|
204
224
|
if (!wrap.isConnected) return;
|
|
205
225
|
wrap.toggleAttribute("data-scrolled", left > 0);
|
|
206
226
|
wrap.toggleAttribute("data-more", left + width < total - 1);
|
|
227
|
+
wrap.style.setProperty("--k2b-ste-bleed", `${bleed}px`);
|
|
207
228
|
}
|
|
208
229
|
});
|
|
209
230
|
class GridWidget extends WidgetType {
|
|
@@ -645,20 +666,25 @@ const buildGrid = (view, t, wrap) => {
|
|
|
645
666
|
cell.spellcheck = true;
|
|
646
667
|
cell.tabIndex = -1;
|
|
647
668
|
cell.setAttribute("role", "textbox");
|
|
669
|
+
// The cell menu has no button; screen readers announce its key.
|
|
670
|
+
cell.setAttribute("aria-keyshortcuts", "Shift+F10");
|
|
648
671
|
cell.setAttribute("aria-label", view.state.facet(tableHost)?.cellLabel(r, c, T.displayCell(grid[0]?.[c] ?? "")) ?? `${r + 1}, ${c + 1}`);
|
|
649
672
|
if (r === 1 && c === 0 && !raw) cell.dataset.placeholder = view.state.facet(tableHost)?.actionLabel?.("emptyCell") ?? "Type or paste cells";
|
|
650
673
|
renderCell(view, cell, raw, t, r, c);
|
|
651
674
|
wire(view, cell, wrap);
|
|
652
675
|
td.setAttribute("role", r === 0 ? "columnheader" : "gridcell");
|
|
653
676
|
td.append(cell);
|
|
677
|
+
// Grips sit in the gutters outside the grid and stay out of the Tab order; Shift+F10 is the key path.
|
|
654
678
|
const grip = kind => {
|
|
655
679
|
const button = document.createElement("button");
|
|
656
680
|
button.type = "button";
|
|
657
681
|
button.tabIndex = -1;
|
|
658
682
|
button.className = `k2b-ste-grip k2b-ste-${kind}`;
|
|
683
|
+
button.dataset.c = String(c);
|
|
659
684
|
button.setAttribute("aria-label", view.state.facet(tableHost)?.actionLabel?.(kind) ?? (kind === "rowMenu" ? "Row menu" : "Column menu"));
|
|
660
685
|
button.setAttribute("aria-haspopup", "menu");
|
|
661
|
-
|
|
686
|
+
// Full icon names: icon subsets keep only the names that appear in the bundle.
|
|
687
|
+
button.innerHTML = `<i class="ti ${kind === "rowMenu" ? "ti-grip-vertical" : "ti-grip-horizontal"}" aria-hidden="true"></i>`;
|
|
662
688
|
button.onmousedown = event => event.preventDefault();
|
|
663
689
|
button.onclick = () => {
|
|
664
690
|
cell.focus({
|
|
@@ -668,7 +694,8 @@ const buildGrid = (view, t, wrap) => {
|
|
|
668
694
|
bubbles: true,
|
|
669
695
|
detail: {
|
|
670
696
|
cell,
|
|
671
|
-
anchor: button
|
|
697
|
+
anchor: button,
|
|
698
|
+
scope: kind === "rowMenu" ? "row" : "column"
|
|
672
699
|
}
|
|
673
700
|
}));
|
|
674
701
|
};
|
|
@@ -692,8 +719,9 @@ const buildGrid = (view, t, wrap) => {
|
|
|
692
719
|
button.type = "button";
|
|
693
720
|
button.className = `k2b-ste-${action}`;
|
|
694
721
|
const label = view.state.facet(tableHost)?.actionLabel?.(action) ?? (action === "addRow" ? "Row" : "Column");
|
|
695
|
-
button.
|
|
696
|
-
if (action === "
|
|
722
|
+
button.innerHTML = '<i class="ti ti-plus" aria-hidden="true"></i>';
|
|
723
|
+
if (action === "addRow") button.append(label);
|
|
724
|
+
button.setAttribute("aria-label", action === "addRow" ? `+ ${label}` : label);
|
|
697
725
|
button.onmousedown = event => event.preventDefault();
|
|
698
726
|
button.onclick = () => {
|
|
699
727
|
const current = currentTable(view, wrap);
|
|
@@ -1257,6 +1285,8 @@ const wire = (view, el, wrap) => {
|
|
|
1257
1285
|
wrap.querySelectorAll(".k2b-ste-cell").forEach(cell => cell.tabIndex = cell === el ? 0 : -1);
|
|
1258
1286
|
wrap.dataset.activeR = el.dataset.r;
|
|
1259
1287
|
wrap.dataset.activeC = el.dataset.c;
|
|
1288
|
+
// Without hover, a phone shows the grips of the focused cell's row and column.
|
|
1289
|
+
wrap.querySelectorAll(".k2b-ste-columnMenu").forEach(grip => grip.toggleAttribute("data-current", grip.dataset.c === el.dataset.c));
|
|
1260
1290
|
if (view.state.readOnly) {
|
|
1261
1291
|
// A read-only cell selects rendered text; it never enters source editing.
|
|
1262
1292
|
// Keyboard entry may have prepared editable text before focusing it.
|
|
@@ -1319,6 +1349,7 @@ const wire = (view, el, wrap) => {
|
|
|
1319
1349
|
if (table && !view.state.readOnly && el.dataset.editing !== "1") renderCell(view, el, el.dataset.raw ?? "", table, Number(el.dataset.r), Number(el.dataset.c));
|
|
1320
1350
|
if (!wrap.contains(focused)) {
|
|
1321
1351
|
delete wrap.dataset.activeR;
|
|
1352
|
+
wrap.querySelectorAll(".k2b-ste-columnMenu[data-current]").forEach(grip => delete grip.dataset.current);
|
|
1322
1353
|
wrap.dispatchEvent(new CustomEvent("k2b-ste-cell-blur", {
|
|
1323
1354
|
bubbles: true
|
|
1324
1355
|
}));
|
|
@@ -1741,8 +1772,14 @@ export const tableGrid = () => [clipboardLoading(view => view.state.facet(tableH
|
|
|
1741
1772
|
if (el) queueCellSelection(view, el);
|
|
1742
1773
|
};
|
|
1743
1774
|
view.dom.ownerDocument.addEventListener("selectionchange", selection);
|
|
1775
|
+
// The editor's width decides how far grids may reach beside the text and whether more columns follow.
|
|
1776
|
+
const resize = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(() => {
|
|
1777
|
+
for (const wrap of view.contentDOM.querySelectorAll(".k2b-ste-table")) measureScroll(view, wrap);
|
|
1778
|
+
});
|
|
1779
|
+
resize?.observe(view.dom);
|
|
1744
1780
|
return {
|
|
1745
1781
|
destroy() {
|
|
1782
|
+
resize?.disconnect();
|
|
1746
1783
|
pendingContextMenus.get(view)?.abort();
|
|
1747
1784
|
pendingContextMenus.delete(view);
|
|
1748
1785
|
view.dom.ownerDocument.removeEventListener("selectionchange", selection);
|