@anoki/fse-ui
Version:
FSE UI components library
324 lines (323 loc) • 11.5 kB
JavaScript
import { __require as S } from "./index.es685.js";
import { __require as x } from "./index.es686.js";
import { __require as A } from "./index.es689.js";
import { __require as T } from "./index.es699.js";
import { __require as R } from "./index.es700.js";
import { __require as W } from "./index.es764.js";
var m, g;
function U() {
if (g) return m;
g = 1;
let b = S(), _ = x(), F = A(), q = T(), w = R(), y = W();
const d = {
empty: !0,
space: !0
};
function z(u) {
for (let e = u.length - 1; e >= 0; e--) {
let t = u[e], r = t[3] || t[2];
if (r) return r;
}
}
class P {
constructor(e) {
this.input = e, this.root = new q(), this.current = this.root, this.spaces = "", this.semicolon = !1, this.createTokenizer(), this.root.source = { input: e, start: { column: 1, line: 1, offset: 0 } };
}
atrule(e) {
let t = new b();
t.name = e[1].slice(1), t.name === "" && this.unnamedAtrule(t, e), this.init(t, e[2]);
let r, i, s, o = !1, h = !1, n = [], l = [];
for (; !this.tokenizer.endOfFile(); ) {
if (e = this.tokenizer.nextToken(), r = e[0], r === "(" || r === "[" ? l.push(r === "(" ? ")" : "]") : r === "{" && l.length > 0 ? l.push("}") : r === l[l.length - 1] && l.pop(), l.length === 0)
if (r === ";") {
t.source.end = this.getPosition(e[2]), t.source.end.offset++, this.semicolon = !0;
break;
} else if (r === "{") {
h = !0;
break;
} else if (r === "}") {
if (n.length > 0) {
for (s = n.length - 1, i = n[s]; i && i[0] === "space"; )
i = n[--s];
i && (t.source.end = this.getPosition(i[3] || i[2]), t.source.end.offset++);
}
this.end(e);
break;
} else
n.push(e);
else
n.push(e);
if (this.tokenizer.endOfFile()) {
o = !0;
break;
}
}
t.raws.between = this.spacesAndCommentsFromEnd(n), n.length ? (t.raws.afterName = this.spacesAndCommentsFromStart(n), this.raw(t, "params", n), o && (e = n[n.length - 1], t.source.end = this.getPosition(e[3] || e[2]), t.source.end.offset++, this.spaces = t.raws.between, t.raws.between = "")) : (t.raws.afterName = "", t.params = ""), h && (t.nodes = [], this.current = t);
}
checkMissedSemicolon(e) {
let t = this.colon(e);
if (t === !1) return;
let r = 0, i;
for (let s = t - 1; s >= 0 && (i = e[s], !(i[0] !== "space" && (r += 1, r === 2))); s--)
;
throw this.input.error(
"Missed semicolon",
i[0] === "word" ? i[3] + 1 : i[2]
);
}
colon(e) {
let t = 0, r, i, s;
for (let [o, h] of e.entries()) {
if (i = h, s = i[0], s === "(" && (t += 1), s === ")" && (t -= 1), t === 0 && s === ":")
if (!r)
this.doubleColon(i);
else {
if (r[0] === "word" && r[1] === "progid")
continue;
return o;
}
r = i;
}
return !1;
}
comment(e) {
let t = new _();
this.init(t, e[2]), t.source.end = this.getPosition(e[3] || e[2]), t.source.end.offset++;
let r = e[1].slice(2, -2);
if (!r.trim())
t.text = "", t.raws.left = r, t.raws.right = "";
else {
let i = r.match(/^(\s*)([^]*\S)(\s*)$/);
t.text = i[2], t.raws.left = i[1], t.raws.right = i[3];
}
}
createTokenizer() {
this.tokenizer = y(this.input);
}
decl(e, t) {
let r = new F();
this.init(r, e[0][2]);
let i = e[e.length - 1];
for (i[0] === ";" && (this.semicolon = !0, e.pop()), r.source.end = this.getPosition(
i[3] || i[2] || z(e)
), r.source.end.offset++; e[0][0] !== "word"; )
e.length === 1 && this.unknownWord(e), r.raws.before += e.shift()[1];
for (r.source.start = this.getPosition(e[0][2]), r.prop = ""; e.length; ) {
let l = e[0][0];
if (l === ":" || l === "space" || l === "comment")
break;
r.prop += e.shift()[1];
}
r.raws.between = "";
let s;
for (; e.length; )
if (s = e.shift(), s[0] === ":") {
r.raws.between += s[1];
break;
} else
s[0] === "word" && /\w/.test(s[1]) && this.unknownWord([s]), r.raws.between += s[1];
(r.prop[0] === "_" || r.prop[0] === "*") && (r.raws.before += r.prop[0], r.prop = r.prop.slice(1));
let o = [], h;
for (; e.length && (h = e[0][0], !(h !== "space" && h !== "comment")); )
o.push(e.shift());
this.precheckMissedSemicolon(e);
for (let l = e.length - 1; l >= 0; l--) {
if (s = e[l], s[1].toLowerCase() === "!important") {
r.important = !0;
let c = this.stringFrom(e, l);
c = this.spacesFromEnd(e) + c, c !== " !important" && (r.raws.important = c);
break;
} else if (s[1].toLowerCase() === "important") {
let c = e.slice(0), f = "";
for (let a = l; a > 0; a--) {
let p = c[a][0];
if (f.trim().startsWith("!") && p !== "space")
break;
f = c.pop()[1] + f;
}
f.trim().startsWith("!") && (r.important = !0, r.raws.important = f, e = c);
}
if (s[0] !== "space" && s[0] !== "comment")
break;
}
e.some((l) => l[0] !== "space" && l[0] !== "comment") && (r.raws.between += o.map((l) => l[1]).join(""), o = []), this.raw(r, "value", o.concat(e), t), r.value.includes(":") && !t && this.checkMissedSemicolon(e);
}
doubleColon(e) {
throw this.input.error(
"Double colon",
{ offset: e[2] },
{ offset: e[2] + e[1].length }
);
}
emptyRule(e) {
let t = new w();
this.init(t, e[2]), t.selector = "", t.raws.between = "", this.current = t;
}
end(e) {
this.current.nodes && this.current.nodes.length && (this.current.raws.semicolon = this.semicolon), this.semicolon = !1, this.current.raws.after = (this.current.raws.after || "") + this.spaces, this.spaces = "", this.current.parent ? (this.current.source.end = this.getPosition(e[2]), this.current.source.end.offset++, this.current = this.current.parent) : this.unexpectedClose(e);
}
endFile() {
this.current.parent && this.unclosedBlock(), 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(e) {
if (this.spaces += e[1], this.current.nodes) {
let t = this.current.nodes[this.current.nodes.length - 1];
t && t.type === "rule" && !t.raws.ownSemicolon && (t.raws.ownSemicolon = this.spaces, this.spaces = "", t.source.end = this.getPosition(e[2]), t.source.end.offset += t.raws.ownSemicolon.length);
}
}
// Helpers
getPosition(e) {
let t = this.input.fromOffset(e);
return {
column: t.col,
line: t.line,
offset: e
};
}
init(e, t) {
this.current.push(e), e.source = {
input: this.input,
start: this.getPosition(t)
}, e.raws.before = this.spaces, this.spaces = "", e.type !== "comment" && (this.semicolon = !1);
}
other(e) {
let t = !1, r = null, i = !1, s = null, o = [], h = e[1].startsWith("--"), n = [], l = e;
for (; l; ) {
if (r = l[0], n.push(l), r === "(" || r === "[")
s || (s = l), o.push(r === "(" ? ")" : "]");
else if (h && i && r === "{")
s || (s = l), o.push("}");
else if (o.length === 0)
if (r === ";")
if (i) {
this.decl(n, h);
return;
} else
break;
else if (r === "{") {
this.rule(n);
return;
} else if (r === "}") {
this.tokenizer.back(n.pop()), t = !0;
break;
} else r === ":" && (i = !0);
else r === o[o.length - 1] && (o.pop(), o.length === 0 && (s = null));
l = this.tokenizer.nextToken();
}
if (this.tokenizer.endOfFile() && (t = !0), o.length > 0 && this.unclosedBracket(s), t && i) {
if (!h)
for (; n.length && (l = n[n.length - 1][0], !(l !== "space" && l !== "comment")); )
this.tokenizer.back(n.pop());
this.decl(n, h);
} else
this.unknownWord(n);
}
parse() {
let e;
for (; !this.tokenizer.endOfFile(); )
switch (e = this.tokenizer.nextToken(), e[0]) {
case "space":
this.spaces += e[1];
break;
case ";":
this.freeSemicolon(e);
break;
case "}":
this.end(e);
break;
case "comment":
this.comment(e);
break;
case "at-word":
this.atrule(e);
break;
case "{":
this.emptyRule(e);
break;
default:
this.other(e);
break;
}
this.endFile();
}
precheckMissedSemicolon() {
}
raw(e, t, r, i) {
let s, o, h = r.length, n = "", l = !0, c, f;
for (let a = 0; a < h; a += 1)
s = r[a], o = s[0], o === "space" && a === h - 1 && !i ? l = !1 : o === "comment" ? (f = r[a - 1] ? r[a - 1][0] : "empty", c = r[a + 1] ? r[a + 1][0] : "empty", !d[f] && !d[c] ? n.slice(-1) === "," ? l = !1 : n += s[1] : l = !1) : n += s[1];
if (!l) {
let a = r.reduce((p, C) => p + C[1], "");
e.raws[t] = { raw: a, value: n };
}
e[t] = n;
}
rule(e) {
e.pop();
let t = new w();
this.init(t, e[0][2]), t.raws.between = this.spacesAndCommentsFromEnd(e), this.raw(t, "selector", e), this.current = t;
}
spacesAndCommentsFromEnd(e) {
let t, r = "";
for (; e.length && (t = e[e.length - 1][0], !(t !== "space" && t !== "comment")); )
r = e.pop()[1] + r;
return r;
}
// Errors
spacesAndCommentsFromStart(e) {
let t, r = "";
for (; e.length && (t = e[0][0], !(t !== "space" && t !== "comment")); )
r += e.shift()[1];
return r;
}
spacesFromEnd(e) {
let t, r = "";
for (; e.length && (t = e[e.length - 1][0], t === "space"); )
r = e.pop()[1] + r;
return r;
}
stringFrom(e, t) {
let r = "";
for (let i = t; i < e.length; i++)
r += e[i][1];
return e.splice(t, e.length - t), r;
}
unclosedBlock() {
let e = this.current.source.start;
throw this.input.error("Unclosed block", e.line, e.column);
}
unclosedBracket(e) {
throw this.input.error(
"Unclosed bracket",
{ offset: e[2] },
{ offset: e[2] + 1 }
);
}
unexpectedClose(e) {
throw this.input.error(
"Unexpected }",
{ offset: e[2] },
{ offset: e[2] + 1 }
);
}
unknownWord(e) {
throw this.input.error(
"Unknown word " + e[0][1],
{ offset: e[0][2] },
{ offset: e[0][2] + e[0][1].length }
);
}
unnamedAtrule(e, t) {
throw this.input.error(
"At-rule without name",
{ offset: t[2] },
{ offset: t[2] + t[1].length }
);
}
}
return m = P, m;
}
export {
U as __require
};
//# sourceMappingURL=index.es711.js.map