@effect-tui/core 0.9.3 → 0.10.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/render/buffer.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export type Wcwidth = (cp: number) => 0 | 1 | 2;
|
|
2
|
+
/**
|
|
3
|
+
* Default wcwidth implementation with emoji and CJK support.
|
|
4
|
+
* Returns 0 for control characters, 2 for wide characters (emoji, CJK), 1 otherwise.
|
|
5
|
+
*/
|
|
2
6
|
export declare const defaultWcwidth: Wcwidth;
|
|
3
7
|
export declare class CellBuffer {
|
|
4
8
|
readonly w: number;
|
|
@@ -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;
|
|
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,OA2C5B,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
|
@@ -1,7 +1,67 @@
|
|
|
1
1
|
/* buffer.ts — 2D cell buffer with drawing, clipping, and offsets */
|
|
2
2
|
import { iterateGraphemeCells } from "./graphemes.js";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Default wcwidth implementation with emoji and CJK support.
|
|
5
|
+
* Returns 0 for control characters, 2 for wide characters (emoji, CJK), 1 otherwise.
|
|
6
|
+
*/
|
|
7
|
+
export const defaultWcwidth = (cp) => {
|
|
8
|
+
// Control characters: width 0
|
|
9
|
+
if (cp === 0 || cp < 32 || cp === 0x7f)
|
|
10
|
+
return 0;
|
|
11
|
+
// Soft hyphen: width 1 (not 0, for terminal compatibility)
|
|
12
|
+
if (cp === 0xad)
|
|
13
|
+
return 1;
|
|
14
|
+
// CJK characters: width 2
|
|
15
|
+
// CJK Unified Ideographs and extensions
|
|
16
|
+
if (cp >= 0x4e00 && cp <= 0x9fff)
|
|
17
|
+
return 2;
|
|
18
|
+
if (cp >= 0x3400 && cp <= 0x4dbf)
|
|
19
|
+
return 2; // CJK Extension A
|
|
20
|
+
if (cp >= 0x20000 && cp <= 0x2a6df)
|
|
21
|
+
return 2; // CJK Extension B
|
|
22
|
+
if (cp >= 0x2a700 && cp <= 0x2ebef)
|
|
23
|
+
return 2; // CJK Extensions C-F
|
|
24
|
+
if (cp >= 0x30000 && cp <= 0x323af)
|
|
25
|
+
return 2; // CJK Extension G-I
|
|
26
|
+
// CJK punctuation, symbols, and compatibility
|
|
27
|
+
if (cp >= 0x3000 && cp <= 0x303f)
|
|
28
|
+
return 2; // CJK Symbols and Punctuation
|
|
29
|
+
if (cp >= 0xff00 && cp <= 0xff60)
|
|
30
|
+
return 2; // Fullwidth ASCII variants
|
|
31
|
+
if (cp >= 0xffe0 && cp <= 0xffe6)
|
|
32
|
+
return 2; // Fullwidth symbol variants
|
|
33
|
+
// Japanese Hiragana and Katakana
|
|
34
|
+
if (cp >= 0x3040 && cp <= 0x309f)
|
|
35
|
+
return 2; // Hiragana
|
|
36
|
+
if (cp >= 0x30a0 && cp <= 0x30ff)
|
|
37
|
+
return 2; // Katakana
|
|
38
|
+
if (cp >= 0x31f0 && cp <= 0x31ff)
|
|
39
|
+
return 2; // Katakana Phonetic Extensions
|
|
40
|
+
// Korean Hangul
|
|
41
|
+
if (cp >= 0xac00 && cp <= 0xd7af)
|
|
42
|
+
return 2; // Hangul Syllables
|
|
43
|
+
if (cp >= 0x1100 && cp <= 0x11ff)
|
|
44
|
+
return 2; // Hangul Jamo
|
|
45
|
+
// Emoji: width 2
|
|
46
|
+
// Most emoji are in these ranges
|
|
47
|
+
if (cp >= 0x1f300 && cp <= 0x1f9ff)
|
|
48
|
+
return 2; // Misc Symbols, Emoticons, etc.
|
|
49
|
+
if (cp >= 0x1fa00 && cp <= 0x1faff)
|
|
50
|
+
return 2; // Chess, Extended-A
|
|
51
|
+
if (cp >= 0x2600 && cp <= 0x26ff)
|
|
52
|
+
return 2; // Misc Symbols
|
|
53
|
+
if (cp >= 0x2700 && cp <= 0x27bf)
|
|
54
|
+
return 2; // Dingbats
|
|
55
|
+
if (cp >= 0x231a && cp <= 0x23ff)
|
|
56
|
+
return 2; // Misc Technical (includes ⌚⌛)
|
|
57
|
+
if (cp >= 0x1f600 && cp <= 0x1f64f)
|
|
58
|
+
return 2; // Emoticons
|
|
59
|
+
// Regional indicators (flags)
|
|
60
|
+
if (cp >= 0x1f1e0 && cp <= 0x1f1ff)
|
|
61
|
+
return 2;
|
|
62
|
+
// Default: width 1
|
|
63
|
+
return 1;
|
|
64
|
+
};
|
|
5
65
|
// Represents a single frame of cells (glyph + style + cell width)
|
|
6
66
|
export class CellBuffer {
|
|
7
67
|
w;
|
|
@@ -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
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/render/buffer.ts
CHANGED
|
@@ -4,8 +4,54 @@ import { iterateGraphemeCells } from "./graphemes.js"
|
|
|
4
4
|
|
|
5
5
|
export type Wcwidth = (cp: number) => 0 | 1 | 2
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Default wcwidth implementation with emoji and CJK support.
|
|
9
|
+
* Returns 0 for control characters, 2 for wide characters (emoji, CJK), 1 otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export const defaultWcwidth: Wcwidth = (cp) => {
|
|
12
|
+
// Control characters: width 0
|
|
13
|
+
if (cp === 0 || cp < 32 || cp === 0x7f) return 0
|
|
14
|
+
|
|
15
|
+
// Soft hyphen: width 1 (not 0, for terminal compatibility)
|
|
16
|
+
if (cp === 0xad) return 1
|
|
17
|
+
|
|
18
|
+
// CJK characters: width 2
|
|
19
|
+
// CJK Unified Ideographs and extensions
|
|
20
|
+
if (cp >= 0x4e00 && cp <= 0x9fff) return 2
|
|
21
|
+
if (cp >= 0x3400 && cp <= 0x4dbf) return 2 // CJK Extension A
|
|
22
|
+
if (cp >= 0x20000 && cp <= 0x2a6df) return 2 // CJK Extension B
|
|
23
|
+
if (cp >= 0x2a700 && cp <= 0x2ebef) return 2 // CJK Extensions C-F
|
|
24
|
+
if (cp >= 0x30000 && cp <= 0x323af) return 2 // CJK Extension G-I
|
|
25
|
+
|
|
26
|
+
// CJK punctuation, symbols, and compatibility
|
|
27
|
+
if (cp >= 0x3000 && cp <= 0x303f) return 2 // CJK Symbols and Punctuation
|
|
28
|
+
if (cp >= 0xff00 && cp <= 0xff60) return 2 // Fullwidth ASCII variants
|
|
29
|
+
if (cp >= 0xffe0 && cp <= 0xffe6) return 2 // Fullwidth symbol variants
|
|
30
|
+
|
|
31
|
+
// Japanese Hiragana and Katakana
|
|
32
|
+
if (cp >= 0x3040 && cp <= 0x309f) return 2 // Hiragana
|
|
33
|
+
if (cp >= 0x30a0 && cp <= 0x30ff) return 2 // Katakana
|
|
34
|
+
if (cp >= 0x31f0 && cp <= 0x31ff) return 2 // Katakana Phonetic Extensions
|
|
35
|
+
|
|
36
|
+
// Korean Hangul
|
|
37
|
+
if (cp >= 0xac00 && cp <= 0xd7af) return 2 // Hangul Syllables
|
|
38
|
+
if (cp >= 0x1100 && cp <= 0x11ff) return 2 // Hangul Jamo
|
|
39
|
+
|
|
40
|
+
// Emoji: width 2
|
|
41
|
+
// Most emoji are in these ranges
|
|
42
|
+
if (cp >= 0x1f300 && cp <= 0x1f9ff) return 2 // Misc Symbols, Emoticons, etc.
|
|
43
|
+
if (cp >= 0x1fa00 && cp <= 0x1faff) return 2 // Chess, Extended-A
|
|
44
|
+
if (cp >= 0x2600 && cp <= 0x26ff) return 2 // Misc Symbols
|
|
45
|
+
if (cp >= 0x2700 && cp <= 0x27bf) return 2 // Dingbats
|
|
46
|
+
if (cp >= 0x231a && cp <= 0x23ff) return 2 // Misc Technical (includes ⌚⌛)
|
|
47
|
+
if (cp >= 0x1f600 && cp <= 0x1f64f) return 2 // Emoticons
|
|
48
|
+
|
|
49
|
+
// Regional indicators (flags)
|
|
50
|
+
if (cp >= 0x1f1e0 && cp <= 0x1f1ff) return 2
|
|
51
|
+
|
|
52
|
+
// Default: width 1
|
|
53
|
+
return 1
|
|
54
|
+
}
|
|
9
55
|
|
|
10
56
|
type ClipRect = { x: number; y: number; w: number; h: number }
|
|
11
57
|
|