UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

47 lines (46 loc) 2.02 kB
import { getTableMeasurement } from '../../../transforms/content-mode'; import { distributeByEvenShareRatio, sumWidths } from './distribute-column-widths'; const measureWithIntrinsicWidth = (tableRef, resizerContainer, resizerItem) => { if (resizerContainer) { resizerContainer.style.width = 'var(--ak-editor-table-width)'; resizerContainer.style.setProperty('--ak-editor-table-width', 'max-content'); } if (resizerItem) { resizerItem.style.width = 'max-content'; } const prevTableWidth = tableRef.style.width; const prevTableMaxWidth = tableRef.style.maxWidth; const prevTableMinWidth = tableRef.style.minWidth; tableRef.style.setProperty('width', 'max-content', 'important'); tableRef.style.setProperty('max-width', 'none', 'important'); tableRef.style.setProperty('min-width', '0', 'important'); try { return getTableMeasurement(tableRef); } finally { tableRef.style.width = prevTableWidth; tableRef.style.maxWidth = prevTableMaxWidth; tableRef.style.minWidth = prevTableMinWidth; } }; export const restoreResizerContainer = resizerContainer => { if (!resizerContainer) { return; } resizerContainer.style.width = 'var(--ak-editor-table-width)'; resizerContainer.style.removeProperty('--ak-editor-table-width'); }; /** * Smart-adjust: measure unconstrained max-content per column, then clamp via * `distributeByEvenShareRatio`. */ export const runSmartAdjust = (tableRef, resizerContainer, resizerItem, editorContainerWidthFromApi) => { const preferredMeasurement = measureWithIntrinsicWidth(tableRef, resizerContainer, resizerItem); const desiredWidths = preferredMeasurement.colWidths; const editorContainerWidth = editorContainerWidthFromApi !== null && editorContainerWidthFromApi !== void 0 ? editorContainerWidthFromApi : sumWidths(desiredWidths); const colWidths = distributeByEvenShareRatio(desiredWidths, editorContainerWidth); return { ...preferredMeasurement, colWidths, tableWidth: sumWidths(colWidths) }; };