chat-layout 0.0.11 → 0.0.13
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.
- package/index.d.ts +5 -2
- package/index.js +111 -69
- package/index.js.map +4 -4
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -64,10 +64,10 @@ export class PaddingBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {
|
|
|
64
64
|
export class AlignBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {
|
|
65
65
|
#private;
|
|
66
66
|
readonly options: {
|
|
67
|
-
alignment:
|
|
67
|
+
alignment: Alignment;
|
|
68
68
|
};
|
|
69
69
|
constructor(inner: Node<C>, options: {
|
|
70
|
-
alignment:
|
|
70
|
+
alignment: Alignment;
|
|
71
71
|
});
|
|
72
72
|
measure(ctx: Context<C>): Box;
|
|
73
73
|
draw(ctx: Context<C>, x: number, y: number): boolean;
|
|
@@ -181,9 +181,12 @@ export interface RenderFeedback {
|
|
|
181
181
|
minIdx: number;
|
|
182
182
|
maxIdx: number;
|
|
183
183
|
}
|
|
184
|
+
export type Alignment = "left" | "center" | "right";
|
|
184
185
|
export interface Context<C extends CanvasRenderingContext2D> extends RendererOptions {
|
|
185
186
|
graphics: C;
|
|
186
187
|
remainingWidth: number;
|
|
188
|
+
alignment: Alignment;
|
|
189
|
+
reverse: boolean;
|
|
187
190
|
measureNode(node: Node<C>): Box;
|
|
188
191
|
invalidateNode(node: Node<C>): void;
|
|
189
192
|
resolveDynValue<T>(value: DynValue<C, T>): T;
|
package/index.js
CHANGED
|
@@ -127,6 +127,9 @@ class VStack extends Group {
|
|
|
127
127
|
measure(ctx) {
|
|
128
128
|
let width = 0;
|
|
129
129
|
let height = 0;
|
|
130
|
+
if (this.options.alignment != null) {
|
|
131
|
+
ctx.alignment = this.options.alignment;
|
|
132
|
+
}
|
|
130
133
|
for (let ref1 = this.children, i2 = 0, len2 = ref1.length;i2 < len2; i2++) {
|
|
131
134
|
const index = i2;
|
|
132
135
|
const child = ref1[i2];
|
|
@@ -143,6 +146,10 @@ class VStack extends Group {
|
|
|
143
146
|
draw(ctx, x, y) {
|
|
144
147
|
let result = false;
|
|
145
148
|
const fullwidth = ctx.measureNode(this).width;
|
|
149
|
+
const alignment = this.options.alignment ?? ctx.alignment;
|
|
150
|
+
if (this.options.alignment != null) {
|
|
151
|
+
ctx.alignment = this.options.alignment;
|
|
152
|
+
}
|
|
146
153
|
for (let ref2 = this.children, i3 = 0, len3 = ref2.length;i3 < len3; i3++) {
|
|
147
154
|
const index = i3;
|
|
148
155
|
const child = ref2[i3];
|
|
@@ -150,14 +157,14 @@ class VStack extends Group {
|
|
|
150
157
|
y += this.options.gap;
|
|
151
158
|
}
|
|
152
159
|
let { width, height } = shallow(ctx).measureNode(child);
|
|
153
|
-
|
|
160
|
+
const curctx = shallow(ctx);
|
|
154
161
|
let ref3;
|
|
155
|
-
if (
|
|
156
|
-
ref3 = child.draw(
|
|
157
|
-
} else if (
|
|
158
|
-
ref3 = child.draw(
|
|
162
|
+
if (alignment === "right") {
|
|
163
|
+
ref3 = child.draw(curctx, x + fullwidth - width, y);
|
|
164
|
+
} else if (alignment === "center") {
|
|
165
|
+
ref3 = child.draw(curctx, x + (fullwidth - width) / 2, y);
|
|
159
166
|
} else {
|
|
160
|
-
ref3 = child.draw(
|
|
167
|
+
ref3 = child.draw(curctx, x, y);
|
|
161
168
|
}
|
|
162
169
|
const request_redraw = ref3;
|
|
163
170
|
result ||= request_redraw;
|
|
@@ -168,26 +175,33 @@ class VStack extends Group {
|
|
|
168
175
|
hittest(ctx, test) {
|
|
169
176
|
let y = 0;
|
|
170
177
|
const fullwidth = ctx.measureNode(this).width;
|
|
178
|
+
const alignment = this.options.alignment ?? ctx.alignment;
|
|
179
|
+
if (this.options.alignment != null) {
|
|
180
|
+
ctx.alignment = this.options.alignment;
|
|
181
|
+
}
|
|
171
182
|
for (let ref4 = this.children, i4 = 0, len4 = ref4.length;i4 < len4; i4++) {
|
|
172
183
|
const index = i4;
|
|
173
184
|
const child = ref4[i4];
|
|
174
185
|
if (this.options.gap != null && index !== 0) {
|
|
175
186
|
y += this.options.gap;
|
|
176
187
|
}
|
|
188
|
+
let { width, height } = shallow(ctx).measureNode(child);
|
|
177
189
|
const curctx = shallow(ctx);
|
|
178
|
-
let { width, height } = curctx.measureNode(child);
|
|
179
190
|
if (test.y >= y && test.y < y + height) {
|
|
191
|
+
let ref5;
|
|
192
|
+
if (alignment === "right") {
|
|
193
|
+
ref5 = test.x - fullwidth + width;
|
|
194
|
+
} else if (alignment === "center") {
|
|
195
|
+
ref5 = test.x - (fullwidth - width) / 2;
|
|
196
|
+
} else {
|
|
197
|
+
ref5 = test.x;
|
|
198
|
+
}
|
|
199
|
+
const x = ref5;
|
|
200
|
+
if (x < 0 || x >= width) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
180
203
|
return child.hittest(curctx, shallowMerge(test, {
|
|
181
|
-
x
|
|
182
|
-
let m1;
|
|
183
|
-
if (m1 = this.options.alignment, m1 === "right") {
|
|
184
|
-
return test.x - fullwidth + width;
|
|
185
|
-
} else if (m1 === "center") {
|
|
186
|
-
return test.x - (fullwidth - width) / 2;
|
|
187
|
-
} else {
|
|
188
|
-
return test.x;
|
|
189
|
-
}
|
|
190
|
-
})(),
|
|
204
|
+
x,
|
|
191
205
|
y: test.y - y
|
|
192
206
|
}));
|
|
193
207
|
}
|
|
@@ -209,9 +223,9 @@ class HStack extends Group {
|
|
|
209
223
|
let width = 0;
|
|
210
224
|
let height = 0;
|
|
211
225
|
let firstflex;
|
|
212
|
-
for (let
|
|
226
|
+
for (let ref6 = this.children, i5 = 0, len5 = ref6.length;i5 < len5; i5++) {
|
|
213
227
|
const index = i5;
|
|
214
|
-
const child =
|
|
228
|
+
const child = ref6[i5];
|
|
215
229
|
if (this.options.gap != null && index !== 0) {
|
|
216
230
|
width += this.options.gap;
|
|
217
231
|
}
|
|
@@ -236,70 +250,92 @@ class HStack extends Group {
|
|
|
236
250
|
}
|
|
237
251
|
draw(ctx, x, y) {
|
|
238
252
|
let result = false;
|
|
253
|
+
const reverse = this.options.reverse ?? ctx.reverse;
|
|
239
254
|
if (this.options.reverse) {
|
|
255
|
+
ctx.reverse = this.options.reverse;
|
|
256
|
+
}
|
|
257
|
+
if (reverse) {
|
|
240
258
|
x += ctx.measureNode(this).width;
|
|
241
|
-
for (let
|
|
259
|
+
for (let ref7 = this.children, i6 = 0, len6 = ref7.length;i6 < len6; i6++) {
|
|
242
260
|
const index = i6;
|
|
243
|
-
const child =
|
|
244
|
-
|
|
245
|
-
|
|
261
|
+
const child = ref7[i6];
|
|
262
|
+
let ref8;
|
|
263
|
+
if (ref8 = this.options.gap != null && index !== 0 ? this.options.gap : undefined) {
|
|
264
|
+
const gap = ref8;
|
|
265
|
+
x -= gap;
|
|
266
|
+
ctx.remainingWidth -= gap;
|
|
246
267
|
}
|
|
247
268
|
const { width } = shallow(ctx).measureNode(child);
|
|
248
269
|
x -= width;
|
|
249
|
-
const request_redraw = child.draw(ctx, x, y);
|
|
270
|
+
const request_redraw = child.draw(shallow(ctx), x, y);
|
|
250
271
|
result ||= request_redraw;
|
|
272
|
+
ctx.remainingWidth -= width;
|
|
251
273
|
}
|
|
252
274
|
} else {
|
|
253
|
-
for (let
|
|
275
|
+
for (let ref9 = this.children, i7 = 0, len7 = ref9.length;i7 < len7; i7++) {
|
|
254
276
|
const index = i7;
|
|
255
|
-
const child =
|
|
256
|
-
|
|
257
|
-
|
|
277
|
+
const child = ref9[i7];
|
|
278
|
+
let ref10;
|
|
279
|
+
if (ref10 = this.options.gap != null && index !== 0 ? this.options.gap : undefined) {
|
|
280
|
+
const gap = ref10;
|
|
281
|
+
x += gap;
|
|
282
|
+
ctx.remainingWidth -= gap;
|
|
258
283
|
}
|
|
259
|
-
const request_redraw = child.draw(ctx, x, y);
|
|
284
|
+
const request_redraw = child.draw(shallow(ctx), x, y);
|
|
260
285
|
result ||= request_redraw;
|
|
261
286
|
const { width } = shallow(ctx).measureNode(child);
|
|
287
|
+
ctx.remainingWidth -= width;
|
|
262
288
|
x += width;
|
|
263
289
|
}
|
|
264
290
|
}
|
|
265
291
|
return result;
|
|
266
292
|
}
|
|
267
293
|
hittest(ctx, test) {
|
|
294
|
+
const reverse = this.options.reverse ?? ctx.reverse;
|
|
268
295
|
if (this.options.reverse) {
|
|
296
|
+
ctx.reverse = this.options.reverse;
|
|
297
|
+
}
|
|
298
|
+
if (reverse) {
|
|
269
299
|
let x = ctx.measureNode(this).width;
|
|
270
|
-
for (let
|
|
300
|
+
for (let ref11 = this.children, i8 = 0, len8 = ref11.length;i8 < len8; i8++) {
|
|
271
301
|
const index = i8;
|
|
272
|
-
const child =
|
|
273
|
-
|
|
274
|
-
|
|
302
|
+
const child = ref11[i8];
|
|
303
|
+
let ref12;
|
|
304
|
+
if (ref12 = this.options.gap != null && index !== 0 ? this.options.gap : undefined) {
|
|
305
|
+
const gap = ref12;
|
|
306
|
+
x -= gap;
|
|
307
|
+
ctx.remainingWidth -= gap;
|
|
275
308
|
}
|
|
276
|
-
const
|
|
277
|
-
const { width } = curctx.measureNode(child);
|
|
309
|
+
const { width } = shallow(ctx).measureNode(child);
|
|
278
310
|
x -= width;
|
|
279
|
-
let
|
|
280
|
-
if (x <= (
|
|
281
|
-
return child.hittest(
|
|
311
|
+
let ref13;
|
|
312
|
+
if (x <= (ref13 = test.x) && ref13 <= x + width) {
|
|
313
|
+
return child.hittest(shallow(ctx), shallowMerge(test, {
|
|
282
314
|
x: test.x - x
|
|
283
315
|
}));
|
|
284
316
|
}
|
|
317
|
+
ctx.remainingWidth -= width;
|
|
285
318
|
}
|
|
286
319
|
} else {
|
|
287
320
|
let x = 0;
|
|
288
|
-
for (let
|
|
321
|
+
for (let ref14 = this.children, i9 = 0, len9 = ref14.length;i9 < len9; i9++) {
|
|
289
322
|
const index = i9;
|
|
290
|
-
const child =
|
|
291
|
-
|
|
292
|
-
|
|
323
|
+
const child = ref14[i9];
|
|
324
|
+
let ref15;
|
|
325
|
+
if (ref15 = this.options.gap != null && index !== 0 ? this.options.gap : undefined) {
|
|
326
|
+
const gap = ref15;
|
|
327
|
+
x += gap;
|
|
328
|
+
ctx.remainingWidth -= gap;
|
|
293
329
|
}
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
return child.hittest(curctx, shallowMerge(test, {
|
|
330
|
+
const { width } = shallow(ctx).measureNode(child);
|
|
331
|
+
let ref16;
|
|
332
|
+
if (x <= (ref16 = test.x) && ref16 <= x + width) {
|
|
333
|
+
return child.hittest(shallow(ctx), shallowMerge(test, {
|
|
299
334
|
x: test.x - x
|
|
300
335
|
}));
|
|
301
336
|
}
|
|
302
337
|
x += width;
|
|
338
|
+
ctx.remainingWidth -= width;
|
|
303
339
|
}
|
|
304
340
|
}
|
|
305
341
|
return false;
|
|
@@ -356,7 +392,6 @@ class PaddingBox extends Wrapper {
|
|
|
356
392
|
return this.padding.right ?? 0;
|
|
357
393
|
}
|
|
358
394
|
measure(ctx) {
|
|
359
|
-
ctx = shallow(ctx);
|
|
360
395
|
ctx.remainingWidth -= this.#left + this.#right;
|
|
361
396
|
const { width, height } = ctx.measureNode(this.inner);
|
|
362
397
|
return {
|
|
@@ -365,14 +400,16 @@ class PaddingBox extends Wrapper {
|
|
|
365
400
|
};
|
|
366
401
|
}
|
|
367
402
|
draw(ctx, x, y) {
|
|
403
|
+
ctx.remainingWidth -= this.#left + this.#right;
|
|
368
404
|
return this.inner.draw(ctx, x + this.#left, y + this.#top);
|
|
369
405
|
}
|
|
370
406
|
hittest(ctx, test) {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
let
|
|
374
|
-
|
|
375
|
-
|
|
407
|
+
ctx.remainingWidth -= this.#left + this.#right;
|
|
408
|
+
const { width, height } = shallow(ctx).measureNode(this.inner);
|
|
409
|
+
let ref17;
|
|
410
|
+
let ref18;
|
|
411
|
+
if (0 <= (ref17 = test.x - this.#left) && ref17 < width && (0 <= (ref18 = test.y - this.#top) && ref18 < height)) {
|
|
412
|
+
return this.inner.hittest(shallow(ctx), shallowMerge(test, {
|
|
376
413
|
x: test.x - this.#left,
|
|
377
414
|
y: test.y - this.#top
|
|
378
415
|
}));
|
|
@@ -389,35 +426,38 @@ class AlignBox extends Wrapper {
|
|
|
389
426
|
this.options = options;
|
|
390
427
|
}
|
|
391
428
|
measure(ctx) {
|
|
429
|
+
ctx.alignment = this.options.alignment;
|
|
392
430
|
const { width, height } = ctx.measureNode(this.inner);
|
|
393
|
-
let
|
|
431
|
+
let ref19;
|
|
394
432
|
switch (this.options.alignment) {
|
|
395
433
|
case "center": {
|
|
396
|
-
|
|
434
|
+
ref19 = (ctx.remainingWidth - width) / 2;
|
|
397
435
|
break;
|
|
398
436
|
}
|
|
399
437
|
case "right": {
|
|
400
|
-
|
|
438
|
+
ref19 = ctx.remainingWidth - width;
|
|
401
439
|
break;
|
|
402
440
|
}
|
|
403
441
|
default: {
|
|
404
|
-
|
|
442
|
+
ref19 = 0;
|
|
405
443
|
}
|
|
406
444
|
}
|
|
407
|
-
this.#shift =
|
|
445
|
+
this.#shift = ref19;
|
|
408
446
|
return {
|
|
409
447
|
width: ctx.remainingWidth,
|
|
410
448
|
height
|
|
411
449
|
};
|
|
412
450
|
}
|
|
413
451
|
draw(ctx, x, y) {
|
|
452
|
+
ctx.alignment = this.options.alignment;
|
|
414
453
|
return this.inner.draw(ctx, x + this.#shift, y);
|
|
415
454
|
}
|
|
416
455
|
hittest(ctx, test) {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
456
|
+
ctx.alignment = this.options.alignment;
|
|
457
|
+
const { width } = shallow(ctx).measureNode(this.inner);
|
|
458
|
+
let ref20;
|
|
459
|
+
if (0 <= (ref20 = test.x - this.#shift) && ref20 < width) {
|
|
460
|
+
return this.inner.hittest(shallow(ctx), shallowMerge(test, {
|
|
421
461
|
x: test.x - this.#shift
|
|
422
462
|
}));
|
|
423
463
|
}
|
|
@@ -452,8 +492,8 @@ class MultilineText {
|
|
|
452
492
|
g.fillStyle = ctx.resolveDynValue(this.options.style);
|
|
453
493
|
switch (this.options.alignment) {
|
|
454
494
|
case "left": {
|
|
455
|
-
for (let
|
|
456
|
-
const { text, shift, lineHeight } =
|
|
495
|
+
for (let ref21 = this.#lines, i10 = 0, len10 = ref21.length;i10 < len10; i10++) {
|
|
496
|
+
const { text, shift, lineHeight } = ref21[i10];
|
|
457
497
|
g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2);
|
|
458
498
|
y += this.options.lineHeight;
|
|
459
499
|
}
|
|
@@ -462,8 +502,8 @@ class MultilineText {
|
|
|
462
502
|
case "right": {
|
|
463
503
|
x += this.#width;
|
|
464
504
|
g.textAlign = "right";
|
|
465
|
-
for (let
|
|
466
|
-
const { text, shift, lineHeight } =
|
|
505
|
+
for (let ref22 = this.#lines, i11 = 0, len11 = ref22.length;i11 < len11; i11++) {
|
|
506
|
+
const { text, shift, lineHeight } = ref22[i11];
|
|
467
507
|
g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2);
|
|
468
508
|
y += this.options.lineHeight;
|
|
469
509
|
}
|
|
@@ -472,8 +512,8 @@ class MultilineText {
|
|
|
472
512
|
case "center": {
|
|
473
513
|
x += this.#width / 2;
|
|
474
514
|
g.textAlign = "center";
|
|
475
|
-
for (let
|
|
476
|
-
const { text, shift, lineHeight } =
|
|
515
|
+
for (let ref23 = this.#lines, i12 = 0, len12 = ref23.length;i12 < len12; i12++) {
|
|
516
|
+
const { text, shift, lineHeight } = ref23[i12];
|
|
477
517
|
g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2);
|
|
478
518
|
y += this.options.lineHeight;
|
|
479
519
|
}
|
|
@@ -572,6 +612,8 @@ class BaseRenderer {
|
|
|
572
612
|
set remainingWidth(value) {
|
|
573
613
|
Object.defineProperty(this, "remainingWidth", { value, writable: true });
|
|
574
614
|
},
|
|
615
|
+
alignment: "left",
|
|
616
|
+
reverse: false,
|
|
575
617
|
measureNode(node) {
|
|
576
618
|
return self.measureNode(node, this);
|
|
577
619
|
},
|
|
@@ -955,5 +997,5 @@ export {
|
|
|
955
997
|
AlignBox
|
|
956
998
|
};
|
|
957
999
|
|
|
958
|
-
//# debugId=
|
|
1000
|
+
//# debugId=1C49092FC0BEE04D64756E2164756E21
|
|
959
1001
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
"import type { Context } from \"./types.civet\"\n\nexport type TextLayout = {\n width: number\n text: string\n shift: number\n lineHeight: number\n}\n\nexport function layoutFirstLine<C extends CanvasRenderingContext2D>(\n ctx: Context<C>,\n text: string,\n maxWidth: number\n): TextLayout {\n const line = (((text.replaceAll(/[^\\S\\n]+/g, \" \")).split(\"\\n\", 1))[0]).trim()\n const { width: textWidth, fontBoundingBoxAscent: shift, fontBoundingBoxDescent: lineHeight } = ctx.graphics.measureText(line)\n if (textWidth <= maxWidth) {\n return ({ width: textWidth, text: line, shift: shift / 2, lineHeight })\n }\n else {\n const { width, text } = splitToFitText(ctx, line, maxWidth, textWidth)\n return ({ width, text, shift: shift / 2, lineHeight })\n }\n}\n\nexport function layoutText<C extends CanvasRenderingContext2D>(\n ctx: Context<C>,\n text: string,\n maxWidth: number\n): { width: number; lines: TextLayout[] } {\n const results=[];for (let ref = text\n .replaceAll(/[^\\S\\n]+/g, \" \")\n .split(\"\\n\"), i = 0, len = ref.length; i < len; i++) {const line = ref[i];\n const trimed = line.trim()\n if (!trimed) { continue }\n results.push(trimed)\n };const inputLines =results\n if (inputLines.length === 0) { return { width: 0, lines: [] } }\n let width = 0\n const lines: TextLayout[] = []\n for (let i1 = 0, len1 = inputLines.length; i1 < len1; i1++) {let line = inputLines[i1];\n let { width: textWidth, fontBoundingBoxAscent: shift, fontBoundingBoxDescent: lineHeight } = ctx.graphics.measureText(line)\n if (textWidth <= maxWidth) {\n width = Math.max(width, textWidth)\n lines.push({width: textWidth, text: line, shift: shift / 2, lineHeight: lineHeight})\n }\n else {\n while (textWidth > maxWidth) {\n const splited = splitToFitText(ctx, line, maxWidth, textWidth)\n width = Math.max(width, splited.width)\n lines.push({text: splited.text, width: splited.width, shift: shift / 2, lineHeight: lineHeight})\n line = splited.rest;\n ({ width: textWidth } = ctx.graphics.measureText(line))\n }\n if (textWidth > 0) {\n width = Math.max(width, textWidth)\n lines.push({width: textWidth, text: line, shift: shift / 2, lineHeight: lineHeight})\n }\n }\n }\n return ({ width, lines })\n}\n\nfunction splitToFitText<C extends CanvasRenderingContext2D>(\n ctx: Context<C>,\n text: string,\n width: number,\n totalWidth: number\n): { text: string, width: number, rest: string } {\n const arr = ctx.splitText(text)\n let guess = Math.floor((width / totalWidth) * arr.length)\n let guessText\n let { width: guessWidth } = ctx.graphics.measureText(guessText = arr.slice(0, guess).join(\"\"))\n while (!(guessWidth >= width)) {\n guess++;\n ({ width: guessWidth } = ctx.graphics.measureText(guessText = arr.slice(0, guess).join(\"\")))\n }\n while (guessWidth > width) {\n const lastSpace = arr.lastIndexOf(\" \", guess - 1)\n if (lastSpace > 0) {\n guess = lastSpace\n }\n else {\n guess--\n };\n ({ width: guessWidth } = ctx.graphics.measureText(guessText = arr.slice(0, guess).join(\"\")))\n }\n return ({text: guessText,\n width: guessWidth,\n rest: (arr.slice(guess).join(\"\")).trimStart()})\n}",
|
|
6
6
|
"export function shallow<T extends {}>(object: T): T {\n return Object.create(object) as T\n}\n\nexport function shallowMerge<T extends {}, R extends {}>(object: T, other: R): T & R {\n return ({ __proto__: object, ...other } as unknown as T & R)\n}\n\n",
|
|
7
7
|
"import type { Node } from \"./types.civet\"\n\nconst registry = new WeakMap<Node<any>, Node<any>>()\n\nexport function registerNodeParent<C extends CanvasRenderingContext2D>(node: Node<C>, parent: Node<C>): void {\n registry.set(node, parent)\n}\n\nexport function unregisterNodeParent<C extends CanvasRenderingContext2D>(node: Node<C>): void {\n registry.delete(node)\n}\n\nexport function getNodeParent<C extends CanvasRenderingContext2D>(node: Node<C>): (Node<C> | undefined) {\n return registry.get(node)\n}\n",
|
|
8
|
-
"import type { Box, Context, Node, HitTest, DynValue } from \"./types.civet\";\nimport { layoutText, layoutFirstLine, type TextLayout } from \"./text.civet\";\nimport { shallow, shallowMerge } from \"./utils.civet\"\nimport { registerNodeParent, unregisterNodeParent } from \"./registry.civet\"\n\nexport abstract class Group<C extends CanvasRenderingContext2D> implements Node<C> {\n constructor(readonly children: Node<C>[]) {\n for (let i = 0, len = children.length; i < len; i++) {const child = children[i];\n registerNodeParent(child, this)\n }\n }\n\n abstract measure(ctx: Context<C>): Box\n abstract draw(ctx: Context<C>, x: number, y: number): boolean\n abstract hittest(ctx: Context<C>, test: HitTest): boolean\n get flex() {\n let results=false;for (let ref = this.children, i1 = 0, len1 = ref.length; i1 < len1; i1++) {const item = ref[i1];\n if (item.flex) {results = true; break}\n }return results\n }\n}\n\nexport class VStack<C extends CanvasRenderingContext2D> extends Group<C> {\n constructor(children: Node<C>[], readonly options: { gap?: number, alignment?: \"left\" | \"center\" | \"right\" } = {}) {\n super(children)\n }\n\n measure(ctx: Context<C>): Box {\n let width = 0\n let height = 0\n for (let ref1 = this.children, i2 = 0, len2 = ref1.length; i2 < len2; i2++) {const index = i2;const child = ref1[i2];\n if ((this.options.gap != null) && index !== 0) { height += this.options.gap }\n let result = shallow(ctx).measureNode(child)\n height += result.height\n width = Math.max(width, result.width)\n }\n ctx.remainingWidth -= width\n return ({ width, height })\n }\n\n draw(ctx: Context<C>, x: number, y: number) {\n let result = false\n const fullwidth = ctx.measureNode(this).width\n for (let ref2 = this.children, i3 = 0, len3 = ref2.length; i3 < len3; i3++) {const index = i3;const child = ref2[i3];\n if ((this.options.gap != null) && index !== 0) { y += this.options.gap }\n let { width, height } = shallow(ctx).measureNode(child)\n let m;let ref3;\n if(m = this.options.alignment,m === \"right\") { ref3 = child.draw(ctx, x + fullwidth - width, y)}\nelse if(m === \"center\") { ref3 = child.draw(ctx, x + (fullwidth - width) / 2, y)}\nelse { ref3 = child.draw(ctx, x, y) };const request_redraw =ref3\n result ||= request_redraw\n y += height\n }\n return result\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n let y = 0\n const fullwidth = ctx.measureNode(this).width\n for (let ref4 = this.children, i4 = 0, len4 = ref4.length; i4 < len4; i4++) {const index = i4;const child = ref4[i4];\n if ((this.options.gap != null) && index !== 0) { y += this.options.gap }\n const curctx = shallow(ctx)\n let { width, height } = curctx.measureNode(child)\n if (test.y >= y && test.y < y + height) {\n return child.hittest(curctx, shallowMerge(test, {\n x: (()=>{let m1;if(m1 = this.options.alignment,m1 === \"right\") { return test.x - fullwidth + width}\nelse if(m1 === \"center\") { return test.x - (fullwidth - width) / 2}\nelse { return test.x }})(),\n y: test.y - y,\n }))\n }\n y += height\n }\n return false\n }\n}\n\nexport class HStack<C extends CanvasRenderingContext2D> extends Group<C> {\n constructor(\n readonly children: Node<C>[],\n readonly options: { reverse?: boolean; gap?: number } = {}\n ) { super(children) }\n\n measure(ctx: Context<C>): Box {\n let width = 0\n let height = 0\n let firstflex: (Node<C> | undefined)\n for (let ref5 = this.children, i5 = 0, len5 = ref5.length; i5 < len5; i5++) {const index = i5;const child = ref5[i5];\n if ((this.options.gap != null) && index !== 0) { width += this.options.gap }\n if ((firstflex == null) && child.flex) {\n firstflex = child\n continue\n }\n const curctx = shallow(ctx)\n curctx.remainingWidth = ctx.remainingWidth - width\n const result = curctx.measureNode(child)\n width += result.width\n height = Math.max(height, result.height)\n }\n\n if (firstflex != null) {\n const curctx = shallow(ctx)\n curctx.remainingWidth = ctx.remainingWidth - width\n const result = curctx.measureNode(firstflex)\n width += result.width\n height = Math.max(height, result.height)\n }\n\n return ({ width, height })\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n let result = false\n if (this.options.reverse) {\n x += ctx.measureNode(this).width\n for (let ref6 = this.children, i6 = 0, len6 = ref6.length; i6 < len6; i6++) {const index = i6;const child = ref6[i6];\n if ((this.options.gap != null) && index !== 0) { x -= this.options.gap }\n const { width } = shallow(ctx).measureNode(child)\n x -= width\n const request_redraw = child.draw(ctx, x, y)\n result ||= request_redraw\n }\n }\n else {\n for (let ref7 = this.children, i7 = 0, len7 = ref7.length; i7 < len7; i7++) {const index = i7;const child = ref7[i7];\n if ((this.options.gap != null) && index !== 0) { x += this.options.gap }\n const request_redraw = child.draw(ctx, x, y)\n result ||= request_redraw\n const { width } = shallow(ctx).measureNode(child)\n x += width\n }\n }\n return result\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n if (this.options.reverse) {\n let x = ctx.measureNode(this).width\n for (let ref8 = this.children, i8 = 0, len8 = ref8.length; i8 < len8; i8++) {const index = i8;const child = ref8[i8];\n if ((this.options.gap != null) && index !== 0) { x -= this.options.gap }\n const curctx = shallow(ctx)\n const { width } = curctx.measureNode(child)\n x -= width\n let ref9;if (x <= (ref9 = test.x) && ref9 <= x + width) {\n return child.hittest(curctx, shallowMerge(test, {\n x: test.x - x,\n }))\n }\n }\n }\n else {\n let x = 0\n for (let ref10 = this.children, i9 = 0, len9 = ref10.length; i9 < len9; i9++) {const index = i9;const child = ref10[i9];\n if ((this.options.gap != null) && index !== 0) { x += this.options.gap }\n const curctx = shallow(ctx)\n const { width } = curctx.measureNode(child)\n let ref11;if (x <= (ref11 = test.x) && ref11 <= x + width) {\n return child.hittest(curctx, shallowMerge(test, {\n x: test.x - x,\n }))\n }\n x += width\n }\n }\n return false\n }\n}\n\nexport class Wrapper<C extends CanvasRenderingContext2D> implements Node<C> {\n #inner: Node<C>;constructor(inner1: Node<C>) {\n this.#inner = inner1;\n registerNodeParent(this.#inner, this)\n }\n\n get inner() { return this.#inner }\n set inner(newnode: Node<C>) {\n if (newnode === this.#inner) { return }\n unregisterNodeParent(this.#inner)\n this.#inner = newnode\n registerNodeParent(newnode, this)\n }\n\n get flex() { return this.inner.flex }\n\n measure(ctx: Context<C>): Box {\n return this.inner.measure(ctx)\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return this.inner.draw(ctx, x, y)\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n return this.inner.hittest(ctx, test)\n }\n}\n\nexport class PaddingBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {\n constructor(\n inner: Node<C>,\n readonly padding: {\n top?: number\n bottom?: number\n left?: number\n right?: number\n }\n = {}\n ) { super(inner) }\n\n get #top() { return this.padding.top ?? 0 }\n get #bottom() { return this.padding.bottom ?? 0 }\n get #left() { return this.padding.left ?? 0 }\n get #right() { return this.padding.right ?? 0 }\n\n measure(ctx: Context<C>): Box {\n ctx = shallow(ctx)\n ctx.remainingWidth -= this.#left + this.#right\n const { width, height } = ctx.measureNode(this.inner)\n return ({width: width + this.#left + this.#right,\n height: height + this.#top + this.#bottom,})\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return this.inner.draw(ctx, x + this.#left, y + this.#top)\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n const { width, height } = ctx.measureNode(this.inner)\n let ref12;let ref13;if(\n ((\n 0 <= (ref12 = test.x - this.#left) && ref12 < width)&&(\n 0 <= (ref13 = test.y - this.#top) && ref13 < height))) {\n return this.inner.hittest(ctx, shallowMerge(test, {\n x: test.x - this.#left,\n y: test.y - this.#top,\n }))\n }\n return false\n }\n}\n\nexport class AlignBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {\n #shift = 0\n\n constructor(\n inner: Node<C>,\n readonly options: {\n alignment: \"left\" | \"center\" | \"right\"\n }\n ) { super(inner) }\n\n measure(ctx: Context<C>): Box {\n const { width, height } = ctx.measureNode(this.inner)\n let ref14;switch(this.options.alignment) {\n case 'center': { ref14 = (ctx.remainingWidth - width) / 2;break;\n }\n case 'right': { ref14 = ctx.remainingWidth - width;break;\n }\n default: { ref14 = 0 }\n };this.#shift = ref14\n return ({width: ctx.remainingWidth,\n height: height})\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return this.inner.draw(ctx, x + this.#shift, y)\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n const { width } = ctx.measureNode(this.inner)\n let ref15;if (0 <= (ref15 = test.x - this.#shift) && ref15 < width) {\n return this.inner.hittest(ctx, shallowMerge(test, {\n x: test.x - this.#shift,\n }))\n }\n return false\n }\n}\n\nexport class MultilineText<C extends CanvasRenderingContext2D> implements Node<C> {\n #width: number = 0\n #lines: TextLayout[] = []\n\n constructor(\n readonly text: string,\n readonly options: {\n lineHeight: number\n font: string\n alignment: \"left\" | \"center\" | \"right\"\n style: DynValue<C, string>\n }\n ){}\n\n get flex() { return true }\n\n measure(ctx: Context<C>): Box {\n return ctx.with((g) => {\n g.font = this.options.font\n const {width: width1, lines } = layoutText(ctx, this.text, ctx.remainingWidth);this.#width = width1;this.#lines = lines;\n return ({ width: this.#width, height: this.#lines.length * this.options.lineHeight })\n })\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return ctx.with((g) => {\n g.font = this.options.font\n g.fillStyle = ctx.resolveDynValue(this.options.style)\n switch(this.options.alignment) {\n case 'left': {\n for (let ref16 = this.#lines, i10 = 0, len10 = ref16.length; i10 < len10; i10++) {const { text, shift, lineHeight } = ref16[i10];\n g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2)\n y += this.options.lineHeight\n };break;\n }\n case 'right': {\n x += this.#width\n g.textAlign = \"right\"\n for (let ref17 = this.#lines, i11 = 0, len11 = ref17.length; i11 < len11; i11++) {const { text, shift, lineHeight } = ref17[i11];\n g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2)\n y += this.options.lineHeight\n };break;\n }\n case 'center': {\n x += this.#width / 2\n g.textAlign = \"center\"\n for (let ref18 = this.#lines, i12 = 0, len12 = ref18.length; i12 < len12; i12++) {const { text, shift, lineHeight } = ref18[i12];\n g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2)\n y += this.options.lineHeight\n };break;\n }\n }\n return false\n })\n }\n\n hittest(ctx: Context<C>, test: HitTest) { return false }\n}\n\nexport class Text<C extends CanvasRenderingContext2D> implements Node<C> {\n constructor(\n readonly text: string,\n readonly options: {\n lineHeight: number\n font: string\n style: DynValue<C, string>\n }\n ){}\n\n #width = 0\n #text = \"\"\n #shift = 0\n #lineHeight = 0\n\n get flex() { return false }\n\n measure(ctx: Context<C>): Box {\n return ctx.with((g) => {\n g.font = this.options.font\n const {width: width2,text: text1,shift: shift1,lineHeight: lineHeight1 } = layoutFirstLine(ctx, this.text, ctx.remainingWidth);this.#width = width2;this.#text = text1;this.#shift = shift1;this.#lineHeight = lineHeight1;\n return ({ width: this.#width, height: this.options.lineHeight })\n })\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return ctx.with((g) => {\n g.font = this.options.font\n g.fillStyle = ctx.resolveDynValue(this.options.style)\n g.fillText(this.#text, x, y + this.#shift + (this.options.lineHeight - this.#lineHeight) / 2)\n return false\n })\n }\n\n hittest(ctx: Context<C>, test: HitTest) { return false }\n}\n\nexport class Fixed<C extends CanvasRenderingContext2D> implements Node<C> {\n constructor(readonly width: number, readonly height: number){}\n\n get flex() { return false }\n\n measure(ctx: Context<C>): Box {\n return ({ width: this.width, height: this.height })\n }\n\n draw(ctx: Context<C>, x: number, y: number) { return false }\n\n hittest(ctx: Context<C>, test: HitTest) { return false }\n}",
|
|
9
|
-
"var concatAssign: <B, A extends {push: (this: A, b: B) => void} | (B extends unknown[] ? {push: (this: A, ...b: B) => void} : never)>(lhs: A, rhs: B) => A = (lhs, rhs) => (((rhs as any)?.[Symbol.isConcatSpreadable] ?? Array.isArray(rhs)) ? (lhs as any).push.apply(lhs, rhs as any) : (lhs as any).push(rhs), lhs);\nimport type { RendererOptions, Context, Node, Box, HitTest, DynValue, RenderFeedback } from \"./types.civet\"\nimport { shallow, shallowMerge } from \"./utils.civet\"\nimport { getNodeParent } from \"./registry.civet\"\n\nexport class BaseRenderer<C extends CanvasRenderingContext2D, O extends {} = {}> {\n graphics: C\n #ctx: Context<C>\n #lastWidth: number\n #cache = new WeakMap<Node<C>, Box>()\n\n protected get context() { return shallow(this.#ctx) }\n\n constructor(graphics1: C, readonly options: RendererOptions & O) {\n this.graphics = graphics1;\n this.graphics.textBaseline = 'top'\n this.graphics.textRendering = 'optimizeLegibility'\n const self = this\n this.#ctx = {\n graphics: this.graphics,\n get remainingWidth() { return this.graphics.canvas.clientWidth },\n set remainingWidth(value) {\n Object.defineProperty(this, \"remainingWidth\", {value: value, writable: true})\n },\n measureNode(node: Node<C>) { return self.measureNode(node, this) },\n invalidateNode: this.invalidateNode.bind(this),\n resolveDynValue<T>(value: DynValue<C, T>): T {\n if (typeof value === \"function\") {\n return value(this.graphics)\n }\n else {\n return value as T\n }\n },\n with<T>(cb: (g: C) => T): T {\n this.graphics.save()\n try {\n return cb(this.graphics)} finally { this.graphics.restore() }\n },\n splitText(text: string) { return options.splitText(text) }}\n this.#lastWidth = this.graphics.canvas.clientWidth\n }\n\n invalidateNode(node: Node<C>): void {\n this.#cache.delete(node)\n let it: (Node<C> | undefined) = node\n while (it = getNodeParent(it)) {\n this.#cache.delete(it)\n }\n }\n\n measureNode(node: Node<C>, ctx?: Context<C>): Box {\n let ref;if (this.#lastWidth != this.graphics.canvas.clientWidth) {\n this.#cache = new WeakMap<Node<C>, Box>()\n }\n else if ((ref= this.#cache.get(node)) != null) {const result = ref;\n return result\n }\n const result = node.measure(ctx ?? this.context)\n this.#cache.set(node, result)\n return result\n }\n}\n\nexport class DebugRenderer<C extends CanvasRenderingContext2D> extends BaseRenderer<C> {\n draw(node: Node<C>): boolean {\n const { clientWidth: viewportWidth, clientHeight: viewportHeight } = this.graphics.canvas\n this.graphics.clearRect(0, 0, viewportWidth, viewportHeight)\n return node.draw(this.context, 0, 0)\n }\n\n hittest(node: Node<C>, test: HitTest): boolean {\n return node.hittest(this.context, test)\n }\n}\n\nexport function memoRenderItem<C extends CanvasRenderingContext2D, T extends {}>(renderItem: (item: T) => Node<C>) {\n const cache = new WeakMap<T, Node<C>>()\n function fn(item: T): Node<C> {\n let ref1;if ((ref1= cache.get(item)) != null) { const result = ref1;return result }\n const result = renderItem(item)\n cache.set(item, result)\n return result\n }\n return Object.assign(fn, {reset: cache.delete.bind(cache)})\n}\n\nexport class ListState<T extends {}> {\n offset = 0\n position = NaN\n items: T[] = []\n\n unshift(...items: T[]) { return this.unshiftAll(items) }\n\n unshiftAll(items: T[]) {\n this.position += items.length\n return this.items = items.concat(this.items)\n }\n\n push(...items: T[]) { return this.pushAll(items) }\n\n pushAll(items: T[]) { return concatAssign(this.items, items) }\n\n reset(): void {\n this.items = []\n this.offset = 0\n this.position = NaN\n }\n\n resetScroll(): void {\n this.offset = 0\n this.position = NaN\n }\n\n applyScroll(delta: number) { return this.offset += delta }\n}\n\nexport abstract class VirtualizedRenderer<C extends CanvasRenderingContext2D, T extends {}> extends BaseRenderer<C, {\n renderItem: (item: T) => Node<C>\n list: ListState<T>\n}> {\n get position() { return this.options.list.position }\n set position(value) { this.options.list.position = value }\n\n get offset() { return this.options.list.offset }\n set offset(value) { this.options.list.offset = value }\n\n get items() { return this.options.list.items }\n set items(value) { this.options.list.items = value }\n\n abstract render(): boolean\n abstract hittest(test: HitTest): boolean\n}\n\nexport class TimelineRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {\n #action: \"idle\" | \"scrollToTop\" = \"idle\"\n\n render(feedback?: RenderFeedback): boolean {\n const { clientWidth: viewportWidth, clientHeight: viewportHeight } = this.graphics.canvas\n this.graphics.clearRect(0, 0, viewportWidth, viewportHeight)\n\n let drawlength = 0\n\n if (isNaN(this.position)) { this.position = 0 }\n\n if (this.offset > 0) {\n if (this.position == 0) {\n this.offset = 0\n }\n else {\n for (let i1 = this.position - 1; i1 >= 0; --i1) {const i = i1;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n this.position = i\n this.offset -= height\n if (this.offset <= 0) { break }\n }\n if (this.position == 0 && this.offset > 0) { this.offset = 0 }\n }\n }\n\n let y = this.offset\n const drawlist: [Node<C>, number][] = []\n\n feedback != null ? feedback.minIdx = this.position : void 0\n\n for (let end = this.items.length, i2 = this.position; i2 < end; ++i2) {const i = i2;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n if (y + height > 0) {\n drawlist.push([node, y])\n drawlength += height\n feedback != null ? feedback.maxIdx = i : void 0\n }\n else {\n this.offset += height\n this.position = i + 1\n }\n y += height\n if (y >= viewportHeight) { break }\n }\n\n let shift = 0\n\n if (y < viewportHeight) {\n if (this.position == 0 && drawlength < viewportHeight) {\n shift = -this.offset\n this.offset = 0\n }\n else {\n shift = viewportHeight - y\n y = this.offset += shift\n let lastidx = -1\n for (let i3 = this.position - 1; i3 >= 0; --i3) {const i = i3;\n const item = this.items[lastidx = i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n drawlength += height\n y -= height\n drawlist.push([node, y - shift])\n feedback != null ? feedback.minIdx = i : void 0\n if (y < 0) { break }\n }\n if (lastidx == 0 && drawlength < viewportHeight) {\n shift = -drawlist[drawlist.length-1][1]\n this.position = 0\n this.offset = 0\n }\n }\n }\n\n let result = false\n for (let i4 = 0, len = drawlist.length; i4 < len; i4++) {const [node, y] = drawlist[i4];\n const request_redraw = node.draw(this.context, 0, y + shift)\n result ||= request_redraw\n }\n\n if (this.#action === 'scrollToTop') {\n if (this.position === 0 && this.offset === 0) {\n this.#action = \"idle\"\n }\n else {\n this.options.list.applyScroll(5 * (this.position + 1))\n return true\n }\n }\n return result\n }\n\n hittest(test: HitTest): boolean {\n const viewportHeight = this.graphics.canvas.clientHeight\n let y = this.offset\n for (let end1 = this.items.length, i5 = this.position; i5 < end1; ++i5) {const i = i5;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n if (test.y < y + height) {\n return node.hittest(this.context, shallowMerge(test, {y: test.y - y}))\n }\n y += height\n if (y >= viewportHeight) { break }\n }\n return false\n }\n\n scrollToTop(): void {\n this.#action = \"scrollToTop\"\n }\n}\n\nexport class ChatRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {\n #action: \"idle\" | \"scrollToBottom\" = \"idle\"\n\n render(feedback?: RenderFeedback) {\n const { clientWidth: viewportWidth, clientHeight: viewportHeight } = this.graphics.canvas\n this.graphics.clearRect(0, 0, viewportWidth, viewportHeight)\n\n let drawlength = 0\n if (isNaN(this.position)) { this.position = this.items.length - 1 }\n\n if (this.offset < 0) {\n if (this.position == this.items.length - 1) {\n this.offset = 0\n }\n else {\n for (let end2 = this.items.length, i6 = this.position + 1; i6 < end2; ++i6) {const i = i6;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n this.position = i\n this.offset += height\n if (this.offset > 0) { break }\n }\n }\n }\n\n let y = viewportHeight + this.offset\n const drawlist: [Node<C>, number][] = []\n\n feedback != null ? feedback.maxIdx = this.position : void 0\n\n for (let i7 = this.position; i7 >= 0; --i7) {const i = i7;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n y -= height\n if (y <= viewportHeight) {\n drawlist.push([node, y])\n drawlength += height\n feedback != null ? feedback.minIdx = i : void 0\n }\n else {\n this.offset -= height\n this.position = i - 1\n }\n if (y < 0) { break }\n }\n\n let shift = 0\n\n if (y > 0) {\n shift = -y\n if (drawlength < viewportHeight) {\n y = drawlength\n for (let end3 = this.items.length, i8 = this.position + 1; i8 < end3; ++i8) {const i = i8;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n drawlist.push([node, y - shift])\n y = drawlength += height\n this.position = i\n feedback != null ? feedback.maxIdx = i : void 0\n if (y >= viewportHeight) { break }\n }\n if (drawlength < viewportHeight) {\n this.offset = 0\n }\n else {\n this.offset = drawlength - viewportHeight\n }\n }\n else {\n this.offset = drawlength - viewportHeight\n }\n }\n\n let result = false\n for (let i9 = 0, len1 = drawlist.length; i9 < len1; i9++) {const [node, y] = drawlist[i9];\n const request_redraw = node.draw(this.context, 0, y + shift)\n result ||= request_redraw\n }\n\n if (this.#action === 'scrollToBottom') {\n if (this.position === this.items.length - 1 && this.offset === 0) {\n this.#action = \"idle\"\n }\n else {\n this.options.list.applyScroll(-5 * (this.items.length - this.position))\n return true\n }\n }\n return result\n }\n\n hittest(test: HitTest): boolean {\n const viewportHeight = this.graphics.canvas.clientHeight\n\n let drawlength = 0\n\n const results=[];for (let i10 = this.position; i10 >= 0; --i10) {const i = i10;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n drawlength += height\n results.push([node, height] as const)\n };const heights =results\n\n let y = drawlength < viewportHeight ? drawlength : viewportHeight + this.offset\n\n if (test.y > y) { return false }\n\n for (let i11 = 0, len2 = heights.length; i11 < len2; i11++) {const [node, height] = heights[i11];\n y -= height\n if (test.y > y) {\n return node.hittest(this.context, shallowMerge(test, {y: test.y - y}))\n }\n }\n\n return false\n }\n\n scrollToBottom(): void {\n this.#action = \"scrollToBottom\"\n }\n}"
|
|
8
|
+
"import type { Box, Context, Node, HitTest, DynValue, Alignment } from \"./types.civet\";\nimport { layoutText, layoutFirstLine, type TextLayout } from \"./text.civet\";\nimport { shallow, shallowMerge } from \"./utils.civet\"\nimport { registerNodeParent, unregisterNodeParent } from \"./registry.civet\"\n\nexport abstract class Group<C extends CanvasRenderingContext2D> implements Node<C> {\n constructor(readonly children: Node<C>[]) {\n for (let i = 0, len = children.length; i < len; i++) {const child = children[i];\n registerNodeParent(child, this)\n }\n }\n\n abstract measure(ctx: Context<C>): Box\n abstract draw(ctx: Context<C>, x: number, y: number): boolean\n abstract hittest(ctx: Context<C>, test: HitTest): boolean\n get flex() {\n let results=false;for (let ref = this.children, i1 = 0, len1 = ref.length; i1 < len1; i1++) {const item = ref[i1];\n if (item.flex) {results = true; break}\n }return results\n }\n}\n\nexport class VStack<C extends CanvasRenderingContext2D> extends Group<C> {\n constructor(children: Node<C>[], readonly options: { gap?: number, alignment?: \"left\" | \"center\" | \"right\" } = {}) {\n super(children)\n }\n\n measure(ctx: Context<C>): Box {\n let width = 0\n let height = 0\n if (this.options.alignment != null) { ctx.alignment = this.options.alignment }\n for (let ref1 = this.children, i2 = 0, len2 = ref1.length; i2 < len2; i2++) {const index = i2;const child = ref1[i2];\n if ((this.options.gap != null) && index !== 0) { height += this.options.gap }\n let result = shallow(ctx).measureNode(child)\n height += result.height\n width = Math.max(width, result.width)\n }\n ctx.remainingWidth -= width\n return ({ width, height })\n }\n\n draw(ctx: Context<C>, x: number, y: number) {\n let result = false\n const fullwidth = ctx.measureNode(this).width\n const alignment = this.options.alignment ?? ctx.alignment\n if (this.options.alignment != null) { ctx.alignment = this.options.alignment }\n for (let ref2 = this.children, i3 = 0, len3 = ref2.length; i3 < len3; i3++) {const index = i3;const child = ref2[i3];\n if ((this.options.gap != null) && index !== 0) { y += this.options.gap }\n let { width, height } = shallow(ctx).measureNode(child)\n const curctx = shallow(ctx)\n let ref3;\n if(alignment === \"right\") { ref3 = child.draw(curctx, x + fullwidth - width, y)}\nelse if(alignment === \"center\") { ref3 = child.draw(curctx, x + (fullwidth - width) / 2, y)}\nelse { ref3 = child.draw(curctx, x, y) };const request_redraw =ref3\n result ||= request_redraw\n y += height\n }\n return result\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n let y = 0\n const fullwidth = ctx.measureNode(this).width\n const alignment = this.options.alignment ?? ctx.alignment\n if (this.options.alignment != null) { ctx.alignment = this.options.alignment }\n for (let ref4 = this.children, i4 = 0, len4 = ref4.length; i4 < len4; i4++) {const index = i4;const child = ref4[i4];\n if ((this.options.gap != null) && index !== 0) { y += this.options.gap }\n let { width, height } = shallow(ctx).measureNode(child)\n const curctx = shallow(ctx)\n if (test.y >= y && test.y < y + height) {\n let ref5;if(alignment === \"right\") { ref5 = test.x - fullwidth + width}\nelse if(alignment === \"center\") { ref5 = test.x - (fullwidth - width) / 2}\nelse { ref5 = test.x };const x =ref5\n if (x < 0 || x >= width) { return false }\n return child.hittest(curctx, shallowMerge(test, {\n x: x,\n y: test.y - y,\n }))\n }\n y += height\n }\n return false\n }\n}\n\nexport class HStack<C extends CanvasRenderingContext2D> extends Group<C> {\n constructor(\n readonly children: Node<C>[],\n readonly options: { reverse?: boolean; gap?: number } = {}\n ) { super(children) }\n\n measure(ctx: Context<C>): Box {\n let width = 0\n let height = 0\n let firstflex: (Node<C> | undefined)\n for (let ref6 = this.children, i5 = 0, len5 = ref6.length; i5 < len5; i5++) {const index = i5;const child = ref6[i5];\n if ((this.options.gap != null) && index !== 0) { width += this.options.gap }\n if ((firstflex == null) && child.flex) {\n firstflex = child\n continue\n }\n const curctx = shallow(ctx)\n curctx.remainingWidth = ctx.remainingWidth - width\n const result = curctx.measureNode(child)\n width += result.width\n height = Math.max(height, result.height)\n }\n\n if (firstflex != null) {\n const curctx = shallow(ctx)\n curctx.remainingWidth = ctx.remainingWidth - width\n const result = curctx.measureNode(firstflex)\n width += result.width\n height = Math.max(height, result.height)\n }\n\n return ({ width, height })\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n let result = false\n const reverse = this.options.reverse ?? ctx.reverse\n if (this.options.reverse) { ctx.reverse = this.options.reverse }\n if (reverse) {\n x += ctx.measureNode(this).width\n for (let ref7 = this.children, i6 = 0, len6 = ref7.length; i6 < len6; i6++) {const index = i6;const child = ref7[i6];\n let ref8;if ((ref8 = (((this.options.gap != null) && index !== 0?this.options.gap:void 0)))) {const gap = ref8;\n x -= gap\n ctx.remainingWidth -= gap\n }\n const { width } = shallow(ctx).measureNode(child)\n x -= width\n const request_redraw = child.draw(shallow(ctx), x, y)\n result ||= request_redraw\n ctx.remainingWidth -= width\n }\n }\n else {\n for (let ref9 = this.children, i7 = 0, len7 = ref9.length; i7 < len7; i7++) {const index = i7;const child = ref9[i7];\n let ref10;if ((ref10 = (((this.options.gap != null) && index !== 0?this.options.gap:void 0)))) {const gap = ref10;\n x += gap\n ctx.remainingWidth -= gap\n }\n const request_redraw = child.draw(shallow(ctx), x, y)\n result ||= request_redraw\n const { width } = shallow(ctx).measureNode(child)\n ctx.remainingWidth -= width\n x += width\n }\n }\n return result\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n const reverse = this.options.reverse ?? ctx.reverse\n if (this.options.reverse) { ctx.reverse = this.options.reverse }\n if (reverse) {\n let x = ctx.measureNode(this).width\n for (let ref11 = this.children, i8 = 0, len8 = ref11.length; i8 < len8; i8++) {const index = i8;const child = ref11[i8];\n let ref12;if ((ref12 = (((this.options.gap != null) && index !== 0?this.options.gap:void 0)))) {const gap = ref12;\n x -= gap\n ctx.remainingWidth -= gap\n }\n const { width } = shallow(ctx).measureNode(child)\n x -= width\n let ref13;if (x <= (ref13 = test.x) && ref13 <= x + width) {\n return child.hittest(shallow(ctx), shallowMerge(test, {\n x: test.x - x,\n }))\n }\n ctx.remainingWidth -= width\n }\n }\n else {\n let x = 0\n for (let ref14 = this.children, i9 = 0, len9 = ref14.length; i9 < len9; i9++) {const index = i9;const child = ref14[i9];\n let ref15;if ((ref15 = (((this.options.gap != null) && index !== 0?this.options.gap:void 0)))) {const gap = ref15;\n x += gap\n ctx.remainingWidth -= gap\n }\n const { width } = shallow(ctx).measureNode(child)\n let ref16;if (x <= (ref16 = test.x) && ref16 <= x + width) {\n return child.hittest(shallow(ctx), shallowMerge(test, {\n x: test.x - x,\n }))\n }\n x += width\n ctx.remainingWidth -= width\n }\n }\n return false\n }\n}\n\nexport class Wrapper<C extends CanvasRenderingContext2D> implements Node<C> {\n #inner: Node<C>;constructor(inner1: Node<C>) {\n this.#inner = inner1;\n registerNodeParent(this.#inner, this)\n }\n\n get inner() { return this.#inner }\n set inner(newnode: Node<C>) {\n if (newnode === this.#inner) { return }\n unregisterNodeParent(this.#inner)\n this.#inner = newnode\n registerNodeParent(newnode, this)\n }\n\n get flex() { return this.inner.flex }\n\n measure(ctx: Context<C>): Box {\n return this.inner.measure(ctx)\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return this.inner.draw(ctx, x, y)\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n return this.inner.hittest(ctx, test)\n }\n}\n\nexport class PaddingBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {\n constructor(\n inner: Node<C>,\n readonly padding: {\n top?: number\n bottom?: number\n left?: number\n right?: number\n }\n = {}\n ) { super(inner) }\n\n get #top() { return this.padding.top ?? 0 }\n get #bottom() { return this.padding.bottom ?? 0 }\n get #left() { return this.padding.left ?? 0 }\n get #right() { return this.padding.right ?? 0 }\n\n measure(ctx: Context<C>): Box {\n ctx.remainingWidth -= this.#left + this.#right\n const { width, height } = ctx.measureNode(this.inner)\n return ({width: width + this.#left + this.#right,\n height: height + this.#top + this.#bottom,})\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n ctx.remainingWidth -= this.#left + this.#right\n return this.inner.draw(ctx, x + this.#left, y + this.#top)\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n ctx.remainingWidth -= this.#left + this.#right\n const { width, height } = shallow(ctx).measureNode(this.inner)\n let ref17;let ref18;if(\n ((\n 0 <= (ref17 = test.x - this.#left) && ref17 < width)&&(\n 0 <= (ref18 = test.y - this.#top) && ref18 < height))) {\n return this.inner.hittest(shallow(ctx), shallowMerge(test, {\n x: test.x - this.#left,\n y: test.y - this.#top,\n }))\n }\n return false\n }\n}\n\nexport class AlignBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {\n #shift = 0\n\n constructor(\n inner: Node<C>,\n readonly options: {alignment: Alignment}\n ) { super(inner) }\n\n measure(ctx: Context<C>): Box {\n ctx.alignment = this.options.alignment\n const { width, height } = ctx.measureNode(this.inner)\n let ref19;switch(this.options.alignment) {\n case 'center': { ref19 = (ctx.remainingWidth - width) / 2;break;\n }\n case 'right': { ref19 = ctx.remainingWidth - width;break;\n }\n default: { ref19 = 0 }\n };this.#shift = ref19\n return ({width: ctx.remainingWidth,\n height: height})\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n ctx.alignment = this.options.alignment\n return this.inner.draw(ctx, x + this.#shift, y)\n }\n\n hittest(ctx: Context<C>, test: HitTest): boolean {\n ctx.alignment = this.options.alignment\n const { width } = shallow(ctx).measureNode(this.inner)\n let ref20;if (0 <= (ref20 = test.x - this.#shift) && ref20 < width) {\n return this.inner.hittest(shallow(ctx), shallowMerge(test, {\n x: test.x - this.#shift,\n }))\n }\n return false\n }\n}\n\nexport class MultilineText<C extends CanvasRenderingContext2D> implements Node<C> {\n #width: number = 0\n #lines: TextLayout[] = []\n\n constructor(\n readonly text: string,\n readonly options: {\n lineHeight: number\n font: string\n alignment: \"left\" | \"center\" | \"right\"\n style: DynValue<C, string>\n }\n ){}\n\n get flex() { return true }\n\n measure(ctx: Context<C>): Box {\n return ctx.with((g) => {\n g.font = this.options.font\n const {width: width1, lines } = layoutText(ctx, this.text, ctx.remainingWidth);this.#width = width1;this.#lines = lines;\n return ({ width: this.#width, height: this.#lines.length * this.options.lineHeight })\n })\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return ctx.with((g) => {\n g.font = this.options.font\n g.fillStyle = ctx.resolveDynValue(this.options.style)\n switch(this.options.alignment) {\n case 'left': {\n for (let ref21 = this.#lines, i10 = 0, len10 = ref21.length; i10 < len10; i10++) {const { text, shift, lineHeight } = ref21[i10];\n g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2)\n y += this.options.lineHeight\n };break;\n }\n case 'right': {\n x += this.#width\n g.textAlign = \"right\"\n for (let ref22 = this.#lines, i11 = 0, len11 = ref22.length; i11 < len11; i11++) {const { text, shift, lineHeight } = ref22[i11];\n g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2)\n y += this.options.lineHeight\n };break;\n }\n case 'center': {\n x += this.#width / 2\n g.textAlign = \"center\"\n for (let ref23 = this.#lines, i12 = 0, len12 = ref23.length; i12 < len12; i12++) {const { text, shift, lineHeight } = ref23[i12];\n g.fillText(text, x, y + shift + (this.options.lineHeight - lineHeight) / 2)\n y += this.options.lineHeight\n };break;\n }\n }\n return false\n })\n }\n\n hittest(ctx: Context<C>, test: HitTest) { return false }\n}\n\nexport class Text<C extends CanvasRenderingContext2D> implements Node<C> {\n constructor(\n readonly text: string,\n readonly options: {\n lineHeight: number\n font: string\n style: DynValue<C, string>\n }\n ){}\n\n #width = 0\n #text = \"\"\n #shift = 0\n #lineHeight = 0\n\n get flex() { return false }\n\n measure(ctx: Context<C>): Box {\n return ctx.with((g) => {\n g.font = this.options.font\n const {width: width2,text: text1,shift: shift1,lineHeight: lineHeight1 } = layoutFirstLine(ctx, this.text, ctx.remainingWidth);this.#width = width2;this.#text = text1;this.#shift = shift1;this.#lineHeight = lineHeight1;\n return ({ width: this.#width, height: this.options.lineHeight })\n })\n }\n\n draw(ctx: Context<C>, x: number, y: number): boolean {\n return ctx.with((g) => {\n g.font = this.options.font\n g.fillStyle = ctx.resolveDynValue(this.options.style)\n g.fillText(this.#text, x, y + this.#shift + (this.options.lineHeight - this.#lineHeight) / 2)\n return false\n })\n }\n\n hittest(ctx: Context<C>, test: HitTest) { return false }\n}\n\nexport class Fixed<C extends CanvasRenderingContext2D> implements Node<C> {\n constructor(readonly width: number, readonly height: number){}\n\n get flex() { return false }\n\n measure(ctx: Context<C>): Box {\n return ({ width: this.width, height: this.height })\n }\n\n draw(ctx: Context<C>, x: number, y: number) { return false }\n\n hittest(ctx: Context<C>, test: HitTest) { return false }\n}",
|
|
9
|
+
"var concatAssign: <B, A extends {push: (this: A, b: B) => void} | (B extends unknown[] ? {push: (this: A, ...b: B) => void} : never)>(lhs: A, rhs: B) => A = (lhs, rhs) => (((rhs as any)?.[Symbol.isConcatSpreadable] ?? Array.isArray(rhs)) ? (lhs as any).push.apply(lhs, rhs as any) : (lhs as any).push(rhs), lhs);\nimport type { RendererOptions, Context, Node, Box, HitTest, DynValue, RenderFeedback } from \"./types.civet\"\nimport { shallow, shallowMerge } from \"./utils.civet\"\nimport { getNodeParent } from \"./registry.civet\"\n\nexport class BaseRenderer<C extends CanvasRenderingContext2D, O extends {} = {}> {\n graphics: C\n #ctx: Context<C>\n #lastWidth: number\n #cache = new WeakMap<Node<C>, Box>()\n\n protected get context() { return shallow(this.#ctx) }\n\n constructor(graphics1: C, readonly options: RendererOptions & O) {\n this.graphics = graphics1;\n this.graphics.textBaseline = 'top'\n this.graphics.textRendering = 'optimizeLegibility'\n const self = this\n this.#ctx = {\n graphics: this.graphics,\n get remainingWidth() { return this.graphics.canvas.clientWidth },\n set remainingWidth(value) {\n Object.defineProperty(this, \"remainingWidth\", {value: value, writable: true})\n },\n alignment: \"left\",\n reverse: false,\n measureNode(node: Node<C>) { return self.measureNode(node, this) },\n invalidateNode: this.invalidateNode.bind(this),\n resolveDynValue<T>(value: DynValue<C, T>): T {\n if (typeof value === \"function\") {\n return value(this.graphics)\n }\n else {\n return value as T\n }\n },\n with<T>(cb: (g: C) => T): T {\n this.graphics.save()\n try {\n return cb(this.graphics)} finally { this.graphics.restore() }\n },\n splitText(text: string) { return options.splitText(text) }}\n this.#lastWidth = this.graphics.canvas.clientWidth\n }\n\n invalidateNode(node: Node<C>): void {\n this.#cache.delete(node)\n let it: (Node<C> | undefined) = node\n while (it = getNodeParent(it)) {\n this.#cache.delete(it)\n }\n }\n\n measureNode(node: Node<C>, ctx?: Context<C>): Box {\n let ref;if (this.#lastWidth != this.graphics.canvas.clientWidth) {\n this.#cache = new WeakMap<Node<C>, Box>()\n }\n else if ((ref= this.#cache.get(node)) != null) {const result = ref;\n return result\n }\n const result = node.measure(ctx ?? this.context)\n this.#cache.set(node, result)\n return result\n }\n}\n\nexport class DebugRenderer<C extends CanvasRenderingContext2D> extends BaseRenderer<C> {\n draw(node: Node<C>): boolean {\n const { clientWidth: viewportWidth, clientHeight: viewportHeight } = this.graphics.canvas\n this.graphics.clearRect(0, 0, viewportWidth, viewportHeight)\n return node.draw(this.context, 0, 0)\n }\n\n hittest(node: Node<C>, test: HitTest): boolean {\n return node.hittest(this.context, test)\n }\n}\n\nexport function memoRenderItem<C extends CanvasRenderingContext2D, T extends {}>(renderItem: (item: T) => Node<C>) {\n const cache = new WeakMap<T, Node<C>>()\n function fn(item: T): Node<C> {\n let ref1;if ((ref1= cache.get(item)) != null) { const result = ref1;return result }\n const result = renderItem(item)\n cache.set(item, result)\n return result\n }\n return Object.assign(fn, {reset: cache.delete.bind(cache)})\n}\n\nexport class ListState<T extends {}> {\n offset = 0\n position = NaN\n items: T[] = []\n\n unshift(...items: T[]) { return this.unshiftAll(items) }\n\n unshiftAll(items: T[]) {\n this.position += items.length\n return this.items = items.concat(this.items)\n }\n\n push(...items: T[]) { return this.pushAll(items) }\n\n pushAll(items: T[]) { return concatAssign(this.items, items) }\n\n reset(): void {\n this.items = []\n this.offset = 0\n this.position = NaN\n }\n\n resetScroll(): void {\n this.offset = 0\n this.position = NaN\n }\n\n applyScroll(delta: number) { return this.offset += delta }\n}\n\nexport abstract class VirtualizedRenderer<C extends CanvasRenderingContext2D, T extends {}> extends BaseRenderer<C, {\n renderItem: (item: T) => Node<C>\n list: ListState<T>\n}> {\n get position() { return this.options.list.position }\n set position(value) { this.options.list.position = value }\n\n get offset() { return this.options.list.offset }\n set offset(value) { this.options.list.offset = value }\n\n get items() { return this.options.list.items }\n set items(value) { this.options.list.items = value }\n\n abstract render(): boolean\n abstract hittest(test: HitTest): boolean\n}\n\nexport class TimelineRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {\n #action: \"idle\" | \"scrollToTop\" = \"idle\"\n\n render(feedback?: RenderFeedback): boolean {\n const { clientWidth: viewportWidth, clientHeight: viewportHeight } = this.graphics.canvas\n this.graphics.clearRect(0, 0, viewportWidth, viewportHeight)\n\n let drawlength = 0\n\n if (isNaN(this.position)) { this.position = 0 }\n\n if (this.offset > 0) {\n if (this.position == 0) {\n this.offset = 0\n }\n else {\n for (let i1 = this.position - 1; i1 >= 0; --i1) {const i = i1;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n this.position = i\n this.offset -= height\n if (this.offset <= 0) { break }\n }\n if (this.position == 0 && this.offset > 0) { this.offset = 0 }\n }\n }\n\n let y = this.offset\n const drawlist: [Node<C>, number][] = []\n\n feedback != null ? feedback.minIdx = this.position : void 0\n\n for (let end = this.items.length, i2 = this.position; i2 < end; ++i2) {const i = i2;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n if (y + height > 0) {\n drawlist.push([node, y])\n drawlength += height\n feedback != null ? feedback.maxIdx = i : void 0\n }\n else {\n this.offset += height\n this.position = i + 1\n }\n y += height\n if (y >= viewportHeight) { break }\n }\n\n let shift = 0\n\n if (y < viewportHeight) {\n if (this.position == 0 && drawlength < viewportHeight) {\n shift = -this.offset\n this.offset = 0\n }\n else {\n shift = viewportHeight - y\n y = this.offset += shift\n let lastidx = -1\n for (let i3 = this.position - 1; i3 >= 0; --i3) {const i = i3;\n const item = this.items[lastidx = i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n drawlength += height\n y -= height\n drawlist.push([node, y - shift])\n feedback != null ? feedback.minIdx = i : void 0\n if (y < 0) { break }\n }\n if (lastidx == 0 && drawlength < viewportHeight) {\n shift = -drawlist[drawlist.length-1][1]\n this.position = 0\n this.offset = 0\n }\n }\n }\n\n let result = false\n for (let i4 = 0, len = drawlist.length; i4 < len; i4++) {const [node, y] = drawlist[i4];\n const request_redraw = node.draw(this.context, 0, y + shift)\n result ||= request_redraw\n }\n\n if (this.#action === 'scrollToTop') {\n if (this.position === 0 && this.offset === 0) {\n this.#action = \"idle\"\n }\n else {\n this.options.list.applyScroll(5 * (this.position + 1))\n return true\n }\n }\n return result\n }\n\n hittest(test: HitTest): boolean {\n const viewportHeight = this.graphics.canvas.clientHeight\n let y = this.offset\n for (let end1 = this.items.length, i5 = this.position; i5 < end1; ++i5) {const i = i5;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n if (test.y < y + height) {\n return node.hittest(this.context, shallowMerge(test, {y: test.y - y}))\n }\n y += height\n if (y >= viewportHeight) { break }\n }\n return false\n }\n\n scrollToTop(): void {\n this.#action = \"scrollToTop\"\n }\n}\n\nexport class ChatRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {\n #action: \"idle\" | \"scrollToBottom\" = \"idle\"\n\n render(feedback?: RenderFeedback) {\n const { clientWidth: viewportWidth, clientHeight: viewportHeight } = this.graphics.canvas\n this.graphics.clearRect(0, 0, viewportWidth, viewportHeight)\n\n let drawlength = 0\n if (isNaN(this.position)) { this.position = this.items.length - 1 }\n\n if (this.offset < 0) {\n if (this.position == this.items.length - 1) {\n this.offset = 0\n }\n else {\n for (let end2 = this.items.length, i6 = this.position + 1; i6 < end2; ++i6) {const i = i6;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n this.position = i\n this.offset += height\n if (this.offset > 0) { break }\n }\n }\n }\n\n let y = viewportHeight + this.offset\n const drawlist: [Node<C>, number][] = []\n\n feedback != null ? feedback.maxIdx = this.position : void 0\n\n for (let i7 = this.position; i7 >= 0; --i7) {const i = i7;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n y -= height\n if (y <= viewportHeight) {\n drawlist.push([node, y])\n drawlength += height\n feedback != null ? feedback.minIdx = i : void 0\n }\n else {\n this.offset -= height\n this.position = i - 1\n }\n if (y < 0) { break }\n }\n\n let shift = 0\n\n if (y > 0) {\n shift = -y\n if (drawlength < viewportHeight) {\n y = drawlength\n for (let end3 = this.items.length, i8 = this.position + 1; i8 < end3; ++i8) {const i = i8;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n drawlist.push([node, y - shift])\n y = drawlength += height\n this.position = i\n feedback != null ? feedback.maxIdx = i : void 0\n if (y >= viewportHeight) { break }\n }\n if (drawlength < viewportHeight) {\n this.offset = 0\n }\n else {\n this.offset = drawlength - viewportHeight\n }\n }\n else {\n this.offset = drawlength - viewportHeight\n }\n }\n\n let result = false\n for (let i9 = 0, len1 = drawlist.length; i9 < len1; i9++) {const [node, y] = drawlist[i9];\n const request_redraw = node.draw(this.context, 0, y + shift)\n result ||= request_redraw\n }\n\n if (this.#action === 'scrollToBottom') {\n if (this.position === this.items.length - 1 && this.offset === 0) {\n this.#action = \"idle\"\n }\n else {\n this.options.list.applyScroll(-5 * (this.items.length - this.position))\n return true\n }\n }\n return result\n }\n\n hittest(test: HitTest): boolean {\n const viewportHeight = this.graphics.canvas.clientHeight\n\n let drawlength = 0\n\n const results=[];for (let i10 = this.position; i10 >= 0; --i10) {const i = i10;\n const item = this.items[i]\n const node = this.options.renderItem(item)\n const { height } = this.measureNode(node)\n drawlength += height\n results.push([node, height] as const)\n };const heights =results\n\n let y = drawlength < viewportHeight ? drawlength : viewportHeight + this.offset\n\n if (test.y > y) { return false }\n\n for (let i11 = 0, len2 = heights.length; i11 < len2; i11++) {const [node, height] = heights[i11];\n y -= height\n if (test.y > y) {\n return node.hittest(this.context, shallowMerge(test, {y: test.y - y}))\n }\n }\n\n return false\n }\n\n scrollToBottom(): void {\n this.#action = \"scrollToBottom\"\n }\n}"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "1C49092FC0BEE04D64756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/package.json
CHANGED