mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-08 04:55:06 +09:00
I have no idea how this works because @andarist wrote it
This commit is contained in:
1 parent
1d5540e3f5
commit
cb09f3ef10
1 file changed
+11
-2
@@ -4,9 +4,18 @@ const define = <Name extends string>(name: Name) => {
|
||||
return `--${name}-${++counter}` as const;
|
||||
};
|
||||
|
||||
type Cast<T1, T2> = T1 extends T2 ? T1 : T2;
|
||||
|
||||
type Join<T extends readonly string[], D extends string> = T extends []
|
||||
? ""
|
||||
: T extends [string]
|
||||
? T[0]
|
||||
: T extends [string, ...infer Rest]
|
||||
? `${T[0]}${D}${Join<Cast<Rest, string[]>, D>}`
|
||||
: never;
|
||||
|
||||
const use = <Args extends string[]>(...args: Args) => {
|
||||
type JoinedArgs = `${typeof args[0]}, ${typeof args[1]}, ${typeof args[2]}`;
|
||||
return `var(${args.join(", ") as JoinedArgs})` as const;
|
||||
return `var(${args.join(", ") as Join<Args, ", ">})` as const;
|
||||
};
|
||||
|
||||
export const cssVars = { define, use };
|
||||
Reference in new issue
Block a user