UNPKG

@mcdevsl/superset-ui

Version:
54 lines (45 loc) 1.51 kB
import getTextDimension, { GetTextDimensionInput } from './getTextDimension'; import { Dimension } from './types'; function decreaseSizeUntil( startSize: number, computeDimension: (size: number) => Dimension, condition: (dimension: Dimension) => boolean, ): number { let size = startSize; let dimension = computeDimension(size); while (!condition(dimension)) { size -= 1; dimension = computeDimension(size); } return size; } export default function computeMaxFontSize( input: GetTextDimensionInput & { maxWidth?: number; maxHeight?: number; idealFontSize?: number; }, ) { const { idealFontSize, maxWidth, maxHeight, style, ...rest } = input; let size: number; if (idealFontSize !== undefined && idealFontSize !== null) { size = idealFontSize; } else if (maxHeight === undefined || maxHeight === null) { throw new Error('You must specify at least one of maxHeight or idealFontSize'); } else { size = Math.floor(maxHeight); } function computeDimension(fontSize: number) { return getTextDimension({ ...rest, style: { ...style, fontSize: `${fontSize}px` }, }); } if (maxWidth !== undefined && maxWidth !== null) { size = decreaseSizeUntil(size, computeDimension, dim => dim.width <= maxWidth); } if (maxHeight !== undefined && maxHeight !== null) { size = decreaseSizeUntil(size, computeDimension, dim => dim.height <= maxHeight); } return size; }