export type PrefixedKeys = { [Key in keyof T as `${Prefix}${Capitalize}`]: T[Key]; }; export type RemovePrefix = { [Key in keyof T as Key extends `${Prefix}${infer Rest}` ? Uncapitalize : Key]: T[Key]; }; export const cleanUpPrefix = , Prefix extends string>( obj: T, prefix: Prefix ): RemovePrefix => { return Object.entries(obj).reduce( (result, [key, value]) => { if (key.startsWith(prefix)) { const cleanedKey = (key.slice(prefix.length) as string).replace(/^./, char => char.toLowerCase() ) as keyof RemovePrefix; return { ...result, [cleanedKey]: value as T[keyof T], }; } return { ...result, [key]: value as T[keyof T], }; }, {} as RemovePrefix ); }; const HALF_DISPLAY_WIDTH = 608; export const getImageParametersFocalPoint = (isVariant: boolean) => { const columnImageDimensions = isVariant ? HALF_DISPLAY_WIDTH : undefined; return { imageFill: !isVariant, ...(columnImageDimensions ? { imageWidth: columnImageDimensions, imageHeight: columnImageDimensions, } : {}), }; };