|
|
|
@ -17,31 +17,34 @@ export function style(options) { |
|
|
|
|
)}</style>`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export function inline(options, tag) { |
|
|
|
|
if (!options.inline || options.css === "none") return ""; |
|
|
|
|
const styles = reduceVariables(load(options), options) |
|
|
|
|
.filter(({ selectors }) => selectors && selectors.includes(tag)) |
|
|
|
|
.reduce((style, { declarations }) => { |
|
|
|
|
declarations.forEach(({ property, value }) => { |
|
|
|
|
style = `${style}${property}:${value};`; |
|
|
|
|
}); |
|
|
|
|
return style; |
|
|
|
|
}, ""); |
|
|
|
|
return styles !== "" ? ` style="${styles}"` : ""; |
|
|
|
|
} |
|
|
|
|
export const inline = (options) => { |
|
|
|
|
const rules = load(options); |
|
|
|
|
return (tag) => { |
|
|
|
|
if (!options.inline || options.css === "none") return ""; |
|
|
|
|
const styles = reduceVariables(rules, options) |
|
|
|
|
.filter(({ selectors }) => selectors && selectors.includes(tag)) |
|
|
|
|
.reduce((style, { declarations }) => { |
|
|
|
|
declarations.forEach(({ property, value }) => { |
|
|
|
|
style = `${style}${property}:${value};`; |
|
|
|
|
}); |
|
|
|
|
return style; |
|
|
|
|
}, ""); |
|
|
|
|
return styles !== "" ? ` style="${styles}"` : ""; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export function load(options) { |
|
|
|
|
console.log("load:", options.css); |
|
|
|
|
options.css = |
|
|
|
|
options.css || (!options.body || !options.inline ? "web" : "core"); |
|
|
|
|
options.css || |
|
|
|
|
(!options.body || !options.inline ? "gmi-web.css" : "gmi.css"); |
|
|
|
|
console.log("load:", options.css); |
|
|
|
|
if ( |
|
|
|
|
["gmi", "web", "gmi.css", "gmi-web.css"].includes(options.css) || |
|
|
|
|
existsSync(options.css) |
|
|
|
|
) { |
|
|
|
|
const packageRoot = (file) => |
|
|
|
|
path.resolve(path.dirname(new URL(import.meta.url).pathname), file); |
|
|
|
|
return resolveImports( |
|
|
|
|
parse( |
|
|
|
|
return parse( |
|
|
|
|
readFileSync( |
|
|
|
|
path.resolve( |
|
|
|
|
["gmi-web.css", "web"].includes(options.css) |
|
|
|
@ -53,7 +56,6 @@ export function load(options) { |
|
|
|
|
"utf-8" |
|
|
|
|
) |
|
|
|
|
).stylesheet.rules |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
throw new Error(`Cannot find file ${options.css}.`); |
|
|
|
|
} |
|
|
|
@ -71,16 +73,6 @@ export function rootVariables(rules) { |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function resolveImports(rules) { |
|
|
|
|
const imports = rules |
|
|
|
|
.filter(({ type }) => type === "import") |
|
|
|
|
.map((rule) => load({ css: rule.import.replace(/\"/g, "") })); |
|
|
|
|
|
|
|
|
|
return [] |
|
|
|
|
.concat(...imports) |
|
|
|
|
.concat(rules.filter(({ type }) => type !== "import")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function reduceVariables(rules, options) { |
|
|
|
|
const defaultVariables = rootVariables(rules); |
|
|
|
|
const CSS_VAR = /(^var\((?<key>.+)\)|(?<val>.+))/; |
|
|
|
@ -91,9 +83,13 @@ function reduceVariables(rules, options) { |
|
|
|
|
declarations: rule.declarations.map((declaration) => { |
|
|
|
|
let { key, val } = CSS_VAR.exec(declaration.value).groups; |
|
|
|
|
// only one level of variable referencing is supported
|
|
|
|
|
key = CSS_VAR.exec(options[key] || defaultVariables[key]).groups.key || key; |
|
|
|
|
key = |
|
|
|
|
CSS_VAR.exec(options[key] || defaultVariables[key]).groups.key || |
|
|
|
|
key; |
|
|
|
|
return Object.assign(declaration, { |
|
|
|
|
value: key ? options[key] || defaultVariables[key] : declaration.value, |
|
|
|
|
value: key |
|
|
|
|
? options[key] || defaultVariables[key] |
|
|
|
|
: declaration.value, |
|
|
|
|
}); |
|
|
|
|
}), |
|
|
|
|
}); |
|
|
|
|