83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
import type { Editor } from "@tiptap/react"
|
|
import type {
|
|
DocsTableBorder,
|
|
DocsTableCellVerticalAlign,
|
|
} from "@/lib/drive/docs-table-types"
|
|
|
|
export function docsDefaultTableBorder(color = "#000000"): DocsTableBorder {
|
|
return { size: 8, style: "single", color }
|
|
}
|
|
|
|
export function docsTableActive(editor: Editor | null): boolean {
|
|
if (!editor) return false
|
|
return editor.isActive("table")
|
|
}
|
|
|
|
export function docsTableCanMerge(editor: Editor | null): boolean {
|
|
if (!editor) return false
|
|
return editor.can().mergeCells()
|
|
}
|
|
|
|
export function docsTableCanSplit(editor: Editor | null): boolean {
|
|
if (!editor) return false
|
|
return editor.can().splitCell()
|
|
}
|
|
|
|
export function docsSetTableCellBackground(editor: Editor | null, color: string | null) {
|
|
editor?.chain().focus().setCellAttribute("backgroundColor", color || null).run()
|
|
}
|
|
|
|
export function docsSetTableCellVerticalAlign(
|
|
editor: Editor | null,
|
|
verticalAlign: DocsTableCellVerticalAlign | null
|
|
) {
|
|
editor?.chain().focus().setCellAttribute("verticalAlign", verticalAlign).run()
|
|
}
|
|
|
|
export function docsSetTableCellBorder(
|
|
editor: Editor | null,
|
|
side: "borderTop" | "borderRight" | "borderBottom" | "borderLeft",
|
|
border: DocsTableBorder | string | null
|
|
) {
|
|
editor?.chain().focus().setCellAttribute(side, border).run()
|
|
}
|
|
|
|
export function docsSetTableCellBordersAll(
|
|
editor: Editor | null,
|
|
border: DocsTableBorder | string | null
|
|
) {
|
|
if (!editor) return
|
|
editor
|
|
.chain()
|
|
.focus()
|
|
.setCellAttribute("borderTop", border)
|
|
.setCellAttribute("borderRight", border)
|
|
.setCellAttribute("borderBottom", border)
|
|
.setCellAttribute("borderLeft", border)
|
|
.run()
|
|
}
|
|
|
|
export function docsClearTableCellBorders(editor: Editor | null) {
|
|
docsSetTableCellBordersAll(editor, null)
|
|
}
|
|
|
|
export function docsSetTableRowHeight(editor: Editor | null, rowHeight: string | null) {
|
|
if (!editor || !editor.isActive("table")) return
|
|
editor.chain().focus().updateAttributes("tableRow", { rowHeight }).run()
|
|
}
|
|
|
|
export function docsSetTableAlignment(
|
|
editor: Editor | null,
|
|
alignment: "left" | "center" | "right" | null
|
|
) {
|
|
if (!editor || !editor.isActive("table")) return
|
|
editor.chain().focus().updateAttributes("table", { alignment }).run()
|
|
}
|
|
|
|
export function docsDistributeTableColumns(editor: Editor | null) {
|
|
if (!editor || !editor.isActive("table")) return
|
|
const table = editor.getAttributes("table")
|
|
if (!table) return
|
|
editor.commands.fixTables()
|
|
}
|