35 lines
999 B
TypeScript
35 lines
999 B
TypeScript
type EnumDefinition = Record<string, string>;
|
|
type EnumBlock = Record<string, EnumDefinition&{_:string}>;
|
|
|
|
function Block<Fields extends EnumBlock>(options:Fields):{[F in keyof Fields]:{[E in keyof Fields[F]]:Fields}}
|
|
{
|
|
const list = [];
|
|
let fieldLookup = {};
|
|
|
|
const proxyOuter = new Proxy({}, {get(_target, propName){
|
|
fieldLookup = options[propName];
|
|
list.push(fieldLookup._);
|
|
return proxyInner
|
|
}});
|
|
|
|
const proxyInner = new Proxy({}, {get(_target, valName){
|
|
list.push(`:${fieldLookup[valName]};`);
|
|
console.log(list);
|
|
return proxyOuter;
|
|
}});
|
|
|
|
return proxyOuter;
|
|
}
|
|
|
|
const styles = Block({
|
|
Pos:{_:"position", Abs:"absolute", Rel:"relative"},
|
|
Display:{_:"display", Flex:"flex", Grid:"grid", None:"none", Block:"block", InlineBlock:"inline-block"}
|
|
});
|
|
|
|
export default styles
|
|
|
|
function Sheet<UserClasses extends Record<string, typeof styles>>(userClasses:UserClasses):{[Class in keyof UserClasses]:string}
|
|
{
|
|
return new Proxy({}, {get(_target, className){}});
|
|
}
|