import type { DocsTableBorder } from "@/lib/drive/docs-table-types" const BORDER_STYLE_MAP: Record = { single: "solid", dashed: "dashed", dotted: "dotted", double: "double", dotDash: "dashed", dotDotDash: "dotted", none: "none", nil: "none", } export function docsTableBorderToCss(border: DocsTableBorder | string | null | undefined): string | null { if (!border) return null if (typeof border === "string") return border.trim() || null const style = BORDER_STYLE_MAP[border.style ?? ""] ?? "solid" if (style === "none") return "none" const sizePt = border.size ? Math.max(0.25, border.size / 8) : 0.75 const color = border.color && border.color !== "auto" ? border.color : "#000000" return `${sizePt}pt ${style} ${color}` } export function buildDocsTableCellStyle(attrs: Record): string | undefined { const parts: string[] = [] const backgroundColor = typeof attrs.backgroundColor === "string" && attrs.backgroundColor ? attrs.backgroundColor : null if (backgroundColor) parts.push(`background-color: ${backgroundColor}`) const verticalAlign = attrs.verticalAlign === "top" || attrs.verticalAlign === "middle" || attrs.verticalAlign === "bottom" ? attrs.verticalAlign : null if (verticalAlign) parts.push(`vertical-align: ${verticalAlign}`) const borderTop = docsTableBorderToCss(attrs.borderTop as DocsTableBorder | string | null) const borderRight = docsTableBorderToCss(attrs.borderRight as DocsTableBorder | string | null) const borderBottom = docsTableBorderToCss(attrs.borderBottom as DocsTableBorder | string | null) const borderLeft = docsTableBorderToCss(attrs.borderLeft as DocsTableBorder | string | null) if (borderTop) parts.push(`border-top: ${borderTop}`) if (borderRight) parts.push(`border-right: ${borderRight}`) if (borderBottom) parts.push(`border-bottom: ${borderBottom}`) if (borderLeft) parts.push(`border-left: ${borderLeft}`) return parts.length ? parts.join("; ") : undefined } export function buildDocsTableStyle(attrs: Record): string | undefined { const parts: string[] = [] const alignment = attrs.alignment === "left" || attrs.alignment === "center" || attrs.alignment === "right" ? attrs.alignment : null if (alignment === "center") parts.push("margin-left: auto", "margin-right: auto") else if (alignment === "right") parts.push("margin-left: auto", "margin-right: 0") else if (alignment === "left") parts.push("margin-left: 0", "margin-right: auto") if (attrs.layout === "fixed") parts.push("table-layout: fixed") const cellSpacing = typeof attrs.cellSpacing === "number" ? attrs.cellSpacing : null if (cellSpacing && cellSpacing > 0) { const px = Math.round((cellSpacing / 20) * 96 / 72) parts.push(`border-spacing: ${px}px`) } return parts.length ? parts.join("; ") : undefined } export function buildDocsTableRowStyle(attrs: Record): string | undefined { const rowHeight = typeof attrs.rowHeight === "string" ? attrs.rowHeight : null if (!rowHeight) return undefined return `height: ${rowHeight}` }