import { getStrWithCapitalized } from "@web3r/flowerkit/str"; import type { IComponentBaseProps, TBaseSizes, TCustomBaseSize } from "#package/types"; import { constants } from "../constants"; interface IGetExtraSizesProps { extraClasses?: IComponentBaseProps["extraClasses"]; size: TBaseSizes | TCustomBaseSize; } /** * Стандартный размер (medium) */ const fallbackSize = constants.defaultSizes[2]; /** * Получает классы элемента * @returns {IComponentBaseProps["extraClasses"]} Возвращает объект `extraClasses` c добавленным размерным модификатором вида `isSize...`. * @example * import { getExtraSizes } from "@delement/ui/utils"; * * const extraClasses = getExtraSizes({ size: "medium" }); */ export const getExtraSizes = ({ extraClasses = {}, size = fallbackSize, }: IGetExtraSizesProps): IComponentBaseProps["extraClasses"] => { const getNormalizedSize = (size: string): string => getStrWithCapitalized(size.toLowerCase()); const extraSizes: IComponentBaseProps["extraClasses"] = {}; if (typeof size === "string" && constants.defaultSizes.includes(size.toLowerCase() as TBaseSizes)) { extraSizes[`isSize${getNormalizedSize(size)}`] = true; } else { console.error(`[getExtraSizes] Please use function for custom size: "${size}"`); } if (typeof size === "function") { const userSize = size() || fallbackSize; extraSizes[`isSize${getNormalizedSize(userSize)}`] = true; } return { ...extraClasses, ...extraSizes }; };