diff --git a/main.ts b/main.ts index c830387..c20fe6e 100644 --- a/main.ts +++ b/main.ts @@ -1,3 +1,4 @@ +// tss.ts type PseudoKeys = ["hover"|"before"|"after"] | ["hover", "after"|"before"]; type ValueSignature = (...args:number[])=>void type EnumDefinition = [property:string, options:Record, values?:Signature]; @@ -95,21 +96,54 @@ const styles = Block( } ); -const userDeclaredStyleBlock = -(styles() - .Pos.Abs - ("hover", "after") - .Pos.Rel - .Left(20) - [512] - .Left(100)) - - -// internal stringification -console.log(userDeclaredStyleBlock().join("")); - -function Sheet>>(userClasses:UserClasses):{[Class in keyof UserClasses]:string} +let masterSheet = []; +export function Sheet)=>void >>(userClasses:UserClasses):{[Class in keyof UserClasses]:string} { - return new Proxy({}, {get(_target, className){}}); + const hash = Math.floor(Math.random()*10000); + return new Proxy(function(){}, {get(_target, className){ + console.log("sheet accessor", className); + const lookup = userClasses[className]; + if(typeof lookup == "string") + { + return lookup; + } + else + { + const skewer = styles(); + lookup(skewer); + const name = `.${className}_${hash}`; + masterSheet.push( `${name}{ ${skewer().join("")} }` ); + userClasses[className] = name; + return name; + } + }}); } +export function Divulge() +{ + return masterSheet.join("\n"); +} + + +/////// testing: //////// + +const sheet = Sheet({ + SpecialLink(styles) + { + styles + .Pos.Abs + ("hover","after") + .Pos.Rel + .Left(20) + [512] + .Left(100) + }, + Profile(styles) + { + styles.Display.Block + } +}) + +const el1 = [sheet.Profile, sheet.SpecialLink]; + +console.log(Divulge()); \ No newline at end of file