|
|
@@ -0,0 +1,6547 @@
|
|
|
+(() => {
|
|
|
+ var __create = Object.create;
|
|
|
+ var __defProp = Object.defineProperty;
|
|
|
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
+ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
+ var __getProtoOf = Object.getPrototypeOf;
|
|
|
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
|
+ var __commonJS = (cb, mod) => function __require() {
|
|
|
+ try {
|
|
|
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
|
+ } catch (e) {
|
|
|
+ throw mod = 0, e;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ var __copyProps = (to, from, except, desc) => {
|
|
|
+ if (from && typeof from === "object" || typeof from === "function") {
|
|
|
+ for (let key of __getOwnPropNames(from))
|
|
|
+ if (!__hasOwnProp.call(to, key) && key !== except)
|
|
|
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
|
+ }
|
|
|
+ return to;
|
|
|
+ };
|
|
|
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
|
+ // If the importer is in node compatibility mode or this is not an ESM
|
|
|
+ // file that has been converted to a CommonJS file using a Babel-
|
|
|
+ // compatible transform (i.e. "__esModule" has not been set), then set
|
|
|
+ // "default" to the CommonJS "module.exports" for node compatibility.
|
|
|
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
|
+ mod
|
|
|
+ ));
|
|
|
+
|
|
|
+ // node_modules/picocolors/picocolors.browser.js
|
|
|
+ var require_picocolors_browser = __commonJS({
|
|
|
+ "node_modules/picocolors/picocolors.browser.js"(exports, module) {
|
|
|
+ var x = String;
|
|
|
+ var create = function() {
|
|
|
+ return { isColorSupported: false, reset: x, bold: x, dim: x, italic: x, underline: x, inverse: x, hidden: x, strikethrough: x, black: x, red: x, green: x, yellow: x, blue: x, magenta: x, cyan: x, white: x, gray: x, bgBlack: x, bgRed: x, bgGreen: x, bgYellow: x, bgBlue: x, bgMagenta: x, bgCyan: x, bgWhite: x, blackBright: x, redBright: x, greenBright: x, yellowBright: x, blueBright: x, magentaBright: x, cyanBright: x, whiteBright: x, bgBlackBright: x, bgRedBright: x, bgGreenBright: x, bgYellowBright: x, bgBlueBright: x, bgMagentaBright: x, bgCyanBright: x, bgWhiteBright: x };
|
|
|
+ };
|
|
|
+ module.exports = create();
|
|
|
+ module.exports.createColors = create;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // (disabled):node_modules/postcss/lib/terminal-highlight
|
|
|
+ var require_terminal_highlight = __commonJS({
|
|
|
+ "(disabled):node_modules/postcss/lib/terminal-highlight"() {
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/css-syntax-error.js
|
|
|
+ var require_css_syntax_error = __commonJS({
|
|
|
+ "node_modules/postcss/lib/css-syntax-error.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var pico = require_picocolors_browser();
|
|
|
+ var terminalHighlight = require_terminal_highlight();
|
|
|
+ var CssSyntaxError2 = class _CssSyntaxError extends Error {
|
|
|
+ constructor(message, line, column, source, file, plugin2) {
|
|
|
+ super(message);
|
|
|
+ this.name = "CssSyntaxError";
|
|
|
+ this.reason = message;
|
|
|
+ if (file) {
|
|
|
+ this.file = file;
|
|
|
+ }
|
|
|
+ if (source) {
|
|
|
+ this.source = source;
|
|
|
+ }
|
|
|
+ if (plugin2) {
|
|
|
+ this.plugin = plugin2;
|
|
|
+ }
|
|
|
+ if (typeof line !== "undefined" && typeof column !== "undefined") {
|
|
|
+ if (typeof line === "number") {
|
|
|
+ this.line = line;
|
|
|
+ this.column = column;
|
|
|
+ } else {
|
|
|
+ this.line = line.line;
|
|
|
+ this.column = line.column;
|
|
|
+ this.endLine = column.line;
|
|
|
+ this.endColumn = column.column;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.setMessage();
|
|
|
+ if (Error.captureStackTrace) {
|
|
|
+ Error.captureStackTrace(this, _CssSyntaxError);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ setMessage() {
|
|
|
+ this.message = this.plugin ? this.plugin + ": " : "";
|
|
|
+ this.message += this.file ? this.file : "<css input>";
|
|
|
+ if (typeof this.line !== "undefined") {
|
|
|
+ this.message += ":" + this.line + ":" + this.column;
|
|
|
+ }
|
|
|
+ this.message += ": " + this.reason;
|
|
|
+ }
|
|
|
+ showSourceCode(color) {
|
|
|
+ if (!this.source) return "";
|
|
|
+ let css = this.source;
|
|
|
+ if (color == null) color = pico.isColorSupported;
|
|
|
+ let aside = (text) => text;
|
|
|
+ let mark = (text) => text;
|
|
|
+ let highlight = (text) => text;
|
|
|
+ if (color) {
|
|
|
+ let { bold, gray, red } = pico.createColors(true);
|
|
|
+ mark = (text) => bold(red(text));
|
|
|
+ aside = (text) => gray(text);
|
|
|
+ if (terminalHighlight) {
|
|
|
+ highlight = (text) => terminalHighlight(text);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let lines = css.split(/\r?\n/);
|
|
|
+ let start = Math.max(this.line - 3, 0);
|
|
|
+ let end = Math.min(this.line + 2, lines.length);
|
|
|
+ let maxWidth = String(end).length;
|
|
|
+ return lines.slice(start, end).map((line, index) => {
|
|
|
+ let number = start + 1 + index;
|
|
|
+ let gutter = " " + (" " + number).slice(-maxWidth) + " | ";
|
|
|
+ if (number === this.line) {
|
|
|
+ if (line.length > 160) {
|
|
|
+ let padding = 20;
|
|
|
+ let subLineStart = Math.max(0, this.column - padding);
|
|
|
+ let subLineEnd = Math.max(
|
|
|
+ this.column + padding,
|
|
|
+ this.endColumn + padding
|
|
|
+ );
|
|
|
+ let subLine = line.slice(subLineStart, subLineEnd);
|
|
|
+ let spacing2 = aside(gutter.replace(/\d/g, " ")) + line.slice(0, Math.min(this.column - 1, padding - 1)).replace(/[^\t]/g, " ");
|
|
|
+ return mark(">") + aside(gutter) + highlight(subLine) + "\n " + spacing2 + mark("^");
|
|
|
+ }
|
|
|
+ let spacing = aside(gutter.replace(/\d/g, " ")) + line.slice(0, this.column - 1).replace(/[^\t]/g, " ");
|
|
|
+ return mark(">") + aside(gutter) + highlight(line) + "\n " + spacing + mark("^");
|
|
|
+ }
|
|
|
+ return " " + aside(gutter) + highlight(line);
|
|
|
+ }).join("\n");
|
|
|
+ }
|
|
|
+ toString() {
|
|
|
+ let code = this.showSourceCode();
|
|
|
+ if (code) {
|
|
|
+ code = "\n\n" + code + "\n";
|
|
|
+ }
|
|
|
+ return this.name + ": " + this.message + code;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = CssSyntaxError2;
|
|
|
+ CssSyntaxError2.default = CssSyntaxError2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/stringifier.js
|
|
|
+ var require_stringifier = __commonJS({
|
|
|
+ "node_modules/postcss/lib/stringifier.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var STYLE_TAG = /(<)(\/?style\b)/gi;
|
|
|
+ var COMMENT_OPEN = /(<)(!--)/g;
|
|
|
+ var AT_NAME_END = /[\t\n\f\r "#'()/;[\\\]{}]/;
|
|
|
+ function escapeHTMLInCSS(str) {
|
|
|
+ if (typeof str !== "string") return str;
|
|
|
+ if (!str.includes("<")) return str;
|
|
|
+ return str.replace(STYLE_TAG, "\\3c $2").replace(COMMENT_OPEN, "\\3c $2");
|
|
|
+ }
|
|
|
+ var DEFAULT_RAW = {
|
|
|
+ after: "\n",
|
|
|
+ beforeClose: "\n",
|
|
|
+ beforeComment: "\n",
|
|
|
+ beforeDecl: "\n",
|
|
|
+ beforeOpen: " ",
|
|
|
+ beforeRule: "\n",
|
|
|
+ colon: ": ",
|
|
|
+ commentLeft: " ",
|
|
|
+ commentRight: " ",
|
|
|
+ emptyBody: "",
|
|
|
+ indent: " ",
|
|
|
+ semicolon: false
|
|
|
+ };
|
|
|
+ function capitalize(str) {
|
|
|
+ return str[0].toUpperCase() + str.slice(1);
|
|
|
+ }
|
|
|
+ function atruleStart(str, node) {
|
|
|
+ let name = "@" + node.name;
|
|
|
+ let params = node.params ? str.rawValue(node, "params") : "";
|
|
|
+ let afterName = node.raws.afterName;
|
|
|
+ if (typeof afterName === "undefined") {
|
|
|
+ afterName = params ? " " : "";
|
|
|
+ } else if (afterName === "" && params && !AT_NAME_END.test(params[0])) {
|
|
|
+ afterName = " ";
|
|
|
+ }
|
|
|
+ return name + afterName + params;
|
|
|
+ }
|
|
|
+ function pushBody(str, stack, node) {
|
|
|
+ let nodes = node.nodes;
|
|
|
+ let last = nodes.length - 1;
|
|
|
+ while (last > 0) {
|
|
|
+ if (nodes[last].type !== "comment") break;
|
|
|
+ last -= 1;
|
|
|
+ }
|
|
|
+ let semicolon = str.raw(node, "semicolon");
|
|
|
+ let isDocument = node.type === "document";
|
|
|
+ for (let i = nodes.length - 1; i >= 0; i--) {
|
|
|
+ let child = nodes[i];
|
|
|
+ let childSemicolon = last !== i || semicolon;
|
|
|
+ if (!childSemicolon && i < nodes.length - 1 && (child.type === "atrule" && !child.nodes || child.type === "decl" && child.prop.startsWith("--"))) {
|
|
|
+ childSemicolon = true;
|
|
|
+ }
|
|
|
+ stack.push({
|
|
|
+ document: isDocument,
|
|
|
+ node: child,
|
|
|
+ semicolon: childSemicolon
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function pushBlock(str, stack, node, start) {
|
|
|
+ let between = str.raw(node, "between", "beforeOpen");
|
|
|
+ str.builder(escapeHTMLInCSS(start + between) + "{", node, "start");
|
|
|
+ let hasNodes = node.nodes && node.nodes.length;
|
|
|
+ let close = () => {
|
|
|
+ let after = hasNodes ? str.raw(node, "after") : str.raw(node, "after", "emptyBody");
|
|
|
+ if (after) str.builder(escapeHTMLInCSS(after));
|
|
|
+ str.builder("}", node, "end");
|
|
|
+ if (node.type === "rule" && node.raws.ownSemicolon) {
|
|
|
+ str.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, "end");
|
|
|
+ }
|
|
|
+ };
|
|
|
+ if (hasNodes) {
|
|
|
+ stack.push(close);
|
|
|
+ pushBody(str, stack, node);
|
|
|
+ } else {
|
|
|
+ close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var Stringifier = class _Stringifier {
|
|
|
+ constructor(builder) {
|
|
|
+ this.builder = builder;
|
|
|
+ }
|
|
|
+ atrule(node, semicolon) {
|
|
|
+ let start = atruleStart(this, node);
|
|
|
+ if (node.nodes) {
|
|
|
+ this.block(node, start);
|
|
|
+ } else {
|
|
|
+ let end = (node.raws.between || "") + (semicolon ? ";" : "");
|
|
|
+ this.builder(escapeHTMLInCSS(start + end), node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ beforeAfter(node, detect) {
|
|
|
+ let value;
|
|
|
+ if (node.type === "decl") {
|
|
|
+ value = this.raw(node, null, "beforeDecl");
|
|
|
+ } else if (node.type === "comment") {
|
|
|
+ value = this.raw(node, null, "beforeComment");
|
|
|
+ } else if (detect === "before") {
|
|
|
+ value = this.raw(node, null, "beforeRule");
|
|
|
+ } else {
|
|
|
+ value = this.raw(node, null, "beforeClose");
|
|
|
+ }
|
|
|
+ let buf = node.parent;
|
|
|
+ let depth = 0;
|
|
|
+ while (buf && buf.type !== "root") {
|
|
|
+ depth += 1;
|
|
|
+ buf = buf.parent;
|
|
|
+ }
|
|
|
+ if (value.includes("\n")) {
|
|
|
+ let indent = this.raw(node, null, "indent");
|
|
|
+ if (indent.length) {
|
|
|
+ for (let step = 0; step < depth; step++) value += indent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ block(node, start) {
|
|
|
+ let between = this.raw(node, "between", "beforeOpen");
|
|
|
+ this.builder(escapeHTMLInCSS(start + between) + "{", node, "start");
|
|
|
+ let after;
|
|
|
+ if (node.nodes && node.nodes.length) {
|
|
|
+ this.body(node);
|
|
|
+ after = this.raw(node, "after");
|
|
|
+ } else {
|
|
|
+ after = this.raw(node, "after", "emptyBody");
|
|
|
+ }
|
|
|
+ if (after) this.builder(escapeHTMLInCSS(after));
|
|
|
+ this.builder("}", node, "end");
|
|
|
+ }
|
|
|
+ body(node) {
|
|
|
+ let proto = _Stringifier.prototype;
|
|
|
+ let expandable = ["atrule", "block", "body", "rule", "stringify"].every(
|
|
|
+ (method) => this[method] === proto[method]
|
|
|
+ );
|
|
|
+ let stack = [];
|
|
|
+ pushBody(this, stack, node);
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let entry = stack.pop();
|
|
|
+ if (typeof entry === "function") {
|
|
|
+ entry();
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ let child = entry.node;
|
|
|
+ let before = this.raw(child, "before");
|
|
|
+ if (before) {
|
|
|
+ this.builder(entry.document ? before : escapeHTMLInCSS(before));
|
|
|
+ }
|
|
|
+ if (expandable && child.type === "rule") {
|
|
|
+ pushBlock(this, stack, child, this.rawValue(child, "selector"));
|
|
|
+ } else if (expandable && child.type === "atrule" && child.nodes) {
|
|
|
+ pushBlock(this, stack, child, atruleStart(this, child));
|
|
|
+ } else {
|
|
|
+ this.stringify(child, entry.semicolon);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ comment(node) {
|
|
|
+ let left = this.raw(node, "left", "commentLeft");
|
|
|
+ let right = this.raw(node, "right", "commentRight");
|
|
|
+ this.builder(escapeHTMLInCSS("/*" + left + node.text + right + "*/"), node);
|
|
|
+ }
|
|
|
+ decl(node, semicolon) {
|
|
|
+ let raws = node.raws;
|
|
|
+ let between = this.raw(node, "between", "colon");
|
|
|
+ let string = node.prop + between + this.rawValue(node, "value");
|
|
|
+ if (node.important) {
|
|
|
+ string += raws.important || " !important";
|
|
|
+ }
|
|
|
+ if (semicolon) string += ";";
|
|
|
+ this.builder(escapeHTMLInCSS(string), node);
|
|
|
+ }
|
|
|
+ document(node) {
|
|
|
+ this.body(node);
|
|
|
+ }
|
|
|
+ raw(node, own, detect) {
|
|
|
+ let value;
|
|
|
+ if (!detect) detect = own;
|
|
|
+ if (own) {
|
|
|
+ value = node.raws[own];
|
|
|
+ if (typeof value !== "undefined") return value;
|
|
|
+ }
|
|
|
+ let parent = node.parent;
|
|
|
+ if (detect === "before") {
|
|
|
+ if (!parent || parent.type === "root" && parent.first === node) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ if (parent && parent.type === "document") {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!parent) return DEFAULT_RAW[detect];
|
|
|
+ let root2 = node.root();
|
|
|
+ let cache = root2.rawCache || (root2.rawCache = {});
|
|
|
+ if (typeof cache[detect] !== "undefined") {
|
|
|
+ return cache[detect];
|
|
|
+ }
|
|
|
+ if (detect === "before" || detect === "after") {
|
|
|
+ return this.beforeAfter(node, detect);
|
|
|
+ } else {
|
|
|
+ let method = "raw" + capitalize(detect);
|
|
|
+ if (this[method]) {
|
|
|
+ value = this[method](root2, node);
|
|
|
+ } else {
|
|
|
+ root2.walk((i) => {
|
|
|
+ value = i.raws[own];
|
|
|
+ if (typeof value !== "undefined") return false;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (typeof value === "undefined") value = DEFAULT_RAW[detect];
|
|
|
+ cache[detect] = value;
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawBeforeClose(root2) {
|
|
|
+ let value;
|
|
|
+ root2.walk((i) => {
|
|
|
+ if (i.nodes && i.nodes.length > 0) {
|
|
|
+ if (typeof i.raws.after !== "undefined") {
|
|
|
+ value = i.raws.after;
|
|
|
+ if (value.includes("\n")) {
|
|
|
+ value = value.replace(/[^\n]+$/, "");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (value) value = value.replace(/\S/g, "");
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawBeforeComment(root2, node) {
|
|
|
+ let value;
|
|
|
+ root2.walkComments((i) => {
|
|
|
+ if (typeof i.raws.before !== "undefined") {
|
|
|
+ value = i.raws.before;
|
|
|
+ if (value.includes("\n")) {
|
|
|
+ value = value.replace(/[^\n]+$/, "");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (typeof value === "undefined") {
|
|
|
+ value = this.raw(node, null, "beforeDecl");
|
|
|
+ } else if (value) {
|
|
|
+ value = value.replace(/\S/g, "");
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawBeforeDecl(root2, node) {
|
|
|
+ let value;
|
|
|
+ root2.walkDecls((i) => {
|
|
|
+ if (typeof i.raws.before !== "undefined") {
|
|
|
+ value = i.raws.before;
|
|
|
+ if (value.includes("\n")) {
|
|
|
+ value = value.replace(/[^\n]+$/, "");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (typeof value === "undefined") {
|
|
|
+ value = this.raw(node, null, "beforeRule");
|
|
|
+ } else if (value) {
|
|
|
+ value = value.replace(/\S/g, "");
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawBeforeOpen(root2) {
|
|
|
+ let value;
|
|
|
+ root2.walk((i) => {
|
|
|
+ if (i.type !== "decl") {
|
|
|
+ value = i.raws.between;
|
|
|
+ if (typeof value !== "undefined") return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawBeforeRule(root2) {
|
|
|
+ let value;
|
|
|
+ root2.walk((i) => {
|
|
|
+ if (i.nodes && (i.parent !== root2 || root2.first !== i)) {
|
|
|
+ if (typeof i.raws.before !== "undefined") {
|
|
|
+ value = i.raws.before;
|
|
|
+ if (value.includes("\n")) {
|
|
|
+ value = value.replace(/[^\n]+$/, "");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (value) value = value.replace(/\S/g, "");
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawColon(root2) {
|
|
|
+ let value;
|
|
|
+ root2.walkDecls((i) => {
|
|
|
+ if (typeof i.raws.between !== "undefined") {
|
|
|
+ value = i.raws.between.replace(/[^\s:]/g, "");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawEmptyBody(root2) {
|
|
|
+ let value;
|
|
|
+ root2.walk((i) => {
|
|
|
+ if (i.nodes && i.nodes.length === 0) {
|
|
|
+ value = i.raws.after;
|
|
|
+ if (typeof value !== "undefined") return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawIndent(root2) {
|
|
|
+ if (root2.raws.indent) return root2.raws.indent;
|
|
|
+ let value;
|
|
|
+ root2.walk((i) => {
|
|
|
+ let p = i.parent;
|
|
|
+ if (p && p !== root2 && p.parent && p.parent === root2) {
|
|
|
+ if (typeof i.raws.before !== "undefined") {
|
|
|
+ let parts = i.raws.before.split("\n");
|
|
|
+ value = parts[parts.length - 1];
|
|
|
+ value = value.replace(/\S/g, "");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawSemicolon(root2) {
|
|
|
+ let value;
|
|
|
+ root2.walk((i) => {
|
|
|
+ if (i.nodes && i.nodes.length && i.last.type === "decl") {
|
|
|
+ value = i.raws.semicolon;
|
|
|
+ if (typeof value !== "undefined") return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ rawValue(node, prop) {
|
|
|
+ let value = node[prop];
|
|
|
+ let raw = node.raws[prop];
|
|
|
+ if (raw && raw.value === value) {
|
|
|
+ return raw.raw;
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ root(node) {
|
|
|
+ if (node.source && node.source.input.hasBOM) {
|
|
|
+ this.builder("\uFEFF", node, "start");
|
|
|
+ }
|
|
|
+ this.body(node);
|
|
|
+ if (node.raws.after) {
|
|
|
+ let after = node.raws.after;
|
|
|
+ let isDocument = node.parent && node.parent.type === "document";
|
|
|
+ this.builder(isDocument ? after : escapeHTMLInCSS(after));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rule(node) {
|
|
|
+ this.block(node, this.rawValue(node, "selector"));
|
|
|
+ if (node.raws.ownSemicolon) {
|
|
|
+ this.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, "end");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ stringify(node, semicolon) {
|
|
|
+ if (!this[node.type]) {
|
|
|
+ throw new Error(
|
|
|
+ "Unknown AST node type " + node.type + ". Maybe you need to change PostCSS stringifier."
|
|
|
+ );
|
|
|
+ }
|
|
|
+ this[node.type](node, semicolon);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Stringifier;
|
|
|
+ Stringifier.default = Stringifier;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/stringify.js
|
|
|
+ var require_stringify = __commonJS({
|
|
|
+ "node_modules/postcss/lib/stringify.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Stringifier = require_stringifier();
|
|
|
+ function stringify3(node, builder) {
|
|
|
+ let str = new Stringifier(builder);
|
|
|
+ str.stringify(node);
|
|
|
+ }
|
|
|
+ module.exports = stringify3;
|
|
|
+ stringify3.default = stringify3;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/symbols.js
|
|
|
+ var require_symbols = __commonJS({
|
|
|
+ "node_modules/postcss/lib/symbols.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ module.exports.isClean = /* @__PURE__ */ Symbol("isClean");
|
|
|
+ module.exports.my = /* @__PURE__ */ Symbol("my");
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/node.js
|
|
|
+ var require_node = __commonJS({
|
|
|
+ "node_modules/postcss/lib/node.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var CssSyntaxError2 = require_css_syntax_error();
|
|
|
+ var Stringifier = require_stringifier();
|
|
|
+ var stringify3 = require_stringify();
|
|
|
+ var { isClean, my } = require_symbols();
|
|
|
+ function cloneNode(obj, parent) {
|
|
|
+ let cloned = new obj.constructor();
|
|
|
+ let stack = [[obj, cloned, parent]];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let [source, target, targetParent] = stack.pop();
|
|
|
+ for (let i in source) {
|
|
|
+ if (!Object.prototype.hasOwnProperty.call(source, i)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (i === "proxyCache") continue;
|
|
|
+ let value = source[i];
|
|
|
+ let type = typeof value;
|
|
|
+ if (i === "parent" && type === "object") {
|
|
|
+ if (targetParent) target[i] = targetParent;
|
|
|
+ } else if (i === "source") {
|
|
|
+ target[i] = value;
|
|
|
+ } else if (Array.isArray(value)) {
|
|
|
+ let children = [];
|
|
|
+ target[i] = children;
|
|
|
+ for (let j of value) {
|
|
|
+ let childClone = new j.constructor();
|
|
|
+ children.push(childClone);
|
|
|
+ stack.push([j, childClone, target]);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (type === "object" && value !== null) {
|
|
|
+ let valueClone = new value.constructor();
|
|
|
+ stack.push([value, valueClone, void 0]);
|
|
|
+ value = valueClone;
|
|
|
+ }
|
|
|
+ target[i] = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return cloned;
|
|
|
+ }
|
|
|
+ function sourceOffset(inputCSS, position) {
|
|
|
+ if (position && typeof position.offset !== "undefined") {
|
|
|
+ return position.offset;
|
|
|
+ }
|
|
|
+ let column = 1;
|
|
|
+ let line = 1;
|
|
|
+ let offset = 0;
|
|
|
+ for (let i = 0; i < inputCSS.length; i++) {
|
|
|
+ if (line === position.line && column === position.column) {
|
|
|
+ offset = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (inputCSS[i] === "\n") {
|
|
|
+ column = 1;
|
|
|
+ line += 1;
|
|
|
+ } else {
|
|
|
+ column += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return offset;
|
|
|
+ }
|
|
|
+ var Node3 = class _Node {
|
|
|
+ get proxyOf() {
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ constructor(defaults2 = {}) {
|
|
|
+ this.raws = {};
|
|
|
+ this[isClean] = false;
|
|
|
+ this[my] = true;
|
|
|
+ for (let name of Object.keys(defaults2)) {
|
|
|
+ if (name === "__proto__") continue;
|
|
|
+ if (name === "nodes") {
|
|
|
+ this.nodes = [];
|
|
|
+ for (let node of defaults2[name]) {
|
|
|
+ if (typeof node.clone === "function" && node.parent) {
|
|
|
+ this.append(node.clone());
|
|
|
+ } else {
|
|
|
+ this.append(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this[name] = defaults2[name];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ addToError(error) {
|
|
|
+ error.postcssNode = this;
|
|
|
+ if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
|
|
|
+ let s = this.source;
|
|
|
+ error.stack = error.stack.replace(
|
|
|
+ /\n\s{4}at /,
|
|
|
+ `$&${s.input.from}:${s.start.line}:${s.start.column}$&`
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return error;
|
|
|
+ }
|
|
|
+ after(add) {
|
|
|
+ this.parent.insertAfter(this, add);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ assign(overrides = {}) {
|
|
|
+ for (let name in overrides) {
|
|
|
+ this[name] = overrides[name];
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ before(add) {
|
|
|
+ this.parent.insertBefore(this, add);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ cleanRaws(keepBetween) {
|
|
|
+ delete this.raws.before;
|
|
|
+ delete this.raws.after;
|
|
|
+ if (!keepBetween) delete this.raws.between;
|
|
|
+ }
|
|
|
+ clone(overrides = {}) {
|
|
|
+ let cloned = cloneNode(this);
|
|
|
+ for (let name in overrides) {
|
|
|
+ cloned[name] = overrides[name];
|
|
|
+ }
|
|
|
+ return cloned;
|
|
|
+ }
|
|
|
+ cloneAfter(overrides = {}) {
|
|
|
+ let cloned = this.clone(overrides);
|
|
|
+ this.parent.insertAfter(this, cloned);
|
|
|
+ return cloned;
|
|
|
+ }
|
|
|
+ cloneBefore(overrides = {}) {
|
|
|
+ let cloned = this.clone(overrides);
|
|
|
+ this.parent.insertBefore(this, cloned);
|
|
|
+ return cloned;
|
|
|
+ }
|
|
|
+ error(message, opts = {}) {
|
|
|
+ if (this.source) {
|
|
|
+ let { end, start } = this.rangeBy(opts);
|
|
|
+ return this.source.input.error(
|
|
|
+ message,
|
|
|
+ { column: start.column, line: start.line },
|
|
|
+ { column: end.column, line: end.line },
|
|
|
+ opts
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return new CssSyntaxError2(message);
|
|
|
+ }
|
|
|
+ getProxyProcessor() {
|
|
|
+ return {
|
|
|
+ get(node, prop) {
|
|
|
+ if (prop === "proxyOf") {
|
|
|
+ return node;
|
|
|
+ } else if (prop === "root") {
|
|
|
+ return () => node.root().toProxy();
|
|
|
+ } else {
|
|
|
+ return node[prop];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ set(node, prop, value) {
|
|
|
+ if (node[prop] === value) return true;
|
|
|
+ node[prop] = value;
|
|
|
+ if (prop === "prop" || prop === "value" || prop === "name" || prop === "params" || prop === "important" || /* c8 ignore next */
|
|
|
+ prop === "text") {
|
|
|
+ node.markDirty();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ /* c8 ignore next 3 */
|
|
|
+ markClean() {
|
|
|
+ this[isClean] = true;
|
|
|
+ }
|
|
|
+ markDirty() {
|
|
|
+ if (this[isClean]) {
|
|
|
+ this[isClean] = false;
|
|
|
+ let next = this;
|
|
|
+ while (next = next.parent) {
|
|
|
+ next[isClean] = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ next() {
|
|
|
+ if (!this.parent) return void 0;
|
|
|
+ let index = this.parent.index(this);
|
|
|
+ return this.parent.nodes[index + 1];
|
|
|
+ }
|
|
|
+ positionBy(opts = {}) {
|
|
|
+ let inputString = "document" in this.source.input ? this.source.input.document : this.source.input.css;
|
|
|
+ let pos = {
|
|
|
+ column: this.source.start.column,
|
|
|
+ line: this.source.start.line,
|
|
|
+ offset: sourceOffset(inputString, this.source.start)
|
|
|
+ };
|
|
|
+ if (opts.index) {
|
|
|
+ pos = this.positionInside(opts.index);
|
|
|
+ } else if (opts.word) {
|
|
|
+ let stringRepresentation = inputString.slice(
|
|
|
+ sourceOffset(inputString, this.source.start),
|
|
|
+ sourceOffset(inputString, this.source.end)
|
|
|
+ );
|
|
|
+ let index = stringRepresentation.indexOf(opts.word);
|
|
|
+ if (index !== -1) pos = this.positionInside(index);
|
|
|
+ }
|
|
|
+ return pos;
|
|
|
+ }
|
|
|
+ positionInside(index) {
|
|
|
+ let column = this.source.start.column;
|
|
|
+ let line = this.source.start.line;
|
|
|
+ let inputString = "document" in this.source.input ? this.source.input.document : this.source.input.css;
|
|
|
+ let offset = sourceOffset(inputString, this.source.start);
|
|
|
+ let end = offset + index;
|
|
|
+ for (let i = offset; i < end; i++) {
|
|
|
+ if (inputString[i] === "\n") {
|
|
|
+ column = 1;
|
|
|
+ line += 1;
|
|
|
+ } else {
|
|
|
+ column += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return { column, line, offset: end };
|
|
|
+ }
|
|
|
+ prev() {
|
|
|
+ if (!this.parent) return void 0;
|
|
|
+ let index = this.parent.index(this);
|
|
|
+ return this.parent.nodes[index - 1];
|
|
|
+ }
|
|
|
+ rangeBy(opts = {}) {
|
|
|
+ let inputString = "document" in this.source.input ? this.source.input.document : this.source.input.css;
|
|
|
+ let start = {
|
|
|
+ column: this.source.start.column,
|
|
|
+ line: this.source.start.line,
|
|
|
+ offset: sourceOffset(inputString, this.source.start)
|
|
|
+ };
|
|
|
+ let end = this.source.end ? {
|
|
|
+ column: this.source.end.column + 1,
|
|
|
+ line: this.source.end.line,
|
|
|
+ offset: typeof this.source.end.offset === "number" ? (
|
|
|
+ // `source.end.offset` is exclusive, so we don't need to add 1
|
|
|
+ this.source.end.offset
|
|
|
+ ) : (
|
|
|
+ // Since line/column in this.source.end is inclusive,
|
|
|
+ // the `sourceOffset(... , this.source.end)` returns an inclusive offset.
|
|
|
+ // So, we add 1 to convert it to exclusive.
|
|
|
+ sourceOffset(inputString, this.source.end) + 1
|
|
|
+ )
|
|
|
+ } : {
|
|
|
+ column: start.column + 1,
|
|
|
+ line: start.line,
|
|
|
+ offset: start.offset + 1
|
|
|
+ };
|
|
|
+ if (opts.word) {
|
|
|
+ let stringRepresentation = inputString.slice(
|
|
|
+ sourceOffset(inputString, this.source.start),
|
|
|
+ sourceOffset(inputString, this.source.end)
|
|
|
+ );
|
|
|
+ let index = stringRepresentation.indexOf(opts.word);
|
|
|
+ if (index !== -1) {
|
|
|
+ start = this.positionInside(index);
|
|
|
+ end = this.positionInside(index + opts.word.length);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (opts.start) {
|
|
|
+ start = {
|
|
|
+ column: opts.start.column,
|
|
|
+ line: opts.start.line,
|
|
|
+ offset: sourceOffset(inputString, opts.start)
|
|
|
+ };
|
|
|
+ } else if (typeof opts.index === "number") {
|
|
|
+ start = this.positionInside(opts.index);
|
|
|
+ }
|
|
|
+ if (opts.end) {
|
|
|
+ end = {
|
|
|
+ column: opts.end.column,
|
|
|
+ line: opts.end.line,
|
|
|
+ offset: sourceOffset(inputString, opts.end)
|
|
|
+ };
|
|
|
+ } else if (typeof opts.endIndex === "number") {
|
|
|
+ end = this.positionInside(opts.endIndex);
|
|
|
+ } else if (typeof opts.index === "number") {
|
|
|
+ end = this.positionInside(opts.index + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (end.line < start.line || end.line === start.line && end.column <= start.column) {
|
|
|
+ end = {
|
|
|
+ column: start.column + 1,
|
|
|
+ line: start.line,
|
|
|
+ offset: start.offset + 1
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return { end, start };
|
|
|
+ }
|
|
|
+ raw(prop, defaultType) {
|
|
|
+ let str = new Stringifier();
|
|
|
+ return str.raw(this, prop, defaultType);
|
|
|
+ }
|
|
|
+ remove() {
|
|
|
+ if (this.parent) {
|
|
|
+ this.parent.removeChild(this);
|
|
|
+ }
|
|
|
+ this.parent = void 0;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ replaceWith(...nodes) {
|
|
|
+ if (this.parent) {
|
|
|
+ let bookmark = this;
|
|
|
+ let foundSelf = false;
|
|
|
+ for (let node of nodes) {
|
|
|
+ if (node === this) {
|
|
|
+ foundSelf = true;
|
|
|
+ } else if (foundSelf) {
|
|
|
+ this.parent.insertAfter(bookmark, node);
|
|
|
+ bookmark = node;
|
|
|
+ } else {
|
|
|
+ this.parent.insertBefore(bookmark, node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!foundSelf) {
|
|
|
+ this.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ root() {
|
|
|
+ let result = this;
|
|
|
+ while (result.parent && result.parent.type !== "document") {
|
|
|
+ result = result.parent;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ toJSON(_, inputs) {
|
|
|
+ let emitInputs = inputs == null;
|
|
|
+ inputs = inputs || /* @__PURE__ */ new Map();
|
|
|
+ let holderOfRoot = [];
|
|
|
+ let queue = [[this, holderOfRoot, 0]];
|
|
|
+ for (let step = 0; step < queue.length; step++) {
|
|
|
+ let [node, holder, key] = queue[step];
|
|
|
+ let fixed2 = {};
|
|
|
+ holder[key] = fixed2;
|
|
|
+ for (let name in node) {
|
|
|
+ if (!Object.prototype.hasOwnProperty.call(node, name)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (name === "parent" || name === "proxyCache") continue;
|
|
|
+ let value = node[name];
|
|
|
+ if (Array.isArray(value)) {
|
|
|
+ let fixedArray = [];
|
|
|
+ fixed2[name] = fixedArray;
|
|
|
+ for (let i = 0; i < value.length; i++) {
|
|
|
+ let item = value[i];
|
|
|
+ if (typeof item === "object" && item.toJSON) {
|
|
|
+ if (item.toJSON === _Node.prototype.toJSON) {
|
|
|
+ queue.push([item, fixedArray, i]);
|
|
|
+ } else {
|
|
|
+ fixedArray[i] = item.toJSON(null, inputs);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ fixedArray[i] = item;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (typeof value === "object" && value.toJSON) {
|
|
|
+ if (value.toJSON === _Node.prototype.toJSON) {
|
|
|
+ queue.push([value, fixed2, name]);
|
|
|
+ } else {
|
|
|
+ fixed2[name] = value.toJSON(null, inputs);
|
|
|
+ }
|
|
|
+ } else if (name === "source") {
|
|
|
+ if (value == null) continue;
|
|
|
+ let inputId = inputs.get(value.input);
|
|
|
+ if (inputId == null) {
|
|
|
+ inputId = inputs.size;
|
|
|
+ inputs.set(value.input, inputId);
|
|
|
+ }
|
|
|
+ fixed2[name] = {
|
|
|
+ end: value.end,
|
|
|
+ inputId,
|
|
|
+ start: value.start
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ fixed2[name] = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let fixed = holderOfRoot[0];
|
|
|
+ if (emitInputs) {
|
|
|
+ fixed.inputs = [...inputs.keys()].map((input) => input.toJSON());
|
|
|
+ }
|
|
|
+ return fixed;
|
|
|
+ }
|
|
|
+ toProxy() {
|
|
|
+ if (!this.proxyCache) {
|
|
|
+ this.proxyCache = new Proxy(this, this.getProxyProcessor());
|
|
|
+ }
|
|
|
+ return this.proxyCache;
|
|
|
+ }
|
|
|
+ toString(stringifier = stringify3) {
|
|
|
+ if (stringifier.stringify) stringifier = stringifier.stringify;
|
|
|
+ let result = "";
|
|
|
+ stringifier(this, (i) => {
|
|
|
+ result += i;
|
|
|
+ });
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ warn(result, text, opts = {}) {
|
|
|
+ let data = { node: this };
|
|
|
+ for (let i in opts) data[i] = opts[i];
|
|
|
+ return result.warn(text, data);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Node3;
|
|
|
+ Node3.default = Node3;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/comment.js
|
|
|
+ var require_comment = __commonJS({
|
|
|
+ "node_modules/postcss/lib/comment.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Node3 = require_node();
|
|
|
+ var Comment2 = class extends Node3 {
|
|
|
+ constructor(defaults2) {
|
|
|
+ super(defaults2);
|
|
|
+ this.type = "comment";
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Comment2;
|
|
|
+ Comment2.default = Comment2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/declaration.js
|
|
|
+ var require_declaration = __commonJS({
|
|
|
+ "node_modules/postcss/lib/declaration.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Node3 = require_node();
|
|
|
+ var Declaration2 = class extends Node3 {
|
|
|
+ get variable() {
|
|
|
+ return this.prop.startsWith("--") || this.prop[0] === "$";
|
|
|
+ }
|
|
|
+ constructor(defaults2) {
|
|
|
+ if (defaults2 && typeof defaults2.value !== "undefined" && typeof defaults2.value !== "string") {
|
|
|
+ defaults2 = { ...defaults2, value: String(defaults2.value) };
|
|
|
+ }
|
|
|
+ super(defaults2);
|
|
|
+ this.type = "decl";
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Declaration2;
|
|
|
+ Declaration2.default = Declaration2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/container.js
|
|
|
+ var require_container = __commonJS({
|
|
|
+ "node_modules/postcss/lib/container.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Comment2 = require_comment();
|
|
|
+ var Declaration2 = require_declaration();
|
|
|
+ var Node3 = require_node();
|
|
|
+ var { isClean, my } = require_symbols();
|
|
|
+ var AtRule2;
|
|
|
+ var parse3;
|
|
|
+ var Root2;
|
|
|
+ var Rule2;
|
|
|
+ function cleanSource(nodes) {
|
|
|
+ let stack = nodes.slice();
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let node = stack.pop();
|
|
|
+ delete node.source;
|
|
|
+ if (node.nodes) {
|
|
|
+ node.nodes = node.nodes.slice();
|
|
|
+ for (let i of node.nodes) stack.push(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nodes.slice();
|
|
|
+ }
|
|
|
+ function markTreeDirty(node) {
|
|
|
+ let stack = [node];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let next = stack.pop();
|
|
|
+ next[isClean] = false;
|
|
|
+ if (next.proxyOf.nodes) {
|
|
|
+ for (let i of next.proxyOf.nodes) stack.push(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var Container2 = class _Container extends Node3 {
|
|
|
+ get first() {
|
|
|
+ if (!this.proxyOf.nodes) return void 0;
|
|
|
+ return this.proxyOf.nodes[0];
|
|
|
+ }
|
|
|
+ get last() {
|
|
|
+ if (!this.proxyOf.nodes) return void 0;
|
|
|
+ return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];
|
|
|
+ }
|
|
|
+ append(...children) {
|
|
|
+ for (let child of children) {
|
|
|
+ let nodes = this.normalize(child, this.last);
|
|
|
+ for (let node of nodes) this.proxyOf.nodes.push(node);
|
|
|
+ }
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ cleanRaws(keepBetween) {
|
|
|
+ let stack = [this];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let node = stack.pop();
|
|
|
+ if (node !== this && node.cleanRaws !== _Container.prototype.cleanRaws) {
|
|
|
+ node.cleanRaws(keepBetween);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Node3.prototype.cleanRaws.call(node, keepBetween);
|
|
|
+ if (node.nodes) {
|
|
|
+ for (let child of node.nodes) stack.push(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ each(callback) {
|
|
|
+ if (!this.proxyOf.nodes) return void 0;
|
|
|
+ let iterator = this.getIterator();
|
|
|
+ let index, result;
|
|
|
+ while (this.indexes[iterator] < this.proxyOf.nodes.length) {
|
|
|
+ index = this.indexes[iterator];
|
|
|
+ result = callback(this.proxyOf.nodes[index], index);
|
|
|
+ if (result === false) break;
|
|
|
+ this.indexes[iterator] += 1;
|
|
|
+ }
|
|
|
+ delete this.indexes[iterator];
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ every(condition) {
|
|
|
+ return this.nodes.every(condition);
|
|
|
+ }
|
|
|
+ getIterator() {
|
|
|
+ if (!this.lastEach) this.lastEach = 0;
|
|
|
+ if (!this.indexes) this.indexes = {};
|
|
|
+ this.lastEach += 1;
|
|
|
+ let iterator = this.lastEach;
|
|
|
+ this.indexes[iterator] = 0;
|
|
|
+ return iterator;
|
|
|
+ }
|
|
|
+ getProxyProcessor() {
|
|
|
+ return {
|
|
|
+ get(node, prop) {
|
|
|
+ if (prop === "proxyOf") {
|
|
|
+ return node;
|
|
|
+ } else if (!node[prop]) {
|
|
|
+ return node[prop];
|
|
|
+ } else if (prop === "each" || typeof prop === "string" && prop.startsWith("walk")) {
|
|
|
+ return (...args) => {
|
|
|
+ return node[prop](
|
|
|
+ ...args.map((i) => {
|
|
|
+ if (typeof i === "function") {
|
|
|
+ return (child, index) => i(child.toProxy(), index);
|
|
|
+ } else {
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ );
|
|
|
+ };
|
|
|
+ } else if (prop === "every" || prop === "some") {
|
|
|
+ return (cb) => {
|
|
|
+ return node[prop](
|
|
|
+ (child, ...other) => cb(child.toProxy(), ...other)
|
|
|
+ );
|
|
|
+ };
|
|
|
+ } else if (prop === "root") {
|
|
|
+ return () => node.root().toProxy();
|
|
|
+ } else if (prop === "nodes") {
|
|
|
+ return node.nodes.map((i) => i.toProxy());
|
|
|
+ } else if (prop === "first" || prop === "last") {
|
|
|
+ return node[prop].toProxy();
|
|
|
+ } else {
|
|
|
+ return node[prop];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ set(node, prop, value) {
|
|
|
+ if (node[prop] === value) return true;
|
|
|
+ node[prop] = value;
|
|
|
+ if (prop === "name" || prop === "params" || prop === "selector") {
|
|
|
+ node.markDirty();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ index(child) {
|
|
|
+ if (typeof child === "number") return child;
|
|
|
+ if (child.proxyOf) child = child.proxyOf;
|
|
|
+ return this.proxyOf.nodes.indexOf(child);
|
|
|
+ }
|
|
|
+ insertAfter(exist, add) {
|
|
|
+ let existIndex = this.index(exist);
|
|
|
+ let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();
|
|
|
+ existIndex = this.index(exist);
|
|
|
+ for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node);
|
|
|
+ let index;
|
|
|
+ for (let id in this.indexes) {
|
|
|
+ index = this.indexes[id];
|
|
|
+ if (existIndex < index) {
|
|
|
+ this.indexes[id] = index + nodes.length;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ insertBefore(exist, add) {
|
|
|
+ let existIndex = this.index(exist);
|
|
|
+ let type = existIndex === 0 ? "prepend" : false;
|
|
|
+ let nodes = this.normalize(
|
|
|
+ add,
|
|
|
+ this.proxyOf.nodes[existIndex],
|
|
|
+ type
|
|
|
+ ).reverse();
|
|
|
+ existIndex = this.index(exist);
|
|
|
+ for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node);
|
|
|
+ let index;
|
|
|
+ for (let id in this.indexes) {
|
|
|
+ index = this.indexes[id];
|
|
|
+ if (existIndex <= index) {
|
|
|
+ this.indexes[id] = index + nodes.length;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ normalize(nodes, sample) {
|
|
|
+ if (typeof nodes === "string") {
|
|
|
+ nodes = cleanSource(parse3(nodes).nodes);
|
|
|
+ } else if (typeof nodes === "undefined") {
|
|
|
+ nodes = [];
|
|
|
+ } else if (Array.isArray(nodes)) {
|
|
|
+ nodes = nodes.slice(0);
|
|
|
+ for (let i of nodes) {
|
|
|
+ if (i.parent) i.parent.removeChild(i, "ignore");
|
|
|
+ }
|
|
|
+ } else if (nodes.type === "root" && this.type !== "document") {
|
|
|
+ nodes = nodes.nodes.slice(0);
|
|
|
+ for (let i of nodes) {
|
|
|
+ if (i.parent) i.parent.removeChild(i, "ignore");
|
|
|
+ }
|
|
|
+ } else if (nodes.type) {
|
|
|
+ nodes = [nodes];
|
|
|
+ } else if (nodes.prop) {
|
|
|
+ if (typeof nodes.value === "undefined") {
|
|
|
+ throw new Error("Value field is missed in node creation");
|
|
|
+ } else if (typeof nodes.value !== "string") {
|
|
|
+ nodes.value = String(nodes.value);
|
|
|
+ }
|
|
|
+ nodes = [new Declaration2(nodes)];
|
|
|
+ } else if (nodes.selector || nodes.selectors) {
|
|
|
+ nodes = [new Rule2(nodes)];
|
|
|
+ } else if (nodes.name) {
|
|
|
+ nodes = [new AtRule2(nodes)];
|
|
|
+ } else if (nodes.text) {
|
|
|
+ nodes = [new Comment2(nodes)];
|
|
|
+ } else {
|
|
|
+ throw new Error("Unknown node type in node creation");
|
|
|
+ }
|
|
|
+ let processed = nodes.map((i) => {
|
|
|
+ if (!i[my]) _Container.rebuild(i);
|
|
|
+ i = i.proxyOf;
|
|
|
+ if (i.parent) i.parent.removeChild(i);
|
|
|
+ if (i[isClean]) markTreeDirty(i);
|
|
|
+ if (!i.raws) i.raws = {};
|
|
|
+ if (typeof i.raws.before === "undefined") {
|
|
|
+ if (sample && typeof sample.raws.before !== "undefined") {
|
|
|
+ i.raws.before = sample.raws.before.replace(/\S/g, "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ i.parent = this.proxyOf;
|
|
|
+ return i;
|
|
|
+ });
|
|
|
+ return processed;
|
|
|
+ }
|
|
|
+ prepend(...children) {
|
|
|
+ children = children.reverse();
|
|
|
+ for (let child of children) {
|
|
|
+ let nodes = this.normalize(child, this.first, "prepend").reverse();
|
|
|
+ for (let node of nodes) this.proxyOf.nodes.unshift(node);
|
|
|
+ for (let id in this.indexes) {
|
|
|
+ this.indexes[id] = this.indexes[id] + nodes.length;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ push(child) {
|
|
|
+ child.parent = this;
|
|
|
+ this.proxyOf.nodes.push(child);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ removeAll() {
|
|
|
+ for (let node of this.proxyOf.nodes) node.parent = void 0;
|
|
|
+ this.proxyOf.nodes = [];
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ removeChild(child) {
|
|
|
+ child = this.index(child);
|
|
|
+ this.proxyOf.nodes[child].parent = void 0;
|
|
|
+ this.proxyOf.nodes.splice(child, 1);
|
|
|
+ let index;
|
|
|
+ for (let id in this.indexes) {
|
|
|
+ index = this.indexes[id];
|
|
|
+ if (index >= child) {
|
|
|
+ this.indexes[id] = index - 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ replaceValues(pattern, opts, callback) {
|
|
|
+ if (!callback) {
|
|
|
+ callback = opts;
|
|
|
+ opts = {};
|
|
|
+ }
|
|
|
+ this.walkDecls((decl2) => {
|
|
|
+ if (opts.props && !opts.props.includes(decl2.prop)) return;
|
|
|
+ if (opts.fast && !decl2.value.includes(opts.fast)) return;
|
|
|
+ decl2.value = decl2.value.replace(pattern, callback);
|
|
|
+ });
|
|
|
+ this.markDirty();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ some(condition) {
|
|
|
+ return this.nodes.some(condition);
|
|
|
+ }
|
|
|
+ walk(callback) {
|
|
|
+ if (!this.proxyOf.nodes) return void 0;
|
|
|
+ let stack = [{ iterator: this.getIterator(), node: this.proxyOf }];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let { iterator, node } = stack[stack.length - 1];
|
|
|
+ let index = node.indexes[iterator];
|
|
|
+ if (index >= node.proxyOf.nodes.length) {
|
|
|
+ delete node.indexes[iterator];
|
|
|
+ stack.pop();
|
|
|
+ let parent = stack[stack.length - 1];
|
|
|
+ if (parent) parent.node.indexes[parent.iterator] += 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ let child = node.proxyOf.nodes[index];
|
|
|
+ let result;
|
|
|
+ try {
|
|
|
+ result = callback(child, index);
|
|
|
+ } catch (e) {
|
|
|
+ throw child.addToError(e);
|
|
|
+ }
|
|
|
+ if (result === false) {
|
|
|
+ for (let opened of stack) {
|
|
|
+ delete opened.node.indexes[opened.iterator];
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (child.walk && child.proxyOf.nodes) {
|
|
|
+ stack.push({ iterator: child.getIterator(), node: child });
|
|
|
+ } else {
|
|
|
+ node.indexes[iterator] += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return void 0;
|
|
|
+ }
|
|
|
+ walkAtRules(name, callback) {
|
|
|
+ if (!callback) {
|
|
|
+ callback = name;
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "atrule") {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (name instanceof RegExp) {
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "atrule" && name.test(child.name)) {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "atrule" && child.name === name) {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ walkComments(callback) {
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "comment") {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ walkDecls(prop, callback) {
|
|
|
+ if (!callback) {
|
|
|
+ callback = prop;
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "decl") {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (prop instanceof RegExp) {
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "decl" && prop.test(child.prop)) {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "decl" && child.prop === prop) {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ walkRules(selector, callback) {
|
|
|
+ if (!callback) {
|
|
|
+ callback = selector;
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "rule") {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (selector instanceof RegExp) {
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "rule" && selector.test(child.selector)) {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return this.walk((child, i) => {
|
|
|
+ if (child.type === "rule" && child.selector === selector) {
|
|
|
+ return callback(child, i);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ };
|
|
|
+ Container2.registerParse = (dependant) => {
|
|
|
+ parse3 = dependant;
|
|
|
+ };
|
|
|
+ Container2.registerRule = (dependant) => {
|
|
|
+ Rule2 = dependant;
|
|
|
+ };
|
|
|
+ Container2.registerAtRule = (dependant) => {
|
|
|
+ AtRule2 = dependant;
|
|
|
+ };
|
|
|
+ Container2.registerRoot = (dependant) => {
|
|
|
+ Root2 = dependant;
|
|
|
+ };
|
|
|
+ module.exports = Container2;
|
|
|
+ Container2.default = Container2;
|
|
|
+ Container2.rebuild = (node) => {
|
|
|
+ let stack = [node];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let next = stack.pop();
|
|
|
+ if (next.type === "atrule") {
|
|
|
+ Object.setPrototypeOf(next, AtRule2.prototype);
|
|
|
+ } else if (next.type === "rule") {
|
|
|
+ Object.setPrototypeOf(next, Rule2.prototype);
|
|
|
+ } else if (next.type === "decl") {
|
|
|
+ Object.setPrototypeOf(next, Declaration2.prototype);
|
|
|
+ } else if (next.type === "comment") {
|
|
|
+ Object.setPrototypeOf(next, Comment2.prototype);
|
|
|
+ } else if (next.type === "root") {
|
|
|
+ Object.setPrototypeOf(next, Root2.prototype);
|
|
|
+ }
|
|
|
+ next[my] = true;
|
|
|
+ if (next.nodes) {
|
|
|
+ for (let child of next.nodes) stack.push(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/at-rule.js
|
|
|
+ var require_at_rule = __commonJS({
|
|
|
+ "node_modules/postcss/lib/at-rule.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var AtRule2 = class extends Container2 {
|
|
|
+ constructor(defaults2) {
|
|
|
+ super(defaults2);
|
|
|
+ this.type = "atrule";
|
|
|
+ }
|
|
|
+ append(...children) {
|
|
|
+ if (!this.proxyOf.nodes) this.nodes = [];
|
|
|
+ return super.append(...children);
|
|
|
+ }
|
|
|
+ prepend(...children) {
|
|
|
+ if (!this.proxyOf.nodes) this.nodes = [];
|
|
|
+ return super.prepend(...children);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = AtRule2;
|
|
|
+ AtRule2.default = AtRule2;
|
|
|
+ Container2.registerAtRule(AtRule2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/document.js
|
|
|
+ var require_document = __commonJS({
|
|
|
+ "node_modules/postcss/lib/document.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var LazyResult;
|
|
|
+ var Processor2;
|
|
|
+ var Document2 = class extends Container2 {
|
|
|
+ constructor(defaults2) {
|
|
|
+ super({ type: "document", ...defaults2 });
|
|
|
+ if (!this.nodes) {
|
|
|
+ this.nodes = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ toResult(opts = {}) {
|
|
|
+ let lazy = new LazyResult(new Processor2(), this, opts);
|
|
|
+ return lazy.stringify();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ Document2.registerLazyResult = (dependant) => {
|
|
|
+ LazyResult = dependant;
|
|
|
+ };
|
|
|
+ Document2.registerProcessor = (dependant) => {
|
|
|
+ Processor2 = dependant;
|
|
|
+ };
|
|
|
+ module.exports = Document2;
|
|
|
+ Document2.default = Document2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/nanoid/non-secure/index.cjs
|
|
|
+ var require_non_secure = __commonJS({
|
|
|
+ "node_modules/nanoid/non-secure/index.cjs"(exports, module) {
|
|
|
+ var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
|
+ var customAlphabet = (alphabet, defaultSize = 21) => {
|
|
|
+ return (size = defaultSize) => {
|
|
|
+ let id = "";
|
|
|
+ let i = size | 0;
|
|
|
+ while (i-- > 0) {
|
|
|
+ id += alphabet[Math.random() * alphabet.length | 0];
|
|
|
+ }
|
|
|
+ return id;
|
|
|
+ };
|
|
|
+ };
|
|
|
+ var nanoid = (size = 21) => {
|
|
|
+ let id = "";
|
|
|
+ let i = size | 0;
|
|
|
+ while (i-- > 0) {
|
|
|
+ id += urlAlphabet[Math.random() * 64 | 0];
|
|
|
+ }
|
|
|
+ return id;
|
|
|
+ };
|
|
|
+ module.exports = { nanoid, customAlphabet };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // (disabled):path
|
|
|
+ var require_path = __commonJS({
|
|
|
+ "(disabled):path"() {
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // (disabled):node_modules/source-map-js/source-map.js
|
|
|
+ var require_source_map = __commonJS({
|
|
|
+ "(disabled):node_modules/source-map-js/source-map.js"() {
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // (disabled):url
|
|
|
+ var require_url = __commonJS({
|
|
|
+ "(disabled):url"() {
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // (disabled):fs
|
|
|
+ var require_fs = __commonJS({
|
|
|
+ "(disabled):fs"() {
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/previous-map.js
|
|
|
+ var require_previous_map = __commonJS({
|
|
|
+ "node_modules/postcss/lib/previous-map.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var { existsSync, readFileSync } = require_fs();
|
|
|
+ var { dirname, isAbsolute, join, relative, sep } = require_path();
|
|
|
+ var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
|
+ function fromBase64(str) {
|
|
|
+ if (Buffer) {
|
|
|
+ return Buffer.from(str, "base64").toString();
|
|
|
+ } else {
|
|
|
+ return window.atob(str);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var PreviousMap = class {
|
|
|
+ constructor(css, opts) {
|
|
|
+ if (opts.map === false) return;
|
|
|
+ if (opts.unsafeMap) this.unsafeMap = true;
|
|
|
+ this.loadAnnotation(css);
|
|
|
+ this.inline = this.startWith(this.annotation, "data:");
|
|
|
+ let prev = opts.map ? opts.map.prev : void 0;
|
|
|
+ let text = this.loadMap(opts.from, prev);
|
|
|
+ if (!this.mapFile && opts.from) {
|
|
|
+ this.mapFile = opts.from;
|
|
|
+ }
|
|
|
+ if (this.mapFile) this.root = dirname(this.mapFile);
|
|
|
+ if (text) this.text = text;
|
|
|
+ }
|
|
|
+ consumer() {
|
|
|
+ if (!this.consumerCache) {
|
|
|
+ this.consumerCache = new SourceMapConsumer(this.json || this.text);
|
|
|
+ }
|
|
|
+ return this.consumerCache;
|
|
|
+ }
|
|
|
+ decodeInline(text) {
|
|
|
+ let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/;
|
|
|
+ let baseUri = /^data:application\/json;base64,/;
|
|
|
+ let charsetUri = /^data:application\/json;charset=utf-?8,/;
|
|
|
+ let uri = /^data:application\/json,/;
|
|
|
+ let uriMatch = text.match(charsetUri) || text.match(uri);
|
|
|
+ if (uriMatch) {
|
|
|
+ return decodeURIComponent(text.substr(uriMatch[0].length));
|
|
|
+ }
|
|
|
+ let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri);
|
|
|
+ if (baseUriMatch) {
|
|
|
+ return fromBase64(text.substr(baseUriMatch[0].length));
|
|
|
+ }
|
|
|
+ let encoding = text.slice("data:application/json;".length);
|
|
|
+ encoding = encoding.slice(0, encoding.indexOf(","));
|
|
|
+ throw new Error("Unsupported source map encoding " + encoding);
|
|
|
+ }
|
|
|
+ getAnnotationURL(sourceMapString) {
|
|
|
+ return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, "").trim();
|
|
|
+ }
|
|
|
+ isMap(map) {
|
|
|
+ if (typeof map !== "object") return false;
|
|
|
+ return typeof map.mappings === "string" || typeof map._mappings === "string" || Array.isArray(map.sections);
|
|
|
+ }
|
|
|
+ loadAnnotation(css) {
|
|
|
+ let comments = css.match(/\/\*\s*# sourceMappingURL=/g);
|
|
|
+ if (!comments) return;
|
|
|
+ let start = css.lastIndexOf(comments.pop());
|
|
|
+ let end = css.indexOf("*/", start);
|
|
|
+ if (start > -1 && end > -1) {
|
|
|
+ this.annotation = this.getAnnotationURL(css.substring(start, end));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ loadFile(path, cssFile, trusted) {
|
|
|
+ if (!trusted && !this.unsafeMap) {
|
|
|
+ if (!/\.map$/i.test(path)) return void 0;
|
|
|
+ if (!cssFile) return void 0;
|
|
|
+ let rel = relative(dirname(cssFile), path);
|
|
|
+ if (rel === ".." || rel.startsWith(".." + sep) || isAbsolute(rel)) {
|
|
|
+ return void 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.root = dirname(path);
|
|
|
+ if (existsSync(path)) {
|
|
|
+ this.mapFile = path;
|
|
|
+ return readFileSync(path, "utf-8").toString().trim();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ loadMap(file, prev) {
|
|
|
+ if (prev === false) return false;
|
|
|
+ if (prev) {
|
|
|
+ if (typeof prev === "string") {
|
|
|
+ return prev;
|
|
|
+ } else if (typeof prev === "function") {
|
|
|
+ let prevPath = prev(file);
|
|
|
+ if (prevPath) {
|
|
|
+ let map = this.loadFile(prevPath, file, true);
|
|
|
+ if (!map) {
|
|
|
+ throw new Error(
|
|
|
+ "Unable to load previous source map: " + prevPath.toString()
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ } else if (prev instanceof SourceMapConsumer) {
|
|
|
+ return SourceMapGenerator.fromSourceMap(prev).toString();
|
|
|
+ } else if (prev instanceof SourceMapGenerator) {
|
|
|
+ return prev.toString();
|
|
|
+ } else if (this.isMap(prev)) {
|
|
|
+ return JSON.stringify(prev);
|
|
|
+ } else {
|
|
|
+ throw new Error(
|
|
|
+ "Unsupported previous source map format: " + prev.toString()
|
|
|
+ );
|
|
|
+ }
|
|
|
+ } else if (this.inline) {
|
|
|
+ return this.decodeInline(this.annotation);
|
|
|
+ } else if (this.annotation) {
|
|
|
+ let map = this.annotation;
|
|
|
+ if (file) map = join(dirname(file), map);
|
|
|
+ let unknown = this.loadFile(map, file, false);
|
|
|
+ if (unknown) {
|
|
|
+ try {
|
|
|
+ this.json = JSON.parse(unknown.replace(/^\)]}'[^\n]*\n/, ""));
|
|
|
+ } catch {
|
|
|
+ return void 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return unknown;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ startWith(string, start) {
|
|
|
+ if (!string) return false;
|
|
|
+ return string.substr(0, start.length) === start;
|
|
|
+ }
|
|
|
+ withContent() {
|
|
|
+ return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = PreviousMap;
|
|
|
+ PreviousMap.default = PreviousMap;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/input.js
|
|
|
+ var require_input = __commonJS({
|
|
|
+ "node_modules/postcss/lib/input.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var { nanoid } = require_non_secure();
|
|
|
+ var { isAbsolute, resolve } = require_path();
|
|
|
+ var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
|
+ var { fileURLToPath, pathToFileURL } = require_url();
|
|
|
+ var CssSyntaxError2 = require_css_syntax_error();
|
|
|
+ var PreviousMap = require_previous_map();
|
|
|
+ var terminalHighlight = require_terminal_highlight();
|
|
|
+ var lineToIndexCache = /* @__PURE__ */ Symbol("lineToIndexCache");
|
|
|
+ var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
|
|
|
+ var pathAvailable = Boolean(resolve && isAbsolute);
|
|
|
+ function getLineToIndex(input) {
|
|
|
+ if (input[lineToIndexCache]) return input[lineToIndexCache];
|
|
|
+ let lines = input.css.split("\n");
|
|
|
+ let lineToIndex = new Array(lines.length);
|
|
|
+ let prevIndex = 0;
|
|
|
+ for (let i = 0, l = lines.length; i < l; i++) {
|
|
|
+ lineToIndex[i] = prevIndex;
|
|
|
+ prevIndex += lines[i].length + 1;
|
|
|
+ }
|
|
|
+ input[lineToIndexCache] = lineToIndex;
|
|
|
+ return lineToIndex;
|
|
|
+ }
|
|
|
+ var Input2 = class {
|
|
|
+ get from() {
|
|
|
+ return this.file || this.id;
|
|
|
+ }
|
|
|
+ constructor(css, opts = {}) {
|
|
|
+ if (css === null || typeof css === "undefined" || typeof css === "object" && !css.toString) {
|
|
|
+ throw new Error(`PostCSS received ${css} instead of CSS string`);
|
|
|
+ }
|
|
|
+ this.css = css.toString();
|
|
|
+ if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") {
|
|
|
+ this.hasBOM = true;
|
|
|
+ this.css = this.css.slice(1);
|
|
|
+ } else {
|
|
|
+ this.hasBOM = false;
|
|
|
+ }
|
|
|
+ this.document = this.css;
|
|
|
+ if (opts.document) this.document = opts.document.toString();
|
|
|
+ if (opts.from) {
|
|
|
+ if (!pathAvailable || /^\w+:\/\//.test(opts.from) || isAbsolute(opts.from)) {
|
|
|
+ this.file = opts.from;
|
|
|
+ } else {
|
|
|
+ this.file = resolve(opts.from);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (pathAvailable && sourceMapAvailable) {
|
|
|
+ let map = new PreviousMap(this.css, opts);
|
|
|
+ if (map.text) {
|
|
|
+ this.map = map;
|
|
|
+ let file = map.consumer().file;
|
|
|
+ if (!this.file && file) this.file = this.mapResolve(file);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!this.file) {
|
|
|
+ this.id = "<input css " + nanoid(6) + ">";
|
|
|
+ }
|
|
|
+ if (this.map) this.map.file = this.from;
|
|
|
+ }
|
|
|
+ error(message, line, column, opts = {}) {
|
|
|
+ let endColumn, endLine, endOffset, offset, result;
|
|
|
+ if (line && typeof line === "object") {
|
|
|
+ let start = line;
|
|
|
+ let end = column;
|
|
|
+ if (typeof start.offset === "number") {
|
|
|
+ offset = start.offset;
|
|
|
+ let pos = this.fromOffset(offset);
|
|
|
+ line = pos.line;
|
|
|
+ column = pos.col;
|
|
|
+ } else {
|
|
|
+ line = start.line;
|
|
|
+ column = start.column;
|
|
|
+ offset = this.fromLineAndColumn(line, column);
|
|
|
+ }
|
|
|
+ if (typeof end.offset === "number") {
|
|
|
+ endOffset = end.offset;
|
|
|
+ let pos = this.fromOffset(endOffset);
|
|
|
+ endLine = pos.line;
|
|
|
+ endColumn = pos.col;
|
|
|
+ } else {
|
|
|
+ endLine = end.line;
|
|
|
+ endColumn = end.column;
|
|
|
+ endOffset = this.fromLineAndColumn(end.line, end.column);
|
|
|
+ }
|
|
|
+ } else if (!column) {
|
|
|
+ offset = line;
|
|
|
+ let pos = this.fromOffset(offset);
|
|
|
+ line = pos.line;
|
|
|
+ column = pos.col;
|
|
|
+ } else {
|
|
|
+ offset = this.fromLineAndColumn(line, column);
|
|
|
+ }
|
|
|
+ let origin = this.origin(line, column, endLine, endColumn);
|
|
|
+ if (origin) {
|
|
|
+ result = new CssSyntaxError2(
|
|
|
+ message,
|
|
|
+ origin.endLine === void 0 ? origin.line : { column: origin.column, line: origin.line },
|
|
|
+ origin.endLine === void 0 ? origin.column : { column: origin.endColumn, line: origin.endLine },
|
|
|
+ origin.source,
|
|
|
+ origin.file,
|
|
|
+ opts.plugin
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ result = new CssSyntaxError2(
|
|
|
+ message,
|
|
|
+ endLine === void 0 ? line : { column, line },
|
|
|
+ endLine === void 0 ? column : { column: endColumn, line: endLine },
|
|
|
+ this.css,
|
|
|
+ this.file,
|
|
|
+ opts.plugin
|
|
|
+ );
|
|
|
+ }
|
|
|
+ result.input = {
|
|
|
+ column,
|
|
|
+ endColumn,
|
|
|
+ endLine,
|
|
|
+ endOffset,
|
|
|
+ line,
|
|
|
+ offset,
|
|
|
+ source: this.css
|
|
|
+ };
|
|
|
+ if (this.file) {
|
|
|
+ if (pathToFileURL) {
|
|
|
+ result.input.url = pathToFileURL(this.file).toString();
|
|
|
+ }
|
|
|
+ result.input.file = this.file;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ fromLineAndColumn(line, column) {
|
|
|
+ let lineToIndex = getLineToIndex(this);
|
|
|
+ let index = lineToIndex[line - 1];
|
|
|
+ return index + column - 1;
|
|
|
+ }
|
|
|
+ fromOffset(offset) {
|
|
|
+ let lineToIndex = getLineToIndex(this);
|
|
|
+ let lastLine = lineToIndex[lineToIndex.length - 1];
|
|
|
+ let min = 0;
|
|
|
+ if (offset >= lastLine) {
|
|
|
+ min = lineToIndex.length - 1;
|
|
|
+ } else {
|
|
|
+ let max = lineToIndex.length - 2;
|
|
|
+ let mid;
|
|
|
+ while (min < max) {
|
|
|
+ mid = min + (max - min >> 1);
|
|
|
+ if (offset < lineToIndex[mid]) {
|
|
|
+ max = mid - 1;
|
|
|
+ } else if (offset >= lineToIndex[mid + 1]) {
|
|
|
+ min = mid + 1;
|
|
|
+ } else {
|
|
|
+ min = mid;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ col: offset - lineToIndex[min] + 1,
|
|
|
+ line: min + 1
|
|
|
+ };
|
|
|
+ }
|
|
|
+ mapResolve(file) {
|
|
|
+ if (/^\w+:\/\//.test(file)) {
|
|
|
+ return file;
|
|
|
+ }
|
|
|
+ return resolve(this.map.consumer().sourceRoot || this.map.root || ".", file);
|
|
|
+ }
|
|
|
+ origin(line, column, endLine, endColumn) {
|
|
|
+ if (!this.map) return false;
|
|
|
+ let consumer = this.map.consumer();
|
|
|
+ let from = consumer.originalPositionFor({ column: column - 1, line });
|
|
|
+ if (!from.source) return false;
|
|
|
+ let to;
|
|
|
+ if (typeof endLine === "number") {
|
|
|
+ let toPosition = consumer.originalPositionFor({
|
|
|
+ column: endColumn - 1,
|
|
|
+ line: endLine
|
|
|
+ });
|
|
|
+ if (toPosition.source) to = toPosition;
|
|
|
+ }
|
|
|
+ let fromUrl;
|
|
|
+ if (isAbsolute(from.source)) {
|
|
|
+ fromUrl = pathToFileURL(from.source);
|
|
|
+ } else {
|
|
|
+ fromUrl = new URL(
|
|
|
+ from.source,
|
|
|
+ this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ let result = {
|
|
|
+ column: from.column + 1,
|
|
|
+ endColumn: to && to.column + 1,
|
|
|
+ endLine: to && to.line,
|
|
|
+ line: from.line,
|
|
|
+ url: fromUrl.toString()
|
|
|
+ };
|
|
|
+ if (fromUrl.protocol === "file:") {
|
|
|
+ if (fileURLToPath) {
|
|
|
+ result.file = fileURLToPath(fromUrl);
|
|
|
+ } else {
|
|
|
+ throw new Error(`file: protocol is not available in this PostCSS build`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let source = consumer.sourceContentFor(from.source);
|
|
|
+ if (source) result.source = source;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ toJSON() {
|
|
|
+ let json = {};
|
|
|
+ for (let name of ["hasBOM", "css", "file", "id"]) {
|
|
|
+ if (this[name] != null) {
|
|
|
+ json[name] = this[name];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (this.map) {
|
|
|
+ json.map = { ...this.map };
|
|
|
+ if (json.map.consumerCache) {
|
|
|
+ json.map.consumerCache = void 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return json;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Input2;
|
|
|
+ Input2.default = Input2;
|
|
|
+ if (terminalHighlight && terminalHighlight.registerInput) {
|
|
|
+ terminalHighlight.registerInput(Input2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/root.js
|
|
|
+ var require_root = __commonJS({
|
|
|
+ "node_modules/postcss/lib/root.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var LazyResult;
|
|
|
+ var Processor2;
|
|
|
+ var Root2 = class extends Container2 {
|
|
|
+ constructor(defaults2) {
|
|
|
+ super(defaults2);
|
|
|
+ this.type = "root";
|
|
|
+ if (!this.nodes) this.nodes = [];
|
|
|
+ }
|
|
|
+ normalize(child, sample, type) {
|
|
|
+ let keepBefore = /* @__PURE__ */ new Set();
|
|
|
+ for (let node of Array.isArray(child) ? child : [child]) {
|
|
|
+ if (node && typeof node === "object" && !node.parent && node.raws && typeof node.raws.before !== "undefined") {
|
|
|
+ keepBefore.add(node.raws);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let nodes = super.normalize(child);
|
|
|
+ if (sample) {
|
|
|
+ if (type === "prepend") {
|
|
|
+ if (this.nodes.length > 1) {
|
|
|
+ sample.raws.before = this.nodes[1].raws.before;
|
|
|
+ } else {
|
|
|
+ delete sample.raws.before;
|
|
|
+ }
|
|
|
+ } else if (this.first !== sample) {
|
|
|
+ for (let node of nodes) {
|
|
|
+ if (!keepBefore.has(node.raws)) {
|
|
|
+ node.raws.before = sample.raws.before;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nodes;
|
|
|
+ }
|
|
|
+ removeChild(child, ignore) {
|
|
|
+ let index = this.index(child);
|
|
|
+ if (!ignore && index === 0 && this.nodes.length > 1) {
|
|
|
+ this.nodes[1].raws.before = this.nodes[index].raws.before;
|
|
|
+ }
|
|
|
+ return super.removeChild(child);
|
|
|
+ }
|
|
|
+ toResult(opts = {}) {
|
|
|
+ let lazy = new LazyResult(new Processor2(), this, opts);
|
|
|
+ return lazy.stringify();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ Root2.registerLazyResult = (dependant) => {
|
|
|
+ LazyResult = dependant;
|
|
|
+ };
|
|
|
+ Root2.registerProcessor = (dependant) => {
|
|
|
+ Processor2 = dependant;
|
|
|
+ };
|
|
|
+ module.exports = Root2;
|
|
|
+ Root2.default = Root2;
|
|
|
+ Container2.registerRoot(Root2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/list.js
|
|
|
+ var require_list = __commonJS({
|
|
|
+ "node_modules/postcss/lib/list.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var list2 = {
|
|
|
+ comma(string) {
|
|
|
+ return list2.split(string, [","], true);
|
|
|
+ },
|
|
|
+ space(string) {
|
|
|
+ let spaces = [" ", "\n", " "];
|
|
|
+ return list2.split(string, spaces);
|
|
|
+ },
|
|
|
+ split(string, separators, last) {
|
|
|
+ if (!string) return [];
|
|
|
+ let array = [];
|
|
|
+ let current = "";
|
|
|
+ let split = false;
|
|
|
+ let func = 0;
|
|
|
+ let inQuote = false;
|
|
|
+ let prevQuote = "";
|
|
|
+ let escape = false;
|
|
|
+ for (let letter of string) {
|
|
|
+ if (escape) {
|
|
|
+ escape = false;
|
|
|
+ } else if (letter === "\\") {
|
|
|
+ escape = true;
|
|
|
+ } else if (inQuote) {
|
|
|
+ if (letter === prevQuote) {
|
|
|
+ inQuote = false;
|
|
|
+ }
|
|
|
+ } else if (letter === '"' || letter === "'") {
|
|
|
+ inQuote = true;
|
|
|
+ prevQuote = letter;
|
|
|
+ } else if (letter === "(") {
|
|
|
+ func += 1;
|
|
|
+ } else if (letter === ")") {
|
|
|
+ if (func > 0) func -= 1;
|
|
|
+ } else if (func === 0) {
|
|
|
+ if (separators.includes(letter)) split = true;
|
|
|
+ }
|
|
|
+ if (split) {
|
|
|
+ if (current !== "") array.push(current.trim());
|
|
|
+ current = "";
|
|
|
+ split = false;
|
|
|
+ } else {
|
|
|
+ current += letter;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (last || current !== "") array.push(current.trim());
|
|
|
+ return array;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = list2;
|
|
|
+ list2.default = list2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/rule.js
|
|
|
+ var require_rule = __commonJS({
|
|
|
+ "node_modules/postcss/lib/rule.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var list2 = require_list();
|
|
|
+ var Rule2 = class extends Container2 {
|
|
|
+ get selectors() {
|
|
|
+ return list2.comma(this.selector);
|
|
|
+ }
|
|
|
+ set selectors(values) {
|
|
|
+ let match = this.selector ? this.selector.match(/,\s*/) : null;
|
|
|
+ let sep = match ? match[0] : "," + this.raw("between", "beforeOpen");
|
|
|
+ this.selector = values.join(sep);
|
|
|
+ }
|
|
|
+ constructor(defaults2) {
|
|
|
+ super(defaults2);
|
|
|
+ this.type = "rule";
|
|
|
+ if (!this.nodes) this.nodes = [];
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Rule2;
|
|
|
+ Rule2.default = Rule2;
|
|
|
+ Container2.registerRule(Rule2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/fromJSON.js
|
|
|
+ var require_fromJSON = __commonJS({
|
|
|
+ "node_modules/postcss/lib/fromJSON.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var AtRule2 = require_at_rule();
|
|
|
+ var Comment2 = require_comment();
|
|
|
+ var Declaration2 = require_declaration();
|
|
|
+ var Input2 = require_input();
|
|
|
+ var PreviousMap = require_previous_map();
|
|
|
+ var Root2 = require_root();
|
|
|
+ var Rule2 = require_rule();
|
|
|
+ function hydrateInputs(json, inputs) {
|
|
|
+ if (!json.inputs) return inputs;
|
|
|
+ return json.inputs.map((input) => {
|
|
|
+ let inputHydrated = { ...input, __proto__: Input2.prototype };
|
|
|
+ if (inputHydrated.map) {
|
|
|
+ inputHydrated.map = {
|
|
|
+ ...inputHydrated.map,
|
|
|
+ __proto__: PreviousMap.prototype
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return inputHydrated;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function constructNode(json, inputs, children) {
|
|
|
+ let defaults2 = { ...json };
|
|
|
+ delete defaults2.inputs;
|
|
|
+ delete defaults2.nodes;
|
|
|
+ if (defaults2.source) {
|
|
|
+ let { inputId, ...source } = defaults2.source;
|
|
|
+ defaults2.source = source;
|
|
|
+ if (inputId != null) {
|
|
|
+ defaults2.source.input = inputs[inputId];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let node;
|
|
|
+ if (defaults2.type === "root") {
|
|
|
+ node = new Root2(defaults2);
|
|
|
+ } else if (defaults2.type === "decl") {
|
|
|
+ node = new Declaration2(defaults2);
|
|
|
+ } else if (defaults2.type === "rule") {
|
|
|
+ node = new Rule2(defaults2);
|
|
|
+ } else if (defaults2.type === "comment") {
|
|
|
+ node = new Comment2(defaults2);
|
|
|
+ } else if (defaults2.type === "atrule") {
|
|
|
+ node = new AtRule2(defaults2);
|
|
|
+ } else {
|
|
|
+ throw new Error("Unknown node type: " + json.type);
|
|
|
+ }
|
|
|
+ if (children) {
|
|
|
+ node.nodes = children;
|
|
|
+ for (let child of children) child.parent = node;
|
|
|
+ }
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ function fromJSON2(json, inputs) {
|
|
|
+ if (Array.isArray(json)) return json.map((n) => fromJSON2(n));
|
|
|
+ let result;
|
|
|
+ let stack = [
|
|
|
+ { childIndex: 0, children: [], inputs: hydrateInputs(json, inputs), json }
|
|
|
+ ];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let frame = stack[stack.length - 1];
|
|
|
+ let jsonNodes = frame.json.nodes;
|
|
|
+ if (jsonNodes && frame.childIndex < jsonNodes.length) {
|
|
|
+ let childJson = jsonNodes[frame.childIndex];
|
|
|
+ frame.childIndex += 1;
|
|
|
+ stack.push({
|
|
|
+ childIndex: 0,
|
|
|
+ children: [],
|
|
|
+ inputs: hydrateInputs(childJson, frame.inputs),
|
|
|
+ json: childJson
|
|
|
+ });
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ stack.pop();
|
|
|
+ let node = constructNode(
|
|
|
+ frame.json,
|
|
|
+ frame.inputs,
|
|
|
+ jsonNodes ? frame.children : void 0
|
|
|
+ );
|
|
|
+ if (stack.length > 0) {
|
|
|
+ stack[stack.length - 1].children.push(node);
|
|
|
+ } else {
|
|
|
+ result = node;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ module.exports = fromJSON2;
|
|
|
+ fromJSON2.default = fromJSON2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/map-generator.js
|
|
|
+ var require_map_generator = __commonJS({
|
|
|
+ "node_modules/postcss/lib/map-generator.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var { dirname, relative, resolve, sep } = require_path();
|
|
|
+ var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
|
+ var { pathToFileURL } = require_url();
|
|
|
+ var Input2 = require_input();
|
|
|
+ var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
|
|
|
+ var pathAvailable = Boolean(dirname && resolve && relative && sep);
|
|
|
+ var MapGenerator = class {
|
|
|
+ constructor(stringify3, root2, opts, cssString) {
|
|
|
+ this.stringify = stringify3;
|
|
|
+ this.mapOpts = opts.map || {};
|
|
|
+ this.root = root2;
|
|
|
+ this.opts = opts;
|
|
|
+ this.css = cssString;
|
|
|
+ this.originalCSS = cssString;
|
|
|
+ this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;
|
|
|
+ this.memoizedFileURLs = /* @__PURE__ */ new Map();
|
|
|
+ this.memoizedPaths = /* @__PURE__ */ new Map();
|
|
|
+ this.memoizedURLs = /* @__PURE__ */ new Map();
|
|
|
+ }
|
|
|
+ addAnnotation() {
|
|
|
+ let content;
|
|
|
+ if (this.isInline()) {
|
|
|
+ content = "data:application/json;base64," + this.toBase64(this.map.toString());
|
|
|
+ } else if (typeof this.mapOpts.annotation === "string") {
|
|
|
+ content = this.mapOpts.annotation;
|
|
|
+ } else if (typeof this.mapOpts.annotation === "function") {
|
|
|
+ content = this.mapOpts.annotation(this.opts.to, this.root);
|
|
|
+ } else {
|
|
|
+ content = this.outputFile() + ".map";
|
|
|
+ }
|
|
|
+ let eol = "\n";
|
|
|
+ if (this.css.includes("\r\n")) eol = "\r\n";
|
|
|
+ this.css += eol + "/*# sourceMappingURL=" + content + " */";
|
|
|
+ }
|
|
|
+ applyPrevMaps() {
|
|
|
+ for (let prev of this.previous()) {
|
|
|
+ let from = this.toUrl(this.path(prev.file));
|
|
|
+ let root2 = prev.root || dirname(prev.file);
|
|
|
+ let map;
|
|
|
+ if (this.mapOpts.sourcesContent === false) {
|
|
|
+ map = new SourceMapConsumer(prev.text);
|
|
|
+ if (map.sourcesContent) {
|
|
|
+ map.sourcesContent = null;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ map = prev.consumer();
|
|
|
+ }
|
|
|
+ this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ clearAnnotation() {
|
|
|
+ if (this.mapOpts.annotation === false) return;
|
|
|
+ if (this.root) {
|
|
|
+ let node;
|
|
|
+ for (let i = this.root.nodes.length - 1; i >= 0; i--) {
|
|
|
+ node = this.root.nodes[i];
|
|
|
+ if (node.type !== "comment") continue;
|
|
|
+ if (node.text.startsWith("# sourceMappingURL=")) {
|
|
|
+ this.root.removeChild(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (this.css) {
|
|
|
+ let startIndex;
|
|
|
+ while ((startIndex = this.css.lastIndexOf("/*#")) !== -1) {
|
|
|
+ let endIndex = this.css.indexOf("*/", startIndex + 3);
|
|
|
+ if (endIndex === -1) break;
|
|
|
+ while (startIndex > 0 && this.css[startIndex - 1] === "\n") {
|
|
|
+ startIndex--;
|
|
|
+ }
|
|
|
+ this.css = this.css.slice(0, startIndex) + this.css.slice(endIndex + 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ generate() {
|
|
|
+ this.clearAnnotation();
|
|
|
+ if (pathAvailable && sourceMapAvailable && this.isMap()) {
|
|
|
+ return this.generateMap();
|
|
|
+ } else {
|
|
|
+ let result = "";
|
|
|
+ this.stringify(this.root, (i) => {
|
|
|
+ result += i;
|
|
|
+ });
|
|
|
+ return [result];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ generateMap() {
|
|
|
+ if (this.root) {
|
|
|
+ this.generateString();
|
|
|
+ } else if (this.previous().length === 1) {
|
|
|
+ let prev = this.previous()[0].consumer();
|
|
|
+ prev.file = this.outputFile();
|
|
|
+ this.map = SourceMapGenerator.fromSourceMap(prev, {
|
|
|
+ ignoreInvalidMapping: true
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.map = new SourceMapGenerator({
|
|
|
+ file: this.outputFile(),
|
|
|
+ ignoreInvalidMapping: true
|
|
|
+ });
|
|
|
+ this.map.addMapping({
|
|
|
+ generated: { column: 0, line: 1 },
|
|
|
+ original: { column: 0, line: 1 },
|
|
|
+ source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (this.isSourcesContent()) this.setSourcesContent();
|
|
|
+ if (this.root && this.previous().length > 0) this.applyPrevMaps();
|
|
|
+ if (this.isAnnotation()) this.addAnnotation();
|
|
|
+ if (this.isInline()) {
|
|
|
+ return [this.css];
|
|
|
+ } else {
|
|
|
+ return [this.css, this.map];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ generateString() {
|
|
|
+ this.css = "";
|
|
|
+ this.map = new SourceMapGenerator({
|
|
|
+ file: this.outputFile(),
|
|
|
+ ignoreInvalidMapping: true
|
|
|
+ });
|
|
|
+ let line = 1;
|
|
|
+ let column = 1;
|
|
|
+ let noSource = "<no source>";
|
|
|
+ let mapping = {
|
|
|
+ generated: { column: 0, line: 0 },
|
|
|
+ original: { column: 0, line: 0 },
|
|
|
+ source: ""
|
|
|
+ };
|
|
|
+ let last, lines;
|
|
|
+ this.stringify(this.root, (str, node, type) => {
|
|
|
+ this.css += str;
|
|
|
+ if (node && type !== "end") {
|
|
|
+ mapping.generated.line = line;
|
|
|
+ mapping.generated.column = column - 1;
|
|
|
+ if (node.source && node.source.start) {
|
|
|
+ mapping.source = this.sourcePath(node);
|
|
|
+ mapping.original.line = node.source.start.line;
|
|
|
+ mapping.original.column = node.source.start.column - 1;
|
|
|
+ this.map.addMapping(mapping);
|
|
|
+ } else {
|
|
|
+ mapping.source = noSource;
|
|
|
+ mapping.original.line = 1;
|
|
|
+ mapping.original.column = 0;
|
|
|
+ this.map.addMapping(mapping);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lines = str.match(/\n/g);
|
|
|
+ if (lines) {
|
|
|
+ line += lines.length;
|
|
|
+ last = str.lastIndexOf("\n");
|
|
|
+ column = str.length - last;
|
|
|
+ } else {
|
|
|
+ column += str.length;
|
|
|
+ }
|
|
|
+ if (node && type !== "start") {
|
|
|
+ let p = node.parent || { raws: {} };
|
|
|
+ let childless = node.type === "decl" || node.type === "atrule" && !node.nodes;
|
|
|
+ if (!childless || node !== p.last || p.raws.semicolon) {
|
|
|
+ if (node.source && node.source.end) {
|
|
|
+ mapping.source = this.sourcePath(node);
|
|
|
+ mapping.original.line = node.source.end.line;
|
|
|
+ mapping.original.column = node.source.end.column - 1;
|
|
|
+ mapping.generated.line = line;
|
|
|
+ mapping.generated.column = column - 2;
|
|
|
+ this.map.addMapping(mapping);
|
|
|
+ } else {
|
|
|
+ mapping.source = noSource;
|
|
|
+ mapping.original.line = 1;
|
|
|
+ mapping.original.column = 0;
|
|
|
+ mapping.generated.line = line;
|
|
|
+ mapping.generated.column = column - 1;
|
|
|
+ this.map.addMapping(mapping);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ isAnnotation() {
|
|
|
+ if (this.isInline()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (typeof this.mapOpts.annotation !== "undefined") {
|
|
|
+ return this.mapOpts.annotation;
|
|
|
+ }
|
|
|
+ if (this.previous().length) {
|
|
|
+ return this.previous().some((i) => i.annotation);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ isInline() {
|
|
|
+ if (typeof this.mapOpts.inline !== "undefined") {
|
|
|
+ return this.mapOpts.inline;
|
|
|
+ }
|
|
|
+ let annotation = this.mapOpts.annotation;
|
|
|
+ if (typeof annotation !== "undefined" && annotation !== true) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (this.previous().length) {
|
|
|
+ return this.previous().some((i) => i.inline);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ isMap() {
|
|
|
+ if (typeof this.opts.map !== "undefined") {
|
|
|
+ return !!this.opts.map;
|
|
|
+ }
|
|
|
+ return this.previous().length > 0;
|
|
|
+ }
|
|
|
+ isSourcesContent() {
|
|
|
+ if (typeof this.mapOpts.sourcesContent !== "undefined") {
|
|
|
+ return this.mapOpts.sourcesContent;
|
|
|
+ }
|
|
|
+ if (this.previous().length) {
|
|
|
+ return this.previous().some((i) => i.withContent());
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ outputFile() {
|
|
|
+ if (this.opts.to) {
|
|
|
+ return this.path(this.opts.to);
|
|
|
+ } else if (this.opts.from) {
|
|
|
+ return this.path(this.opts.from);
|
|
|
+ } else {
|
|
|
+ return "to.css";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ path(file) {
|
|
|
+ if (this.mapOpts.absolute) return file;
|
|
|
+ if (file.charCodeAt(0) === 60) return file;
|
|
|
+ if (/^\w+:\/\//.test(file)) return file;
|
|
|
+ let cached = this.memoizedPaths.get(file);
|
|
|
+ if (cached) return cached;
|
|
|
+ let from = this.opts.to ? dirname(this.opts.to) : ".";
|
|
|
+ if (typeof this.mapOpts.annotation === "string") {
|
|
|
+ from = dirname(resolve(from, this.mapOpts.annotation));
|
|
|
+ }
|
|
|
+ let path = relative(from, file);
|
|
|
+ this.memoizedPaths.set(file, path);
|
|
|
+ return path;
|
|
|
+ }
|
|
|
+ previous() {
|
|
|
+ if (!this.previousMaps) {
|
|
|
+ this.previousMaps = [];
|
|
|
+ if (this.root) {
|
|
|
+ this.root.walk((node) => {
|
|
|
+ if (node.source && node.source.input.map) {
|
|
|
+ let map = node.source.input.map;
|
|
|
+ if (!this.previousMaps.includes(map)) {
|
|
|
+ this.previousMaps.push(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ let input = new Input2(this.originalCSS, this.opts);
|
|
|
+ if (input.map) this.previousMaps.push(input.map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this.previousMaps;
|
|
|
+ }
|
|
|
+ setSourcesContent() {
|
|
|
+ let already = {};
|
|
|
+ if (this.root) {
|
|
|
+ this.root.walk((node) => {
|
|
|
+ if (node.source) {
|
|
|
+ let from = node.source.input.from;
|
|
|
+ if (from && !already[from]) {
|
|
|
+ already[from] = true;
|
|
|
+ let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));
|
|
|
+ this.map.setSourceContent(fromUrl, node.source.input.css);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else if (this.css) {
|
|
|
+ let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>";
|
|
|
+ this.map.setSourceContent(from, this.css);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sourcePath(node) {
|
|
|
+ if (this.mapOpts.from) {
|
|
|
+ return this.toUrl(this.mapOpts.from);
|
|
|
+ } else if (this.usesFileUrls) {
|
|
|
+ return this.toFileUrl(node.source.input.from);
|
|
|
+ } else {
|
|
|
+ return this.toUrl(this.path(node.source.input.from));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ toBase64(str) {
|
|
|
+ if (Buffer) {
|
|
|
+ return Buffer.from(str).toString("base64");
|
|
|
+ } else {
|
|
|
+ return window.btoa(unescape(encodeURIComponent(str)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ toFileUrl(path) {
|
|
|
+ let cached = this.memoizedFileURLs.get(path);
|
|
|
+ if (cached) return cached;
|
|
|
+ if (pathToFileURL) {
|
|
|
+ let fileURL = pathToFileURL(path).toString();
|
|
|
+ this.memoizedFileURLs.set(path, fileURL);
|
|
|
+ return fileURL;
|
|
|
+ } else {
|
|
|
+ throw new Error(
|
|
|
+ "`map.absolute` option is not available in this PostCSS build"
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ toUrl(path) {
|
|
|
+ let cached = this.memoizedURLs.get(path);
|
|
|
+ if (cached) return cached;
|
|
|
+ if (sep === "\\") {
|
|
|
+ path = path.replace(/\\/g, "/");
|
|
|
+ }
|
|
|
+ let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);
|
|
|
+ this.memoizedURLs.set(path, url);
|
|
|
+ return url;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = MapGenerator;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/tokenize.js
|
|
|
+ var require_tokenize = __commonJS({
|
|
|
+ "node_modules/postcss/lib/tokenize.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var SINGLE_QUOTE = "'".charCodeAt(0);
|
|
|
+ var DOUBLE_QUOTE = '"'.charCodeAt(0);
|
|
|
+ var BACKSLASH = "\\".charCodeAt(0);
|
|
|
+ var SLASH = "/".charCodeAt(0);
|
|
|
+ var NEWLINE = "\n".charCodeAt(0);
|
|
|
+ var SPACE = " ".charCodeAt(0);
|
|
|
+ var FEED = "\f".charCodeAt(0);
|
|
|
+ var TAB = " ".charCodeAt(0);
|
|
|
+ var CR = "\r".charCodeAt(0);
|
|
|
+ var OPEN_SQUARE = "[".charCodeAt(0);
|
|
|
+ var CLOSE_SQUARE = "]".charCodeAt(0);
|
|
|
+ var OPEN_PARENTHESES = "(".charCodeAt(0);
|
|
|
+ var CLOSE_PARENTHESES = ")".charCodeAt(0);
|
|
|
+ var OPEN_CURLY = "{".charCodeAt(0);
|
|
|
+ var CLOSE_CURLY = "}".charCodeAt(0);
|
|
|
+ var SEMICOLON = ";".charCodeAt(0);
|
|
|
+ var ASTERISK = "*".charCodeAt(0);
|
|
|
+ var COLON = ":".charCodeAt(0);
|
|
|
+ var AT = "@".charCodeAt(0);
|
|
|
+ var RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g;
|
|
|
+ var RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g;
|
|
|
+ var RE_BAD_BRACKET = /.[\r\n"'(/\\]/;
|
|
|
+ var RE_HEX_ESCAPE = /[\da-f]/i;
|
|
|
+ module.exports = function tokenizer(input, options = {}) {
|
|
|
+ let css = input.css.valueOf();
|
|
|
+ let ignore = options.ignoreErrors;
|
|
|
+ let code, content, escape, next, quote;
|
|
|
+ let currentToken, escaped, escapePos, n, prev;
|
|
|
+ let length = css.length;
|
|
|
+ let pos = 0;
|
|
|
+ let buffer = [];
|
|
|
+ let returned = [];
|
|
|
+ let lastBadParen = -1;
|
|
|
+ function position() {
|
|
|
+ return pos;
|
|
|
+ }
|
|
|
+ function unclosed(what) {
|
|
|
+ throw input.error("Unclosed " + what, pos);
|
|
|
+ }
|
|
|
+ function endOfFile() {
|
|
|
+ return returned.length === 0 && pos >= length;
|
|
|
+ }
|
|
|
+ function nextToken(opts) {
|
|
|
+ if (returned.length) return returned.pop();
|
|
|
+ if (pos >= length) return;
|
|
|
+ let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;
|
|
|
+ code = css.charCodeAt(pos);
|
|
|
+ switch (code) {
|
|
|
+ case NEWLINE:
|
|
|
+ case SPACE:
|
|
|
+ case TAB:
|
|
|
+ case CR:
|
|
|
+ case FEED: {
|
|
|
+ next = pos;
|
|
|
+ do {
|
|
|
+ next += 1;
|
|
|
+ code = css.charCodeAt(next);
|
|
|
+ } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
|
|
|
+ currentToken = ["space", css.slice(pos, next)];
|
|
|
+ pos = next - 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case OPEN_SQUARE:
|
|
|
+ case CLOSE_SQUARE:
|
|
|
+ case OPEN_CURLY:
|
|
|
+ case CLOSE_CURLY:
|
|
|
+ case COLON:
|
|
|
+ case SEMICOLON:
|
|
|
+ case CLOSE_PARENTHESES: {
|
|
|
+ let controlChar = String.fromCharCode(code);
|
|
|
+ currentToken = [controlChar, controlChar, pos];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case OPEN_PARENTHESES: {
|
|
|
+ prev = buffer.length ? buffer.pop()[1] : "";
|
|
|
+ n = css.charCodeAt(pos + 1);
|
|
|
+ if (prev === "url" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
|
|
|
+ next = pos;
|
|
|
+ do {
|
|
|
+ escaped = false;
|
|
|
+ next = css.indexOf(")", next + 1);
|
|
|
+ if (next === -1) {
|
|
|
+ if (ignore || ignoreUnclosed) {
|
|
|
+ next = pos;
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ unclosed("bracket");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ escapePos = next;
|
|
|
+ while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
|
|
|
+ escapePos -= 1;
|
|
|
+ escaped = !escaped;
|
|
|
+ }
|
|
|
+ } while (escaped);
|
|
|
+ currentToken = ["brackets", css.slice(pos, next + 1), pos, next];
|
|
|
+ pos = next;
|
|
|
+ } else if (pos <= lastBadParen) {
|
|
|
+ currentToken = ["(", "(", pos];
|
|
|
+ } else {
|
|
|
+ next = css.indexOf(")", pos + 1);
|
|
|
+ content = css.slice(pos, next + 1);
|
|
|
+ if (next === -1 || RE_BAD_BRACKET.test(content)) {
|
|
|
+ lastBadParen = next === -1 ? length : next;
|
|
|
+ currentToken = ["(", "(", pos];
|
|
|
+ } else {
|
|
|
+ currentToken = ["brackets", content, pos, next];
|
|
|
+ pos = next;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case SINGLE_QUOTE:
|
|
|
+ case DOUBLE_QUOTE: {
|
|
|
+ quote = code === SINGLE_QUOTE ? "'" : '"';
|
|
|
+ next = pos;
|
|
|
+ do {
|
|
|
+ escaped = false;
|
|
|
+ next = css.indexOf(quote, next + 1);
|
|
|
+ if (next === -1) {
|
|
|
+ if (ignore || ignoreUnclosed) {
|
|
|
+ next = pos + 1;
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ unclosed("string");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ escapePos = next;
|
|
|
+ while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
|
|
|
+ escapePos -= 1;
|
|
|
+ escaped = !escaped;
|
|
|
+ }
|
|
|
+ } while (escaped);
|
|
|
+ currentToken = ["string", css.slice(pos, next + 1), pos, next];
|
|
|
+ pos = next;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case AT: {
|
|
|
+ RE_AT_END.lastIndex = pos + 1;
|
|
|
+ RE_AT_END.test(css);
|
|
|
+ if (RE_AT_END.lastIndex === 0) {
|
|
|
+ next = css.length - 1;
|
|
|
+ } else {
|
|
|
+ next = RE_AT_END.lastIndex - 2;
|
|
|
+ }
|
|
|
+ currentToken = ["at-word", css.slice(pos, next + 1), pos, next];
|
|
|
+ pos = next;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case BACKSLASH: {
|
|
|
+ next = pos;
|
|
|
+ escape = true;
|
|
|
+ while (css.charCodeAt(next + 1) === BACKSLASH) {
|
|
|
+ next += 1;
|
|
|
+ escape = !escape;
|
|
|
+ }
|
|
|
+ code = css.charCodeAt(next + 1);
|
|
|
+ if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
|
|
|
+ next += 1;
|
|
|
+ if (RE_HEX_ESCAPE.test(css.charAt(next))) {
|
|
|
+ while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
|
|
|
+ next += 1;
|
|
|
+ }
|
|
|
+ if (css.charCodeAt(next + 1) === SPACE) {
|
|
|
+ next += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ currentToken = ["word", css.slice(pos, next + 1), pos, next];
|
|
|
+ pos = next;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ default: {
|
|
|
+ if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
|
|
|
+ next = css.indexOf("*/", pos + 2) + 1;
|
|
|
+ if (next === 0) {
|
|
|
+ if (ignore || ignoreUnclosed) {
|
|
|
+ next = css.length;
|
|
|
+ } else {
|
|
|
+ unclosed("comment");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ currentToken = ["comment", css.slice(pos, next + 1), pos, next];
|
|
|
+ pos = next;
|
|
|
+ } else {
|
|
|
+ RE_WORD_END.lastIndex = pos + 1;
|
|
|
+ RE_WORD_END.test(css);
|
|
|
+ if (RE_WORD_END.lastIndex === 0) {
|
|
|
+ next = css.length - 1;
|
|
|
+ } else {
|
|
|
+ next = RE_WORD_END.lastIndex - 2;
|
|
|
+ }
|
|
|
+ currentToken = ["word", css.slice(pos, next + 1), pos, next];
|
|
|
+ buffer.push(currentToken);
|
|
|
+ pos = next;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pos++;
|
|
|
+ return currentToken;
|
|
|
+ }
|
|
|
+ function back(token) {
|
|
|
+ returned.push(token);
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ back,
|
|
|
+ endOfFile,
|
|
|
+ nextToken,
|
|
|
+ position
|
|
|
+ };
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/parser.js
|
|
|
+ var require_parser = __commonJS({
|
|
|
+ "node_modules/postcss/lib/parser.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var AtRule2 = require_at_rule();
|
|
|
+ var Comment2 = require_comment();
|
|
|
+ var Declaration2 = require_declaration();
|
|
|
+ var Root2 = require_root();
|
|
|
+ var Rule2 = require_rule();
|
|
|
+ var tokenizer = require_tokenize();
|
|
|
+ var SAFE_COMMENT_NEIGHBOR = {
|
|
|
+ empty: true,
|
|
|
+ space: true
|
|
|
+ };
|
|
|
+ function findLastWithPosition(tokens) {
|
|
|
+ for (let i = tokens.length - 1; i >= 0; i--) {
|
|
|
+ let token = tokens[i];
|
|
|
+ let pos = token[3] || token[2];
|
|
|
+ if (pos) return pos;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function tokensToString(tokens, from, to) {
|
|
|
+ let result = "";
|
|
|
+ for (let i = from; i < to; i++) result += tokens[i][1];
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ var Parser = class {
|
|
|
+ constructor(input) {
|
|
|
+ this.input = input;
|
|
|
+ this.root = new Root2();
|
|
|
+ this.current = this.root;
|
|
|
+ this.spaces = "";
|
|
|
+ this.semicolon = false;
|
|
|
+ this.createTokenizer();
|
|
|
+ this.root.source = { input, start: { column: 1, line: 1, offset: 0 } };
|
|
|
+ }
|
|
|
+ atrule(token) {
|
|
|
+ let node = new AtRule2();
|
|
|
+ node.name = token[1].slice(1);
|
|
|
+ if (node.name === "") {
|
|
|
+ this.unnamedAtrule(node, token);
|
|
|
+ }
|
|
|
+ this.init(node, token[2]);
|
|
|
+ let type;
|
|
|
+ let prev;
|
|
|
+ let shift;
|
|
|
+ let last = false;
|
|
|
+ let open = false;
|
|
|
+ let params = [];
|
|
|
+ let brackets = [];
|
|
|
+ while (!this.tokenizer.endOfFile()) {
|
|
|
+ token = this.tokenizer.nextToken();
|
|
|
+ type = token[0];
|
|
|
+ if (type === "(" || type === "[") {
|
|
|
+ brackets.push(type === "(" ? ")" : "]");
|
|
|
+ } else if (type === "{" && brackets.length > 0) {
|
|
|
+ brackets.push("}");
|
|
|
+ } else if (type === brackets[brackets.length - 1]) {
|
|
|
+ brackets.pop();
|
|
|
+ }
|
|
|
+ if (brackets.length === 0) {
|
|
|
+ if (type === ";") {
|
|
|
+ node.source.end = this.getPosition(token[2]);
|
|
|
+ node.source.end.offset++;
|
|
|
+ this.semicolon = true;
|
|
|
+ break;
|
|
|
+ } else if (type === "{") {
|
|
|
+ open = true;
|
|
|
+ break;
|
|
|
+ } else if (type === "}") {
|
|
|
+ if (params.length > 0) {
|
|
|
+ shift = params.length - 1;
|
|
|
+ prev = params[shift];
|
|
|
+ while (prev && prev[0] === "space") {
|
|
|
+ prev = params[--shift];
|
|
|
+ }
|
|
|
+ if (prev) {
|
|
|
+ node.source.end = this.getPosition(prev[3] || prev[2]);
|
|
|
+ node.source.end.offset++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.end(token);
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ params.push(token);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ params.push(token);
|
|
|
+ }
|
|
|
+ if (this.tokenizer.endOfFile()) {
|
|
|
+ last = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ node.raws.between = this.spacesAndCommentsFromEnd(params);
|
|
|
+ if (params.length) {
|
|
|
+ node.raws.afterName = this.spacesAndCommentsFromStart(params);
|
|
|
+ this.raw(node, "params", params);
|
|
|
+ if (last) {
|
|
|
+ token = params[params.length - 1];
|
|
|
+ node.source.end = this.getPosition(token[3] || token[2]);
|
|
|
+ node.source.end.offset++;
|
|
|
+ this.spaces = node.raws.between;
|
|
|
+ node.raws.between = "";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ node.raws.afterName = "";
|
|
|
+ node.params = "";
|
|
|
+ }
|
|
|
+ if (open) {
|
|
|
+ node.nodes = [];
|
|
|
+ this.current = node;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ checkMissedSemicolon(tokens) {
|
|
|
+ let colon = this.colon(tokens);
|
|
|
+ if (colon === false) return;
|
|
|
+ let founded = 0;
|
|
|
+ let token;
|
|
|
+ for (let j = colon - 1; j >= 0; j--) {
|
|
|
+ token = tokens[j];
|
|
|
+ if (token[0] !== "space") {
|
|
|
+ founded += 1;
|
|
|
+ if (founded === 2) break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw this.input.error(
|
|
|
+ "Missed semicolon",
|
|
|
+ token[0] === "word" ? token[3] + 1 : token[2]
|
|
|
+ );
|
|
|
+ }
|
|
|
+ colon(tokens) {
|
|
|
+ let brackets = 0;
|
|
|
+ let prev, token, type;
|
|
|
+ for (let [i, element] of tokens.entries()) {
|
|
|
+ token = element;
|
|
|
+ type = token[0];
|
|
|
+ if (type === "(") {
|
|
|
+ brackets += 1;
|
|
|
+ }
|
|
|
+ if (type === ")") {
|
|
|
+ brackets -= 1;
|
|
|
+ }
|
|
|
+ if (brackets === 0 && type === ":") {
|
|
|
+ if (!prev) {
|
|
|
+ this.doubleColon(token);
|
|
|
+ } else if (prev[0] === "word" && prev[1] === "progid") {
|
|
|
+ continue;
|
|
|
+ } else {
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ prev = token;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ comment(token) {
|
|
|
+ let node = new Comment2();
|
|
|
+ this.init(node, token[2]);
|
|
|
+ node.source.end = this.getPosition(token[3] || token[2]);
|
|
|
+ node.source.end.offset++;
|
|
|
+ let text = token[1].slice(2, -2);
|
|
|
+ if (!text.trim()) {
|
|
|
+ node.text = "";
|
|
|
+ node.raws.left = text;
|
|
|
+ node.raws.right = "";
|
|
|
+ } else {
|
|
|
+ let match = text.match(/^(\s*)([^]*\S)(\s*)$/);
|
|
|
+ node.text = match[2];
|
|
|
+ node.raws.left = match[1];
|
|
|
+ node.raws.right = match[3];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ createTokenizer() {
|
|
|
+ this.tokenizer = tokenizer(this.input);
|
|
|
+ }
|
|
|
+ decl(tokens, customProperty) {
|
|
|
+ let node = new Declaration2();
|
|
|
+ this.init(node, tokens[0][2]);
|
|
|
+ let last = tokens[tokens.length - 1];
|
|
|
+ if (last[0] === ";") {
|
|
|
+ this.semicolon = true;
|
|
|
+ tokens.pop();
|
|
|
+ }
|
|
|
+ node.source.end = this.getPosition(
|
|
|
+ last[3] || last[2] || findLastWithPosition(tokens)
|
|
|
+ );
|
|
|
+ node.source.end.offset++;
|
|
|
+ let start = 0;
|
|
|
+ while (tokens[start][0] !== "word") {
|
|
|
+ if (start === tokens.length - 1) this.unknownWord([tokens[start]]);
|
|
|
+ start++;
|
|
|
+ }
|
|
|
+ node.raws.before += tokensToString(tokens, 0, start);
|
|
|
+ node.source.start = this.getPosition(tokens[start][2]);
|
|
|
+ let propStart = start;
|
|
|
+ while (start < tokens.length) {
|
|
|
+ let type = tokens[start][0];
|
|
|
+ if (type === ":" || type === "space" || type === "comment") {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ start++;
|
|
|
+ }
|
|
|
+ node.prop = tokensToString(tokens, propStart, start);
|
|
|
+ let betweenStart = start;
|
|
|
+ let token;
|
|
|
+ while (start < tokens.length) {
|
|
|
+ token = tokens[start];
|
|
|
+ start++;
|
|
|
+ if (token[0] === ":") break;
|
|
|
+ if (token[0] === "word" && /\w/.test(token[1])) {
|
|
|
+ this.unknownWord([token]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ node.raws.between = tokensToString(tokens, betweenStart, start);
|
|
|
+ if (node.prop[0] === "_" || node.prop[0] === "*") {
|
|
|
+ node.raws.before += node.prop[0];
|
|
|
+ node.prop = node.prop.slice(1);
|
|
|
+ }
|
|
|
+ let firstSpacesStart = start;
|
|
|
+ while (start < tokens.length) {
|
|
|
+ let next = tokens[start][0];
|
|
|
+ if (next !== "space" && next !== "comment") break;
|
|
|
+ start++;
|
|
|
+ }
|
|
|
+ let firstSpaces = tokens.slice(firstSpacesStart, start);
|
|
|
+ tokens = tokens.slice(start);
|
|
|
+ this.precheckMissedSemicolon(tokens);
|
|
|
+ for (let i = tokens.length - 1; i >= 0; i--) {
|
|
|
+ token = tokens[i];
|
|
|
+ if (token[1].toLowerCase() === "!important") {
|
|
|
+ node.important = true;
|
|
|
+ let string = this.stringFrom(tokens, i);
|
|
|
+ string = this.spacesFromEnd(tokens) + string;
|
|
|
+ if (string !== " !important") node.raws.important = string;
|
|
|
+ break;
|
|
|
+ } else if (token[1].toLowerCase() === "important") {
|
|
|
+ let cache = tokens.slice(0);
|
|
|
+ let str = "";
|
|
|
+ for (let j = i; j > 0; j--) {
|
|
|
+ let type = cache[j][0];
|
|
|
+ if (str.trim().startsWith("!") && type !== "space") {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ str = cache.pop()[1] + str;
|
|
|
+ }
|
|
|
+ if (str.trim().startsWith("!")) {
|
|
|
+ node.important = true;
|
|
|
+ node.raws.important = str;
|
|
|
+ tokens = cache;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (token[0] !== "space" && token[0] !== "comment") {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let hasWord = tokens.some((i) => i[0] !== "space" && i[0] !== "comment");
|
|
|
+ if (hasWord) {
|
|
|
+ node.raws.between += firstSpaces.map((i) => i[1]).join("");
|
|
|
+ firstSpaces = [];
|
|
|
+ }
|
|
|
+ this.raw(node, "value", firstSpaces.concat(tokens), customProperty);
|
|
|
+ if (node.value.includes(":") && !customProperty) {
|
|
|
+ this.checkMissedSemicolon(tokens);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ doubleColon(token) {
|
|
|
+ throw this.input.error(
|
|
|
+ "Double colon",
|
|
|
+ { offset: token[2] },
|
|
|
+ { offset: token[2] + token[1].length }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ emptyRule(token) {
|
|
|
+ let node = new Rule2();
|
|
|
+ this.init(node, token[2]);
|
|
|
+ node.selector = "";
|
|
|
+ node.raws.between = "";
|
|
|
+ this.current = node;
|
|
|
+ }
|
|
|
+ end(token) {
|
|
|
+ if (this.current.nodes && this.current.nodes.length) {
|
|
|
+ this.current.raws.semicolon = this.semicolon;
|
|
|
+ }
|
|
|
+ this.semicolon = false;
|
|
|
+ this.current.raws.after = (this.current.raws.after || "") + this.spaces;
|
|
|
+ this.spaces = "";
|
|
|
+ if (this.current.parent) {
|
|
|
+ this.current.source.end = this.getPosition(token[2]);
|
|
|
+ this.current.source.end.offset++;
|
|
|
+ this.current = this.current.parent;
|
|
|
+ } else {
|
|
|
+ this.unexpectedClose(token);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ endFile() {
|
|
|
+ if (this.current.parent) this.unclosedBlock();
|
|
|
+ if (this.current.nodes && this.current.nodes.length) {
|
|
|
+ this.current.raws.semicolon = this.semicolon;
|
|
|
+ }
|
|
|
+ this.current.raws.after = (this.current.raws.after || "") + this.spaces;
|
|
|
+ this.root.source.end = this.getPosition(this.tokenizer.position());
|
|
|
+ }
|
|
|
+ freeSemicolon(token) {
|
|
|
+ this.spaces += token[1];
|
|
|
+ if (this.current.nodes) {
|
|
|
+ let prev = this.current.nodes[this.current.nodes.length - 1];
|
|
|
+ if (prev && prev.type === "rule" && !prev.raws.ownSemicolon) {
|
|
|
+ prev.raws.ownSemicolon = this.spaces;
|
|
|
+ this.spaces = "";
|
|
|
+ prev.source.end = this.getPosition(token[2]);
|
|
|
+ prev.source.end.offset += prev.raws.ownSemicolon.length;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Helpers
|
|
|
+ getPosition(offset) {
|
|
|
+ let pos = this.input.fromOffset(offset);
|
|
|
+ return {
|
|
|
+ column: pos.col,
|
|
|
+ line: pos.line,
|
|
|
+ offset
|
|
|
+ };
|
|
|
+ }
|
|
|
+ init(node, offset) {
|
|
|
+ this.current.push(node);
|
|
|
+ node.source = {
|
|
|
+ input: this.input,
|
|
|
+ start: this.getPosition(offset)
|
|
|
+ };
|
|
|
+ node.raws.before = this.spaces;
|
|
|
+ this.spaces = "";
|
|
|
+ if (node.type !== "comment") this.semicolon = false;
|
|
|
+ }
|
|
|
+ other(start) {
|
|
|
+ let end = false;
|
|
|
+ let type = null;
|
|
|
+ let colon = false;
|
|
|
+ let bracket = null;
|
|
|
+ let brackets = [];
|
|
|
+ let customProperty = start[1].startsWith("--");
|
|
|
+ let tokens = [];
|
|
|
+ let token = start;
|
|
|
+ while (token) {
|
|
|
+ type = token[0];
|
|
|
+ tokens.push(token);
|
|
|
+ if (type === "(" || type === "[") {
|
|
|
+ if (!bracket) bracket = token;
|
|
|
+ brackets.push(type === "(" ? ")" : "]");
|
|
|
+ } else if (customProperty && colon && type === "{") {
|
|
|
+ if (!bracket) bracket = token;
|
|
|
+ brackets.push("}");
|
|
|
+ } else if (brackets.length === 0) {
|
|
|
+ if (type === ";") {
|
|
|
+ if (colon) {
|
|
|
+ this.decl(tokens, customProperty);
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else if (type === "{") {
|
|
|
+ this.rule(tokens);
|
|
|
+ return;
|
|
|
+ } else if (type === "}") {
|
|
|
+ this.tokenizer.back(tokens.pop());
|
|
|
+ end = true;
|
|
|
+ break;
|
|
|
+ } else if (type === ":") {
|
|
|
+ colon = true;
|
|
|
+ }
|
|
|
+ } else if (type === brackets[brackets.length - 1]) {
|
|
|
+ brackets.pop();
|
|
|
+ if (brackets.length === 0) bracket = null;
|
|
|
+ }
|
|
|
+ token = this.tokenizer.nextToken();
|
|
|
+ }
|
|
|
+ if (this.tokenizer.endOfFile()) end = true;
|
|
|
+ if (brackets.length > 0) this.unclosedBracket(bracket);
|
|
|
+ if (end && colon) {
|
|
|
+ if (!customProperty) {
|
|
|
+ while (tokens.length) {
|
|
|
+ token = tokens[tokens.length - 1][0];
|
|
|
+ if (token !== "space" && token !== "comment") break;
|
|
|
+ this.tokenizer.back(tokens.pop());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.decl(tokens, customProperty);
|
|
|
+ } else {
|
|
|
+ this.unknownWord(tokens);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ parse() {
|
|
|
+ let token;
|
|
|
+ while (!this.tokenizer.endOfFile()) {
|
|
|
+ token = this.tokenizer.nextToken();
|
|
|
+ switch (token[0]) {
|
|
|
+ case "space":
|
|
|
+ this.spaces += token[1];
|
|
|
+ break;
|
|
|
+ case ";":
|
|
|
+ this.freeSemicolon(token);
|
|
|
+ break;
|
|
|
+ case "}":
|
|
|
+ this.end(token);
|
|
|
+ break;
|
|
|
+ case "comment":
|
|
|
+ this.comment(token);
|
|
|
+ break;
|
|
|
+ case "at-word":
|
|
|
+ this.atrule(token);
|
|
|
+ break;
|
|
|
+ case "{":
|
|
|
+ this.emptyRule(token);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ this.other(token);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.endFile();
|
|
|
+ }
|
|
|
+ precheckMissedSemicolon() {
|
|
|
+ }
|
|
|
+ raw(node, prop, tokens, customProperty) {
|
|
|
+ let token, type;
|
|
|
+ let length = tokens.length;
|
|
|
+ let value = "";
|
|
|
+ let clean = true;
|
|
|
+ let next, prev;
|
|
|
+ for (let i = 0; i < length; i += 1) {
|
|
|
+ token = tokens[i];
|
|
|
+ type = token[0];
|
|
|
+ if (type === "space" && i === length - 1 && !customProperty) {
|
|
|
+ clean = false;
|
|
|
+ } else if (type === "comment") {
|
|
|
+ prev = tokens[i - 1] ? tokens[i - 1][0] : "empty";
|
|
|
+ next = tokens[i + 1] ? tokens[i + 1][0] : "empty";
|
|
|
+ if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
|
|
|
+ if (value.slice(-1) === ",") {
|
|
|
+ clean = false;
|
|
|
+ } else {
|
|
|
+ value += token[1];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ clean = false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ value += token[1];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!clean) {
|
|
|
+ let raw = tokens.reduce((all, i) => all + i[1], "");
|
|
|
+ node.raws[prop] = { raw, value };
|
|
|
+ }
|
|
|
+ node[prop] = value;
|
|
|
+ }
|
|
|
+ rule(tokens) {
|
|
|
+ tokens.pop();
|
|
|
+ let node = new Rule2();
|
|
|
+ this.init(node, tokens[0][2]);
|
|
|
+ node.raws.between = this.spacesAndCommentsFromEnd(tokens);
|
|
|
+ this.raw(node, "selector", tokens);
|
|
|
+ this.current = node;
|
|
|
+ }
|
|
|
+ spacesAndCommentsFromEnd(tokens) {
|
|
|
+ let lastTokenType;
|
|
|
+ let spaces = "";
|
|
|
+ while (tokens.length) {
|
|
|
+ lastTokenType = tokens[tokens.length - 1][0];
|
|
|
+ if (lastTokenType !== "space" && lastTokenType !== "comment") break;
|
|
|
+ spaces = tokens.pop()[1] + spaces;
|
|
|
+ }
|
|
|
+ return spaces;
|
|
|
+ }
|
|
|
+ // Errors
|
|
|
+ spacesAndCommentsFromStart(tokens) {
|
|
|
+ let next;
|
|
|
+ let spaces = "";
|
|
|
+ while (tokens.length) {
|
|
|
+ next = tokens[0][0];
|
|
|
+ if (next !== "space" && next !== "comment") break;
|
|
|
+ spaces += tokens.shift()[1];
|
|
|
+ }
|
|
|
+ return spaces;
|
|
|
+ }
|
|
|
+ spacesFromEnd(tokens) {
|
|
|
+ let lastTokenType;
|
|
|
+ let spaces = "";
|
|
|
+ while (tokens.length) {
|
|
|
+ lastTokenType = tokens[tokens.length - 1][0];
|
|
|
+ if (lastTokenType !== "space") break;
|
|
|
+ spaces = tokens.pop()[1] + spaces;
|
|
|
+ }
|
|
|
+ return spaces;
|
|
|
+ }
|
|
|
+ stringFrom(tokens, from) {
|
|
|
+ let result = "";
|
|
|
+ for (let i = from; i < tokens.length; i++) {
|
|
|
+ result += tokens[i][1];
|
|
|
+ }
|
|
|
+ tokens.splice(from, tokens.length - from);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ unclosedBlock() {
|
|
|
+ let pos = this.current.source.start;
|
|
|
+ throw this.input.error("Unclosed block", pos.line, pos.column);
|
|
|
+ }
|
|
|
+ unclosedBracket(bracket) {
|
|
|
+ throw this.input.error(
|
|
|
+ "Unclosed bracket",
|
|
|
+ { offset: bracket[2] },
|
|
|
+ { offset: bracket[2] + 1 }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ unexpectedClose(token) {
|
|
|
+ throw this.input.error(
|
|
|
+ "Unexpected }",
|
|
|
+ { offset: token[2] },
|
|
|
+ { offset: token[2] + 1 }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ unknownWord(tokens) {
|
|
|
+ throw this.input.error(
|
|
|
+ "Unknown word " + tokens[0][1],
|
|
|
+ { offset: tokens[0][2] },
|
|
|
+ { offset: tokens[0][2] + tokens[0][1].length }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ unnamedAtrule(node, token) {
|
|
|
+ throw this.input.error(
|
|
|
+ "At-rule without name",
|
|
|
+ { offset: token[2] },
|
|
|
+ { offset: token[2] + token[1].length }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Parser;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/parse.js
|
|
|
+ var require_parse = __commonJS({
|
|
|
+ "node_modules/postcss/lib/parse.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var Input2 = require_input();
|
|
|
+ var Parser = require_parser();
|
|
|
+ function parse3(css, opts) {
|
|
|
+ let input = new Input2(css, opts);
|
|
|
+ let parser = new Parser(input);
|
|
|
+ try {
|
|
|
+ parser.parse();
|
|
|
+ } catch (e) {
|
|
|
+ if (true) {
|
|
|
+ if (e.name === "CssSyntaxError" && opts && opts.from) {
|
|
|
+ if (/\.scss$/i.test(opts.from)) {
|
|
|
+ e.message += "\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser";
|
|
|
+ } else if (/\.sass/i.test(opts.from)) {
|
|
|
+ e.message += "\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser";
|
|
|
+ } else if (/\.less$/i.test(opts.from)) {
|
|
|
+ e.message += "\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ return parser.root;
|
|
|
+ }
|
|
|
+ module.exports = parse3;
|
|
|
+ parse3.default = parse3;
|
|
|
+ Container2.registerParse(parse3);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/warning.js
|
|
|
+ var require_warning = __commonJS({
|
|
|
+ "node_modules/postcss/lib/warning.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var { my } = require_symbols();
|
|
|
+ var Warning2 = class {
|
|
|
+ constructor(text, opts = {}) {
|
|
|
+ this.type = "warning";
|
|
|
+ this.text = text;
|
|
|
+ if (opts.node && opts.node.source) {
|
|
|
+ if (!opts.node[my]) {
|
|
|
+ Container2.rebuild(opts.node);
|
|
|
+ }
|
|
|
+ let range = opts.node.rangeBy(opts);
|
|
|
+ this.line = range.start.line;
|
|
|
+ this.column = range.start.column;
|
|
|
+ this.endLine = range.end.line;
|
|
|
+ this.endColumn = range.end.column;
|
|
|
+ }
|
|
|
+ for (let opt in opts) this[opt] = opts[opt];
|
|
|
+ }
|
|
|
+ toString() {
|
|
|
+ if (this.node) {
|
|
|
+ return this.node.error(this.text, {
|
|
|
+ index: this.index,
|
|
|
+ plugin: this.plugin,
|
|
|
+ word: this.word
|
|
|
+ }).message;
|
|
|
+ }
|
|
|
+ if (this.plugin) {
|
|
|
+ return this.plugin + ": " + this.text;
|
|
|
+ }
|
|
|
+ return this.text;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Warning2;
|
|
|
+ Warning2.default = Warning2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/result.js
|
|
|
+ var require_result = __commonJS({
|
|
|
+ "node_modules/postcss/lib/result.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Warning2 = require_warning();
|
|
|
+ var Result2 = class {
|
|
|
+ get content() {
|
|
|
+ return this.css;
|
|
|
+ }
|
|
|
+ constructor(processor, root2, opts) {
|
|
|
+ this.processor = processor;
|
|
|
+ this.messages = [];
|
|
|
+ this.root = root2;
|
|
|
+ this.opts = opts;
|
|
|
+ this.css = "";
|
|
|
+ this.map = void 0;
|
|
|
+ }
|
|
|
+ toString() {
|
|
|
+ return this.css;
|
|
|
+ }
|
|
|
+ warn(text, opts = {}) {
|
|
|
+ if (!opts.plugin) {
|
|
|
+ if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
|
|
|
+ opts.plugin = this.lastPlugin.postcssPlugin;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let warning = new Warning2(text, opts);
|
|
|
+ this.messages.push(warning);
|
|
|
+ return warning;
|
|
|
+ }
|
|
|
+ warnings() {
|
|
|
+ return this.messages.filter((i) => i.type === "warning");
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Result2;
|
|
|
+ Result2.default = Result2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/warn-once.js
|
|
|
+ var require_warn_once = __commonJS({
|
|
|
+ "node_modules/postcss/lib/warn-once.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var printed = {};
|
|
|
+ module.exports = function warnOnce(message) {
|
|
|
+ if (printed[message]) return;
|
|
|
+ printed[message] = true;
|
|
|
+ if (typeof console !== "undefined" && console.warn) {
|
|
|
+ console.warn(message);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/lazy-result.js
|
|
|
+ var require_lazy_result = __commonJS({
|
|
|
+ "node_modules/postcss/lib/lazy-result.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Container2 = require_container();
|
|
|
+ var Document2 = require_document();
|
|
|
+ var MapGenerator = require_map_generator();
|
|
|
+ var parse3 = require_parse();
|
|
|
+ var Result2 = require_result();
|
|
|
+ var Root2 = require_root();
|
|
|
+ var stringify3 = require_stringify();
|
|
|
+ var { isClean, my } = require_symbols();
|
|
|
+ var warnOnce = require_warn_once();
|
|
|
+ var TYPE_TO_CLASS_NAME = {
|
|
|
+ atrule: "AtRule",
|
|
|
+ comment: "Comment",
|
|
|
+ decl: "Declaration",
|
|
|
+ document: "Document",
|
|
|
+ root: "Root",
|
|
|
+ rule: "Rule"
|
|
|
+ };
|
|
|
+ var PLUGIN_PROPS = {
|
|
|
+ AtRule: true,
|
|
|
+ AtRuleExit: true,
|
|
|
+ Comment: true,
|
|
|
+ CommentExit: true,
|
|
|
+ Declaration: true,
|
|
|
+ DeclarationExit: true,
|
|
|
+ Document: true,
|
|
|
+ DocumentExit: true,
|
|
|
+ Once: true,
|
|
|
+ OnceExit: true,
|
|
|
+ postcssPlugin: true,
|
|
|
+ prepare: true,
|
|
|
+ Root: true,
|
|
|
+ RootExit: true,
|
|
|
+ Rule: true,
|
|
|
+ RuleExit: true
|
|
|
+ };
|
|
|
+ var NOT_VISITORS = {
|
|
|
+ Once: true,
|
|
|
+ postcssPlugin: true,
|
|
|
+ prepare: true
|
|
|
+ };
|
|
|
+ var CHILDREN = 0;
|
|
|
+ function isPromise(obj) {
|
|
|
+ return typeof obj === "object" && typeof obj.then === "function";
|
|
|
+ }
|
|
|
+ function getEvents(node) {
|
|
|
+ let key = false;
|
|
|
+ let type = TYPE_TO_CLASS_NAME[node.type];
|
|
|
+ if (node.type === "decl") {
|
|
|
+ key = node.prop.toLowerCase();
|
|
|
+ } else if (node.type === "atrule") {
|
|
|
+ key = node.name.toLowerCase();
|
|
|
+ }
|
|
|
+ if (key && node.append) {
|
|
|
+ return [
|
|
|
+ type,
|
|
|
+ type + "-" + key,
|
|
|
+ CHILDREN,
|
|
|
+ type + "Exit",
|
|
|
+ type + "Exit-" + key
|
|
|
+ ];
|
|
|
+ } else if (key) {
|
|
|
+ return [type, type + "-" + key, type + "Exit", type + "Exit-" + key];
|
|
|
+ } else if (node.append) {
|
|
|
+ return [type, CHILDREN, type + "Exit"];
|
|
|
+ } else {
|
|
|
+ return [type, type + "Exit"];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function toStack(node) {
|
|
|
+ let events;
|
|
|
+ if (node.type === "document") {
|
|
|
+ events = ["Document", CHILDREN, "DocumentExit"];
|
|
|
+ } else if (node.type === "root") {
|
|
|
+ events = ["Root", CHILDREN, "RootExit"];
|
|
|
+ } else {
|
|
|
+ events = getEvents(node);
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ eventIndex: 0,
|
|
|
+ events,
|
|
|
+ iterator: 0,
|
|
|
+ node,
|
|
|
+ visitorIndex: 0,
|
|
|
+ visitors: []
|
|
|
+ };
|
|
|
+ }
|
|
|
+ function cleanMarks(node) {
|
|
|
+ let stack = [node];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let next = stack.pop();
|
|
|
+ next[isClean] = false;
|
|
|
+ if (next.nodes) {
|
|
|
+ for (let i of next.nodes) stack.push(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ var postcss2 = {};
|
|
|
+ var LazyResult = class _LazyResult {
|
|
|
+ get content() {
|
|
|
+ return this.stringify().content;
|
|
|
+ }
|
|
|
+ get css() {
|
|
|
+ return this.stringify().css;
|
|
|
+ }
|
|
|
+ get map() {
|
|
|
+ return this.stringify().map;
|
|
|
+ }
|
|
|
+ get messages() {
|
|
|
+ return this.sync().messages;
|
|
|
+ }
|
|
|
+ get opts() {
|
|
|
+ return this.result.opts;
|
|
|
+ }
|
|
|
+ get processor() {
|
|
|
+ return this.result.processor;
|
|
|
+ }
|
|
|
+ get root() {
|
|
|
+ return this.sync().root;
|
|
|
+ }
|
|
|
+ get [Symbol.toStringTag]() {
|
|
|
+ return "LazyResult";
|
|
|
+ }
|
|
|
+ constructor(processor, css, opts) {
|
|
|
+ this.stringified = false;
|
|
|
+ this.processed = false;
|
|
|
+ let root2;
|
|
|
+ if (typeof css === "object" && css !== null && (css.type === "root" || css.type === "document")) {
|
|
|
+ root2 = cleanMarks(css);
|
|
|
+ } else if (css instanceof _LazyResult || css instanceof Result2) {
|
|
|
+ root2 = cleanMarks(css.root);
|
|
|
+ if (css.map) {
|
|
|
+ if (typeof opts.map === "undefined") opts.map = {};
|
|
|
+ if (!opts.map.inline) opts.map.inline = false;
|
|
|
+ opts.map.prev = css.map;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ let parser = parse3;
|
|
|
+ if (opts.syntax) parser = opts.syntax.parse;
|
|
|
+ if (opts.parser) parser = opts.parser;
|
|
|
+ if (parser.parse) parser = parser.parse;
|
|
|
+ try {
|
|
|
+ root2 = parser(css, opts);
|
|
|
+ } catch (error) {
|
|
|
+ this.processed = true;
|
|
|
+ this.error = error;
|
|
|
+ }
|
|
|
+ if (root2 && !root2[my]) {
|
|
|
+ Container2.rebuild(root2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.result = new Result2(processor, root2, opts);
|
|
|
+ this.helpers = { ...postcss2, postcss: postcss2, result: this.result };
|
|
|
+ this.plugins = this.processor.plugins.map((plugin2) => {
|
|
|
+ if (typeof plugin2 === "object" && plugin2.prepare) {
|
|
|
+ return { ...plugin2, ...plugin2.prepare(this.result) };
|
|
|
+ } else {
|
|
|
+ return plugin2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ async() {
|
|
|
+ if (this.error) return Promise.reject(this.error);
|
|
|
+ if (this.processed) return Promise.resolve(this.result);
|
|
|
+ if (!this.processing) {
|
|
|
+ this.processing = this.runAsync();
|
|
|
+ }
|
|
|
+ return this.processing;
|
|
|
+ }
|
|
|
+ catch(onRejected) {
|
|
|
+ return this.async().catch(onRejected);
|
|
|
+ }
|
|
|
+ finally(onFinally) {
|
|
|
+ return this.async().then(onFinally, onFinally);
|
|
|
+ }
|
|
|
+ getAsyncError() {
|
|
|
+ throw new Error("Use process(css).then(cb) to work with async plugins");
|
|
|
+ }
|
|
|
+ handleError(error, node) {
|
|
|
+ let plugin2 = this.result.lastPlugin;
|
|
|
+ try {
|
|
|
+ if (node) node.addToError(error);
|
|
|
+ this.error = error;
|
|
|
+ if (error.name === "CssSyntaxError" && !error.plugin) {
|
|
|
+ error.plugin = plugin2.postcssPlugin;
|
|
|
+ error.setMessage();
|
|
|
+ } else if (plugin2.postcssVersion) {
|
|
|
+ if (true) {
|
|
|
+ let pluginName = plugin2.postcssPlugin;
|
|
|
+ let pluginVer = plugin2.postcssVersion;
|
|
|
+ let runtimeVer = this.result.processor.version;
|
|
|
+ let a = pluginVer.split(".");
|
|
|
+ let b = runtimeVer.split(".");
|
|
|
+ if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
|
|
|
+ console.error(
|
|
|
+ "Unknown error from PostCSS plugin. Your current PostCSS version is " + runtimeVer + ", but " + pluginName + " uses " + pluginVer + ". Perhaps this is the source of the error below."
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ if (console && console.error) console.error(err);
|
|
|
+ }
|
|
|
+ return error;
|
|
|
+ }
|
|
|
+ prepareVisitors() {
|
|
|
+ this.listeners = {};
|
|
|
+ let add = (plugin2, type, cb) => {
|
|
|
+ if (!this.listeners[type]) this.listeners[type] = [];
|
|
|
+ this.listeners[type].push([plugin2, cb]);
|
|
|
+ };
|
|
|
+ for (let plugin2 of this.plugins) {
|
|
|
+ if (typeof plugin2 === "object") {
|
|
|
+ for (let event in plugin2) {
|
|
|
+ if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
|
|
|
+ throw new Error(
|
|
|
+ `Unknown event ${event} in ${plugin2.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (!NOT_VISITORS[event]) {
|
|
|
+ if (typeof plugin2[event] === "object") {
|
|
|
+ for (let filter in plugin2[event]) {
|
|
|
+ if (filter === "*") {
|
|
|
+ add(plugin2, event, plugin2[event][filter]);
|
|
|
+ } else {
|
|
|
+ add(
|
|
|
+ plugin2,
|
|
|
+ event + "-" + filter.toLowerCase(),
|
|
|
+ plugin2[event][filter]
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (typeof plugin2[event] === "function") {
|
|
|
+ add(plugin2, event, plugin2[event]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.hasListener = Object.keys(this.listeners).length > 0;
|
|
|
+ }
|
|
|
+ async runAsync() {
|
|
|
+ this.plugin = 0;
|
|
|
+ for (let i = 0; i < this.plugins.length; i++) {
|
|
|
+ let plugin2 = this.plugins[i];
|
|
|
+ let promise = this.runOnRoot(plugin2);
|
|
|
+ if (isPromise(promise)) {
|
|
|
+ try {
|
|
|
+ await promise;
|
|
|
+ } catch (error) {
|
|
|
+ throw this.handleError(error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.prepareVisitors();
|
|
|
+ if (this.hasListener) {
|
|
|
+ let root2 = this.result.root;
|
|
|
+ while (!root2[isClean]) {
|
|
|
+ root2[isClean] = true;
|
|
|
+ let stack = [toStack(root2)];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let promise = this.visitTick(stack);
|
|
|
+ if (isPromise(promise)) {
|
|
|
+ try {
|
|
|
+ await promise;
|
|
|
+ } catch (e) {
|
|
|
+ let node = stack[stack.length - 1].node;
|
|
|
+ throw this.handleError(e, node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (this.listeners.OnceExit) {
|
|
|
+ for (let [plugin2, visitor] of this.listeners.OnceExit) {
|
|
|
+ this.result.lastPlugin = plugin2;
|
|
|
+ try {
|
|
|
+ if (root2.type === "document") {
|
|
|
+ let roots = root2.nodes.map(
|
|
|
+ (subRoot) => visitor(subRoot, this.helpers)
|
|
|
+ );
|
|
|
+ await Promise.all(roots);
|
|
|
+ } else {
|
|
|
+ await visitor(root2, this.helpers);
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ throw this.handleError(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.processed = true;
|
|
|
+ return this.stringify();
|
|
|
+ }
|
|
|
+ runOnRoot(plugin2) {
|
|
|
+ this.result.lastPlugin = plugin2;
|
|
|
+ try {
|
|
|
+ if (typeof plugin2 === "object" && plugin2.Once) {
|
|
|
+ if (this.result.root.type === "document") {
|
|
|
+ let roots = this.result.root.nodes.map(
|
|
|
+ (root2) => plugin2.Once(root2, this.helpers)
|
|
|
+ );
|
|
|
+ if (isPromise(roots[0])) {
|
|
|
+ return Promise.all(roots);
|
|
|
+ }
|
|
|
+ return roots;
|
|
|
+ }
|
|
|
+ return plugin2.Once(this.result.root, this.helpers);
|
|
|
+ } else if (typeof plugin2 === "function") {
|
|
|
+ return plugin2(this.result.root, this.result);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ throw this.handleError(error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ stringify() {
|
|
|
+ if (this.error) throw this.error;
|
|
|
+ if (this.stringified) return this.result;
|
|
|
+ this.stringified = true;
|
|
|
+ this.sync();
|
|
|
+ let opts = this.result.opts;
|
|
|
+ let str = stringify3;
|
|
|
+ if (opts.syntax) str = opts.syntax.stringify;
|
|
|
+ if (opts.stringifier) str = opts.stringifier;
|
|
|
+ if (str.stringify) str = str.stringify;
|
|
|
+ let rootSource = this.result.root.source;
|
|
|
+ if (opts.map === void 0 && !(rootSource && rootSource.input && rootSource.input.map)) {
|
|
|
+ let result = "";
|
|
|
+ str(this.result.root, (i) => {
|
|
|
+ result += i;
|
|
|
+ });
|
|
|
+ this.result.css = result;
|
|
|
+ return this.result;
|
|
|
+ }
|
|
|
+ let map = new MapGenerator(str, this.result.root, this.result.opts);
|
|
|
+ let data = map.generate();
|
|
|
+ this.result.css = data[0];
|
|
|
+ this.result.map = data[1];
|
|
|
+ return this.result;
|
|
|
+ }
|
|
|
+ sync() {
|
|
|
+ if (this.error) throw this.error;
|
|
|
+ if (this.processed) return this.result;
|
|
|
+ this.processed = true;
|
|
|
+ if (this.processing) {
|
|
|
+ throw this.getAsyncError();
|
|
|
+ }
|
|
|
+ for (let plugin2 of this.plugins) {
|
|
|
+ let promise = this.runOnRoot(plugin2);
|
|
|
+ if (isPromise(promise)) {
|
|
|
+ throw this.getAsyncError();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.prepareVisitors();
|
|
|
+ if (this.hasListener) {
|
|
|
+ let root2 = this.result.root;
|
|
|
+ while (!root2[isClean]) {
|
|
|
+ root2[isClean] = true;
|
|
|
+ this.walkSync(root2);
|
|
|
+ }
|
|
|
+ if (this.listeners.OnceExit) {
|
|
|
+ if (root2.type === "document") {
|
|
|
+ for (let subRoot of root2.nodes) {
|
|
|
+ this.visitSync(this.listeners.OnceExit, subRoot);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.visitSync(this.listeners.OnceExit, root2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this.result;
|
|
|
+ }
|
|
|
+ then(onFulfilled, onRejected) {
|
|
|
+ if (true) {
|
|
|
+ if (!("from" in this.opts)) {
|
|
|
+ warnOnce(
|
|
|
+ "Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning."
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this.async().then(onFulfilled, onRejected);
|
|
|
+ }
|
|
|
+ toString() {
|
|
|
+ return this.css;
|
|
|
+ }
|
|
|
+ visitSync(visitors, node) {
|
|
|
+ for (let [plugin2, visitor] of visitors) {
|
|
|
+ this.result.lastPlugin = plugin2;
|
|
|
+ let promise;
|
|
|
+ try {
|
|
|
+ promise = visitor(node, this.helpers);
|
|
|
+ } catch (e) {
|
|
|
+ throw this.handleError(e, node.proxyOf);
|
|
|
+ }
|
|
|
+ if (node.type !== "root" && node.type !== "document" && !node.parent) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (isPromise(promise)) {
|
|
|
+ throw this.getAsyncError();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ visitTick(stack) {
|
|
|
+ let visit = stack[stack.length - 1];
|
|
|
+ let { node, visitors } = visit;
|
|
|
+ if (node.type !== "root" && node.type !== "document" && !node.parent) {
|
|
|
+ stack.pop();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
|
|
|
+ let [plugin2, visitor] = visitors[visit.visitorIndex];
|
|
|
+ visit.visitorIndex += 1;
|
|
|
+ if (visit.visitorIndex === visitors.length) {
|
|
|
+ visit.visitors = [];
|
|
|
+ visit.visitorIndex = 0;
|
|
|
+ }
|
|
|
+ this.result.lastPlugin = plugin2;
|
|
|
+ try {
|
|
|
+ return visitor(node.toProxy(), this.helpers);
|
|
|
+ } catch (e) {
|
|
|
+ throw this.handleError(e, node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (visit.iterator !== 0) {
|
|
|
+ let iterator = visit.iterator;
|
|
|
+ if (visit.descending) {
|
|
|
+ visit.descending = false;
|
|
|
+ node.indexes[iterator] += 1;
|
|
|
+ }
|
|
|
+ let child;
|
|
|
+ while (child = node.nodes[node.indexes[iterator]]) {
|
|
|
+ if (!child[isClean]) {
|
|
|
+ child[isClean] = true;
|
|
|
+ visit.descending = true;
|
|
|
+ stack.push(toStack(child));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ node.indexes[iterator] += 1;
|
|
|
+ }
|
|
|
+ visit.iterator = 0;
|
|
|
+ delete node.indexes[iterator];
|
|
|
+ }
|
|
|
+ let events = visit.events;
|
|
|
+ while (visit.eventIndex < events.length) {
|
|
|
+ let event = events[visit.eventIndex];
|
|
|
+ visit.eventIndex += 1;
|
|
|
+ if (event === CHILDREN) {
|
|
|
+ if (node.nodes && node.nodes.length) {
|
|
|
+ node[isClean] = true;
|
|
|
+ visit.iterator = node.getIterator();
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ } else if (this.listeners[event]) {
|
|
|
+ visit.visitors = this.listeners[event];
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ stack.pop();
|
|
|
+ }
|
|
|
+ walkSync(node) {
|
|
|
+ node[isClean] = true;
|
|
|
+ let stack = [{ eventIndex: 0, events: getEvents(node), iterator: 0, node }];
|
|
|
+ while (stack.length > 0) {
|
|
|
+ let visit = stack[stack.length - 1];
|
|
|
+ let visitNode = visit.node;
|
|
|
+ if (visit.iterator !== 0) {
|
|
|
+ let iterator = visit.iterator;
|
|
|
+ if (visit.descending) {
|
|
|
+ visit.descending = false;
|
|
|
+ visitNode.indexes[iterator] += 1;
|
|
|
+ }
|
|
|
+ let child;
|
|
|
+ let descended = false;
|
|
|
+ while (child = visitNode.nodes[visitNode.indexes[iterator]]) {
|
|
|
+ if (!child[isClean]) {
|
|
|
+ child[isClean] = true;
|
|
|
+ visit.descending = true;
|
|
|
+ stack.push({
|
|
|
+ eventIndex: 0,
|
|
|
+ events: getEvents(child),
|
|
|
+ iterator: 0,
|
|
|
+ node: child
|
|
|
+ });
|
|
|
+ descended = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ visitNode.indexes[iterator] += 1;
|
|
|
+ }
|
|
|
+ if (descended) continue;
|
|
|
+ visit.iterator = 0;
|
|
|
+ delete visitNode.indexes[iterator];
|
|
|
+ }
|
|
|
+ if (visit.eventIndex < visit.events.length) {
|
|
|
+ let event = visit.events[visit.eventIndex];
|
|
|
+ visit.eventIndex += 1;
|
|
|
+ if (event === CHILDREN) {
|
|
|
+ if (visitNode.nodes && visitNode.nodes.length) {
|
|
|
+ visit.iterator = visitNode.getIterator();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ let visitors = this.listeners[event];
|
|
|
+ if (visitors) {
|
|
|
+ if (this.visitSync(visitors, visitNode.toProxy())) stack.pop();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ stack.pop();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ warnings() {
|
|
|
+ return this.sync().warnings();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ LazyResult.registerPostcss = (dependant) => {
|
|
|
+ postcss2 = dependant;
|
|
|
+ };
|
|
|
+ module.exports = LazyResult;
|
|
|
+ LazyResult.default = LazyResult;
|
|
|
+ Root2.registerLazyResult(LazyResult);
|
|
|
+ Document2.registerLazyResult(LazyResult);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/no-work-result.js
|
|
|
+ var require_no_work_result = __commonJS({
|
|
|
+ "node_modules/postcss/lib/no-work-result.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var MapGenerator = require_map_generator();
|
|
|
+ var parse3 = require_parse();
|
|
|
+ var Result2 = require_result();
|
|
|
+ var stringify3 = require_stringify();
|
|
|
+ var warnOnce = require_warn_once();
|
|
|
+ var NoWorkResult = class {
|
|
|
+ get content() {
|
|
|
+ return this.result.css;
|
|
|
+ }
|
|
|
+ get css() {
|
|
|
+ return this.result.css;
|
|
|
+ }
|
|
|
+ get map() {
|
|
|
+ return this.result.map;
|
|
|
+ }
|
|
|
+ get messages() {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ get opts() {
|
|
|
+ return this.result.opts;
|
|
|
+ }
|
|
|
+ get processor() {
|
|
|
+ return this.result.processor;
|
|
|
+ }
|
|
|
+ get root() {
|
|
|
+ if (this._root) {
|
|
|
+ return this._root;
|
|
|
+ }
|
|
|
+ let root2;
|
|
|
+ let parser = parse3;
|
|
|
+ try {
|
|
|
+ root2 = parser(this._css, this._opts);
|
|
|
+ } catch (error) {
|
|
|
+ this.error = error;
|
|
|
+ }
|
|
|
+ if (this.error) {
|
|
|
+ throw this.error;
|
|
|
+ } else {
|
|
|
+ this._root = root2;
|
|
|
+ return root2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ get [Symbol.toStringTag]() {
|
|
|
+ return "NoWorkResult";
|
|
|
+ }
|
|
|
+ constructor(processor, css, opts) {
|
|
|
+ css = css.toString();
|
|
|
+ this.stringified = false;
|
|
|
+ this._processor = processor;
|
|
|
+ this._css = css;
|
|
|
+ this._opts = opts;
|
|
|
+ this._map = void 0;
|
|
|
+ let str = stringify3;
|
|
|
+ this.result = new Result2(this._processor, void 0, this._opts);
|
|
|
+ this.result.css = css;
|
|
|
+ let self = this;
|
|
|
+ Object.defineProperty(this.result, "root", {
|
|
|
+ get() {
|
|
|
+ return self.root;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ let map = new MapGenerator(str, void 0, this._opts, css);
|
|
|
+ if (map.isMap()) {
|
|
|
+ let [generatedCSS, generatedMap] = map.generate();
|
|
|
+ if (generatedCSS) {
|
|
|
+ this.result.css = generatedCSS;
|
|
|
+ }
|
|
|
+ if (generatedMap) {
|
|
|
+ this.result.map = generatedMap;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ map.clearAnnotation();
|
|
|
+ this.result.css = map.css;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ async() {
|
|
|
+ if (this.error) return Promise.reject(this.error);
|
|
|
+ return Promise.resolve(this.result);
|
|
|
+ }
|
|
|
+ catch(onRejected) {
|
|
|
+ return this.async().catch(onRejected);
|
|
|
+ }
|
|
|
+ finally(onFinally) {
|
|
|
+ return this.async().then(onFinally, onFinally);
|
|
|
+ }
|
|
|
+ sync() {
|
|
|
+ if (this.error) throw this.error;
|
|
|
+ return this.result;
|
|
|
+ }
|
|
|
+ then(onFulfilled, onRejected) {
|
|
|
+ if (true) {
|
|
|
+ if (!("from" in this._opts)) {
|
|
|
+ warnOnce(
|
|
|
+ "Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning."
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this.async().then(onFulfilled, onRejected);
|
|
|
+ }
|
|
|
+ toString() {
|
|
|
+ return this._css;
|
|
|
+ }
|
|
|
+ warnings() {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = NoWorkResult;
|
|
|
+ NoWorkResult.default = NoWorkResult;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/processor.js
|
|
|
+ var require_processor = __commonJS({
|
|
|
+ "node_modules/postcss/lib/processor.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var Document2 = require_document();
|
|
|
+ var LazyResult = require_lazy_result();
|
|
|
+ var NoWorkResult = require_no_work_result();
|
|
|
+ var Root2 = require_root();
|
|
|
+ var Processor2 = class {
|
|
|
+ constructor(plugins = []) {
|
|
|
+ this.version = "8.5.25";
|
|
|
+ this.plugins = this.normalize(plugins);
|
|
|
+ }
|
|
|
+ normalize(plugins) {
|
|
|
+ let normalized = [];
|
|
|
+ for (let i of plugins) {
|
|
|
+ if (i.postcss === true) {
|
|
|
+ i = i();
|
|
|
+ } else if (i.postcss) {
|
|
|
+ i = i.postcss;
|
|
|
+ }
|
|
|
+ if (typeof i === "object" && Array.isArray(i.plugins)) {
|
|
|
+ normalized = normalized.concat(i.plugins);
|
|
|
+ } else if (typeof i === "object" && i.postcssPlugin) {
|
|
|
+ normalized.push(i);
|
|
|
+ } else if (typeof i === "function") {
|
|
|
+ normalized.push(i);
|
|
|
+ } else if (typeof i === "object" && (i.parse || i.stringify)) {
|
|
|
+ if (true) {
|
|
|
+ throw new Error(
|
|
|
+ "PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation."
|
|
|
+ );
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new Error(i + " is not a PostCSS plugin");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return normalized;
|
|
|
+ }
|
|
|
+ process(css, opts = {}) {
|
|
|
+ if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {
|
|
|
+ return new NoWorkResult(this, css, opts);
|
|
|
+ } else {
|
|
|
+ return new LazyResult(this, css, opts);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ use(plugin2) {
|
|
|
+ this.plugins = this.plugins.concat(this.normalize([plugin2]));
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ module.exports = Processor2;
|
|
|
+ Processor2.default = Processor2;
|
|
|
+ Root2.registerProcessor(Processor2);
|
|
|
+ Document2.registerProcessor(Processor2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/postcss.js
|
|
|
+ var require_postcss = __commonJS({
|
|
|
+ "node_modules/postcss/lib/postcss.js"(exports, module) {
|
|
|
+ "use strict";
|
|
|
+ var AtRule2 = require_at_rule();
|
|
|
+ var Comment2 = require_comment();
|
|
|
+ var Container2 = require_container();
|
|
|
+ var CssSyntaxError2 = require_css_syntax_error();
|
|
|
+ var Declaration2 = require_declaration();
|
|
|
+ var Document2 = require_document();
|
|
|
+ var fromJSON2 = require_fromJSON();
|
|
|
+ var Input2 = require_input();
|
|
|
+ var LazyResult = require_lazy_result();
|
|
|
+ var list2 = require_list();
|
|
|
+ var Node3 = require_node();
|
|
|
+ var parse3 = require_parse();
|
|
|
+ var Processor2 = require_processor();
|
|
|
+ var Result2 = require_result();
|
|
|
+ var Root2 = require_root();
|
|
|
+ var Rule2 = require_rule();
|
|
|
+ var stringify3 = require_stringify();
|
|
|
+ var Warning2 = require_warning();
|
|
|
+ function postcss2(...plugins) {
|
|
|
+ if (plugins.length === 1 && Array.isArray(plugins[0])) {
|
|
|
+ plugins = plugins[0];
|
|
|
+ }
|
|
|
+ return new Processor2(plugins);
|
|
|
+ }
|
|
|
+ postcss2.plugin = function plugin2(name, initializer) {
|
|
|
+ let warningPrinted = false;
|
|
|
+ function creator(...args) {
|
|
|
+ if (console && console.warn && !warningPrinted) {
|
|
|
+ warningPrinted = true;
|
|
|
+ console.warn(
|
|
|
+ name + ": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration"
|
|
|
+ );
|
|
|
+ if (process.env.LANG && process.env.LANG.startsWith("cn")) {
|
|
|
+ console.warn(
|
|
|
+ name + ": \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357:\nhttps://www.w3ctech.com/topic/2226"
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let transformer = initializer(...args);
|
|
|
+ transformer.postcssPlugin = name;
|
|
|
+ transformer.postcssVersion = new Processor2().version;
|
|
|
+ return transformer;
|
|
|
+ }
|
|
|
+ let cache;
|
|
|
+ Object.defineProperty(creator, "postcss", {
|
|
|
+ get() {
|
|
|
+ if (!cache) cache = creator();
|
|
|
+ return cache;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ creator.process = function(css, processOpts, pluginOpts) {
|
|
|
+ return postcss2([creator(pluginOpts)]).process(css, processOpts);
|
|
|
+ };
|
|
|
+ return creator;
|
|
|
+ };
|
|
|
+ postcss2.stringify = stringify3;
|
|
|
+ postcss2.parse = parse3;
|
|
|
+ postcss2.fromJSON = fromJSON2;
|
|
|
+ postcss2.list = list2;
|
|
|
+ postcss2.comment = (defaults2) => new Comment2(defaults2);
|
|
|
+ postcss2.atRule = (defaults2) => new AtRule2(defaults2);
|
|
|
+ postcss2.decl = (defaults2) => new Declaration2(defaults2);
|
|
|
+ postcss2.rule = (defaults2) => new Rule2(defaults2);
|
|
|
+ postcss2.root = (defaults2) => new Root2(defaults2);
|
|
|
+ postcss2.document = (defaults2) => new Document2(defaults2);
|
|
|
+ postcss2.CssSyntaxError = CssSyntaxError2;
|
|
|
+ postcss2.Declaration = Declaration2;
|
|
|
+ postcss2.Container = Container2;
|
|
|
+ postcss2.Processor = Processor2;
|
|
|
+ postcss2.Document = Document2;
|
|
|
+ postcss2.Comment = Comment2;
|
|
|
+ postcss2.Warning = Warning2;
|
|
|
+ postcss2.AtRule = AtRule2;
|
|
|
+ postcss2.Result = Result2;
|
|
|
+ postcss2.Input = Input2;
|
|
|
+ postcss2.Rule = Rule2;
|
|
|
+ postcss2.Root = Root2;
|
|
|
+ postcss2.Node = Node3;
|
|
|
+ LazyResult.registerPostcss(postcss2);
|
|
|
+ module.exports = postcss2;
|
|
|
+ postcss2.default = postcss2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss-value-parser/lib/parse.js
|
|
|
+ var require_parse2 = __commonJS({
|
|
|
+ "node_modules/postcss-value-parser/lib/parse.js"(exports, module) {
|
|
|
+ var openParentheses = "(".charCodeAt(0);
|
|
|
+ var closeParentheses = ")".charCodeAt(0);
|
|
|
+ var singleQuote = "'".charCodeAt(0);
|
|
|
+ var doubleQuote = '"'.charCodeAt(0);
|
|
|
+ var backslash = "\\".charCodeAt(0);
|
|
|
+ var slash = "/".charCodeAt(0);
|
|
|
+ var comma = ",".charCodeAt(0);
|
|
|
+ var colon = ":".charCodeAt(0);
|
|
|
+ var star = "*".charCodeAt(0);
|
|
|
+ var uLower = "u".charCodeAt(0);
|
|
|
+ var uUpper = "U".charCodeAt(0);
|
|
|
+ var plus = "+".charCodeAt(0);
|
|
|
+ var isUnicodeRange = /^[a-f0-9?-]+$/i;
|
|
|
+ module.exports = function(input) {
|
|
|
+ var tokens = [];
|
|
|
+ var value = input;
|
|
|
+ var next, quote, prev, token, escape, escapePos, whitespacePos, parenthesesOpenPos;
|
|
|
+ var pos = 0;
|
|
|
+ var code = value.charCodeAt(pos);
|
|
|
+ var max = value.length;
|
|
|
+ var stack = [{ nodes: tokens }];
|
|
|
+ var balanced = 0;
|
|
|
+ var parent;
|
|
|
+ var name = "";
|
|
|
+ var before = "";
|
|
|
+ var after = "";
|
|
|
+ while (pos < max) {
|
|
|
+ if (code <= 32) {
|
|
|
+ next = pos;
|
|
|
+ do {
|
|
|
+ next += 1;
|
|
|
+ code = value.charCodeAt(next);
|
|
|
+ } while (code <= 32);
|
|
|
+ token = value.slice(pos, next);
|
|
|
+ prev = tokens[tokens.length - 1];
|
|
|
+ if (code === closeParentheses && balanced) {
|
|
|
+ after = token;
|
|
|
+ } else if (prev && prev.type === "div") {
|
|
|
+ prev.after = token;
|
|
|
+ prev.sourceEndIndex += token.length;
|
|
|
+ } else if (code === comma || code === colon || code === slash && value.charCodeAt(next + 1) !== star && (!parent || parent && parent.type === "function" && parent.value !== "calc")) {
|
|
|
+ before = token;
|
|
|
+ } else {
|
|
|
+ tokens.push({
|
|
|
+ type: "space",
|
|
|
+ sourceIndex: pos,
|
|
|
+ sourceEndIndex: next,
|
|
|
+ value: token
|
|
|
+ });
|
|
|
+ }
|
|
|
+ pos = next;
|
|
|
+ } else if (code === singleQuote || code === doubleQuote) {
|
|
|
+ next = pos;
|
|
|
+ quote = code === singleQuote ? "'" : '"';
|
|
|
+ token = {
|
|
|
+ type: "string",
|
|
|
+ sourceIndex: pos,
|
|
|
+ quote
|
|
|
+ };
|
|
|
+ do {
|
|
|
+ escape = false;
|
|
|
+ next = value.indexOf(quote, next + 1);
|
|
|
+ if (~next) {
|
|
|
+ escapePos = next;
|
|
|
+ while (value.charCodeAt(escapePos - 1) === backslash) {
|
|
|
+ escapePos -= 1;
|
|
|
+ escape = !escape;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ value += quote;
|
|
|
+ next = value.length - 1;
|
|
|
+ token.unclosed = true;
|
|
|
+ }
|
|
|
+ } while (escape);
|
|
|
+ token.value = value.slice(pos + 1, next);
|
|
|
+ token.sourceEndIndex = token.unclosed ? next : next + 1;
|
|
|
+ tokens.push(token);
|
|
|
+ pos = next + 1;
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ } else if (code === slash && value.charCodeAt(pos + 1) === star) {
|
|
|
+ next = value.indexOf("*/", pos);
|
|
|
+ token = {
|
|
|
+ type: "comment",
|
|
|
+ sourceIndex: pos,
|
|
|
+ sourceEndIndex: next + 2
|
|
|
+ };
|
|
|
+ if (next === -1) {
|
|
|
+ token.unclosed = true;
|
|
|
+ next = value.length;
|
|
|
+ token.sourceEndIndex = next;
|
|
|
+ }
|
|
|
+ token.value = value.slice(pos + 2, next);
|
|
|
+ tokens.push(token);
|
|
|
+ pos = next + 2;
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ } else if ((code === slash || code === star) && parent && parent.type === "function" && parent.value === "calc") {
|
|
|
+ token = value[pos];
|
|
|
+ tokens.push({
|
|
|
+ type: "word",
|
|
|
+ sourceIndex: pos - before.length,
|
|
|
+ sourceEndIndex: pos + token.length,
|
|
|
+ value: token
|
|
|
+ });
|
|
|
+ pos += 1;
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ } else if (code === slash || code === comma || code === colon) {
|
|
|
+ token = value[pos];
|
|
|
+ tokens.push({
|
|
|
+ type: "div",
|
|
|
+ sourceIndex: pos - before.length,
|
|
|
+ sourceEndIndex: pos + token.length,
|
|
|
+ value: token,
|
|
|
+ before,
|
|
|
+ after: ""
|
|
|
+ });
|
|
|
+ before = "";
|
|
|
+ pos += 1;
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ } else if (openParentheses === code) {
|
|
|
+ next = pos;
|
|
|
+ do {
|
|
|
+ next += 1;
|
|
|
+ code = value.charCodeAt(next);
|
|
|
+ } while (code <= 32);
|
|
|
+ parenthesesOpenPos = pos;
|
|
|
+ token = {
|
|
|
+ type: "function",
|
|
|
+ sourceIndex: pos - name.length,
|
|
|
+ value: name,
|
|
|
+ before: value.slice(parenthesesOpenPos + 1, next)
|
|
|
+ };
|
|
|
+ pos = next;
|
|
|
+ if (name === "url" && code !== singleQuote && code !== doubleQuote) {
|
|
|
+ next -= 1;
|
|
|
+ do {
|
|
|
+ escape = false;
|
|
|
+ next = value.indexOf(")", next + 1);
|
|
|
+ if (~next) {
|
|
|
+ escapePos = next;
|
|
|
+ while (value.charCodeAt(escapePos - 1) === backslash) {
|
|
|
+ escapePos -= 1;
|
|
|
+ escape = !escape;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ value += ")";
|
|
|
+ next = value.length - 1;
|
|
|
+ token.unclosed = true;
|
|
|
+ }
|
|
|
+ } while (escape);
|
|
|
+ whitespacePos = next;
|
|
|
+ do {
|
|
|
+ whitespacePos -= 1;
|
|
|
+ code = value.charCodeAt(whitespacePos);
|
|
|
+ } while (code <= 32);
|
|
|
+ if (parenthesesOpenPos < whitespacePos) {
|
|
|
+ if (pos !== whitespacePos + 1) {
|
|
|
+ token.nodes = [
|
|
|
+ {
|
|
|
+ type: "word",
|
|
|
+ sourceIndex: pos,
|
|
|
+ sourceEndIndex: whitespacePos + 1,
|
|
|
+ value: value.slice(pos, whitespacePos + 1)
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ } else {
|
|
|
+ token.nodes = [];
|
|
|
+ }
|
|
|
+ if (token.unclosed && whitespacePos + 1 !== next) {
|
|
|
+ token.after = "";
|
|
|
+ token.nodes.push({
|
|
|
+ type: "space",
|
|
|
+ sourceIndex: whitespacePos + 1,
|
|
|
+ sourceEndIndex: next,
|
|
|
+ value: value.slice(whitespacePos + 1, next)
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ token.after = value.slice(whitespacePos + 1, next);
|
|
|
+ token.sourceEndIndex = next;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ token.after = "";
|
|
|
+ token.nodes = [];
|
|
|
+ }
|
|
|
+ pos = next + 1;
|
|
|
+ token.sourceEndIndex = token.unclosed ? next : pos;
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ tokens.push(token);
|
|
|
+ } else {
|
|
|
+ balanced += 1;
|
|
|
+ token.after = "";
|
|
|
+ token.sourceEndIndex = pos + 1;
|
|
|
+ tokens.push(token);
|
|
|
+ stack.push(token);
|
|
|
+ tokens = token.nodes = [];
|
|
|
+ parent = token;
|
|
|
+ }
|
|
|
+ name = "";
|
|
|
+ } else if (closeParentheses === code && balanced) {
|
|
|
+ pos += 1;
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ parent.after = after;
|
|
|
+ parent.sourceEndIndex += after.length;
|
|
|
+ after = "";
|
|
|
+ balanced -= 1;
|
|
|
+ stack[stack.length - 1].sourceEndIndex = pos;
|
|
|
+ stack.pop();
|
|
|
+ parent = stack[balanced];
|
|
|
+ tokens = parent.nodes;
|
|
|
+ } else {
|
|
|
+ next = pos;
|
|
|
+ do {
|
|
|
+ if (code === backslash) {
|
|
|
+ next += 1;
|
|
|
+ }
|
|
|
+ next += 1;
|
|
|
+ code = value.charCodeAt(next);
|
|
|
+ } while (next < max && !(code <= 32 || code === singleQuote || code === doubleQuote || code === comma || code === colon || code === slash || code === openParentheses || code === star && parent && parent.type === "function" && parent.value === "calc" || code === slash && parent.type === "function" && parent.value === "calc" || code === closeParentheses && balanced));
|
|
|
+ token = value.slice(pos, next);
|
|
|
+ if (openParentheses === code) {
|
|
|
+ name = token;
|
|
|
+ } else if ((uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) && plus === token.charCodeAt(1) && isUnicodeRange.test(token.slice(2))) {
|
|
|
+ tokens.push({
|
|
|
+ type: "unicode-range",
|
|
|
+ sourceIndex: pos,
|
|
|
+ sourceEndIndex: next,
|
|
|
+ value: token
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ tokens.push({
|
|
|
+ type: "word",
|
|
|
+ sourceIndex: pos,
|
|
|
+ sourceEndIndex: next,
|
|
|
+ value: token
|
|
|
+ });
|
|
|
+ }
|
|
|
+ pos = next;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (pos = stack.length - 1; pos; pos -= 1) {
|
|
|
+ stack[pos].unclosed = true;
|
|
|
+ stack[pos].sourceEndIndex = value.length;
|
|
|
+ }
|
|
|
+ return stack[0].nodes;
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss-value-parser/lib/walk.js
|
|
|
+ var require_walk = __commonJS({
|
|
|
+ "node_modules/postcss-value-parser/lib/walk.js"(exports, module) {
|
|
|
+ module.exports = function walk(nodes, cb, bubble) {
|
|
|
+ var i, max, node, result;
|
|
|
+ for (i = 0, max = nodes.length; i < max; i += 1) {
|
|
|
+ node = nodes[i];
|
|
|
+ if (!bubble) {
|
|
|
+ result = cb(node, i, nodes);
|
|
|
+ }
|
|
|
+ if (result !== false && node.type === "function" && Array.isArray(node.nodes)) {
|
|
|
+ walk(node.nodes, cb, bubble);
|
|
|
+ }
|
|
|
+ if (bubble) {
|
|
|
+ cb(node, i, nodes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss-value-parser/lib/stringify.js
|
|
|
+ var require_stringify2 = __commonJS({
|
|
|
+ "node_modules/postcss-value-parser/lib/stringify.js"(exports, module) {
|
|
|
+ function stringifyNode(node, custom) {
|
|
|
+ var type = node.type;
|
|
|
+ var value = node.value;
|
|
|
+ var buf;
|
|
|
+ var customResult;
|
|
|
+ if (custom && (customResult = custom(node)) !== void 0) {
|
|
|
+ return customResult;
|
|
|
+ } else if (type === "word" || type === "space") {
|
|
|
+ return value;
|
|
|
+ } else if (type === "string") {
|
|
|
+ buf = node.quote || "";
|
|
|
+ return buf + value + (node.unclosed ? "" : buf);
|
|
|
+ } else if (type === "comment") {
|
|
|
+ return "/*" + value + (node.unclosed ? "" : "*/");
|
|
|
+ } else if (type === "div") {
|
|
|
+ return (node.before || "") + value + (node.after || "");
|
|
|
+ } else if (Array.isArray(node.nodes)) {
|
|
|
+ buf = stringify3(node.nodes, custom);
|
|
|
+ if (type !== "function") {
|
|
|
+ return buf;
|
|
|
+ }
|
|
|
+ return value + "(" + (node.before || "") + buf + (node.after || "") + (node.unclosed ? "" : ")");
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ function stringify3(nodes, custom) {
|
|
|
+ var result, i;
|
|
|
+ if (Array.isArray(nodes)) {
|
|
|
+ result = "";
|
|
|
+ for (i = nodes.length - 1; ~i; i -= 1) {
|
|
|
+ result = stringifyNode(nodes[i], custom) + result;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ return stringifyNode(nodes, custom);
|
|
|
+ }
|
|
|
+ module.exports = stringify3;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss-value-parser/lib/unit.js
|
|
|
+ var require_unit = __commonJS({
|
|
|
+ "node_modules/postcss-value-parser/lib/unit.js"(exports, module) {
|
|
|
+ var minus = "-".charCodeAt(0);
|
|
|
+ var plus = "+".charCodeAt(0);
|
|
|
+ var dot = ".".charCodeAt(0);
|
|
|
+ var exp = "e".charCodeAt(0);
|
|
|
+ var EXP = "E".charCodeAt(0);
|
|
|
+ function likeNumber(value) {
|
|
|
+ var code = value.charCodeAt(0);
|
|
|
+ var nextCode;
|
|
|
+ if (code === plus || code === minus) {
|
|
|
+ nextCode = value.charCodeAt(1);
|
|
|
+ if (nextCode >= 48 && nextCode <= 57) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ var nextNextCode = value.charCodeAt(2);
|
|
|
+ if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (code === dot) {
|
|
|
+ nextCode = value.charCodeAt(1);
|
|
|
+ if (nextCode >= 48 && nextCode <= 57) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (code >= 48 && code <= 57) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ module.exports = function(value) {
|
|
|
+ var pos = 0;
|
|
|
+ var length = value.length;
|
|
|
+ var code;
|
|
|
+ var nextCode;
|
|
|
+ var nextNextCode;
|
|
|
+ if (length === 0 || !likeNumber(value)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ if (code === plus || code === minus) {
|
|
|
+ pos++;
|
|
|
+ }
|
|
|
+ while (pos < length) {
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ if (code < 48 || code > 57) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pos += 1;
|
|
|
+ }
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ nextCode = value.charCodeAt(pos + 1);
|
|
|
+ if (code === dot && nextCode >= 48 && nextCode <= 57) {
|
|
|
+ pos += 2;
|
|
|
+ while (pos < length) {
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ if (code < 48 || code > 57) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pos += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ nextCode = value.charCodeAt(pos + 1);
|
|
|
+ nextNextCode = value.charCodeAt(pos + 2);
|
|
|
+ if ((code === exp || code === EXP) && (nextCode >= 48 && nextCode <= 57 || (nextCode === plus || nextCode === minus) && nextNextCode >= 48 && nextNextCode <= 57)) {
|
|
|
+ pos += nextCode === plus || nextCode === minus ? 3 : 2;
|
|
|
+ while (pos < length) {
|
|
|
+ code = value.charCodeAt(pos);
|
|
|
+ if (code < 48 || code > 57) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pos += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ number: value.slice(0, pos),
|
|
|
+ unit: value.slice(pos)
|
|
|
+ };
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss-value-parser/lib/index.js
|
|
|
+ var require_lib = __commonJS({
|
|
|
+ "node_modules/postcss-value-parser/lib/index.js"(exports, module) {
|
|
|
+ var parse3 = require_parse2();
|
|
|
+ var walk = require_walk();
|
|
|
+ var stringify3 = require_stringify2();
|
|
|
+ function ValueParser(value) {
|
|
|
+ if (this instanceof ValueParser) {
|
|
|
+ this.nodes = parse3(value);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ return new ValueParser(value);
|
|
|
+ }
|
|
|
+ ValueParser.prototype.toString = function() {
|
|
|
+ return Array.isArray(this.nodes) ? stringify3(this.nodes) : "";
|
|
|
+ };
|
|
|
+ ValueParser.prototype.walk = function(cb, bubble) {
|
|
|
+ walk(this.nodes, cb, bubble);
|
|
|
+ return this;
|
|
|
+ };
|
|
|
+ ValueParser.unit = require_unit();
|
|
|
+ ValueParser.walk = walk;
|
|
|
+ ValueParser.stringify = stringify3;
|
|
|
+ module.exports = ValueParser;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // node_modules/postcss/lib/postcss.mjs
|
|
|
+ var import_postcss = __toESM(require_postcss(), 1);
|
|
|
+ var stringify = import_postcss.default.stringify;
|
|
|
+ var fromJSON = import_postcss.default.fromJSON;
|
|
|
+ var plugin = import_postcss.default.plugin;
|
|
|
+ var parse = import_postcss.default.parse;
|
|
|
+ var list = import_postcss.default.list;
|
|
|
+ var document = import_postcss.default.document;
|
|
|
+ var comment = import_postcss.default.comment;
|
|
|
+ var atRule = import_postcss.default.atRule;
|
|
|
+ var rule = import_postcss.default.rule;
|
|
|
+ var decl = import_postcss.default.decl;
|
|
|
+ var root = import_postcss.default.root;
|
|
|
+ var CssSyntaxError = import_postcss.default.CssSyntaxError;
|
|
|
+ var Declaration = import_postcss.default.Declaration;
|
|
|
+ var Container = import_postcss.default.Container;
|
|
|
+ var Processor = import_postcss.default.Processor;
|
|
|
+ var Document = import_postcss.default.Document;
|
|
|
+ var Comment = import_postcss.default.Comment;
|
|
|
+ var Warning = import_postcss.default.Warning;
|
|
|
+ var AtRule = import_postcss.default.AtRule;
|
|
|
+ var Result = import_postcss.default.Result;
|
|
|
+ var Input = import_postcss.default.Input;
|
|
|
+ var Rule = import_postcss.default.Rule;
|
|
|
+ var Root = import_postcss.default.Root;
|
|
|
+ var Node2 = import_postcss.default.Node;
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/index.js
|
|
|
+ var import_postcss_value_parser4 = __toESM(require_lib(), 1);
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/css.js
|
|
|
+ var isCSSFontFaceRule = (rule2) => rule2.type === CSSRule.FONT_FACE_RULE;
|
|
|
+ var isInline = (styles) => styles.displayOutside === "inline" || styles.display.startsWith("inline-");
|
|
|
+ var isPositioned = (styles) => styles.position !== "static";
|
|
|
+ var isInFlow = (styles) => styles.float !== "none" && styles.position !== "absolute" && styles.position !== "fixed";
|
|
|
+ var isTransparent = (color) => color === "transparent" || color === "rgba(0, 0, 0, 0)";
|
|
|
+ var hasUniformBorder = (styles) => parseFloat(styles.borderTopWidth) !== 0 && styles.borderTopStyle !== "none" && styles.borderTopStyle !== "inset" && styles.borderTopStyle !== "outset" && !isTransparent(styles.borderTopColor) && // Cannot use border property directly as in Firefox those are empty strings.
|
|
|
+ // Need to get the specific border properties from the specific sides.
|
|
|
+ // https://stackoverflow.com/questions/41696063/getcomputedstyle-returns-empty-strings-on-ff-when-instead-crome-returns-a-comp
|
|
|
+ styles.borderTopWidth === styles.borderLeftWidth && styles.borderTopWidth === styles.borderRightWidth && styles.borderTopWidth === styles.borderBottomWidth && styles.borderTopColor === styles.borderLeftColor && styles.borderTopColor === styles.borderRightColor && styles.borderTopColor === styles.borderBottomColor && styles.borderTopStyle === styles.borderLeftStyle && styles.borderTopStyle === styles.borderRightStyle && styles.borderTopStyle === styles.borderBottomStyle;
|
|
|
+ var SIDES = ["top", "bottom", "right", "left"];
|
|
|
+ var isHorizontal = (side) => side === "bottom" || side === "top";
|
|
|
+ var CORNERS = {
|
|
|
+ top: ["left", "right"],
|
|
|
+ bottom: ["left", "right"],
|
|
|
+ left: ["top", "bottom"],
|
|
|
+ right: ["top", "bottom"]
|
|
|
+ };
|
|
|
+ function getBorderRadiiForSide(side, styles, bounds) {
|
|
|
+ var _a, _b, _c, _d;
|
|
|
+ const [horizontalStyle1, verticalStyle1] = styles.getPropertyValue(isHorizontal(side) ? `border-${side}-${CORNERS[side][0]}-radius` : `border-${CORNERS[side][0]}-${side}-radius`).split(" ");
|
|
|
+ const [horizontalStyle2, verticalStyle2] = styles.getPropertyValue(isHorizontal(side) ? `border-${side}-${CORNERS[side][1]}-radius` : `border-${CORNERS[side][1]}-${side}-radius`).split(" ");
|
|
|
+ if (isHorizontal(side)) {
|
|
|
+ return [
|
|
|
+ (_a = parseCSSLength(horizontalStyle1 || "0px", bounds.width)) !== null && _a !== void 0 ? _a : 0,
|
|
|
+ (_b = parseCSSLength(horizontalStyle2 || "0px", bounds.width)) !== null && _b !== void 0 ? _b : 0
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ (_c = parseCSSLength(verticalStyle1 || horizontalStyle1 || "0px", bounds.height)) !== null && _c !== void 0 ? _c : 0,
|
|
|
+ (_d = parseCSSLength(verticalStyle2 || horizontalStyle2 || "0px", bounds.height)) !== null && _d !== void 0 ? _d : 0
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ var calculateOverlappingCurvesFactor = (styles, bounds) => Math.min(...SIDES.map((side) => {
|
|
|
+ const length = isHorizontal(side) ? bounds.width : bounds.height;
|
|
|
+ const radiiSum = getBorderRadiiForSide(side, styles, bounds).reduce((sum, radius) => sum + radius, 0);
|
|
|
+ return length / radiiSum;
|
|
|
+ }), 1);
|
|
|
+ var isVisible = (styles) => styles.displayOutside !== "none" && styles.display !== "none" && styles.visibility !== "hidden" && styles.opacity !== "0";
|
|
|
+ function parseCSSLength(length, containerLength) {
|
|
|
+ if (length.endsWith("px")) {
|
|
|
+ return parseFloat(length);
|
|
|
+ }
|
|
|
+ if (length.endsWith("%")) {
|
|
|
+ return parseFloat(length) / 100 * containerLength;
|
|
|
+ }
|
|
|
+ return void 0;
|
|
|
+ }
|
|
|
+ var unescapeStringValue = (value) => value.replace(/\\([\da-f]{1,2})/gi, (substring, codePoint) => String.fromCodePoint(parseInt(codePoint, 16))).replace(/\\(.)/g, "$1");
|
|
|
+ function copyCssStyles(from, to) {
|
|
|
+ for (const property of from) {
|
|
|
+ to.setProperty(property, from.getPropertyValue(property), from.getPropertyPriority(property));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/dom.js
|
|
|
+ var svgNamespace = "http://www.w3.org/2000/svg";
|
|
|
+ var xlinkNamespace = "http://www.w3.org/1999/xlink";
|
|
|
+ var xhtmlNamespace = "http://www.w3.org/1999/xhtml";
|
|
|
+ var isElement = (node) => node.nodeType === Node.ELEMENT_NODE;
|
|
|
+ var isTextNode = (node) => node.nodeType === Node.TEXT_NODE;
|
|
|
+ var isSVGElement = (element) => element.namespaceURI === svgNamespace;
|
|
|
+ var isSVGSVGElement = (element) => isSVGElement(element) && element.tagName === "svg";
|
|
|
+ var isSVGGraphicsElement = (element) => isSVGElement(element) && "getCTM" in element && "getScreenCTM" in element;
|
|
|
+ var isSVGAnchorElement = (element) => isSVGElement(element) && element.tagName === "a";
|
|
|
+ var isSVGTextContentElement = (element) => isSVGElement(element) && "textLength" in element;
|
|
|
+ var isSVGImageElement = (element) => element.tagName === "image" && isSVGElement(element);
|
|
|
+ var isSVGStyleElement = (element) => element.tagName === "style" && isSVGElement(element);
|
|
|
+ var isHTMLElement = (element) => element.namespaceURI === xhtmlNamespace;
|
|
|
+ var isHTMLAnchorElement = (element) => element.tagName === "A" && isHTMLElement(element);
|
|
|
+ var isHTMLImageElement = (element) => element.tagName === "IMG" && isHTMLElement(element);
|
|
|
+ var isHTMLInputElement = (element) => element.tagName === "INPUT" && isHTMLElement(element);
|
|
|
+ var hasLabels = (element) => "labels" in element;
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/stacking.js
|
|
|
+ var stackingContextEstablishingProperties = /* @__PURE__ */ new Set([
|
|
|
+ "clipPath",
|
|
|
+ "contain",
|
|
|
+ "filter",
|
|
|
+ "isolation",
|
|
|
+ "mask",
|
|
|
+ "maskBorder",
|
|
|
+ "maskImage",
|
|
|
+ "mixBlendMode",
|
|
|
+ "opacity",
|
|
|
+ "perspective",
|
|
|
+ "position",
|
|
|
+ "transform",
|
|
|
+ "webkitOverflowScrolling",
|
|
|
+ "zIndex"
|
|
|
+ ]);
|
|
|
+ function establishesStackingContext(styles, parentStyles) {
|
|
|
+ return !!((styles.position === "absolute" || styles.position === "relative") && styles.zIndex !== "auto" || styles.position === "fixed" || styles.position === "sticky" || parentStyles && (parentStyles.display === "flex" || parentStyles.display === "grid") && styles.zIndex !== "auto" || parseFloat(styles.opacity) !== 1 || styles.mixBlendMode !== "normal" || styles.transform !== "none" || styles.filter !== "none" || styles.perspective !== "none" || styles.clipPath !== "none" || styles.mask !== "none" || styles.maskImage !== "none" || styles.maskBorder !== "none" || styles.isolation === "isolate" || styles.webkitOverflowScrolling === "touch" || styles.contain === "layout" || styles.contain === "paint" || styles.contain === "strict" || styles.contain === "content" || styles.willChange.split(",").some((property) => stackingContextEstablishingProperties.has(property.trim())));
|
|
|
+ }
|
|
|
+ var STACKING_LAYER_NAMES = [
|
|
|
+ "rootBackgroundAndBorders",
|
|
|
+ "childStackingContextsWithNegativeStackLevels",
|
|
|
+ "inFlowNonInlineNonPositionedDescendants",
|
|
|
+ "nonPositionedFloats",
|
|
|
+ "inFlowInlineLevelNonPositionedDescendants",
|
|
|
+ "childStackingContextsWithStackLevelZeroAndPositionedDescendantsWithStackLevelZero",
|
|
|
+ "childStackingContextsWithPositiveStackLevels"
|
|
|
+ ];
|
|
|
+ function createStackingLayer(parent, layerName) {
|
|
|
+ const layer = parent.ownerDocument.createElementNS(svgNamespace, "g");
|
|
|
+ layer.dataset.stackingLayer = layerName;
|
|
|
+ parent.append(layer);
|
|
|
+ return layer;
|
|
|
+ }
|
|
|
+ function createStackingLayers(container) {
|
|
|
+ container.dataset.stackingContext = "true";
|
|
|
+ return {
|
|
|
+ rootBackgroundAndBorders: createStackingLayer(container, "rootBackgroundAndBorders"),
|
|
|
+ childStackingContextsWithNegativeStackLevels: createStackingLayer(container, "childStackingContextsWithNegativeStackLevels"),
|
|
|
+ inFlowNonInlineNonPositionedDescendants: createStackingLayer(container, "inFlowNonInlineNonPositionedDescendants"),
|
|
|
+ nonPositionedFloats: createStackingLayer(container, "nonPositionedFloats"),
|
|
|
+ inFlowInlineLevelNonPositionedDescendants: createStackingLayer(container, "inFlowInlineLevelNonPositionedDescendants"),
|
|
|
+ childStackingContextsWithStackLevelZeroAndPositionedDescendantsWithStackLevelZero: createStackingLayer(container, "childStackingContextsWithStackLevelZeroAndPositionedDescendantsWithStackLevelZero"),
|
|
|
+ childStackingContextsWithPositiveStackLevels: createStackingLayer(container, "childStackingContextsWithPositiveStackLevels")
|
|
|
+ };
|
|
|
+ }
|
|
|
+ function determineStackingLayer(styles, parentStyles) {
|
|
|
+ const zIndex = styles.zIndex !== "auto" ? parseInt(styles.zIndex, 10) : void 0;
|
|
|
+ if (zIndex !== void 0 && zIndex < 0 && establishesStackingContext(styles, parentStyles)) {
|
|
|
+ return "childStackingContextsWithNegativeStackLevels";
|
|
|
+ }
|
|
|
+ if (isInFlow(styles) && !isInline(styles) && !isPositioned(styles)) {
|
|
|
+ return "inFlowNonInlineNonPositionedDescendants";
|
|
|
+ }
|
|
|
+ if (!isPositioned(styles) && styles.float !== "none") {
|
|
|
+ return "nonPositionedFloats";
|
|
|
+ }
|
|
|
+ if (isInFlow(styles) && isInline(styles) && !isPositioned(styles)) {
|
|
|
+ return "inFlowInlineLevelNonPositionedDescendants";
|
|
|
+ }
|
|
|
+ if (zIndex === 0 && (isPositioned(styles) || establishesStackingContext(styles, parentStyles))) {
|
|
|
+ return "childStackingContextsWithStackLevelZeroAndPositionedDescendantsWithStackLevelZero";
|
|
|
+ }
|
|
|
+ if (zIndex !== void 0 && zIndex > 0 && establishesStackingContext(styles, parentStyles)) {
|
|
|
+ return "childStackingContextsWithPositiveStackLevels";
|
|
|
+ }
|
|
|
+ return void 0;
|
|
|
+ }
|
|
|
+ function sortChildrenByZIndex(parent) {
|
|
|
+ const sorted = [...parent.children].sort((a, b) => {
|
|
|
+ const zIndexA = a.dataset.zIndex;
|
|
|
+ const zIndexB = b.dataset.zIndex;
|
|
|
+ if (!zIndexA || !zIndexB) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return parseInt(zIndexA, 10) - parseInt(zIndexB, 10);
|
|
|
+ });
|
|
|
+ for (const child of sorted) {
|
|
|
+ parent.append(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function sortStackingLayerChildren(stackingLayers) {
|
|
|
+ sortChildrenByZIndex(stackingLayers.childStackingContextsWithNegativeStackLevels);
|
|
|
+ sortChildrenByZIndex(stackingLayers.childStackingContextsWithPositiveStackLevels);
|
|
|
+ }
|
|
|
+ function cleanupStackingLayerChildren(stackingLayers) {
|
|
|
+ for (const name of STACKING_LAYER_NAMES) {
|
|
|
+ const layer = stackingLayers[name];
|
|
|
+ if (!layer.hasChildNodes()) {
|
|
|
+ layer.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/element.js
|
|
|
+ var import_postcss_value_parser2 = __toESM(require_lib(), 1);
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/accessibility.js
|
|
|
+ var isStandaloneFooter = (element) => !element.closest('article, aside, main, nav, section, [role="article"], [role="complementary"], [role="main"], [role="navigation"], [role="region"]');
|
|
|
+ function getAccessibilityAttributes(element, { labels, getUniqueId }) {
|
|
|
+ var _a, _b, _c;
|
|
|
+ const attributes = /* @__PURE__ */ new Map();
|
|
|
+ switch (element.tagName) {
|
|
|
+ case "A":
|
|
|
+ attributes.set("role", "link");
|
|
|
+ break;
|
|
|
+ case "ARTICLE":
|
|
|
+ attributes.set("role", "article");
|
|
|
+ break;
|
|
|
+ case "ASIDE":
|
|
|
+ attributes.set("role", "complementary");
|
|
|
+ break;
|
|
|
+ case "BODY":
|
|
|
+ attributes.set("role", "document");
|
|
|
+ break;
|
|
|
+ case "BUTTON":
|
|
|
+ case "SUMMARY":
|
|
|
+ attributes.set("role", "button");
|
|
|
+ break;
|
|
|
+ case "DD":
|
|
|
+ attributes.set("role", "definition");
|
|
|
+ break;
|
|
|
+ case "DETAILS":
|
|
|
+ attributes.set("role", "group");
|
|
|
+ break;
|
|
|
+ case "DFN":
|
|
|
+ attributes.set("role", "term");
|
|
|
+ break;
|
|
|
+ case "DIALOG":
|
|
|
+ attributes.set("role", "dialog");
|
|
|
+ break;
|
|
|
+ case "DT":
|
|
|
+ attributes.set("role", "term");
|
|
|
+ break;
|
|
|
+ case "FIELDSET":
|
|
|
+ attributes.set("role", "group");
|
|
|
+ break;
|
|
|
+ case "FIGURE":
|
|
|
+ attributes.set("role", "figure");
|
|
|
+ break;
|
|
|
+ case "FOOTER":
|
|
|
+ if (isStandaloneFooter(element)) {
|
|
|
+ attributes.set("role", "contentinfo");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "FORM":
|
|
|
+ attributes.set("role", "form");
|
|
|
+ break;
|
|
|
+ case "H1":
|
|
|
+ case "H2":
|
|
|
+ case "H3":
|
|
|
+ case "H4":
|
|
|
+ case "H5":
|
|
|
+ case "H6":
|
|
|
+ attributes.set("role", "heading");
|
|
|
+ attributes.set("aria-level", element.tagName.slice(1));
|
|
|
+ break;
|
|
|
+ case "HEADER":
|
|
|
+ if (isStandaloneFooter(element)) {
|
|
|
+ attributes.set("role", "banner");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "HR":
|
|
|
+ attributes.set("role", "separator");
|
|
|
+ break;
|
|
|
+ case "IMG": {
|
|
|
+ const alt = element.getAttribute("alt");
|
|
|
+ if (alt === null || alt !== "") {
|
|
|
+ attributes.set("role", "img");
|
|
|
+ if (alt) {
|
|
|
+ attributes.set("aria-label", alt);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "INPUT":
|
|
|
+ switch (element.type) {
|
|
|
+ case "button":
|
|
|
+ case "image":
|
|
|
+ case "reset":
|
|
|
+ case "submit":
|
|
|
+ attributes.set("role", "button");
|
|
|
+ break;
|
|
|
+ case "number":
|
|
|
+ attributes.set("role", "spinbutton");
|
|
|
+ break;
|
|
|
+ case "range":
|
|
|
+ attributes.set("role", "slider");
|
|
|
+ break;
|
|
|
+ case "checkbox":
|
|
|
+ attributes.set("role", "checkbox");
|
|
|
+ break;
|
|
|
+ case "radio":
|
|
|
+ attributes.set("role", "radio");
|
|
|
+ break;
|
|
|
+ case "email":
|
|
|
+ case "tel":
|
|
|
+ if (!element.hasAttribute("list")) {
|
|
|
+ attributes.set("role", "textbox");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "LI":
|
|
|
+ if (((_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) === "OL" || ((_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.tagName) === "UL" || ((_c = element.parentElement) === null || _c === void 0 ? void 0 : _c.tagName) === "MENU") {
|
|
|
+ attributes.set("role", "listitem");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "LINK":
|
|
|
+ if (element.href) {
|
|
|
+ attributes.set("role", "link");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "MAIN":
|
|
|
+ attributes.set("role", "main");
|
|
|
+ break;
|
|
|
+ case "MATH":
|
|
|
+ attributes.set("role", "math");
|
|
|
+ break;
|
|
|
+ case "OL":
|
|
|
+ case "UL":
|
|
|
+ case "MENU":
|
|
|
+ attributes.set("role", "list");
|
|
|
+ break;
|
|
|
+ case "NAV":
|
|
|
+ attributes.set("role", "navigation");
|
|
|
+ break;
|
|
|
+ case "OPTION":
|
|
|
+ attributes.set("role", "option");
|
|
|
+ break;
|
|
|
+ case "PROGRESS":
|
|
|
+ attributes.set("role", "progressbar");
|
|
|
+ break;
|
|
|
+ case "SECTION":
|
|
|
+ attributes.set("role", "region");
|
|
|
+ break;
|
|
|
+ case "SELECT":
|
|
|
+ attributes.set("role", !element.hasAttribute("multiple") && element.size <= 1 ? "combobox" : "listbox");
|
|
|
+ break;
|
|
|
+ case "TABLE":
|
|
|
+ attributes.set("role", "table");
|
|
|
+ break;
|
|
|
+ case "THEAD":
|
|
|
+ case "TBODY":
|
|
|
+ case "TFOOT":
|
|
|
+ attributes.set("role", "rowgroup");
|
|
|
+ break;
|
|
|
+ case "TEXTAREA":
|
|
|
+ attributes.set("role", "textbox");
|
|
|
+ break;
|
|
|
+ case "TD":
|
|
|
+ attributes.set("role", "cell");
|
|
|
+ break;
|
|
|
+ case "TH":
|
|
|
+ attributes.set("role", element.closest("thead") ? "columnheader" : "rowheader");
|
|
|
+ break;
|
|
|
+ case "TR":
|
|
|
+ attributes.set("role", "tablerow");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (element.hasAttribute("disabled")) {
|
|
|
+ attributes.set("aria-disabled", "true");
|
|
|
+ }
|
|
|
+ if (element.hasAttribute("placeholder")) {
|
|
|
+ attributes.set("aria-placeholder", element.getAttribute("placeholder") || "");
|
|
|
+ }
|
|
|
+ const tabIndex = element.getAttribute("tabindex");
|
|
|
+ if (tabIndex) {
|
|
|
+ attributes.set("tabindex", tabIndex);
|
|
|
+ }
|
|
|
+ if (isHTMLElement(element) && hasLabels(element) && element.labels) {
|
|
|
+ attributes.set("aria-labelledby", [...element.labels].map((label) => {
|
|
|
+ let labelId = label.id || labels.get(label);
|
|
|
+ if (!labelId) {
|
|
|
+ labelId = getUniqueId("label");
|
|
|
+ labels.set(label, labelId);
|
|
|
+ }
|
|
|
+ return labelId;
|
|
|
+ }).join(" "));
|
|
|
+ }
|
|
|
+ for (const attribute of element.attributes) {
|
|
|
+ if (attribute.name.startsWith("aria-")) {
|
|
|
+ attributes.set(attribute.name, attribute.value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const customRole = element.getAttribute("role");
|
|
|
+ if (customRole) {
|
|
|
+ attributes.set("role", customRole);
|
|
|
+ }
|
|
|
+ return attributes;
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/gradient-parser/build/esm.mjs
|
|
|
+ var GradientParser = GradientParser || {};
|
|
|
+ GradientParser.stringify = /* @__PURE__ */ (function() {
|
|
|
+ var visitor = {
|
|
|
+ "visit_linear-gradient": function(node) {
|
|
|
+ return visitor.visit_gradient(node);
|
|
|
+ },
|
|
|
+ "visit_repeating-linear-gradient": function(node) {
|
|
|
+ return visitor.visit_gradient(node);
|
|
|
+ },
|
|
|
+ "visit_radial-gradient": function(node) {
|
|
|
+ return visitor.visit_gradient(node);
|
|
|
+ },
|
|
|
+ "visit_repeating-radial-gradient": function(node) {
|
|
|
+ return visitor.visit_gradient(node);
|
|
|
+ },
|
|
|
+ "visit_conic-gradient": function(node) {
|
|
|
+ return visitor.visit_gradient(node);
|
|
|
+ },
|
|
|
+ "visit_repeating-conic-gradient": function(node) {
|
|
|
+ return visitor.visit_gradient(node);
|
|
|
+ },
|
|
|
+ "visit_gradient": function(node) {
|
|
|
+ var orientation = visitor.visit(node.orientation);
|
|
|
+ if (orientation) {
|
|
|
+ orientation += ", ";
|
|
|
+ }
|
|
|
+ return node.type + "(" + orientation + visitor.visit(node.colorStops) + ")";
|
|
|
+ },
|
|
|
+ "visit_shape": function(node) {
|
|
|
+ var result = node.value, at = visitor.visit(node.at), style = visitor.visit(node.style);
|
|
|
+ if (style) {
|
|
|
+ result += " " + style;
|
|
|
+ }
|
|
|
+ if (at) {
|
|
|
+ result += " at " + at;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ "visit_default-radial": function(node) {
|
|
|
+ var result = "", at = visitor.visit(node.at);
|
|
|
+ if (at) {
|
|
|
+ if (node.hasAtKeyword) {
|
|
|
+ result += "at " + at;
|
|
|
+ } else {
|
|
|
+ result += at;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ "visit_extent-keyword": function(node) {
|
|
|
+ var result = node.value, at = visitor.visit(node.at);
|
|
|
+ if (at) {
|
|
|
+ result += " at " + at;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ "visit_position-keyword": function(node) {
|
|
|
+ return node.value;
|
|
|
+ },
|
|
|
+ "visit_position": function(node) {
|
|
|
+ return visitor.visit(node.value.x) + " " + visitor.visit(node.value.y);
|
|
|
+ },
|
|
|
+ "visit_%": function(node) {
|
|
|
+ return node.value + "%";
|
|
|
+ },
|
|
|
+ "visit_em": function(node) {
|
|
|
+ return node.value + "em";
|
|
|
+ },
|
|
|
+ "visit_px": function(node) {
|
|
|
+ return node.value + "px";
|
|
|
+ },
|
|
|
+ "visit_rem": function(node) {
|
|
|
+ return node.value + "rem";
|
|
|
+ },
|
|
|
+ "visit_vw": function(node) {
|
|
|
+ return node.value + "vw";
|
|
|
+ },
|
|
|
+ "visit_vh": function(node) {
|
|
|
+ return node.value + "vh";
|
|
|
+ },
|
|
|
+ "visit_vmin": function(node) {
|
|
|
+ return node.value + "vmin";
|
|
|
+ },
|
|
|
+ "visit_vmax": function(node) {
|
|
|
+ return node.value + "vmax";
|
|
|
+ },
|
|
|
+ "visit_ch": function(node) {
|
|
|
+ return node.value + "ch";
|
|
|
+ },
|
|
|
+ "visit_ex": function(node) {
|
|
|
+ return node.value + "ex";
|
|
|
+ },
|
|
|
+ "visit_calc": function(node) {
|
|
|
+ return "calc(" + node.value + ")";
|
|
|
+ },
|
|
|
+ "visit_literal": function(node) {
|
|
|
+ return visitor.visit_color(node.value, node);
|
|
|
+ },
|
|
|
+ "visit_hex": function(node) {
|
|
|
+ return visitor.visit_color("#" + node.value, node);
|
|
|
+ },
|
|
|
+ "visit_rgb": function(node) {
|
|
|
+ return visitor.visit_color("rgb(" + node.value.join(", ") + ")", node);
|
|
|
+ },
|
|
|
+ "visit_rgba": function(node) {
|
|
|
+ return visitor.visit_color("rgba(" + node.value.join(", ") + ")", node);
|
|
|
+ },
|
|
|
+ "visit_hsl": function(node) {
|
|
|
+ return visitor.visit_color("hsl(" + node.value[0] + ", " + node.value[1] + "%, " + node.value[2] + "%)", node);
|
|
|
+ },
|
|
|
+ "visit_hsla": function(node) {
|
|
|
+ return visitor.visit_color("hsla(" + node.value[0] + ", " + node.value[1] + "%, " + node.value[2] + "%, " + node.value[3] + ")", node);
|
|
|
+ },
|
|
|
+ "visit_var": function(node) {
|
|
|
+ return visitor.visit_color("var(" + node.value + ")", node);
|
|
|
+ },
|
|
|
+ "visit_color": function(resultColor, node) {
|
|
|
+ var result = resultColor, length = visitor.visit(node.length);
|
|
|
+ if (length) {
|
|
|
+ result += " " + length;
|
|
|
+ }
|
|
|
+ var length2 = visitor.visit(node.length2);
|
|
|
+ if (length2) {
|
|
|
+ result += " " + length2;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ "visit_angular": function(node) {
|
|
|
+ return node.value + (node.unit || "deg");
|
|
|
+ },
|
|
|
+ "visit_directional": function(node) {
|
|
|
+ return "to " + node.value;
|
|
|
+ },
|
|
|
+ "visit_conic": function(node) {
|
|
|
+ var result = "";
|
|
|
+ if (node.angle) {
|
|
|
+ result += "from " + visitor.visit(node.angle);
|
|
|
+ }
|
|
|
+ if (node.at) {
|
|
|
+ if (result) {
|
|
|
+ result += " ";
|
|
|
+ }
|
|
|
+ result += "at " + visitor.visit(node.at);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ "visit_array": function(elements) {
|
|
|
+ var result = "", size = elements.length;
|
|
|
+ elements.forEach(function(element, i) {
|
|
|
+ result += visitor.visit(element);
|
|
|
+ if (i < size - 1) {
|
|
|
+ result += ", ";
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ "visit_object": function(obj) {
|
|
|
+ if (obj.width && obj.height) {
|
|
|
+ return visitor.visit(obj.width) + " " + visitor.visit(obj.height);
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ },
|
|
|
+ "visit": function(element) {
|
|
|
+ if (!element) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ var result = "";
|
|
|
+ if (element instanceof Array) {
|
|
|
+ return visitor.visit_array(element);
|
|
|
+ } else if (typeof element === "object" && !element.type) {
|
|
|
+ return visitor.visit_object(element);
|
|
|
+ } else if (element.type) {
|
|
|
+ var nodeVisitor = visitor["visit_" + element.type];
|
|
|
+ if (nodeVisitor) {
|
|
|
+ return nodeVisitor(element);
|
|
|
+ } else {
|
|
|
+ throw Error("Missing visitor visit_" + element.type);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw Error("Invalid node.");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ return function(root2) {
|
|
|
+ return visitor.visit(root2);
|
|
|
+ };
|
|
|
+ })();
|
|
|
+ var GradientParser = GradientParser || {};
|
|
|
+ GradientParser.parse = /* @__PURE__ */ (function() {
|
|
|
+ var tokens = {
|
|
|
+ linearGradient: /^(\-(webkit|o|ms|moz)\-)?(linear\-gradient)/i,
|
|
|
+ repeatingLinearGradient: /^(\-(webkit|o|ms|moz)\-)?(repeating\-linear\-gradient)/i,
|
|
|
+ radialGradient: /^(\-(webkit|o|ms|moz)\-)?(radial\-gradient)/i,
|
|
|
+ repeatingRadialGradient: /^(\-(webkit|o|ms|moz)\-)?(repeating\-radial\-gradient)/i,
|
|
|
+ conicGradient: /^(\-(webkit|o|ms|moz)\-)?(conic\-gradient)/i,
|
|
|
+ repeatingConicGradient: /^(\-(webkit|o|ms|moz)\-)?(repeating\-conic\-gradient)/i,
|
|
|
+ sideOrCorner: /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,
|
|
|
+ extentKeywords: /^(closest\-side|closest\-corner|farthest\-side|farthest\-corner|contain|cover)/,
|
|
|
+ positionKeywords: /^(left|center|right|top|bottom)/i,
|
|
|
+ pixelValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))px/,
|
|
|
+ percentageValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))\%/,
|
|
|
+ emValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))em/,
|
|
|
+ remValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))rem/,
|
|
|
+ vwValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))vw/,
|
|
|
+ vhValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))vh/,
|
|
|
+ vminValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))vmin/,
|
|
|
+ vmaxValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))vmax/,
|
|
|
+ chValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))ch/,
|
|
|
+ exValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))ex/,
|
|
|
+ angleValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))deg/,
|
|
|
+ radianValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))rad/,
|
|
|
+ gradianValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))grad/,
|
|
|
+ turnValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))turn/,
|
|
|
+ startCall: /^\(/,
|
|
|
+ endCall: /^\)/,
|
|
|
+ comma: /^,/,
|
|
|
+ slash: /^\//,
|
|
|
+ hexColor: /^\#([0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})(?![0-9a-fA-F])/,
|
|
|
+ literalColor: /^([a-zA-Z]+)/,
|
|
|
+ rgbColor: /^rgb/i,
|
|
|
+ rgbaColor: /^rgba/i,
|
|
|
+ varColor: /^var/i,
|
|
|
+ calcValue: /^calc/i,
|
|
|
+ variableName: /^(--[a-zA-Z0-9-,\s\#]+)/,
|
|
|
+ number: /^(([0-9]*\.[0-9]+)|([0-9]+\.?))/,
|
|
|
+ hslColor: /^hsl/i,
|
|
|
+ hslaColor: /^hsla/i
|
|
|
+ };
|
|
|
+ var input = "";
|
|
|
+ function error(msg) {
|
|
|
+ var err = new Error(input + ": " + msg);
|
|
|
+ err.source = input;
|
|
|
+ throw err;
|
|
|
+ }
|
|
|
+ function getAST() {
|
|
|
+ var ast = matchListDefinitions();
|
|
|
+ if (input.length > 0) {
|
|
|
+ error("Invalid input not EOF");
|
|
|
+ }
|
|
|
+ return ast;
|
|
|
+ }
|
|
|
+ function matchListDefinitions() {
|
|
|
+ return matchListing(matchDefinition);
|
|
|
+ }
|
|
|
+ function matchDefinition() {
|
|
|
+ return matchGradient(
|
|
|
+ "linear-gradient",
|
|
|
+ tokens.linearGradient,
|
|
|
+ matchLinearOrientation
|
|
|
+ ) || matchGradient(
|
|
|
+ "repeating-linear-gradient",
|
|
|
+ tokens.repeatingLinearGradient,
|
|
|
+ matchLinearOrientation
|
|
|
+ ) || matchGradient(
|
|
|
+ "radial-gradient",
|
|
|
+ tokens.radialGradient,
|
|
|
+ matchListRadialOrientations
|
|
|
+ ) || matchGradient(
|
|
|
+ "repeating-radial-gradient",
|
|
|
+ tokens.repeatingRadialGradient,
|
|
|
+ matchListRadialOrientations
|
|
|
+ ) || matchGradient(
|
|
|
+ "conic-gradient",
|
|
|
+ tokens.conicGradient,
|
|
|
+ matchConicOrientation
|
|
|
+ ) || matchGradient(
|
|
|
+ "repeating-conic-gradient",
|
|
|
+ tokens.repeatingConicGradient,
|
|
|
+ matchConicOrientation
|
|
|
+ );
|
|
|
+ }
|
|
|
+ function matchGradient(gradientType, pattern, orientationMatcher) {
|
|
|
+ return matchCall(pattern, function(captures) {
|
|
|
+ var orientation = orientationMatcher();
|
|
|
+ if (orientation) {
|
|
|
+ if (!scan(tokens.comma)) {
|
|
|
+ error("Missing comma before color stops");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ type: gradientType,
|
|
|
+ orientation,
|
|
|
+ colorStops: matchListing(matchColorStop)
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchCall(pattern, callback) {
|
|
|
+ var captures = scan(pattern);
|
|
|
+ if (captures) {
|
|
|
+ if (!scan(tokens.startCall)) {
|
|
|
+ error("Missing (");
|
|
|
+ }
|
|
|
+ var result = callback(captures);
|
|
|
+ if (!scan(tokens.endCall)) {
|
|
|
+ error("Missing )");
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchLinearOrientation() {
|
|
|
+ var sideOrCorner = matchSideOrCorner();
|
|
|
+ if (sideOrCorner) {
|
|
|
+ return sideOrCorner;
|
|
|
+ }
|
|
|
+ var legacyDirection = match("position-keyword", tokens.positionKeywords, 1);
|
|
|
+ if (legacyDirection) {
|
|
|
+ return {
|
|
|
+ type: "directional",
|
|
|
+ value: legacyDirection.value
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return matchAngle();
|
|
|
+ }
|
|
|
+ function matchConicOrientation() {
|
|
|
+ var angle = matchFrom();
|
|
|
+ var atPosition = matchAtPosition();
|
|
|
+ if (angle || atPosition) {
|
|
|
+ return {
|
|
|
+ type: "conic",
|
|
|
+ angle: angle || void 0,
|
|
|
+ at: atPosition || void 0
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchFrom() {
|
|
|
+ if (match("from", /^from/, 0)) {
|
|
|
+ var angle = matchAngle();
|
|
|
+ if (!angle) {
|
|
|
+ error('Missing angle after "from" in conic-gradient');
|
|
|
+ }
|
|
|
+ return angle;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchSideOrCorner() {
|
|
|
+ return match("directional", tokens.sideOrCorner, 1);
|
|
|
+ }
|
|
|
+ function matchAngle() {
|
|
|
+ return matchAngularWithUnit("deg", tokens.angleValue) || matchAngularWithUnit("rad", tokens.radianValue) || matchAngularWithUnit("grad", tokens.gradianValue) || matchAngularWithUnit("turn", tokens.turnValue);
|
|
|
+ }
|
|
|
+ function matchAngularWithUnit(unit, pattern) {
|
|
|
+ var captures = scan(pattern);
|
|
|
+ if (captures) {
|
|
|
+ return {
|
|
|
+ type: "angular",
|
|
|
+ value: captures[1],
|
|
|
+ unit
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchListRadialOrientations() {
|
|
|
+ var radialOrientations, radialOrientation = matchRadialOrientation(), lookaheadCache;
|
|
|
+ if (radialOrientation) {
|
|
|
+ radialOrientations = [];
|
|
|
+ radialOrientations.push(radialOrientation);
|
|
|
+ lookaheadCache = input;
|
|
|
+ if (scan(tokens.comma)) {
|
|
|
+ radialOrientation = matchRadialOrientation();
|
|
|
+ if (radialOrientation) {
|
|
|
+ radialOrientations.push(radialOrientation);
|
|
|
+ } else {
|
|
|
+ input = lookaheadCache;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return radialOrientations;
|
|
|
+ }
|
|
|
+ function matchRadialOrientation() {
|
|
|
+ var radialType = matchCircle() || matchEllipse();
|
|
|
+ if (radialType) {
|
|
|
+ radialType.at = matchAtPosition();
|
|
|
+ } else {
|
|
|
+ var extent = matchExtentKeyword();
|
|
|
+ if (extent) {
|
|
|
+ radialType = extent;
|
|
|
+ var positionAt = matchAtPosition();
|
|
|
+ if (positionAt) {
|
|
|
+ radialType.at = positionAt;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ var atPosition = matchAtPosition();
|
|
|
+ if (atPosition) {
|
|
|
+ radialType = {
|
|
|
+ type: "default-radial",
|
|
|
+ at: atPosition,
|
|
|
+ hasAtKeyword: true
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ var defaultPosition = matchPositioning();
|
|
|
+ if (defaultPosition) {
|
|
|
+ radialType = {
|
|
|
+ type: "default-radial",
|
|
|
+ at: defaultPosition
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return radialType;
|
|
|
+ }
|
|
|
+ function matchCircle() {
|
|
|
+ var circle = match("shape", /^(circle)/i, 0);
|
|
|
+ if (circle) {
|
|
|
+ circle.style = matchLength() || matchExtentKeyword();
|
|
|
+ }
|
|
|
+ return circle;
|
|
|
+ }
|
|
|
+ function matchEllipse() {
|
|
|
+ var ellipse = match("shape", /^(ellipse)/i, 0);
|
|
|
+ if (ellipse) {
|
|
|
+ ellipse.style = matchPositioning() || matchDistance() || matchExtentKeyword();
|
|
|
+ }
|
|
|
+ return ellipse;
|
|
|
+ }
|
|
|
+ function matchExtentKeyword() {
|
|
|
+ return match("extent-keyword", tokens.extentKeywords, 1);
|
|
|
+ }
|
|
|
+ function matchAtPosition() {
|
|
|
+ if (match("position", /^at/, 0)) {
|
|
|
+ var positioning = matchPositioning();
|
|
|
+ if (!positioning) {
|
|
|
+ error("Missing positioning value");
|
|
|
+ }
|
|
|
+ return positioning;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchPositioning() {
|
|
|
+ var location = matchCoordinates();
|
|
|
+ if (location.x || location.y) {
|
|
|
+ return {
|
|
|
+ type: "position",
|
|
|
+ value: location
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchCoordinates() {
|
|
|
+ return {
|
|
|
+ x: matchDistance(),
|
|
|
+ y: matchDistance()
|
|
|
+ };
|
|
|
+ }
|
|
|
+ function matchListing(matcher) {
|
|
|
+ var captures = matcher(), result = [];
|
|
|
+ if (captures) {
|
|
|
+ result.push(captures);
|
|
|
+ while (scan(tokens.comma)) {
|
|
|
+ captures = matcher();
|
|
|
+ if (captures) {
|
|
|
+ result.push(captures);
|
|
|
+ } else {
|
|
|
+ error("One extra comma");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ function matchColorStop() {
|
|
|
+ var color = matchColor();
|
|
|
+ if (!color) {
|
|
|
+ error("Expected color definition");
|
|
|
+ }
|
|
|
+ color.length = matchDistance();
|
|
|
+ if (color.length) {
|
|
|
+ color.length2 = matchDistance();
|
|
|
+ }
|
|
|
+ return color;
|
|
|
+ }
|
|
|
+ function matchColor() {
|
|
|
+ return matchHexColor() || matchHSLAColor() || matchHSLColor() || matchRGBAColor() || matchRGBColor() || matchVarColor() || matchLiteralColor();
|
|
|
+ }
|
|
|
+ function matchLiteralColor() {
|
|
|
+ return match("literal", tokens.literalColor, 0);
|
|
|
+ }
|
|
|
+ function matchHexColor() {
|
|
|
+ return match("hex", tokens.hexColor, 1);
|
|
|
+ }
|
|
|
+ function matchRGBColor() {
|
|
|
+ return matchCall(tokens.rgbColor, function() {
|
|
|
+ return matchRGBValues("rgb");
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchRGBAColor() {
|
|
|
+ return matchCall(tokens.rgbaColor, function() {
|
|
|
+ return matchRGBValues("rgba");
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchRGBValues(baseType) {
|
|
|
+ var r = matchNumber();
|
|
|
+ if (scan(tokens.comma)) {
|
|
|
+ var g = matchNumber();
|
|
|
+ scan(tokens.comma);
|
|
|
+ var b = matchNumber();
|
|
|
+ var values = [r, g, b];
|
|
|
+ if (scan(tokens.comma)) {
|
|
|
+ values.push(matchNumber());
|
|
|
+ return { type: "rgba", value: values };
|
|
|
+ }
|
|
|
+ return { type: baseType, value: values };
|
|
|
+ } else {
|
|
|
+ var g = matchNumber();
|
|
|
+ var b = matchNumber();
|
|
|
+ var values = [r, g, b];
|
|
|
+ if (scan(tokens.slash)) {
|
|
|
+ values.push(matchNumber());
|
|
|
+ return { type: "rgba", value: values };
|
|
|
+ }
|
|
|
+ return { type: baseType, value: values };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchVarColor() {
|
|
|
+ return matchCall(tokens.varColor, function() {
|
|
|
+ return {
|
|
|
+ type: "var",
|
|
|
+ value: matchVariableName()
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchHSLColor() {
|
|
|
+ return matchCall(tokens.hslColor, function() {
|
|
|
+ return matchHSLValues("hsl");
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchHSLAColor() {
|
|
|
+ return matchCall(tokens.hslaColor, function() {
|
|
|
+ return matchHSLValues("hsla");
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchHSLValues(baseType) {
|
|
|
+ var lookahead = scan(tokens.percentageValue);
|
|
|
+ if (lookahead) {
|
|
|
+ error("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");
|
|
|
+ }
|
|
|
+ var hue = matchNumber();
|
|
|
+ if (scan(tokens.comma)) {
|
|
|
+ var captures = scan(tokens.percentageValue);
|
|
|
+ var sat = captures ? captures[1] : null;
|
|
|
+ scan(tokens.comma);
|
|
|
+ captures = scan(tokens.percentageValue);
|
|
|
+ var light = captures ? captures[1] : null;
|
|
|
+ if (!sat || !light) {
|
|
|
+ error("Expected percentage value for saturation and lightness in HSL");
|
|
|
+ }
|
|
|
+ if (scan(tokens.comma)) {
|
|
|
+ var alpha = matchNumber();
|
|
|
+ return { type: "hsla", value: [hue, sat, light, alpha] };
|
|
|
+ }
|
|
|
+ return { type: baseType, value: [hue, sat, light] };
|
|
|
+ } else {
|
|
|
+ var captures = scan(tokens.percentageValue);
|
|
|
+ var sat = captures ? captures[1] : null;
|
|
|
+ captures = scan(tokens.percentageValue);
|
|
|
+ var light = captures ? captures[1] : null;
|
|
|
+ if (!sat || !light) {
|
|
|
+ error("Expected percentage value for saturation and lightness in HSL");
|
|
|
+ }
|
|
|
+ if (scan(tokens.slash)) {
|
|
|
+ var alpha = matchNumber();
|
|
|
+ return { type: "hsla", value: [hue, sat, light, alpha] };
|
|
|
+ }
|
|
|
+ return { type: baseType, value: [hue, sat, light] };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function matchPercentage() {
|
|
|
+ var captures = scan(tokens.percentageValue);
|
|
|
+ return captures ? captures[1] : null;
|
|
|
+ }
|
|
|
+ function matchVariableName() {
|
|
|
+ return scan(tokens.variableName)[1];
|
|
|
+ }
|
|
|
+ function matchNumber() {
|
|
|
+ return scan(tokens.number)[1];
|
|
|
+ }
|
|
|
+ function matchDistance() {
|
|
|
+ return match("%", tokens.percentageValue, 1) || matchPositionKeyword() || matchCalc() || matchLength();
|
|
|
+ }
|
|
|
+ function matchPositionKeyword() {
|
|
|
+ return match("position-keyword", tokens.positionKeywords, 1);
|
|
|
+ }
|
|
|
+ function matchCalc() {
|
|
|
+ return matchCall(tokens.calcValue, function() {
|
|
|
+ var openParenCount = 1;
|
|
|
+ var i = 0;
|
|
|
+ while (openParenCount > 0 && i < input.length) {
|
|
|
+ var char = input.charAt(i);
|
|
|
+ if (char === "(") {
|
|
|
+ openParenCount++;
|
|
|
+ } else if (char === ")") {
|
|
|
+ openParenCount--;
|
|
|
+ }
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ if (openParenCount > 0) {
|
|
|
+ error("Missing closing parenthesis in calc() expression");
|
|
|
+ }
|
|
|
+ var calcContent = input.substring(0, i - 1);
|
|
|
+ consume(i - 1);
|
|
|
+ return {
|
|
|
+ type: "calc",
|
|
|
+ value: calcContent
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function matchLength() {
|
|
|
+ return match("px", tokens.pixelValue, 1) || match("em", tokens.emValue, 1) || match("rem", tokens.remValue, 1) || match("vw", tokens.vwValue, 1) || match("vh", tokens.vhValue, 1) || match("vmin", tokens.vminValue, 1) || match("vmax", tokens.vmaxValue, 1) || match("ch", tokens.chValue, 1) || match("ex", tokens.exValue, 1);
|
|
|
+ }
|
|
|
+ function match(type, pattern, captureIndex) {
|
|
|
+ var captures = scan(pattern);
|
|
|
+ if (captures) {
|
|
|
+ return {
|
|
|
+ type,
|
|
|
+ value: captures[captureIndex]
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function scan(regexp) {
|
|
|
+ var captures, blankCaptures;
|
|
|
+ blankCaptures = /^[\n\r\t\s]+/.exec(input);
|
|
|
+ if (blankCaptures) {
|
|
|
+ consume(blankCaptures[0].length);
|
|
|
+ }
|
|
|
+ captures = regexp.exec(input);
|
|
|
+ if (captures) {
|
|
|
+ consume(captures[0].length);
|
|
|
+ }
|
|
|
+ return captures;
|
|
|
+ }
|
|
|
+ function consume(size) {
|
|
|
+ input = input.substring(size);
|
|
|
+ }
|
|
|
+ return function(code) {
|
|
|
+ input = code.toString().trim();
|
|
|
+ if (input.endsWith(";")) {
|
|
|
+ input = input.slice(0, -1);
|
|
|
+ }
|
|
|
+ return getAST();
|
|
|
+ };
|
|
|
+ })();
|
|
|
+ var parse2 = GradientParser.parse;
|
|
|
+ var stringify2 = GradientParser.stringify;
|
|
|
+ var esm_default = { parse: GradientParser.parse, stringify: GradientParser.stringify };
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/gradients.js
|
|
|
+ var positionsForOrientation = (orientation) => {
|
|
|
+ const positions = {
|
|
|
+ x1: "0%",
|
|
|
+ x2: "0%",
|
|
|
+ y1: "0%",
|
|
|
+ y2: "0%"
|
|
|
+ };
|
|
|
+ if ((orientation === null || orientation === void 0 ? void 0 : orientation.type) === "angular") {
|
|
|
+ const anglePI = orientation.value * (Math.PI / 180);
|
|
|
+ positions.x1 = `${Math.round(50 + Math.sin(anglePI + Math.PI) * 50)}%`;
|
|
|
+ positions.y1 = `${Math.round(50 + Math.cos(anglePI) * 50)}%`;
|
|
|
+ positions.x2 = `${Math.round(50 + Math.sin(anglePI) * 50)}%`;
|
|
|
+ positions.y2 = `${Math.round(50 + Math.cos(anglePI + Math.PI) * 50)}%`;
|
|
|
+ } else if ((orientation === null || orientation === void 0 ? void 0 : orientation.type) === "directional") {
|
|
|
+ switch (orientation.value) {
|
|
|
+ case "left":
|
|
|
+ positions.x1 = "100%";
|
|
|
+ break;
|
|
|
+ case "top":
|
|
|
+ positions.y1 = "100%";
|
|
|
+ break;
|
|
|
+ case "right":
|
|
|
+ positions.x2 = "100%";
|
|
|
+ break;
|
|
|
+ case "bottom":
|
|
|
+ positions.y2 = "100%";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return positions;
|
|
|
+ };
|
|
|
+ function convertLinearGradient(css, { svgDocument }) {
|
|
|
+ const { orientation, colorStops } = parse2(css)[0];
|
|
|
+ const { x1, x2, y1, y2 } = positionsForOrientation(orientation);
|
|
|
+ const getColorStops = (colorStop, index) => {
|
|
|
+ const offset = `${index / (colorStops.length - 1) * 100}%`;
|
|
|
+ let stopColor = "rgb(0,0,0)";
|
|
|
+ let stopOpacity = 1;
|
|
|
+ switch (colorStop.type) {
|
|
|
+ case "rgb": {
|
|
|
+ const [red, green, blue] = colorStop.value;
|
|
|
+ stopColor = `rgb(${red},${green},${blue})`;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "rgba": {
|
|
|
+ const [red, green, blue, alpha] = colorStop.value;
|
|
|
+ stopColor = `rgb(${red},${green},${blue})`;
|
|
|
+ stopOpacity = alpha;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "hex": {
|
|
|
+ stopColor = `#${colorStop.value}`;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "literal": {
|
|
|
+ stopColor = colorStop.value;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const stop = svgDocument.createElementNS(svgNamespace, "stop");
|
|
|
+ stop.setAttribute("offset", offset);
|
|
|
+ stop.setAttribute("stop-color", stopColor);
|
|
|
+ stop.setAttribute("stop-opacity", stopOpacity.toString());
|
|
|
+ return stop;
|
|
|
+ };
|
|
|
+ const linearGradient = svgDocument.createElementNS(svgNamespace, "linearGradient");
|
|
|
+ linearGradient.setAttribute("x1", x1);
|
|
|
+ linearGradient.setAttribute("y1", y1);
|
|
|
+ linearGradient.setAttribute("x2", x2);
|
|
|
+ linearGradient.setAttribute("y2", y2);
|
|
|
+ linearGradient.append(...colorStops.map(getColorStops));
|
|
|
+ return linearGradient;
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/svg.js
|
|
|
+ var import_postcss_value_parser = __toESM(require_lib(), 1);
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/util.js
|
|
|
+ var createIdGenerator = () => {
|
|
|
+ const nextCounts = /* @__PURE__ */ new Map();
|
|
|
+ return (prefix) => {
|
|
|
+ var _a;
|
|
|
+ const count = (_a = nextCounts.get(prefix)) !== null && _a !== void 0 ? _a : 1;
|
|
|
+ nextCounts.set(prefix, count + 1);
|
|
|
+ return `${prefix}${count}`;
|
|
|
+ };
|
|
|
+ };
|
|
|
+ var doRectanglesIntersect = (a, b) => !(a.bottom < b.top || // A is above B
|
|
|
+ a.top > b.bottom || // A is below B
|
|
|
+ a.right < b.left || // A is left of B
|
|
|
+ // A is right of B
|
|
|
+ a.left > b.right);
|
|
|
+ function diagonale(box) {
|
|
|
+ return Math.sqrt(box.width ** 2 + box.height ** 2);
|
|
|
+ }
|
|
|
+ function withTimeout(timeout, message, func) {
|
|
|
+ return Promise.race([
|
|
|
+ func(),
|
|
|
+ new Promise((resolve, reject) => setTimeout(() => reject(new Error(message)), timeout))
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ var isTaggedUnionMember = (key, value) => (object) => object[key] === value;
|
|
|
+ function assert(condition, message) {
|
|
|
+ if (!condition) {
|
|
|
+ throw new Error(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/text.js
|
|
|
+ function handleTextNode(textNode, context) {
|
|
|
+ if (!textNode.ownerDocument.defaultView) {
|
|
|
+ throw new Error("Element's ownerDocument has no defaultView");
|
|
|
+ }
|
|
|
+ const window2 = textNode.ownerDocument.defaultView;
|
|
|
+ const parentElement = textNode.parentElement;
|
|
|
+ const styles = window2.getComputedStyle(parentElement);
|
|
|
+ if (!isVisible(styles)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const selection = window2.getSelection();
|
|
|
+ assert(selection, "Could not obtain selection from window. Selection is needed for detecting whitespace collapsing in text.");
|
|
|
+ const svgTextElement = context.svgDocument.createElementNS(svgNamespace, "text");
|
|
|
+ copyTextStyles(styles, svgTextElement);
|
|
|
+ const tabSize = parseInt(styles.tabSize, 10);
|
|
|
+ svgTextElement.setAttribute("dominant-baseline", "text-after-edge");
|
|
|
+ const lineRange = textNode.ownerDocument.createRange();
|
|
|
+ lineRange.setStart(textNode, 0);
|
|
|
+ lineRange.setEnd(textNode, 0);
|
|
|
+ while (true) {
|
|
|
+ const addTextSpanForLineRange = () => {
|
|
|
+ if (lineRange.collapsed) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const lineRectangle = lineRange.getClientRects()[0];
|
|
|
+ if (!doRectanglesIntersect(lineRectangle, context.options.captureArea)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const textSpan = context.svgDocument.createElementNS(svgNamespace, "tspan");
|
|
|
+ textSpan.setAttribute("xml:space", "preserve");
|
|
|
+ const previousUserSelect = parentElement.style.userSelect;
|
|
|
+ parentElement.style.userSelect = "all";
|
|
|
+ try {
|
|
|
+ selection.removeAllRanges();
|
|
|
+ selection.addRange(lineRange);
|
|
|
+ textSpan.textContent = selection.toString().replace(/\t/g, " ".repeat(tabSize));
|
|
|
+ } finally {
|
|
|
+ parentElement.style.userSelect = previousUserSelect;
|
|
|
+ selection.removeAllRanges();
|
|
|
+ }
|
|
|
+ textSpan.setAttribute("x", lineRectangle.x.toString());
|
|
|
+ textSpan.setAttribute("y", lineRectangle.bottom.toString());
|
|
|
+ textSpan.setAttribute("textLength", lineRectangle.width.toString());
|
|
|
+ textSpan.setAttribute("lengthAdjust", "spacingAndGlyphs");
|
|
|
+ svgTextElement.append(textSpan);
|
|
|
+ };
|
|
|
+ try {
|
|
|
+ lineRange.setEnd(textNode, lineRange.endOffset + 1);
|
|
|
+ } catch (error) {
|
|
|
+ if (error.code === DOMException.INDEX_SIZE_ERR) {
|
|
|
+ addTextSpanForLineRange();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ const lineRectangles = lineRange.getClientRects();
|
|
|
+ if (!lineRectangles[0]) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (lineRectangles[1] && lineRectangles[0].top !== lineRectangles[1].top) {
|
|
|
+ lineRange.setEnd(textNode, lineRange.endOffset - 1);
|
|
|
+ addTextSpanForLineRange();
|
|
|
+ lineRange.setStart(textNode, lineRange.endOffset);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ context.currentSvgParent.append(svgTextElement);
|
|
|
+ }
|
|
|
+ var textAttributes = /* @__PURE__ */ new Set([
|
|
|
+ "color",
|
|
|
+ "dominant-baseline",
|
|
|
+ "font-family",
|
|
|
+ "font-size",
|
|
|
+ "font-size-adjust",
|
|
|
+ "font-stretch",
|
|
|
+ "font-style",
|
|
|
+ "font-variant",
|
|
|
+ "font-weight",
|
|
|
+ "direction",
|
|
|
+ "letter-spacing",
|
|
|
+ "text-decoration",
|
|
|
+ "text-anchor",
|
|
|
+ "text-decoration",
|
|
|
+ "text-rendering",
|
|
|
+ "unicode-bidi",
|
|
|
+ "word-spacing",
|
|
|
+ "writing-mode",
|
|
|
+ "user-select"
|
|
|
+ ]);
|
|
|
+ function copyTextStyles(styles, svgElement) {
|
|
|
+ for (const textProperty of textAttributes) {
|
|
|
+ const value = styles.getPropertyValue(textProperty);
|
|
|
+ if (value) {
|
|
|
+ svgElement.setAttribute(textProperty, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ svgElement.setAttribute("fill", styles.color);
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/svg.js
|
|
|
+ function handleSvgNode(node, context) {
|
|
|
+ if (isElement(node)) {
|
|
|
+ if (!isSVGElement(node)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ handleSvgElement(node, context);
|
|
|
+ } else if (isTextNode(node)) {
|
|
|
+ const clonedTextNode = node.cloneNode(true);
|
|
|
+ context.currentSvgParent.append(clonedTextNode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var ignoredElements = /* @__PURE__ */ new Set(["script", "style", "foreignElement"]);
|
|
|
+ var URL_ID_REFERENCE_REGEX = /\burl\(["']?#/;
|
|
|
+ function handleSvgElement(element, context) {
|
|
|
+ var _a, _b, _c, _d;
|
|
|
+ if (ignoredElements.has(element.tagName)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let elementToAppend;
|
|
|
+ if (isSVGSVGElement(element)) {
|
|
|
+ const contentContainer = context.svgDocument.createElementNS(svgNamespace, "g");
|
|
|
+ elementToAppend = contentContainer;
|
|
|
+ contentContainer.classList.add("svg-content", ...element.classList);
|
|
|
+ contentContainer.dataset.viewBox = (_a = element.getAttribute("viewBox")) !== null && _a !== void 0 ? _a : "";
|
|
|
+ contentContainer.dataset.width = (_b = element.getAttribute("width")) !== null && _b !== void 0 ? _b : "";
|
|
|
+ contentContainer.dataset.height = (_c = element.getAttribute("height")) !== null && _c !== void 0 ? _c : "";
|
|
|
+ for (const child of element.children) {
|
|
|
+ if (!isSVGGraphicsElement(child)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ let viewBoxTransformMatrix = (
|
|
|
+ // When this function is called on an inline <svg> element in the original DOM, we want
|
|
|
+ // getScreenCTM() to map it to the DOM coordinate system. When this function is called from
|
|
|
+ // inlineResources() the <svg> is already embedded into the output <svg>. In that case the output
|
|
|
+ // SVG already has a viewBox, and the coordinate system of the SVG is not equal to the coordinate
|
|
|
+ // system of the screen, therefor we need to use getCTM() to map it into the output SVG's
|
|
|
+ // coordinate system.
|
|
|
+ child.ownerDocument !== context.svgDocument && // When we inline an SVG, we put a transform on it for the getScreenCTM(). When that SVG also
|
|
|
+ // contains another SVG, the inner SVG should just get transformed relative to the outer SVG, not
|
|
|
+ // relative to the screen, because the transforms will stack in the output SVG.
|
|
|
+ !((_d = element.parentElement) === null || _d === void 0 ? void 0 : _d.closest("svg")) ? child.getScreenCTM() : child.getCTM()
|
|
|
+ );
|
|
|
+ if (!viewBoxTransformMatrix) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (child.transform.baseVal.numberOfItems > 0) {
|
|
|
+ child.transform.baseVal.consolidate();
|
|
|
+ const existingTransform = child.transform.baseVal.getItem(0).matrix;
|
|
|
+ viewBoxTransformMatrix = viewBoxTransformMatrix.multiply(existingTransform.inverse());
|
|
|
+ }
|
|
|
+ contentContainer.transform.baseVal.appendItem(contentContainer.transform.baseVal.createSVGTransformFromMatrix(viewBoxTransformMatrix));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (isSVGAnchorElement(element) && !context.options.keepLinks) {
|
|
|
+ elementToAppend = context.svgDocument.createElementNS(svgNamespace, "g");
|
|
|
+ } else {
|
|
|
+ elementToAppend = element.cloneNode(false);
|
|
|
+ }
|
|
|
+ for (const attribute of elementToAppend.attributes) {
|
|
|
+ if (attribute.localName.startsWith("on")) {
|
|
|
+ elementToAppend.attributes.removeNamedItemNS(attribute.namespaceURI, attribute.localName);
|
|
|
+ } else if (attribute.localName === "href" && attribute.value.startsWith("javascript:")) {
|
|
|
+ elementToAppend.attributes.removeNamedItemNS(attribute.namespaceURI, attribute.localName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const window2 = element.ownerDocument.defaultView;
|
|
|
+ assert(window2, "Element's ownerDocument has no defaultView");
|
|
|
+ const svgViewportElement = element.ownerSVGElement;
|
|
|
+ assert(svgViewportElement, "Expected element to have ownerSVGElement");
|
|
|
+ const styles = window2.getComputedStyle(element);
|
|
|
+ if (isSVGGraphicsElement(element)) {
|
|
|
+ copyGraphicalPresentationAttributes(styles, elementToAppend, svgViewportElement.viewBox.animVal);
|
|
|
+ if (isSVGTextContentElement(element)) {
|
|
|
+ copyTextStyles(styles, elementToAppend);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (const attribute of elementToAppend.attributes) {
|
|
|
+ if (attribute.localName === "href") {
|
|
|
+ if (attribute.value.startsWith("#")) {
|
|
|
+ attribute.value = attribute.value.replace("#", `#${context.idPrefix}`);
|
|
|
+ }
|
|
|
+ } else if (URL_ID_REFERENCE_REGEX.test(attribute.value)) {
|
|
|
+ attribute.value = rewriteUrlIdReferences(attribute.value, context);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (const property of elementToAppend.style) {
|
|
|
+ const value = elementToAppend.style.getPropertyValue(property);
|
|
|
+ if (URL_ID_REFERENCE_REGEX.test(value)) {
|
|
|
+ elementToAppend.style.setProperty(property, rewriteUrlIdReferences(value, context), elementToAppend.style.getPropertyPriority(property));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (elementToAppend.id) {
|
|
|
+ elementToAppend.id = context.idPrefix + elementToAppend.id;
|
|
|
+ }
|
|
|
+ context.currentSvgParent.append(elementToAppend);
|
|
|
+ for (const child of element.childNodes) {
|
|
|
+ handleSvgNode(child, { ...context, currentSvgParent: elementToAppend });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var graphicalPresentationAttributes = [
|
|
|
+ "alignment-baseline",
|
|
|
+ "baseline-shift",
|
|
|
+ // 'clip',
|
|
|
+ "clip-path",
|
|
|
+ "clip-rule",
|
|
|
+ "color",
|
|
|
+ "color-interpolation",
|
|
|
+ "color-interpolation-filters",
|
|
|
+ // 'color-profile',
|
|
|
+ "color-rendering",
|
|
|
+ // 'cursor',
|
|
|
+ "direction",
|
|
|
+ // 'display',
|
|
|
+ // 'enable-background',
|
|
|
+ "fill",
|
|
|
+ "fill-opacity",
|
|
|
+ "fill-rule",
|
|
|
+ "filter",
|
|
|
+ "flood-color",
|
|
|
+ "flood-opacity",
|
|
|
+ "image-rendering",
|
|
|
+ "lighting-color",
|
|
|
+ "marker-end",
|
|
|
+ "marker-mid",
|
|
|
+ "marker-start",
|
|
|
+ "mask",
|
|
|
+ "opacity",
|
|
|
+ // 'overflow',
|
|
|
+ "pointer-events",
|
|
|
+ "shape-rendering",
|
|
|
+ // 'solid-color',
|
|
|
+ // 'solid-opacity',
|
|
|
+ "stop-color",
|
|
|
+ "stop-opacity",
|
|
|
+ "stroke",
|
|
|
+ "stroke-dasharray",
|
|
|
+ "stroke-dashoffset",
|
|
|
+ "stroke-linecap",
|
|
|
+ "stroke-linejoin",
|
|
|
+ "stroke-miterlimit",
|
|
|
+ "stroke-opacity",
|
|
|
+ "stroke-width",
|
|
|
+ "transform",
|
|
|
+ "vector-effect",
|
|
|
+ "visibility"
|
|
|
+ ];
|
|
|
+ var defaults = {
|
|
|
+ "alignment-baseline": "auto",
|
|
|
+ "baseline-shift": "0px",
|
|
|
+ "clip-path": "none",
|
|
|
+ "clip-rule": "nonzero",
|
|
|
+ "color-interpolation-filters": "linearrgb",
|
|
|
+ "color-interpolation": "srgb",
|
|
|
+ "color-rendering": "auto",
|
|
|
+ "fill-opacity": "1",
|
|
|
+ "fill-rule": "nonzero",
|
|
|
+ "flood-color": "rgb(0, 0, 0)",
|
|
|
+ "flood-opacity": "1",
|
|
|
+ "image-rendering": "auto",
|
|
|
+ "lighting-color": "rgb(255, 255, 255)",
|
|
|
+ "marker-end": "none",
|
|
|
+ "marker-mid": "none",
|
|
|
+ "marker-start": "none",
|
|
|
+ "pointer-events": "auto",
|
|
|
+ "shape-rendering": "auto",
|
|
|
+ "stop-color": "rgb(0, 0, 0)",
|
|
|
+ "stop-opacity": "1",
|
|
|
+ "stroke-dasharray": "none",
|
|
|
+ "stroke-dashoffset": "0px",
|
|
|
+ "stroke-linecap": "butt",
|
|
|
+ "stroke-linejoin": "miter",
|
|
|
+ "stroke-miterlimit": "4",
|
|
|
+ "stroke-opacity": "1",
|
|
|
+ "stroke-width": "1px",
|
|
|
+ "vector-effect": "none",
|
|
|
+ color: "",
|
|
|
+ direction: "ltr",
|
|
|
+ fill: "",
|
|
|
+ filter: "none",
|
|
|
+ mask: "none",
|
|
|
+ opacity: "1",
|
|
|
+ stroke: "",
|
|
|
+ transform: "none",
|
|
|
+ visibility: "visible"
|
|
|
+ };
|
|
|
+ function rewriteUrlIdReferences(value, { idPrefix }) {
|
|
|
+ const parsedValue = (0, import_postcss_value_parser.default)(value);
|
|
|
+ parsedValue.walk((node) => {
|
|
|
+ if (node.type !== "function" || node.value !== "url") {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const urlArgument = node.nodes[0];
|
|
|
+ if (!urlArgument) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ urlArgument.value = urlArgument.value.replace("#", `#${idPrefix}`);
|
|
|
+ });
|
|
|
+ return import_postcss_value_parser.default.stringify(parsedValue.nodes);
|
|
|
+ }
|
|
|
+ function copyGraphicalPresentationAttributes(styles, target, viewBox) {
|
|
|
+ var _a;
|
|
|
+ for (const attribute of graphicalPresentationAttributes) {
|
|
|
+ let value = styles.getPropertyValue(attribute);
|
|
|
+ if (value && value !== defaults[attribute]) {
|
|
|
+ if (value.endsWith("%")) {
|
|
|
+ value = (_a = parseCSSLength(value, diagonale(viewBox))) !== null && _a !== void 0 ? _a : 0;
|
|
|
+ }
|
|
|
+ target.setAttribute(attribute, value.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/element.js
|
|
|
+ function handleElement(element, context) {
|
|
|
+ var _a, _b, _c, _d, _e, _f, _g;
|
|
|
+ const cleanupFunctions = [];
|
|
|
+ try {
|
|
|
+ const window2 = element.ownerDocument.defaultView;
|
|
|
+ if (!window2) {
|
|
|
+ throw new Error("Element's ownerDocument has no defaultView");
|
|
|
+ }
|
|
|
+ const bounds = element.getBoundingClientRect();
|
|
|
+ const rectanglesIntersect = doRectanglesIntersect(bounds, context.options.captureArea);
|
|
|
+ const styles = window2.getComputedStyle(element);
|
|
|
+ const parentStyles = element.parentElement && window2.getComputedStyle(element.parentElement);
|
|
|
+ const svgContainer = isHTMLAnchorElement(element) && context.options.keepLinks ? createSvgAnchor(element, context) : context.svgDocument.createElementNS(svgNamespace, "g");
|
|
|
+ svgContainer.dataset.tag = element.tagName.toLowerCase();
|
|
|
+ const id = element.id || context.getUniqueId(element.classList[0] || element.tagName.toLowerCase());
|
|
|
+ svgContainer.id = id;
|
|
|
+ const className = element.getAttribute("class");
|
|
|
+ if (className) {
|
|
|
+ svgContainer.setAttribute("class", className);
|
|
|
+ }
|
|
|
+ if (isHTMLElement(element) && element.title) {
|
|
|
+ const svgTitle = context.svgDocument.createElementNS(svgNamespace, "title");
|
|
|
+ svgTitle.textContent = element.title;
|
|
|
+ svgContainer.prepend(svgTitle);
|
|
|
+ }
|
|
|
+ const stackingLayerName = determineStackingLayer(styles, parentStyles);
|
|
|
+ const stackingLayer = stackingLayerName ? context.stackingLayers[stackingLayerName] : context.parentStackingLayer;
|
|
|
+ if (stackingLayer) {
|
|
|
+ context.currentSvgParent.setAttribute("aria-owns", [context.currentSvgParent.getAttribute("aria-owns"), svgContainer.id].filter(Boolean).join(" "));
|
|
|
+ }
|
|
|
+ const elementToAppendTo = context.parentStackingLayer === stackingLayer ? context.currentSvgParent : stackingLayer;
|
|
|
+ svgContainer.dataset.zIndex = styles.zIndex;
|
|
|
+ elementToAppendTo.append(svgContainer);
|
|
|
+ let childContext;
|
|
|
+ let backgroundContainer;
|
|
|
+ let ownStackingLayers;
|
|
|
+ if (establishesStackingContext(styles, parentStyles)) {
|
|
|
+ ownStackingLayers = createStackingLayers(svgContainer);
|
|
|
+ backgroundContainer = ownStackingLayers.rootBackgroundAndBorders;
|
|
|
+ childContext = {
|
|
|
+ ...context,
|
|
|
+ currentSvgParent: svgContainer,
|
|
|
+ stackingLayers: ownStackingLayers,
|
|
|
+ parentStackingLayer: stackingLayer
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ backgroundContainer = svgContainer;
|
|
|
+ childContext = {
|
|
|
+ ...context,
|
|
|
+ currentSvgParent: svgContainer,
|
|
|
+ parentStackingLayer: stackingLayer
|
|
|
+ };
|
|
|
+ }
|
|
|
+ if (styles.opacity !== "1") {
|
|
|
+ svgContainer.setAttribute("opacity", styles.opacity);
|
|
|
+ }
|
|
|
+ for (const [name, value] of getAccessibilityAttributes(element, context)) {
|
|
|
+ svgContainer.setAttribute(name, value);
|
|
|
+ }
|
|
|
+ if (isHTMLElement(element) && !element.dataset.pseudoElement) {
|
|
|
+ const handlePseudoElement = (pseudoSelector, position) => {
|
|
|
+ const pseudoElementStyles = window2.getComputedStyle(element, pseudoSelector);
|
|
|
+ const content = (0, import_postcss_value_parser2.default)(pseudoElementStyles.content).nodes.find(isTaggedUnionMember("type", "string"));
|
|
|
+ if (!content) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const span = element.ownerDocument.createElement("span");
|
|
|
+ span.dataset.pseudoElement = pseudoSelector;
|
|
|
+ copyCssStyles(pseudoElementStyles, span.style);
|
|
|
+ span.textContent = unescapeStringValue(content.value);
|
|
|
+ element.dataset.pseudoElementOwner = id;
|
|
|
+ cleanupFunctions.push(() => element.removeAttribute("data-pseudo-element-owner"));
|
|
|
+ const style = element.ownerDocument.createElement("style");
|
|
|
+ style.textContent = `[data-pseudo-element-owner="${id}"]${pseudoSelector} { display: none !important; }`;
|
|
|
+ element.before(style);
|
|
|
+ cleanupFunctions.push(() => style.remove());
|
|
|
+ element[position](span);
|
|
|
+ cleanupFunctions.push(() => span.remove());
|
|
|
+ };
|
|
|
+ handlePseudoElement("::before", "prepend");
|
|
|
+ handlePseudoElement("::after", "append");
|
|
|
+ }
|
|
|
+ if (rectanglesIntersect) {
|
|
|
+ addBackgroundAndBorders(styles, bounds, backgroundContainer, window2, context);
|
|
|
+ }
|
|
|
+ if (styles.overflow !== "visible") {
|
|
|
+ const mask = context.svgDocument.createElementNS(svgNamespace, "mask");
|
|
|
+ mask.id = context.getUniqueId("mask-for-" + id);
|
|
|
+ const visibleRectangle = createBox(bounds, context);
|
|
|
+ visibleRectangle.setAttribute("fill", "#ffffff");
|
|
|
+ mask.append(visibleRectangle);
|
|
|
+ svgContainer.append(mask);
|
|
|
+ svgContainer.setAttribute("mask", `url(#${mask.id})`);
|
|
|
+ childContext = {
|
|
|
+ ...childContext,
|
|
|
+ ancestorMasks: [{ mask, forElement: element }, ...childContext.ancestorMasks]
|
|
|
+ };
|
|
|
+ }
|
|
|
+ if (isHTMLElement(element) && (styles.position === "absolute" || styles.position === "fixed") && context.ancestorMasks.length > 0 && element.offsetParent) {
|
|
|
+ for (const { mask, forElement } of context.ancestorMasks) {
|
|
|
+ if (element.offsetParent.contains(forElement) || element.offsetParent === forElement) {
|
|
|
+ const visibleRectangle = createBox(bounds, context);
|
|
|
+ visibleRectangle.setAttribute("fill", "#ffffff");
|
|
|
+ mask.append(visibleRectangle);
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (rectanglesIntersect && isHTMLImageElement(element) && // Make sure the element has a src/srcset attribute (the relative URL). `element.src` is absolute and always defined.
|
|
|
+ (element.getAttribute("src") || element.getAttribute("srcset"))) {
|
|
|
+ const svgImage = context.svgDocument.createElementNS(svgNamespace, "image");
|
|
|
+ svgImage.id = `${id}-image`;
|
|
|
+ svgImage.setAttribute("xlink:href", element.currentSrc || element.src);
|
|
|
+ const paddingLeft = (_a = parseCSSLength(styles.paddingLeft, bounds.width)) !== null && _a !== void 0 ? _a : 0;
|
|
|
+ const paddingRight = (_b = parseCSSLength(styles.paddingRight, bounds.width)) !== null && _b !== void 0 ? _b : 0;
|
|
|
+ const paddingTop = (_c = parseCSSLength(styles.paddingTop, bounds.height)) !== null && _c !== void 0 ? _c : 0;
|
|
|
+ const paddingBottom = (_d = parseCSSLength(styles.paddingBottom, bounds.height)) !== null && _d !== void 0 ? _d : 0;
|
|
|
+ svgImage.setAttribute("x", (bounds.x + paddingLeft).toString());
|
|
|
+ svgImage.setAttribute("y", (bounds.y + paddingTop).toString());
|
|
|
+ svgImage.setAttribute("width", (bounds.width - paddingLeft - paddingRight).toString());
|
|
|
+ svgImage.setAttribute("height", (bounds.height - paddingTop - paddingBottom).toString());
|
|
|
+ if (element.alt) {
|
|
|
+ svgImage.setAttribute("aria-label", element.alt);
|
|
|
+ }
|
|
|
+ svgContainer.append(svgImage);
|
|
|
+ } else if (rectanglesIntersect && isHTMLInputElement(element) && bounds.width > 0 && bounds.height > 0) {
|
|
|
+ if (element.value) {
|
|
|
+ const svgTextElement = context.svgDocument.createElementNS(svgNamespace, "text");
|
|
|
+ copyTextStyles(styles, svgTextElement);
|
|
|
+ svgTextElement.setAttribute("dominant-baseline", "central");
|
|
|
+ svgTextElement.setAttribute("xml:space", "preserve");
|
|
|
+ svgTextElement.setAttribute("x", (bounds.x + ((_e = parseCSSLength(styles.paddingLeft, bounds.width)) !== null && _e !== void 0 ? _e : 0)).toString());
|
|
|
+ const top = bounds.top + ((_f = parseCSSLength(styles.paddingTop, bounds.height)) !== null && _f !== void 0 ? _f : 0);
|
|
|
+ const bottom = bounds.bottom + ((_g = parseCSSLength(styles.paddingBottom, bounds.height)) !== null && _g !== void 0 ? _g : 0);
|
|
|
+ const middle = (top + bottom) / 2;
|
|
|
+ svgTextElement.setAttribute("y", middle.toString());
|
|
|
+ svgTextElement.textContent = element.value;
|
|
|
+ childContext.stackingLayers.inFlowInlineLevelNonPositionedDescendants.append(svgTextElement);
|
|
|
+ }
|
|
|
+ } else if (rectanglesIntersect && isSVGSVGElement(element) && isVisible(styles)) {
|
|
|
+ handleSvgNode(element, { ...childContext, idPrefix: `${id}-` });
|
|
|
+ } else {
|
|
|
+ for (const child of element.childNodes) {
|
|
|
+ walkNode(child, childContext);
|
|
|
+ }
|
|
|
+ if (ownStackingLayers) {
|
|
|
+ sortStackingLayerChildren(ownStackingLayers);
|
|
|
+ cleanupStackingLayerChildren(ownStackingLayers);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ for (const cleanup of cleanupFunctions) {
|
|
|
+ cleanup();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function addBackgroundAndBorders(styles, bounds, backgroundAndBordersContainer, window2, context) {
|
|
|
+ var _a, _b, _c, _d;
|
|
|
+ if (isVisible(styles)) {
|
|
|
+ if (bounds.width > 0 && bounds.height > 0 && (!isTransparent(styles.backgroundColor) || hasUniformBorder(styles) || styles.backgroundImage !== "none")) {
|
|
|
+ const box = createBackgroundAndBorderBox(bounds, styles, context);
|
|
|
+ backgroundAndBordersContainer.append(box);
|
|
|
+ if (styles.backgroundImage !== "none") {
|
|
|
+ const backgrounds = (0, import_postcss_value_parser2.default)(styles.backgroundImage).nodes.filter(isTaggedUnionMember("type", "function")).reverse();
|
|
|
+ const xBackgroundPositions = styles.backgroundPositionX.split(/\s*,\s*/g);
|
|
|
+ const yBackgroundPositions = styles.backgroundPositionY.split(/\s*,\s*/g);
|
|
|
+ const backgroundRepeats = styles.backgroundRepeat.split(/\s*,\s*/g);
|
|
|
+ for (const [index, backgroundNode] of backgrounds.entries()) {
|
|
|
+ const backgroundPositionX = (_a = parseCSSLength(xBackgroundPositions[index], bounds.width)) !== null && _a !== void 0 ? _a : 0;
|
|
|
+ const backgroundPositionY = (_b = parseCSSLength(yBackgroundPositions[index], bounds.height)) !== null && _b !== void 0 ? _b : 0;
|
|
|
+ const backgroundRepeat = backgroundRepeats[index];
|
|
|
+ if (backgroundNode.value === "url" && backgroundNode.nodes[0]) {
|
|
|
+ const urlArgument = backgroundNode.nodes[0];
|
|
|
+ const image = context.svgDocument.createElementNS(svgNamespace, "image");
|
|
|
+ image.id = context.getUniqueId("background-image");
|
|
|
+ const [cssWidth = "auto", cssHeight = "auto"] = styles.backgroundSize.split(" ");
|
|
|
+ const backgroundWidth = (_c = parseCSSLength(cssWidth, bounds.width)) !== null && _c !== void 0 ? _c : bounds.width;
|
|
|
+ const backgroundHeight = (_d = parseCSSLength(cssHeight, bounds.height)) !== null && _d !== void 0 ? _d : bounds.height;
|
|
|
+ image.setAttribute("width", backgroundWidth.toString());
|
|
|
+ image.setAttribute("height", backgroundHeight.toString());
|
|
|
+ if (cssWidth !== "auto" && cssHeight !== "auto") {
|
|
|
+ image.setAttribute("preserveAspectRatio", "none");
|
|
|
+ } else if (styles.backgroundSize === "contain") {
|
|
|
+ image.setAttribute("preserveAspectRatio", "xMidYMid meet");
|
|
|
+ } else if (styles.backgroundSize === "cover") {
|
|
|
+ image.setAttribute("preserveAspectRatio", "xMidYMid slice");
|
|
|
+ }
|
|
|
+ const url = new URL(unescapeStringValue(urlArgument.value), window2.location.href);
|
|
|
+ image.setAttribute("xlink:href", url.href);
|
|
|
+ if (backgroundRepeat === "no-repeat" || backgroundPositionX === 0 && backgroundPositionY === 0 && backgroundWidth === bounds.width && backgroundHeight === bounds.height) {
|
|
|
+ image.setAttribute("x", bounds.x.toString());
|
|
|
+ image.setAttribute("y", bounds.y.toString());
|
|
|
+ backgroundAndBordersContainer.append(image);
|
|
|
+ } else {
|
|
|
+ image.setAttribute("x", "0");
|
|
|
+ image.setAttribute("y", "0");
|
|
|
+ const pattern = context.svgDocument.createElementNS(svgNamespace, "pattern");
|
|
|
+ pattern.setAttribute("patternUnits", "userSpaceOnUse");
|
|
|
+ pattern.setAttribute("patternContentUnits", "userSpaceOnUse");
|
|
|
+ pattern.setAttribute("x", (bounds.x + backgroundPositionX).toString());
|
|
|
+ pattern.setAttribute("y", (bounds.y + backgroundPositionY).toString());
|
|
|
+ pattern.setAttribute("width", (backgroundRepeat === "repeat" || backgroundRepeat === "repeat-x" ? backgroundWidth : (
|
|
|
+ // If background shouldn't repeat on this axis, make the tile as big as the element so the repetition is cut off.
|
|
|
+ backgroundWidth + bounds.x + backgroundPositionX
|
|
|
+ )).toString());
|
|
|
+ pattern.setAttribute("height", (backgroundRepeat === "repeat" || backgroundRepeat === "repeat-y" ? backgroundHeight : (
|
|
|
+ // If background shouldn't repeat on this axis, make the tile as big as the element so the repetition is cut off.
|
|
|
+ backgroundHeight + bounds.y + backgroundPositionY
|
|
|
+ )).toString());
|
|
|
+ pattern.id = context.getUniqueId("pattern");
|
|
|
+ pattern.append(image);
|
|
|
+ box.before(pattern);
|
|
|
+ box.setAttribute("fill", `url(#${pattern.id})`);
|
|
|
+ }
|
|
|
+ } else if (/^(-webkit-)?linear-gradient$/.test(backgroundNode.value)) {
|
|
|
+ const linearGradientCss = import_postcss_value_parser2.default.stringify(backgroundNode);
|
|
|
+ const svgLinearGradient = convertLinearGradient(linearGradientCss, context);
|
|
|
+ if (backgroundPositionX !== 0 || backgroundPositionY !== 0) {
|
|
|
+ svgLinearGradient.setAttribute("gradientTransform", `translate(${backgroundPositionX}, ${backgroundPositionY})`);
|
|
|
+ }
|
|
|
+ svgLinearGradient.id = context.getUniqueId("linear-gradient");
|
|
|
+ box.before(svgLinearGradient);
|
|
|
+ box.setAttribute("fill", `url(#${svgLinearGradient.id})`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!hasUniformBorder(styles)) {
|
|
|
+ for (const borderLine of createBorders(styles, bounds, context)) {
|
|
|
+ backgroundAndBordersContainer.append(borderLine);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function createBox(bounds, context) {
|
|
|
+ const box = context.svgDocument.createElementNS(svgNamespace, "rect");
|
|
|
+ box.setAttribute("width", bounds.width.toString());
|
|
|
+ box.setAttribute("height", bounds.height.toString());
|
|
|
+ box.setAttribute("x", bounds.x.toString());
|
|
|
+ box.setAttribute("y", bounds.y.toString());
|
|
|
+ return box;
|
|
|
+ }
|
|
|
+ function createBackgroundAndBorderBox(bounds, styles, context) {
|
|
|
+ const background = createBox(bounds, context);
|
|
|
+ if (styles.backgroundColor) {
|
|
|
+ background.setAttribute("fill", styles.backgroundColor);
|
|
|
+ }
|
|
|
+ if (hasUniformBorder(styles)) {
|
|
|
+ background.setAttribute("stroke", styles.borderTopColor);
|
|
|
+ background.setAttribute("stroke-width", styles.borderTopWidth);
|
|
|
+ if (styles.borderTopStyle === "dashed") {
|
|
|
+ background.setAttribute("stroke-dasharray", "1");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const overlappingCurvesFactor = calculateOverlappingCurvesFactor(styles, bounds);
|
|
|
+ const radiusX = getBorderRadiiForSide("top", styles, bounds)[0] * overlappingCurvesFactor;
|
|
|
+ const radiusY = getBorderRadiiForSide("left", styles, bounds)[0] * overlappingCurvesFactor;
|
|
|
+ if (radiusX !== 0) {
|
|
|
+ background.setAttribute("rx", radiusX.toString());
|
|
|
+ }
|
|
|
+ if (radiusY !== 0) {
|
|
|
+ background.setAttribute("ry", radiusY.toString());
|
|
|
+ }
|
|
|
+ return background;
|
|
|
+ }
|
|
|
+ function* createBorders(styles, bounds, context) {
|
|
|
+ for (const side of ["top", "bottom", "right", "left"]) {
|
|
|
+ if (hasBorder(styles, side)) {
|
|
|
+ yield createBorder(styles, bounds, side, context);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function hasBorder(styles, side) {
|
|
|
+ return !!styles.getPropertyValue(`border-${side}-color`) && !isTransparent(styles.getPropertyValue(`border-${side}-color`)) && styles.getPropertyValue(`border-${side}-width`) !== "0px";
|
|
|
+ }
|
|
|
+ function createBorder(styles, bounds, side, context) {
|
|
|
+ const border = context.svgDocument.createElementNS(svgNamespace, "line");
|
|
|
+ border.setAttribute("stroke-linecap", "square");
|
|
|
+ const color = styles.getPropertyValue(`border-${side}-color`);
|
|
|
+ border.setAttribute("stroke", color);
|
|
|
+ border.setAttribute("stroke-width", styles.getPropertyValue(`border-${side}-width`));
|
|
|
+ const borderStyle = styles.getPropertyValue(`border-${side}-style`);
|
|
|
+ if (borderStyle === "inset" && (side === "top" || side === "left") || borderStyle === "outset" && (side === "right" || side === "bottom")) {
|
|
|
+ const match = color.match(/rgba?\((\d+), (\d+), (\d+)(?:, ([\d.]+))?\)/);
|
|
|
+ if (!match) {
|
|
|
+ throw new Error(`Unexpected color: ${color}`);
|
|
|
+ }
|
|
|
+ const components = match.slice(1, 4).map((value) => parseInt(value, 10) * 0.3);
|
|
|
+ if (match[4]) {
|
|
|
+ components.push(parseFloat(match[4]));
|
|
|
+ }
|
|
|
+ border.setAttribute("stroke", `rgba(${components.join(", ")})`);
|
|
|
+ }
|
|
|
+ if (side === "top") {
|
|
|
+ border.setAttribute("x1", bounds.left.toString());
|
|
|
+ border.setAttribute("x2", bounds.right.toString());
|
|
|
+ border.setAttribute("y1", bounds.top.toString());
|
|
|
+ border.setAttribute("y2", bounds.top.toString());
|
|
|
+ } else if (side === "left") {
|
|
|
+ border.setAttribute("x1", bounds.left.toString());
|
|
|
+ border.setAttribute("x2", bounds.left.toString());
|
|
|
+ border.setAttribute("y1", bounds.top.toString());
|
|
|
+ border.setAttribute("y2", bounds.bottom.toString());
|
|
|
+ } else if (side === "right") {
|
|
|
+ border.setAttribute("x1", bounds.right.toString());
|
|
|
+ border.setAttribute("x2", bounds.right.toString());
|
|
|
+ border.setAttribute("y1", bounds.top.toString());
|
|
|
+ border.setAttribute("y2", bounds.bottom.toString());
|
|
|
+ } else if (side === "bottom") {
|
|
|
+ border.setAttribute("x1", bounds.left.toString());
|
|
|
+ border.setAttribute("x2", bounds.right.toString());
|
|
|
+ border.setAttribute("y1", bounds.bottom.toString());
|
|
|
+ border.setAttribute("y2", bounds.bottom.toString());
|
|
|
+ }
|
|
|
+ return border;
|
|
|
+ }
|
|
|
+ function createSvgAnchor(element, context) {
|
|
|
+ const svgAnchor = context.svgDocument.createElementNS(svgNamespace, "a");
|
|
|
+ if (element.href && !element.href.startsWith("javascript:")) {
|
|
|
+ svgAnchor.setAttribute("href", element.href);
|
|
|
+ }
|
|
|
+ if (element.rel) {
|
|
|
+ svgAnchor.setAttribute("rel", element.rel);
|
|
|
+ }
|
|
|
+ if (element.target) {
|
|
|
+ svgAnchor.setAttribute("target", element.target);
|
|
|
+ }
|
|
|
+ if (element.download) {
|
|
|
+ svgAnchor.setAttribute("download", element.download);
|
|
|
+ }
|
|
|
+ return svgAnchor;
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/traversal.js
|
|
|
+ function walkNode(node, context) {
|
|
|
+ if (isElement(node)) {
|
|
|
+ handleElement(node, context);
|
|
|
+ } else if (isTextNode(node)) {
|
|
|
+ handleTextNode(node, context);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/inline.js
|
|
|
+ var import_postcss_value_parser3 = __toESM(require_lib(), 1);
|
|
|
+ async function inlineResources(element) {
|
|
|
+ await Promise.all([
|
|
|
+ ...[...element.children].map(inlineResources),
|
|
|
+ (async () => {
|
|
|
+ var _a;
|
|
|
+ if (isSVGImageElement(element)) {
|
|
|
+ const blob = await withTimeout(1e4, `Timeout fetching ${element.href.baseVal}`, () => fetchResource(element.href.baseVal));
|
|
|
+ if (blob.type === "image/svg+xml") {
|
|
|
+ assert(element.ownerDocument, "Expected <image> element to have ownerDocument");
|
|
|
+ const embeddedSvgDocument = new DOMParser().parseFromString(await blob.text(), "image/svg+xml");
|
|
|
+ const svgRoot = embeddedSvgDocument.documentElement;
|
|
|
+ svgRoot.setAttribute("x", element.getAttribute("x"));
|
|
|
+ svgRoot.setAttribute("y", element.getAttribute("y"));
|
|
|
+ svgRoot.setAttribute("width", element.getAttribute("width"));
|
|
|
+ svgRoot.setAttribute("height", element.getAttribute("height"));
|
|
|
+ svgRoot.remove();
|
|
|
+ element.replaceWith(svgRoot);
|
|
|
+ try {
|
|
|
+ const svgDocument = element.ownerDocument;
|
|
|
+ const mount = svgDocument.createElementNS(svgNamespace, "g");
|
|
|
+ assert(element.id, "<image> element must have ID");
|
|
|
+ handleSvgNode(svgRoot, {
|
|
|
+ currentSvgParent: mount,
|
|
|
+ svgDocument,
|
|
|
+ idPrefix: `${element.id}-`,
|
|
|
+ options: {
|
|
|
+ // SVGs embedded through <img> are never interactive.
|
|
|
+ keepLinks: false,
|
|
|
+ captureArea: svgRoot.viewBox.baseVal
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mount.dataset.tag = "img";
|
|
|
+ mount.setAttribute("role", "img");
|
|
|
+ svgRoot.replaceWith(mount);
|
|
|
+ } finally {
|
|
|
+ svgRoot.remove();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const dataUrl = await blobToDataURL(blob);
|
|
|
+ element.dataset.src = element.href.baseVal;
|
|
|
+ element.setAttribute("xlink:href", dataUrl.href);
|
|
|
+ }
|
|
|
+ } else if (isSVGStyleElement(element)) {
|
|
|
+ try {
|
|
|
+ const promises = [];
|
|
|
+ const parsedSheet = parse((_a = element.textContent) !== null && _a !== void 0 ? _a : "");
|
|
|
+ parsedSheet.walkAtRules("font-face", (fontFaceRule) => {
|
|
|
+ fontFaceRule.walkDecls("src", (sourceDeclaration) => {
|
|
|
+ const parsedSourceValue = (0, import_postcss_value_parser3.default)(sourceDeclaration.value);
|
|
|
+ parsedSourceValue.walk((node) => {
|
|
|
+ if (node.type === "function" && node.value === "url" && node.nodes[0]) {
|
|
|
+ const urlArgumentNode = node.nodes[0];
|
|
|
+ if (urlArgumentNode.type === "string" || urlArgumentNode.type === "word") {
|
|
|
+ promises.push(inlineCssFontUrlArgumentNode(urlArgumentNode));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ sourceDeclaration.value = import_postcss_value_parser3.default.stringify(parsedSourceValue.nodes);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ await Promise.all(promises);
|
|
|
+ element.textContent = parsedSheet.toString();
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Error inlining stylesheet", element.sheet, error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })().catch((error) => {
|
|
|
+ console.error("Error inlining resource for element", element, error);
|
|
|
+ })
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ async function inlineCssFontUrlArgumentNode(urlArgumentNode) {
|
|
|
+ try {
|
|
|
+ const url = new URL(unescapeStringValue(urlArgumentNode.value));
|
|
|
+ const blob = await withTimeout(1e4, `Timeout fetching ${url.href}`, () => fetchResource(url.href));
|
|
|
+ if (!blob.type.startsWith("font/") && !blob.type.startsWith("application/font-") && !blob.type.startsWith("application/x-font-") && !blob.type.startsWith("image/svg+xml") && !blob.type.startsWith("application/vnd.ms-fontobject")) {
|
|
|
+ throw new Error(`Invalid response MIME type inlining font at ${url.href}: Expected font MIME type, got ${blob.type}`);
|
|
|
+ }
|
|
|
+ const dataUrl = await blobToDataURL(blob);
|
|
|
+ urlArgumentNode.value = dataUrl.href;
|
|
|
+ } catch (error) {
|
|
|
+ console.error(`Error inlining ${urlArgumentNode.value}`, error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ async function fetchResource(url) {
|
|
|
+ assert(url, "No URL passed");
|
|
|
+ const headers = new Headers();
|
|
|
+ const response = await fetch(url, { headers });
|
|
|
+ if (!response.ok) {
|
|
|
+ throw new Error(response.statusText);
|
|
|
+ }
|
|
|
+ const blob = await response.blob();
|
|
|
+ return blob;
|
|
|
+ }
|
|
|
+ async function blobToDataURL(blob) {
|
|
|
+ const reader = new FileReader();
|
|
|
+ await new Promise((resolve, reject) => {
|
|
|
+ reader.addEventListener("error", () => reject(new Error("Error loading resource with FileLoader")));
|
|
|
+ reader.addEventListener("load", () => resolve());
|
|
|
+ reader.readAsDataURL(blob);
|
|
|
+ });
|
|
|
+ return new URL(reader.result);
|
|
|
+ }
|
|
|
+
|
|
|
+ // node_modules/dom-to-svg/lib/index.js
|
|
|
+ function documentToSVG(document2, options) {
|
|
|
+ return elementToSVG(document2.documentElement, options);
|
|
|
+ }
|
|
|
+ function elementToSVG(element, options) {
|
|
|
+ var _a, _b, _c, _d;
|
|
|
+ const svgDocument = element.ownerDocument.implementation.createDocument(svgNamespace, "svg", null);
|
|
|
+ const svgElement = svgDocument.documentElement;
|
|
|
+ svgElement.setAttribute("xmlns", svgNamespace);
|
|
|
+ svgElement.setAttribute("xmlns:xlink", xlinkNamespace);
|
|
|
+ svgElement.append(svgDocument.createComment(
|
|
|
+ // "--" is invalid in comments, percent-encode.
|
|
|
+ ` Generated by dom-to-svg from ${element.ownerDocument.location.href.replace(/--/g, "%2D%2D")} `
|
|
|
+ ));
|
|
|
+ const styleElement = svgDocument.createElementNS(svgNamespace, "style");
|
|
|
+ for (const styleSheet of element.ownerDocument.styleSheets) {
|
|
|
+ try {
|
|
|
+ for (const rule2 of (_a = styleSheet.rules) !== null && _a !== void 0 ? _a : []) {
|
|
|
+ if (!isCSSFontFaceRule(rule2)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ const styleSheetHref = (_b = rule2.parentStyleSheet) === null || _b === void 0 ? void 0 : _b.href;
|
|
|
+ if (styleSheetHref) {
|
|
|
+ const parsedSourceValue = (0, import_postcss_value_parser4.default)(rule2.style.getPropertyValue("src"));
|
|
|
+ parsedSourceValue.walk((node) => {
|
|
|
+ if (node.type === "function" && node.value === "url" && node.nodes[0]) {
|
|
|
+ const urlArgumentNode = node.nodes[0];
|
|
|
+ if (urlArgumentNode.type === "string" || urlArgumentNode.type === "word") {
|
|
|
+ urlArgumentNode.value = new URL(unescapeStringValue(urlArgumentNode.value), styleSheetHref).href;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const updatedFontFaceRule = parse(rule2.cssText);
|
|
|
+ updatedFontFaceRule.walkDecls("src", (declaration) => {
|
|
|
+ declaration.value = import_postcss_value_parser4.default.stringify(parsedSourceValue.nodes);
|
|
|
+ });
|
|
|
+ styleElement.append(updatedFontFaceRule.toString() + "\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Error resolving @font-face src URLs for styleSheet, skipping", styleSheet, error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ svgElement.append(styleElement);
|
|
|
+ walkNode(element, {
|
|
|
+ svgDocument,
|
|
|
+ currentSvgParent: svgElement,
|
|
|
+ stackingLayers: createStackingLayers(svgElement),
|
|
|
+ parentStackingLayer: svgElement,
|
|
|
+ getUniqueId: createIdGenerator(),
|
|
|
+ labels: /* @__PURE__ */ new Map(),
|
|
|
+ ancestorMasks: [],
|
|
|
+ options: {
|
|
|
+ captureArea: (_c = options === null || options === void 0 ? void 0 : options.captureArea) !== null && _c !== void 0 ? _c : element.getBoundingClientRect(),
|
|
|
+ keepLinks: (options === null || options === void 0 ? void 0 : options.keepLinks) !== false
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const bounds = (_d = options === null || options === void 0 ? void 0 : options.captureArea) !== null && _d !== void 0 ? _d : element.getBoundingClientRect();
|
|
|
+ svgElement.setAttribute("width", bounds.width.toString());
|
|
|
+ svgElement.setAttribute("height", bounds.height.toString());
|
|
|
+ svgElement.setAttribute("viewBox", `${bounds.x} ${bounds.y} ${bounds.width} ${bounds.height}`);
|
|
|
+ return svgDocument;
|
|
|
+ }
|
|
|
+
|
|
|
+ // ppt-output/.bundle_entry.js
|
|
|
+ window.__domToSvg = { documentToSVG, elementToSVG, inlineResources };
|
|
|
+})();
|