/** * Generates a plain object of CSS variable key/value pairs based on the * specified `vars`. * * @note Filters out falsy values and transforms names to kebab-case. * * @example * const foo = 'foo'; * const isBar = 'bar'; * const zed = ''; * * cssVars({ foo, isBar, zed }); * // { --foo: 'foo', --is-bar: 'bar' } */ export const cssVars = (vars: Vars): Vars => Object.fromEntries( Object.entries(vars) .filter(([, value]) => !!value) .map(([name, value]) => [toVar(name), value]) ); const toVar = (name: string) => `--${toKebabCase(name)}`; const toKebabCase = (name: string) => name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`); type Vars = Record; type Value = string | number | undefined | null;