@effect-tui/core 0.11.0 → 0.12.2
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/dist/render/buffer.d.ts.map +1 -1
- package/dist/render/buffer.js +3 -0
- package/dist/render/buffer.js.map +1 -1
- package/dist/render/emoji.d.ts +6 -0
- package/dist/render/emoji.d.ts.map +1 -0
- package/dist/render/emoji.js +36 -0
- package/dist/render/emoji.js.map +1 -0
- package/dist/render/graphemes.d.ts.map +1 -1
- package/dist/render/graphemes.js +5 -1
- package/dist/render/graphemes.js.map +1 -1
- package/dist/render/palette.d.ts +2 -0
- package/dist/render/palette.d.ts.map +1 -1
- package/dist/render/palette.js +14 -0
- package/dist/render/palette.js.map +1 -1
- package/package.json +4 -1
- package/src/render/buffer.ts +2 -0
- package/src/render/emoji.ts +38 -0
- package/src/render/graphemes.ts +4 -1
- package/src/render/palette.ts +10 -0
- package/src/types/emojibase-regex.d.ts +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,OA6C5B,CAAA;AAKD,qBAAa,UAAU;IACtB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAGlB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;IAEvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,QAAQ,CAAiC;gBAErC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAwB;IAY5E,qDAAqD;IACrD,KAAK,CAAC,OAAO,SAAI,GAAG,IAAI;IAMxB,2FAA2F;IAC3F,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI;IAuB3D,wFAAwF;IACxF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAsBlF,kDAAkD;IAClD,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAK,EAAE,OAAO,SAAI,GAAG,IAAI;IAuBhF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1D,OAAO,IAAI,IAAI;IASf,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAU1E,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxC,SAAS,IAAI,IAAI;IAWjB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;CAQxD"}
|
package/dist/render/buffer.js
CHANGED
|
@@ -11,6 +11,9 @@ export const defaultWcwidth = (cp) => {
|
|
|
11
11
|
// Soft hyphen: width 1 (not 0, for terminal compatibility)
|
|
12
12
|
if (cp === 0xad)
|
|
13
13
|
return 1;
|
|
14
|
+
// Text-style check marks are typically single-width in terminals
|
|
15
|
+
if (cp === 0x2713 || cp === 0x2714)
|
|
16
|
+
return 1;
|
|
14
17
|
// CJK characters: width 2
|
|
15
18
|
// CJK Unified Ideographs and extensions
|
|
16
19
|
if (cp >= 0x4e00 && cp <= 0x9fff)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAIrD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAY,CAAC,EAAE,EAAE,EAAE;IAC7C,8BAA8B;IAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,CAAC,CAAA;IAEhD,2DAA2D;IAC3D,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determine emoji presentation width overrides for a grapheme segment.
|
|
3
|
+
* Returns 2 for emoji presentation, 1 for text presentation, undefined for no override.
|
|
4
|
+
*/
|
|
5
|
+
export declare function emojiWidthOverride(segment: string): 1 | 2 | undefined;
|
|
6
|
+
//# sourceMappingURL=emoji.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji.d.ts","sourceRoot":"","sources":["../../src/render/emoji.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAiBrE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import EMOJI_REGEX from "emojibase-regex/emoji";
|
|
2
|
+
import TEXT_REGEX from "emojibase-regex/text";
|
|
3
|
+
const emojiRegex = new RegExp(EMOJI_REGEX.source, EMOJI_REGEX.flags.replace("g", "").replace("y", ""));
|
|
4
|
+
const textRegex = new RegExp(TEXT_REGEX.source, TEXT_REGEX.flags.replace("g", "").replace("y", ""));
|
|
5
|
+
const widthCache = new Map();
|
|
6
|
+
function testRegex(regex, segment) {
|
|
7
|
+
if (regex.global || regex.sticky) {
|
|
8
|
+
regex.lastIndex = 0;
|
|
9
|
+
}
|
|
10
|
+
return regex.test(segment);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Determine emoji presentation width overrides for a grapheme segment.
|
|
14
|
+
* Returns 2 for emoji presentation, 1 for text presentation, undefined for no override.
|
|
15
|
+
*/
|
|
16
|
+
export function emojiWidthOverride(segment) {
|
|
17
|
+
const cached = widthCache.get(segment);
|
|
18
|
+
if (cached !== undefined)
|
|
19
|
+
return cached === 0 ? undefined : cached;
|
|
20
|
+
let width = 0;
|
|
21
|
+
if (segment.includes("\uFE0F")) {
|
|
22
|
+
width = 2;
|
|
23
|
+
}
|
|
24
|
+
else if (segment.includes("\uFE0E")) {
|
|
25
|
+
width = 1;
|
|
26
|
+
}
|
|
27
|
+
else if (testRegex(emojiRegex, segment)) {
|
|
28
|
+
width = 2;
|
|
29
|
+
}
|
|
30
|
+
else if (testRegex(textRegex, segment)) {
|
|
31
|
+
width = 1;
|
|
32
|
+
}
|
|
33
|
+
widthCache.set(segment, width);
|
|
34
|
+
return width === 0 ? undefined : width;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=emoji.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji.js","sourceRoot":"","sources":["../../src/render/emoji.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAI7C,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AACtG,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AACnG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAA;AAEhD,SAAS,SAAS,CAAC,KAAa,EAAE,OAAe;IAChD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IACjD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAElE,IAAI,KAAK,GAAe,CAAC,CAAA;IACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,KAAK,GAAG,CAAC,CAAA;IACV,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,KAAK,GAAG,CAAC,CAAA;IACV,CAAC;SAAM,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAC3C,KAAK,GAAG,CAAC,CAAA;IACV,CAAC;SAAM,IAAI,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1C,KAAK,GAAG,CAAC,CAAA;IACV,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC9B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphemes.d.ts","sourceRoot":"","sources":["../../src/render/graphemes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"graphemes.d.ts","sourceRoot":"","sources":["../../src/render/graphemes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C;;;GAGG;AACH,wBAAiB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAYxE;AAED;;GAEG;AACH,wBAAiB,oBAAoB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,GACd,gBAAgB,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQlE"}
|
package/dist/render/graphemes.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { emojiWidthOverride } from "./emoji.js";
|
|
1
2
|
import { getGraphemeSegmenter } from "./segmenter.js";
|
|
2
3
|
/**
|
|
3
4
|
* Iterate grapheme clusters using Intl.Segmenter when available.
|
|
@@ -21,7 +22,10 @@ export function* iterateGraphemes(text) {
|
|
|
21
22
|
export function* iterateGraphemeCells(text, wcwidth) {
|
|
22
23
|
for (const segment of iterateGraphemes(text)) {
|
|
23
24
|
const cp = segment.codePointAt(0) ?? 32;
|
|
24
|
-
|
|
25
|
+
let width = wcwidth(cp) || 1;
|
|
26
|
+
const emojiWidth = emojiWidthOverride(segment);
|
|
27
|
+
if (emojiWidth !== undefined)
|
|
28
|
+
width = emojiWidth;
|
|
25
29
|
yield { segment, cp, width };
|
|
26
30
|
}
|
|
27
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphemes.js","sourceRoot":"","sources":["../../src/render/graphemes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,gBAAgB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;IAClC,IAAI,GAAG,EAAE,CAAC;QACT,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,CAAA;QACd,CAAC;QACD,OAAM;IACP,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,CAAA;IACT,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,SAAS,CAAC,CAAC,oBAAoB,CACpC,IAAY,EACZ,OAAgB;IAEhB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvC,
|
|
1
|
+
{"version":3,"file":"graphemes.js","sourceRoot":"","sources":["../../src/render/graphemes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,gBAAgB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;IAClC,IAAI,GAAG,EAAE,CAAC;QACT,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,CAAA;QACd,CAAC;QACD,OAAM;IACP,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,CAAA;IACT,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,SAAS,CAAC,CAAC,oBAAoB,CACpC,IAAY,EACZ,OAAgB;IAEhB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvC,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC9C,IAAI,UAAU,KAAK,SAAS;YAAE,KAAK,GAAG,UAAU,CAAA;QAChD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IAC7B,CAAC;AACF,CAAC"}
|
package/dist/render/palette.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/render/palette.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAGrE,MAAM,MAAM,SAAS,GAAG;IACvB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;
|
|
1
|
+
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/render/palette.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAGrE,MAAM,MAAM,SAAS,GAAG;IACvB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAwBD;;;GAGG;AACH,qBAAa,OAAO;IACnB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA4B;IAE3C,+DAA+D;IAC/D,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM;IAY5B,4EAA4E;IAC5E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAMvB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CAwBhB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,OAAO;IAExC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBADV,IAAI,EAAE,OAAO,EACb,SAAS,CAAC,EAAE,SAAS,YAAA;IAK9B,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM;IAI5B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;CAGhC;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAoB9E"}
|
package/dist/render/palette.js
CHANGED
|
@@ -15,10 +15,14 @@ function styleKey(spec) {
|
|
|
15
15
|
}
|
|
16
16
|
if (spec.bold)
|
|
17
17
|
parts.push("B");
|
|
18
|
+
if (spec.dimmed)
|
|
19
|
+
parts.push("D");
|
|
18
20
|
if (spec.italic)
|
|
19
21
|
parts.push("I");
|
|
20
22
|
if (spec.underline)
|
|
21
23
|
parts.push("U");
|
|
24
|
+
if (spec.strikethrough)
|
|
25
|
+
parts.push("S");
|
|
22
26
|
if (spec.inverse)
|
|
23
27
|
parts.push("V");
|
|
24
28
|
return parts.join("|");
|
|
@@ -63,10 +67,14 @@ export class Palette {
|
|
|
63
67
|
parts.push("0"); // reset, then set exact attrs to avoid drift
|
|
64
68
|
if (spec.bold)
|
|
65
69
|
parts.push("1");
|
|
70
|
+
if (spec.dimmed)
|
|
71
|
+
parts.push("2");
|
|
66
72
|
if (spec.italic)
|
|
67
73
|
parts.push("3");
|
|
68
74
|
if (spec.underline)
|
|
69
75
|
parts.push("4");
|
|
76
|
+
if (spec.strikethrough)
|
|
77
|
+
parts.push("9");
|
|
70
78
|
if (spec.inverse)
|
|
71
79
|
parts.push("7");
|
|
72
80
|
const colorToCodes = (c, isBg) => {
|
|
@@ -113,8 +121,10 @@ export function mergeStyle(a, b) {
|
|
|
113
121
|
const fg = b?.fg ?? a?.fg;
|
|
114
122
|
const bg = b?.bg ?? a?.bg;
|
|
115
123
|
const bold = b?.bold ?? a?.bold;
|
|
124
|
+
const dimmed = b?.dimmed ?? a?.dimmed;
|
|
116
125
|
const italic = b?.italic ?? a?.italic;
|
|
117
126
|
const underline = b?.underline ?? a?.underline;
|
|
127
|
+
const strikethrough = b?.strikethrough ?? a?.strikethrough;
|
|
118
128
|
const inverse = b?.inverse ?? a?.inverse;
|
|
119
129
|
if (fg !== undefined)
|
|
120
130
|
merged.fg = fg;
|
|
@@ -122,10 +132,14 @@ export function mergeStyle(a, b) {
|
|
|
122
132
|
merged.bg = bg;
|
|
123
133
|
if (bold !== undefined)
|
|
124
134
|
merged.bold = bold;
|
|
135
|
+
if (dimmed !== undefined)
|
|
136
|
+
merged.dimmed = dimmed;
|
|
125
137
|
if (italic !== undefined)
|
|
126
138
|
merged.italic = italic;
|
|
127
139
|
if (underline !== undefined)
|
|
128
140
|
merged.underline = underline;
|
|
141
|
+
if (strikethrough !== undefined)
|
|
142
|
+
merged.strikethrough = strikethrough;
|
|
129
143
|
if (inverse !== undefined)
|
|
130
144
|
merged.inverse = inverse;
|
|
131
145
|
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/render/palette.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,OAAO,CAAA;AACnB,MAAM,GAAG,GAAG,GAAG,CAAA,CAAC,oBAAoB;
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/render/palette.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-tui/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.2",
|
|
4
4
|
"description": "Terminal UI library built with Effect",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -44,6 +44,9 @@
|
|
|
44
44
|
"format:check": "biome format .",
|
|
45
45
|
"prepublishOnly": "bun run typecheck && bun run build"
|
|
46
46
|
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"emojibase-regex": "^16.0.0"
|
|
49
|
+
},
|
|
47
50
|
"peerDependencies": {
|
|
48
51
|
"effect": "^3.19.13"
|
|
49
52
|
},
|
package/src/render/buffer.ts
CHANGED
|
@@ -14,6 +14,8 @@ export const defaultWcwidth: Wcwidth = (cp) => {
|
|
|
14
14
|
|
|
15
15
|
// Soft hyphen: width 1 (not 0, for terminal compatibility)
|
|
16
16
|
if (cp === 0xad) return 1
|
|
17
|
+
// Text-style check marks are typically single-width in terminals
|
|
18
|
+
if (cp === 0x2713 || cp === 0x2714) return 1
|
|
17
19
|
|
|
18
20
|
// CJK characters: width 2
|
|
19
21
|
// CJK Unified Ideographs and extensions
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import EMOJI_REGEX from "emojibase-regex/emoji"
|
|
2
|
+
import TEXT_REGEX from "emojibase-regex/text"
|
|
3
|
+
|
|
4
|
+
type EmojiWidth = 0 | 1 | 2
|
|
5
|
+
|
|
6
|
+
const emojiRegex = new RegExp(EMOJI_REGEX.source, EMOJI_REGEX.flags.replace("g", "").replace("y", ""))
|
|
7
|
+
const textRegex = new RegExp(TEXT_REGEX.source, TEXT_REGEX.flags.replace("g", "").replace("y", ""))
|
|
8
|
+
const widthCache = new Map<string, EmojiWidth>()
|
|
9
|
+
|
|
10
|
+
function testRegex(regex: RegExp, segment: string): boolean {
|
|
11
|
+
if (regex.global || regex.sticky) {
|
|
12
|
+
regex.lastIndex = 0
|
|
13
|
+
}
|
|
14
|
+
return regex.test(segment)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Determine emoji presentation width overrides for a grapheme segment.
|
|
19
|
+
* Returns 2 for emoji presentation, 1 for text presentation, undefined for no override.
|
|
20
|
+
*/
|
|
21
|
+
export function emojiWidthOverride(segment: string): 1 | 2 | undefined {
|
|
22
|
+
const cached = widthCache.get(segment)
|
|
23
|
+
if (cached !== undefined) return cached === 0 ? undefined : cached
|
|
24
|
+
|
|
25
|
+
let width: EmojiWidth = 0
|
|
26
|
+
if (segment.includes("\uFE0F")) {
|
|
27
|
+
width = 2
|
|
28
|
+
} else if (segment.includes("\uFE0E")) {
|
|
29
|
+
width = 1
|
|
30
|
+
} else if (testRegex(emojiRegex, segment)) {
|
|
31
|
+
width = 2
|
|
32
|
+
} else if (testRegex(textRegex, segment)) {
|
|
33
|
+
width = 1
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
widthCache.set(segment, width)
|
|
37
|
+
return width === 0 ? undefined : width
|
|
38
|
+
}
|
package/src/render/graphemes.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Wcwidth } from "./buffer.js"
|
|
2
|
+
import { emojiWidthOverride } from "./emoji.js"
|
|
2
3
|
import { getGraphemeSegmenter } from "./segmenter.js"
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -28,7 +29,9 @@ export function* iterateGraphemeCells(
|
|
|
28
29
|
): IterableIterator<{ segment: string; cp: number; width: number }> {
|
|
29
30
|
for (const segment of iterateGraphemes(text)) {
|
|
30
31
|
const cp = segment.codePointAt(0) ?? 32
|
|
31
|
-
|
|
32
|
+
let width = wcwidth(cp) || 1
|
|
33
|
+
const emojiWidth = emojiWidthOverride(segment)
|
|
34
|
+
if (emojiWidth !== undefined) width = emojiWidth
|
|
32
35
|
yield { segment, cp, width }
|
|
33
36
|
}
|
|
34
37
|
}
|
package/src/render/palette.ts
CHANGED
|
@@ -10,8 +10,10 @@ export type StyleSpec = {
|
|
|
10
10
|
fg?: ColorValue // foreground: 256 index or RGB
|
|
11
11
|
bg?: ColorValue // background: 256 index or RGB
|
|
12
12
|
bold?: boolean
|
|
13
|
+
dimmed?: boolean
|
|
13
14
|
italic?: boolean
|
|
14
15
|
underline?: boolean
|
|
16
|
+
strikethrough?: boolean
|
|
15
17
|
inverse?: boolean
|
|
16
18
|
}
|
|
17
19
|
|
|
@@ -29,8 +31,10 @@ function styleKey(spec: StyleSpec): string {
|
|
|
29
31
|
parts.push(typeof spec.bg === "number" ? `b${spec.bg}` : `b${spec.bg.r},${spec.bg.g},${spec.bg.b}`)
|
|
30
32
|
}
|
|
31
33
|
if (spec.bold) parts.push("B")
|
|
34
|
+
if (spec.dimmed) parts.push("D")
|
|
32
35
|
if (spec.italic) parts.push("I")
|
|
33
36
|
if (spec.underline) parts.push("U")
|
|
37
|
+
if (spec.strikethrough) parts.push("S")
|
|
34
38
|
if (spec.inverse) parts.push("V")
|
|
35
39
|
return parts.join("|")
|
|
36
40
|
}
|
|
@@ -73,8 +77,10 @@ export class Palette {
|
|
|
73
77
|
const parts: string[] = []
|
|
74
78
|
parts.push("0") // reset, then set exact attrs to avoid drift
|
|
75
79
|
if (spec.bold) parts.push("1")
|
|
80
|
+
if (spec.dimmed) parts.push("2")
|
|
76
81
|
if (spec.italic) parts.push("3")
|
|
77
82
|
if (spec.underline) parts.push("4")
|
|
83
|
+
if (spec.strikethrough) parts.push("9")
|
|
78
84
|
if (spec.inverse) parts.push("7")
|
|
79
85
|
|
|
80
86
|
const colorToCodes = (c: ColorValue | undefined, isBg: boolean): string | undefined => {
|
|
@@ -121,14 +127,18 @@ export function mergeStyle(a?: StyleSpec, b?: StyleSpec): StyleSpec | undefined
|
|
|
121
127
|
const fg = b?.fg ?? a?.fg
|
|
122
128
|
const bg = b?.bg ?? a?.bg
|
|
123
129
|
const bold = b?.bold ?? a?.bold
|
|
130
|
+
const dimmed = b?.dimmed ?? a?.dimmed
|
|
124
131
|
const italic = b?.italic ?? a?.italic
|
|
125
132
|
const underline = b?.underline ?? a?.underline
|
|
133
|
+
const strikethrough = b?.strikethrough ?? a?.strikethrough
|
|
126
134
|
const inverse = b?.inverse ?? a?.inverse
|
|
127
135
|
if (fg !== undefined) merged.fg = fg
|
|
128
136
|
if (bg !== undefined) merged.bg = bg
|
|
129
137
|
if (bold !== undefined) merged.bold = bold
|
|
138
|
+
if (dimmed !== undefined) merged.dimmed = dimmed
|
|
130
139
|
if (italic !== undefined) merged.italic = italic
|
|
131
140
|
if (underline !== undefined) merged.underline = underline
|
|
141
|
+
if (strikethrough !== undefined) merged.strikethrough = strikethrough
|
|
132
142
|
if (inverse !== undefined) merged.inverse = inverse
|
|
133
143
|
return Object.keys(merged).length > 0 ? merged : undefined
|
|
134
144
|
}
|