@salty-css/core 0.0.1-alpha.13 → 0.0.1-alpha.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  ### Initial requirements
6
6
 
7
7
  1. Add `saltyPlugin` to vite or webpack config from `@salty-css/vite` or `@salty-css/webpack`
8
- 2. Create `salty-config.ts` to the root of your project
8
+ 2. Create `salty.config.ts` to the root of your project
9
9
  3. Import global styles to any regular .css file from `saltygen/index.css` (does not exist during first run, cli command coming later)
10
10
  4. Create salty components with styled only inside files that end with `.css.ts`, `.salty.ts` `.styled.ts` or `.styles.ts`
11
11
 
@@ -0,0 +1 @@
1
+ export declare const execAsync: (command: string) => Promise<void>;
package/bin/index.cjs ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ "use strict";const _=require("commander"),n=require("fs/promises"),t=require("path"),$=require("ejs"),D=require("../compiler/index.cjs"),N=require("../pascal-case-iWoaJWwT.cjs"),h=require("winston"),O=require("fs"),z=require("child_process"),o=h.createLogger({level:"debug",format:h.format.combine(h.format.colorize(),h.format.cli()),transports:[new h.transports.Console({})]}),I=a=>new Promise((g,m)=>{z.exec(a,j=>{if(j)return m(j);g()})}),J=()=>O.existsSync(t.join(process.cwd(),"node_modules",".bin","prettier"));async function v(a){try{if(!J())return;await I(`./node_modules/.bin/prettier --write "${a}"`),o.info(`Formatted ${a} with Prettier`)}catch(g){o.error(`Error formatting ${a} with Prettier:`,g)}}async function k(){const a=new _.Command;a.name("salty-css").description("Salty-CSS CLI tool to help with annoying configuration tasks.");const g={"salty.config.ts":Promise.resolve().then(()=>require("../salty.config-BupieCfE.cjs")),"saltygen/index.css":Promise.resolve().then(()=>require("../index-84Wroia-.cjs")),"react/react-styled-file.ts":Promise.resolve().then(()=>require("../react-styled-file-Dkubsz-U.cjs"))},m=async(s,l)=>{const{default:f}=await g[s],c=$.render(f,l);return{fileName:s,content:c}},j=async()=>{const s=t.join(process.cwd(),".saltyrc");return await n.readFile(s,"utf-8").then(JSON.parse).catch(()=>({}))},b=await(async()=>(await j()).defaultProject)();a.command("init").description("Initialize a new Salty-CSS project.").requiredOption("-d, --dir <dir>","Project directory to initialize the project in.").option("--css-file <css-file>","Existing CSS file where to import the generated CSS. Path must be relative to the given project directory.").action(async function(){o.info("Initializing a new Salty-CSS project...");const{dir:s,cssFile:l}=this.opts(),f=process.cwd(),c=t.join(f,s),C=await Promise.all([m("salty.config.ts"),m("saltygen/index.css")]);await n.mkdir(c,{recursive:!0});const F=C.map(async({fileName:e,content:r})=>{const d=t.join(c,e);if(await n.readFile(d,"utf-8").catch(()=>{})!==void 0){o.debug("File already exists: "+d);return}const q=e.split("/").slice(0,-1).join("/");q&&await n.mkdir(t.join(c,q),{recursive:!0}),o.info("Writing file: "+d),await n.writeFile(d,r),await v(d)});await Promise.all(F);const y=t.relative(f,c),i=t.join(f,".saltyrc"),p=await n.readFile(i,"utf-8").catch(()=>{});if(p===void 0){o.info("Creating file: "+i);const r=JSON.stringify({defaultProject:y,projects:[y]},null,2);await n.writeFile(i,r)}else{o.info("Edit file: "+i);const e=JSON.parse(p),r=new Set((e==null?void 0:e.projects)||[]);r.add(y),e.projects=[...r];const d=JSON.stringify(e,null,2);await n.writeFile(i,d)}const S=t.join(f,".gitignore"),w=await n.readFile(S,"utf-8").catch(()=>{});if(w!==void 0&&(w.includes("saltygen")||(o.info("Edit file: "+S),await n.writeFile(S,w+`
3
+
4
+ # Salty-CSS
5
+ saltygen
6
+ `))),l){const e=t.join(c,l),r=await n.readFile(e,"utf-8").catch(()=>{});if(r!==void 0&&!r.includes("saltygen")){const P=t.join(e,".."),E=`@import '${t.relative(P,t.join(c,"saltygen/index.css"))}';`;o.info("Edit file: "+e),await n.writeFile(e,E+`
7
+ `+r),await v(e)}}const u=t.join(c,"vite.config.ts"),x=await n.readFile(u,"utf-8").catch(()=>{});if(x!==void 0&&!x.includes("saltyPlugin")){o.info("Edit file: "+u);const r=`import { saltyPlugin } from '@salty-css/vite';
8
+ `,P=x.replace(/(plugins: \[)/,`$1
9
+ saltyPlugin(__dirname),`);o.info("Installing @salty-css/vite..."),await I("npm install @salty-css/vite"),o.info("Adding Salty-CSS plugin to Vite config..."),await n.writeFile(u,r+P),await v(u)}}),a.command("build").alias("b").description("Build the Salty-CSS project.").option("-d, --dir <dir>","Project directory to build the project in.",b).action(async function(){o.info("Building the Salty-CSS project...");const{dir:s}=this.opts(),l=t.join(process.cwd(),s);await D.generateCss(l)}),a.command("generate <file>").alias("g").description("Generate a new component file.").option("-d, --dir <dir>","Project directory to generate the file in.",b).option("-t, --tag <tag>","HTML tag of the component.","div").option("-n, --name <name>","Name of the component.").option("-c, --className <className>","CSS class of the component.").action(async function(s){const{dir:l,tag:f,name:c,className:C}=this.opts(),F=t.join(process.cwd(),l),y=t.join(F,s),i=t.parse(y);i.ext||(i.ext=".ts"),i.name.endsWith(".css")||(i.name=i.name+".css"),i.base=i.name+i.ext;const p=t.format(i);if(await n.readFile(p,"utf-8").catch(()=>{})!==void 0){o.error("File already exists:",p);return}o.info("Generating a new file: "+p);const w=N.pascalCase(c||i.base.replace(/\.css\.\w+$/,"")),{content:u}=await m("react/react-styled-file.ts",{tag:f,name:w,className:C});await n.writeFile(p,u),await v(p)}),a.parseAsync(process.argv)}k().catch(a=>console.error(a));
package/bin/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/bin/index.js ADDED
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+ import { Command as _ } from "commander";
3
+ import { mkdir as $, readFile as p, writeFile as m } from "fs/promises";
4
+ import { join as n, relative as D, parse as z, format as J } from "path";
5
+ import { render as A } from "ejs";
6
+ import { generateCss as H } from "../compiler/index.js";
7
+ import { p as L } from "../pascal-case-BQpR5PdN.js";
8
+ import { createLogger as W, format as I, transports as k } from "winston";
9
+ import { existsSync as B } from "fs";
10
+ import { exec as G } from "child_process";
11
+ const i = W({
12
+ level: "debug",
13
+ format: I.combine(I.colorize(), I.cli()),
14
+ transports: [new k.Console({})]
15
+ }), N = (o) => new Promise((g, u) => {
16
+ G(o, (S) => {
17
+ if (S) return u(S);
18
+ g();
19
+ });
20
+ }), T = () => B(n(process.cwd(), "node_modules", ".bin", "prettier"));
21
+ async function v(o) {
22
+ try {
23
+ if (!T()) return;
24
+ await N(`./node_modules/.bin/prettier --write "${o}"`), i.info(`Formatted ${o} with Prettier`);
25
+ } catch (g) {
26
+ i.error(`Error formatting ${o} with Prettier:`, g);
27
+ }
28
+ }
29
+ async function q() {
30
+ const o = new _();
31
+ o.name("salty-css").description("Salty-CSS CLI tool to help with annoying configuration tasks.");
32
+ const g = {
33
+ // Core files
34
+ "salty.config.ts": import("../salty.config-D9ANEDiH.js"),
35
+ "saltygen/index.css": import("../index-D_732b92.js"),
36
+ // React
37
+ "react/react-styled-file.ts": import("../react-styled-file-CGVf5n1B.js")
38
+ }, u = async (s, c) => {
39
+ const { default: d } = await g[s], r = A(d, c);
40
+ return { fileName: s, content: r };
41
+ }, S = async () => {
42
+ const s = n(process.cwd(), ".saltyrc");
43
+ return await p(s, "utf-8").then(JSON.parse).catch(() => ({}));
44
+ }, E = await (async () => (await S()).defaultProject)();
45
+ o.command("init").description("Initialize a new Salty-CSS project.").requiredOption("-d, --dir <dir>", "Project directory to initialize the project in.").option("--css-file <css-file>", "Existing CSS file where to import the generated CSS. Path must be relative to the given project directory.").action(async function() {
46
+ i.info("Initializing a new Salty-CSS project...");
47
+ const { dir: s, cssFile: c } = this.opts(), d = process.cwd(), r = n(d, s), j = await Promise.all([u("salty.config.ts"), u("saltygen/index.css")]);
48
+ await $(r, { recursive: !0 });
49
+ const x = j.map(async ({ fileName: t, content: a }) => {
50
+ const l = n(r, t);
51
+ if (await p(l, "utf-8").catch(() => {
52
+ }) !== void 0) {
53
+ i.debug("File already exists: " + l);
54
+ return;
55
+ }
56
+ const b = t.split("/").slice(0, -1).join("/");
57
+ b && await $(n(r, b), { recursive: !0 }), i.info("Writing file: " + l), await m(l, a), await v(l);
58
+ });
59
+ await Promise.all(x);
60
+ const w = D(d, r), e = n(d, ".saltyrc"), f = await p(e, "utf-8").catch(() => {
61
+ });
62
+ if (f === void 0) {
63
+ i.info("Creating file: " + e);
64
+ const a = JSON.stringify({
65
+ defaultProject: w,
66
+ projects: [w]
67
+ }, null, 2);
68
+ await m(e, a);
69
+ } else {
70
+ i.info("Edit file: " + e);
71
+ const t = JSON.parse(f), a = new Set((t == null ? void 0 : t.projects) || []);
72
+ a.add(w), t.projects = [...a];
73
+ const l = JSON.stringify(t, null, 2);
74
+ await m(e, l);
75
+ }
76
+ const P = n(d, ".gitignore"), h = await p(P, "utf-8").catch(() => {
77
+ });
78
+ if (h !== void 0 && (h.includes("saltygen") || (i.info("Edit file: " + P), await m(P, h + `
79
+
80
+ # Salty-CSS
81
+ saltygen
82
+ `))), c) {
83
+ const t = n(r, c), a = await p(t, "utf-8").catch(() => {
84
+ });
85
+ if (a !== void 0 && !a.includes("saltygen")) {
86
+ const C = n(t, ".."), O = `@import '${D(C, n(r, "saltygen/index.css"))}';`;
87
+ i.info("Edit file: " + t), await m(t, O + `
88
+ ` + a), await v(t);
89
+ }
90
+ }
91
+ const y = n(r, "vite.config.ts"), F = await p(y, "utf-8").catch(() => {
92
+ });
93
+ if (F !== void 0 && !F.includes("saltyPlugin")) {
94
+ i.info("Edit file: " + y);
95
+ const a = `import { saltyPlugin } from '@salty-css/vite';
96
+ `, C = F.replace(/(plugins: \[)/, `$1
97
+ saltyPlugin(__dirname),`);
98
+ i.info("Installing @salty-css/vite..."), await N("npm install @salty-css/vite"), i.info("Adding Salty-CSS plugin to Vite config..."), await m(y, a + C), await v(y);
99
+ }
100
+ }), o.command("build").alias("b").description("Build the Salty-CSS project.").option("-d, --dir <dir>", "Project directory to build the project in.", E).action(async function() {
101
+ i.info("Building the Salty-CSS project...");
102
+ const { dir: s } = this.opts(), c = n(process.cwd(), s);
103
+ await H(c);
104
+ }), o.command("generate <file>").alias("g").description("Generate a new component file.").option("-d, --dir <dir>", "Project directory to generate the file in.", E).option("-t, --tag <tag>", "HTML tag of the component.", "div").option("-n, --name <name>", "Name of the component.").option("-c, --className <className>", "CSS class of the component.").action(async function(s) {
105
+ const { dir: c, tag: d, name: r, className: j } = this.opts(), x = n(process.cwd(), c), w = n(x, s), e = z(w);
106
+ e.ext || (e.ext = ".ts"), e.name.endsWith(".css") || (e.name = e.name + ".css"), e.base = e.name + e.ext;
107
+ const f = J(e);
108
+ if (await p(f, "utf-8").catch(() => {
109
+ }) !== void 0) {
110
+ i.error("File already exists:", f);
111
+ return;
112
+ }
113
+ i.info("Generating a new file: " + f);
114
+ const h = L(r || e.base.replace(/\.css\.\w+$/, "")), { content: y } = await u("react/react-styled-file.ts", { tag: d, name: h, className: j });
115
+ await m(f, y), await v(f);
116
+ }), o.parseAsync(process.argv);
117
+ }
118
+ q().catch((o) => console.error(o));
@@ -0,0 +1 @@
1
+ export declare const logger: import('winston').Logger;
@@ -0,0 +1 @@
1
+ export declare function formatWithPrettier(filePath: string): Promise<void>;
@@ -1,11 +1,11 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const K=require("esbuild"),J=require("winston"),G=require("child_process"),N=require("../util/index.cjs"),o=require("path"),r=require("fs"),L=require("fs/promises"),_=require("../parse-templates-BY1Xai-_.cjs");function q(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const e=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(s,n,e.get?e:{enumerable:!0,get:()=>t[n]})}}return s.default=t,Object.freeze(s)}const R=q(K),k=q(J),A=k.createLogger({level:"info",format:k.format.combine(k.format.colorize(),k.format.cli()),transports:[new k.transports.Console({})]}),v=t=>o.join(t,"./saltygen"),M=["salty","css","styles","styled"],z=(t=[])=>new RegExp(`\\.(${[...M,...t].join("|")})\\.`),T=(t,s=[])=>z(s).test(t),U=async t=>{const s=v(t),n=o.join(t,"salty-config.ts"),e=o.join(s,"salty-config.js");await R.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:e,format:"esm",external:["react"]});const a=Date.now(),{config:h}=await import(`${e}?t=${a}`);return h},H=async t=>{const s=await U(t),n=new Set,e=(f,p=[])=>f?Object.entries(f).flatMap(([y,c])=>{if(!c)return;if(typeof c=="object")return e(c,[...p,y]);const x=[...p,y].join(".");n.add(`"${x}"`);const D=[...p.map(N.dashCase),N.dashCase(y)].join("-"),{result:P}=_.parseValueTokens(c);return`--${D}: ${P};`}):[],a=f=>f?Object.entries(f).flatMap(([p,y])=>{const c=e(y);return p==="base"?c.join(""):`${p} { ${c.join("")} }`}):[],h=f=>f?Object.entries(f).flatMap(([p,y])=>Object.entries(y).flatMap(([c,x])=>{const D=e(x,[p]),P=`.${p}-${c}, [data-${p}="${c}"]`,O=D.join("");return`${P} { ${O} }`})):[],b=e(s.variables),w=a(s.responsiveVariables),l=h(s.conditionalVariables),j=v(t),u=o.join(j,"css/variables.css"),i=`:root { ${b.join("")} ${w.join("")} } ${l.join("")}`;r.writeFileSync(u,i);const g=o.join(j,"types/css-tokens.d.ts"),d=`type VariableTokens = ${[...n].join("|")}; type PropertyValueToken = \`{\${VariableTokens}}\``;r.writeFileSync(g,d);const m=o.join(j,"css/global.css"),S=_.parseStyles(s.global,"");r.writeFileSync(m,S);const F=o.join(j,"css/templates.css"),C=_.parseTemplates(s.templates);r.writeFileSync(F,C)},V=async(t,s)=>{const n=N.toHash(t),e=o.join(s,"js",n+".js");await R.build({entryPoints:[t],minify:!0,treeShaking:!0,bundle:!0,outfile:e,format:"esm",target:["es2022"],keepNames:!0,external:["react"]});const a=Date.now();return await import(`${e}?t=${a}`)},E=async t=>{const s=v(t),n=o.join(s,"salty-config.js"),{config:e}=await import(n);return e},W=async t=>{try{const s=[],n=[],e=v(t),a=o.join(e,"index.css");(()=>{r.existsSync(e)&&G.execSync("rm -rf "+e),r.mkdirSync(e),r.mkdirSync(o.join(e,"css")),r.mkdirSync(o.join(e,"types"))})(),await H(t);const b=await E(t);async function w(i,g){const $=r.statSync(i);if($.isDirectory()){const d=r.readdirSync(i);await Promise.all(d.map(m=>w(o.join(i,m),o.join(g,m))))}else if($.isFile()&&T(i)){const m=await V(i,e),S=[];Object.entries(m).forEach(([p,y])=>{if(y.isKeyframes&&y.css){const O=`${y.animationName}.css`,I=`css/${O}`,B=o.join(e,I);s.push(O),r.writeFileSync(B,y.css);return}if(!y.generator)return;const c=y.generator._withBuildContext({name:p,config:b}),x=`${c.hash}-${c.priority}.css`;n[c.priority]||(n[c.priority]=[]),n[c.priority].push(x),S.push(x);const D=`css/${x}`,P=o.join(e,D);r.writeFileSync(P,c.css)});const F=S.map(p=>`@import url('./${p}');`).join(`
2
- `),C=N.toHash(i,6),f=o.join(e,`css/${C}.css`);r.writeFileSync(f,F)}}await w(t,e);const l=s.map(i=>`@import url('./css/${i}');`).join(`
3
- `);let u=`@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const z=require("esbuild"),B=require("child_process"),P=require("../dash-case-DKzpenwY.cjs"),o=require("path"),r=require("fs"),K=require("fs/promises"),V=require("../parse-templates-W0YfTmOT.cjs");function G(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,s.get?s:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const R=G(z),N=t=>o.join(t,"./saltygen"),_=["salty","css","styles","styled"],q=(t=[])=>new RegExp(`\\.(${[..._,...t].join("|")})\\.`),O=(t,e=[])=>q(e).test(t),J=async t=>{const e=N(t),n=o.join(t,"salty.config.ts"),s=o.join(e,"salty.config.js");await R.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:s,format:"esm",external:["react"]});const a=Date.now(),{config:w}=await import(`${s}?t=${a}`);return w},M=async t=>{const e=await J(t),n=new Set,s=(d,y=[])=>d?Object.entries(d).flatMap(([p,c])=>{if(!c)return;if(typeof c=="object")return s(c,[...y,p]);const C=[...y,p].join(".");n.add(`"${C}"`);const x=[...y.map(P.dashCase),P.dashCase(p)].join("-"),{result:D}=V.parseValueTokens(c);return`--${x}: ${D};`}):[],a=d=>d?Object.entries(d).flatMap(([y,p])=>{const c=s(p);return y==="base"?c.join(""):`${y} { ${c.join("")} }`}):[],w=d=>d?Object.entries(d).flatMap(([y,p])=>Object.entries(p).flatMap(([c,C])=>{const x=s(C,[y]),D=`.${y}-${c}, [data-${y}="${c}"]`,k=x.join("");return`${D} { ${k} }`})):[],j=s(e.variables),S=a(e.responsiveVariables),l=w(e.conditionalVariables),b=N(t),f=o.join(b,"css/variables.css"),i=`:root { ${j.join("")} ${S.join("")} } ${l.join("")}`;r.writeFileSync(f,i);const g=o.join(b,"types/css-tokens.d.ts"),m=`type VariableTokens = ${[...n].join("|")}; type PropertyValueToken = \`{\${VariableTokens}}\``;r.writeFileSync(g,m);const u=o.join(b,"css/global.css"),h=V.parseStyles(e.global,"");r.writeFileSync(u,h);const F=o.join(b,"css/templates.css"),v=V.parseTemplates(e.templates);r.writeFileSync(F,v)},T=async(t,e)=>{const n=P.toHash(t),s=o.join(e,"js",n+".js");await R.build({entryPoints:[t],minify:!0,treeShaking:!0,bundle:!0,outfile:s,format:"esm",target:["es2022"],keepNames:!0,external:["react"]});const a=Date.now();return await import(`${s}?t=${a}`)},E=async t=>{const e=N(t),n=o.join(e,"salty.config.js"),{config:s}=await import(n);return s},A=async t=>{try{const e=[],n=[],s=N(t),a=o.join(s,"index.css");(()=>{r.existsSync(s)&&B.execSync("rm -rf "+s),r.mkdirSync(s),r.mkdirSync(o.join(s,"css")),r.mkdirSync(o.join(s,"types"))})(),await M(t);const j=await E(t);async function S(i,g){const $=r.statSync(i);if($.isDirectory()){const m=r.readdirSync(i);await Promise.all(m.map(u=>S(o.join(i,u),o.join(g,u))))}else if($.isFile()&&O(i)){const u=await T(i,s),h=[];Object.entries(u).forEach(([y,p])=>{if(p.isKeyframes&&p.css){const k=`${p.animationName}.css`,H=`css/${k}`,I=o.join(s,H);e.push(k),r.writeFileSync(I,p.css);return}if(!p.generator)return;const c=p.generator._withBuildContext({name:y,config:j}),C=`${c.hash}-${c.priority}.css`;n[c.priority]||(n[c.priority]=[]),n[c.priority].push(C),h.push(C);const x=`css/${C}`,D=o.join(s,x);r.writeFileSync(D,c.css)});const F=h.map(y=>`@import url('./${y}');`).join(`
2
+ `),v=P.toHash(i,6),d=o.join(s,`css/${v}.css`);r.writeFileSync(d,F)}}await S(t,s);const l=e.map(i=>`@import url('./css/${i}');`).join(`
3
+ `);let f=`@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
4
4
 
5
5
  ${["@import url('./css/variables.css');","@import url('./css/global.css');","@import url('./css/templates.css');"].join(`
6
6
  `)}
7
- ${l}`;if(b.importStrategy!=="component"){const i=n.flat().map(g=>`@import url('./css/${g}');`).join(`
8
- `);u+=i}r.writeFileSync(a,u)}catch(s){console.error(s)}},X=async(t,s)=>{try{const n=[],e=o.join(t,"./saltygen"),a=o.join(e,"index.css");if(T(s)){const b=await E(t),w=await V(s,e);Object.entries(w).forEach(([g,$])=>{if(!$.generator)return;const d=$.generator._withBuildContext({name:g,config:b}),m=`${d.hash}-${d.priority}.css`,S=`css/${m}`,F=o.join(e,S);n.push(m),r.writeFileSync(F,d.css)});const l=r.readFileSync(a,"utf8").split(`
9
- `),j=n.map(g=>`@import url('../saltygen/css/${g}');`),i=[...new Set([...l,...j])].join(`
10
- `);r.writeFileSync(a,i)}}catch(n){console.error(n)}},Y=async(t,s)=>{try{const n=o.join(t,"./saltygen");if(T(s)){let a=r.readFileSync(s,"utf8");a.replace(/^(?!export\s)const\s.*/gm,u=>`export ${u}`)!==a&&await L.writeFile(s,a);const b=await E(t),w=await V(s,n);let l=a;Object.entries(w).forEach(([u,i])=>{var f;if(i.isKeyframes){console.log("value",i);return}if(!i.generator)return;const g=i.generator._withBuildContext({name:u,config:b}),$=new RegExp(`${u}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(a);if(!$)return console.error("Could not find the original declaration");const d=(f=$.at(1))==null?void 0:f.trim(),{element:m,variantKeys:S}=g.props,F=`${u} = styled(${d}, "${g.classNames}", "${g._callerName}", ${JSON.stringify(m)}, ${JSON.stringify(S)});`,C=new RegExp(`${u}[=\\s]+[^()]+styled\\(([^,]+),[^;]+;`,"g");l=l.replace(C,F)});const j=N.toHash(s,6);return b.importStrategy==="component"&&(l=`import '../../saltygen/css/${j}.css';
11
- ${l}`),l=l.replace("{ styled }","{ styledClient as styled }"),l=l.replace("@salty-css/react/styled","@salty-css/react/styled-client"),l}}catch(n){console.error(n)}};exports.compileSaltyFile=V;exports.generateCss=W;exports.generateFile=X;exports.generateVariables=H;exports.isSaltyFile=T;exports.logger=A;exports.minimizeFile=Y;exports.saltyFileExtensions=M;exports.saltyFileRegExp=z;
7
+ ${l}`;if(j.importStrategy!=="component"){const i=n.flat().map(g=>`@import url('./css/${g}');`).join(`
8
+ `);f+=i}r.writeFileSync(a,f)}catch(e){console.error(e)}},L=async(t,e)=>{try{const n=[],s=o.join(t,"./saltygen"),a=o.join(s,"index.css");if(O(e)){const j=await E(t),S=await T(e,s);Object.entries(S).forEach(([g,$])=>{if(!$.generator)return;const m=$.generator._withBuildContext({name:g,config:j}),u=`${m.hash}-${m.priority}.css`,h=`css/${u}`,F=o.join(s,h);n.push(u),r.writeFileSync(F,m.css)});const l=r.readFileSync(a,"utf8").split(`
9
+ `),b=n.map(g=>`@import url('../saltygen/css/${g}');`),i=[...new Set([...l,...b])].join(`
10
+ `);r.writeFileSync(a,i)}}catch(n){console.error(n)}},U=async(t,e)=>{try{const n=o.join(t,"./saltygen");if(O(e)){const a=r.readFileSync(e,"utf8");a.replace(/^(?!export\s)const\s.*/gm,f=>`export ${f}`)!==a&&await K.writeFile(e,a);const j=await E(t),S=await T(e,n);let l=a;Object.entries(S).forEach(([f,i])=>{var F;if(i.isKeyframes){console.log("value",i);return}if(!i.generator)return;const g=i.generator._withBuildContext({name:f,config:j}),$=new RegExp(`${f}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(a);if(!$)return console.error("Could not find the original declaration");const m=(F=$.at(1))==null?void 0:F.trim(),u=`${f} = styled(${m}, "${g.classNames}", "${g._callerName}", ${JSON.stringify(g.props)});`,h=new RegExp(`${f}[=\\s]+[^()]+styled\\(([^,]+),[^;]+;`,"g");l=l.replace(h,u)});const b=P.toHash(e,6);return j.importStrategy==="component"&&(l=`import '../../saltygen/css/${b}.css';
11
+ ${l}`),l=l.replace("{ styled }","{ styledClient as styled }"),l=l.replace("@salty-css/react/styled","@salty-css/react/styled-client"),l}}catch(n){console.error(n)}};exports.compileSaltyFile=T;exports.generateConfigStyles=M;exports.generateCss=A;exports.generateFile=L;exports.isSaltyFile=O;exports.minimizeFile=U;exports.saltyFileExtensions=_;exports.saltyFileRegExp=q;
@@ -1,10 +1,8 @@
1
1
  import { StyleComponentGenerator } from '../generator/style-generator';
2
- import * as winston from 'winston';
3
- export declare const logger: winston.Logger;
4
2
  export declare const saltyFileExtensions: string[];
5
3
  export declare const saltyFileRegExp: (additional?: string[]) => RegExp;
6
4
  export declare const isSaltyFile: (file: string, additional?: string[]) => boolean;
7
- export declare const generateVariables: (dirname: string) => Promise<void>;
5
+ export declare const generateConfigStyles: (dirname: string) => Promise<void>;
8
6
  export declare const compileSaltyFile: (sourceFilePath: string, outputDirectory: string) => Promise<{
9
7
  [key: string]: {
10
8
  generator: StyleComponentGenerator;
package/compiler/index.js CHANGED
@@ -1,18 +1,13 @@
1
- import * as M from "esbuild";
2
- import * as N from "winston";
3
- import { execSync as z } from "child_process";
4
- import { toHash as T, dashCase as I } from "../util/index.js";
1
+ import * as I from "esbuild";
2
+ import { execSync as H } from "child_process";
3
+ import { t as T, d as R } from "../dash-case-DMQMcCO6.js";
5
4
  import { join as o } from "path";
6
- import { writeFileSync as $, existsSync as H, mkdirSync as v, statSync as J, readdirSync as G, readFileSync as _ } from "fs";
7
- import { writeFile as L } from "fs/promises";
8
- import { p as q, a as A, b as U } from "../parse-templates-BOSK0Tb6.js";
9
- const rt = N.createLogger({
10
- level: "info",
11
- format: N.format.combine(N.format.colorize(), N.format.cli()),
12
- transports: [new N.transports.Console({})]
13
- }), k = (s) => o(s, "./saltygen"), W = ["salty", "css", "styles", "styled"], X = (s = []) => new RegExp(`\\.(${[...W, ...s].join("|")})\\.`), O = (s, e = []) => X(e).test(s), Y = async (s) => {
14
- const e = k(s), n = o(s, "salty-config.ts"), t = o(e, "salty-config.js");
15
- await M.build({
5
+ import { writeFileSync as $, existsSync as K, mkdirSync as V, statSync as z, readdirSync as G, readFileSync as M } from "fs";
6
+ import { writeFile as J } from "fs/promises";
7
+ import { p as q, a as A, b as L } from "../parse-templates-D4p3pgQR.js";
8
+ const N = (s) => o(s, "./saltygen"), U = ["salty", "css", "styles", "styled"], W = (s = []) => new RegExp(`\\.(${[...U, ...s].join("|")})\\.`), v = (s, e = []) => W(e).test(s), X = async (s) => {
9
+ const e = N(s), n = o(s, "salty.config.ts"), t = o(e, "salty.config.js");
10
+ await I.build({
16
11
  entryPoints: [n],
17
12
  minify: !0,
18
13
  treeShaking: !0,
@@ -21,33 +16,33 @@ const rt = N.createLogger({
21
16
  format: "esm",
22
17
  external: ["react"]
23
18
  });
24
- const c = Date.now(), { config: j } = await import(`${t}?t=${c}`);
25
- return j;
26
- }, Z = async (s) => {
27
- const e = await Y(s), n = /* @__PURE__ */ new Set(), t = (m, l = []) => m ? Object.entries(m).flatMap(([p, i]) => {
28
- if (!i) return;
29
- if (typeof i == "object") return t(i, [...l, p]);
19
+ const c = Date.now(), { config: S } = await import(`${t}?t=${c}`);
20
+ return S;
21
+ }, Y = async (s) => {
22
+ const e = await X(s), n = /* @__PURE__ */ new Set(), t = (u, l = []) => u ? Object.entries(u).flatMap(([p, r]) => {
23
+ if (!r) return;
24
+ if (typeof r == "object") return t(r, [...l, p]);
30
25
  const x = [...l, p].join(".");
31
26
  n.add(`"${x}"`);
32
- const D = [...l.map(I), I(p)].join("-"), { result: P } = U(i);
33
- return `--${D}: ${P};`;
34
- }) : [], c = (m) => m ? Object.entries(m).flatMap(([l, p]) => {
35
- const i = t(p);
36
- return l === "base" ? i.join("") : `${l} { ${i.join("")} }`;
37
- }) : [], j = (m) => m ? Object.entries(m).flatMap(([l, p]) => Object.entries(p).flatMap(([i, x]) => {
38
- const D = t(x, [l]), P = `.${l}-${i}, [data-${l}="${i}"]`, V = D.join("");
39
- return `${P} { ${V} }`;
40
- })) : [], d = t(e.variables), w = c(e.responsiveVariables), a = j(e.conditionalVariables), b = k(s), y = o(b, "css/variables.css"), r = `:root { ${d.join("")} ${w.join("")} } ${a.join("")}`;
41
- $(y, r);
42
- const f = o(b, "types/css-tokens.d.ts"), u = `type VariableTokens = ${[...n].join("|")}; type PropertyValueToken = \`{\${VariableTokens}}\``;
43
- $(f, u);
27
+ const C = [...l.map(R), R(p)].join("-"), { result: D } = L(r);
28
+ return `--${C}: ${D};`;
29
+ }) : [], c = (u) => u ? Object.entries(u).flatMap(([l, p]) => {
30
+ const r = t(p);
31
+ return l === "base" ? r.join("") : `${l} { ${r.join("")} }`;
32
+ }) : [], S = (u) => u ? Object.entries(u).flatMap(([l, p]) => Object.entries(p).flatMap(([r, x]) => {
33
+ const C = t(x, [l]), D = `.${l}-${r}, [data-${l}="${r}"]`, P = C.join("");
34
+ return `${D} { ${P} }`;
35
+ })) : [], d = t(e.variables), w = c(e.responsiveVariables), a = S(e.conditionalVariables), b = N(s), f = o(b, "css/variables.css"), i = `:root { ${d.join("")} ${w.join("")} } ${a.join("")}`;
36
+ $(f, i);
37
+ const y = o(b, "types/css-tokens.d.ts"), m = `type VariableTokens = ${[...n].join("|")}; type PropertyValueToken = \`{\${VariableTokens}}\``;
38
+ $(y, m);
44
39
  const g = o(b, "css/global.css"), F = q(e.global, "");
45
40
  $(g, F);
46
- const S = o(b, "css/templates.css"), C = A(e.templates);
47
- $(S, C);
41
+ const j = o(b, "css/templates.css"), k = A(e.templates);
42
+ $(j, k);
48
43
  }, E = async (s, e) => {
49
44
  const n = T(s), t = o(e, "js", n + ".js");
50
- await M.build({
45
+ await I.build({
51
46
  entryPoints: [s],
52
47
  minify: !0,
53
48
  treeShaking: !0,
@@ -60,106 +55,104 @@ const rt = N.createLogger({
60
55
  });
61
56
  const c = Date.now();
62
57
  return await import(`${t}?t=${c}`);
63
- }, R = async (s) => {
64
- const e = k(s), n = o(e, "salty-config.js"), { config: t } = await import(n);
58
+ }, O = async (s) => {
59
+ const e = N(s), n = o(e, "salty.config.js"), { config: t } = await import(n);
65
60
  return t;
66
- }, it = async (s) => {
61
+ }, ot = async (s) => {
67
62
  try {
68
- const e = [], n = [], t = k(s), c = o(t, "index.css");
63
+ const e = [], n = [], t = N(s), c = o(t, "index.css");
69
64
  (() => {
70
- H(t) && z("rm -rf " + t), v(t), v(o(t, "css")), v(o(t, "types"));
71
- })(), await Z(s);
72
- const d = await R(s);
73
- async function w(r, f) {
74
- const h = J(r);
65
+ K(t) && H("rm -rf " + t), V(t), V(o(t, "css")), V(o(t, "types"));
66
+ })(), await Y(s);
67
+ const d = await O(s);
68
+ async function w(i, y) {
69
+ const h = z(i);
75
70
  if (h.isDirectory()) {
76
- const u = G(r);
77
- await Promise.all(u.map((g) => w(o(r, g), o(f, g))));
78
- } else if (h.isFile() && O(r)) {
79
- const g = await E(r, t), F = [];
71
+ const m = G(i);
72
+ await Promise.all(m.map((g) => w(o(i, g), o(y, g))));
73
+ } else if (h.isFile() && v(i)) {
74
+ const g = await E(i, t), F = [];
80
75
  Object.entries(g).forEach(([l, p]) => {
81
76
  if (p.isKeyframes && p.css) {
82
- const V = `${p.animationName}.css`, B = `css/${V}`, K = o(t, B);
83
- e.push(V), $(K, p.css);
77
+ const P = `${p.animationName}.css`, _ = `css/${P}`, B = o(t, _);
78
+ e.push(P), $(B, p.css);
84
79
  return;
85
80
  }
86
81
  if (!p.generator) return;
87
- const i = p.generator._withBuildContext({
82
+ const r = p.generator._withBuildContext({
88
83
  name: l,
89
84
  config: d
90
- }), x = `${i.hash}-${i.priority}.css`;
91
- n[i.priority] || (n[i.priority] = []), n[i.priority].push(x), F.push(x);
92
- const D = `css/${x}`, P = o(t, D);
93
- $(P, i.css);
85
+ }), x = `${r.hash}-${r.priority}.css`;
86
+ n[r.priority] || (n[r.priority] = []), n[r.priority].push(x), F.push(x);
87
+ const C = `css/${x}`, D = o(t, C);
88
+ $(D, r.css);
94
89
  });
95
- const S = F.map((l) => `@import url('./${l}');`).join(`
96
- `), C = T(r, 6), m = o(t, `css/${C}.css`);
97
- $(m, S);
90
+ const j = F.map((l) => `@import url('./${l}');`).join(`
91
+ `), k = T(i, 6), u = o(t, `css/${k}.css`);
92
+ $(u, j);
98
93
  }
99
94
  }
100
95
  await w(s, t);
101
- const a = e.map((r) => `@import url('./css/${r}');`).join(`
96
+ const a = e.map((i) => `@import url('./css/${i}');`).join(`
102
97
  `);
103
- let y = `@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
98
+ let f = `@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
104
99
 
105
100
  ${["@import url('./css/variables.css');", "@import url('./css/global.css');", "@import url('./css/templates.css');"].join(`
106
101
  `)}
107
102
  ${a}`;
108
103
  if (d.importStrategy !== "component") {
109
- const r = n.flat().map((f) => `@import url('./css/${f}');`).join(`
104
+ const i = n.flat().map((y) => `@import url('./css/${y}');`).join(`
110
105
  `);
111
- y += r;
106
+ f += i;
112
107
  }
113
- $(c, y);
108
+ $(c, f);
114
109
  } catch (e) {
115
110
  console.error(e);
116
111
  }
117
- }, ct = async (s, e) => {
112
+ }, it = async (s, e) => {
118
113
  try {
119
114
  const n = [], t = o(s, "./saltygen"), c = o(t, "index.css");
120
- if (O(e)) {
121
- const d = await R(s), w = await E(e, t);
122
- Object.entries(w).forEach(([f, h]) => {
115
+ if (v(e)) {
116
+ const d = await O(s), w = await E(e, t);
117
+ Object.entries(w).forEach(([y, h]) => {
123
118
  if (!h.generator) return;
124
- const u = h.generator._withBuildContext({
125
- name: f,
119
+ const m = h.generator._withBuildContext({
120
+ name: y,
126
121
  config: d
127
- }), g = `${u.hash}-${u.priority}.css`, F = `css/${g}`, S = o(t, F);
128
- n.push(g), $(S, u.css);
122
+ }), g = `${m.hash}-${m.priority}.css`, F = `css/${g}`, j = o(t, F);
123
+ n.push(g), $(j, m.css);
129
124
  });
130
- const a = _(c, "utf8").split(`
131
- `), b = n.map((f) => `@import url('../saltygen/css/${f}');`), r = [.../* @__PURE__ */ new Set([...a, ...b])].join(`
125
+ const a = M(c, "utf8").split(`
126
+ `), b = n.map((y) => `@import url('../saltygen/css/${y}');`), i = [.../* @__PURE__ */ new Set([...a, ...b])].join(`
132
127
  `);
133
- $(c, r);
128
+ $(c, i);
134
129
  }
135
130
  } catch (n) {
136
131
  console.error(n);
137
132
  }
138
- }, at = async (s, e) => {
133
+ }, rt = async (s, e) => {
139
134
  try {
140
135
  const n = o(s, "./saltygen");
141
- if (O(e)) {
142
- let c = _(e, "utf8");
143
- c.replace(/^(?!export\s)const\s.*/gm, (y) => `export ${y}`) !== c && await L(e, c);
144
- const d = await R(s), w = await E(e, n);
136
+ if (v(e)) {
137
+ const c = M(e, "utf8");
138
+ c.replace(/^(?!export\s)const\s.*/gm, (f) => `export ${f}`) !== c && await J(e, c);
139
+ const d = await O(s), w = await E(e, n);
145
140
  let a = c;
146
- Object.entries(w).forEach(([y, r]) => {
147
- var m;
148
- if (r.isKeyframes) {
149
- console.log("value", r);
141
+ Object.entries(w).forEach(([f, i]) => {
142
+ var j;
143
+ if (i.isKeyframes) {
144
+ console.log("value", i);
150
145
  return;
151
146
  }
152
- if (!r.generator) return;
153
- const f = r.generator._withBuildContext({
154
- name: y,
147
+ if (!i.generator) return;
148
+ const y = i.generator._withBuildContext({
149
+ name: f,
155
150
  config: d
156
- }), h = new RegExp(`${y}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(c);
151
+ }), h = new RegExp(`${f}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(c);
157
152
  if (!h)
158
153
  return console.error("Could not find the original declaration");
159
- const u = (m = h.at(1)) == null ? void 0 : m.trim(), { element: g, variantKeys: F } = f.props, S = `${y} = styled(${u}, "${f.classNames}", "${f._callerName}", ${JSON.stringify(g)}, ${JSON.stringify(
160
- F
161
- )});`, C = new RegExp(`${y}[=\\s]+[^()]+styled\\(([^,]+),[^;]+;`, "g");
162
- a = a.replace(C, S);
154
+ const m = (j = h.at(1)) == null ? void 0 : j.trim(), g = `${f} = styled(${m}, "${y.classNames}", "${y._callerName}", ${JSON.stringify(y.props)});`, F = new RegExp(`${f}[=\\s]+[^()]+styled\\(([^,]+),[^;]+;`, "g");
155
+ a = a.replace(F, g);
163
156
  });
164
157
  const b = T(e, 6);
165
158
  return d.importStrategy === "component" && (a = `import '../../saltygen/css/${b}.css';
@@ -171,12 +164,11 @@ ${a}`), a = a.replace("{ styled }", "{ styledClient as styled }"), a = a.replace
171
164
  };
172
165
  export {
173
166
  E as compileSaltyFile,
174
- it as generateCss,
175
- ct as generateFile,
176
- Z as generateVariables,
177
- O as isSaltyFile,
178
- rt as logger,
179
- at as minimizeFile,
180
- W as saltyFileExtensions,
181
- X as saltyFileRegExp
167
+ Y as generateConfigStyles,
168
+ ot as generateCss,
169
+ it as generateFile,
170
+ v as isSaltyFile,
171
+ rt as minimizeFile,
172
+ U as saltyFileExtensions,
173
+ W as saltyFileRegExp
182
174
  };
@@ -0,0 +1 @@
1
+ "use strict";const n=e=>String.fromCharCode(e+(e>25?39:97)),i=(e,r)=>{let t="",a;for(a=Math.abs(e);a>52;a=a/52|0)t=n(a%52)+t;return t=n(a%52)+t,t.length<r?t=t.padStart(r,"a"):t.length>r&&(t=t.slice(-r)),t},o=(e,r)=>{let t=r.length;for(;t;)e=e*33^r.charCodeAt(--t);return e},c=(e,r=3)=>{const t=o(5381,JSON.stringify(e))>>>0;return i(t,r)};function s(e){return e?typeof e!="string"?s(String(e)):e.replace(/\s/g,"-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(r,t)=>(t>0?"-":"")+r.toLowerCase()):""}exports.dashCase=s;exports.toHash=c;
@@ -0,0 +1,19 @@
1
+ const n = (e) => String.fromCharCode(e + (e > 25 ? 39 : 97)), o = (e, r) => {
2
+ let t = "", a;
3
+ for (a = Math.abs(e); a > 52; a = a / 52 | 0) t = n(a % 52) + t;
4
+ return t = n(a % 52) + t, t.length < r ? t = t.padStart(r, "a") : t.length > r && (t = t.slice(-r)), t;
5
+ }, i = (e, r) => {
6
+ let t = r.length;
7
+ for (; t; ) e = e * 33 ^ r.charCodeAt(--t);
8
+ return e;
9
+ }, c = (e, r = 3) => {
10
+ const t = i(5381, JSON.stringify(e)) >>> 0;
11
+ return o(t, r);
12
+ };
13
+ function s(e) {
14
+ return e ? typeof e != "string" ? s(String(e)) : e.replace(/\s/g, "-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (r, t) => (t > 0 ? "-" : "") + r.toLowerCase()) : "";
15
+ }
16
+ export {
17
+ s as d,
18
+ c as t
19
+ };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../util/index.cjs"),i=require("../parse-templates-BY1Xai-_.cjs");class o{constructor(t,s){this.tagName=t,this.params=s}get hash(){return n.toHash(this.params.base||this.params)}get priority(){var t;return typeof this.tagName=="function"||typeof this.tagName=="object"?(((t=this.tagName.generator)==null?void 0:t.priority)||0)+1:0}get classNames(){const t=[this.hash],{className:s}=this.params;return s&&t.push(s),t.join(" ")}get cssClassName(){return this.hash}get cssDisplayNameVar(){return`--${this.hash}-display-name: ${this._callerName};`}get templateKeys(){var t;return(t=this._context)!=null&&t.config.templates?i.getTemplateKeys(this._context.config.templates):[]}get css(){var a;const{base:t={},variants:s={},compoundVariants:e=[]}=this.params,r={...t,variants:s,compoundVariants:e};return i.parseStyles(r,`.${this.cssClassName}`,this.priority,(a=this._context)==null?void 0:a.config)}get props(){const{element:t}=this.params,s=this.params.variants?Object.keys(this.params.variants).map(e=>{var a;const r=(a=this.params.defaultVariants)==null?void 0:a[e];return r!==void 0?`${e}=${String(r)}`:e}):void 0;return{element:t,variantKeys:s}}_withBuildContext(t){this._context=t;const{name:s,config:e}=t;return this._callerName=s,this}}exports.StyleComponentGenerator=o;
1
+ "use strict";var m=Object.defineProperty;var l=(a,t,s)=>t in a?m(a,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[t]=s;var c=(a,t,s)=>l(a,typeof t!="symbol"?t+"":t,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../dash-case-DKzpenwY.cjs"),p=require("../parse-templates-W0YfTmOT.cjs");class g{constructor(t,s){c(this,"_callerName");c(this,"_context");this.tagName=t,this.params=s}get hash(){return u.toHash(this.params.base||this.params)}get priority(){var t;return typeof this.tagName=="function"||typeof this.tagName=="object"?(((t=this.tagName.generator)==null?void 0:t.priority)||0)+1:0}get classNames(){const t=[this.hash],{className:s}=this.params;return s&&t.push(s),t.join(" ")}get cssClassName(){return this.hash}get cssDisplayNameVar(){return`--${this.hash}-display-name: ${this._callerName};`}get templateKeys(){var t;return(t=this._context)!=null&&t.config.templates?p.getTemplateKeys(this._context.config.templates):[]}get css(){var e;const{base:t={},variants:s={},compoundVariants:r=[]}=this.params,i={...t,variants:s,compoundVariants:r};return p.parseStyles(i,`.${this.cssClassName}`,this.priority,(e=this._context)==null?void 0:e.config)}get props(){const{element:t}=this.params,s=this.params.variants?Object.keys(this.params.variants).map(e=>{var n;const o=(n=this.params.defaultVariants)==null?void 0:n[e];return o!==void 0?`${e}=${String(o)}`:e}):void 0,r=new Set([]),i=/\{props\.([\w\d]+)\}/gi.exec(JSON.stringify(this.params.base));return i&&i.forEach((e,o,n)=>{const h=n.at(1);h&&r.add(h)}),{element:t,variantKeys:s,propValueKeys:[...r]}}_withBuildContext(t){this._context=t;const{name:s,config:r}=t;return this._callerName=s,this}}exports.StyleComponentGenerator=g;
@@ -1,11 +1,16 @@
1
- import { toHash as i } from "../util/index.js";
2
- import { g as n, p as o } from "../parse-templates-BOSK0Tb6.js";
3
- class p {
1
+ var h = Object.defineProperty;
2
+ var m = (e, t, s) => t in e ? h(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
3
+ var c = (e, t, s) => m(e, typeof t != "symbol" ? t + "" : t, s);
4
+ import { t as l } from "../dash-case-DMQMcCO6.js";
5
+ import { g, p as u } from "../parse-templates-D4p3pgQR.js";
6
+ class d {
4
7
  constructor(t, s) {
8
+ c(this, "_callerName");
9
+ c(this, "_context");
5
10
  this.tagName = t, this.params = s;
6
11
  }
7
12
  get hash() {
8
- return i(this.params.base || this.params);
13
+ return l(this.params.base || this.params);
9
14
  }
10
15
  get priority() {
11
16
  var t;
@@ -23,30 +28,34 @@ class p {
23
28
  }
24
29
  get templateKeys() {
25
30
  var t;
26
- return (t = this._context) != null && t.config.templates ? n(this._context.config.templates) : [];
31
+ return (t = this._context) != null && t.config.templates ? g(this._context.config.templates) : [];
27
32
  }
28
33
  get css() {
29
- var e;
30
- const { base: t = {}, variants: s = {}, compoundVariants: a = [] } = this.params, r = { ...t, variants: s, compoundVariants: a };
31
- return o(r, `.${this.cssClassName}`, this.priority, (e = this._context) == null ? void 0 : e.config);
34
+ var a;
35
+ const { base: t = {}, variants: s = {}, compoundVariants: r = [] } = this.params, i = { ...t, variants: s, compoundVariants: r };
36
+ return u(i, `.${this.cssClassName}`, this.priority, (a = this._context) == null ? void 0 : a.config);
32
37
  }
33
38
  get props() {
34
39
  const { element: t } = this.params, s = this.params.variants ? Object.keys(this.params.variants).map((a) => {
35
- var e;
36
- const r = (e = this.params.defaultVariants) == null ? void 0 : e[a];
37
- return r !== void 0 ? `${a}=${String(r)}` : a;
38
- }) : void 0;
39
- return {
40
+ var n;
41
+ const o = (n = this.params.defaultVariants) == null ? void 0 : n[a];
42
+ return o !== void 0 ? `${a}=${String(o)}` : a;
43
+ }) : void 0, r = /* @__PURE__ */ new Set([]), i = /\{props\.([\w\d]+)\}/gi.exec(JSON.stringify(this.params.base));
44
+ return i && i.forEach((a, o, n) => {
45
+ const p = n.at(1);
46
+ p && r.add(p);
47
+ }), {
40
48
  element: t,
41
- variantKeys: s
49
+ variantKeys: s,
50
+ propValueKeys: [...r]
42
51
  };
43
52
  }
44
53
  _withBuildContext(t) {
45
54
  this._context = t;
46
- const { name: s, config: a } = t;
55
+ const { name: s, config: r } = t;
47
56
  return this._callerName = s, this;
48
57
  }
49
58
  }
50
59
  export {
51
- p as StyleComponentGenerator
60
+ d as StyleComponentGenerator
52
61
  };
@@ -1,4 +1,9 @@
1
1
  import { StyledParams, Tag } from '../types';
2
+ export interface GeneratorProps {
3
+ element?: string;
4
+ variantKeys?: string[];
5
+ propValueKeys?: string[];
6
+ }
2
7
  export declare class StyleComponentGenerator {
3
8
  tagName: Tag<any>;
4
9
  params: StyledParams;
@@ -15,10 +20,7 @@ export declare class StyleComponentGenerator {
15
20
  get cssDisplayNameVar(): string;
16
21
  get templateKeys(): string[];
17
22
  get css(): string;
18
- get props(): {
19
- element: string | undefined;
20
- variantKeys: string[] | undefined;
21
- };
23
+ get props(): GeneratorProps;
22
24
  _withBuildContext(context: {
23
25
  name: string;
24
26
  config: any;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="/* Empty */";exports.default=e;
@@ -0,0 +1,4 @@
1
+ const t = "/* Empty */";
2
+ export {
3
+ t as default
4
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salty-css/core",
3
- "version": "0.0.1-alpha.13",
3
+ "version": "0.0.1-alpha.15",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "typings": "./dist/index.d.ts",
@@ -23,6 +23,8 @@
23
23
  "name": "core"
24
24
  },
25
25
  "peerDependencies": {
26
+ "commander": ">=12.x",
27
+ "ejs": ">=3.x",
26
28
  "esbuild": ">=0.21.x",
27
29
  "react": ">=18.x || >=19.x",
28
30
  "winston": ">=3.x"
@@ -52,5 +54,9 @@
52
54
  "import": "./util/index.js",
53
55
  "require": "./util/index.cjs"
54
56
  }
57
+ },
58
+ "bin": {
59
+ "salty-css": "./bin/index.js",
60
+ "salty-css-cjs": "./bin/index.cjs"
55
61
  }
56
62
  }
@@ -1,22 +1,23 @@
1
- import { dashCase as O } from "./util/index.js";
2
- const N = (s, r) => {
3
- if (typeof s != "string") return { result: s };
4
- if (!r) return { result: s };
1
+ import { d as O } from "./dash-case-DMQMcCO6.js";
2
+ const N = (t, r) => {
3
+ if (typeof t != "string") return { result: t };
4
+ if (!r) return { result: t };
5
5
  const e = [];
6
6
  return Object.values(r).forEach((n) => {
7
7
  const { pattern: o, transform: c } = n;
8
- s = s.replace(o, (h) => {
8
+ t = t.replace(o, (h) => {
9
9
  const { value: i, css: m } = c(h);
10
10
  return m && e.push(m), i;
11
11
  });
12
- }), { result: s, additionalCss: e };
13
- }, P = (s) => typeof s != "string" ? { result: s } : /\{[^{}]+\}/g.test(s) ? { result: s.replace(/\{([^{}]+)\}/g, (...n) => `var(--${O(n[1].replaceAll(".", "-"))})`) } : { result: s }, d = (s, r, e, n) => {
14
- const o = [], c = Object.entries(s).reduce((i, [m, t]) => {
12
+ }), { result: t, additionalCss: e };
13
+ }, P = (t) => typeof t != "string" ? { result: t } : /\{[^{}]+\}/g.test(t) ? { result: t.replace(/\{([^{}]+)\}/g, (...n) => `var(--${O(n[1].replaceAll(".", "-"))})`) } : { result: t }, d = (t, r, e, n) => {
14
+ if (!t) return "";
15
+ const o = [], c = Object.entries(t).reduce((i, [m, s]) => {
15
16
  const p = m.trim();
16
- if (typeof t == "function" && (t = t()), typeof t == "object") {
17
- if (!t) return i;
17
+ if (typeof s == "function" && (s = s()), typeof s == "object") {
18
+ if (!s) return i;
18
19
  if (p === "variants")
19
- return Object.entries(t).forEach(([u, f]) => {
20
+ return Object.entries(s).forEach(([u, f]) => {
20
21
  f && Object.entries(f).forEach(([b, j]) => {
21
22
  if (!j) return;
22
23
  const l = `${r}.${u}-${b}`, y = d(j, l, e);
@@ -26,39 +27,39 @@ const N = (s, r) => {
26
27
  if (p === "defaultVariants")
27
28
  return i;
28
29
  if (p === "compoundVariants")
29
- return t.forEach((u) => {
30
+ return s.forEach((u) => {
30
31
  const { css: f, ...b } = u, j = Object.entries(b).reduce((y, [V, W]) => `${y}.${V}-${W}`, r), l = d(f, j, e);
31
32
  o.push(l);
32
33
  }), i;
33
34
  if (p.startsWith("@")) {
34
- const u = d(t, r, e), f = `${p} {
35
+ const u = d(s, r, e), f = `${p} {
35
36
  ${u.replace(`
36
37
  `, `
37
38
  `)}
38
39
  }`;
39
40
  return o.push(f), i;
40
41
  }
41
- const $ = m.includes("&") ? p.replace("&", r) : p.startsWith(":") ? `${r}${p}` : `${r} ${p}`, a = d(t, $, e);
42
+ const $ = m.includes("&") ? p.replace("&", r) : p.startsWith(":") ? `${r}${p}` : `${r} ${p}`, a = d(s, $, e);
42
43
  return o.push(a), i;
43
44
  }
44
45
  if (n != null && n.templates && n.templates[p]) {
45
- const a = t.split(".").reduce((f, b) => f[b], n.templates[p]), u = d(a, "");
46
+ const a = s.split(".").reduce((f, b) => f[b], n.templates[p]), u = d(a, "");
46
47
  return `${i}${u}`;
47
48
  }
48
49
  const g = p.startsWith("-") ? p : O(p), E = ($, a = ";") => i = `${i}${$}${a}`, S = ($) => E(`${g}:${$}`);
49
- if (typeof t == "number") return S(t);
50
- if (typeof t != "string")
51
- if ("toString" in t) t = t.toString();
50
+ if (typeof s == "number") return S(s);
51
+ if (typeof s != "string")
52
+ if ("toString" in s) s = s.toString();
52
53
  else return i;
53
54
  const { modifiers: k } = n || {}, T = function* () {
54
- yield P(t), yield N(t, k);
55
+ yield P(s), yield N(s, k);
55
56
  }();
56
57
  for (const { result: $, additionalCss: a = [] } of T)
57
- t = $, a.forEach((u) => {
58
+ s = $, a.forEach((u) => {
58
59
  const f = d(u, "");
59
60
  E(f, "");
60
61
  });
61
- return S(t);
62
+ return S(s);
62
63
  }, "");
63
64
  if (!c) return o.join(`
64
65
  `);
@@ -66,9 +67,10 @@ const N = (s, r) => {
66
67
  let h = "";
67
68
  return e !== void 0 ? h = `@layer l${e} { ${r} { ${c} } }` : h = `${r} { ${c} }`, [h, ...o].join(`
68
69
  `);
69
- }, _ = (s, r = []) => {
70
+ }, _ = (t, r = []) => {
71
+ if (!t) return "";
70
72
  const e = [], n = {};
71
- if (Object.entries(s).forEach(([o, c]) => {
73
+ if (Object.entries(t).forEach(([o, c]) => {
72
74
  if (typeof c == "object") {
73
75
  if (!c) return;
74
76
  const h = o.trim(), i = _(c, [...r, h]);
@@ -81,7 +83,7 @@ const N = (s, r) => {
81
83
  }
82
84
  return e.join(`
83
85
  `);
84
- }, A = (s) => Object.keys(s);
86
+ }, A = (t) => Object.keys(t);
85
87
  export {
86
88
  _ as a,
87
89
  P as b,
@@ -0,0 +1,8 @@
1
+ "use strict";const O=require("./dash-case-DKzpenwY.cjs"),N=(t,e)=>{if(typeof t!="string")return{result:t};if(!e)return{result:t};const r=[];return Object.values(e).forEach(n=>{const{pattern:o,transform:c}=n;t=t.replace(o,a=>{const{value:i,css:l}=c(a);return l&&r.push(l),i})}),{result:t,additionalCss:r}},k=t=>typeof t!="string"?{result:t}:/\{[^{}]+\}/g.test(t)?{result:t.replace(/\{([^{}]+)\}/g,(...n)=>`var(--${O.dashCase(n[1].replaceAll(".","-"))})`)}:{result:t},h=(t,e,r,n)=>{if(!t)return"";const o=[],c=Object.entries(t).reduce((i,[l,s])=>{const p=l.trim();if(typeof s=="function"&&(s=s()),typeof s=="object"){if(!s)return i;if(p==="variants")return Object.entries(s).forEach(([u,f])=>{f&&Object.entries(f).forEach(([m,j])=>{if(!j)return;const y=`${e}.${u}-${m}`,b=h(j,y,r);o.push(b)})}),i;if(p==="defaultVariants")return i;if(p==="compoundVariants")return s.forEach(u=>{const{css:f,...m}=u,j=Object.entries(m).reduce((b,[q,K])=>`${b}.${q}-${K}`,e),y=h(f,j,r);o.push(y)}),i;if(p.startsWith("@")){const u=h(s,e,r),f=`${p} {
2
+ ${u.replace(`
3
+ `,`
4
+ `)}
5
+ }`;return o.push(f),i}const $=l.includes("&")?p.replace("&",e):p.startsWith(":")?`${e}${p}`:`${e} ${p}`,d=h(s,$,r);return o.push(d),i}if(n!=null&&n.templates&&n.templates[p]){const d=s.split(".").reduce((f,m)=>f[m],n.templates[p]),u=h(d,"");return`${i}${u}`}const V=p.startsWith("-")?p:O.dashCase(p),T=($,d=";")=>i=`${i}${$}${d}`,S=$=>T(`${V}:${$}`);if(typeof s=="number")return S(s);if(typeof s!="string")if("toString"in s)s=s.toString();else return i;const{modifiers:g}=n||{},W=function*(){yield k(s),yield N(s,g)}();for(const{result:$,additionalCss:d=[]}of W)s=$,d.forEach(u=>{const f=h(u,"");T(f,"")});return S(s)},"");if(!c)return o.join(`
6
+ `);if(!e)return c;let a="";return r!==void 0?a=`@layer l${r} { ${e} { ${c} } }`:a=`${e} { ${c} }`,[a,...o].join(`
7
+ `)},E=(t,e=[])=>{if(!t)return"";const r=[],n={};if(Object.entries(t).forEach(([o,c])=>{if(typeof c=="object"){if(!c)return;const a=o.trim(),i=E(c,[...e,a]);r.push(i)}else n[o]=c}),Object.keys(n).length){const o=e.map(O.dashCase).join("-"),c=h(n,`.${o}`);r.push(c)}return r.join(`
8
+ `)},P=t=>Object.keys(t);exports.getTemplateKeys=P;exports.parseStyles=h;exports.parseTemplates=E;exports.parseValueTokens=k;
@@ -0,0 +1,6 @@
1
+ function p(e) {
2
+ return e ? typeof e != "string" ? p(String(e)) : e.replace(/\s/g, "-").replace(/[-_]([a-z0-9])/g, (a) => a[1].toUpperCase()).replace(/^[a-z]/, (a) => a.toUpperCase()) : "";
3
+ }
4
+ export {
5
+ p
6
+ };
@@ -0,0 +1 @@
1
+ "use strict";function r(e){return e?typeof e!="string"?r(String(e)):e.replace(/\s/g,"-").replace(/[-_]([a-z0-9])/g,a=>a[1].toUpperCase()).replace(/^[a-z]/,a=>a.toUpperCase()):""}exports.pascalCase=r;
@@ -0,0 +1,11 @@
1
+ const e = `import { styled } from "@salty-css/react/styled";
2
+
3
+ export const <%- name %> = styled('<%- tag %>', {
4
+ <% if(className) { %>className: '<%- className %>',<% } %>
5
+ base: {
6
+ // Add your styles here
7
+ }
8
+ })`;
9
+ export {
10
+ e as default
11
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=`import { styled } from "@salty-css/react/styled";
2
+
3
+ export const <%- name %> = styled('<%- tag %>', {
4
+ <% if(className) { %>className: '<%- className %>',<% } %>
5
+ base: {
6
+ // Add your styles here
7
+ }
8
+ })`;exports.default=e;
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=`import { defineConfig } from '@salty-css/core/config';
2
+
3
+ export const config = defineConfig({
4
+ // Add your custom config here
5
+ });
6
+ `;exports.default=o;
@@ -0,0 +1,9 @@
1
+ const n = `import { defineConfig } from '@salty-css/core/config';
2
+
3
+ export const config = defineConfig({
4
+ // Add your custom config here
5
+ });
6
+ `;
7
+ export {
8
+ n as default
9
+ };
package/types/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export type CreateElementProps = {
11
11
  /** vks = Variant key set */
12
12
  _vks?: Set<string>;
13
13
  };
14
- export type StyledComponentProps = Record<string, unknown> & CreateElementProps & CssRuntimeValues;
14
+ export type StyledComponentProps = Record<string, unknown> & CreateElementProps;
15
15
  type FnComponent<PROPS extends StyledComponentProps> = {
16
16
  (props: PROPS): ReactNode;
17
17
  generator?: StyleComponentGenerator;
@@ -39,13 +39,14 @@ type Variants = {
39
39
  compoundVariants?: CompoundVariant[];
40
40
  };
41
41
  type VariantPropValue<T> = T extends 'true' ? 'true' | true : T;
42
- export type VariantProps<STYLES extends StyledParams> = STYLES['variants'] extends undefined ? {} : {
42
+ export type VariantProps<STYLES extends StyledParams> = STYLES['variants'] extends undefined ? object : {
43
43
  [K in keyof STYLES['variants']]?: VariantPropValue<keyof STYLES['variants'][K]> | '';
44
44
  };
45
- export type ParentComponentProps<TAG extends Tag<any>> = TAG extends (props: infer P) => ReactNode ? P : unknown;
46
- export type CssRuntimeValues = {
47
- cssValues?: Record<string, unknown>;
45
+ type CssValuePropKey = `props-${string}`;
46
+ export type ValueProps = {
47
+ [key: CssValuePropKey]: string;
48
48
  };
49
+ export type ParentComponentProps<TAG extends Tag<any>> = TAG extends (props: infer P) => ReactNode ? P : unknown;
49
50
  type StylePropertyValue = Record<never, never> & unknown;
50
51
  export type CssStyles = {
51
52
  [key in StyleKeys | OrString]?: StyleValue<key> | StylePropertyValue | PropertyValueToken | CssStyles;
@@ -0,0 +1 @@
1
+ export declare function camelCase(str: PropertyKey): string;
package/util/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=t=>String.fromCharCode(t+(t>25?39:97)),o=(t,r)=>{let e="",a;for(a=Math.abs(t);a>52;a=a/52|0)e=n(a%52)+e;return e=n(a%52)+e,e.length<r?e=e.padStart(r,"a"):e.length>r&&(e=e.slice(-r)),e},i=(t,r)=>{let e=r.length;for(;e;)t=t*33^r.charCodeAt(--e);return t},s=(t,r=3)=>{const e=i(5381,JSON.stringify(t))>>>0;return o(e,r)};function c(t){return t?typeof t!="string"?String(t):t.replace(/\s/g,"-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(r,e)=>(e>0?"-":"")+r.toLowerCase()):""}exports.dashCase=c;exports.toHash=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../dash-case-DKzpenwY.cjs"),t=require("../pascal-case-iWoaJWwT.cjs");function s(e){return e?typeof e!="string"?s(String(e)):e.replace(/\s/g,"-").replace(/-([a-z])/g,r=>r[1].toUpperCase()):""}exports.dashCase=a.dashCase;exports.toHash=a.toHash;exports.pascalCase=t.pascalCase;exports.camelCase=s;
package/util/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ export * from './camel-case';
1
2
  export * from './dash-case';
3
+ export * from './pascal-case';
2
4
  export * from './to-hash';
package/util/index.js CHANGED
@@ -1,19 +1,11 @@
1
- const n = (e) => String.fromCharCode(e + (e > 25 ? 39 : 97)), o = (e, r) => {
2
- let t = "", a;
3
- for (a = Math.abs(e); a > 52; a = a / 52 | 0) t = n(a % 52) + t;
4
- return t = n(a % 52) + t, t.length < r ? t = t.padStart(r, "a") : t.length > r && (t = t.slice(-r)), t;
5
- }, i = (e, r) => {
6
- let t = r.length;
7
- for (; t; ) e = e * 33 ^ r.charCodeAt(--t);
8
- return e;
9
- }, s = (e, r = 3) => {
10
- const t = i(5381, JSON.stringify(e)) >>> 0;
11
- return o(t, r);
12
- };
13
- function c(e) {
14
- return e ? typeof e != "string" ? String(e) : e.replace(/\s/g, "-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (r, t) => (t > 0 ? "-" : "") + r.toLowerCase()) : "";
1
+ import { d as o, t as s } from "../dash-case-DMQMcCO6.js";
2
+ import { p as f } from "../pascal-case-BQpR5PdN.js";
3
+ function r(e) {
4
+ return e ? typeof e != "string" ? r(String(e)) : e.replace(/\s/g, "-").replace(/-([a-z])/g, (a) => a[1].toUpperCase()) : "";
15
5
  }
16
6
  export {
17
- c as dashCase,
7
+ r as camelCase,
8
+ o as dashCase,
9
+ f as pascalCase,
18
10
  s as toHash
19
11
  };
@@ -0,0 +1 @@
1
+ export declare function pascalCase(str: PropertyKey): string;
@@ -1,8 +0,0 @@
1
- "use strict";const O=require("./util/index.cjs"),K=(s,e)=>{if(typeof s!="string")return{result:s};if(!e)return{result:s};const r=[];return Object.values(e).forEach(n=>{const{pattern:o,transform:c}=n;s=s.replace(o,a=>{const{value:i,css:l}=c(a);return l&&r.push(l),i})}),{result:s,additionalCss:r}},k=s=>typeof s!="string"?{result:s}:/\{[^{}]+\}/g.test(s)?{result:s.replace(/\{([^{}]+)\}/g,(...n)=>`var(--${O.dashCase(n[1].replaceAll(".","-"))})`)}:{result:s},h=(s,e,r,n)=>{const o=[],c=Object.entries(s).reduce((i,[l,t])=>{const p=l.trim();if(typeof t=="function"&&(t=t()),typeof t=="object"){if(!t)return i;if(p==="variants")return Object.entries(t).forEach(([u,f])=>{f&&Object.entries(f).forEach(([m,j])=>{if(!j)return;const y=`${e}.${u}-${m}`,b=h(j,y,r);o.push(b)})}),i;if(p==="defaultVariants")return i;if(p==="compoundVariants")return t.forEach(u=>{const{css:f,...m}=u,j=Object.entries(m).reduce((b,[_,q])=>`${b}.${_}-${q}`,e),y=h(f,j,r);o.push(y)}),i;if(p.startsWith("@")){const u=h(t,e,r),f=`${p} {
2
- ${u.replace(`
3
- `,`
4
- `)}
5
- }`;return o.push(f),i}const $=l.includes("&")?p.replace("&",e):p.startsWith(":")?`${e}${p}`:`${e} ${p}`,d=h(t,$,r);return o.push(d),i}if(n!=null&&n.templates&&n.templates[p]){const d=t.split(".").reduce((f,m)=>f[m],n.templates[p]),u=h(d,"");return`${i}${u}`}const V=p.startsWith("-")?p:O.dashCase(p),T=($,d=";")=>i=`${i}${$}${d}`,S=$=>T(`${V}:${$}`);if(typeof t=="number")return S(t);if(typeof t!="string")if("toString"in t)t=t.toString();else return i;const{modifiers:g}=n||{},W=function*(){yield k(t),yield K(t,g)}();for(const{result:$,additionalCss:d=[]}of W)t=$,d.forEach(u=>{const f=h(u,"");T(f,"")});return S(t)},"");if(!c)return o.join(`
6
- `);if(!e)return c;let a="";return r!==void 0?a=`@layer l${r} { ${e} { ${c} } }`:a=`${e} { ${c} }`,[a,...o].join(`
7
- `)},E=(s,e=[])=>{const r=[],n={};if(Object.entries(s).forEach(([o,c])=>{if(typeof c=="object"){if(!c)return;const a=o.trim(),i=E(c,[...e,a]);r.push(i)}else n[o]=c}),Object.keys(n).length){const o=e.map(O.dashCase).join("-"),c=h(n,`.${o}`);r.push(c)}return r.join(`
8
- `)},N=s=>Object.keys(s);exports.getTemplateKeys=N;exports.parseStyles=h;exports.parseTemplates=E;exports.parseValueTokens=k;