tss/main.ts
2025-10-19 16:22:47 -04:00

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){}});
}