@jrichman/ink 6.4.4 → 6.4.6

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.
Files changed (46) hide show
  1. package/build/components/App.d.ts +2 -0
  2. package/build/components/App.js +1 -0
  3. package/build/components/App.js.map +1 -1
  4. package/build/components/AppContext.d.ts +2 -0
  5. package/build/components/AppContext.js.map +1 -1
  6. package/build/components/Box.d.ts +1 -0
  7. package/build/dom.d.ts +2 -0
  8. package/build/dom.js +29 -20
  9. package/build/dom.js.map +1 -1
  10. package/build/index.d.ts +4 -2
  11. package/build/index.js +3 -1
  12. package/build/index.js.map +1 -1
  13. package/build/ink.d.ts +6 -0
  14. package/build/ink.js +15 -3
  15. package/build/ink.js.map +1 -1
  16. package/build/layout.d.ts +18 -0
  17. package/build/layout.js +54 -0
  18. package/build/layout.js.map +1 -0
  19. package/build/log-update.js +3 -0
  20. package/build/log-update.js.map +1 -1
  21. package/build/measure-element.d.ts +29 -1
  22. package/build/measure-element.js +515 -0
  23. package/build/measure-element.js.map +1 -1
  24. package/build/measure-text.js +21 -14
  25. package/build/measure-text.js.map +1 -1
  26. package/build/render-node-to-output.d.ts +7 -1
  27. package/build/render-node-to-output.js +53 -16
  28. package/build/render-node-to-output.js.map +1 -1
  29. package/build/render.d.ts +10 -0
  30. package/build/render.js +1 -0
  31. package/build/render.js.map +1 -1
  32. package/build/renderer.d.ts +2 -1
  33. package/build/renderer.js +135 -1
  34. package/build/renderer.js.map +1 -1
  35. package/build/selection.d.ts +44 -0
  36. package/build/selection.js +370 -0
  37. package/build/selection.js.map +1 -0
  38. package/build/styles.d.ts +8 -0
  39. package/build/styles.js.map +1 -1
  40. package/build/text-wrap.d.ts +1 -0
  41. package/build/text-wrap.js +13 -0
  42. package/build/text-wrap.js.map +1 -1
  43. package/build/vertical-gap.d.ts +17 -0
  44. package/build/vertical-gap.js +20 -0
  45. package/build/vertical-gap.js.map +1 -0
  46. package/package.json +1 -1
@@ -1,5 +1,10 @@
1
1
  import Yoga from 'yoga-layout';
2
2
  import { getScrollLeft, getScrollTop } from './scroll.js';
3
+ import squashTextNodes from './squash-text-nodes.js';
4
+ import { toStyledCharacters, inkCharacterWidth, styledCharsToString, } from './measure-text.js';
5
+ import { wrapOrTruncateStyledChars } from './text-wrap.js';
6
+ import getMaxWidth from './get-max-width.js';
7
+ import { processLayout } from './layout.js';
3
8
  /**
4
9
  Measure the dimensions of a particular `<Box>` element.
5
10
  */
@@ -186,5 +191,515 @@ export const getHorizontalScrollbarBoundingBox = (node, offset) => {
186
191
  },
187
192
  };
188
193
  };
194
+ export const collectSortedFragments = (node) => {
195
+ const fragments = [];
196
+ const collect = (currentNode, coords, isSelectable) => {
197
+ const { x, y, visualX, visualY } = coords;
198
+ let v = 0;
199
+ let h = 0;
200
+ let currentSelectable = isSelectable;
201
+ const { userSelect } = currentNode.style;
202
+ if (userSelect === 'none') {
203
+ currentSelectable = false;
204
+ }
205
+ else if (userSelect === 'text' || userSelect === 'all') {
206
+ currentSelectable = true;
207
+ }
208
+ if (currentNode.nodeName === 'ink-text' ||
209
+ currentNode.nodeName === 'ink-virtual-text') {
210
+ if (currentSelectable) {
211
+ const text = getText(currentNode);
212
+ fragments.push({
213
+ node: currentNode,
214
+ text,
215
+ x,
216
+ y,
217
+ visualX,
218
+ visualY,
219
+ width: currentNode.yogaNode?.getComputedWidth() ?? 0,
220
+ height: currentNode.yogaNode?.getComputedHeight() ?? 0,
221
+ });
222
+ return { v: 0, h: 0, hasContent: true };
223
+ }
224
+ return {
225
+ v: currentNode.yogaNode?.getComputedHeight() ?? 0,
226
+ h: currentNode.yogaNode?.getComputedWidth() ?? 0,
227
+ hasContent: false,
228
+ };
229
+ }
230
+ if (currentNode.nodeName === 'ink-box' ||
231
+ currentNode.nodeName === 'ink-root') {
232
+ if (!currentNode.yogaNode ||
233
+ currentNode.yogaNode.getDisplay() === Yoga.DISPLAY_NONE) {
234
+ return { v: 0, h: 0, hasContent: false };
235
+ }
236
+ const borderTop = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_TOP);
237
+ const borderBottom = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM);
238
+ const borderLeft = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_LEFT);
239
+ const borderRight = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_RIGHT);
240
+ v += borderTop + borderBottom;
241
+ h += borderLeft + borderRight;
242
+ const flexDirection = currentNode.yogaNode.getFlexDirection();
243
+ const isColumn = flexDirection === Yoga.FLEX_DIRECTION_COLUMN ||
244
+ flexDirection === Yoga.FLEX_DIRECTION_COLUMN_REVERSE;
245
+ let siblingRemovedH = 0;
246
+ let siblingRemovedV = 0;
247
+ let childHasContent = false;
248
+ for (const child of currentNode.childNodes) {
249
+ if (child.yogaNode) {
250
+ const parentBorderLeft = currentNode.yogaNode.getComputedBorder(Yoga.EDGE_LEFT);
251
+ const childX = x +
252
+ child.yogaNode.getComputedLeft() -
253
+ parentBorderLeft -
254
+ siblingRemovedH;
255
+ const childY = y + child.yogaNode.getComputedTop() - borderTop - siblingRemovedV;
256
+ const childVisualX = visualX + child.yogaNode.getComputedLeft();
257
+ const childVisualY = visualY + child.yogaNode.getComputedTop();
258
+ const res = collect(child, {
259
+ x: childX,
260
+ y: childY,
261
+ visualX: childVisualX,
262
+ visualY: childVisualY,
263
+ }, currentSelectable);
264
+ if (res.hasContent) {
265
+ childHasContent = true;
266
+ }
267
+ if (isColumn) {
268
+ siblingRemovedV += res.v;
269
+ }
270
+ else {
271
+ siblingRemovedH += res.h;
272
+ }
273
+ }
274
+ }
275
+ if (isColumn) {
276
+ v += siblingRemovedV;
277
+ }
278
+ else {
279
+ h += siblingRemovedH;
280
+ }
281
+ if (!childHasContent && userSelect === 'none') {
282
+ return {
283
+ v: currentNode.yogaNode.getComputedHeight(),
284
+ h: currentNode.yogaNode.getComputedWidth(),
285
+ hasContent: false,
286
+ };
287
+ }
288
+ return { v, h, hasContent: childHasContent };
289
+ }
290
+ return { v: 0, h: 0, hasContent: false };
291
+ };
292
+ const { v, h } = collect(node, { x: 0, y: 0, visualX: 0, visualY: 0 }, true);
293
+ fragments.sort((a, b) => {
294
+ if (a.y !== b.y) {
295
+ return a.y - b.y;
296
+ }
297
+ return a.x - b.x;
298
+ });
299
+ return { fragments, removedVertical: v, removedHorizontal: h };
300
+ };
301
+ export const getText = (node) => {
302
+ if (node.nodeName === '#text') {
303
+ return node.nodeValue;
304
+ }
305
+ if (node.nodeName === 'ink-text' || node.nodeName === 'ink-virtual-text') {
306
+ const text = squashTextNodes(node);
307
+ const styledChars = toStyledCharacters(text);
308
+ const plainText = styledChars.map(char => char.value).join('');
309
+ const textWrap = node.style.textWrap ?? 'wrap';
310
+ if (textWrap.startsWith('truncate')) {
311
+ const maxWidth = getMaxWidth(node.yogaNode);
312
+ const lines = wrapOrTruncateStyledChars(styledChars, maxWidth, textWrap);
313
+ return styledCharsToString(lines[0]);
314
+ }
315
+ return plainText;
316
+ }
317
+ if (node.nodeName === 'ink-box' || node.nodeName === 'ink-root') {
318
+ if (!node.yogaNode) {
319
+ return '';
320
+ }
321
+ const { state, lineBottom } = processLayout(node, {
322
+ initialState: () => ({ result: '' }),
323
+ onNewline(count, state) {
324
+ state.result += '\n'.repeat(count);
325
+ },
326
+ onSpace(count, state) {
327
+ state.result += ' '.repeat(count);
328
+ },
329
+ onText(fragment, state) {
330
+ state.result += fragment.text;
331
+ },
332
+ });
333
+ // Trailing newlines
334
+ const { removedVertical } = collectSortedFragments(node);
335
+ const height = node.yogaNode?.getComputedHeight() ?? 0;
336
+ const innerHeight = height - removedVertical;
337
+ if (innerHeight > lineBottom) {
338
+ state.result += '\n'.repeat(innerHeight - lineBottom);
339
+ }
340
+ return state.result;
341
+ }
342
+ return '';
343
+ };
344
+ const handleVerticalGap = (fragment, state, y, options) => {
345
+ if (fragment.y < state.lineBottom) {
346
+ return undefined;
347
+ }
348
+ if (state.trailingCandidate !== -1) {
349
+ return state.trailingCandidate;
350
+ }
351
+ const gap = fragment.y - state.lineBottom;
352
+ const newlines = state.offset > 0 ? 1 + gap : gap;
353
+ if (y < fragment.visualY) {
354
+ if (options?.snapToGap === 'end') {
355
+ return state.offset + newlines;
356
+ }
357
+ if (options?.snapToGap === 'start') {
358
+ return state.offset;
359
+ }
360
+ if (newlines > 0) {
361
+ const distance = fragment.visualY - y;
362
+ const clampedDistance = Math.min(distance, newlines);
363
+ return state.offset + newlines - clampedDistance;
364
+ }
365
+ return state.offset;
366
+ }
367
+ if (newlines > 0) {
368
+ state.offset += newlines;
369
+ state.currentX = 0;
370
+ state.lineBottom = fragment.y;
371
+ }
372
+ return undefined;
373
+ };
374
+ const handleHorizontalGap = (fragment, state, x, y, options) => {
375
+ const gap = fragment.x - state.currentX;
376
+ if (y >= fragment.visualY &&
377
+ y < fragment.visualY + 1 &&
378
+ x < fragment.visualX) {
379
+ if (options?.snapToGap === 'end') {
380
+ return state.offset + gap;
381
+ }
382
+ if (options?.snapToGap === 'start') {
383
+ return state.offset;
384
+ }
385
+ if (gap > 0) {
386
+ const distance = fragment.visualX - x;
387
+ const clampedDistance = Math.min(distance, gap);
388
+ return state.offset + gap - clampedDistance;
389
+ }
390
+ return state.offset;
391
+ }
392
+ if (gap > 0) {
393
+ state.offset += gap;
394
+ state.currentX = fragment.x;
395
+ }
396
+ return undefined;
397
+ };
398
+ const handleContentMatch = (fragment, state, x, y, options) => {
399
+ const isVerticalMatch = y >= fragment.visualY && y < fragment.visualY + fragment.height;
400
+ const isHorizontalMatch = x >= fragment.visualX && x <= fragment.visualX + fragment.width;
401
+ if (isVerticalMatch && (isHorizontalMatch || x < fragment.visualX)) {
402
+ return (state.offset +
403
+ getTextOffset(fragment.node, x - fragment.visualX, y - fragment.visualY, options));
404
+ }
405
+ if (isVerticalMatch && x > fragment.visualX + fragment.width) {
406
+ state.trailingCandidate =
407
+ state.offset +
408
+ getTextOffset(fragment.node, x - fragment.visualX, y - fragment.visualY, options);
409
+ }
410
+ return undefined;
411
+ };
412
+ const processFragment = (fragment, state, x, y, options) => {
413
+ const verticalResult = handleVerticalGap(fragment, state, y, options);
414
+ if (verticalResult !== undefined) {
415
+ return verticalResult;
416
+ }
417
+ const horizontalResult = handleHorizontalGap(fragment, state, x, y, options);
418
+ if (horizontalResult !== undefined) {
419
+ return horizontalResult;
420
+ }
421
+ const contentResult = handleContentMatch(fragment, state, x, y, options);
422
+ if (contentResult !== undefined) {
423
+ return contentResult;
424
+ }
425
+ state.offset += fragment.text.length;
426
+ const newlines = (fragment.text.match(/\n/g) ?? []).length;
427
+ if (newlines > 0) {
428
+ const lastNewlineIndex = fragment.text.lastIndexOf('\n');
429
+ state.currentX = fragment.text.length - lastNewlineIndex - 1;
430
+ }
431
+ else {
432
+ state.currentX += fragment.text.length;
433
+ }
434
+ state.lineBottom = Math.max(state.lineBottom, fragment.y + fragment.height);
435
+ return undefined;
436
+ };
437
+ const getTextOffsetForTextNode = (node, x, y, options) => {
438
+ if (y < 0) {
439
+ return 0;
440
+ }
441
+ const text = squashTextNodes(node);
442
+ const styledChars = toStyledCharacters(text);
443
+ const maxWidth = getMaxWidth(node.yogaNode);
444
+ const textWrap = node.style.textWrap ?? 'wrap';
445
+ const lines = wrapOrTruncateStyledChars(styledChars, maxWidth, textWrap);
446
+ let currentY = 0;
447
+ for (const line of lines) {
448
+ if (y === currentY) {
449
+ let currentX = 0;
450
+ for (const char of line) {
451
+ const charWidth = inkCharacterWidth(char.value);
452
+ if (x < currentX + charWidth) {
453
+ const index = styledChars.indexOf(char);
454
+ if (index !== -1) {
455
+ let currentOffset = 0;
456
+ for (let i = 0; i < index; i++) {
457
+ currentOffset += styledChars[i].value.length;
458
+ }
459
+ if (options?.snapToChar === 'end' && x >= currentX) {
460
+ currentOffset += char.value.length;
461
+ }
462
+ return currentOffset;
463
+ }
464
+ return getText(node).length;
465
+ }
466
+ currentX += charWidth;
467
+ }
468
+ const lastChar = line.at(-1);
469
+ if (lastChar) {
470
+ const index = styledChars.indexOf(lastChar);
471
+ if (index !== -1) {
472
+ let currentOffset = 0;
473
+ for (let i = 0; i <= index; i++) {
474
+ currentOffset += styledChars[i].value.length;
475
+ }
476
+ return currentOffset;
477
+ }
478
+ return getText(node).length;
479
+ }
480
+ // If we are here, we finished the line loop.
481
+ // This happens if the line is empty, or if x was greater than the line width.
482
+ // But wait, if x < 0, we should have returned inside the loop (first char).
483
+ // Unless the line is empty.
484
+ // If the line is empty, we should return the offset at the start of this line.
485
+ // We need to find the offset corresponding to the start of this line.
486
+ // Since we don't track offsets easily, we can find the first char of the line (if any) or the char after the previous line.
487
+ // However, the issue in the test was returning 1 instead of 5.
488
+ // This means it matched index 1.
489
+ // Index 1 is '2'.
490
+ // This means `x` was interpreted as matching '2'.
491
+ // This implies `x` was not < width of '1'.
492
+ // If `x` was 1.
493
+ // `visualX` must have been 0.
494
+ // But we saw `visualX` should be 2.
495
+ // Let's look at the logs I added.
496
+ // I need to run the test again and see the logs.
497
+ // I missed checking the logs in the previous turn output because I was focused on the failure message.
498
+ // The logs should be in the output.
499
+ return 0;
500
+ }
501
+ currentY++;
502
+ }
503
+ return getText(node).length;
504
+ };
505
+ export const getTextOffset = (node, x, y, options) => {
506
+ if (node.nodeName === '#text') {
507
+ return 0;
508
+ }
509
+ if (node.nodeName === 'ink-text' || node.nodeName === 'ink-virtual-text') {
510
+ return getTextOffsetForTextNode(node, x, y, options);
511
+ }
512
+ if (node.nodeName === 'ink-box' || node.nodeName === 'ink-root') {
513
+ const { fragments, removedVertical } = collectSortedFragments(node);
514
+ const state = {
515
+ offset: 0,
516
+ currentX: 0,
517
+ lineBottom: 0,
518
+ trailingCandidate: -1,
519
+ };
520
+ for (const fragment of fragments) {
521
+ const result = processFragment(fragment, state, x, y, options);
522
+ if (result !== undefined) {
523
+ return result;
524
+ }
525
+ }
526
+ if (state.trailingCandidate !== -1) {
527
+ return state.trailingCandidate;
528
+ }
529
+ const height = node.yogaNode?.getComputedHeight() ?? 0;
530
+ const innerHeight = height - removedVertical;
531
+ if (innerHeight > state.lineBottom) {
532
+ const gap = innerHeight - state.lineBottom;
533
+ if (y >= state.lineBottom) {
534
+ // This logic uses logical Y (lineBottom) and visual Y (y).
535
+ // This is potentially buggy if they diverge.
536
+ // But we don't have a better way to map trailing empty lines without more info.
537
+ // Assuming trailing lines match logical height.
538
+ const relativeY = y - state.lineBottom;
539
+ return state.offset + Math.min(relativeY, gap);
540
+ }
541
+ }
542
+ return state.offset;
543
+ }
544
+ return 0;
545
+ };
546
+ const findNodeInSquashed = (root, offset) => {
547
+ let currentOffset = 0;
548
+ const findNode = (node) => {
549
+ if (node.nodeName === '#text') {
550
+ const { length } = node.nodeValue;
551
+ if (offset >= currentOffset && offset <= currentOffset + length) {
552
+ return { node, offset: offset - currentOffset };
553
+ }
554
+ currentOffset += length;
555
+ }
556
+ else if (node.nodeName === 'ink-text' ||
557
+ node.nodeName === 'ink-virtual-text') {
558
+ for (const child of node.childNodes) {
559
+ const result = findNode(child);
560
+ if (result) {
561
+ return result;
562
+ }
563
+ }
564
+ }
565
+ return undefined;
566
+ };
567
+ return findNode(root);
568
+ };
569
+ export const findNodeAtOffset = (node, targetOffset) => {
570
+ if (node.nodeName === '#text') {
571
+ return { node, offset: Math.min(targetOffset, node.nodeValue.length) };
572
+ }
573
+ if (node.nodeName === 'ink-text' || node.nodeName === 'ink-virtual-text') {
574
+ return findNodeInSquashed(node, targetOffset);
575
+ }
576
+ if (node.nodeName === 'ink-box' || node.nodeName === 'ink-root') {
577
+ if (!node.yogaNode) {
578
+ return undefined;
579
+ }
580
+ const { fragments } = collectSortedFragments(node);
581
+ let currentOffset = 0;
582
+ let lineBottom = 0;
583
+ let currentX = 0;
584
+ for (const fragment of fragments) {
585
+ if (fragment.y >= lineBottom) {
586
+ const gap = fragment.y - lineBottom;
587
+ const newlines = currentOffset > 0 ? 1 + gap : gap;
588
+ if (newlines > 0) {
589
+ if (targetOffset < currentOffset + newlines) {
590
+ return findNodeInSquashed(fragment.node, 0);
591
+ }
592
+ currentOffset += newlines;
593
+ currentX = 0;
594
+ lineBottom = fragment.y;
595
+ }
596
+ }
597
+ if (fragment.x > currentX) {
598
+ const spaces = fragment.x - currentX;
599
+ if (targetOffset < currentOffset + spaces) {
600
+ return findNodeInSquashed(fragment.node, 0);
601
+ }
602
+ currentOffset += spaces;
603
+ currentX = fragment.x;
604
+ }
605
+ const textLength = fragment.text.length;
606
+ if (targetOffset < currentOffset + textLength) {
607
+ return findNodeInSquashed(fragment.node, targetOffset - currentOffset);
608
+ }
609
+ currentOffset += textLength;
610
+ const newlinesInText = (fragment.text.match(/\n/g) ?? []).length;
611
+ if (newlinesInText > 0) {
612
+ const lastNewlineIndex = fragment.text.lastIndexOf('\n');
613
+ currentX = fragment.text.length - lastNewlineIndex - 1;
614
+ }
615
+ else {
616
+ currentX += fragment.text.length;
617
+ }
618
+ lineBottom = Math.max(lineBottom, fragment.y + fragment.height);
619
+ }
620
+ if (fragments.length > 0) {
621
+ const lastFragment = fragments.at(-1);
622
+ const { text } = lastFragment;
623
+ return findNodeInSquashed(lastFragment.node, text.length);
624
+ }
625
+ }
626
+ return undefined;
627
+ };
628
+ export const hitTest = (node, x, y) => {
629
+ const { fragments } = collectSortedFragments(node);
630
+ let bestMatch;
631
+ for (const fragment of fragments) {
632
+ let vDist = 0;
633
+ let hDist = 0;
634
+ // Calculate vertical distance
635
+ if (y < fragment.visualY) {
636
+ vDist = fragment.visualY - y;
637
+ }
638
+ else if (y >= fragment.visualY + fragment.height) {
639
+ vDist = y - (fragment.visualY + fragment.height - 1);
640
+ }
641
+ else {
642
+ vDist = 0;
643
+ }
644
+ // Calculate horizontal distance
645
+ if (x < fragment.visualX) {
646
+ hDist = fragment.visualX - x;
647
+ }
648
+ else if (x > fragment.visualX + fragment.width) {
649
+ hDist = x - (fragment.visualX + fragment.width);
650
+ }
651
+ else {
652
+ hDist = 0;
653
+ }
654
+ // Prioritize exact matches (vDist=0, hDist=0)
655
+ if (vDist === 0 && hDist === 0) {
656
+ bestMatch = { fragment, vDist, hDist };
657
+ break;
658
+ }
659
+ if (bestMatch) {
660
+ // Compare with best match
661
+ // Priority:
662
+ // 1. Vertical distance (smaller is better)
663
+ // 2. Horizontal distance (smaller is better)
664
+ if (vDist < bestMatch.vDist) {
665
+ bestMatch = { fragment, vDist, hDist };
666
+ }
667
+ else if (vDist === bestMatch.vDist && hDist < bestMatch.hDist) {
668
+ bestMatch = { fragment, vDist, hDist };
669
+ }
670
+ }
671
+ else {
672
+ bestMatch = { fragment, vDist, hDist };
673
+ }
674
+ }
675
+ if (bestMatch) {
676
+ const { fragment } = bestMatch;
677
+ const relativeX = x - fragment.visualX;
678
+ const relativeY = y - fragment.visualY;
679
+ const offsetInSquashed = getTextOffset(fragment.node, relativeX, relativeY);
680
+ let currentOffset = 0;
681
+ const findNode = (n) => {
682
+ if (n.nodeName === '#text') {
683
+ const { length } = n.nodeValue;
684
+ if (offsetInSquashed >= currentOffset &&
685
+ offsetInSquashed <= currentOffset + length) {
686
+ return { node: n, offset: offsetInSquashed - currentOffset };
687
+ }
688
+ currentOffset += length;
689
+ }
690
+ else {
691
+ for (const child of n.childNodes) {
692
+ const result = findNode(child);
693
+ if (result) {
694
+ return result;
695
+ }
696
+ }
697
+ }
698
+ return undefined;
699
+ };
700
+ return findNode(fragment.node);
701
+ }
702
+ return undefined;
703
+ };
189
704
  export default measureElement;
190
705
  //# sourceMappingURL=measure-element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure-element.js","sourceRoot":"","sources":["../src/measure-element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measure-element.js","sourceRoot":"","sources":["../src/measure-element.ts"],"names":[],"mappings":"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"}
@@ -77,22 +77,20 @@ export function toStyledCharacters(text) {
77
77
  if (!nextFirstCodePoint) {
78
78
  break;
79
79
  }
80
- // Variation selectors
81
- const isVariationSelector = nextFirstCodePoint >= 0xfe_00 && nextFirstCodePoint <= 0xfe_0f;
82
- // Skin tone modifiers
80
+ // Unicode Mark category includes:
81
+ // - Combining Diacritical Marks (U+0300-036F)
82
+ // - Thai combining characters (U+0E31-0E3A, U+0E47-0E4E)
83
+ // - Variation selectors (U+FE00-FE0F)
84
+ // - Combining enclosing keycap (U+20E3)
85
+ // - And many other combining marks across Unicode
86
+ const isUnicodeMark = /\p{Mark}/u.test(nextCharacter.value);
87
+ // Skin tone modifiers (emoji modifiers, not in Mark category)
83
88
  const isSkinToneModifier = nextFirstCodePoint >= 0x1_f3_fb && nextFirstCodePoint <= 0x1_f3_ff;
89
+ // Zero-width joiner (used in emoji sequences)
84
90
  const isZeroWidthJoiner = nextFirstCodePoint === 0x20_0d;
85
- const isKeycap = nextFirstCodePoint === 0x20_e3;
86
- // Tags block (U+E0000 - U+E007F)
91
+ // Tags block (U+E0000 - U+E007F, used for flag emoji)
87
92
  const isTagsBlock = nextFirstCodePoint >= 0xe_00_00 && nextFirstCodePoint <= 0xe_00_7f;
88
- // Combining Diacritical Marks
89
- const isCombiningMark = nextFirstCodePoint >= 0x03_00 && nextFirstCodePoint <= 0x03_6f;
90
- const isCombining = isVariationSelector ||
91
- isSkinToneModifier ||
92
- isZeroWidthJoiner ||
93
- isKeycap ||
94
- isTagsBlock ||
95
- isCombiningMark;
93
+ const isCombining = isUnicodeMark || isSkinToneModifier || isZeroWidthJoiner || isTagsBlock;
96
94
  if (!isCombining) {
97
95
  break;
98
96
  }
@@ -131,7 +129,16 @@ export function inkCharacterWidth(text) {
131
129
  if (width !== undefined) {
132
130
  return width;
133
131
  }
134
- const calculatedWidth = currentStringWidth(text);
132
+ let calculatedWidth;
133
+ try {
134
+ calculatedWidth = currentStringWidth(text);
135
+ }
136
+ catch {
137
+ // Ignore errors and use default width of 1.
138
+ // We catch this result to avoid throwing exceptions repeatedly.
139
+ calculatedWidth = 1;
140
+ console.warn(`Failed to calculate string width for ${JSON.stringify(text)}`);
141
+ }
135
142
  widthCache.set(text, calculatedWidth);
136
143
  return calculatedWidth;
137
144
  }