import type { Class } from '../types' import { interleave } from './interleave' // based on https://github.com/lukeed/clsx and https://github.com/jorgebucaran/classcat export function interpolate( strings: TemplateStringsArray | Class, interpolations: Class[], ): string { return Array.isArray(strings) && Array.isArray((strings as unknown as TemplateStringsArray).raw) ? interleave(strings as unknown as TemplateStringsArray, interpolations, (value) => toString(value).trim(), ) : interpolations .filter(Boolean) .reduce( (result: string, value) => result + toString(value), strings ? toString(strings as Class) : '', ) } function toString(value: Class): string { let result = '' let tmp: string if (value && typeof value == 'object') { if (Array.isArray(value)) { if ((tmp = interpolate(value[0], value.slice(1)))) { result += ' ' + tmp } } else { for (const key in value) { if (value[key]) result += ' ' + key } } } else if (value != null && typeof value != 'boolean') { result += ' ' + value } return result }