diff --git a/src/shared/lib/utils/getPretextFontString/getPretextFontString.test.ts b/src/shared/lib/utils/getPretextFontString/getPretextFontString.test.ts new file mode 100644 index 0000000..9beea5d --- /dev/null +++ b/src/shared/lib/utils/getPretextFontString/getPretextFontString.test.ts @@ -0,0 +1,15 @@ +import { + describe, + expect, + it, +} from 'vitest'; +import { getPretextFontString } from './getPretextFontString'; + +describe('getPretextFontString', () => { + it('formats weight, px size and quoted family for pretext/canvas', () => { + expect(getPretextFontString(400, 48, 'Inter')).toBe('400 48px "Inter"'); + }); + it('preserves fractional sizes and quotes multi-word family names', () => { + expect(getPretextFontString(700, 12.5, 'PT Serif')).toBe('700 12.5px "PT Serif"'); + }); +}); diff --git a/src/shared/lib/utils/getPretextFontString/getPretextFontString.ts b/src/shared/lib/utils/getPretextFontString/getPretextFontString.ts new file mode 100644 index 0000000..61dd702 --- /dev/null +++ b/src/shared/lib/utils/getPretextFontString/getPretextFontString.ts @@ -0,0 +1,16 @@ +/** + * Formats a font config into the string `@chenglou/pretext` and the Canvas 2D + * `font` property both expect: `weight sizepx "family"`. + * + * ponytail: deliberate copy of widgets/ComparisonView/lib's version — ADR-0002 + * keeps the shelved morph tool untouched, so we don't move its util. Three lines + * is cheaper to duplicate than to refactor frozen code. + * + * @param weight - Numeric font weight (e.g. 400). + * @param sizePx - Font size in pixels. + * @param fontName - The font family name. + * @returns A formatted font string: `weight sizepx "fontName"`. + */ +export function getPretextFontString(weight: number, sizePx: number, fontName: string): string { + return `${weight} ${sizePx}px "${fontName}"`; +} diff --git a/src/shared/lib/utils/index.ts b/src/shared/lib/utils/index.ts index 21eef79..154dba7 100644 --- a/src/shared/lib/utils/index.ts +++ b/src/shared/lib/utils/index.ts @@ -18,6 +18,7 @@ export { clampNumber } from './clampNumber/clampNumber'; export { cn } from './cn'; export { debounce } from './debounce/debounce'; export { getDecimalPlaces } from './getDecimalPlaces/getDecimalPlaces'; +export { getPretextFontString } from './getPretextFontString/getPretextFontString'; export { getSkeletonWidth } from './getSkeletonWidth/getSkeletonWidth'; export { roundToStepPrecision } from './roundToStepPrecision/roundToStepPrecision'; export { smoothScroll } from './smoothScroll/smoothScroll';