@effect-tui/core 1.0.0 → 2.0.0
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/render/emoji.d.ts +0 -3
- package/dist/render/emoji.d.ts.map +1 -1
- package/dist/render/emoji.js +10 -38
- package/dist/render/emoji.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -7
- package/src/render/emoji.ts +8 -37
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export * from "./keys.js";
|
|
|
4
4
|
export * from "./layout/axis-helpers.js";
|
|
5
5
|
export * from "./output.js";
|
|
6
6
|
export * from "./render/buffer.js";
|
|
7
|
-
export {
|
|
7
|
+
export { getEmojiWidth, setEmojiWidth } from "./render/emoji.js";
|
|
8
8
|
export * from "./render/measure.js";
|
|
9
9
|
export * from "./render/palette.js";
|
|
10
10
|
export * from "./render/surface.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAA;AAEzB,OAAO,EACN,KAAK,UAAU,EACf,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,KAAK,IAAI,GACT,MAAM,aAAa,CAAA;AAEpB,cAAc,WAAW,CAAA;AAEzB,cAAc,0BAA0B,CAAA;AAExC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAA;AAEzB,OAAO,EACN,KAAK,UAAU,EACf,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,KAAK,IAAI,GACT,MAAM,aAAa,CAAA;AAEpB,cAAc,WAAW,CAAA;AAEzB,cAAc,0BAA0B,CAAA;AAExC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAChE,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,qBAAqB,CAAA;AAEnC,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,cAAc,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ export * from "./layout/axis-helpers.js";
|
|
|
10
10
|
// Output helpers (buffer diffing and emission)
|
|
11
11
|
export * from "./output.js";
|
|
12
12
|
export * from "./render/buffer.js";
|
|
13
|
-
export {
|
|
13
|
+
export { getEmojiWidth, setEmojiWidth } from "./render/emoji.js";
|
|
14
14
|
export * from "./render/measure.js";
|
|
15
15
|
export * from "./render/palette.js";
|
|
16
16
|
// Rendering primitives
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AAEb,wBAAwB;AACxB,cAAc,WAAW,CAAA;AACzB,mFAAmF;AACnF,OAAO,EAEN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,GAEd,MAAM,aAAa,CAAA;AACpB,iBAAiB;AACjB,cAAc,WAAW,CAAA;AACzB,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,+CAA+C;AAC/C,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AAEb,wBAAwB;AACxB,cAAc,WAAW,CAAA;AACzB,mFAAmF;AACnF,OAAO,EAEN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,GAEd,MAAM,aAAa,CAAA;AACpB,iBAAiB;AACjB,cAAc,WAAW,CAAA;AACzB,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,+CAA+C;AAC/C,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAChE,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,uBAAuB;AACvB,cAAc,qBAAqB,CAAA;AAGnC,cAAc,YAAY,CAAA"}
|
package/dist/render/emoji.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
export declare function getEmojiWidth(): 1 | 2;
|
|
2
2
|
export declare function setEmojiWidth(width: 1 | 2): void;
|
|
3
|
-
export declare function setEmojiWidthOverride(segment: string, width: 1 | 2): void;
|
|
4
|
-
export declare function setEmojiWidthOverrides(entries: Iterable<[string, 1 | 2]>): void;
|
|
5
|
-
export declare function clearEmojiWidthOverrides(): void;
|
|
6
3
|
/**
|
|
7
4
|
* Determine emoji presentation width overrides for a grapheme segment.
|
|
8
5
|
* Returns 2 for emoji presentation, 1 for text presentation, undefined for no override.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji.d.ts","sourceRoot":"","sources":["../../src/render/emoji.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emoji.d.ts","sourceRoot":"","sources":["../../src/render/emoji.ts"],"names":[],"mappings":"AAyBA,wBAAgB,aAAa,IAAI,CAAC,GAAG,CAAC,CAErC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAGhD;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAiBrE"}
|
package/dist/render/emoji.js
CHANGED
|
@@ -3,9 +3,6 @@ import TEXT_REGEX from "emojibase-regex/text";
|
|
|
3
3
|
const emojiRegex = new RegExp(EMOJI_REGEX.source, EMOJI_REGEX.flags.replace("g", "").replace("y", ""));
|
|
4
4
|
const textRegex = new RegExp(TEXT_REGEX.source, TEXT_REGEX.flags.replace("g", "").replace("y", ""));
|
|
5
5
|
const widthCache = new Map();
|
|
6
|
-
// Prefer text-width for ambiguous symbols that are commonly narrow in terminals.
|
|
7
|
-
const forceTextWidth = new Map([["⚙", 1]]);
|
|
8
|
-
const runtimeOverrides = new Map();
|
|
9
6
|
let emojiPresentationWidth = 2;
|
|
10
7
|
const envEmojiWidth = (() => {
|
|
11
8
|
if (typeof process === "undefined")
|
|
@@ -29,21 +26,6 @@ export function setEmojiWidth(width) {
|
|
|
29
26
|
emojiPresentationWidth = width;
|
|
30
27
|
widthCache.clear();
|
|
31
28
|
}
|
|
32
|
-
export function setEmojiWidthOverride(segment, width) {
|
|
33
|
-
runtimeOverrides.set(segment, width);
|
|
34
|
-
widthCache.clear();
|
|
35
|
-
}
|
|
36
|
-
export function setEmojiWidthOverrides(entries) {
|
|
37
|
-
runtimeOverrides.clear();
|
|
38
|
-
for (const [segment, width] of entries) {
|
|
39
|
-
runtimeOverrides.set(segment, width);
|
|
40
|
-
}
|
|
41
|
-
widthCache.clear();
|
|
42
|
-
}
|
|
43
|
-
export function clearEmojiWidthOverrides() {
|
|
44
|
-
runtimeOverrides.clear();
|
|
45
|
-
widthCache.clear();
|
|
46
|
-
}
|
|
47
29
|
function testRegex(regex, segment) {
|
|
48
30
|
if (regex.global || regex.sticky) {
|
|
49
31
|
regex.lastIndex = 0;
|
|
@@ -59,27 +41,17 @@ export function emojiWidthOverride(segment) {
|
|
|
59
41
|
if (cached !== undefined)
|
|
60
42
|
return cached === 0 ? undefined : cached;
|
|
61
43
|
let width = 0;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
44
|
+
if (segment.includes("\uFE0F")) {
|
|
45
|
+
width = emojiPresentationWidth;
|
|
46
|
+
}
|
|
47
|
+
else if (segment.includes("\uFE0E")) {
|
|
48
|
+
width = 1;
|
|
49
|
+
}
|
|
50
|
+
else if (testRegex(emojiRegex, segment)) {
|
|
51
|
+
width = emojiPresentationWidth;
|
|
65
52
|
}
|
|
66
|
-
else {
|
|
67
|
-
|
|
68
|
-
if (forced !== undefined) {
|
|
69
|
-
width = forced;
|
|
70
|
-
}
|
|
71
|
-
else if (segment.includes("\uFE0F")) {
|
|
72
|
-
width = emojiPresentationWidth;
|
|
73
|
-
}
|
|
74
|
-
else if (segment.includes("\uFE0E")) {
|
|
75
|
-
width = 1;
|
|
76
|
-
}
|
|
77
|
-
else if (testRegex(emojiRegex, segment)) {
|
|
78
|
-
width = emojiPresentationWidth;
|
|
79
|
-
}
|
|
80
|
-
else if (testRegex(textRegex, segment)) {
|
|
81
|
-
width = 1;
|
|
82
|
-
}
|
|
53
|
+
else if (testRegex(textRegex, segment)) {
|
|
54
|
+
width = 1;
|
|
83
55
|
}
|
|
84
56
|
widthCache.set(segment, width);
|
|
85
57
|
return width === 0 ? undefined : width;
|
package/dist/render/emoji.js.map
CHANGED
|
@@ -1 +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;AAChD,
|
|
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;AAChD,IAAI,sBAAsB,GAA2B,CAAC,CAAA;AAEtD,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE;IAC3B,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IACpD,MAAM,GAAG,GACR,OAAO,CAAC,GAAG,EAAE,eAAe;QAC5B,OAAO,CAAC,GAAG,EAAE,sBAAsB;QACnC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,CAAC,CAAA;IACzB,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,CAAC,CAAA;IACzB,OAAO,SAAS,CAAA;AACjB,CAAC,CAAC,EAAE,CAAA;AAEJ,IAAI,aAAa,EAAE,CAAC;IACnB,sBAAsB,GAAG,aAAa,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,OAAO,sBAAsB,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACzC,sBAAsB,GAAG,KAAK,CAAA;IAC9B,UAAU,CAAC,KAAK,EAAE,CAAA;AACnB,CAAC;AAED,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,sBAAsB,CAAA;IAC/B,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,sBAAsB,CAAA;IAC/B,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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -20,13 +20,7 @@ export * from "./layout/axis-helpers.js"
|
|
|
20
20
|
// Output helpers (buffer diffing and emission)
|
|
21
21
|
export * from "./output.js"
|
|
22
22
|
export * from "./render/buffer.js"
|
|
23
|
-
export {
|
|
24
|
-
clearEmojiWidthOverrides,
|
|
25
|
-
getEmojiWidth,
|
|
26
|
-
setEmojiWidth,
|
|
27
|
-
setEmojiWidthOverride,
|
|
28
|
-
setEmojiWidthOverrides,
|
|
29
|
-
} from "./render/emoji.js"
|
|
23
|
+
export { getEmojiWidth, setEmojiWidth } from "./render/emoji.js"
|
|
30
24
|
export * from "./render/measure.js"
|
|
31
25
|
export * from "./render/palette.js"
|
|
32
26
|
// Rendering primitives
|
package/src/render/emoji.ts
CHANGED
|
@@ -6,9 +6,6 @@ type EmojiWidth = 0 | 1 | 2
|
|
|
6
6
|
const emojiRegex = new RegExp(EMOJI_REGEX.source, EMOJI_REGEX.flags.replace("g", "").replace("y", ""))
|
|
7
7
|
const textRegex = new RegExp(TEXT_REGEX.source, TEXT_REGEX.flags.replace("g", "").replace("y", ""))
|
|
8
8
|
const widthCache = new Map<string, EmojiWidth>()
|
|
9
|
-
// Prefer text-width for ambiguous symbols that are commonly narrow in terminals.
|
|
10
|
-
const forceTextWidth = new Map<string, EmojiWidth>([["⚙", 1]])
|
|
11
|
-
const runtimeOverrides = new Map<string, EmojiWidth>()
|
|
12
9
|
let emojiPresentationWidth: Exclude<EmojiWidth, 0> = 2
|
|
13
10
|
|
|
14
11
|
const envEmojiWidth = (() => {
|
|
@@ -35,24 +32,6 @@ export function setEmojiWidth(width: 1 | 2): void {
|
|
|
35
32
|
widthCache.clear()
|
|
36
33
|
}
|
|
37
34
|
|
|
38
|
-
export function setEmojiWidthOverride(segment: string, width: 1 | 2): void {
|
|
39
|
-
runtimeOverrides.set(segment, width)
|
|
40
|
-
widthCache.clear()
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function setEmojiWidthOverrides(entries: Iterable<[string, 1 | 2]>): void {
|
|
44
|
-
runtimeOverrides.clear()
|
|
45
|
-
for (const [segment, width] of entries) {
|
|
46
|
-
runtimeOverrides.set(segment, width)
|
|
47
|
-
}
|
|
48
|
-
widthCache.clear()
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function clearEmojiWidthOverrides(): void {
|
|
52
|
-
runtimeOverrides.clear()
|
|
53
|
-
widthCache.clear()
|
|
54
|
-
}
|
|
55
|
-
|
|
56
35
|
function testRegex(regex: RegExp, segment: string): boolean {
|
|
57
36
|
if (regex.global || regex.sticky) {
|
|
58
37
|
regex.lastIndex = 0
|
|
@@ -69,22 +48,14 @@ export function emojiWidthOverride(segment: string): 1 | 2 | undefined {
|
|
|
69
48
|
if (cached !== undefined) return cached === 0 ? undefined : cached
|
|
70
49
|
|
|
71
50
|
let width: EmojiWidth = 0
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
width = emojiPresentationWidth
|
|
81
|
-
} else if (segment.includes("\uFE0E")) {
|
|
82
|
-
width = 1
|
|
83
|
-
} else if (testRegex(emojiRegex, segment)) {
|
|
84
|
-
width = emojiPresentationWidth
|
|
85
|
-
} else if (testRegex(textRegex, segment)) {
|
|
86
|
-
width = 1
|
|
87
|
-
}
|
|
51
|
+
if (segment.includes("\uFE0F")) {
|
|
52
|
+
width = emojiPresentationWidth
|
|
53
|
+
} else if (segment.includes("\uFE0E")) {
|
|
54
|
+
width = 1
|
|
55
|
+
} else if (testRegex(emojiRegex, segment)) {
|
|
56
|
+
width = emojiPresentationWidth
|
|
57
|
+
} else if (testRegex(textRegex, segment)) {
|
|
58
|
+
width = 1
|
|
88
59
|
}
|
|
89
60
|
|
|
90
61
|
widthCache.set(segment, width)
|