@zakmandhro/bunti 0.2.1 → 0.3.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/README.md +6 -5
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -9
- package/dist/cli.js.map +1 -1
- package/dist/colors.d.ts +2 -2
- package/dist/colors.js +2 -2
- package/dist/components/Box.d.ts +1 -1
- package/dist/components/Button.d.ts +1 -1
- package/dist/components/Button.js +2 -2
- package/dist/components/Card.d.ts +1 -1
- package/dist/components/Card.js +3 -3
- package/dist/components/Header.d.ts +1 -1
- package/dist/components/Header.js +2 -2
- package/dist/components/Input.d.ts +2 -2
- package/dist/components/Input.js +1 -1
- package/dist/components/Link.d.ts +2 -2
- package/dist/components/Link.js +2 -2
- package/dist/components/Modal.d.ts +1 -1
- package/dist/components/Modal.js +2 -2
- package/dist/components/Progress.d.ts +2 -2
- package/dist/components/Progress.js +2 -2
- package/dist/components/Spinner.d.ts +2 -2
- package/dist/components/index.d.ts +9 -9
- package/dist/components/index.js +9 -9
- package/dist/data/nf-glyphs.d.ts +2 -2
- package/dist/demo-registry.d.ts.map +1 -1
- package/dist/demo-registry.js +6 -1
- package/dist/demo-registry.js.map +1 -1
- package/dist/demos/2048.js +559 -0
- package/dist/demos/2048.ts +1 -1
- package/dist/demos/animation.js +177 -0
- package/dist/demos/animation.ts +1 -1
- package/dist/demos/demo-layout.js +85 -0
- package/dist/demos/demo-layout.ts +6 -1
- package/dist/demos/engine.js +244 -0
- package/dist/demos/interaction.js +74 -0
- package/dist/demos/interaction.ts +1 -1
- package/dist/demos/login.js +175 -0
- package/dist/demos/login.ts +1 -1
- package/dist/demos/mission-control.js +427 -0
- package/dist/demos/platformer-physics.js +122 -0
- package/dist/demos/platformer-physics.ts +284 -0
- package/dist/demos/platformer.js +519 -0
- package/dist/demos/platformer.ts +761 -0
- package/dist/demos/showcase.js +181 -0
- package/dist/demos/showcase.ts +1 -1
- package/dist/diagnostics.d.ts +2 -2
- package/dist/dsl/context.d.ts +2 -2
- package/dist/dsl/context.d.ts.map +1 -1
- package/dist/dsl/context.js +14 -14
- package/dist/dsl/context.js.map +1 -1
- package/dist/dsl/hooks.d.ts +2 -2
- package/dist/dsl/hooks.js +1 -1
- package/dist/dsl/interaction.d.ts +3 -3
- package/dist/dsl/layers.d.ts +2 -2
- package/dist/dsl/motion.d.ts +2 -2
- package/dist/dsl/motion.js +2 -2
- package/dist/dsl/render.d.ts +2 -2
- package/dist/dsl/render.d.ts.map +1 -1
- package/dist/dsl/render.js +4 -8
- package/dist/dsl/render.js.map +1 -1
- package/dist/dsl/types.d.ts +11 -10
- package/dist/dsl/types.d.ts.map +1 -1
- package/dist/dsl/types.js.map +1 -1
- package/dist/dsl.d.ts +4 -4
- package/dist/dsl.js +3 -3
- package/dist/easing.d.ts +1 -1
- package/dist/geometry.d.ts +1 -1
- package/dist/geometry.js +1 -1
- package/dist/icons-full.d.ts +2 -2
- package/dist/icons-full.js +3 -3
- package/dist/icons.d.ts +4 -4
- package/dist/icons.js +3 -3
- package/dist/index.d.ts +42 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -24
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +18 -6
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +15 -6
- package/dist/layout.js.map +1 -1
- package/dist/pixels.d.ts +51 -0
- package/dist/pixels.d.ts.map +1 -0
- package/dist/pixels.js +82 -0
- package/dist/pixels.js.map +1 -0
- package/dist/render.d.ts +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +44 -10
- package/dist/render.js.map +1 -1
- package/dist/state.d.ts +4 -4
- package/dist/state.js +1 -1
- package/dist/theme.d.ts +2 -2
- package/dist/theme.js +1 -1
- package/dist/themes/catppuccin-mocha.d.ts +1 -1
- package/dist/themes/catppuccin-mocha.js +1 -1
- package/dist/themes/dracula.d.ts +1 -1
- package/dist/themes/dracula.js +1 -1
- package/dist/themes/github-light.d.ts +1 -1
- package/dist/themes/github-light.js +1 -1
- package/dist/themes/index.d.ts +7 -7
- package/dist/themes/index.js +6 -6
- package/dist/themes/nord.d.ts +1 -1
- package/dist/themes/nord.js +1 -1
- package/dist/themes/one-dark-pro.d.ts +1 -1
- package/dist/themes/one-dark-pro.js +1 -1
- package/dist/themes/tokyo-night.d.ts +1 -1
- package/dist/themes/tokyo-night.js +1 -1
- package/dist/utils.d.ts +6 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +68 -3
- package/dist/utils.js.map +1 -1
- package/llms.txt +4 -2
- package/package.json +8 -4
package/dist/utils.js
CHANGED
|
@@ -9,8 +9,66 @@ export function stripAnsi(str) {
|
|
|
9
9
|
return '';
|
|
10
10
|
return str.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
|
|
11
11
|
}
|
|
12
|
+
let segmenter = null;
|
|
13
|
+
function getSegmenter() {
|
|
14
|
+
if (!segmenter) {
|
|
15
|
+
segmenter = new Intl.Segmenter();
|
|
16
|
+
}
|
|
17
|
+
return segmenter;
|
|
18
|
+
}
|
|
19
|
+
function graphemeWidth(segment) {
|
|
20
|
+
const cp = segment.codePointAt(0);
|
|
21
|
+
if (cp === undefined)
|
|
22
|
+
return 0;
|
|
23
|
+
// Zero-width control codes and format characters
|
|
24
|
+
if (cp <= 0x1f || (cp >= 0x7f && cp <= 0x9f))
|
|
25
|
+
return 0;
|
|
26
|
+
if (cp === 0x200b || cp === 0xfeff || cp === 0xad)
|
|
27
|
+
return 0; // zero-width space, BOM, soft hyphen
|
|
28
|
+
// Emoji / Extended Pictographic (Intl.Segmenter groups whole emoji grapheme clusters)
|
|
29
|
+
if (/\p{Extended_Pictographic}/u.test(segment)) {
|
|
30
|
+
return 2;
|
|
31
|
+
}
|
|
32
|
+
// East Asian Wide / Fullwidth characters
|
|
33
|
+
if ((cp >= 0x1100 && cp <= 0x115f) || // Hangul Jamo
|
|
34
|
+
(cp >= 0x2e80 && cp <= 0xa4cf && cp !== 0x303f) || // CJK Radicals, Kangxi, Ideographic, Hiragana, Katakana, Bopomofo, Hangul, CJK Unified
|
|
35
|
+
(cp >= 0xac00 && cp <= 0xd7a3) || // Hangul Syllables
|
|
36
|
+
(cp >= 0xf900 && cp <= 0xfaff) || // CJK Compatibility Ideographs
|
|
37
|
+
(cp >= 0xfe10 && cp <= 0xfe19) || // Vertical forms
|
|
38
|
+
(cp >= 0xfe30 && cp <= 0xfe6f) || // CJK Compatibility Forms
|
|
39
|
+
(cp >= 0xff01 && cp <= 0xff60) || // Fullwidth Forms
|
|
40
|
+
(cp >= 0xffe0 && cp <= 0xffe6) || // Fullwidth signs
|
|
41
|
+
(cp >= 0x20000 && cp <= 0x3fffd) // CJK Unified Ideographs Extension
|
|
42
|
+
) {
|
|
43
|
+
return 2;
|
|
44
|
+
}
|
|
45
|
+
// Combining characters
|
|
46
|
+
if ((cp >= 0x0300 && cp <= 0x036f) ||
|
|
47
|
+
(cp >= 0x1ab0 && cp <= 0x1aff) ||
|
|
48
|
+
(cp >= 0x1dc0 && cp <= 0x1dff) ||
|
|
49
|
+
(cp >= 0x20d0 && cp <= 0x20ff) ||
|
|
50
|
+
(cp >= 0xfe20 && cp <= 0xfe2f)) {
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
12
55
|
/**
|
|
13
|
-
* Calculates
|
|
56
|
+
* Calculates string width using Intl.Segmenter and Unicode tables when Bun.stringWidth is unavailable.
|
|
57
|
+
*/
|
|
58
|
+
export function stringWidthFallback(str) {
|
|
59
|
+
if (!str)
|
|
60
|
+
return 0;
|
|
61
|
+
const clean = stripAnsi(str);
|
|
62
|
+
const seg = getSegmenter();
|
|
63
|
+
let width = 0;
|
|
64
|
+
for (const { segment } of seg.segment(clean)) {
|
|
65
|
+
width += graphemeWidth(segment);
|
|
66
|
+
}
|
|
67
|
+
return width;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Calculates the visible width of a string (using Bun's SIMD API when on Bun,
|
|
71
|
+
* falling back to Intl.Segmenter unicode width on Node).
|
|
14
72
|
*/
|
|
15
73
|
export function visibleWidth(str) {
|
|
16
74
|
if (!str)
|
|
@@ -19,7 +77,11 @@ export function visibleWidth(str) {
|
|
|
19
77
|
if (lines.length > 1) {
|
|
20
78
|
return Math.max(...lines.map(visibleWidth));
|
|
21
79
|
}
|
|
22
|
-
|
|
80
|
+
const clean = stripAnsi(str);
|
|
81
|
+
if (typeof Bun !== 'undefined' && typeof Bun.stringWidth === 'function') {
|
|
82
|
+
return Bun.stringWidth(clean);
|
|
83
|
+
}
|
|
84
|
+
return stringWidthFallback(clean);
|
|
23
85
|
}
|
|
24
86
|
/**
|
|
25
87
|
* Returns the width of a single character or grapheme.
|
|
@@ -28,7 +90,10 @@ export function charWidth(char) {
|
|
|
28
90
|
const clean = stripAnsi(char);
|
|
29
91
|
if (clean.length === 0)
|
|
30
92
|
return 0;
|
|
31
|
-
|
|
93
|
+
if (typeof Bun !== 'undefined' && typeof Bun.stringWidth === 'function') {
|
|
94
|
+
return Bun.stringWidth(clean);
|
|
95
|
+
}
|
|
96
|
+
return stringWidthFallback(clean);
|
|
32
97
|
}
|
|
33
98
|
/**
|
|
34
99
|
* Truncates a string to a visible width while preserving ANSI codes.
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/llms.txt
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
# Bunti
|
|
2
2
|
|
|
3
|
-
> A
|
|
3
|
+
> A terminal UI engine optimized for Bun and Node.js with zero dependencies: 60fps
|
|
4
4
|
> double-buffered diff rendering, an immediate-mode contextual DSL,
|
|
5
5
|
> semantic themes (6 VS Code presets), mouse + keyboard input, motion
|
|
6
6
|
> helpers, and a 10.7k-name Nerd Font icon registry. Built to be the
|
|
7
7
|
> easiest TUI library for coding agents.
|
|
8
8
|
|
|
9
|
-
Requires
|
|
9
|
+
Requires Bun (>= 1.0, with native SIMD vectorization for speed) or Node.js (>= 22.0.0 LTS); zero runtime dependencies.
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
bun add @zakmandhro/bunti
|
|
15
|
+
# or
|
|
16
|
+
npm install @zakmandhro/bunti
|
|
15
17
|
```
|
|
16
18
|
|
|
17
19
|
## Mental model
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zakmandhro/bunti",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "A zero-dependency terminal layout engine for Bun and Node.js with 60fps diff rendering and an agent-optimized functional API.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -44,14 +44,16 @@
|
|
|
44
44
|
"bunti": "dist/cli.js"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
|
47
|
+
"node": ">=22.0.0",
|
|
47
48
|
"bun": ">=1.0.0"
|
|
48
49
|
},
|
|
49
50
|
"scripts": {
|
|
50
|
-
"build": "rm -rf dist && tsc -p tsconfig.build.json && bun scripts/build-demos.ts",
|
|
51
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json && bun scripts/fix-esm-imports.ts && bun scripts/build-demos.ts",
|
|
51
52
|
"gen:llms": "bun scripts/gen-llms.ts",
|
|
52
53
|
"prepublishOnly": "bun run typecheck && bun run lint && bun run test && bun run gen:llms && bun run build",
|
|
53
54
|
"test": "bun test",
|
|
54
55
|
"smoke": "bun scripts/smoke-demos.ts",
|
|
56
|
+
"smoke:node": "node scripts/smoke-node.mjs",
|
|
55
57
|
"bench": "bun scripts/bench.ts",
|
|
56
58
|
"typecheck": "tsc --noEmit",
|
|
57
59
|
"type-check": "tsc --noEmit",
|
|
@@ -63,7 +65,8 @@
|
|
|
63
65
|
"record": "vhs tapes/2048.tape",
|
|
64
66
|
"record:animation": "vhs tapes/animation.tape",
|
|
65
67
|
"record:mission-control": "vhs tapes/mission-control.tape",
|
|
66
|
-
"record:
|
|
68
|
+
"record:platformer": "vhs tapes/platformer.tape",
|
|
69
|
+
"record:all": "vhs tapes/2048.tape && vhs tapes/animation.tape && vhs tapes/mission-control.tape && vhs tapes/platformer.tape",
|
|
67
70
|
"docs:dev": "vitepress dev docs",
|
|
68
71
|
"docs:build": "vitepress build docs",
|
|
69
72
|
"docs:preview": "vitepress preview docs"
|
|
@@ -74,6 +77,7 @@
|
|
|
74
77
|
"terminal",
|
|
75
78
|
"layout",
|
|
76
79
|
"bun",
|
|
80
|
+
"node",
|
|
77
81
|
"bunti"
|
|
78
82
|
],
|
|
79
83
|
"author": "Zak Mandhro <zakmandhro@gmail.com>",
|