UNPKG

@anoki/fse-ui

Version:

FSE UI components library

324 lines (323 loc) • 11.5 kB
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