textmode.js 0.2.0-beta.2 → 0.2.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1030 +1,1114 @@
1
- var q = Object.defineProperty;
2
- var Z = (a, t, e) => t in a ? q(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
3
- var c = (a, t, e) => Z(a, typeof t != "symbol" ? t + "" : t, e);
4
- class y extends Error {
1
+ var K = Object.defineProperty;
2
+ var q = (a, t, e) => t in a ? K(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
3
+ var c = (a, t, e) => q(a, typeof t != "symbol" ? t + "" : t, e);
4
+ class S extends Error {
5
5
  constructor(t, e = {}) {
6
- super(y.i(t, e)), this.name = "TextmodeError";
6
+ super(S.i(t, e)), this.name = "TextmodeError";
7
7
  }
8
8
  static i(t, e) {
9
- let i = t;
9
+ let r = t;
10
10
  if (e && Object.keys(e).length > 0) {
11
- i += `
11
+ r += `
12
12
 
13
13
  📋 Context:`;
14
- for (const [r, s] of Object.entries(e))
15
- i += `
16
- - ${r}: ${y.o(s)}`;
14
+ for (const [i, s] of Object.entries(e))
15
+ r += `
16
+ - ${i}: ${S.o(s)}`;
17
17
  }
18
- return i += `
18
+ return r += `
19
19
 
20
- `, i += "↓".repeat(24) + `
21
- `, i;
20
+ `, r += "↓".repeat(24) + `
21
+ `, r;
22
22
  }
23
23
  static o(t) {
24
24
  if (t === null) return "null";
25
25
  if (t === void 0) return "undefined";
26
26
  if (typeof t == "string") return `"${t}"`;
27
27
  if (typeof t == "number" || typeof t == "boolean") return t + "";
28
- if (Array.isArray(t)) return t.length === 0 ? "[]" : t.length <= 5 ? `[${t.map((e) => y.o(e)).join(", ")}]` : `[${t.slice(0, 3).map((e) => y.o(e)).join(", ")}, ... +${t.length - 3} more]`;
28
+ if (Array.isArray(t)) return t.length === 0 ? "[]" : t.length <= 5 ? `[${t.map((e) => S.o(e)).join(", ")}]` : `[${t.slice(0, 3).map((e) => S.o(e)).join(", ")}, ... +${t.length - 3} more]`;
29
29
  if (typeof t == "object") {
30
30
  const e = Object.keys(t);
31
- return e.length === 0 ? "{}" : e.length <= 3 ? `{ ${e.map((i) => `${i}: ${y.o(t[i])}`).join(", ")} }` : `{ ${e.slice(0, 2).map((i) => `${i}: ${y.o(t[i])}`).join(", ")}, ... +${e.length - 2} more }`;
31
+ return e.length === 0 ? "{}" : e.length <= 3 ? `{ ${e.map((r) => `${r}: ${S.o(t[r])}`).join(", ")} }` : `{ ${e.slice(0, 2).map((r) => `${r}: ${S.o(t[r])}`).join(", ")}, ... +${e.length - 2} more }`;
32
32
  }
33
33
  return t + "";
34
34
  }
35
35
  }
36
- var Q = ((a) => (a[a.SILENT = 0] = "SILENT", a[a.WARNING = 1] = "WARNING", a[a.ERROR = 2] = "ERROR", a[a.THROW = 3] = "THROW", a))(Q || {});
37
- const _ = class _ {
36
+ var J = ((a) => (a[a.SILENT = 0] = "SILENT", a[a.WARNING = 1] = "WARNING", a[a.ERROR = 2] = "ERROR", a[a.THROW = 3] = "THROW", a))(J || {});
37
+ const A = class A {
38
38
  constructor() {
39
- c(this, "l", { globalLevel: 3 });
39
+ c(this, "u", { globalLevel: 3 });
40
40
  }
41
- static u() {
42
- return _.h || (_.h = new _()), _.h;
41
+ static p() {
42
+ return A.l || (A.l = new A()), A.l;
43
43
  }
44
- p(t, e) {
45
- const i = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", r = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
46
- switch (this.l.globalLevel) {
44
+ _(t, e) {
45
+ const r = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", i = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
46
+ switch (this.u.globalLevel) {
47
47
  case 0:
48
48
  return !1;
49
49
  case 1:
50
- return console.group(i, r), console.warn(y.i(t, e)), console.groupEnd(), !1;
50
+ return console.group(r, i), console.warn(S.i(t, e)), console.groupEnd(), !1;
51
51
  case 2:
52
- return console.group(i, r), console.error(y.i(t, e)), console.groupEnd(), !1;
52
+ return console.group(r, i), console.error(S.i(t, e)), console.groupEnd(), !1;
53
53
  default:
54
- throw new y(t, e);
54
+ throw new S(t, e);
55
55
  }
56
56
  }
57
- _(t, e, i) {
58
- return !!t || (this.p(e, i), !1);
57
+ m(t, e, r) {
58
+ return !!t || (this._(e, r), !1);
59
59
  }
60
- m(t) {
61
- this.l.globalLevel = t;
60
+ v(t) {
61
+ this.u.globalLevel = t;
62
62
  }
63
63
  };
64
- c(_, "h", null);
65
- let B = _;
66
- const M = B.u(), X = /* @__PURE__ */ new WeakMap();
67
- function U(a, t) {
68
- X.set(a, t);
64
+ c(A, "l", null);
65
+ let B = A;
66
+ const I = B.p(), Q = /* @__PURE__ */ new WeakMap();
67
+ function D(a, t) {
68
+ Q.set(a, t);
69
69
  }
70
- function I(a) {
71
- return X.get(a);
70
+ function U(a) {
71
+ return Q.get(a);
72
72
  }
73
- class j {
74
- constructor(t, e, i = e, r = 1, s = {}) {
75
- c(this, "v");
73
+ class $ {
74
+ constructor(t, e, r = e, i = 1, s = {}) {
76
75
  c(this, "C");
77
- c(this, "l");
78
- c(this, "$", null);
79
- c(this, "R");
76
+ c(this, "$");
77
+ c(this, "u");
78
+ c(this, "R", null);
79
+ c(this, "S");
80
80
  c(this, "M");
81
- c(this, "S", []);
82
- c(this, "A");
83
- c(this, "P", null);
84
81
  c(this, "F", []);
85
- this.v = e, this.C = i, this.l = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...s }, this.R = t, this.A = Math.min(Math.max(1, r), 8);
82
+ c(this, "G");
83
+ c(this, "D", null);
84
+ c(this, "P", []);
85
+ this.C = e, this.$ = r, this.u = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...s }, this.S = t, this.G = Math.min(Math.max(1, i), 8);
86
86
  const n = t.getParameter(t.MAX_DRAW_BUFFERS), o = t.getParameter(t.MAX_COLOR_ATTACHMENTS);
87
- this.A = Math.min(this.A, n, o), this.M = t.createFramebuffer(), this.G(), this.D(), this.F = Array(this.A).fill(null);
87
+ this.G = Math.min(this.G, n, o), this.M = t.createFramebuffer(), this.A(), this.I(), this.P = Array(this.G).fill(null);
88
88
  }
89
- G() {
90
- const t = this.R, e = this.l.filter === "linear" ? t.LINEAR : t.NEAREST, i = this.l.wrap === "repeat" ? t.REPEAT : t.CLAMP_TO_EDGE, r = this.l.type === "float" ? t.FLOAT : t.UNSIGNED_BYTE;
91
- for (let s = 0; s < this.A; s++) {
89
+ A() {
90
+ const t = this.S, e = this.u.filter === "linear" ? t.LINEAR : t.NEAREST, r = this.u.wrap === "repeat" ? t.REPEAT : t.CLAMP_TO_EDGE, i = this.u.type === "float" ? t.FLOAT : t.UNSIGNED_BYTE;
91
+ for (let s = 0; s < this.G; s++) {
92
92
  const n = t.createTexture();
93
- t.bindTexture(t.TEXTURE_2D, n), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, i), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, i), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, this.v, this.C, 0, t.RGBA, r, null), this.S.push(n);
93
+ t.bindTexture(t.TEXTURE_2D, n), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, r), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, r), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, this.C, this.$, 0, t.RGBA, i, null), this.F.push(n);
94
94
  }
95
95
  t.bindTexture(t.TEXTURE_2D, null);
96
96
  }
97
- D() {
98
- const t = this.R;
99
- if (t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.A === 1) t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.S[0], 0);
97
+ I() {
98
+ const t = this.S;
99
+ if (t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.G === 1) t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.F[0], 0);
100
100
  else {
101
- const i = [];
102
- for (let r = 0; r < this.A; r++) {
103
- const s = t.COLOR_ATTACHMENT0 + r;
104
- t.framebufferTexture2D(t.FRAMEBUFFER, s, t.TEXTURE_2D, this.S[r], 0), i.push(s);
101
+ const r = [];
102
+ for (let i = 0; i < this.G; i++) {
103
+ const s = t.COLOR_ATTACHMENT0 + i;
104
+ t.framebufferTexture2D(t.FRAMEBUFFER, s, t.TEXTURE_2D, this.F[i], 0), r.push(s);
105
105
  }
106
- t.drawBuffers(i);
106
+ t.drawBuffers(r);
107
107
  }
108
108
  const e = t.checkFramebufferStatus(t.FRAMEBUFFER);
109
109
  e !== t.FRAMEBUFFER_COMPLETE && console.error("GLFramebuffer is not complete:", e), t.bindFramebuffer(t.FRAMEBUFFER, null);
110
110
  }
111
- I(t) {
112
- const e = this.R;
113
- e.bindTexture(e.TEXTURE_2D, this.S[0]), e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, 1), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, e.RGBA, e.UNSIGNED_BYTE, t), e.bindTexture(e.TEXTURE_2D, null);
114
- }
115
- L(t, e) {
116
- this.v = t, this.C = e, this.$ = null, this.F = Array(this.A).fill(null);
117
- const i = this.R, r = this.l.type === "float" ? i.FLOAT : i.UNSIGNED_BYTE;
118
- for (const s of this.S) i.bindTexture(i.TEXTURE_2D, s), i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, this.v, this.C, 0, i.RGBA, r, null);
119
- i.bindTexture(i.TEXTURE_2D, null);
120
- }
121
- W(t) {
122
- const e = this.R;
123
- if (t < 0 || t >= this.A) throw Error(`GLFramebuffer: attachment index ${t} out of range (count=${this.A})`);
124
- const i = this.F[t];
125
- if (i) return i;
126
- const r = this.v, s = this.C, n = new Uint8Array(r * s * 4), o = e.getParameter(e.READ_FRAMEBUFFER_BINDING);
127
- e.bindFramebuffer(e.READ_FRAMEBUFFER, this.M), e.readBuffer(e.COLOR_ATTACHMENT0 + t), e.readPixels(0, 0, r, s, e.RGBA, e.UNSIGNED_BYTE, n), e.bindFramebuffer(e.READ_FRAMEBUFFER, o);
128
- const h = 4 * r, l = new Uint8Array(n.length);
129
- for (let u = 0; u < s; u++) {
130
- const f = (s - 1 - u) * h, d = u * h;
131
- l.set(n.subarray(f, f + h), d);
111
+ L(t) {
112
+ const e = this.S;
113
+ e.bindTexture(e.TEXTURE_2D, this.F[0]), e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, 1), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, e.RGBA, e.UNSIGNED_BYTE, t), e.bindTexture(e.TEXTURE_2D, null);
114
+ }
115
+ W(t, e) {
116
+ this.C = t, this.$ = e, this.R = null, this.P = Array(this.G).fill(null);
117
+ const r = this.S, i = this.u.type === "float" ? r.FLOAT : r.UNSIGNED_BYTE;
118
+ for (const s of this.F) r.bindTexture(r.TEXTURE_2D, s), r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, this.C, this.$, 0, r.RGBA, i, null);
119
+ r.bindTexture(r.TEXTURE_2D, null);
120
+ }
121
+ k(t) {
122
+ const e = this.S;
123
+ if (t < 0 || t >= this.G) throw Error(`GLFramebuffer: attachment index ${t} out of range (count=${this.G})`);
124
+ const r = this.P[t];
125
+ if (r) return r;
126
+ const i = this.C, s = this.$, n = new Uint8Array(i * s * 4), o = e.getParameter(e.READ_FRAMEBUFFER_BINDING);
127
+ e.bindFramebuffer(e.READ_FRAMEBUFFER, this.M), e.readBuffer(e.COLOR_ATTACHMENT0 + t), e.readPixels(0, 0, i, s, e.RGBA, e.UNSIGNED_BYTE, n), e.bindFramebuffer(e.READ_FRAMEBUFFER, o);
128
+ const h = 4 * i, l = new Uint8Array(n.length);
129
+ for (let d = 0; d < s; d++) {
130
+ const u = (s - 1 - d) * h, f = d * h;
131
+ l.set(n.subarray(u, u + h), f);
132
132
  }
133
- return this.F[t] = l, l;
133
+ return this.P[t] = l, l;
134
134
  }
135
- k() {
136
- for (let t = 0; t < this.A; t++) this.W(t);
135
+ U() {
136
+ for (let t = 0; t < this.G; t++) this.k(t);
137
137
  }
138
138
  V() {
139
- const t = this.R;
140
- this.P = { framebuffer: t.getParameter(t.FRAMEBUFFER_BINDING), viewport: t.getParameter(t.VIEWPORT) }, t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.F = Array(this.A).fill(null);
141
- for (let e = 0; e < this.A; e++) t.clearBufferfv(t.COLOR, e, new Float32Array([0, 0, 0, 0]));
142
- t.viewport(0, 0, this.v, this.C), U(t, [0, 0, this.v, this.C]);
139
+ const t = this.S;
140
+ this.D = { framebuffer: t.getParameter(t.FRAMEBUFFER_BINDING), viewport: t.getParameter(t.VIEWPORT) }, t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.P = Array(this.G).fill(null);
141
+ for (let e = 0; e < this.G; e++) t.clearBufferfv(t.COLOR, e, new Float32Array([0, 0, 0, 0]));
142
+ t.viewport(0, 0, this.C, this.$), D(t, [0, 0, this.C, this.$]);
143
143
  }
144
144
  O() {
145
- if (!this.P) return;
146
- const t = this.R;
147
- t.bindFramebuffer(t.FRAMEBUFFER, this.P.framebuffer), t.viewport(...this.P.viewport), U(t, this.P.viewport), this.P = null;
145
+ if (!this.D) return;
146
+ const t = this.S;
147
+ t.bindFramebuffer(t.FRAMEBUFFER, this.D.framebuffer), t.viewport(...this.D.viewport), D(t, this.D.viewport), this.D = null;
148
148
  }
149
- U() {
150
- const t = this.R;
149
+ j() {
150
+ const t = this.S;
151
151
  this.M && t.deleteFramebuffer(this.M);
152
- for (const e of this.S) t.deleteTexture(e);
153
- this.S = [], this.F = [];
152
+ for (const e of this.F) t.deleteTexture(e);
153
+ this.F = [], this.P = [];
154
154
  }
155
155
  get width() {
156
- return this.v;
156
+ return this.C;
157
157
  }
158
158
  get height() {
159
- return this.C;
159
+ return this.$;
160
160
  }
161
161
  get pixels() {
162
- return this.$;
162
+ return this.R;
163
163
  }
164
164
  get options() {
165
- return { ...this.l };
165
+ return { ...this.u };
166
166
  }
167
167
  get framebuffer() {
168
168
  return this.M;
169
169
  }
170
170
  get texture() {
171
- return this.S[0];
171
+ return this.F[0];
172
172
  }
173
173
  get textures() {
174
- return [...this.S];
174
+ return [...this.F];
175
175
  }
176
176
  get attachmentCount() {
177
- return this.A;
177
+ return this.G;
178
178
  }
179
179
  getAttachmentPixels(t) {
180
- return this.F[t] ?? null;
180
+ return this.P[t] ?? null;
181
181
  }
182
182
  }
183
- class J {
184
- constructor(t, e, i) {
185
- c(this, "R");
186
- c(this, "j");
187
- c(this, "H", /* @__PURE__ */ new Map());
188
- c(this, "q", /* @__PURE__ */ new Map());
189
- c(this, "N", 0);
190
- c(this, "X");
191
- this.R = t, this.j = this.Y(e, i), this.X = t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS), this.Z();
192
- }
193
- Z() {
194
- const t = this.R.getProgramParameter(this.j, this.R.ACTIVE_UNIFORMS);
183
+ class G {
184
+ constructor(t, e, r) {
185
+ c(this, "S");
186
+ c(this, "H");
187
+ c(this, "X", /* @__PURE__ */ new Map());
188
+ c(this, "Y", /* @__PURE__ */ new Map());
189
+ c(this, "q", 0);
190
+ c(this, "Z");
191
+ this.S = t, this.H = this.N(e, r), this.Z = t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS), this.J();
192
+ }
193
+ J() {
194
+ const t = this.S.getProgramParameter(this.H, this.S.ACTIVE_UNIFORMS);
195
195
  for (let e = 0; e < t; e++) {
196
- const i = this.R.getActiveUniform(this.j, e);
197
- if (i) {
198
- const r = this.R.getUniformLocation(this.j, i.name);
199
- r && (this.H.set(i.name, r), this.q.set(i.name, i.type));
196
+ const r = this.S.getActiveUniform(this.H, e);
197
+ if (r) {
198
+ const i = this.S.getUniformLocation(this.H, r.name);
199
+ i && (this.X.set(r.name, i), this.Y.set(r.name, r.type));
200
200
  }
201
201
  }
202
202
  }
203
- Y(t, e) {
204
- const i = this.J(this.R.VERTEX_SHADER, t), r = this.J(this.R.FRAGMENT_SHADER, e), s = this.R.createProgram();
205
- if (this.R.attachShader(s, i), this.R.attachShader(s, r), this.R.linkProgram(s), !this.R.getProgramParameter(s, this.R.LINK_STATUS)) {
206
- const n = this.R.getProgramInfoLog(s);
203
+ N(t, e) {
204
+ const r = this.K(this.S.VERTEX_SHADER, t), i = this.K(this.S.FRAGMENT_SHADER, e), s = this.S.createProgram();
205
+ if (this.S.attachShader(s, r), this.S.attachShader(s, i), this.S.linkProgram(s), !this.S.getProgramParameter(s, this.S.LINK_STATUS)) {
206
+ const n = this.S.getProgramInfoLog(s);
207
207
  throw Error("Shader program link error: " + n);
208
208
  }
209
- return this.R.deleteShader(i), this.R.deleteShader(r), s;
209
+ return this.S.deleteShader(r), this.S.deleteShader(i), s;
210
210
  }
211
- J(t, e) {
212
- const i = this.R.createShader(t);
213
- if (this.R.shaderSource(i, e), this.R.compileShader(i), !this.R.getShaderParameter(i, this.R.COMPILE_STATUS)) {
214
- const r = this.R.getShaderInfoLog(i);
215
- throw this.R.deleteShader(i), Error("Shader compilation error: " + r);
211
+ K(t, e) {
212
+ const r = this.S.createShader(t);
213
+ if (this.S.shaderSource(r, e), this.S.compileShader(r), !this.S.getShaderParameter(r, this.S.COMPILE_STATUS)) {
214
+ const i = this.S.getShaderInfoLog(r);
215
+ throw this.S.deleteShader(r), Error("Shader compilation error: " + i);
216
216
  }
217
- return i;
218
- }
219
- K() {
220
- this.R.useProgram(this.j), this.tt();
217
+ return r;
221
218
  }
222
219
  tt() {
223
- this.N = 0;
220
+ this.S.useProgram(this.H), this.et();
221
+ }
222
+ et() {
223
+ this.q = 0;
224
+ }
225
+ st(t) {
226
+ for (const [e, r] of Object.entries(t)) this.it(e, r);
224
227
  }
225
- et(t) {
226
- for (const [e, i] of Object.entries(t)) this.st(e, i);
228
+ rt(t) {
229
+ return this.X.has(t);
227
230
  }
228
- st(t, e) {
229
- const i = this.H.get(t);
230
- if (i) if (typeof e == "number") this.R.uniform1f(i, e);
231
- else if (typeof e == "boolean") this.R.uniform1i(i, e ? 1 : 0);
231
+ it(t, e) {
232
+ if (this.S.getParameter(this.S.CURRENT_PROGRAM) !== this.H) return void console.warn(`Attempting to set uniform '${t}' on shader that is not currently bound`);
233
+ const r = this.X.get(t);
234
+ if (r) if (typeof e == "number") this.S.uniform1f(r, e);
235
+ else if (typeof e == "boolean") this.S.uniform1i(r, e ? 1 : 0);
232
236
  else if (Array.isArray(e)) switch (e.length) {
233
237
  case 2:
234
- this.R.uniform2f(i, e[0], e[1]);
238
+ this.S.uniform2f(r, e[0], e[1]);
235
239
  break;
236
240
  case 3:
237
- this.R.uniform3f(i, e[0], e[1], e[2]);
241
+ this.S.uniform3f(r, e[0], e[1], e[2]);
238
242
  break;
239
243
  case 4:
240
- this.R.uniform4f(i, e[0], e[1], e[2], e[3]);
244
+ this.S.uniform4f(r, e[0], e[1], e[2], e[3]);
241
245
  break;
242
246
  default:
243
247
  console.warn(`Unsupported array length ${e.length} for uniform '${t}'`);
244
248
  }
245
249
  else if (e instanceof WebGLTexture) {
246
- const r = this.it();
247
- this.R.uniform1i(i, r), this.R.activeTexture(this.R.TEXTURE0 + r), this.R.bindTexture(this.R.TEXTURE_2D, e);
248
- } else if (e instanceof j) {
249
- const r = this.it();
250
- this.R.uniform1i(i, r), this.R.activeTexture(this.R.TEXTURE0 + r), this.R.bindTexture(this.R.TEXTURE_2D, e.texture);
250
+ const i = this.nt();
251
+ this.S.uniform1i(r, i), this.S.activeTexture(this.S.TEXTURE0 + i), this.S.bindTexture(this.S.TEXTURE_2D, e);
252
+ } else if (e instanceof $) {
253
+ const i = this.nt();
254
+ this.S.uniform1i(r, i), this.S.activeTexture(this.S.TEXTURE0 + i), this.S.bindTexture(this.S.TEXTURE_2D, e.texture);
251
255
  } else if (typeof e == "object" && "texture" in e) {
252
- const r = this.it();
253
- this.R.uniform1i(i, r), this.R.activeTexture(this.R.TEXTURE0 + r), this.R.bindTexture(this.R.TEXTURE_2D, e.texture);
256
+ const i = this.nt();
257
+ this.S.uniform1i(r, i), this.S.activeTexture(this.S.TEXTURE0 + i), this.S.bindTexture(this.S.TEXTURE_2D, e.texture);
254
258
  } else console.warn(`Unsupported uniform type for '${t}':`, typeof e);
255
259
  }
256
- it() {
257
- return this.N >= this.X && console.warn(`Exceeded maximum texture units (${this.X}). Texture may not render correctly.`), this.N++;
260
+ nt() {
261
+ return this.q >= this.Z && console.warn(`Exceeded maximum texture units (${this.Z}). Texture may not render correctly.`), this.q++;
258
262
  }
259
- get rt() {
260
- return this.j;
263
+ get ot() {
264
+ return this.H;
261
265
  }
262
- U() {
263
- this.R.deleteProgram(this.j);
266
+ j() {
267
+ this.S.deleteProgram(this.H);
264
268
  }
265
269
  }
266
- class K {
270
+ class tt {
267
271
  constructor() {
268
- c(this, "nt", 1);
269
- c(this, "ot", 0);
270
- c(this, "ht", [0, 0, 0]);
271
- c(this, "ct", [1, 1, 1, 1]);
272
- c(this, "lt", [0, 0, 0, 1]);
273
- c(this, "ut", !1);
274
- c(this, "ft", !1);
275
- c(this, "dt", !1);
276
- c(this, "gt", [0, 0]);
272
+ c(this, "ht", 1);
273
+ c(this, "ct", 0);
274
+ c(this, "lt", 0);
275
+ c(this, "ut", 0);
276
+ c(this, "ft", [0, 0, 0]);
277
+ c(this, "dt", [1, 1, 1, 1]);
277
278
  c(this, "_t", [0, 0, 0, 1]);
278
- c(this, "vt", []);
279
+ c(this, "gt", !1);
280
+ c(this, "vt", !1);
281
+ c(this, "xt", !1);
282
+ c(this, "Ct", [0, 0]);
283
+ c(this, "yt", [0, 0, 0, 1]);
284
+ c(this, "wt", []);
279
285
  }
280
- xt() {
281
- this.vt.push({ lineWeight: this.nt, rotation: this.ot, charRotation: [...this.gt], flipHorizontally: this.ut, flipVertically: this.ft, invert: this.dt, character: [...this.ht], charColor: [...this.ct], cellColor: [...this.lt] });
286
+ $t() {
287
+ this.wt.push({ lineWeight: this.ht, rotationX: this.ct, rotationY: this.lt, rotationZ: this.ut, charRotation: [...this.Ct], flipHorizontally: this.gt, flipVertically: this.vt, invert: this.xt, character: [...this.ft], charColor: [...this.dt], cellColor: [...this._t] });
282
288
  }
283
- Ct() {
284
- const t = this.vt.pop();
285
- t ? (this.nt = t.lineWeight, this.ot = t.rotation, this.gt = t.charRotation, this.ut = t.flipHorizontally, this.ft = t.flipVertically, this.dt = t.invert, this.ht = t.character, this.ct = t.charColor, this.lt = t.cellColor) : console.warn("pop() called without matching push()");
289
+ bt() {
290
+ const t = this.wt.pop();
291
+ t ? (this.ht = t.lineWeight, this.ct = t.rotationX, this.lt = t.rotationY, this.ut = t.rotationZ, this.Ct = t.charRotation, this.gt = t.flipHorizontally, this.vt = t.flipVertically, this.xt = t.invert, this.ft = t.character, this.dt = t.charColor, this._t = t.cellColor) : console.warn("pop() called without matching push()");
286
292
  }
287
- yt() {
288
- this.vt = [], this.ot = 0;
293
+ zt() {
294
+ this.wt = [], this.ct = 0, this.lt = 0, this.ut = 0;
289
295
  }
290
- wt(t) {
291
- t.lineWeight = this.nt, t.rotation = this.ot, t.character[0] = this.ht[0], t.character[1] = this.ht[1], t.character[2] = this.ht[2], t.charColor[0] = this.ct[0], t.charColor[1] = this.ct[1], t.charColor[2] = this.ct[2], t.charColor[3] = this.ct[3], t.bgColor[0] = this.lt[0], t.bgColor[1] = this.lt[1], t.bgColor[2] = this.lt[2], t.bgColor[3] = this.lt[3], t.flipHorizontally = this.ut, t.flipVertically = this.ft, t.invert = this.dt, t.charRotation[0] = this.gt[0], t.charRotation[1] = this.gt[1];
296
+ Rt(t) {
297
+ t.lineWeight = this.ht, t.rotationX = this.ct, t.rotationY = this.lt, t.rotationZ = this.ut, t.character[0] = this.ft[0], t.character[1] = this.ft[1], t.character[2] = this.ft[2], t.charColor[0] = this.dt[0], t.charColor[1] = this.dt[1], t.charColor[2] = this.dt[2], t.charColor[3] = this.dt[3], t.bgColor[0] = this._t[0], t.bgColor[1] = this._t[1], t.bgColor[2] = this._t[2], t.bgColor[3] = this._t[3], t.flipHorizontally = this.gt, t.flipVertically = this.vt, t.invert = this.xt, t.charRotation[0] = this.Ct[0], t.charRotation[1] = this.Ct[1];
292
298
  }
293
299
  get lineWeight() {
294
- return this.nt;
300
+ return this.ht;
295
301
  }
296
302
  get canvasBackgroundColor() {
297
- return this._t;
298
- }
299
- $t(t) {
300
- this.nt = Math.abs(t);
301
- }
302
- bt(t) {
303
- this.ot = t;
303
+ return this.yt;
304
304
  }
305
305
  Tt(t) {
306
- this.ht = t;
307
- }
308
- zt(t, e, i, r = 255) {
309
- this.ct = [t / 255, e / 255, i / 255, r / 255];
306
+ this.ht = Math.abs(t);
310
307
  }
311
- Rt(t, e, i, r = 255) {
312
- this.lt = [t / 255, e / 255, i / 255, r / 255];
308
+ St(t) {
309
+ this.ct = t;
313
310
  }
314
311
  Mt(t) {
312
+ this.lt = t;
313
+ }
314
+ Ft(t) {
315
315
  this.ut = t;
316
316
  }
317
- St(t) {
317
+ Gt(t) {
318
318
  this.ft = t;
319
319
  }
320
+ Dt(t, e, r, i = 255) {
321
+ this.dt = [t / 255, e / 255, r / 255, i / 255];
322
+ }
323
+ Pt(t, e, r, i = 255) {
324
+ this._t = [t / 255, e / 255, r / 255, i / 255];
325
+ }
320
326
  At(t) {
321
- this.dt = t;
327
+ this.gt = t;
328
+ }
329
+ Bt(t) {
330
+ this.vt = t;
331
+ }
332
+ It(t) {
333
+ this.xt = t;
322
334
  }
323
- Pt(t) {
324
- const e = 255 * t / 360, i = Math.floor(e) / 255, r = Math.round(e - Math.floor(e));
325
- this.gt = [i, r];
335
+ Lt(t) {
336
+ const e = 255 * t / 360, r = Math.floor(e) / 255, i = Math.round(e - Math.floor(e));
337
+ this.Ct = [r, i];
326
338
  }
327
- Ft(t, e, i, r) {
328
- this._t = [t / 255, e / 255, i / 255, r / 255];
339
+ Et(t, e, r, i) {
340
+ this.yt = [t / 255, e / 255, r / 255, i / 255];
329
341
  }
330
342
  }
331
- var R = ((a) => (a.RECTANGLE = "rectangle", a.LINE = "line", a.ELLIPSE = "ellipse", a.ARC = "arc", a.TRIANGLE = "triangle", a.BEZIER_CURVE = "bezier_curve", a.CUSTOM = "custom", a))(R || {});
332
- class tt {
343
+ var O = `#version 300 es
344
+ in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 rotateX(float a){float s=sin(a),c=cos(a);return mat3(1,0,0,0,c,-s,0,s,c);}mat3 rotateY(float a){float s=sin(a),c=cos(a);return mat3(c,0,s,0,1,0,-s,0,c);}mat3 rotateZ(float a){float s=sin(a),c=cos(a);return mat3(c,-s,0,s,c,0,0,0,1);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return u2*u*p0+3.*u2*t*p1+3.*u*t2*p2+t2*t*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return-3.*u2*p0+3.*u2*p1-6.*u*t*p1+6.*u*t*p2-3.*t2*p2+3.*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezier=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool isArc=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(isBezier){float t=a_position.x;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tLen=length(tangent);tangent=tLen>0.?tangent/tLen:vec2(1,0);worldPosition=curvePoint+vec2(-tangent.y,tangent.x)*a_position.y*a_instanceSize.y;}else if(isArc){float s=a_instanceArcAngles.x,e=a_instanceArcAngles.y;s=mod(s,6.28318530718);if(s<0.)s+=6.28318530718;e=mod(e,6.28318530718);if(e<0.)e+=6.28318530718;float d=s-e;if(d<=0.)d+=6.28318530718;float angle=s-a_position.x*d;vec2 local=vec2(cos(angle),sin(angle))*a_position.y;worldPosition=local*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{worldPosition=a_position*a_instanceSize+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.-1.;ndc.y=-ndc.y;if(length(a_instanceGlobalRotation)>0.){vec3 pos3D=vec3(ndc-a_instanceRotationCenter,0);pos3D.x*=u_aspectRatio;if(a_instanceGlobalRotation.x!=0.)pos3D=rotateX(-a_instanceGlobalRotation.x)*pos3D;if(a_instanceGlobalRotation.y!=0.)pos3D=rotateY(-a_instanceGlobalRotation.y)*pos3D;if(a_instanceGlobalRotation.z!=0.)pos3D=rotateZ(-a_instanceGlobalRotation.z)*pos3D;pos3D.x/=u_aspectRatio;ndc=pos3D.xy+a_instanceRotationCenter;}gl_Position=vec4(ndc,0,1);}`, x = ((a) => (a.RECTANGLE = "rectangle", a.LINE = "line", a.ELLIPSE = "ellipse", a.ARC = "arc", a.TRIANGLE = "triangle", a.BEZIER_CURVE = "bezier_curve", a.CUSTOM = "custom", a))(x || {});
345
+ class et {
333
346
  constructor(t) {
334
- c(this, "R");
335
- c(this, "Gt", /* @__PURE__ */ new Map());
336
- this.R = t;
337
- }
338
- Dt(t, e, i, r) {
339
- const s = this.R;
340
- let n = this.Gt.get(t);
341
- n || (n = /* @__PURE__ */ new Map(), this.Gt.set(t, n));
347
+ c(this, "S");
348
+ c(this, "Wt", /* @__PURE__ */ new Map());
349
+ this.S = t;
350
+ }
351
+ kt(t, e, r, i) {
352
+ const s = this.S;
353
+ let n = this.Wt.get(t);
354
+ n || (n = /* @__PURE__ */ new Map(), this.Wt.set(t, n));
342
355
  let o = n.get(e) || null;
343
356
  if (!o) {
344
- o = s.createVertexArray(), n.set(e, o), s.bindVertexArray(o), s.bindBuffer(s.ARRAY_BUFFER, r);
357
+ o = s.createVertexArray(), n.set(e, o), s.bindVertexArray(o), s.bindBuffer(s.ARRAY_BUFFER, i);
345
358
  const h = s.getAttribLocation(t, "a_position");
346
- h !== -1 && (s.enableVertexAttribArray(h), s.vertexAttribPointer(h, i.attributes.position.size, s.FLOAT, !1, i.stride, i.attributes.position.offset), s.vertexAttribDivisor(h, 0));
359
+ h !== -1 && (s.enableVertexAttribArray(h), s.vertexAttribPointer(h, r.attributes.position.size, s.FLOAT, !1, r.stride, r.attributes.position.offset), s.vertexAttribDivisor(h, 0));
347
360
  const l = s.getAttribLocation(t, "a_texCoord");
348
- l !== -1 && (s.enableVertexAttribArray(l), s.vertexAttribPointer(l, i.attributes.texCoord.size, s.FLOAT, !1, i.stride, i.attributes.texCoord.offset), s.vertexAttribDivisor(l, 0));
361
+ l !== -1 && (s.enableVertexAttribArray(l), s.vertexAttribPointer(l, r.attributes.texCoord.size, s.FLOAT, !1, r.stride, r.attributes.texCoord.offset), s.vertexAttribDivisor(l, 0));
349
362
  }
350
363
  s.bindVertexArray(o);
351
364
  }
352
- It() {
353
- this.R.bindVertexArray(null);
365
+ Ut() {
366
+ this.S.bindVertexArray(null);
354
367
  }
355
- U() {
356
- const t = this.R;
357
- for (const [, e] of this.Gt) for (const [, i] of e) i && t.deleteVertexArray(i);
358
- this.Gt.clear();
368
+ j() {
369
+ const t = this.S;
370
+ for (const [, e] of this.Wt) for (const [, r] of e) r && t.deleteVertexArray(r);
371
+ this.Wt.clear();
359
372
  }
360
373
  }
361
- class et {
374
+ class rt {
362
375
  constructor(t) {
363
- c(this, "Bt");
364
- c(this, "R");
365
- this.R = t, this.Bt = new tt(t);
366
- }
367
- Lt(t, e, i) {
368
- const { shader: r } = t, s = I(this.R) || this.R.getParameter(this.R.VIEWPORT);
369
- r.et({ u_aspectRatio: s[2] / s[3], u_viewportSize: [s[2], s[3]] });
370
- const n = (l) => {
371
- if (!l || !l.Et()) return;
372
- const u = l.unitGeometry, f = l.unitBuffer;
376
+ c(this, "Vt");
377
+ c(this, "S");
378
+ c(this, "Ot", null);
379
+ c(this, "jt", null);
380
+ c(this, "Ht", null);
381
+ this.S = t, this.Vt = new et(t);
382
+ }
383
+ Xt(t, e, r) {
384
+ const { shader: i } = t, s = U(this.S) || this.S.getParameter(this.S.VIEWPORT), n = { u_aspectRatio: s[2] / s[3], u_viewportSize: [s[2], s[3]] }, o = {};
385
+ for (const [u, f] of Object.entries(n)) i.rt(u) && (o[u] = f);
386
+ Object.keys(o).length > 0 && i.st(o);
387
+ const h = (u) => {
388
+ if (!u || !u.Yt()) return;
389
+ const f = u.unitGeometry, g = u.unitBuffer;
373
390
  try {
374
- this.Bt.Dt(r.rt, l.type + "", u, f), l.batch.Wt(r), l.batch.kt(u.primitiveType, u.vertexCount);
391
+ this.Vt.kt(i.ot, u.type + "", f, g), u.batch.qt(i), u.batch.Zt(f.primitiveType, f.vertexCount);
375
392
  } finally {
376
- l.batch.Vt(r), this.Bt.It(), l.Ot();
393
+ u.batch.Nt(i), this.Vt.Ut(), u.Qt();
377
394
  }
378
395
  };
379
- let o = null, h = null;
380
- for (const l of e) {
381
- o !== null && l.type !== o && (n(h), o = null, h = null);
382
- let u = h;
383
- u && l.type === o || (u = i.get(l.type) || null, h = u, o = l.type), u && u.Ut(l.params, l.state);
396
+ let l = null, d = null;
397
+ for (const u of e) {
398
+ if (u.type === x.CUSTOM) {
399
+ d && (h(d), l = null, d = null), this.Jt(t, u.params, u.state, r.get(x.RECTANGLE) || null);
400
+ continue;
401
+ }
402
+ l !== null && u.type !== l && (h(d), l = null, d = null);
403
+ let f = d;
404
+ f && u.type === l || (f = r.get(u.type) || null, d = f, l = u.type), f && f.Kt(u.params, u.state);
384
405
  }
385
- n(h);
406
+ h(d);
407
+ }
408
+ Jt(t, e, r, i) {
409
+ if (!i) return;
410
+ const { x: s, y: n, width: o, height: h, shader: l, uniforms: d } = e, u = this.S;
411
+ l.tt(), i.Qt();
412
+ const f = this.te(Math.max(1, Math.floor(o)), Math.max(1, Math.floor(h)));
413
+ f.V(), l.tt(), d && Object.keys(d).length && l.st(d);
414
+ {
415
+ const y = U(u) || u.getParameter(u.VIEWPORT);
416
+ l.rt("u_aspectRatio") && l.it("u_aspectRatio", y[2] / y[3]), l.rt("u_viewportSize") && l.it("u_viewportSize", [y[2], y[3]]);
417
+ }
418
+ const g = { ...r, rotationX: 0, rotationY: 0, rotationZ: 0 };
419
+ if (i.Kt({ x: 0, y: 0, width: f.width, height: f.height }, g), i.Yt()) {
420
+ const y = i.unitGeometry, P = i.unitBuffer;
421
+ try {
422
+ this.Vt.kt(l.ot, i.type + "", y, P), i.batch.qt(l), i.batch.Zt(y.primitiveType, y.vertexCount);
423
+ } finally {
424
+ i.batch.Nt(l), this.Vt.Ut(), i.Qt();
425
+ }
426
+ }
427
+ f.O();
428
+ const p = this.ee();
429
+ p.tt(), p.st({ u_src0: f.textures[0], u_src1: f.textures[1], u_src2: f.textures[2], u_src3: f.textures[3], u_src4: f.textures[4], u_srcSize: [f.width, f.height] });
430
+ const m = U(u) || u.getParameter(u.VIEWPORT);
431
+ p.rt("u_aspectRatio") && p.it("u_aspectRatio", m[2] / m[3]), p.rt("u_viewportSize") && p.it("u_viewportSize", [m[2], m[3]]);
432
+ const E = Math.floor(s), v = Math.floor(n), b = Math.max(1, Math.floor(o)), _ = Math.max(1, Math.floor(h));
433
+ if (i.Kt({ x: E, y: v, width: b, height: _ }, r), i.Yt()) {
434
+ const y = i.unitGeometry, P = i.unitBuffer;
435
+ try {
436
+ this.Vt.kt(p.ot, i.type + "", y, P), i.batch.qt(p), i.batch.Zt(y.primitiveType, y.vertexCount);
437
+ } finally {
438
+ i.batch.Nt(p), this.Vt.Ut(), i.Qt();
439
+ }
440
+ }
441
+ t.shader.tt();
442
+ }
443
+ ee() {
444
+ return this.Ot || (this.Ot = new G(this.S, O, `#version 300 es
445
+ precision highp float;in vec2 v_uv;uniform sampler2D u_src0;uniform sampler2D u_src1;uniform sampler2D u_src2;uniform sampler2D u_src3;uniform sampler2D u_src4;uniform vec2 u_srcSize;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 uvTex=v_uv*u_srcSize;vec2 uvQ=(floor(uvTex)+0.5f)/u_srcSize;o_character=texture(u_src0,uvQ);o_primaryColor=texture(u_src1,uvQ);o_secondaryColor=texture(u_src2,uvQ);o_rotation=texture(u_src3,uvQ);o_transform=texture(u_src4,uvQ);}`)), this.Ot;
446
+ }
447
+ te(t, e) {
448
+ return this.jt && this.Ht && this.Ht.w === t && this.Ht.h === e || (this.jt && this.jt.j(), this.jt = new $(this.S, t, e, 5), this.Ht = { w: t, h: e }), this.jt;
386
449
  }
387
450
  }
388
451
  class it {
389
452
  constructor() {
390
- c(this, "jt", []);
391
- c(this, "Ht", 1);
392
- c(this, "qt", 0);
393
- }
394
- Nt(t) {
395
- if (this.qt >= this.jt.length) {
396
- const i = { id: this.Ht++, type: t, params: {}, state: { lineWeight: 1, rotation: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
397
- this.jt.push(i);
453
+ c(this, "se", []);
454
+ c(this, "ie", 1);
455
+ c(this, "re", 0);
456
+ }
457
+ ne(t) {
458
+ if (this.re >= this.se.length) {
459
+ const r = { id: this.ie++, type: t, params: {}, state: { lineWeight: 1, rotationX: 0, rotationY: 0, rotationZ: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
460
+ this.se.push(r);
398
461
  }
399
- const e = this.jt[this.qt];
400
- switch (e.id = this.Ht++, e.type = t, t) {
401
- case R.RECTANGLE:
402
- case R.ELLIPSE:
462
+ const e = this.se[this.re];
463
+ switch (e.id = this.ie++, e.type = t, t) {
464
+ case x.RECTANGLE:
465
+ case x.ELLIPSE:
403
466
  e.params && "width" in e.params || (e.params = { x: 0, y: 0, width: 0, height: 0 });
404
467
  break;
405
- case R.ARC:
468
+ case x.CUSTOM:
469
+ e.params && "shader" in e.params || (e.params = { x: 0, y: 0, width: 0, height: 0, shader: void 0, uniforms: {} });
470
+ break;
471
+ case x.ARC:
406
472
  e.params && "start" in e.params || (e.params = { x: 0, y: 0, width: 0, height: 0, start: 0, stop: 0 });
407
473
  break;
408
- case R.LINE:
474
+ case x.LINE:
409
475
  e.params && "x2" in e.params || (e.params = { x1: 0, y1: 0, x2: 0, y2: 0, thickness: void 0 });
410
476
  break;
411
- case R.TRIANGLE:
477
+ case x.TRIANGLE:
412
478
  e.params && "x3" in e.params || (e.params = { x1: 0, y1: 0, x2: 0, y2: 0, x3: 0, y3: 0 });
413
479
  break;
414
- case R.BEZIER_CURVE:
480
+ case x.BEZIER_CURVE:
415
481
  e.params && "cp2y" in e.params || (e.params = { x1: 0, y1: 0, cp1x: 0, cp1y: 0, cp2x: 0, cp2y: 0, x2: 0, y2: 0, thickness: void 0 });
416
482
  break;
417
483
  default:
418
484
  e.params || (e.params = {});
419
485
  }
420
- return this.qt++, e;
486
+ return this.re++, e;
487
+ }
488
+ oe(t, e, r, i, s) {
489
+ const n = this.ne(x.RECTANGLE);
490
+ return n.params.x = t, n.params.y = e, n.params.width = r, n.params.height = i, s.Rt(n.state), n.id;
421
491
  }
422
- Xt(t, e, i, r, s) {
423
- const n = this.Nt(R.RECTANGLE);
424
- return n.params.x = t, n.params.y = e, n.params.width = i, n.params.height = r, s.wt(n.state), n.id;
492
+ ae(t, e, r, i, s, n, o) {
493
+ const h = this.ne(x.CUSTOM);
494
+ return h.params.x = t, h.params.y = e, h.params.width = r, h.params.height = i, h.params.shader = s, h.params.uniforms = n, o.Rt(h.state), h.id;
425
495
  }
426
- Yt(t, e, i, r, s, n) {
427
- const o = this.Nt(R.LINE);
428
- return o.params.x1 = t, o.params.y1 = e, o.params.x2 = i, o.params.y2 = r, o.params.thickness = s, n.wt(o.state), o.id;
496
+ he(t, e, r, i, s, n) {
497
+ const o = this.ne(x.LINE);
498
+ return o.params.x1 = t, o.params.y1 = e, o.params.x2 = r, o.params.y2 = i, o.params.thickness = s, n.Rt(o.state), o.id;
429
499
  }
430
- Qt(t, e, i, r, s) {
431
- const n = this.Nt(R.ELLIPSE);
432
- return n.params.x = t, n.params.y = e, n.params.width = i, n.params.height = r, s.wt(n.state), n.id;
500
+ ce(t, e, r, i, s) {
501
+ const n = this.ne(x.ELLIPSE);
502
+ return n.params.x = t, n.params.y = e, n.params.width = r, n.params.height = i, s.Rt(n.state), n.id;
433
503
  }
434
- Zt(t, e, i, r, s, n, o) {
435
- const h = this.Nt(R.ARC);
436
- return h.params.x = t, h.params.y = e, h.params.width = i, h.params.height = r, h.params.start = s, h.params.stop = n, o.wt(h.state), h.id;
504
+ le(t, e, r, i, s, n, o) {
505
+ const h = this.ne(x.ARC);
506
+ return h.params.x = t, h.params.y = e, h.params.width = r, h.params.height = i, h.params.start = s, h.params.stop = n, o.Rt(h.state), h.id;
437
507
  }
438
- Jt(t, e, i, r, s, n, o) {
439
- const h = this.Nt(R.TRIANGLE);
440
- return h.params.x1 = t, h.params.y1 = e, h.params.x2 = i, h.params.y2 = r, h.params.x3 = s, h.params.y3 = n, o.wt(h.state), h.id;
508
+ ue(t, e, r, i, s, n, o) {
509
+ const h = this.ne(x.TRIANGLE);
510
+ return h.params.x1 = t, h.params.y1 = e, h.params.x2 = r, h.params.y2 = i, h.params.x3 = s, h.params.y3 = n, o.Rt(h.state), h.id;
441
511
  }
442
- Kt(t, e, i, r, s, n, o, h, l, u) {
443
- const f = this.Nt(R.BEZIER_CURVE);
444
- return f.params.x1 = t, f.params.y1 = e, f.params.cp1x = i, f.params.cp1y = r, f.params.cp2x = s, f.params.cp2y = n, f.params.x2 = o, f.params.y2 = h, f.params.thickness = l, u.wt(f.state), f.id;
512
+ fe(t, e, r, i, s, n, o, h, l, d) {
513
+ const u = this.ne(x.BEZIER_CURVE);
514
+ return u.params.x1 = t, u.params.y1 = e, u.params.cp1x = r, u.params.cp1y = i, u.params.cp2x = s, u.params.cp2y = n, u.params.x2 = o, u.params.y2 = h, u.params.thickness = l, d.Rt(u.state), u.id;
445
515
  }
446
516
  get length() {
447
- return this.qt;
517
+ return this.re;
448
518
  }
449
519
  get isEmpty() {
450
- return this.qt === 0;
520
+ return this.re === 0;
451
521
  }
452
- te() {
453
- this.qt = 0;
522
+ de() {
523
+ this.re = 0;
454
524
  }
455
525
  [Symbol.iterator]() {
456
526
  let t = 0;
457
- const e = this.qt, i = this.jt;
458
- return { next: () => t < e ? { value: i[t++], done: !1 } : { value: void 0, done: !0 } };
527
+ const e = this.re, r = this.se;
528
+ return { next: () => t < e ? { value: r[t++], done: !1 } : { value: void 0, done: !0 } };
459
529
  }
460
530
  }
461
- const A = class A {
462
- static ee(t, e, i = 0) {
463
- var n, o, h, l, u, f, d, g, p, m;
464
- const r = e || new Float32Array(A.FLOATS_PER_INSTANCE);
465
- let s = i;
466
- return r[s++] = t.position[0], r[s++] = t.position[1], r[s++] = t.size[0], r[s++] = t.size[1], r[s++] = t.character[0], r[s++] = t.character[1], r[s++] = t.character[2], r[s++] = t.primaryColor[0], r[s++] = t.primaryColor[1], r[s++] = t.primaryColor[2], r[s++] = t.primaryColor[3], r[s++] = t.secondaryColor[0], r[s++] = t.secondaryColor[1], r[s++] = t.secondaryColor[2], r[s++] = t.secondaryColor[3], r[s++] = t.rotation[0], r[s++] = t.rotation[1], r[s++] = t.transform[0], r[s++] = t.transform[1], r[s++] = t.transform[2], r[s++] = t.globalRotation, r[s++] = t.rotationCenter[0], r[s++] = t.rotationCenter[1], r[s++] = ((n = t.arcAngles) == null ? void 0 : n[0]) || 0, r[s++] = ((o = t.arcAngles) == null ? void 0 : o[1]) || 0, r[s++] = ((h = t.bezierControlPoint1) == null ? void 0 : h[0]) || 0, r[s++] = ((l = t.bezierControlPoint1) == null ? void 0 : l[1]) || 0, r[s++] = ((u = t.bezierControlPoint2) == null ? void 0 : u[0]) || 0, r[s++] = ((f = t.bezierControlPoint2) == null ? void 0 : f[1]) || 0, r[s++] = ((d = t.bezierStartPoint) == null ? void 0 : d[0]) || 0, r[s++] = ((g = t.bezierStartPoint) == null ? void 0 : g[1]) || 0, r[s++] = ((p = t.bezierEndPoint) == null ? void 0 : p[0]) || 0, r[s++] = ((m = t.bezierEndPoint) == null ? void 0 : m[1]) || 0, r;
467
- }
468
- static se(t) {
469
- const e = t.length * A.FLOATS_PER_INSTANCE, i = new Float32Array(e);
470
- for (let r = 0; r < t.length; r++) {
471
- const s = r * A.FLOATS_PER_INSTANCE;
472
- A.ee(t[r], i, s);
531
+ const T = class T {
532
+ static pe(t, e, r = 0) {
533
+ var n, o, h, l, d, u, f, g, p, m;
534
+ const i = e || new Float32Array(T.FLOATS_PER_INSTANCE);
535
+ let s = r;
536
+ return i[s++] = t.position[0], i[s++] = t.position[1], i[s++] = t.size[0], i[s++] = t.size[1], i[s++] = t.character[0], i[s++] = t.character[1], i[s++] = t.character[2], i[s++] = t.primaryColor[0], i[s++] = t.primaryColor[1], i[s++] = t.primaryColor[2], i[s++] = t.primaryColor[3], i[s++] = t.secondaryColor[0], i[s++] = t.secondaryColor[1], i[s++] = t.secondaryColor[2], i[s++] = t.secondaryColor[3], i[s++] = t.rotation[0], i[s++] = t.rotation[1], i[s++] = t.transform[0], i[s++] = t.transform[1], i[s++] = t.transform[2], i[s++] = t.globalRotationX, i[s++] = t.globalRotationY, i[s++] = t.globalRotationZ, i[s++] = t.rotationCenter[0], i[s++] = t.rotationCenter[1], i[s++] = ((n = t.arcAngles) == null ? void 0 : n[0]) || 0, i[s++] = ((o = t.arcAngles) == null ? void 0 : o[1]) || 0, i[s++] = ((h = t.bezierControlPoint1) == null ? void 0 : h[0]) || 0, i[s++] = ((l = t.bezierControlPoint1) == null ? void 0 : l[1]) || 0, i[s++] = ((d = t.bezierControlPoint2) == null ? void 0 : d[0]) || 0, i[s++] = ((u = t.bezierControlPoint2) == null ? void 0 : u[1]) || 0, i[s++] = ((f = t.bezierStartPoint) == null ? void 0 : f[0]) || 0, i[s++] = ((g = t.bezierStartPoint) == null ? void 0 : g[1]) || 0, i[s++] = ((p = t.bezierEndPoint) == null ? void 0 : p[0]) || 0, i[s++] = ((m = t.bezierEndPoint) == null ? void 0 : m[1]) || 0, i;
537
+ }
538
+ static _e(t) {
539
+ const e = t.length * T.FLOATS_PER_INSTANCE, r = new Float32Array(e);
540
+ for (let i = 0; i < t.length; i++) {
541
+ const s = i * T.FLOATS_PER_INSTANCE;
542
+ T.pe(t[i], r, s);
473
543
  }
474
- return i;
544
+ return r;
475
545
  }
476
546
  };
477
- c(A, "BYTES_PER_INSTANCE", 132), c(A, "FLOATS_PER_INSTANCE", 33);
478
- let S = A;
479
- const x = class x {
547
+ c(T, "BYTES_PER_INSTANCE", 140), c(T, "FLOATS_PER_INSTANCE", 35);
548
+ let F = T;
549
+ const C = class C {
480
550
  };
481
- c(x, "STRIDE", S.BYTES_PER_INSTANCE), c(x, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 1, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 84, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 92, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: x.STRIDE, offset: 124, divisor: 1 } });
482
- let D = x;
483
- class rt {
484
- constructor(t, e = 1e3, i = 1.5) {
485
- c(this, "R");
486
- c(this, "ie", []);
487
- c(this, "re");
488
- c(this, "ne");
489
- c(this, "oe", null);
490
- c(this, "ae", !0);
491
- c(this, "he", 0);
492
- c(this, "ce", /* @__PURE__ */ new Map());
493
- c(this, "le", null);
494
- this.R = t, this.re = e, this.ne = i, this.ue();
495
- }
496
- Ut(t) {
497
- const e = this.ie.length;
498
- return this.ie.push(t), this.ae = !0, e;
551
+ c(C, "STRIDE", F.BYTES_PER_INSTANCE), c(C, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 92, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 124, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 132, divisor: 1 } });
552
+ let M = C;
553
+ class st {
554
+ constructor(t, e = 1e3, r = 1.5) {
555
+ c(this, "S");
556
+ c(this, "ge", []);
557
+ c(this, "me");
558
+ c(this, "ve");
559
+ c(this, "xe", null);
560
+ c(this, "Ce", !0);
561
+ c(this, "ye", 0);
562
+ c(this, "we", /* @__PURE__ */ new Map());
563
+ c(this, "$e", null);
564
+ this.S = t, this.me = e, this.ve = r, this.be();
565
+ }
566
+ Kt(t) {
567
+ const e = this.ge.length;
568
+ return this.ge.push(t), this.Ce = !0, e;
499
569
  }
500
570
  get count() {
501
- return this.ie.length;
571
+ return this.ge.length;
502
572
  }
503
573
  get isEmpty() {
504
- return this.ie.length === 0;
574
+ return this.ge.length === 0;
505
575
  }
506
576
  clear() {
507
- this.ie.length = 0, this.ae = !0;
508
- }
509
- fe(t) {
510
- if (t <= this.re) return;
511
- const e = Math.ceil(t * this.ne);
512
- this.re = e, this.ue(), console.log(`InstanceBatch: Grew buffer capacity to ${e} instances`);
513
- }
514
- ue() {
515
- const t = this.R;
516
- if (this.oe && t.deleteBuffer(this.oe), this.oe = t.createBuffer(), !this.oe) throw Error("Failed to create instance buffer");
517
- const e = this.re * S.BYTES_PER_INSTANCE;
518
- t.bindBuffer(t.ARRAY_BUFFER, this.oe), t.bufferData(t.ARRAY_BUFFER, e, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.ae = !0, this.he = 0;
519
- }
520
- de() {
521
- if (!this.ae || this.ie.length === 0) return;
522
- const t = this.R, e = this.ie.length;
523
- this.fe(e), (!this.le || this.le.length < e * S.FLOATS_PER_INSTANCE) && (this.le = new Float32Array(e * S.FLOATS_PER_INSTANCE));
524
- const i = S.se(this.ie);
525
- t.bindBuffer(t.ARRAY_BUFFER, this.oe), e <= this.he ? t.bufferSubData(t.ARRAY_BUFFER, 0, i) : t.bufferData(t.ARRAY_BUFFER, i, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.ae = !1, this.he = e;
526
- }
527
- pe(t) {
528
- let e = this.ce.get(t);
577
+ this.ge.length = 0, this.Ce = !0;
578
+ }
579
+ ze(t) {
580
+ if (t <= this.me) return;
581
+ const e = Math.ceil(t * this.ve);
582
+ this.me = e, this.be();
583
+ }
584
+ be() {
585
+ const t = this.S;
586
+ this.xe && t.deleteBuffer(this.xe), this.xe = t.createBuffer();
587
+ const e = this.me * F.BYTES_PER_INSTANCE;
588
+ t.bindBuffer(t.ARRAY_BUFFER, this.xe), t.bufferData(t.ARRAY_BUFFER, e, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.Ce = !0, this.ye = 0;
589
+ }
590
+ Re() {
591
+ if (!this.Ce || this.ge.length === 0) return;
592
+ const t = this.S, e = this.ge.length;
593
+ this.ze(e), (!this.$e || this.$e.length < e * F.FLOATS_PER_INSTANCE) && (this.$e = new Float32Array(e * F.FLOATS_PER_INSTANCE));
594
+ const r = F._e(this.ge);
595
+ t.bindBuffer(t.ARRAY_BUFFER, this.xe), e <= this.ye ? t.bufferSubData(t.ARRAY_BUFFER, 0, r) : t.bufferData(t.ARRAY_BUFFER, r, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.Ce = !1, this.ye = e;
596
+ }
597
+ Te(t) {
598
+ let e = this.we.get(t);
529
599
  if (!e) {
530
600
  e = /* @__PURE__ */ new Map();
531
- const i = this.R;
532
- for (const r in D.ATTRIBUTES) {
533
- const s = i.getAttribLocation(t, r);
534
- s !== -1 && e.set(r, s);
601
+ const r = this.S;
602
+ for (const i in M.ATTRIBUTES) {
603
+ const s = r.getAttribLocation(t, i);
604
+ s !== -1 && e.set(i, s);
535
605
  }
536
- this.ce.set(t, e);
606
+ this.we.set(t, e);
537
607
  }
538
608
  return e;
539
609
  }
540
- Wt(t) {
541
- if (!this.oe || this.ie.length === 0) return;
542
- const e = this.R, i = t.rt;
543
- if (!i) return void console.warn("InstanceBatch: Cannot bind attributes - invalid shader program");
544
- this.de();
545
- const r = this.pe(i);
546
- e.bindBuffer(e.ARRAY_BUFFER, this.oe);
547
- for (const [s, n] of r) {
548
- const o = D.ATTRIBUTES[s];
610
+ qt(t) {
611
+ if (!this.xe || this.ge.length === 0) return;
612
+ const e = this.S, r = t.ot;
613
+ this.Re();
614
+ const i = this.Te(r);
615
+ e.bindBuffer(e.ARRAY_BUFFER, this.xe);
616
+ for (const [s, n] of i) {
617
+ const o = M.ATTRIBUTES[s];
549
618
  o && (e.enableVertexAttribArray(n), e.vertexAttribPointer(n, o.size, o.type, o.normalized, o.stride, o.offset), e.vertexAttribDivisor(n, o.divisor));
550
619
  }
551
620
  }
552
- Vt(t) {
553
- const e = this.R, i = this.pe(t.rt);
554
- for (const [, r] of i) e.disableVertexAttribArray(r), e.vertexAttribDivisor(r, 0);
621
+ Nt(t) {
622
+ const e = this.S, r = this.Te(t.ot);
623
+ for (const [, i] of r) e.disableVertexAttribArray(i), e.vertexAttribDivisor(i, 0);
555
624
  }
556
- kt(t, e) {
557
- this.ie.length !== 0 && this.R.drawArraysInstanced(t, 0, e, this.ie.length);
625
+ Zt(t, e) {
626
+ this.ge.length !== 0 && this.S.drawArraysInstanced(t, 0, e, this.ge.length);
558
627
  }
559
- U() {
560
- const t = this.R;
561
- this.oe && (t.deleteBuffer(this.oe), this.oe = null), this.ie.length = 0, this.ce.clear(), this.le = null;
628
+ j() {
629
+ const t = this.S;
630
+ this.xe && (t.deleteBuffer(this.xe), this.xe = null), this.ge.length = 0, this.we.clear(), this.$e = null;
562
631
  }
563
632
  }
564
- class F {
565
- constructor(t, e, i, r) {
566
- c(this, "R");
567
- c(this, "ge");
568
- c(this, "_e");
569
- c(this, "me");
570
- c(this, "ve", null);
571
- this.R = t, this.ge = e, this._e = i, this.me = r;
572
- const s = this.R.createBuffer();
633
+ class L {
634
+ constructor(t, e, r, i) {
635
+ c(this, "S");
636
+ c(this, "Se");
637
+ c(this, "Me");
638
+ c(this, "Fe");
639
+ c(this, "Ge", null);
640
+ this.S = t, this.Se = e, this.Me = r, this.Fe = i;
641
+ const s = this.S.createBuffer();
573
642
  if (!s) throw Error("Failed to create unit geometry buffer");
574
- this.R.bindBuffer(this.R.ARRAY_BUFFER, s), this.R.bufferData(this.R.ARRAY_BUFFER, this.me.vertices, this.R.STATIC_DRAW), this.R.bindBuffer(this.R.ARRAY_BUFFER, null), this.ve = s;
643
+ this.S.bindBuffer(this.S.ARRAY_BUFFER, s), this.S.bufferData(this.S.ARRAY_BUFFER, this.Fe.vertices, this.S.STATIC_DRAW), this.S.bindBuffer(this.S.ARRAY_BUFFER, null), this.Ge = s;
575
644
  }
576
645
  get type() {
577
- return this._e;
646
+ return this.Me;
578
647
  }
579
648
  get unitGeometry() {
580
- return this.me;
649
+ return this.Fe;
581
650
  }
582
651
  get unitBuffer() {
583
- return this.ve;
652
+ return this.Ge;
584
653
  }
585
654
  get batch() {
586
- return this.ge;
655
+ return this.Se;
587
656
  }
588
- Ot() {
589
- this.ge.clear();
657
+ Qt() {
658
+ this.Se.clear();
590
659
  }
591
- Et() {
592
- return !this.ge.isEmpty;
660
+ Yt() {
661
+ return !this.Se.isEmpty;
593
662
  }
594
- U() {
595
- this.ge.U(), this.ve && (this.R.deleteBuffer(this.ve), this.ve = null);
663
+ j() {
664
+ this.Se.j(), this.Ge && (this.S.deleteBuffer(this.Ge), this.Ge = null);
596
665
  }
597
- xe(t, e, i, r, s) {
598
- const n = this.Ce(t, e, i, r, s.rotation || 0);
599
- return { position: [t, e], size: [i, r], character: s.character || [0, 0, 0], primaryColor: s.charColor || [1, 1, 1, 1], secondaryColor: s.bgColor || [0, 0, 0, 1], rotation: s.charRotation || [0, 0], transform: [s.invert ? 1 : 0, s.flipHorizontally ? 1 : 0, s.flipVertically ? 1 : 0], globalRotation: n.radians, rotationCenter: [n.centerX, n.centerY] };
666
+ De(t, e, r, i, s) {
667
+ const n = this.Pe(t, e, r, i, s.rotationX || 0, s.rotationY || 0, s.rotationZ || 0);
668
+ return { position: [t, e], size: [r, i], character: s.character || [0, 0, 0], primaryColor: s.charColor || [1, 1, 1, 1], secondaryColor: s.bgColor || [0, 0, 0, 1], rotation: s.charRotation || [0, 0], transform: [s.invert ? 1 : 0, s.flipHorizontally ? 1 : 0, s.flipVertically ? 1 : 0], globalRotationX: n.radiansX, globalRotationY: n.radiansY, globalRotationZ: n.radiansZ, rotationCenter: [n.centerX, n.centerY] };
600
669
  }
601
- ye(t, e) {
602
- const i = I(this.R) || [0, 0, this.R.canvas.width, this.R.canvas.height];
603
- return { nx: t / i[2] * 2 - 1, ny: 1 - e / i[3] * 2 };
670
+ Ae(t, e) {
671
+ const r = U(this.S) || [0, 0, this.S.canvas.width, this.S.canvas.height];
672
+ return { nx: t / r[2] * 2 - 1, ny: 1 - e / r[3] * 2 };
604
673
  }
605
- we(t, e, i) {
606
- const r = this.ye(e, i);
607
- t.rotationCenter = [r.nx, r.ny];
674
+ Be(t, e, r) {
675
+ const i = this.Ae(e, r);
676
+ t.rotationCenter = [i.nx, i.ny];
608
677
  }
609
- Ce(t, e, i, r, s) {
610
- const n = I(this.R) || [0, 0, this.R.canvas.width, this.R.canvas.height], o = n[2], h = n[3];
611
- return { centerX: (t + i / 2) / o * 2 - 1, centerY: 1 - (e + r / 2) / h * 2, radians: -s * Math.PI / 180, aspectRatio: o / h };
678
+ Pe(t, e, r, i, s, n, o) {
679
+ const h = U(this.S) || [0, 0, this.S.canvas.width, this.S.canvas.height], l = h[2], d = h[3];
680
+ return { centerX: (t + r / 2) / l * 2 - 1, centerY: 1 - (e + i / 2) / d * 2, radiansX: -s * Math.PI / 180, radiansY: -n * Math.PI / 180, radiansZ: -o * Math.PI / 180, aspectRatio: l / d };
612
681
  }
613
682
  }
614
- const st = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
615
- class nt extends F {
683
+ const nt = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
684
+ class ot extends L {
616
685
  constructor(t, e) {
617
- super(t, e, R.RECTANGLE, st);
686
+ super(t, e, x.RECTANGLE, nt);
618
687
  }
619
- Ut(t, e) {
620
- const i = this.xe(t.x, t.y, t.width, t.height, e);
621
- return this.ge.Ut(i);
688
+ Kt(t, e) {
689
+ const r = this.De(t.x, t.y, t.width, t.height, e);
690
+ return this.Se.Kt(r);
622
691
  }
623
692
  }
624
- const ot = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
625
- class at extends F {
693
+ const at = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
694
+ class ht extends L {
626
695
  constructor(t, e) {
627
- super(t, e, R.LINE, ot);
696
+ super(t, e, x.LINE, at);
628
697
  }
629
- Ut(t, e) {
630
- const i = t.x2 - t.x1, r = t.y2 - t.y1, s = Math.hypot(i, r), n = Math.atan2(r, i), o = t.thickness || e.lineWeight || 1, h = t.x1 + i / 2, l = t.y1 + r / 2, u = h - s / 2, f = l, d = { character: e.character, charColor: e.charColor, bgColor: e.bgColor, charRotation: e.charRotation, flipHorizontally: e.flipHorizontally, flipVertically: e.flipVertically, invert: e.invert, rotation: (e.rotation || 0) + 180 * n / Math.PI, lineWeight: o }, g = this.xe(u, f, s, o, d);
631
- return this.we(g, h, l), this.ge.Ut(g);
698
+ Kt(t, e) {
699
+ const r = t.x2 - t.x1, i = t.y2 - t.y1, s = Math.hypot(r, i), n = Math.atan2(i, r), o = t.thickness || e.lineWeight || 1, h = t.x1 + r / 2, l = t.y1 + i / 2, d = h - s / 2, u = l, f = { character: e.character, charColor: e.charColor, bgColor: e.bgColor, charRotation: e.charRotation, flipHorizontally: e.flipHorizontally, flipVertically: e.flipVertically, invert: e.invert, rotationX: e.rotationX || 0, rotationY: e.rotationY || 0, rotationZ: (e.rotationZ || 0) + 180 * n / Math.PI, lineWeight: o }, g = this.De(d, u, s, o, f);
700
+ return this.Be(g, h, l), this.Se.Kt(g);
632
701
  }
633
702
  }
634
- const ht = { vertices: function(a = 32) {
703
+ const ct = { vertices: function(a = 32) {
635
704
  const t = [], e = 2 * Math.PI / a;
636
- for (let i = 0; i < a; i++) {
637
- const r = i * e, s = (i + 1) % a * e, n = Math.cos(r), o = Math.sin(r), h = 0.5 * (n + 1), l = 0.5 * (o + 1), u = Math.cos(s), f = Math.sin(s), d = 0.5 * (u + 1), g = 0.5 * (f + 1);
638
- t.push(0, 0, 0.5, 0.5, n, o, h, l, u, f, d, g);
705
+ for (let r = 0; r < a; r++) {
706
+ const i = r * e, s = (r + 1) % a * e, n = Math.cos(i), o = Math.sin(i), h = 0.5 * (n + 1), l = 0.5 * (o + 1), d = Math.cos(s), u = Math.sin(s), f = 0.5 * (d + 1), g = 0.5 * (u + 1);
707
+ t.push(0, 0, 0.5, 0.5, n, o, h, l, d, u, f, g);
639
708
  }
640
709
  return new Float32Array(t);
641
710
  }(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
642
- class ct extends F {
711
+ class lt extends L {
643
712
  constructor(t, e) {
644
- super(t, e, R.ELLIPSE, ht);
713
+ super(t, e, x.ELLIPSE, ct);
645
714
  }
646
- Ut(t, e) {
647
- const i = this.xe(t.x, t.y, t.width, t.height, e);
648
- return this.we(i, t.x, t.y), this.ge.Ut(i);
715
+ Kt(t, e) {
716
+ const r = this.De(t.x, t.y, t.width, t.height, e);
717
+ return this.Be(r, t.x, t.y), this.Se.Kt(r);
649
718
  }
650
719
  }
651
- let lt = { vertices: function(a) {
720
+ let ut = { vertices: function(a) {
652
721
  const t = [];
653
722
  for (let e = 0; e < a; e++) {
654
- const i = e / a, r = (e + 1) / a;
655
- t.push(i, 0, i, 0, i, 1, i, 1, r, 1, r, 1);
723
+ const r = e / a, i = (e + 1) / a;
724
+ t.push(r, 0, r, 0, r, 1, r, 1, i, 1, i, 1);
656
725
  }
657
726
  return new Float32Array(t);
658
727
  }(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
659
- class ut extends F {
728
+ class ft extends L {
660
729
  constructor(t, e) {
661
- super(t, e, R.ARC, lt);
730
+ super(t, e, x.ARC, ut);
662
731
  }
663
- Ut(t, e) {
664
- const i = t.x - t.width / 2, r = t.y - t.height / 2, s = t.start * Math.PI / 180, n = t.stop * Math.PI / 180, o = this.xe(i, r, t.width, t.height, e);
665
- return this.we(o, t.x, t.y), o.arcAngles = [s, n], this.ge.Ut(o);
732
+ Kt(t, e) {
733
+ const r = t.x - t.width / 2, i = t.y - t.height / 2, s = t.start * Math.PI / 180, n = t.stop * Math.PI / 180, o = this.De(r, i, t.width, t.height, e);
734
+ return this.Be(o, t.x, t.y), o.arcAngles = [s, n], this.Se.Kt(o);
666
735
  }
667
736
  }
668
- const ft = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
669
- class dt extends F {
737
+ const dt = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
738
+ class pt extends L {
670
739
  constructor(t, e) {
671
- super(t, e, R.TRIANGLE, ft);
740
+ super(t, e, x.TRIANGLE, dt);
672
741
  }
673
- Ut(t, e) {
674
- const i = Math.min(t.x1, t.x2, t.x3), r = Math.max(t.x1, t.x2, t.x3), s = Math.min(t.y1, t.y2, t.y3), n = r - i, o = Math.max(t.y1, t.y2, t.y3) - s, h = this.xe(i, s, n, o, e), l = i + 0.5 * n, u = s + o * (1 / 3);
675
- return this.we(h, l, u), this.ge.Ut(h);
742
+ Kt(t, e) {
743
+ const r = Math.min(t.x1, t.x2, t.x3), i = Math.max(t.x1, t.x2, t.x3), s = Math.min(t.y1, t.y2, t.y3), n = i - r, o = Math.max(t.y1, t.y2, t.y3) - s, h = this.De(r, s, n, o, e), l = r + 0.5 * n, d = s + o * (1 / 3);
744
+ return this.Be(h, l, d), this.Se.Kt(h);
676
745
  }
677
746
  }
678
- function W(a, t, e, i, r) {
747
+ function V(a, t, e, r, i) {
679
748
  const s = 1 - a, n = s * s, o = a * a;
680
- return n * s * t + 3 * n * a * e + 3 * s * o * i + o * a * r;
749
+ return n * s * t + 3 * n * a * e + 3 * s * o * r + o * a * i;
681
750
  }
682
- const pt = { vertices: function(a = 16) {
751
+ const gt = { vertices: function(a = 16) {
683
752
  const t = [];
684
753
  for (let e = 0; e < a; e++) {
685
- const i = e / a, r = (e + 1) / a;
686
- t.push(i, -0.5, i, 0), t.push(r, -0.5, r, 0), t.push(i, 0.5, i, 1), t.push(i, 0.5, i, 1), t.push(r, -0.5, r, 0), t.push(r, 0.5, r, 1);
754
+ const r = e / a, i = (e + 1) / a;
755
+ t.push(r, -0.5, r, 0), t.push(i, -0.5, i, 0), t.push(r, 0.5, r, 1), t.push(r, 0.5, r, 1), t.push(i, -0.5, i, 0), t.push(i, 0.5, i, 1);
687
756
  }
688
757
  return new Float32Array(t);
689
758
  }(16), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
690
- class gt extends F {
759
+ class mt extends L {
691
760
  constructor(t, e) {
692
- super(t, e, R.BEZIER_CURVE, pt);
761
+ super(t, e, x.BEZIER_CURVE, gt);
693
762
  }
694
- Ut(t, e) {
695
- const i = e.lineWeight || 1, r = W(0.5, t.x1, t.cp1x, t.cp2x, t.x2), s = W(0.5, t.y1, t.cp1y, t.cp2y, t.y2), n = { character: e.character, charColor: e.charColor, bgColor: e.bgColor, charRotation: e.charRotation, flipHorizontally: e.flipHorizontally, flipVertically: e.flipVertically, invert: e.invert, rotation: e.rotation || 0, lineWeight: i }, o = this.xe(0, 0, 1, i, n);
696
- return this.we(o, r, s), o.bezierStartPoint = [t.x1, t.y1], o.bezierControlPoint1 = [t.cp1x, t.cp1y], o.bezierControlPoint2 = [t.cp2x, t.cp2y], o.bezierEndPoint = [t.x2, t.y2], this.ge.Ut(o);
763
+ Kt(t, e) {
764
+ const r = e.lineWeight || 1, i = V(0.5, t.x1, t.cp1x, t.cp2x, t.x2), s = V(0.5, t.y1, t.cp1y, t.cp2y, t.y2), n = { character: e.character, charColor: e.charColor, bgColor: e.bgColor, charRotation: e.charRotation, flipHorizontally: e.flipHorizontally, flipVertically: e.flipVertically, invert: e.invert, rotationX: e.rotationX || 0, rotationY: e.rotationY || 0, rotationZ: e.rotationZ || 0, lineWeight: r }, o = this.De(0, 0, 1, r, n);
765
+ return this.Be(o, i, s), o.bezierStartPoint = [t.x1, t.y1], o.bezierControlPoint1 = [t.cp1x, t.cp1y], o.bezierControlPoint2 = [t.cp2x, t.cp2y], o.bezierEndPoint = [t.x2, t.y2], this.Se.Kt(o);
697
766
  }
698
767
  }
699
- class mt {
768
+ class xt {
700
769
  constructor(t) {
701
- c(this, "R");
702
- c(this, "$e", null);
703
- c(this, "be", null);
704
- c(this, "Te", null);
705
- c(this, "ze", /* @__PURE__ */ new Map());
706
- c(this, "Re");
707
- c(this, "Me");
708
- c(this, "Se");
709
- this.R = t, this.Se = new K(), this.Re = new et(t), this.Me = new it(), this.be = t.createBuffer(), t.bindBuffer(t.ARRAY_BUFFER, this.be), t.bufferData(t.ARRAY_BUFFER, new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, -1, 1, 0, 1, 1, 1, 1, -1, 1, 0, 1]), t.STATIC_DRAW), this.Te = t.createBuffer(), U(this.R, [0, 0, this.R.canvas.width, this.R.canvas.height]);
710
- }
711
- Ae(t) {
712
- let e = this.ze.get(t);
770
+ c(this, "S");
771
+ c(this, "Ie", null);
772
+ c(this, "Le", null);
773
+ c(this, "Ee", {});
774
+ c(this, "We", null);
775
+ c(this, "ke", /* @__PURE__ */ new Map());
776
+ c(this, "Ue");
777
+ c(this, "Ve");
778
+ c(this, "Oe");
779
+ this.S = t, this.Oe = new tt(), this.Ue = new rt(t), this.Ve = new it(), this.We = t.createBuffer(), D(this.S, [0, 0, this.S.canvas.width, this.S.canvas.height]);
780
+ }
781
+ je(t) {
782
+ let e = this.ke.get(t);
713
783
  if (e) return e;
714
- const i = new rt(this.R);
715
- return e = (0, { [R.RECTANGLE]: () => new nt(this.R, i), [R.LINE]: () => new at(this.R, i), [R.ELLIPSE]: () => new ct(this.R, i), [R.ARC]: () => new ut(this.R, i), [R.TRIANGLE]: () => new dt(this.R, i), [R.BEZIER_CURVE]: () => new gt(this.R, i) }[t])(), this.ze.set(t, e), e;
784
+ const r = new st(this.S);
785
+ return e = (0, { [x.RECTANGLE]: () => new ot(this.S, r), [x.LINE]: () => new ht(this.S, r), [x.ELLIPSE]: () => new lt(this.S, r), [x.ARC]: () => new ft(this.S, r), [x.TRIANGLE]: () => new pt(this.S, r), [x.BEZIER_CURVE]: () => new mt(this.S, r) }[t])(), this.ke.set(t, e), e;
716
786
  }
717
- Pe(t) {
718
- this.$e !== t && (this.$e = t, t.K());
787
+ He(t) {
788
+ this.Ie !== t && (this.Ie = t, t.tt());
719
789
  }
720
- Fe(t, e) {
721
- return new J(this.R, t, e);
790
+ Xe(t, e) {
791
+ return new G(this.S, t, e);
722
792
  }
723
- Ge(t, e, i, r) {
793
+ Ye(t) {
794
+ this.Le = t, t && (this.Ee = {});
795
+ }
796
+ qe(t, e) {
797
+ this.Ee[t] = e;
798
+ }
799
+ Ze(t) {
800
+ Object.assign(this.Ee, t);
801
+ }
802
+ Ne(t) {
803
+ return new G(this.S, O, t);
804
+ }
805
+ Qe(t, e, r, i) {
724
806
  var m;
725
- const s = this.R, n = s.canvas.width, o = s.canvas.height, h = t / n * 2 - 1, l = (t + i) / n * 2 - 1, u = 1 - e / o * 2, f = 1 - (e + r) / o * 2, d = new Float32Array([h, f, l, f, h, u, l, f, l, u, h, u]);
726
- s.bindBuffer(s.ARRAY_BUFFER, this.Te), s.bufferData(s.ARRAY_BUFFER, d, s.DYNAMIC_DRAW);
727
- const g = ((m = this.$e) == null ? void 0 : m.rt) || s.getParameter(s.CURRENT_PROGRAM), p = g ? s.getAttribLocation(g, "a_position") : -1;
807
+ const s = this.S, n = s.canvas.width, o = s.canvas.height, h = t / n * 2 - 1, l = (t + r) / n * 2 - 1, d = 1 - e / o * 2, u = 1 - (e + i) / o * 2, f = new Float32Array([h, u, l, u, h, d, l, u, l, d, h, d]);
808
+ s.bindBuffer(s.ARRAY_BUFFER, this.We), s.bufferData(s.ARRAY_BUFFER, f, s.DYNAMIC_DRAW);
809
+ const g = ((m = this.Ie) == null ? void 0 : m.ot) || s.getParameter(s.CURRENT_PROGRAM), p = g ? s.getAttribLocation(g, "a_position") : -1;
728
810
  p !== -1 && (s.enableVertexAttribArray(p), s.vertexAttribPointer(p, 2, s.FLOAT, !1, 8, 0)), s.drawArrays(s.TRIANGLES, 0, 6), p !== -1 && s.disableVertexAttribArray(p);
729
811
  }
730
- De(t, e, i, r) {
731
- this.Me.Xt(t, e, i, r, this.Se);
812
+ Je(t, e, r, i) {
813
+ this.Le ? (this.Ve.ae(t, e, r, i, this.Le, { ...this.Ee }, this.Oe), this.Le = null, this.Ee = {}) : this.Ve.oe(t, e, r, i, this.Oe);
732
814
  }
733
- Ie(t, e, i, r) {
734
- this.Me.Yt(t, e, i, r, this.Se.lineWeight, this.Se);
815
+ Ke(t, e, r, i) {
816
+ this.Ve.he(t, e, r, i, this.Oe.lineWeight, this.Oe);
735
817
  }
736
- Be(t, e, i, r) {
737
- this.Me.Qt(t, e, i, r, this.Se);
818
+ ts(t, e, r, i) {
819
+ this.Ve.ce(t, e, r, i, this.Oe);
738
820
  }
739
- Le(t, e, i, r, s, n) {
740
- this.Me.Jt(t, e, i, r, s, n, this.Se);
821
+ es(t, e, r, i, s, n) {
822
+ this.Ve.ue(t, e, r, i, s, n, this.Oe);
741
823
  }
742
- Ee(t, e, i, r, s, n, o, h) {
743
- const l = this.Se.lineWeight;
744
- this.Me.Kt(t, e, i, r, s, n, o, h, l, this.Se);
824
+ ss(t, e, r, i, s, n, o, h) {
825
+ const l = this.Oe.lineWeight;
826
+ this.Ve.fe(t, e, r, i, s, n, o, h, l, this.Oe);
745
827
  }
746
- We(t, e, i = 1, r = {}) {
747
- return new j(this.R, t, e, i, r);
828
+ rs(t, e, r = 1, i = {}) {
829
+ return new $(this.S, t, e, r, i);
748
830
  }
749
- ke(t, e, i, r, s, n) {
750
- this.Me.Zt(t, e, i, r, s, n, this.Se);
831
+ ns(t, e, r, i, s, n) {
832
+ this.Ve.le(t, e, r, i, s, n, this.Oe);
751
833
  }
752
- Ve(t, e = t, i = t, r = 255) {
753
- this.state.Ft(t, e, i, r), this.te(t / 255, e / 255, i / 255, r / 255);
834
+ hs(t, e = t, r = t, i = 255) {
835
+ this.state.Et(t, e, r, i), this.de(t / 255, e / 255, r / 255, i / 255);
754
836
  }
755
- te(t = 0, e = 0, i = 0, r = 0) {
756
- this.R.clearColor(t, e, i, r), this.R.clear(this.R.COLOR_BUFFER_BIT);
837
+ de(t = 0, e = 0, r = 0, i = 0) {
838
+ this.S.clearColor(t, e, r, i), this.S.clear(this.S.COLOR_BUFFER_BIT);
757
839
  }
758
- Oe() {
759
- this.R.viewport(0, 0, this.R.canvas.width, this.R.canvas.height), U(this.R, [0, 0, this.R.canvas.width, this.R.canvas.height]);
840
+ cs() {
841
+ this.S.viewport(0, 0, this.S.canvas.width, this.S.canvas.height), D(this.S, [0, 0, this.S.canvas.width, this.S.canvas.height]);
760
842
  }
761
843
  get context() {
762
- return this.R;
844
+ return this.S;
763
845
  }
764
846
  get state() {
765
- return this.Se;
847
+ return this.Oe;
766
848
  }
767
- Ue(t) {
768
- const e = I(this.R) ?? this.R.getParameter(this.R.VIEWPORT), i = { shader: t, gl: this.R, viewport: e }, r = /* @__PURE__ */ new Set();
769
- for (const s of this.Me) r.add(s.type);
770
- for (const s of r) this.Ae(s);
771
- this.Re.Lt(i, this.Me, this.ze), this.Me.te();
849
+ ls(t) {
850
+ const e = t, r = U(this.S) ?? this.S.getParameter(this.S.VIEWPORT), i = { shader: e, gl: this.S, viewport: r };
851
+ this.He(e);
852
+ const s = /* @__PURE__ */ new Set();
853
+ for (const n of this.Ve) n.type === x.CUSTOM ? s.add(x.RECTANGLE) : s.add(n.type);
854
+ for (const n of s) n !== x.CUSTOM && this.je(n);
855
+ this.Ue.Xt(i, this.Ve, this.ke), this.Ve.de();
772
856
  }
773
- U() {
774
- this.R.deleteBuffer(this.be), this.R.deleteBuffer(this.Te), this.Me.te();
775
- for (const t of this.ze.values()) t.U();
857
+ j() {
858
+ this.S.deleteBuffer(this.We), this.Ve.de();
859
+ for (const t of this.ke.values()) t.j();
776
860
  }
777
861
  }
778
- const v = { readShort: (a, t) => (v.t.uint16[0] = a[t] << 8 | a[t + 1], v.t.int16[0]), readUshort: (a, t) => a[t] << 8 | a[t + 1], readUshorts(a, t, e) {
779
- const i = [];
780
- for (let r = 0; r < e; r++) i.push(v.readUshort(a, t + 2 * r));
781
- return i;
862
+ const R = { readShort: (a, t) => (R.t.uint16[0] = a[t] << 8 | a[t + 1], R.t.int16[0]), readUshort: (a, t) => a[t] << 8 | a[t + 1], readUshorts(a, t, e) {
863
+ const r = [];
864
+ for (let i = 0; i < e; i++) r.push(R.readUshort(a, t + 2 * i));
865
+ return r;
782
866
  }, readUint(a, t) {
783
- const e = v.t.uint8;
784
- return e[3] = a[t], e[2] = a[t + 1], e[1] = a[t + 2], e[0] = a[t + 3], v.t.uint32[0];
867
+ const e = R.t.uint8;
868
+ return e[3] = a[t], e[2] = a[t + 1], e[1] = a[t + 2], e[0] = a[t + 3], R.t.uint32[0];
785
869
  }, readASCII(a, t, e) {
786
- let i = "";
787
- for (let r = 0; r < e; r++) i += String.fromCharCode(a[t + r]);
788
- return i;
870
+ let r = "";
871
+ for (let i = 0; i < e; i++) r += String.fromCharCode(a[t + i]);
872
+ return r;
789
873
  }, t: (() => {
790
874
  const a = new ArrayBuffer(8);
791
875
  return { uint8: new Uint8Array(a), int16: new Int16Array(a), uint16: new Uint16Array(a), uint32: new Uint32Array(a) };
792
- })() }, Rt = { parseTab(a, t, e) {
793
- const i = { tables: [], ids: {}, off: t };
876
+ })() }, yt = { parseTab(a, t, e) {
877
+ const r = { tables: [], ids: {}, off: t };
794
878
  a = new Uint8Array(a.buffer, t, e), t = 0;
795
- const r = v, s = r.readUshort, n = s(a, t += 2);
879
+ const i = R, s = i.readUshort, n = s(a, t += 2);
796
880
  t += 2;
797
881
  const o = [];
798
882
  for (let h = 0; h < n; h++) {
799
- const l = s(a, t), u = s(a, t += 2);
883
+ const l = s(a, t), d = s(a, t += 2);
800
884
  t += 2;
801
- const f = r.readUint(a, t);
885
+ const u = i.readUint(a, t);
802
886
  t += 4;
803
- const d = `p${l}e${u}`;
804
- let g = o.indexOf(f);
887
+ const f = `p${l}e${d}`;
888
+ let g = o.indexOf(u);
805
889
  if (g === -1) {
806
890
  let p;
807
- g = i.tables.length, o.push(f);
808
- const m = s(a, f);
809
- p = m === 4 ? this.parse4(a, f) : m === 12 ? this.parse12(a, f) : { format: m }, i.tables.push(p);
891
+ g = r.tables.length, o.push(u);
892
+ const m = s(a, u);
893
+ p = m === 4 ? this.parse4(a, u) : m === 12 ? this.parse12(a, u) : { format: m }, r.tables.push(p);
810
894
  }
811
- i.ids[d] != null && console.warn("Multiple tables for one platform+encoding: " + d), i.ids[d] = g;
895
+ r.ids[f] != null && console.warn("Multiple tables for one platform+encoding: " + f), r.ids[f] = g;
812
896
  }
813
- return i;
897
+ return r;
814
898
  }, parse4(a, t) {
815
- const e = v, i = e.readUshort, r = e.readUshorts, s = t, n = i(a, t += 2);
899
+ const e = R, r = e.readUshort, i = e.readUshorts, s = t, n = r(a, t += 2);
816
900
  t += 2;
817
- const o = i(a, t += 2) >>> 1, h = { format: 4, searchRange: i(a, t += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
818
- t += 2, h.entrySelector = i(a, t), t += 2, h.rangeShift = i(a, t), t += 2, h.endCount = r(a, t, o), t += 2 * o, t += 2, h.startCount = r(a, t, o), t += 2 * o;
901
+ const o = r(a, t += 2) >>> 1, h = { format: 4, searchRange: r(a, t += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
902
+ t += 2, h.entrySelector = r(a, t), t += 2, h.rangeShift = r(a, t), t += 2, h.endCount = i(a, t, o), t += 2 * o, t += 2, h.startCount = i(a, t, o), t += 2 * o;
819
903
  for (let l = 0; l < o; l++) h.idDelta.push(e.readShort(a, t)), t += 2;
820
- return h.idRangeOffset = r(a, t, o), t += 2 * o, h.glyphIdArray = r(a, t, s + n - t >> 1), h;
904
+ return h.idRangeOffset = i(a, t, o), t += 2 * o, h.glyphIdArray = i(a, t, s + n - t >> 1), h;
821
905
  }, parse12(a, t) {
822
- const e = v.readUint;
906
+ const e = R.readUint;
823
907
  e(a, t += 4), e(a, t += 4);
824
- const i = e(a, t += 4);
908
+ const r = e(a, t += 4);
825
909
  t += 4;
826
- const r = new Uint32Array(3 * i);
827
- for (let s = 0; s < 3 * i; s += 3) r[s] = e(a, t + (s << 2)), r[s + 1] = e(a, t + (s << 2) + 4), r[s + 2] = e(a, t + (s << 2) + 8);
828
- return { format: 12, groups: r };
829
- } }, xt = { parseTab(a, t, e) {
830
- const i = v;
910
+ const i = new Uint32Array(3 * r);
911
+ for (let s = 0; s < 3 * r; s += 3) i[s] = e(a, t + (s << 2)), i[s + 1] = e(a, t + (s << 2) + 4), i[s + 2] = e(a, t + (s << 2) + 8);
912
+ return { format: 12, groups: i };
913
+ } }, Ct = { parseTab(a, t, e) {
914
+ const r = R;
831
915
  t += 18;
832
- const r = i.readUshort(a, t);
916
+ const i = r.readUshort(a, t);
833
917
  t += 2, t += 16;
834
- const s = i.readShort(a, t);
918
+ const s = r.readShort(a, t);
835
919
  t += 2;
836
- const n = i.readShort(a, t);
920
+ const n = r.readShort(a, t);
837
921
  t += 2;
838
- const o = i.readShort(a, t);
922
+ const o = r.readShort(a, t);
839
923
  t += 2;
840
- const h = i.readShort(a, t);
841
- return t += 2, t += 6, { unitsPerEm: r, xMin: s, yMin: n, xMax: o, yMax: h, indexToLocFormat: i.readShort(a, t) };
842
- } }, yt = { parseTab(a, t, e) {
843
- const i = v;
924
+ const h = r.readShort(a, t);
925
+ return t += 2, t += 6, { unitsPerEm: i, xMin: s, yMin: n, xMax: o, yMax: h, indexToLocFormat: r.readShort(a, t) };
926
+ } }, vt = { parseTab(a, t, e) {
927
+ const r = R;
844
928
  t += 4;
845
- const r = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], s = {};
846
- for (let n = 0; n < r.length; n++) {
847
- const o = r[n], h = o === "advanceWidthMax" || o === "numberOfHMetrics" ? i.readUshort : i.readShort;
929
+ const i = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], s = {};
930
+ for (let n = 0; n < i.length; n++) {
931
+ const o = i[n], h = o === "advanceWidthMax" || o === "numberOfHMetrics" ? r.readUshort : r.readShort;
848
932
  s[o] = h(a, t + 2 * n);
849
933
  }
850
934
  return s;
851
- } }, vt = { parseTab(a, t, e, i) {
852
- const r = v, s = [], n = [], o = i.maxp.numGlyphs, h = i.hhea.numberOfHMetrics;
853
- let l = 0, u = 0, f = 0;
854
- for (; f < h; ) l = r.readUshort(a, t + (f << 2)), u = r.readShort(a, t + (f << 2) + 2), s.push(l), n.push(u), f++;
855
- for (; f < o; ) s.push(l), n.push(u), f++;
935
+ } }, St = { parseTab(a, t, e, r) {
936
+ const i = R, s = [], n = [], o = r.maxp.numGlyphs, h = r.hhea.numberOfHMetrics;
937
+ let l = 0, d = 0, u = 0;
938
+ for (; u < h; ) l = i.readUshort(a, t + (u << 2)), d = i.readShort(a, t + (u << 2) + 2), s.push(l), n.push(d), u++;
939
+ for (; u < o; ) s.push(l), n.push(d), u++;
856
940
  return { aWidth: s, lsBearing: n };
857
- } }, O = { cmap: Rt, head: xt, hhea: yt, maxp: { parseTab(a, t, e) {
858
- const i = v;
859
- return i.readUint(a, t), t += 4, { numGlyphs: i.readUshort(a, t) };
860
- } }, hmtx: vt, loca: { parseTab(a, t, e, i) {
861
- const r = v, s = [], n = i.head.indexToLocFormat, o = i.maxp.numGlyphs + 1;
862
- if (n === 0) for (let h = 0; h < o; h++) s.push(r.readUshort(a, t + (h << 1)) << 1);
863
- else if (n === 1) for (let h = 0; h < o; h++) s.push(r.readUint(a, t + (h << 2)));
941
+ } }, j = { cmap: yt, head: Ct, hhea: vt, maxp: { parseTab(a, t, e) {
942
+ const r = R;
943
+ return r.readUint(a, t), t += 4, { numGlyphs: r.readUshort(a, t) };
944
+ } }, hmtx: St, loca: { parseTab(a, t, e, r) {
945
+ const i = R, s = [], n = r.head.indexToLocFormat, o = r.maxp.numGlyphs + 1;
946
+ if (n === 0) for (let h = 0; h < o; h++) s.push(i.readUshort(a, t + (h << 1)) << 1);
947
+ else if (n === 1) for (let h = 0; h < o; h++) s.push(i.readUint(a, t + (h << 2)));
864
948
  return s;
865
- } }, glyf: { parseTab(a, t, e, i) {
866
- const r = [], s = i.maxp.numGlyphs;
867
- for (let n = 0; n < s; n++) r.push(null);
868
- return r;
869
- }, je(a, t) {
870
- const e = v, i = a.He, r = a.loca;
871
- if (r[t] === r[t + 1]) return null;
872
- const s = E.findTable(i, "glyf", a.qe);
949
+ } }, glyf: { parseTab(a, t, e, r) {
950
+ const i = [], s = r.maxp.numGlyphs;
951
+ for (let n = 0; n < s; n++) i.push(null);
952
+ return i;
953
+ }, us(a, t) {
954
+ const e = R, r = a.fs, i = a.loca;
955
+ if (i[t] === i[t + 1]) return null;
956
+ const s = w.findTable(r, "glyf", a.ds);
873
957
  if (!s) return null;
874
- let n = s[0] + r[t];
958
+ let n = s[0] + i[t];
875
959
  const o = {};
876
- if (o.noc = e.readShort(i, n), n += 2, o.xMin = e.readShort(i, n), n += 2, o.yMin = e.readShort(i, n), n += 2, o.xMax = e.readShort(i, n), n += 2, o.yMax = e.readShort(i, n), n += 2, o.xMin >= o.xMax || o.yMin >= o.yMax) return null;
960
+ if (o.noc = e.readShort(r, n), n += 2, o.xMin = e.readShort(r, n), n += 2, o.yMin = e.readShort(r, n), n += 2, o.xMax = e.readShort(r, n), n += 2, o.yMax = e.readShort(r, n), n += 2, o.xMin >= o.xMax || o.yMin >= o.yMax) return null;
877
961
  if (o.noc > 0) {
878
962
  o.endPts = [];
879
- for (let d = 0; d < o.noc; d++) o.endPts.push(e.readUshort(i, n)), n += 2;
880
- const h = e.readUshort(i, n);
881
- if (n += 2, i.length - n < h) return null;
963
+ for (let f = 0; f < o.noc; f++) o.endPts.push(e.readUshort(r, n)), n += 2;
964
+ const h = e.readUshort(r, n);
965
+ if (n += 2, r.length - n < h) return null;
882
966
  n += h;
883
967
  const l = o.endPts[o.noc - 1] + 1;
884
968
  o.flags = [];
885
- for (let d = 0; d < l; d++) {
886
- const g = i[n];
969
+ for (let f = 0; f < l; f++) {
970
+ const g = r[n];
887
971
  if (n++, o.flags.push(g), 8 & g) {
888
- const p = i[n];
972
+ const p = r[n];
889
973
  n++;
890
- for (let m = 0; m < p; m++) o.flags.push(g), d++;
974
+ for (let m = 0; m < p; m++) o.flags.push(g), f++;
891
975
  }
892
976
  }
893
977
  o.xs = [];
894
- for (let d = 0; d < l; d++) {
895
- const g = o.flags[d], p = !!(16 & g);
896
- 2 & g ? (o.xs.push(p ? i[n] : -i[n]), n++) : p ? o.xs.push(0) : (o.xs.push(e.readShort(i, n)), n += 2);
978
+ for (let f = 0; f < l; f++) {
979
+ const g = o.flags[f], p = !!(16 & g);
980
+ 2 & g ? (o.xs.push(p ? r[n] : -r[n]), n++) : p ? o.xs.push(0) : (o.xs.push(e.readShort(r, n)), n += 2);
897
981
  }
898
982
  o.ys = [];
899
- for (let d = 0; d < l; d++) {
900
- const g = o.flags[d], p = !!(32 & g);
901
- 4 & g ? (o.ys.push(p ? i[n] : -i[n]), n++) : p ? o.ys.push(0) : (o.ys.push(e.readShort(i, n)), n += 2);
983
+ for (let f = 0; f < l; f++) {
984
+ const g = o.flags[f], p = !!(32 & g);
985
+ 4 & g ? (o.ys.push(p ? r[n] : -r[n]), n++) : p ? o.ys.push(0) : (o.ys.push(e.readShort(r, n)), n += 2);
902
986
  }
903
- let u = 0, f = 0;
904
- for (let d = 0; d < l; d++) u += o.xs[d], f += o.ys[d], o.xs[d] = u, o.ys[d] = f;
987
+ let d = 0, u = 0;
988
+ for (let f = 0; f < l; f++) d += o.xs[f], u += o.ys[f], o.xs[f] = d, o.ys[f] = u;
905
989
  } else o.parts = [], o.endPts = [], o.flags = [], o.xs = [], o.ys = [];
906
990
  return o;
907
- } } }, E = { parse: (a) => [((t, e, i, r) => {
908
- const s = O, n = { He: t, Ne: e, qe: i };
991
+ } } }, w = { parse: (a) => [((t, e, r, i) => {
992
+ const s = j, n = { fs: t, ps: e, ds: r };
909
993
  for (const o in s) {
910
- const h = o, l = E.findTable(t, h, i);
994
+ const h = o, l = w.findTable(t, h, r);
911
995
  if (l) {
912
- const [u, f] = l;
913
- let d = r[u];
914
- d == null && (d = s[h].parseTab(t, u, f, n), r[u] = d), n[h] = d;
996
+ const [d, u] = l;
997
+ let f = i[d];
998
+ f == null && (f = s[h].parseTab(t, d, u, n), i[d] = f), n[h] = f;
915
999
  }
916
1000
  }
917
1001
  return n;
918
1002
  })(new Uint8Array(a), 0, 0, {})], findTable(a, t, e) {
919
- const i = v, r = i.readUshort(a, e + 4);
1003
+ const r = R, i = r.readUshort(a, e + 4);
920
1004
  let s = e + 12;
921
- for (let n = 0; n < r; n++) {
922
- const o = i.readASCII(a, s, 4);
923
- i.readUint(a, s + 4);
924
- const h = i.readUint(a, s + 8), l = i.readUint(a, s + 12);
1005
+ for (let n = 0; n < i; n++) {
1006
+ const o = r.readASCII(a, s, 4);
1007
+ r.readUint(a, s + 4);
1008
+ const h = r.readUint(a, s + 8), l = r.readUint(a, s + 12);
925
1009
  if (o === t) return [h, l];
926
1010
  s += 16;
927
1011
  }
928
1012
  return null;
929
- }, T: O, B: v };
930
- class L {
1013
+ }, T: j, B: R };
1014
+ class z {
931
1015
  constructor() {
932
- c(this, "Xe", /* @__PURE__ */ new Map());
933
- c(this, "Ye", /* @__PURE__ */ new Map());
1016
+ c(this, "_s", /* @__PURE__ */ new Map());
1017
+ c(this, "gs", /* @__PURE__ */ new Map());
934
1018
  }
935
- Qe(t, e) {
936
- const i = `${this.Ze(t)}_${e}`;
937
- if (this.Xe.has(i)) return this.Xe.get(i);
938
- const r = t.cmap;
939
- if (!r || !r.tables) return this.Xe.set(i, 0), 0;
1019
+ vs(t, e) {
1020
+ const r = `${this.Cs(t)}_${e}`;
1021
+ if (this._s.has(r)) return this._s.get(r);
1022
+ const i = t.cmap;
1023
+ if (!i || !i.tables) return this._s.set(r, 0), 0;
940
1024
  let s = 0;
941
- for (const n of r.tables) if (n.format === 4 ? s = this.Je(e, n) : n.format === 12 && (s = this.Ke(e, n)), s > 0) break;
942
- return this.Xe.set(i, s), s;
1025
+ for (const n of i.tables) if (n.format === 4 ? s = this.ws(e, n) : n.format === 12 && (s = this.$s(e, n)), s > 0) break;
1026
+ return this._s.set(r, s), s;
943
1027
  }
944
- ts(t, e) {
945
- const i = e.codePointAt(0);
946
- return i === void 0 ? 0 : this.Qe(t, i);
1028
+ bs(t, e) {
1029
+ const r = e.codePointAt(0);
1030
+ return r === void 0 ? 0 : this.vs(t, r);
947
1031
  }
948
- es(t, e) {
949
- const i = t.hmtx;
950
- return i && i.aWidth && i.aWidth.length !== 0 ? e < i.aWidth.length ? i.aWidth[e] : i.aWidth[i.aWidth.length - 1] : 0;
1032
+ zs(t, e) {
1033
+ const r = t.hmtx;
1034
+ return r && r.aWidth && r.aWidth.length !== 0 ? e < r.aWidth.length ? r.aWidth[e] : r.aWidth[r.aWidth.length - 1] : 0;
951
1035
  }
952
- ss(t, e) {
953
- const i = e / t.head.unitsPerEm, r = t.hhea.ascender * i, s = t.hhea.descender * i, n = t.hhea.lineGap * i;
954
- return { ascender: r, descender: s, lineGap: n, lineHeight: r - s + n, unitsPerEm: t.head.unitsPerEm, scale: i };
1036
+ Rs(t, e) {
1037
+ const r = e / t.head.unitsPerEm, i = t.hhea.ascender * r, s = t.hhea.descender * r, n = t.hhea.lineGap * r;
1038
+ return { ascender: i, descender: s, lineGap: n, lineHeight: i - s + n, unitsPerEm: t.head.unitsPerEm, scale: r };
955
1039
  }
956
- rs() {
957
- this.Xe.clear(), this.Ye.clear();
1040
+ Ts() {
1041
+ this._s.clear(), this.gs.clear();
958
1042
  }
959
- Ze(t) {
960
- return `${t.qe}_${t.He.length}`;
1043
+ Cs(t) {
1044
+ return `${t.ds}_${t.fs.length}`;
961
1045
  }
962
- Je(t, e) {
963
- const i = e.endCount.length;
964
- let r = -1;
965
- for (let s = 0; s < i; s++) if (t <= e.endCount[s]) {
966
- r = s;
1046
+ ws(t, e) {
1047
+ const r = e.endCount.length;
1048
+ let i = -1;
1049
+ for (let s = 0; s < r; s++) if (t <= e.endCount[s]) {
1050
+ i = s;
967
1051
  break;
968
1052
  }
969
- if (r === -1 || t < e.startCount[r]) return 0;
970
- if (e.idRangeOffset[r] === 0) return t + e.idDelta[r] & 65535;
1053
+ if (i === -1 || t < e.startCount[i]) return 0;
1054
+ if (e.idRangeOffset[i] === 0) return t + e.idDelta[i] & 65535;
971
1055
  {
972
- const s = e.idRangeOffset[r] / 2 + (t - e.startCount[r]) - (i - r);
1056
+ const s = e.idRangeOffset[i] / 2 + (t - e.startCount[i]) - (r - i);
973
1057
  if (s >= 0 && s < e.glyphIdArray.length) {
974
1058
  const n = e.glyphIdArray[s];
975
- return n === 0 ? 0 : n + e.idDelta[r] & 65535;
1059
+ return n === 0 ? 0 : n + e.idDelta[i] & 65535;
976
1060
  }
977
1061
  }
978
1062
  return 0;
979
1063
  }
980
- Ke(t, e) {
981
- const i = e.groups.length / 3;
982
- for (let r = 0; r < i; r++) {
983
- const s = e.groups[3 * r], n = e.groups[3 * r + 1], o = e.groups[3 * r + 2];
1064
+ $s(t, e) {
1065
+ const r = e.groups.length / 3;
1066
+ for (let i = 0; i < r; i++) {
1067
+ const s = e.groups[3 * i], n = e.groups[3 * i + 1], o = e.groups[3 * i + 2];
984
1068
  if (t >= s && t <= n) return o + (t - s);
985
1069
  }
986
1070
  return 0;
987
1071
  }
988
1072
  }
989
- class Ct {
1073
+ class Rt {
990
1074
  constructor(t) {
991
- c(this, "ns");
992
- this.ns = t;
1075
+ c(this, "Ss");
1076
+ this.Ss = t;
993
1077
  }
994
- hs(t) {
995
- var i;
1078
+ Ms(t) {
1079
+ var r;
996
1080
  const e = [];
997
- return (i = t.cmap) != null && i.tables ? (t.cmap.tables.forEach((r) => {
998
- if (r.format === 4) {
999
- const s = this.cs(r);
1081
+ return (r = t.cmap) != null && r.tables ? (t.cmap.tables.forEach((i) => {
1082
+ if (i.format === 4) {
1083
+ const s = this.Fs(i);
1000
1084
  e.push(...s);
1001
- } else if (r.format === 12) {
1002
- const s = this.ls(r);
1085
+ } else if (i.format === 12) {
1086
+ const s = this.Gs(i);
1003
1087
  e.push(...s);
1004
1088
  }
1005
1089
  }), [...new Set(e)]) : [];
1006
1090
  }
1007
- us(t, e) {
1008
- return this.ns.ts(t, e) > 0;
1091
+ Ds(t, e) {
1092
+ return this.Ss.bs(t, e) > 0;
1009
1093
  }
1010
- fs(t, e) {
1011
- for (const i of e) if (!this.us(t, i)) return !1;
1094
+ Ps(t, e) {
1095
+ for (const r of e) if (!this.Ds(t, r)) return !1;
1012
1096
  return !0;
1013
1097
  }
1014
- ds(t, e) {
1015
- return e.filter((i) => this.us(t, i));
1098
+ As(t, e) {
1099
+ return e.filter((r) => this.Ds(t, r));
1016
1100
  }
1017
- ps(t) {
1018
- return t.filter((e) => this.gs(e));
1101
+ Bs(t) {
1102
+ return t.filter((e) => this.Is(e));
1019
1103
  }
1020
- cs(t) {
1104
+ Fs(t) {
1021
1105
  const e = [];
1022
1106
  if (!(t.startCount && t.endCount && t.idRangeOffset && t.idDelta)) return e;
1023
- for (let i = 0; i < t.startCount.length; i++) {
1024
- const r = t.startCount[i], s = t.endCount[i];
1025
- if (r !== 65535 || s !== 65535) {
1026
- for (let n = r; n <= s; n++)
1027
- if (this._s(t, n, i) > 0) try {
1107
+ for (let r = 0; r < t.startCount.length; r++) {
1108
+ const i = t.startCount[r], s = t.endCount[r];
1109
+ if (i !== 65535 || s !== 65535) {
1110
+ for (let n = i; n <= s; n++)
1111
+ if (this.Ls(t, n, r) > 0) try {
1028
1112
  const o = String.fromCodePoint(n);
1029
1113
  e.push(o);
1030
1114
  } catch {
@@ -1033,13 +1117,13 @@ class Ct {
1033
1117
  }
1034
1118
  return e;
1035
1119
  }
1036
- ls(t) {
1120
+ Gs(t) {
1037
1121
  const e = [];
1038
1122
  if (!t.groups) return e;
1039
- for (let i = 0; i < t.groups.length; i += 3) {
1040
- const r = t.groups[i], s = t.groups[i + 1], n = t.groups[i + 2];
1041
- for (let o = r; o <= s; o++)
1042
- if (n + (o - r) > 0) try {
1123
+ for (let r = 0; r < t.groups.length; r += 3) {
1124
+ const i = t.groups[r], s = t.groups[r + 1], n = t.groups[r + 2];
1125
+ for (let o = i; o <= s; o++)
1126
+ if (n + (o - i) > 0) try {
1043
1127
  const h = String.fromCodePoint(o);
1044
1128
  e.push(h);
1045
1129
  } catch {
@@ -1047,536 +1131,557 @@ class Ct {
1047
1131
  }
1048
1132
  return e;
1049
1133
  }
1050
- _s(t, e, i) {
1051
- if (t.idRangeOffset[i] === 0) return e + t.idDelta[i] & 65535;
1134
+ Ls(t, e, r) {
1135
+ if (t.idRangeOffset[r] === 0) return e + t.idDelta[r] & 65535;
1052
1136
  {
1053
- const r = t.idRangeOffset[i] / 2 + (e - t.startCount[i]) - (t.startCount.length - i);
1054
- if (r >= 0 && t.glyphIdArray && r < t.glyphIdArray.length) {
1055
- const s = t.glyphIdArray[r];
1056
- if (s !== 0) return s + t.idDelta[i] & 65535;
1137
+ const i = t.idRangeOffset[r] / 2 + (e - t.startCount[r]) - (t.startCount.length - r);
1138
+ if (i >= 0 && t.glyphIdArray && i < t.glyphIdArray.length) {
1139
+ const s = t.glyphIdArray[i];
1140
+ if (s !== 0) return s + t.idDelta[r] & 65535;
1057
1141
  }
1058
1142
  }
1059
1143
  return 0;
1060
1144
  }
1061
- gs(t) {
1145
+ Is(t) {
1062
1146
  const e = t.codePointAt(0) || 0;
1063
1147
  return !(e >= 0 && e <= 31 && e !== 9 && e !== 10 && e !== 13 || e >= 127 && e <= 159);
1064
1148
  }
1065
1149
  }
1066
- class wt {
1150
+ class Et {
1067
1151
  constructor() {
1068
- c(this, "vs");
1069
- const t = new L();
1070
- this.vs = new Ct(t);
1152
+ c(this, "Es");
1153
+ const t = new z();
1154
+ this.Es = new Rt(t);
1071
1155
  }
1072
1156
  extractCharacters(t) {
1073
- return this.vs.hs(t);
1157
+ return this.Es.Ms(t);
1074
1158
  }
1075
1159
  filterProblematicCharacters(t) {
1076
- return this.vs.ps(t);
1160
+ return this.Es.Bs(t);
1077
1161
  }
1078
1162
  characterExists(t, e) {
1079
- return this.vs.us(t, e);
1163
+ return this.Es.Ds(t, e);
1080
1164
  }
1081
1165
  allCharactersExist(t, e) {
1082
- return this.vs.fs(t, e);
1166
+ return this.Es.Ps(t, e);
1083
1167
  }
1084
1168
  }
1085
- class Tt {
1169
+ class bt {
1086
1170
  constructor(t) {
1087
- c(this, "Cs");
1088
- c(this, "ws");
1089
- c(this, "$s");
1090
- c(this, "bs");
1091
- this.$s = t, this.bs = new L(), this.Cs = document.createElement("canvas"), this.ws = this.Cs.getContext("2d", { willReadFrequently: !0, alpha: !1 });
1092
- }
1093
- createTextureAtlas(t, e, i, r) {
1094
- const s = t.length, n = Math.ceil(Math.sqrt(s)), o = Math.ceil(s / n), h = e.width * n, l = e.height * o, u = typeof r == "object" ? r : null;
1095
- this.Ts(h, l), this.zs(t, e, n, i, u);
1096
- const f = this.$s.We(h, l, 1, { filter: "nearest" });
1097
- return f.I(this.Cs), { framebuffer: f, columns: n, rows: o };
1098
- }
1099
- Ts(t, e) {
1100
- this.Cs.width = t, this.Cs.height = e, this.Cs.style.width = t + "px", this.Cs.style.height = t + "px", this.ws.imageSmoothingEnabled = !1, this.Cs.style.imageRendering = "pixelated", this.ws.fillStyle = "black", this.ws.fillRect(0, 0, t, e), this.ws.textBaseline = "top", this.ws.textAlign = "left", this.ws.fillStyle = "white";
1101
- }
1102
- zs(t, e, i, r, s) {
1103
- const n = r / s.head.unitsPerEm;
1171
+ c(this, "Ws");
1172
+ c(this, "ks");
1173
+ c(this, "Us");
1174
+ c(this, "Vs");
1175
+ this.Us = t, this.Vs = new z(), this.Ws = document.createElement("canvas"), this.ks = this.Ws.getContext("2d", { willReadFrequently: !0, alpha: !1 });
1176
+ }
1177
+ createTextureAtlas(t, e, r, i) {
1178
+ const s = t.length, n = Math.ceil(Math.sqrt(s)), o = Math.ceil(s / n), h = e.width * n, l = e.height * o, d = typeof i == "object" ? i : null;
1179
+ this.Os(h, l), this.js(t, e, n, r, d);
1180
+ const u = this.Us.rs(h, l, 1, { filter: "nearest" });
1181
+ return u.L(this.Ws), { framebuffer: u, columns: n, rows: o };
1182
+ }
1183
+ Os(t, e) {
1184
+ this.Ws.width = t, this.Ws.height = e, this.Ws.style.width = t + "px", this.Ws.style.height = t + "px", this.ks.imageSmoothingEnabled = !1, this.Ws.style.imageRendering = "pixelated", this.ks.fillStyle = "black", this.ks.fillRect(0, 0, t, e), this.ks.textBaseline = "top", this.ks.textAlign = "left", this.ks.fillStyle = "white";
1185
+ }
1186
+ js(t, e, r, i, s) {
1187
+ const n = i / s.head.unitsPerEm;
1104
1188
  for (let o = 0; o < t.length; o++) {
1105
- const h = o % i, l = Math.floor(o / i), u = t[o].character, f = this.Rs(s, u);
1106
- if (!f) continue;
1107
- const d = u.codePointAt(0) || 0, g = this.bs.Qe(s, d), p = this.Ms(s, g) * n, m = h * e.width, w = l * e.height, C = m + 0.5 * e.width, T = w + 0.5 * e.height, b = Math.round(C - 0.5 * e.width), P = Math.round(T - 0.5 * r), Y = b + 0.5 * (e.width - p), H = P + s.hhea.ascender * n;
1108
- this.Ss(f, Y, H, n);
1189
+ const h = o % r, l = Math.floor(o / r), d = t[o].character, u = this.Hs(s, d);
1190
+ if (!u) continue;
1191
+ const f = d.codePointAt(0) || 0, g = this.Vs.vs(s, f), p = this.Xs(s, g) * n, m = h * e.width, E = l * e.height, v = m + 0.5 * e.width, b = E + 0.5 * e.height, _ = Math.round(v - 0.5 * e.width), y = Math.round(b - 0.5 * i), P = _ + 0.5 * (e.width - p), Z = y + s.hhea.ascender * n;
1192
+ this.Ys(u, P, Z, n);
1109
1193
  }
1110
1194
  }
1111
- Rs(t, e) {
1112
- const i = e.codePointAt(0) || 0, r = this.bs.Qe(t, i);
1113
- if (r === 0) return null;
1114
- if (t.glyf && t.glyf[r] !== null) return t.glyf[r];
1115
- if (E && E.T && E.T.glyf) {
1116
- const s = E.T.glyf.je(t, r);
1117
- return t.glyf && s && (t.glyf[r] = s), s;
1195
+ Hs(t, e) {
1196
+ const r = e.codePointAt(0) || 0, i = this.Vs.vs(t, r);
1197
+ if (i === 0) return null;
1198
+ if (t.glyf && t.glyf[i] !== null) return t.glyf[i];
1199
+ if (w && w.T && w.T.glyf) {
1200
+ const s = w.T.glyf.us(t, i);
1201
+ return t.glyf && s && (t.glyf[i] = s), s;
1118
1202
  }
1119
1203
  return null;
1120
1204
  }
1121
- Ms(t, e) {
1122
- const i = t.hmtx;
1123
- return i && i.aWidth ? e < i.aWidth.length ? i.aWidth[e] : i.aWidth[i.aWidth.length - 1] : 0;
1205
+ Xs(t, e) {
1206
+ const r = t.hmtx;
1207
+ return r && r.aWidth ? e < r.aWidth.length ? r.aWidth[e] : r.aWidth[r.aWidth.length - 1] : 0;
1124
1208
  }
1125
- Ss(t, e, i, r) {
1209
+ Ys(t, e, r, i) {
1126
1210
  if (!t || !t.xs || t.noc === 0) return;
1127
1211
  const { xs: s, ys: n, endPts: o, flags: h } = t;
1128
1212
  if (!(s && n && o && h)) return;
1129
- this.ws.beginPath();
1213
+ this.ks.beginPath();
1130
1214
  let l = 0;
1131
- for (let u = 0; u < o.length; u++) {
1132
- const f = o[u];
1133
- if (!(f < l)) {
1134
- if (f >= l) {
1135
- const d = e + s[l] * r, g = i - n[l] * r;
1136
- this.ws.moveTo(d, g);
1215
+ for (let d = 0; d < o.length; d++) {
1216
+ const u = o[d];
1217
+ if (!(u < l)) {
1218
+ if (u >= l) {
1219
+ const f = e + s[l] * i, g = r - n[l] * i;
1220
+ this.ks.moveTo(f, g);
1137
1221
  let p = l + 1;
1138
- for (; p <= f; )
1222
+ for (; p <= u; )
1139
1223
  if (1 & h[p]) {
1140
- const m = e + s[p] * r, w = i - n[p] * r;
1141
- this.ws.lineTo(m, w), p++;
1224
+ const m = e + s[p] * i, E = r - n[p] * i;
1225
+ this.ks.lineTo(m, E), p++;
1142
1226
  } else {
1143
- const m = e + s[p] * r, w = i - n[p] * r;
1144
- let C = p + 1 > f ? l : p + 1;
1145
- if (1 & h[C]) {
1146
- const T = e + s[C] * r, b = i - n[C] * r;
1147
- this.ws.quadraticCurveTo(m, w, T, b), p = C + 1;
1227
+ const m = e + s[p] * i, E = r - n[p] * i;
1228
+ let v = p + 1 > u ? l : p + 1;
1229
+ if (1 & h[v]) {
1230
+ const b = e + s[v] * i, _ = r - n[v] * i;
1231
+ this.ks.quadraticCurveTo(m, E, b, _), p = v + 1;
1148
1232
  } else {
1149
- const T = (m + (e + s[C] * r)) / 2, b = (w + (i - n[C] * r)) / 2;
1150
- this.ws.quadraticCurveTo(m, w, T, b), p = C;
1233
+ const b = (m + (e + s[v] * i)) / 2, _ = (E + (r - n[v] * i)) / 2;
1234
+ this.ks.quadraticCurveTo(m, E, b, _), p = v;
1151
1235
  }
1152
1236
  }
1153
- this.ws.closePath();
1237
+ this.ks.closePath();
1154
1238
  }
1155
- l = f + 1;
1239
+ l = u + 1;
1156
1240
  }
1157
1241
  }
1158
- this.ws.fill();
1242
+ this.ks.fill();
1159
1243
  }
1160
1244
  }
1161
- class bt {
1245
+ class _t {
1162
1246
  constructor() {
1163
- c(this, "ns");
1164
- this.ns = new L();
1247
+ c(this, "Ss");
1248
+ this.Ss = new z();
1165
1249
  }
1166
- calculateMaxGlyphDimensions(t, e, i) {
1167
- let r = 0;
1168
- const s = this.ns.ss(i, e), n = s.lineHeight;
1250
+ calculateMaxGlyphDimensions(t, e, r) {
1251
+ let i = 0;
1252
+ const s = this.Ss.Rs(r, e), n = s.lineHeight;
1169
1253
  for (const o of t) {
1170
- const h = this.ns.ts(i, o);
1254
+ const h = this.Ss.bs(r, o);
1171
1255
  if (h === 0) continue;
1172
- const l = this.ns.es(i, h) * s.scale;
1173
- r = Math.max(r, l);
1256
+ const l = this.Ss.zs(r, h) * s.scale;
1257
+ i = Math.max(i, l);
1174
1258
  }
1175
- return { width: Math.ceil(r), height: Math.ceil(n) };
1259
+ return { width: Math.ceil(i), height: Math.ceil(n) };
1176
1260
  }
1177
- getCharacterAdvanceWidth(t, e, i) {
1178
- const r = this.ns.ss(i, e), s = this.ns.ts(i, t);
1179
- return this.ns.es(i, s) * r.scale;
1261
+ getCharacterAdvanceWidth(t, e, r) {
1262
+ const i = this.Ss.Rs(r, e), s = this.Ss.bs(r, t);
1263
+ return this.Ss.zs(r, s) * i.scale;
1180
1264
  }
1181
1265
  getFontMetrics(t, e) {
1182
- return this.ns.ss(e, t);
1266
+ return this.Ss.Rs(e, t);
1183
1267
  }
1184
- rs() {
1185
- this.ns.rs();
1268
+ Ts() {
1269
+ this.Ss.Ts();
1186
1270
  }
1187
1271
  }
1188
- class Et {
1272
+ class wt {
1189
1273
  constructor() {
1190
- c(this, "bs");
1191
- this.bs = new L();
1274
+ c(this, "Vs");
1275
+ this.Vs = new z();
1192
1276
  }
1193
1277
  createCharacterObjects(t, e) {
1194
- return t.map((i, r) => {
1195
- const s = i.codePointAt(0) || 0, n = this.As(r);
1278
+ return t.map((r, i) => {
1279
+ const s = r.codePointAt(0) || 0, n = this.qs(i);
1196
1280
  let o = 0;
1197
1281
  if (e.hmtx && e.hmtx.aWidth) {
1198
- const h = this.bs.Qe(e, s);
1282
+ const h = this.Vs.vs(e, s);
1199
1283
  h > 0 && e.hmtx.aWidth[h] !== void 0 && (o = e.hmtx.aWidth[h]);
1200
1284
  }
1201
- return { character: i, unicode: s, color: n, advanceWidth: o };
1285
+ return { character: r, unicode: s, color: n, advanceWidth: o };
1202
1286
  });
1203
1287
  }
1204
- As(t) {
1288
+ qs(t) {
1205
1289
  return [t % 256 / 255, Math.floor(t / 256) % 256 / 255, Math.floor(t / 65536) % 256 / 255];
1206
1290
  }
1207
- Ps(t, e) {
1208
- if (!M._(typeof t == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: t })) return [0, 0, 0];
1209
- const i = e.find((r) => r.character === t);
1210
- return i ? i.color : [0, 0, 0];
1291
+ Zs(t, e) {
1292
+ if (!I.m(typeof t == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: t })) return [0, 0, 0];
1293
+ const r = e.find((i) => i.character === t);
1294
+ return r ? r.color : [0, 0, 0];
1211
1295
  }
1212
- Fs(t, e) {
1213
- return M._(typeof t == "string" && t.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: t }) ? Array.from(t).map((i) => this.Ps(i, e) || [0, 0, 0]) : [[0, 0, 0]];
1296
+ Ns(t, e) {
1297
+ return I.m(typeof t == "string" && t.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: t }) ? Array.from(t).map((r) => this.Zs(r, e) || [0, 0, 0]) : [[0, 0, 0]];
1214
1298
  }
1215
1299
  }
1216
- class At {
1300
+ class Tt {
1217
1301
  constructor(t, e = 16) {
1218
- c(this, "Gs");
1219
- c(this, "Ds", []);
1220
- c(this, "Is");
1221
- c(this, "Bs", 16);
1222
- c(this, "Ls", 0);
1223
- c(this, "Es", 0);
1224
- c(this, "Ws", { width: 0, height: 0 });
1225
- c(this, "ks");
1226
- c(this, "Vs");
1227
- c(this, "Os");
1228
- c(this, "Us");
1229
- c(this, "js");
1230
- this.Bs = e, this.Vs = new wt(), this.Os = new Tt(t), this.Us = new bt(), this.js = new Et();
1302
+ c(this, "Qs");
1303
+ c(this, "Js", []);
1304
+ c(this, "Ks");
1305
+ c(this, "ti", 16);
1306
+ c(this, "ei", 0);
1307
+ c(this, "si", 0);
1308
+ c(this, "ii", { width: 0, height: 0 });
1309
+ c(this, "ri");
1310
+ c(this, "ni");
1311
+ c(this, "oi");
1312
+ c(this, "ai");
1313
+ c(this, "hi");
1314
+ this.ti = e, this.ni = new Et(), this.oi = new bt(t), this.ai = new _t(), this.hi = new wt();
1231
1315
  }
1232
- async Hs(t) {
1316
+ async ci(t) {
1233
1317
  let e;
1234
- if (!t) throw new y("Embedded font not available. This appears to be a minified build - please provide `fontSource`.");
1318
+ if (!t) throw new S("Embedded font not available. This appears to be a minified build - please provide `fontSource`.");
1235
1319
  {
1236
- const i = await fetch(t);
1237
- if (!i.ok) throw new y(`Failed to load font file: ${i.status} ${i.statusText}`);
1238
- e = await i.arrayBuffer();
1320
+ const r = await fetch(t);
1321
+ if (!r.ok) throw new S(`Failed to load font file: ${r.status} ${r.statusText}`);
1322
+ e = await r.arrayBuffer();
1239
1323
  }
1240
- await this.qs(e), this.Gs = E.parse(e)[0], await this.Ns();
1324
+ await this.li(e), this.Qs = w.parse(e)[0], await this.ui();
1241
1325
  }
1242
- Xs(t) {
1243
- if (t === void 0) return this.Bs;
1244
- this.Bs = t, this.Ws = this.Us.calculateMaxGlyphDimensions(this.Ds.map((i) => i.character), this.Bs, this.Gs);
1245
- const e = this.Os.createTextureAtlas(this.Ds, this.Ws, this.Bs, this.Gs);
1246
- this.Is = e.framebuffer, this.Ls = e.columns, this.Es = e.rows;
1326
+ fi(t) {
1327
+ if (t === void 0) return this.ti;
1328
+ this.ti = t, this.ii = this.ai.calculateMaxGlyphDimensions(this.Js.map((r) => r.character), this.ti, this.Qs);
1329
+ const e = this.oi.createTextureAtlas(this.Js, this.ii, this.ti, this.Qs);
1330
+ this.Ks = e.framebuffer, this.ei = e.columns, this.si = e.rows;
1247
1331
  }
1248
- async Ys(t) {
1332
+ async di(t) {
1249
1333
  try {
1250
1334
  const e = await fetch(t);
1251
- if (!e.ok) throw new y(`Failed to load font file: ${e.status} ${e.statusText}`);
1252
- const i = await e.arrayBuffer();
1253
- await this.qs(i);
1254
- const r = E.parse(i);
1255
- if (!r || r.length === 0) throw Error("Failed to parse font file");
1256
- this.Gs = r[0], await this.Ns();
1335
+ if (!e.ok) throw new S(`Failed to load font file: ${e.status} ${e.statusText}`);
1336
+ const r = await e.arrayBuffer();
1337
+ await this.li(r);
1338
+ const i = w.parse(r);
1339
+ if (!i || i.length === 0) throw Error("Failed to parse font file");
1340
+ this.Qs = i[0], await this.ui();
1257
1341
  } catch (e) {
1258
- throw new y("Failed to load font: " + (e instanceof Error ? e.message : "Unknown error"), e);
1342
+ throw new S("Failed to load font: " + (e instanceof Error ? e.message : "Unknown error"), e);
1259
1343
  }
1260
1344
  }
1261
- async qs(t) {
1345
+ async li(t) {
1262
1346
  const e = Date.now();
1263
- this.ks = new FontFace("CustomFont_" + e, t), await this.ks.load(), document.fonts.add(this.ks);
1347
+ this.ri = new FontFace("CustomFont_" + e, t), await this.ri.load(), document.fonts.add(this.ri);
1264
1348
  }
1265
- async Ns() {
1266
- const t = this.Vs.extractCharacters(this.Gs), e = this.Vs.filterProblematicCharacters(t);
1267
- this.Ds = this.js.createCharacterObjects(e, this.Gs), this.Ws = this.Us.calculateMaxGlyphDimensions(e, this.Bs, this.Gs);
1268
- const i = this.Os.createTextureAtlas(this.Ds, this.Ws, this.Bs, this.Gs);
1269
- this.Is = i.framebuffer, this.Ls = i.columns, this.Es = i.rows;
1349
+ async ui() {
1350
+ const t = this.ni.extractCharacters(this.Qs), e = this.ni.filterProblematicCharacters(t);
1351
+ this.Js = this.hi.createCharacterObjects(e, this.Qs), this.ii = this.ai.calculateMaxGlyphDimensions(e, this.ti, this.Qs);
1352
+ const r = this.oi.createTextureAtlas(this.Js, this.ii, this.ti, this.Qs);
1353
+ this.Ks = r.framebuffer, this.ei = r.columns, this.si = r.rows;
1270
1354
  }
1271
- Ps(t) {
1272
- return this.js.Ps(t, this.Ds);
1355
+ Zs(t) {
1356
+ return this.hi.Zs(t, this.Js);
1273
1357
  }
1274
- Fs(t) {
1275
- return this.js.Fs(t, this.Ds);
1358
+ Ns(t) {
1359
+ return this.hi.Ns(t, this.Js);
1276
1360
  }
1277
- U() {
1278
- this.Is.U(), document.fonts.delete(this.ks);
1361
+ j() {
1362
+ this.Ks.j(), document.fonts.delete(this.ri);
1279
1363
  }
1280
1364
  get fontFramebuffer() {
1281
- return this.Is;
1365
+ return this.Ks;
1282
1366
  }
1283
1367
  get characters() {
1284
- return this.Ds;
1368
+ return this.Js;
1285
1369
  }
1286
1370
  get textureColumns() {
1287
- return this.Ls;
1371
+ return this.ei;
1288
1372
  }
1289
1373
  get textureRows() {
1290
- return this.Es;
1374
+ return this.si;
1291
1375
  }
1292
1376
  get maxGlyphDimensions() {
1293
- return this.Ws;
1377
+ return this.ii;
1294
1378
  }
1295
1379
  get fontSize() {
1296
- return this.Bs;
1380
+ return this.ti;
1297
1381
  }
1298
1382
  get font() {
1299
- return this.Gs;
1383
+ return this.Qs;
1300
1384
  }
1301
1385
  }
1302
- class _t {
1303
- constructor(t, e, i) {
1304
- c(this, "Qs");
1305
- c(this, "Zs");
1306
- c(this, "v");
1386
+ class At {
1387
+ constructor(t, e, r) {
1388
+ c(this, "pi");
1389
+ c(this, "_i");
1307
1390
  c(this, "C");
1308
- c(this, "Js");
1309
- c(this, "Ks");
1310
- c(this, "ti");
1311
- c(this, "ei");
1312
- c(this, "si");
1313
- this.ti = t, this.ei = e, this.si = i, this.yt();
1391
+ c(this, "$");
1392
+ c(this, "gi");
1393
+ c(this, "mi");
1394
+ c(this, "xi");
1395
+ c(this, "Ci");
1396
+ c(this, "yi");
1397
+ this.xi = t, this.Ci = e, this.yi = r, this.zt();
1314
1398
  }
1315
- yt() {
1316
- this.Qs = Math.floor(this.ti.width / this.ei), this.Zs = Math.floor(this.ti.height / this.si), this.v = this.Qs * this.ei, this.C = this.Zs * this.si, this.Js = Math.floor((this.ti.width - this.v) / 2), this.Ks = Math.floor((this.ti.height - this.C) / 2);
1399
+ zt() {
1400
+ this.pi = Math.floor(this.xi.width / this.Ci), this._i = Math.floor(this.xi.height / this.yi), this.C = this.pi * this.Ci, this.$ = this._i * this.yi, this.gi = Math.floor((this.xi.width - this.C) / 2), this.mi = Math.floor((this.xi.height - this.$) / 2);
1317
1401
  }
1318
- ii(t, e) {
1319
- this.ei = t, this.si = e, this.yt();
1402
+ wi(t, e) {
1403
+ this.Ci = t, this.yi = e, this.zt();
1320
1404
  }
1321
1405
  get cellWidth() {
1322
- return this.ei;
1406
+ return this.Ci;
1323
1407
  }
1324
1408
  get cellHeight() {
1325
- return this.si;
1409
+ return this.yi;
1326
1410
  }
1327
1411
  get cols() {
1328
- return this.Qs;
1412
+ return this.pi;
1329
1413
  }
1330
1414
  get rows() {
1331
- return this.Zs;
1415
+ return this._i;
1332
1416
  }
1333
1417
  get width() {
1334
- return this.v;
1418
+ return this.C;
1335
1419
  }
1336
1420
  get height() {
1337
- return this.C;
1421
+ return this.$;
1338
1422
  }
1339
1423
  get offsetX() {
1340
- return this.Js;
1424
+ return this.gi;
1341
1425
  }
1342
1426
  get offsetY() {
1343
- return this.Ks;
1427
+ return this.mi;
1344
1428
  }
1345
1429
  }
1346
- class St {
1430
+ class Ft {
1347
1431
  constructor(t = {}) {
1348
- c(this, "ti");
1349
- c(this, "ri");
1350
- c(this, "ni");
1351
- t.canvas ? (this.ti = t.canvas, this.ni = !1) : (this.ti = this.oi(t.width, t.height), this.ni = !0), this.ti.style.imageRendering = "pixelated";
1432
+ c(this, "xi");
1433
+ c(this, "$i");
1434
+ c(this, "bi");
1435
+ t.canvas ? (this.xi = t.canvas, this.bi = !1) : (this.xi = this.zi(t.width, t.height), this.bi = !0), this.xi.style.imageRendering = "pixelated";
1352
1436
  }
1353
- oi(t, e) {
1354
- const i = document.createElement("canvas");
1355
- return i.className = "textmodeCanvas", i.style.imageRendering = "pixelated", i.width = t || 800, i.height = e || 600, document.body.appendChild(i), i;
1437
+ zi(t, e) {
1438
+ const r = document.createElement("canvas");
1439
+ return r.className = "textmodeCanvas", r.style.imageRendering = "pixelated", r.width = t || 800, r.height = e || 600, document.body.appendChild(r), r;
1356
1440
  }
1357
- L(t, e) {
1358
- this.ti.width = t ?? this.ti.width, this.ti.height = e ?? this.ti.height;
1441
+ W(t, e) {
1442
+ this.xi.width = t ?? this.xi.width, this.xi.height = e ?? this.xi.height;
1359
1443
  }
1360
- ai() {
1361
- const t = this.ti.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
1362
- if (!t) throw new y("`textmode.js` requires WebGL2 support.");
1444
+ Ri() {
1445
+ const t = this.xi.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
1446
+ if (!t) throw new S("`textmode.js` requires WebGL2 support.");
1363
1447
  return t;
1364
1448
  }
1365
- U() {
1366
- this.ri && this.ri.disconnect();
1367
- const t = this.ti.getContext("webgl") || this.ti.getContext("webgl2");
1449
+ j() {
1450
+ this.$i && this.$i.disconnect();
1451
+ const t = this.xi.getContext("webgl") || this.xi.getContext("webgl2");
1368
1452
  if (t) {
1369
1453
  const e = t.getExtension("WEBGL_lose_context");
1370
1454
  e && e.loseContext();
1371
1455
  }
1372
- this.ni && this.ti.parentNode && this.ti.parentNode.removeChild(this.ti);
1456
+ this.bi && this.xi.parentNode && this.xi.parentNode.removeChild(this.xi);
1373
1457
  }
1374
1458
  get canvas() {
1375
- return this.ti;
1459
+ return this.xi;
1376
1460
  }
1377
1461
  get width() {
1378
- return this.ti.width;
1462
+ return this.xi.width;
1379
1463
  }
1380
1464
  get height() {
1381
- return this.ti.height;
1465
+ return this.xi.height;
1382
1466
  }
1383
1467
  }
1384
- class Ft {
1468
+ class Ut {
1385
1469
  constructor(t = 60) {
1386
- c(this, "hi");
1387
- c(this, "ci");
1388
- c(this, "li", null);
1389
- c(this, "ui", 0);
1390
- c(this, "fi", !0);
1391
- c(this, "di", 0);
1392
- c(this, "pi", 0);
1393
- c(this, "gi", []);
1394
- c(this, "_i", 10);
1395
- c(this, "mi", 0);
1396
- this.hi = t, this.ci = 1e3 / t;
1470
+ c(this, "Ti");
1471
+ c(this, "Si");
1472
+ c(this, "Mi", null);
1473
+ c(this, "Fi", 0);
1474
+ c(this, "Gi", !0);
1475
+ c(this, "Di", 0);
1476
+ c(this, "Pi", 0);
1477
+ c(this, "Ai", []);
1478
+ c(this, "Bi", 10);
1479
+ c(this, "Ii", 0);
1480
+ this.Ti = t, this.Si = 1e3 / t;
1397
1481
  }
1398
1482
  start(t) {
1399
- if (!this.fi) return;
1400
- this.ui = performance.now();
1401
- const e = (i) => {
1402
- if (!this.fi) return void (this.li = null);
1403
- const r = i - this.ui;
1404
- r >= this.ci && (t(), this.ui = i - r % this.ci), this.fi && (this.li = requestAnimationFrame(e));
1483
+ if (!this.Gi) return;
1484
+ this.Fi = performance.now();
1485
+ const e = (r) => {
1486
+ if (!this.Gi) return void (this.Mi = null);
1487
+ const i = r - this.Fi;
1488
+ i >= this.Si && (t(), this.Fi = r - i % this.Si), this.Gi && (this.Mi = requestAnimationFrame(e));
1405
1489
  };
1406
- this.li = requestAnimationFrame(e);
1490
+ this.Mi = requestAnimationFrame(e);
1407
1491
  }
1408
1492
  stop() {
1409
- this.li && (cancelAnimationFrame(this.li), this.li = null);
1493
+ this.Mi && (cancelAnimationFrame(this.Mi), this.Mi = null);
1410
1494
  }
1411
1495
  pause() {
1412
- this.fi && (this.fi = !1, this.stop());
1496
+ this.Gi && (this.Gi = !1, this.stop());
1413
1497
  }
1414
1498
  resume(t) {
1415
- this.fi || (this.fi = !0, this.start(t));
1499
+ this.Gi || (this.Gi = !0, this.start(t));
1416
1500
  }
1417
1501
  frameRate(t, e) {
1418
- if (t === void 0) return this.di;
1419
- this.hi = t, this.ci = 1e3 / t, this.fi && e && (this.stop(), this.start(e));
1502
+ if (t === void 0) return this.Di;
1503
+ this.Ti = t, this.Si = 1e3 / t, this.Gi && e && (this.stop(), this.start(e));
1420
1504
  }
1421
1505
  measureFrameRate() {
1422
1506
  const t = performance.now();
1423
- if (this.pi > 0) {
1424
- const e = t - this.pi;
1425
- this.gi.push(e), this.gi.length > this._i && this.gi.shift();
1426
- const i = this.gi.reduce((r, s) => r + s, 0) / this.gi.length;
1427
- this.di = 1e3 / i;
1507
+ if (this.Pi > 0) {
1508
+ const e = t - this.Pi;
1509
+ this.Ai.push(e), this.Ai.length > this.Bi && this.Ai.shift();
1510
+ const r = this.Ai.reduce((i, s) => i + s, 0) / this.Ai.length;
1511
+ this.Di = 1e3 / r;
1428
1512
  }
1429
- this.pi = t;
1513
+ this.Pi = t;
1430
1514
  }
1431
1515
  get isLooping() {
1432
- return this.fi;
1516
+ return this.Gi;
1433
1517
  }
1434
1518
  get frameRateLimit() {
1435
- return this.hi;
1519
+ return this.Ti;
1436
1520
  }
1437
1521
  get currentFrameRate() {
1438
- return this.di;
1522
+ return this.Di;
1439
1523
  }
1440
1524
  get frameCount() {
1441
- return this.mi;
1525
+ return this.Ii;
1442
1526
  }
1443
1527
  set frameCount(t) {
1444
- this.mi = t;
1528
+ this.Ii = t;
1445
1529
  }
1446
1530
  incrementFrame() {
1447
- this.mi++;
1531
+ this.Ii++;
1448
1532
  }
1449
1533
  resetFrameCount() {
1450
- this.mi = 0;
1534
+ this.Ii = 0;
1451
1535
  }
1452
1536
  }
1453
- const Pt = (a) => class extends a {
1454
- rotate(t) {
1455
- this.$s.state.bt(t);
1537
+ const Lt = (a) => class extends a {
1538
+ rotate(t = 0, e = 0, r = 0) {
1539
+ this.Us.state.St(t), this.Us.state.Mt(e), this.Us.state.Ft(r);
1540
+ }
1541
+ rotateX(t) {
1542
+ this.Us.state.St(t);
1543
+ }
1544
+ rotateY(t) {
1545
+ this.Us.state.Mt(t);
1546
+ }
1547
+ rotateZ(t) {
1548
+ this.Us.state.Ft(t);
1456
1549
  }
1457
1550
  push() {
1458
- this.$s.state.xt();
1551
+ this.Us.state.$t();
1459
1552
  }
1460
1553
  pop() {
1461
- this.$s.state.Ct();
1554
+ this.Us.state.bt();
1462
1555
  }
1463
- rect(t, e, i = 1, r = 1) {
1464
- this.$s.De(t, e, i, r);
1556
+ rect(t, e, r = 1, i = 1) {
1557
+ this.Us.Je(t, e, r, i);
1465
1558
  }
1466
- line(t, e, i, r) {
1467
- this.$s.Ie(t, e, i, r);
1559
+ line(t, e, r, i) {
1560
+ this.Us.Ke(t, e, r, i);
1468
1561
  }
1469
1562
  lineWeight(t) {
1470
- this.$s.state.$t(t);
1563
+ this.Us.state.Tt(t);
1471
1564
  }
1472
- background(t, e = t, i = t, r = 255) {
1473
- this.$s.Ve(t, e, i, r);
1565
+ background(t, e = t, r = t, i = 255) {
1566
+ this.Us.hs(t, e, r, i);
1474
1567
  }
1475
1568
  char(t) {
1476
- this.$s.state.Tt(this.Gs.Ps(t));
1569
+ this.Us.state.Gt(this.Qs.Zs(t));
1477
1570
  }
1478
- charColor(t, e, i) {
1479
- this.$s.state.zt(t, e, i);
1571
+ charColor(t, e, r) {
1572
+ this.Us.state.Dt(t, e, r);
1480
1573
  }
1481
- cellColor(t, e, i) {
1482
- this.$s.state.Rt(t, e, i);
1574
+ cellColor(t, e, r) {
1575
+ this.Us.state.Pt(t, e, r);
1483
1576
  }
1484
1577
  flipHorizontally(t) {
1485
- this.$s.state.Mt(t);
1578
+ this.Us.state.At(t);
1486
1579
  }
1487
1580
  flipVertically(t) {
1488
- this.$s.state.St(t);
1581
+ this.Us.state.Bt(t);
1489
1582
  }
1490
1583
  charRotation(t) {
1491
- this.$s.state.Pt(t);
1584
+ this.Us.state.Lt(t);
1492
1585
  }
1493
1586
  invert(t) {
1494
- this.$s.state.At(t);
1587
+ this.Us.state.It(t);
1495
1588
  }
1496
1589
  clear() {
1497
- this.$s.Ve(0, 0, 0, 0);
1590
+ this.Us.hs(0, 0, 0, 0);
1591
+ }
1592
+ ellipse(t, e, r, i) {
1593
+ this.Us.ts(t, e, r / 2, i / 2);
1594
+ }
1595
+ triangle(t, e, r, i, s, n) {
1596
+ this.Us.es(t, e, r, i, s, n);
1597
+ }
1598
+ bezierCurve(t, e, r, i, s, n, o, h) {
1599
+ this.Us.ss(t, e, r, i, s, n, o, h);
1498
1600
  }
1499
- ellipse(t, e, i, r) {
1500
- this.$s.Be(t, e, i / 2, r / 2);
1601
+ arc(t, e, r, i, s, n) {
1602
+ this.Us.ns(t, e, r, i, s, n);
1501
1603
  }
1502
- triangle(t, e, i, r, s, n) {
1503
- this.$s.Le(t, e, i, r, s, n);
1604
+ shader(t) {
1605
+ this.Us.Ye(t);
1504
1606
  }
1505
- bezierCurve(t, e, i, r, s, n, o, h) {
1506
- this.$s.Ee(t, e, i, r, s, n, o, h);
1607
+ setUniform(t, e) {
1608
+ this.Us.qe(t, e);
1507
1609
  }
1508
- arc(t, e, i, r, s, n) {
1509
- this.$s.ke(t, e, i, r, s, n);
1610
+ setUniforms(t) {
1611
+ this.Us.Ze(t);
1612
+ }
1613
+ createFilterShader(t) {
1614
+ return this.Us.Ne(t);
1510
1615
  }
1511
1616
  };
1512
- class $ {
1513
- xi(t) {
1514
- const e = t.W(0), i = t.W(1), r = t.W(2), s = t.W(3);
1515
- return { characterPixels: e, primaryColorPixels: i, secondaryColorPixels: r, transformPixels: t.W(4), rotationPixels: s };
1617
+ class W {
1618
+ Li(t) {
1619
+ const e = t.k(0), r = t.k(1), i = t.k(2), s = t.k(3);
1620
+ return { characterPixels: e, primaryColorPixels: r, secondaryColorPixels: i, transformPixels: t.k(4), rotationPixels: s };
1516
1621
  }
1517
- Ci(t, e) {
1622
+ Ei(t, e) {
1518
1623
  return t[e] + (t[e + 1] << 8);
1519
1624
  }
1520
- yi(t, e) {
1625
+ Wi(t, e) {
1521
1626
  return { r: t[e], g: t[e + 1], b: t[e + 2], a: t[e + 3] };
1522
1627
  }
1523
1628
  }
1524
- class z {
1525
- wi(t, e) {
1629
+ class k {
1630
+ ki(t, e) {
1526
1631
  return new Blob([t], { type: e });
1527
1632
  }
1528
- $i(t, e, i) {
1633
+ Ui(t, e, r) {
1529
1634
  try {
1530
- const r = this.wi(t, i), s = URL.createObjectURL(r), n = document.createElement("a");
1635
+ const i = this.ki(t, r), s = URL.createObjectURL(i), n = document.createElement("a");
1531
1636
  n.href = s, n.download = e, n.style.display = "none", n.rel = "noopener", document.body.appendChild(n), n.click(), document.body.removeChild(n), URL.revokeObjectURL(s);
1532
- } catch (r) {
1533
- throw console.error("Failed to download file:", r), Error("File download failed: " + (r instanceof Error ? r.message : "Unknown error"));
1637
+ } catch (i) {
1638
+ throw console.error("Failed to download file:", i), Error("File download failed: " + (i instanceof Error ? i.message : "Unknown error"));
1534
1639
  }
1535
1640
  }
1536
- bi() {
1641
+ Vi() {
1537
1642
  return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
1538
1643
  }
1539
- Ti() {
1644
+ Oi() {
1540
1645
  const t = /* @__PURE__ */ new Date();
1541
1646
  return { date: t.toISOString().split("T")[0], time: t.toTimeString().split(" ")[0].replace(/:/g, "-") };
1542
1647
  }
1543
- zi(t) {
1648
+ ji(t) {
1544
1649
  return t.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
1545
1650
  }
1546
- Ri() {
1547
- return "'textmode-export'-" + this.bi();
1651
+ Hi() {
1652
+ return "textmode-export-" + this.Vi();
1548
1653
  }
1549
1654
  }
1550
- class Mt extends $ {
1551
- Mi(t, e, i) {
1552
- const r = t[i] === 255, s = t[i + 1] === 255, n = t[i + 2] === 255, o = e[i], h = e[i + 1];
1553
- return { isInverted: r, flipHorizontal: s, flipVertical: n, rotation: Math.round(360 * (o + h / 255) / 255 * 100) / 100 };
1655
+ class Pt extends W {
1656
+ Xi(t, e, r) {
1657
+ const i = t[r] === 255, s = t[r + 1] === 255, n = t[r + 2] === 255, o = e[r], h = e[r + 1];
1658
+ return { isInverted: i, flipHorizontal: s, flipVertical: n, rotation: Math.round(360 * (o + h / 255) / 255 * 100) / 100 };
1554
1659
  }
1555
- Si(t, e, i) {
1556
- return { x: t, y: e, cellX: t * i.cellWidth, cellY: e * i.cellHeight };
1660
+ Yi(t, e, r) {
1661
+ return { x: t, y: e, cellX: t * r.cellWidth, cellY: e * r.cellHeight };
1557
1662
  }
1558
- Ai(t, e) {
1559
- const i = [];
1560
- let r = 0;
1663
+ qi(t, e) {
1664
+ const r = [];
1665
+ let i = 0;
1561
1666
  for (let s = 0; s < e.rows; s++) for (let n = 0; n < e.cols; n++) {
1562
- const o = 4 * r, h = this.Ci(t.characterPixels, o);
1563
- let l = this.yi(t.primaryColorPixels, o), u = this.yi(t.secondaryColorPixels, o);
1564
- const f = this.Mi(t.transformPixels, t.rotationPixels, o);
1565
- if (f.isInverted) {
1667
+ const o = 4 * i, h = this.Ei(t.characterPixels, o);
1668
+ let l = this.Wi(t.primaryColorPixels, o), d = this.Wi(t.secondaryColorPixels, o);
1669
+ const u = this.Xi(t.transformPixels, t.rotationPixels, o);
1670
+ if (u.isInverted) {
1566
1671
  const g = l;
1567
- l = u, u = g;
1672
+ l = d, d = g;
1568
1673
  }
1569
- const d = this.Si(n, s, e);
1570
- i.push({ charIndex: h, primaryColor: l, secondaryColor: u, transform: f, position: d }), r++;
1674
+ const f = this.Yi(n, s, e);
1675
+ r.push({ charIndex: h, primaryColor: l, secondaryColor: d, transform: u, position: f }), i++;
1571
1676
  }
1572
- return i;
1677
+ return r;
1573
1678
  }
1574
1679
  }
1575
- class Ut {
1576
- Pi(t, e) {
1577
- const i = t.cmap;
1578
- for (const r of i.tables) if (r.format === 4) {
1579
- const s = r;
1680
+ class It {
1681
+ Zi(t, e) {
1682
+ const r = t.cmap;
1683
+ for (const i of r.tables) if (i.format === 4) {
1684
+ const s = i;
1580
1685
  for (let n = 0; n < s.startCount.length; n++) if (e >= s.startCount[n] && e <= s.endCount[n]) {
1581
1686
  if (s.idRangeOffset[n] === 0) return e + s.idDelta[n] & 65535;
1582
1687
  {
@@ -1587,8 +1692,8 @@ class Ut {
1587
1692
  }
1588
1693
  }
1589
1694
  }
1590
- } else if (r.format === 12) {
1591
- const s = r;
1695
+ } else if (i.format === 12) {
1696
+ const s = i;
1592
1697
  for (let n = 0; n < s.groups.length; n += 3) {
1593
1698
  const o = s.groups[n], h = s.groups[n + 1], l = s.groups[n + 2];
1594
1699
  if (e >= o && e <= h) return l + (e - o);
@@ -1596,60 +1701,60 @@ class Ut {
1596
1701
  }
1597
1702
  return 0;
1598
1703
  }
1599
- Fi(t, e, i, r, s) {
1704
+ Ni(t, e, r, i, s) {
1600
1705
  const n = s / t.head.unitsPerEm;
1601
- return { getBoundingBox: () => ({ x1: i + e.xMin * n, y1: r + -e.yMax * n, x2: i + e.xMax * n, y2: r + -e.yMin * n }), toSVG: () => this.Gi(e, i, r, n) };
1706
+ return { getBoundingBox: () => ({ x1: r + e.xMin * n, y1: i + -e.yMax * n, x2: r + e.xMax * n, y2: i + -e.yMin * n }), toSVG: () => this.Qi(e, r, i, n) };
1602
1707
  }
1603
- Gi(t, e, i, r) {
1708
+ Qi(t, e, r, i) {
1604
1709
  if (!t || !t.xs) return "";
1605
1710
  const { xs: s, ys: n, endPts: o, flags: h } = t;
1606
1711
  if (!(s && n && o && h)) return "";
1607
- let l = "", u = 0;
1608
- for (let f = 0; f < o.length; f++) {
1609
- const d = o[f];
1610
- if (!(d < u)) {
1611
- if (d >= u) {
1612
- const g = e + s[u] * r, p = i - n[u] * r;
1712
+ let l = "", d = 0;
1713
+ for (let u = 0; u < o.length; u++) {
1714
+ const f = o[u];
1715
+ if (!(f < d)) {
1716
+ if (f >= d) {
1717
+ const g = e + s[d] * i, p = r - n[d] * i;
1613
1718
  l += `M${g.toFixed(2)},${p.toFixed(2)}`;
1614
- let m = u + 1;
1615
- for (; m <= d; )
1719
+ let m = d + 1;
1720
+ for (; m <= f; )
1616
1721
  if (1 & h[m]) {
1617
- const w = e + s[m] * r, C = i - n[m] * r;
1618
- l += `L${w.toFixed(2)},${C.toFixed(2)}`, m++;
1722
+ const E = e + s[m] * i, v = r - n[m] * i;
1723
+ l += `L${E.toFixed(2)},${v.toFixed(2)}`, m++;
1619
1724
  } else {
1620
- const w = e + s[m] * r, C = i - n[m] * r;
1621
- let T = m + 1 > d ? u : m + 1;
1622
- if (1 & h[T]) {
1623
- const b = e + s[T] * r, P = i - n[T] * r;
1624
- l += `Q${w.toFixed(2)},${C.toFixed(2)} ${b.toFixed(2)},${P.toFixed(2)}`, m = T + 1;
1725
+ const E = e + s[m] * i, v = r - n[m] * i;
1726
+ let b = m + 1 > f ? d : m + 1;
1727
+ if (1 & h[b]) {
1728
+ const _ = e + s[b] * i, y = r - n[b] * i;
1729
+ l += `Q${E.toFixed(2)},${v.toFixed(2)} ${_.toFixed(2)},${y.toFixed(2)}`, m = b + 1;
1625
1730
  } else {
1626
- const b = (w + (e + s[T] * r)) / 2, P = (C + (i - n[T] * r)) / 2;
1627
- l += `Q${w.toFixed(2)},${C.toFixed(2)} ${b.toFixed(2)},${P.toFixed(2)}`, m = T;
1731
+ const _ = (E + (e + s[b] * i)) / 2, y = (v + (r - n[b] * i)) / 2;
1732
+ l += `Q${E.toFixed(2)},${v.toFixed(2)} ${_.toFixed(2)},${y.toFixed(2)}`, m = b;
1628
1733
  }
1629
1734
  }
1630
1735
  l += "Z";
1631
1736
  }
1632
- u = d + 1;
1737
+ d = f + 1;
1633
1738
  }
1634
1739
  }
1635
1740
  return l;
1636
1741
  }
1637
- Di(t, e, i, r, s) {
1638
- const n = t.codePointAt(0) || 0, o = this.Pi(e, n);
1742
+ Ji(t, e, r, i, s) {
1743
+ const n = t.codePointAt(0) || 0, o = this.Zi(e, n);
1639
1744
  let h = null;
1640
- return e.glyf && e.glyf[o] !== null ? h = e.glyf[o] : (h = E.T.glyf.je(e, o), e.glyf[o] = h), this.Fi(e, h, i, r, s);
1745
+ return e.glyf && e.glyf[o] !== null ? h = e.glyf[o] : (h = w.T.glyf.us(e, o), e.glyf[o] = h), this.Ni(e, h, r, i, s);
1641
1746
  }
1642
- Ii(t, e, i, r, s, n, o, h) {
1643
- const l = i + (s - h * (o / e.head.unitsPerEm)) / 2, u = r + (n + 0.7 * o) / 2;
1644
- return this.Di(t, e, l, u, o).toSVG() || null;
1747
+ Ki(t, e, r, i, s, n, o, h) {
1748
+ const l = r + (s - h * (o / e.head.unitsPerEm)) / 2, d = i + (n + 0.7 * o) / 2;
1749
+ return this.Ji(t, e, l, d, o).toSVG() || null;
1645
1750
  }
1646
1751
  }
1647
- class It {
1752
+ class Dt {
1648
1753
  constructor() {
1649
- c(this, "Bi");
1650
- this.Bi = new Ut();
1754
+ c(this, "tr");
1755
+ this.tr = new It();
1651
1756
  }
1652
- Li(t) {
1757
+ er(t) {
1653
1758
  return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1654
1759
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
1655
1760
  <svg width="${t.width}" height="${t.height}" viewBox="0 0 ${t.width} ${t.height}"
@@ -1657,103 +1762,103 @@ class It {
1657
1762
  <title>textmode art generated via textmode.js</title>
1658
1763
  <desc>textmode art visualization generated by textmode.js library</desc>`;
1659
1764
  }
1660
- Ei() {
1765
+ sr() {
1661
1766
  return `
1662
1767
  </g>
1663
1768
  </svg>`;
1664
1769
  }
1665
- Wi(t, e) {
1770
+ ir(t, e) {
1666
1771
  if (!e.includeBackgroundRectangles) return "";
1667
- const i = e.backgroundColor, r = `rgba(${i[0]},${i[1]},${i[2]},${i[3] / 255})`;
1772
+ const r = e.backgroundColor, i = `rgba(${r[0]},${r[1]},${r[2]},${r[3] / 255})`;
1668
1773
  return `
1669
- <rect width="${t.width}" height="${t.height}" fill="${r}" />`;
1774
+ <rect width="${t.width}" height="${t.height}" fill="${i}" />`;
1670
1775
  }
1671
- ki(t) {
1776
+ rr(t) {
1672
1777
  return `rgba(${t.r},${t.g},${t.b},${t.a / 255})`;
1673
1778
  }
1674
- Vi(t, e) {
1675
- const { transform: i, position: r } = t, s = r.cellX + e.cellWidth / 2, n = r.cellY + e.cellHeight / 2, o = [];
1676
- if (i.flipHorizontal || i.flipVertical) {
1677
- const h = i.flipHorizontal ? -1 : 1, l = i.flipVertical ? -1 : 1;
1779
+ nr(t, e) {
1780
+ const { transform: r, position: i } = t, s = i.cellX + e.cellWidth / 2, n = i.cellY + e.cellHeight / 2, o = [];
1781
+ if (r.flipHorizontal || r.flipVertical) {
1782
+ const h = r.flipHorizontal ? -1 : 1, l = r.flipVertical ? -1 : 1;
1678
1783
  o.push(`translate(${s} ${n})`), o.push(`scale(${h} ${l})`), o.push(`translate(${-s} ${-n})`);
1679
1784
  }
1680
- return i.rotation && o.push(`rotate(${i.rotation} ${s} ${n})`), o.length ? ` transform="${o.join(" ")}"` : "";
1785
+ return r.rotation && o.push(`rotate(${r.rotation} ${s} ${n})`), o.length ? ` transform="${o.join(" ")}"` : "";
1681
1786
  }
1682
- Oi(t, e, i) {
1683
- if (!i.includeBackgroundRectangles || t.secondaryColor.a === 0) return "";
1684
- const { position: r } = t, s = this.ki(t.secondaryColor);
1685
- return i.drawMode === "stroke" ? `
1686
- <rect x="${r.cellX}" y="${r.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" stroke="${s}" fill="none" stroke-width="${i.strokeWidth}" />` : `
1687
- <rect x="${r.cellX}" y="${r.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" fill="${s}" />`;
1787
+ ar(t, e, r) {
1788
+ if (!r.includeBackgroundRectangles || t.secondaryColor.a === 0) return "";
1789
+ const { position: i } = t, s = this.rr(t.secondaryColor);
1790
+ return r.drawMode === "stroke" ? `
1791
+ <rect x="${i.cellX}" y="${i.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" stroke="${s}" fill="none" stroke-width="${r.strokeWidth}" />` : `
1792
+ <rect x="${i.cellX}" y="${i.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" fill="${s}" />`;
1688
1793
  }
1689
- Di(t, e, i, r) {
1690
- const s = i.characters[t.charIndex];
1794
+ Ji(t, e, r, i) {
1795
+ const s = r.characters[t.charIndex];
1691
1796
  if (!s) return "";
1692
- const n = this.Bi.Ii(s.character, i.font, t.position.cellX, t.position.cellY, e.cellWidth, e.cellHeight, i.fontSize, s.advanceWidth);
1797
+ const n = this.tr.Ki(s.character, r.font, t.position.cellX, t.position.cellY, e.cellWidth, e.cellHeight, r.fontSize, s.advanceWidth);
1693
1798
  if (!n) return "";
1694
- const o = this.ki(t.primaryColor);
1695
- return r.drawMode === "stroke" ? `
1696
- <path id="${`path-${t.charIndex}-${t.position.cellX}-${t.position.cellY}`.replace(/\./g, "-")}" d="${n}" stroke="${o}" stroke-width="${r.strokeWidth}" fill="none" />` : `
1799
+ const o = this.rr(t.primaryColor);
1800
+ return i.drawMode === "stroke" ? `
1801
+ <path id="${`path-${t.charIndex}-${t.position.cellX}-${t.position.cellY}`.replace(/\./g, "-")}" d="${n}" stroke="${o}" stroke-width="${i.strokeWidth}" fill="none" />` : `
1697
1802
  <path d="${n}" fill="${o}" />`;
1698
1803
  }
1699
- Ui(t, e, i, r) {
1804
+ hr(t, e, r, i) {
1700
1805
  let s = "";
1701
- s += this.Oi(t, e, r);
1702
- const n = this.Vi(t, e), o = this.Di(t, e, i, r);
1806
+ s += this.ar(t, e, i);
1807
+ const n = this.nr(t, e), o = this.Ji(t, e, r, i);
1703
1808
  return o && (n ? (s += `
1704
1809
  <g${n}>`, s += o, s += `
1705
1810
  </g>`) : s += o), s;
1706
1811
  }
1707
- ji(t, e, i, r) {
1708
- let s = this.Li(e);
1709
- s += this.Wi(e, r), s += `
1812
+ cr(t, e, r, i) {
1813
+ let s = this.er(e);
1814
+ s += this.ir(e, i), s += `
1710
1815
  <g id="ascii-cells">`;
1711
- for (const n of t) s += this.Ui(n, e, i, r);
1712
- return s += this.Ei(), s;
1816
+ for (const n of t) s += this.hr(n, e, r, i);
1817
+ return s += this.sr(), s;
1713
1818
  }
1714
- Hi(t) {
1819
+ lr(t) {
1715
1820
  return t.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
1716
1821
  `).replace(/[ \t]+$/gm, "");
1717
1822
  }
1718
1823
  }
1719
- class Dt extends z {
1720
- qi(t) {
1721
- return this.wi(t, "image/svg+xml;charset=utf-8");
1824
+ class Mt extends k {
1825
+ ur(t) {
1826
+ return this.ki(t, "image/svg+xml;charset=utf-8");
1722
1827
  }
1723
- Ni(t, e) {
1724
- this.$i(t, this.zi(e) + ".svg", "image/svg+xml;charset=utf-8");
1828
+ dr(t, e) {
1829
+ this.Ui(t, this.ji(e) + ".svg", "image/svg+xml;charset=utf-8");
1725
1830
  }
1726
- Xi(t, e) {
1727
- this.Ni(t, e || this.Ri());
1831
+ pr(t, e) {
1832
+ this.dr(t, e || this.Hi());
1728
1833
  }
1729
1834
  }
1730
- class N {
1835
+ class X {
1731
1836
  constructor() {
1732
- c(this, "Yi");
1733
- c(this, "Qi");
1734
- c(this, "Zi");
1735
- this.Yi = new Mt(), this.Qi = new It(), this.Zi = new Dt();
1837
+ c(this, "_r");
1838
+ c(this, "gr");
1839
+ c(this, "mr");
1840
+ this._r = new Pt(), this.gr = new Dt(), this.mr = new Mt();
1736
1841
  }
1737
- Ji(t) {
1738
- return { includeBackgroundRectangles: t.includeBackgroundRectangles ?? !0, drawMode: t.drawMode ?? "fill", strokeWidth: t.strokeWidth ?? 1, backgroundColor: t.backgroundColor ?? [0, 0, 0, 0], filename: t.filename || this.Zi.Ri() };
1842
+ vr(t) {
1843
+ return { includeBackgroundRectangles: t.includeBackgroundRectangles ?? !0, drawMode: t.drawMode ?? "fill", strokeWidth: t.strokeWidth ?? 1, backgroundColor: t.backgroundColor ?? [0, 0, 0, 0], filename: t.filename || this.mr.Hi() };
1739
1844
  }
1740
- Ki(t, e = {}) {
1741
- const i = this.Yi.Ai(this.Yi.xi(t.pipeline), t.grid), r = this.Qi.ji(i, t.grid, t.font, this.Ji(e));
1742
- return this.Qi.Hi(r);
1845
+ Cr(t, e = {}) {
1846
+ const r = this._r.qi(this._r.Li(t.pipeline), t.grid), i = this.gr.cr(r, t.grid, t.font, this.vr(e));
1847
+ return this.gr.lr(i);
1743
1848
  }
1744
- Xi(t, e = {}) {
1745
- this.Zi.Xi(this.Ki(t, e), e.filename);
1849
+ pr(t, e = {}) {
1850
+ this.mr.pr(this.Cr(t, e), e.filename);
1746
1851
  }
1747
1852
  }
1748
- class Lt extends $ {
1749
- tr(t, e, i, r = " ") {
1853
+ class zt extends W {
1854
+ yr(t, e, r, i = " ") {
1750
1855
  var o;
1751
1856
  const s = [];
1752
1857
  let n = 0;
1753
1858
  for (let h = 0; h < e.rows; h++) {
1754
1859
  const l = [];
1755
- for (let u = 0; u < e.cols; u++) {
1756
- const f = 4 * n, d = this.Ci(t.characterPixels, f), g = ((o = i.characters[d]) == null ? void 0 : o.character) || r;
1860
+ for (let d = 0; d < e.cols; d++) {
1861
+ const u = 4 * n, f = this.Ei(t.characterPixels, u), g = ((o = r.characters[f]) == null ? void 0 : o.character) || i;
1757
1862
  l.push(g), n++;
1758
1863
  }
1759
1864
  s.push(l);
@@ -1762,68 +1867,68 @@ class Lt extends $ {
1762
1867
  }
1763
1868
  }
1764
1869
  class Bt {
1765
- er(t, e) {
1766
- const i = [];
1870
+ wr(t, e) {
1871
+ const r = [];
1767
1872
  for (const s of t) {
1768
1873
  let n = s.join("");
1769
- e.preserveTrailingSpaces || (n = n.replace(/\s+$/, "")), i.push(n);
1874
+ e.preserveTrailingSpaces || (n = n.replace(/\s+$/, "")), r.push(n);
1770
1875
  }
1771
- const r = e.lineEnding === "crlf" ? `\r
1876
+ const i = e.lineEnding === "crlf" ? `\r
1772
1877
  ` : `
1773
1878
  `;
1774
- return i.join(r);
1879
+ return r.join(i);
1775
1880
  }
1776
1881
  }
1777
- class $t extends z {
1778
- sr(t, e) {
1779
- const i = this.ir(e);
1780
- this.$i(t, i, "text/plain;charset=utf-8");
1882
+ class Gt extends k {
1883
+ $r(t, e) {
1884
+ const r = this.br(e);
1885
+ this.Ui(t, r, "text/plain;charset=utf-8");
1781
1886
  }
1782
- ir(t) {
1783
- let e = this.zi(t);
1784
- return e === ".txt" || e.length <= 4 ? this.Ri() : e;
1887
+ br(t) {
1888
+ let e = this.ji(t);
1889
+ return e === ".txt" || e.length <= 4 ? this.Hi() : e;
1785
1890
  }
1786
1891
  }
1787
- class k {
1892
+ class Y {
1788
1893
  constructor() {
1789
- c(this, "Yi");
1790
- c(this, "Qi");
1791
- c(this, "Zi");
1792
- this.Yi = new Lt(), this.Qi = new Bt(), this.Zi = new $t();
1894
+ c(this, "_r");
1895
+ c(this, "gr");
1896
+ c(this, "mr");
1897
+ this._r = new zt(), this.gr = new Bt(), this.mr = new Gt();
1793
1898
  }
1794
- Ji(t) {
1795
- return { preserveTrailingSpaces: t.preserveTrailingSpaces ?? !1, lineEnding: t.lineEnding ?? "lf", emptyCharacter: t.emptyCharacter ?? " ", filename: t.filename || this.Zi.Ri() };
1899
+ vr(t) {
1900
+ return { preserveTrailingSpaces: t.preserveTrailingSpaces ?? !1, lineEnding: t.lineEnding ?? "lf", emptyCharacter: t.emptyCharacter ?? " ", filename: t.filename || this.mr.Hi() };
1796
1901
  }
1797
- rr(t, e = {}) {
1798
- const i = this.Ji(e), r = this.Yi.tr(this.Yi.xi(t.pipeline), t.grid, t.font, i.emptyCharacter);
1799
- return this.Qi.er(r, i);
1902
+ zr(t, e = {}) {
1903
+ const r = this.vr(e), i = this._r.yr(this._r.Li(t.pipeline), t.grid, t.font, r.emptyCharacter);
1904
+ return this.gr.wr(i, r);
1800
1905
  }
1801
- sr(t, e = {}) {
1802
- this.Zi.sr(this.rr(t, e), e.filename);
1906
+ $r(t, e = {}) {
1907
+ this.mr.$r(this.zr(t, e), e.filename);
1803
1908
  }
1804
1909
  }
1805
- class zt extends $ {
1806
- nr(t, e = 1, i = "transparent") {
1807
- const r = t.canvas;
1808
- if (e === 1 && i === "transparent") return r;
1809
- const s = document.createElement("canvas"), n = s.getContext("2d"), o = Math.round(r.width * e), h = Math.round(r.height * e);
1810
- return s.width = o, s.height = h, i !== "transparent" && (n.fillStyle = i, n.fillRect(0, 0, o, h)), n.imageSmoothingEnabled = !1, n.drawImage(r, 0, 0, r.width, r.height, 0, 0, o, h), s;
1910
+ class $t extends W {
1911
+ Rr(t, e = 1, r = "transparent") {
1912
+ const i = t.canvas;
1913
+ if (e === 1 && r === "transparent") return i;
1914
+ const s = document.createElement("canvas"), n = s.getContext("2d"), o = Math.round(i.width * e), h = Math.round(i.height * e);
1915
+ return s.width = o, s.height = h, r !== "transparent" && (n.fillStyle = r, n.fillRect(0, 0, o, h)), n.imageSmoothingEnabled = !1, n.drawImage(i, 0, 0, i.width, i.height, 0, 0, o, h), s;
1811
1916
  }
1812
1917
  }
1813
- class Gt {
1814
- ar(t, e) {
1815
- const i = this.hr(e.format);
1816
- return e.format === "png" ? t.toDataURL(i) : t.toDataURL(i, e.quality);
1817
- }
1818
- async cr(t, e) {
1819
- return new Promise((i, r) => {
1820
- const s = this.hr(e.format), n = (o) => {
1821
- o ? i(o) : r(Error(`Failed to generate ${e.format.toUpperCase()} blob`));
1918
+ class Ot {
1919
+ Tr(t, e) {
1920
+ const r = this.Sr(e.format);
1921
+ return e.format === "png" ? t.toDataURL(r) : t.toDataURL(r, e.quality);
1922
+ }
1923
+ async Mr(t, e) {
1924
+ return new Promise((r, i) => {
1925
+ const s = this.Sr(e.format), n = (o) => {
1926
+ o ? r(o) : i(Error(`Failed to generate ${e.format.toUpperCase()} blob`));
1822
1927
  };
1823
1928
  e.format === "png" ? t.toBlob(n, s) : t.toBlob(n, s, e.quality);
1824
1929
  });
1825
1930
  }
1826
- hr(t) {
1931
+ Sr(t) {
1827
1932
  switch (t) {
1828
1933
  case "png":
1829
1934
  return "image/png";
@@ -1836,211 +1941,210 @@ class Gt {
1836
1941
  }
1837
1942
  }
1838
1943
  }
1839
- const Wt = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, V = { png: ".png", jpg: ".jpg", webp: ".webp" };
1840
- class Ot extends z {
1841
- lr(t, e, i) {
1842
- this.ur(t, this.zi(e) + V[i]);
1944
+ const Wt = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, H = { png: ".png", jpg: ".jpg", webp: ".webp" };
1945
+ class kt extends k {
1946
+ Fr(t, e, r) {
1947
+ this.Gr(t, this.ji(e) + H[r]);
1843
1948
  }
1844
- ur(t, e) {
1845
- const i = URL.createObjectURL(t);
1949
+ Gr(t, e) {
1950
+ const r = URL.createObjectURL(t);
1846
1951
  try {
1847
- const r = document.createElement("a");
1848
- r.href = i, r.download = e, r.style.display = "none", r.rel = "noopener", document.body.appendChild(r), r.click(), document.body.removeChild(r);
1952
+ const i = document.createElement("a");
1953
+ i.href = r, i.download = e, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i);
1849
1954
  } finally {
1850
- URL.revokeObjectURL(i);
1955
+ URL.revokeObjectURL(r);
1851
1956
  }
1852
1957
  }
1853
- dr(t) {
1854
- return t in Wt && t in V;
1958
+ Dr(t) {
1959
+ return t in Wt && t in H;
1855
1960
  }
1856
1961
  }
1857
1962
  class Nt {
1858
1963
  constructor() {
1859
- c(this, "Yi");
1860
- c(this, "Qi");
1861
- c(this, "Zi");
1862
- this.Yi = new zt(), this.Qi = new Gt(), this.Zi = new Ot();
1964
+ c(this, "_r");
1965
+ c(this, "gr");
1966
+ c(this, "mr");
1967
+ this._r = new $t(), this.gr = new Ot(), this.mr = new kt();
1863
1968
  }
1864
- Ji(t) {
1865
- return { format: t.format ?? "png", quality: t.quality ?? 1, scale: t.scale ?? 1, backgroundColor: t.backgroundColor ?? "transparent", filename: t.filename || this.Zi.Ri() };
1969
+ vr(t) {
1970
+ return { format: t.format ?? "png", quality: t.quality ?? 1, scale: t.scale ?? 1, backgroundColor: t.backgroundColor ?? "transparent", filename: t.filename || this.mr.Hi() };
1866
1971
  }
1867
- pr(t) {
1868
- if (!this.Zi.dr(t.format)) throw Error(`Saving '${t.format}' files is not supported`);
1972
+ Pr(t) {
1973
+ if (!this.mr.Dr(t.format)) throw Error(`Saving '${t.format}' files is not supported`);
1869
1974
  if (t.quality < 0 || t.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
1870
1975
  if (t.scale <= 0) throw Error("Scale factor must be greater than 0");
1871
1976
  t.format === "jpg" && t.backgroundColor === "transparent" && (t.backgroundColor = "black");
1872
1977
  }
1873
- async cr(t, e) {
1874
- if (e.scale === 1 && e.backgroundColor === "transparent") return await this.Qi.cr(t.canvas, e);
1875
- const i = this.Yi.nr(t, e.scale, e.backgroundColor);
1876
- return await this.Qi.cr(i, e);
1978
+ async Mr(t, e) {
1979
+ if (e.scale === 1 && e.backgroundColor === "transparent") return await this.gr.Mr(t.canvas, e);
1980
+ const r = this._r.Rr(t, e.scale, e.backgroundColor);
1981
+ return await this.gr.Mr(r, e);
1877
1982
  }
1878
- async lr(t, e = {}) {
1879
- const i = this.Ji(e);
1880
- this.pr(i);
1881
- const r = await this.cr(t, i);
1882
- this.Zi.lr(r, i.filename, i.format);
1983
+ async Fr(t, e = {}) {
1984
+ const r = this.vr(e);
1985
+ this.Pr(r);
1986
+ const i = await this.Mr(t, r);
1987
+ this.mr.Fr(i, r.filename, r.format);
1883
1988
  }
1884
1989
  }
1885
- const kt = (a) => class extends a {
1886
- gr() {
1887
- this.$s.Ue(this._r);
1990
+ const Vt = (a) => class extends a {
1991
+ Ar() {
1992
+ this.Us.ls(this.Br);
1888
1993
  }
1889
1994
  toString(t = {}) {
1890
- return this.gr(), new k().rr({ pipeline: this.mr, grid: this.vr, font: this.Gs }, t);
1995
+ return this.Ar(), new Y().zr({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
1891
1996
  }
1892
1997
  saveStrings(t = {}) {
1893
- this.gr(), new k().sr({ pipeline: this.mr, grid: this.vr, font: this.Gs }, t);
1998
+ this.Ar(), new Y().$r({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
1894
1999
  }
1895
2000
  toSVG(t = {}) {
1896
- return this.gr(), new N().Ki(this, t);
2001
+ return this.Ar(), new X().Cr({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
1897
2002
  }
1898
2003
  saveSVG(t = {}) {
1899
- this.gr(), new N().Xi(this, t);
2004
+ this.Ar(), new X().pr({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
1900
2005
  }
1901
2006
  async saveCanvas(t = {}) {
1902
- await new Nt().lr(this.ti, t);
2007
+ await new Nt().Fr(this.xi, t);
1903
2008
  }
1904
- }, Vt = (a) => class extends a {
2009
+ }, jt = (a) => class extends a {
1905
2010
  async loadFont(t) {
1906
- return this.Gs.Ys(t).then(() => {
1907
- const e = this.Gs.maxGlyphDimensions;
1908
- this.vr.ii(e.width, e.height), this.$s.Oe();
2011
+ return this.Qs.di(t).then(() => {
2012
+ const e = this.Qs.maxGlyphDimensions;
2013
+ this.Lr.wi(e.width, e.height), this.Ir.W(this.Lr.cols, this.Lr.rows), this.Us.cs();
1909
2014
  });
1910
2015
  }
1911
2016
  fontSize(t) {
1912
- if (!M._(typeof t == "number" && t > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: t }) || this.Gs.fontSize === t) return;
1913
- this.Gs.Xs(t);
1914
- const e = this.Gs.maxGlyphDimensions;
1915
- this.vr.ii(e.width, e.height), this.$s.Oe();
2017
+ if (!I.m(typeof t == "number" && t > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: t }) || this.Qs.fontSize === t) return;
2018
+ this.Qs.fi(t);
2019
+ const e = this.Qs.maxGlyphDimensions;
2020
+ this.Lr.wi(e.width, e.height), this.Ir.W(this.Lr.cols, this.Lr.rows), this.Us.cs();
1916
2021
  }
1917
2022
  }, Xt = (a) => class extends a {
1918
2023
  get frameCount() {
1919
- return this.Cr.frameCount;
2024
+ return this.Er.frameCount;
1920
2025
  }
1921
2026
  set frameCount(t) {
1922
- this.Cr.frameCount = t;
2027
+ this.Er.frameCount = t;
1923
2028
  }
1924
2029
  frameRate(t) {
1925
- return t === void 0 ? this.Cr.currentFrameRate : this.Cr.frameRate(t, () => this.yr());
2030
+ return t === void 0 ? this.Er.currentFrameRate : this.Er.frameRate(t, () => this.Wr());
1926
2031
  }
1927
2032
  noLoop() {
1928
- this.Cr.pause();
2033
+ this.Er.pause();
1929
2034
  }
1930
2035
  loop() {
1931
- this.Cr.resume(() => this.yr());
2036
+ this.Er.resume(() => this.Wr());
1932
2037
  }
1933
2038
  redraw(t = 1) {
1934
- if (M._(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.yr();
2039
+ if (I.m(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.Wr();
1935
2040
  }
1936
2041
  isLooping() {
1937
- return this.Cr.isLooping;
2042
+ return this.Er.isLooping;
1938
2043
  }
1939
2044
  };
1940
- class jt {
2045
+ class Yt {
1941
2046
  constructor() {
1942
- c(this, "$s");
1943
- c(this, "Gs");
1944
- c(this, "ti");
1945
- c(this, "vr");
1946
- c(this, "Cr");
1947
- c(this, "_r");
1948
- c(this, "mr");
1949
- c(this, "wr");
2047
+ c(this, "Us");
2048
+ c(this, "Qs");
2049
+ c(this, "xi");
2050
+ c(this, "Lr");
2051
+ c(this, "Er");
2052
+ c(this, "Br");
2053
+ c(this, "Ir");
2054
+ c(this, "kr");
1950
2055
  }
1951
- yr() {
2056
+ Wr() {
1952
2057
  }
1953
2058
  }
1954
- class Yt extends function(e, ...i) {
1955
- return i.reduce((r, s) => s(r), e);
1956
- }(jt, Pt, kt, Vt, Xt) {
2059
+ class Ht extends function(e, ...r) {
2060
+ return r.reduce((i, s) => s(i), e);
2061
+ }(Yt, Lt, Vt, jt, Xt) {
1957
2062
  constructor(e = {}) {
1958
2063
  super();
1959
- c(this, "$r", !1);
1960
- c(this, "br", () => {
2064
+ c(this, "Ur", !1);
2065
+ c(this, "Vr", () => {
1961
2066
  });
1962
- c(this, "Tr", () => {
2067
+ c(this, "Or", () => {
1963
2068
  });
1964
- c(this, "zr");
1965
- this.ti = new St(e), this.$s = new mt(this.ti.ai()), this.Gs = new At(this.$s, e.fontSize ?? 16), this.Cr = new Ft(e.frameRate ?? 60), this._r = this.$s.Fe(`#version 300 es
1966
- in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in float a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float oneMinusT=1.0-t;float oneMinusT2=oneMinusT*oneMinusT;float oneMinusT3=oneMinusT2*oneMinusT;float t2=t*t;float t3=t2*t;return oneMinusT3*p0+3.0*oneMinusT2*t*p1+3.0*oneMinusT*t2*p2+t3*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float oneMinusT=1.0-t;float oneMinusT2=oneMinusT*oneMinusT;float t2=t*t;return-3.0*oneMinusT2*p0+3.0*oneMinusT2*p1-6.0*oneMinusT*t*p1+6.0*oneMinusT*t*p2-3.0*t2*p2+3.0*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezierCurve=length(a_instanceBezierCP1)>0.0||length(a_instanceBezierCP2)>0.0||length(a_instanceBezierStart)>0.0||length(a_instanceBezierEnd)>0.0;bool isArc=a_instanceArcAngles.x!=0.0||a_instanceArcAngles.y!=0.0;if(isBezierCurve){float t=a_position.x;float thicknessOffset=a_position.y;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tangentLength=length(tangent);if(tangentLength>0.0){tangent=tangent/tangentLength;}else{tangent=vec2(1.0,0.0);}vec2 normal=vec2(-tangent.y,tangent.x);float thickness=a_instanceSize.y;vec2 thicknessVector=normal*thicknessOffset*thickness;worldPosition=curvePoint+thicknessVector;}else if(isArc){float startA=a_instanceArcAngles.x;float stopA=a_instanceArcAngles.y;float TWO_PI=6.28318530718;startA=mod(startA,TWO_PI);if(startA<0.0)startA+=TWO_PI;stopA=mod(stopA,TWO_PI);if(stopA<0.0)stopA+=TWO_PI;float cwDelta=startA-stopA;if(cwDelta<=0.0)cwDelta+=TWO_PI;float angle=startA-a_position.x*cwDelta;float r=a_position.y;vec2 local=vec2(cos(angle),sin(angle))*r;vec2 scaledPosition=local*a_instanceSize*0.5+vec2(a_instanceSize.x*0.5,a_instanceSize.y*0.5);worldPosition=scaledPosition+a_instancePosition;}else{vec2 scaledPosition=a_position*a_instanceSize;worldPosition=scaledPosition+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.0-1.0;ndc.y=-ndc.y;if(a_instanceGlobalRotation!=0.0){ndc-=a_instanceRotationCenter;ndc.x*=u_aspectRatio;ndc=rotate2D(-a_instanceGlobalRotation)*ndc;ndc.x/=u_aspectRatio;ndc+=a_instanceRotationCenter;}gl_Position=vec4(ndc,0.0,1.0);}`, `#version 300 es
1967
- precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.wr = this.$s.Fe("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
2069
+ c(this, "jr");
2070
+ this.xi = new Ft(e), this.Us = new xt(this.xi.Ri()), this.Qs = new Tt(this.Us, e.fontSize ?? 16), this.Er = new Ut(e.frameRate ?? 60), this.Br = this.Us.Xe(O, `#version 300 es
2071
+ precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.kr = this.Us.Xe("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
1968
2072
  }
1969
2073
  static async create(e = {}) {
1970
- const i = new this(e);
1971
- await i.Gs.Hs(e.fontSource);
1972
- const r = i.Gs.maxGlyphDimensions;
1973
- return i.vr = new _t(i.ti.canvas, r.width, r.height), i.mr = i.$s.We(i.vr.cols, i.vr.rows, 5), i.Rr(), i.Cr.start(() => i.yr()), i;
1974
- }
1975
- Rr() {
1976
- this.zr = () => {
1977
- this.Tr();
1978
- }, window.addEventListener("resize", this.zr);
1979
- }
1980
- yr() {
1981
- if (this.Cr.measureFrameRate(), this.Cr.incrementFrame(), this.$r) return;
1982
- this.mr.V(), this.$s.Pe(this._r), this.br(), this.$s.Ue(this._r), this.mr.O();
1983
- const e = this.$s.state.canvasBackgroundColor;
1984
- this.$s.te(e[0], e[1], e[2], e[3]), this.$s.Pe(this.wr), this.wr.et({ u_characterTexture: this.Gs.fontFramebuffer, u_charsetDimensions: [this.Gs.textureColumns, this.Gs.textureRows], u_asciiCharacterTexture: this.mr.textures[0], u_primaryColorTexture: this.mr.textures[1], u_secondaryColorTexture: this.mr.textures[2], u_transformTexture: this.mr.textures[4], u_rotationTexture: this.mr.textures[3], u_gridCellDimensions: [this.vr.cols, this.vr.rows], u_gridPixelDimensions: [this.vr.width, this.vr.height], u_gridOffsetPixels: [this.vr.offsetX, this.vr.offsetY], u_aspectRatio: this.vr.width / this.vr.height }), this.$s.Ge(this.vr.offsetX, this.vr.offsetY, this.vr.width, this.vr.height);
2074
+ const r = new this(e);
2075
+ await r.Qs.ci(e.fontSource);
2076
+ const i = r.Qs.maxGlyphDimensions;
2077
+ return r.Lr = new At(r.xi.canvas, i.width, i.height), r.Ir = r.Us.rs(r.Lr.cols, r.Lr.rows, 5), r.Hr(), r.Er.start(() => r.Wr()), r;
2078
+ }
2079
+ Hr() {
2080
+ this.jr = () => {
2081
+ this.Or();
2082
+ }, window.addEventListener("resize", this.jr);
2083
+ }
2084
+ Wr() {
2085
+ if (this.Er.measureFrameRate(), this.Er.incrementFrame(), this.Ur) return;
2086
+ this.Ir.V(), this.Us.He(this.Br), this.Vr(), this.Us.ls(this.Br), this.Ir.O();
2087
+ const e = this.Us.state.canvasBackgroundColor;
2088
+ this.Us.de(e[0], e[1], e[2], e[3]), this.Us.He(this.kr), this.kr.st({ u_characterTexture: this.Qs.fontFramebuffer, u_charsetDimensions: [this.Qs.textureColumns, this.Qs.textureRows], u_asciiCharacterTexture: this.Ir.textures[0], u_primaryColorTexture: this.Ir.textures[1], u_secondaryColorTexture: this.Ir.textures[2], u_transformTexture: this.Ir.textures[4], u_rotationTexture: this.Ir.textures[3], u_gridCellDimensions: [this.Lr.cols, this.Lr.rows], u_gridPixelDimensions: [this.Lr.width, this.Lr.height], u_gridOffsetPixels: [this.Lr.offsetX, this.Lr.offsetY], u_aspectRatio: this.Lr.width / this.Lr.height }), this.Us.Qe(this.Lr.offsetX, this.Lr.offsetY, this.Lr.width, this.Lr.height);
1985
2089
  }
1986
2090
  draw(e) {
1987
- this.br = e;
2091
+ this.Vr = e;
1988
2092
  }
1989
2093
  windowResized(e) {
1990
- this.Tr = e;
2094
+ this.Or = e;
1991
2095
  }
1992
- resizeCanvas(e, i) {
1993
- this.ti.L(e, i), this.vr.yt(), this.mr.L(this.vr.cols, this.vr.rows), this.$s.Oe(), this.yr();
2096
+ resizeCanvas(e, r) {
2097
+ this.xi.W(e, r), this.Lr.zt(), this.Ir.W(this.Lr.cols, this.Lr.rows), this.Us.cs(), this.Wr();
1994
2098
  }
1995
2099
  destroy() {
1996
- this.$r || (this.Cr.stop(), window.removeEventListener("resize", this.zr), this.Gs.U(), this.$s.U(), this.$r = !0);
2100
+ this.Ur || (this.Er.stop(), window.removeEventListener("resize", this.jr), this.Qs.j(), this.Us.j(), this.Ur = !0);
1997
2101
  }
1998
2102
  get grid() {
1999
- return this.vr;
2103
+ return this.Lr;
2000
2104
  }
2001
2105
  get font() {
2002
- return this.Gs;
2106
+ return this.Qs;
2003
2107
  }
2004
2108
  get width() {
2005
- return this.ti.width;
2109
+ return this.xi.width;
2006
2110
  }
2007
2111
  get height() {
2008
- return this.ti.height;
2112
+ return this.xi.height;
2009
2113
  }
2010
2114
  get canvas() {
2011
- return this.ti.canvas;
2115
+ return this.xi.canvas;
2012
2116
  }
2013
2117
  get isDisposed() {
2014
- return this.$r;
2118
+ return this.Ur;
2015
2119
  }
2016
2120
  get drawFramebuffer() {
2017
- return this.mr;
2121
+ return this.Ir;
2018
2122
  }
2019
2123
  }
2020
- class G {
2124
+ class N {
2021
2125
  constructor() {
2022
- throw new y("Textmode is a static class and cannot be instantiated.");
2126
+ throw new S("Textmode is a static class and cannot be instantiated.");
2023
2127
  }
2024
2128
  static async create(t) {
2025
- return Yt.create(t);
2129
+ return Ht.create(t);
2026
2130
  }
2027
2131
  static setErrorLevel(t) {
2028
- M.m(t);
2132
+ I.v(t);
2029
2133
  }
2030
2134
  static get version() {
2031
- return "0.2.0-beta.2";
2135
+ return "0.2.0-beta.3";
2032
2136
  }
2033
2137
  }
2034
- const qt = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), Zt = G.create, Qt = G.setErrorLevel, Jt = G.version;
2138
+ const Zt = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), Kt = N.create, qt = N.setErrorLevel, Jt = N.version;
2035
2139
  export {
2036
- St as TextmodeCanvas,
2037
- Q as TextmodeErrorLevel,
2038
- At as TextmodeFont,
2039
- _t as TextmodeGrid,
2040
- Yt as Textmodifier,
2041
- Zt as create,
2042
- qt as export,
2043
- Qt as setErrorLevel,
2044
- G as textmode,
2140
+ Ft as TextmodeCanvas,
2141
+ J as TextmodeErrorLevel,
2142
+ Tt as TextmodeFont,
2143
+ At as TextmodeGrid,
2144
+ Ht as Textmodifier,
2145
+ Kt as create,
2146
+ Zt as export,
2147
+ qt as setErrorLevel,
2148
+ N as textmode,
2045
2149
  Jt as version
2046
2150
  };