take4-console 0.15.0 → 0.25.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +365 -0
  2. package/README.md +1 -1
  3. package/dist/Screen/InterfaceBuilder.d.mts +15 -4
  4. package/dist/Screen/InterfaceBuilder.d.mts.map +1 -1
  5. package/dist/Screen/InterfaceBuilder.mjs +104 -8
  6. package/dist/Screen/InterfaceBuilder.mjs.map +1 -1
  7. package/dist/Screen/Pos.d.mts +12 -0
  8. package/dist/Screen/Pos.d.mts.map +1 -1
  9. package/dist/Screen/Pos.mjs +23 -1
  10. package/dist/Screen/Pos.mjs.map +1 -1
  11. package/dist/Screen/Screen.d.mts +77 -3
  12. package/dist/Screen/Screen.d.mts.map +1 -1
  13. package/dist/Screen/Screen.mjs +168 -3
  14. package/dist/Screen/Screen.mjs.map +1 -1
  15. package/dist/Screen/Size.d.mts +49 -6
  16. package/dist/Screen/Size.d.mts.map +1 -1
  17. package/dist/Screen/Size.mjs +81 -7
  18. package/dist/Screen/Size.mjs.map +1 -1
  19. package/dist/Screen/Window.d.mts +131 -20
  20. package/dist/Screen/Window.d.mts.map +1 -1
  21. package/dist/Screen/Window.mjs +474 -57
  22. package/dist/Screen/Window.mjs.map +1 -1
  23. package/dist/Screen/WindowManager.d.mts +85 -5
  24. package/dist/Screen/WindowManager.d.mts.map +1 -1
  25. package/dist/Screen/WindowManager.mjs +279 -26
  26. package/dist/Screen/WindowManager.mjs.map +1 -1
  27. package/dist/Screen/controls/ListBox.d.mts +34 -12
  28. package/dist/Screen/controls/ListBox.d.mts.map +1 -1
  29. package/dist/Screen/controls/ListBox.mjs +127 -25
  30. package/dist/Screen/controls/ListBox.mjs.map +1 -1
  31. package/dist/Screen/controls/TextArea.d.mts +15 -1
  32. package/dist/Screen/controls/TextArea.d.mts.map +1 -1
  33. package/dist/Screen/controls/TextArea.mjs +74 -1
  34. package/dist/Screen/controls/TextArea.mjs.map +1 -1
  35. package/dist/Screen/controls/TextBox.d.mts +13 -1
  36. package/dist/Screen/controls/TextBox.d.mts.map +1 -1
  37. package/dist/Screen/controls/TextBox.mjs +36 -1
  38. package/dist/Screen/controls/TextBox.mjs.map +1 -1
  39. package/dist/Screen/textWidth.d.mts +13 -0
  40. package/dist/Screen/textWidth.d.mts.map +1 -0
  41. package/dist/Screen/textWidth.mjs +188 -0
  42. package/dist/Screen/textWidth.mjs.map +1 -0
  43. package/dist/Screen/types.d.mts +336 -20
  44. package/dist/Screen/types.d.mts.map +1 -1
  45. package/dist/Screen/types.mjs.map +1 -1
  46. package/dist/index.d.mts +3 -2
  47. package/dist/index.d.mts.map +1 -1
  48. package/dist/index.mjs +3 -1
  49. package/dist/index.mjs.map +1 -1
  50. package/package.json +4 -4
  51. package/src/Screen/InterfaceBuilder.mts +116 -20
  52. package/src/Screen/Pos.mts +24 -1
  53. package/src/Screen/Screen.mts +192 -4
  54. package/src/Screen/Size.mts +97 -12
  55. package/src/Screen/Window.mts +463 -63
  56. package/src/Screen/WindowManager.mts +301 -29
  57. package/src/Screen/controls/ListBox.mts +151 -32
  58. package/src/Screen/controls/TextArea.mts +82 -1
  59. package/src/Screen/controls/TextBox.mts +40 -1
  60. package/src/Screen/textWidth.mts +186 -0
  61. package/src/Screen/types.mts +328 -23
  62. package/src/demo.mts +232 -20
  63. package/src/index.mts +23 -3
  64. package/src/layout.yaml +56 -24
@@ -0,0 +1,188 @@
1
+ // Unicode display width for monospace terminals.
2
+ //
3
+ // Maps a codepoint to its visible cell width (0, 1 or 2). Used by
4
+ // Window.writeText so wide characters (CJK, emoji, NerdFonts double-width)
5
+ // occupy two consecutive cells in the buffer, and by Window.getTextWidth /
6
+ // stringWidth() so consumers can size labels correctly.
7
+ //
8
+ // The internal tables are derived from the Unicode East Asian Width data
9
+ // (W and F categories) plus a curated set of zero-width / control / combining
10
+ // ranges. They are intentionally compact rather than exhaustive — the goal is
11
+ // "good enough for labels and log output", not full Unicode normalization.
12
+ /** Configurable display width for the Private Use Area (NerdFonts glyphs).
13
+ * Most NerdFonts ship single-cell glyphs but some patched fonts use 2 cells. */
14
+ let puaWidth = 1;
15
+ /** Sets the display width used for codepoints in the Unicode Private Use Areas
16
+ * (U+E000–F8FF, U+F0000–FFFFD, U+100000–10FFFD). NerdFonts glyphs typically
17
+ * render as one cell; some patched fonts render them as two cells. Default: 1. */
18
+ export const setPuaWidth = (width) => {
19
+ puaWidth = width;
20
+ };
21
+ /** Returns the currently configured Private Use Area width. */
22
+ export const getPuaWidth = () => puaWidth;
23
+ /** Zero-width ranges: control characters, combining marks, format characters,
24
+ * variation selectors, joiners. Sorted by start codepoint for binary search. */
25
+ const ZERO_RANGES = [
26
+ [0x0000, 0x001F],
27
+ [0x007F, 0x009F],
28
+ [0x00AD, 0x00AD],
29
+ [0x0300, 0x036F],
30
+ [0x0483, 0x0489],
31
+ [0x0591, 0x05BD],
32
+ [0x05BF, 0x05BF],
33
+ [0x05C1, 0x05C2],
34
+ [0x05C4, 0x05C5],
35
+ [0x05C7, 0x05C7],
36
+ [0x0610, 0x061A],
37
+ [0x061C, 0x061C],
38
+ [0x064B, 0x065F],
39
+ [0x0670, 0x0670],
40
+ [0x06D6, 0x06DC],
41
+ [0x06DF, 0x06E4],
42
+ [0x06E7, 0x06E8],
43
+ [0x06EA, 0x06ED],
44
+ [0x0711, 0x0711],
45
+ [0x0730, 0x074A],
46
+ [0x07A6, 0x07B0],
47
+ [0x07EB, 0x07F3],
48
+ [0x07FD, 0x07FD],
49
+ [0x0816, 0x0819],
50
+ [0x081B, 0x0823],
51
+ [0x0825, 0x0827],
52
+ [0x0829, 0x082D],
53
+ [0x0859, 0x085B],
54
+ [0x08D3, 0x08E1],
55
+ [0x08E3, 0x0902],
56
+ [0x093A, 0x093A],
57
+ [0x093C, 0x093C],
58
+ [0x0941, 0x0948],
59
+ [0x094D, 0x094D],
60
+ [0x0951, 0x0957],
61
+ [0x0962, 0x0963],
62
+ [0x180B, 0x180E],
63
+ [0x200B, 0x200F],
64
+ [0x202A, 0x202E],
65
+ [0x2060, 0x2064],
66
+ [0x2066, 0x206F],
67
+ [0xFE00, 0xFE0F],
68
+ [0xFEFF, 0xFEFF],
69
+ [0xE0100, 0xE01EF],
70
+ ];
71
+ /** Wide (W or F) ranges: characters that occupy two terminal cells. */
72
+ const WIDE_RANGES = [
73
+ [0x1100, 0x115F],
74
+ [0x231A, 0x231B],
75
+ [0x2329, 0x232A],
76
+ [0x23E9, 0x23EC],
77
+ [0x23F0, 0x23F0],
78
+ [0x23F3, 0x23F3],
79
+ [0x25FD, 0x25FE],
80
+ [0x2614, 0x2615],
81
+ [0x2648, 0x2653],
82
+ [0x267F, 0x267F],
83
+ [0x2693, 0x2693],
84
+ [0x26A1, 0x26A1],
85
+ [0x26AA, 0x26AB],
86
+ [0x26BD, 0x26BE],
87
+ [0x26C4, 0x26C5],
88
+ [0x26CE, 0x26CE],
89
+ [0x26D4, 0x26D4],
90
+ [0x26EA, 0x26EA],
91
+ [0x26F2, 0x26F3],
92
+ [0x26F5, 0x26F5],
93
+ [0x26FA, 0x26FA],
94
+ [0x26FD, 0x26FD],
95
+ [0x2705, 0x2705],
96
+ [0x270A, 0x270B],
97
+ [0x2728, 0x2728],
98
+ [0x274C, 0x274C],
99
+ [0x274E, 0x274E],
100
+ [0x2753, 0x2755],
101
+ [0x2757, 0x2757],
102
+ [0x2795, 0x2797],
103
+ [0x27B0, 0x27B0],
104
+ [0x27BF, 0x27BF],
105
+ [0x2B1B, 0x2B1C],
106
+ [0x2B50, 0x2B50],
107
+ [0x2B55, 0x2B55],
108
+ [0x2E80, 0x303E],
109
+ [0x3041, 0x33FF],
110
+ [0x3400, 0x4DBF],
111
+ [0x4E00, 0x9FFF],
112
+ [0xA000, 0xA4CF],
113
+ [0xA960, 0xA97F],
114
+ [0xAC00, 0xD7A3],
115
+ [0xF900, 0xFAFF],
116
+ [0xFE10, 0xFE19],
117
+ [0xFE30, 0xFE6F],
118
+ [0xFF00, 0xFF60],
119
+ [0xFFE0, 0xFFE6],
120
+ [0x16FE0, 0x16FE4],
121
+ [0x17000, 0x187F7],
122
+ [0x18800, 0x18AFF],
123
+ [0x1B000, 0x1B11F],
124
+ [0x1F004, 0x1F004],
125
+ [0x1F0CF, 0x1F0CF],
126
+ [0x1F18E, 0x1F18E],
127
+ [0x1F191, 0x1F19A],
128
+ [0x1F200, 0x1F320],
129
+ [0x1F330, 0x1F335],
130
+ [0x1F337, 0x1F37C],
131
+ [0x1F380, 0x1F39F],
132
+ [0x1F3A0, 0x1F3FA],
133
+ [0x1F400, 0x1F4FD],
134
+ [0x1F500, 0x1F53D],
135
+ [0x1F549, 0x1F54E],
136
+ [0x1F550, 0x1F567],
137
+ [0x1F57A, 0x1F57A],
138
+ [0x1F595, 0x1F596],
139
+ [0x1F5A4, 0x1F5A4],
140
+ [0x1F5FB, 0x1F64F],
141
+ [0x1F680, 0x1F6FF],
142
+ [0x1F900, 0x1F9FF],
143
+ [0x1FA70, 0x1FAFF],
144
+ [0x20000, 0x2FFFD],
145
+ [0x30000, 0x3FFFD],
146
+ ];
147
+ /** Binary search: returns true when codepoint lies inside any [start, end] interval. */
148
+ const inRanges = (cp, ranges) => {
149
+ let lo = 0;
150
+ let hi = ranges.length - 1;
151
+ while (lo <= hi) {
152
+ const mid = (lo + hi) >>> 1;
153
+ const r = ranges[mid];
154
+ if (cp < r[0])
155
+ hi = mid - 1;
156
+ else if (cp > r[1])
157
+ lo = mid + 1;
158
+ else
159
+ return true;
160
+ }
161
+ return false;
162
+ };
163
+ /** Returns the display width (0, 1 or 2 cells) of a single Unicode codepoint. */
164
+ export const charWidth = (codepoint) => {
165
+ // Private Use Areas — checked first because they overlap with neither
166
+ // zero nor wide tables and we want the configured width to win.
167
+ if (codepoint >= 0xE000 && codepoint <= 0xF8FF)
168
+ return puaWidth;
169
+ if (codepoint >= 0xF0000 && codepoint <= 0xFFFFD)
170
+ return puaWidth;
171
+ if (codepoint >= 0x100000 && codepoint <= 0x10FFFD)
172
+ return puaWidth;
173
+ if (inRanges(codepoint, ZERO_RANGES))
174
+ return 0;
175
+ if (inRanges(codepoint, WIDE_RANGES))
176
+ return 2;
177
+ return 1;
178
+ };
179
+ /** Returns the total display width of a string in monospace terminal cells.
180
+ * Iterates by codepoint, so surrogate pairs are counted once with their
181
+ * combined width (typically 2 for emoji and supplementary CJK). */
182
+ export const stringWidth = (str) => {
183
+ let total = 0;
184
+ for (const ch of str)
185
+ total += charWidth(ch.codePointAt(0));
186
+ return total;
187
+ };
188
+ //# sourceMappingURL=textWidth.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textWidth.mjs","sourceRoot":"","sources":["../../src/Screen/textWidth.mts"],"names":[],"mappings":"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AAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,MAAM,EAAG,MAAM,CAAC;IACjB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wFAAwF;AACxF,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,MAAgD,EAAW,EAAE;IAC1F,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAAO,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;aAC5B,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;YACb,OAAO,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAa,EAAE;IACzD,sEAAsE;IACtE,gEAAgE;IAChE,IAAI,SAAS,IAAI,MAAM,IAAM,SAAS,IAAI,MAAM;QAAI,OAAO,QAAQ,CAAC;IACpE,IAAI,SAAS,IAAI,OAAO,IAAK,SAAS,IAAI,OAAO;QAAG,OAAO,QAAQ,CAAC;IACpE,IAAI,SAAS,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACpE,IAAI,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC;AACV,CAAC,CAAC;AAEF;;oEAEoE;AACpE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}