@zakmandhro/bunti 0.1.4 → 0.2.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 (203) hide show
  1. package/AGENTS.md +65 -0
  2. package/README.md +145 -34
  3. package/dist/cli.d.ts +44 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +147 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/colors.d.ts +144 -0
  8. package/dist/colors.d.ts.map +1 -0
  9. package/dist/colors.js +426 -0
  10. package/dist/colors.js.map +1 -0
  11. package/dist/components/Box.d.ts +11 -0
  12. package/dist/components/Box.d.ts.map +1 -0
  13. package/dist/components/Box.js +9 -0
  14. package/dist/components/Box.js.map +1 -0
  15. package/dist/components/Button.d.ts +24 -0
  16. package/dist/components/Button.d.ts.map +1 -0
  17. package/dist/components/Button.js +102 -0
  18. package/dist/components/Button.js.map +1 -0
  19. package/dist/components/Card.d.ts +33 -0
  20. package/dist/components/Card.d.ts.map +1 -0
  21. package/dist/components/Card.js +79 -0
  22. package/dist/components/Card.js.map +1 -0
  23. package/dist/components/Header.d.ts +23 -0
  24. package/dist/components/Header.d.ts.map +1 -0
  25. package/dist/components/Header.js +58 -0
  26. package/dist/components/Header.js.map +1 -0
  27. package/dist/components/Input.d.ts +25 -0
  28. package/dist/components/Input.d.ts.map +1 -0
  29. package/dist/components/Input.js +232 -0
  30. package/dist/components/Input.js.map +1 -0
  31. package/dist/components/Link.d.ts +21 -0
  32. package/dist/components/Link.d.ts.map +1 -0
  33. package/dist/components/Link.js +29 -0
  34. package/dist/components/Link.js.map +1 -0
  35. package/dist/components/Modal.d.ts +38 -0
  36. package/dist/components/Modal.d.ts.map +1 -0
  37. package/dist/components/Modal.js +87 -0
  38. package/dist/components/Modal.js.map +1 -0
  39. package/dist/components/Progress.d.ts +27 -0
  40. package/dist/components/Progress.d.ts.map +1 -0
  41. package/dist/components/Progress.js +39 -0
  42. package/dist/components/Progress.js.map +1 -0
  43. package/dist/components/Spinner.d.ts +19 -0
  44. package/dist/components/Spinner.d.ts.map +1 -0
  45. package/dist/components/Spinner.js +27 -0
  46. package/dist/components/Spinner.js.map +1 -0
  47. package/dist/components/index.d.ts +10 -0
  48. package/dist/components/index.d.ts.map +1 -0
  49. package/dist/components/index.js +10 -0
  50. package/dist/components/index.js.map +1 -0
  51. package/dist/data/nf-glyphs.d.ts +11 -0
  52. package/dist/data/nf-glyphs.d.ts.map +1 -0
  53. package/dist/data/nf-glyphs.js +535 -0
  54. package/dist/data/nf-glyphs.js.map +1 -0
  55. package/dist/data/nf-names.d.ts +8 -0
  56. package/dist/data/nf-names.d.ts.map +1 -0
  57. package/dist/data/nf-names.js +2 -0
  58. package/dist/data/nf-names.js.map +1 -0
  59. package/dist/demo-registry.d.ts +27 -0
  60. package/dist/demo-registry.d.ts.map +1 -0
  61. package/dist/demo-registry.js +57 -0
  62. package/dist/demo-registry.js.map +1 -0
  63. package/dist/demos/2048.ts +743 -0
  64. package/dist/demos/animation.ts +246 -0
  65. package/dist/demos/demo-layout.ts +124 -0
  66. package/dist/demos/engine.ts +374 -0
  67. package/dist/demos/interaction.ts +91 -0
  68. package/dist/demos/login.ts +203 -0
  69. package/dist/demos/mission-control.ts +558 -0
  70. package/dist/demos/showcase.ts +224 -0
  71. package/dist/detect.d.ts +104 -0
  72. package/dist/detect.d.ts.map +1 -0
  73. package/dist/detect.js +227 -0
  74. package/dist/detect.js.map +1 -0
  75. package/dist/diagnostics.d.ts +73 -0
  76. package/dist/diagnostics.d.ts.map +1 -0
  77. package/dist/diagnostics.js +225 -0
  78. package/dist/diagnostics.js.map +1 -0
  79. package/dist/dsl/context.d.ts +11 -0
  80. package/dist/dsl/context.d.ts.map +1 -0
  81. package/dist/dsl/context.js +563 -0
  82. package/dist/dsl/context.js.map +1 -0
  83. package/dist/dsl/hooks.d.ts +12 -0
  84. package/dist/dsl/hooks.d.ts.map +1 -0
  85. package/dist/dsl/hooks.js +148 -0
  86. package/dist/dsl/hooks.js.map +1 -0
  87. package/dist/dsl/interaction.d.ts +16 -0
  88. package/dist/dsl/interaction.d.ts.map +1 -0
  89. package/dist/dsl/interaction.js +101 -0
  90. package/dist/dsl/interaction.js.map +1 -0
  91. package/dist/dsl/layers.d.ts +14 -0
  92. package/dist/dsl/layers.d.ts.map +1 -0
  93. package/dist/dsl/layers.js +87 -0
  94. package/dist/dsl/layers.js.map +1 -0
  95. package/dist/dsl/motion.d.ts +10 -0
  96. package/dist/dsl/motion.d.ts.map +1 -0
  97. package/dist/dsl/motion.js +150 -0
  98. package/dist/dsl/motion.js.map +1 -0
  99. package/dist/dsl/render.d.ts +22 -0
  100. package/dist/dsl/render.d.ts.map +1 -0
  101. package/dist/dsl/render.js +69 -0
  102. package/dist/dsl/render.js.map +1 -0
  103. package/dist/dsl/types.d.ts +510 -0
  104. package/dist/dsl/types.d.ts.map +1 -0
  105. package/dist/dsl/types.js +33 -0
  106. package/dist/dsl/types.js.map +1 -0
  107. package/dist/dsl.d.ts +18 -0
  108. package/dist/dsl.d.ts.map +1 -0
  109. package/dist/dsl.js +17 -0
  110. package/dist/dsl.js.map +1 -0
  111. package/dist/easing.d.ts +45 -0
  112. package/dist/easing.d.ts.map +1 -0
  113. package/dist/easing.js +121 -0
  114. package/dist/easing.js.map +1 -0
  115. package/dist/geometry.d.ts +77 -0
  116. package/dist/geometry.d.ts.map +1 -0
  117. package/dist/geometry.js +130 -0
  118. package/dist/geometry.js.map +1 -0
  119. package/dist/icons-full.d.ts +5 -0
  120. package/dist/icons-full.d.ts.map +1 -0
  121. package/dist/icons-full.js +31 -0
  122. package/dist/icons-full.js.map +1 -0
  123. package/dist/icons.d.ts +442 -0
  124. package/dist/icons.d.ts.map +1 -0
  125. package/dist/icons.js +314 -0
  126. package/dist/icons.js.map +1 -0
  127. package/dist/index.d.ts +228 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +46 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/input.d.ts +177 -0
  132. package/dist/input.d.ts.map +1 -0
  133. package/dist/input.js +533 -0
  134. package/dist/input.js.map +1 -0
  135. package/dist/layout.d.ts +194 -0
  136. package/dist/layout.d.ts.map +1 -0
  137. package/dist/layout.js +673 -0
  138. package/dist/layout.js.map +1 -0
  139. package/dist/render.d.ts +49 -0
  140. package/dist/render.d.ts.map +1 -0
  141. package/dist/render.js +650 -0
  142. package/dist/render.js.map +1 -0
  143. package/dist/state.d.ts +226 -0
  144. package/dist/state.d.ts.map +1 -0
  145. package/dist/state.js +130 -0
  146. package/dist/state.js.map +1 -0
  147. package/dist/theme.d.ts +129 -0
  148. package/dist/theme.d.ts.map +1 -0
  149. package/dist/theme.js +167 -0
  150. package/dist/theme.js.map +1 -0
  151. package/dist/themes/catppuccin-mocha.d.ts +19 -0
  152. package/dist/themes/catppuccin-mocha.d.ts.map +1 -0
  153. package/dist/themes/catppuccin-mocha.js +36 -0
  154. package/dist/themes/catppuccin-mocha.js.map +1 -0
  155. package/dist/themes/dracula.d.ts +21 -0
  156. package/dist/themes/dracula.d.ts.map +1 -0
  157. package/dist/themes/dracula.js +37 -0
  158. package/dist/themes/dracula.js.map +1 -0
  159. package/dist/themes/github-light.d.ts +21 -0
  160. package/dist/themes/github-light.d.ts.map +1 -0
  161. package/dist/themes/github-light.js +36 -0
  162. package/dist/themes/github-light.js.map +1 -0
  163. package/dist/themes/index.d.ts +19 -0
  164. package/dist/themes/index.d.ts.map +1 -0
  165. package/dist/themes/index.js +17 -0
  166. package/dist/themes/index.js.map +1 -0
  167. package/dist/themes/nord.d.ts +23 -0
  168. package/dist/themes/nord.d.ts.map +1 -0
  169. package/dist/themes/nord.js +38 -0
  170. package/dist/themes/nord.js.map +1 -0
  171. package/dist/themes/one-dark-pro.d.ts +21 -0
  172. package/dist/themes/one-dark-pro.d.ts.map +1 -0
  173. package/dist/themes/one-dark-pro.js +36 -0
  174. package/dist/themes/one-dark-pro.js.map +1 -0
  175. package/dist/themes/tokyo-night.d.ts +20 -0
  176. package/dist/themes/tokyo-night.d.ts.map +1 -0
  177. package/dist/themes/tokyo-night.js +37 -0
  178. package/dist/themes/tokyo-night.js.map +1 -0
  179. package/dist/utils.d.ts +28 -0
  180. package/dist/utils.d.ts.map +1 -0
  181. package/dist/utils.js +158 -0
  182. package/dist/utils.js.map +1 -0
  183. package/dist/vendor/colors.d.ts +45 -0
  184. package/dist/vendor/colors.d.ts.map +1 -0
  185. package/dist/vendor/colors.js +72 -0
  186. package/dist/vendor/colors.js.map +1 -0
  187. package/llms.txt +79 -0
  188. package/package.json +52 -11
  189. package/src/colors.ts +0 -255
  190. package/src/components/Button.ts +0 -104
  191. package/src/components/Card.ts +0 -53
  192. package/src/components/Header.ts +0 -65
  193. package/src/components/Input.ts +0 -124
  194. package/src/components/index.ts +0 -4
  195. package/src/data/glyphs.ts +0 -30
  196. package/src/detect.ts +0 -60
  197. package/src/dsl.ts +0 -661
  198. package/src/icons.ts +0 -186
  199. package/src/index.ts +0 -72
  200. package/src/layout.ts +0 -640
  201. package/src/render.ts +0 -302
  202. package/src/state.ts +0 -148
  203. package/src/utils.ts +0 -165
package/dist/icons.js ADDED
@@ -0,0 +1,314 @@
1
+ import { identifyTerminal, } from './detect';
2
+ import { hintsSuppressed, nearestMatch, registerHintFlusher, } from './diagnostics';
3
+ const CURATED_ICONS = {
4
+ add: { nf: '\uf067', ascii: '+' },
5
+ 'arrow-left': { nf: '\uf060', ascii: '<' },
6
+ 'arrow-right': { nf: '\uf061', ascii: '>' },
7
+ bars: { nf: '\uf0c9', ascii: '=' },
8
+ bell: { nf: '\uf0f3', ascii: '!' },
9
+ branch: { nf: '\uf418', ascii: '*' },
10
+ bullet: { nf: '\uf111', ascii: '*' },
11
+ bun: { nf: '\ue76f', ascii: 'B' },
12
+ bunti: { nf: '\u{f0065}', ascii: '@' },
13
+ check: { nf: '\uf00c', ascii: 'v' },
14
+ checkbox: { nf: '\uf0c8', ascii: '#' },
15
+ 'checkbox-check': { nf: '\uf14a', ascii: 'X' },
16
+ 'chevron-down': { nf: '\uf078', ascii: 'v' },
17
+ 'chevron-left': { nf: '\uf053', ascii: '<' },
18
+ 'chevron-right': { nf: '\uf054', ascii: '>' },
19
+ close: { nf: '\uf00d', ascii: 'x' },
20
+ cloud: { nf: '\uf0c2', ascii: 'C' },
21
+ code: { nf: '\uf121', ascii: '{' },
22
+ commit: { nf: '\uf172', ascii: '+' },
23
+ copy: { nf: '\uf0c5', ascii: '=' },
24
+ cpu: { nf: '\uf2db', ascii: 'C' },
25
+ database: { nf: '\uf1c0', ascii: 'D' },
26
+ desktop: { nf: '\u{f01c4}', ascii: 'D' },
27
+ disk: { nf: '\uf0a0', ascii: 'D' },
28
+ download: { nf: '\uf019', ascii: 'v' },
29
+ 'draft-pr': { nf: '\uebdb', ascii: '!' },
30
+ edit: { nf: '\uf044', ascii: 'e' },
31
+ error: { nf: '\uf00d', ascii: 'x' },
32
+ exit: { nf: '\uf08b', ascii: '<' },
33
+ external: { nf: '\uf08e', ascii: '>' },
34
+ eye: { nf: '\uf06e', ascii: 'v' },
35
+ 'eye-off': { nf: '\uf070', ascii: 'h' },
36
+ file: { nf: '\uf15b', ascii: '-' },
37
+ folder: { nf: '\uf07b', ascii: '[' },
38
+ 'folder-open': { nf: '\uf115', ascii: '{' },
39
+ fork: { nf: '\uf41a', ascii: 'Y' },
40
+ gear: { nf: '\uf423', ascii: '*' },
41
+ git: { nf: '\ue702', ascii: 'g' },
42
+ grid: { nf: '\uf009', ascii: '#' },
43
+ heart: { nf: '\uf004', ascii: '*' },
44
+ 'help-circle': { nf: '\uf059', ascii: '?' },
45
+ home: { nf: '\uf015', ascii: 'H' },
46
+ image: { nf: '\uf03e', ascii: 'I' },
47
+ info: { nf: '\uf05a', ascii: 'i' },
48
+ issue: { nf: '\uebd9', ascii: '#' },
49
+ json: { nf: '\ue60b', ascii: 'J' },
50
+ laptop: { nf: '\uf109', ascii: 'L' },
51
+ list: { nf: '\uf03a', ascii: '=' },
52
+ loading: { nf: '\uf110', ascii: '~' },
53
+ lock: { nf: '\uf023', ascii: 'L' },
54
+ mail: { nf: '\uf0e0', ascii: '@' },
55
+ markdown: { nf: '\uf48a', ascii: 'M' },
56
+ maximize: { nf: '\uf0c8', ascii: '^' },
57
+ memory: { nf: '\uf0c7', ascii: 'M' },
58
+ menu: { nf: '\uf0c9', ascii: '=' },
59
+ merge: { nf: '\uf419', ascii: '>' },
60
+ minimize: { nf: '\u{f10fe}', ascii: 'v' },
61
+ network: { nf: '\uf0ac', ascii: 'N' },
62
+ node: { nf: '\ue718', ascii: 'N' },
63
+ pause: { nf: '\uf04c', ascii: '|' },
64
+ pencil: { nf: '\uf044', ascii: 'e' },
65
+ planet: { nf: '\ue22e', ascii: 'O' },
66
+ play: { nf: '\uf04b', ascii: '>' },
67
+ 'plus-circle': { nf: '\uea60', ascii: '+' },
68
+ pr: { nf: '\uf41d', ascii: '!' },
69
+ refresh: { nf: '\uf021', ascii: 'R' },
70
+ remove: { nf: '\uf068', ascii: '-' },
71
+ repo: { nf: '\uf401', ascii: 'R' },
72
+ robot: { nf: '\u{f06a9}', ascii: 'A' },
73
+ rocket: { nf: '\uf135', ascii: 'R' },
74
+ satellite: { nf: '\uef5f', ascii: 'S' },
75
+ save: { nf: '\uf0c7', ascii: 'S' },
76
+ search: { nf: '\uf002', ascii: '/' },
77
+ send: { nf: '\uec0f', ascii: '>' },
78
+ server: { nf: '\uf233', ascii: 'S' },
79
+ settings: { nf: '\uf013', ascii: '*' },
80
+ 'staggered-bars': { nf: '\u{ee19}', ascii: '=' },
81
+ star: { nf: '\uf005', ascii: '*' },
82
+ stop: { nf: '\uf04d', ascii: 'X' },
83
+ success: { nf: '\uf00c', ascii: 'v' },
84
+ tag: { nf: '\u{f04fc}', ascii: 't' },
85
+ terminal: { nf: '\uf120', ascii: '$' },
86
+ trash: { nf: '\uf1f8', ascii: 'x' },
87
+ user: { nf: '\uf007', ascii: 'U' },
88
+ warning: { nf: '\uf071', ascii: '!' },
89
+ wizard: { nf: '\u{f1477}', ascii: 'W' },
90
+ yaml: { nf: '\ue6a8', ascii: 'Y' },
91
+ zap: { nf: '\uf0e7', ascii: 'z' },
92
+ };
93
+ /** The curated icon table: 89 width-audited names with ASCII fallbacks. */
94
+ export const ICON_MAP = CURATED_ICONS;
95
+ /**
96
+ * Emoji-to-icon-name swaps applied automatically to drawn text (emoji
97
+ * render at unreliable widths across terminals; their NF twins are
98
+ * width-audited). Set `raw: true` on a cell to bypass.
99
+ */
100
+ export const EMOJI_MAP = {
101
+ '🌿': 'branch',
102
+ '📥': 'pr',
103
+ '📌': 'commit',
104
+ '🔀': 'merge',
105
+ '🍴': 'fork',
106
+ '🏷️': 'tag',
107
+ '📁': 'folder',
108
+ '📂': 'folder-open',
109
+ '📄': 'file',
110
+ '💻': 'laptop',
111
+ '🖥️': 'desktop',
112
+ '📝': 'edit',
113
+ '📦': 'json',
114
+ '📜': 'yaml',
115
+ '✅': 'success',
116
+ '❌': 'error',
117
+ '⚠️': 'warning',
118
+ ℹ️: 'info',
119
+ '⏳': 'loading',
120
+ '🚀': 'rocket',
121
+ '🥟': 'satellite',
122
+ '🪐': 'planet',
123
+ '🌀': 'bunti',
124
+ '🤖': 'robot',
125
+ '🗑️': 'trash',
126
+ '⚙️': 'gear',
127
+ '🔔': 'bell',
128
+ '✉️': 'mail',
129
+ '🖼️': 'image',
130
+ '❓': 'help-circle',
131
+ '🙂': 'success',
132
+ '😊': 'success',
133
+ '😀': 'success',
134
+ };
135
+ const _GENERIC_ICON = '\uf0010';
136
+ const cachedCaps = {
137
+ nerdFont: true,
138
+ glyphProtocol: false,
139
+ unicode: true,
140
+ color: true,
141
+ };
142
+ // Single precompiled alternation instead of 33 RegExp constructions per call.
143
+ // Longest keys first so variants with a variation selector win over bare emoji.
144
+ let emojiPattern = null;
145
+ function getEmojiPattern() {
146
+ if (!emojiPattern) {
147
+ const keys = Object.keys(EMOJI_MAP).sort((a, b) => b.length - a.length);
148
+ emojiPattern = new RegExp(`(?:${keys.join('|')})[\uFE00-\uFE0F]?`, 'g');
149
+ }
150
+ return emojiPattern;
151
+ }
152
+ /**
153
+ * Swaps known emoji in a string for their width-audited Nerd Font icons
154
+ * (see EMOJI_MAP). Applied automatically by draw calls; no-op on the
155
+ * ASCII tier.
156
+ */
157
+ export function replaceEmojis(text) {
158
+ if (!text)
159
+ return '';
160
+ if (!cachedCaps.nerdFont)
161
+ return text;
162
+ // Fast path: pure-ASCII strings (the overwhelming majority of cells) contain no emoji.
163
+ let ascii = true;
164
+ for (let i = 0; i < text.length; i++) {
165
+ if (text.charCodeAt(i) > 0x7f) {
166
+ ascii = false;
167
+ break;
168
+ }
169
+ }
170
+ if (ascii)
171
+ return text;
172
+ return text.replace(getEmojiPattern(), (match) => {
173
+ // Map keys may or may not carry a trailing variation selector; try both.
174
+ const name = EMOJI_MAP[match] ?? EMOJI_MAP[match.replace(/[\uFE00-\uFE0F]$/, '')];
175
+ return name ? getIcon(name, cachedCaps) : match;
176
+ });
177
+ }
178
+ /**
179
+ * Initializes the icon tier from terminal detection.
180
+ *
181
+ * - `init({ nerdFont })` forces the tier explicitly (always wins).
182
+ * - `init({ profile })` derives it from a pre-detected TerminalProfile
183
+ * (render() passes the per-screen profile here).
184
+ * - `init()` runs env detection itself via `identifyTerminal()`.
185
+ *
186
+ * 'yes' / 'assumed-yes' policies map to Nerd Font glyphs; everything else
187
+ * falls back to the ASCII tier. Until init() is called the module defaults
188
+ * to Nerd Font glyphs (back-compat for direct icon() usage).
189
+ */
190
+ export async function init(options) {
191
+ if (options?.nerdFont !== undefined) {
192
+ cachedCaps.nerdFont = options.nerdFont;
193
+ return cachedCaps;
194
+ }
195
+ const profile = options?.profile ?? identifyTerminal();
196
+ cachedCaps.nerdFont =
197
+ profile.nerdFont === 'yes' || profile.nerdFont === 'assumed-yes';
198
+ cachedCaps.glyphProtocol = profile.app === 'ghostty';
199
+ return cachedCaps;
200
+ }
201
+ // --- Runtime icon registry (tier 2) ---
202
+ // Consulted after the curated ICON_MAP. The icons-full subpath bulk-loads
203
+ // every Nerd Fonts glyph here; apps can also register their own icons.
204
+ const registryNf = new Map();
205
+ const registryAscii = new Map();
206
+ /** ASCII-tier stand-in for registered icons without an explicit fallback. */
207
+ const REGISTRY_ASCII_FALLBACK = '*';
208
+ function stripNfPrefix(name) {
209
+ return name.startsWith('nf-') ? name.slice(3) : name;
210
+ }
211
+ /**
212
+ * Registers a runtime icon. Accepts a bare Nerd Font glyph, or a full
213
+ * definition with an ASCII fallback for `init({ nerdFont: false })` tiers
214
+ * (bare glyphs fall back to '*' in the ASCII tier).
215
+ */
216
+ export function register(name, glyphOrDef) {
217
+ if (typeof glyphOrDef === 'string') {
218
+ registryNf.set(name, glyphOrDef);
219
+ }
220
+ else {
221
+ registryNf.set(name, glyphOrDef.nf);
222
+ registryAscii.set(name, glyphOrDef.ascii);
223
+ }
224
+ }
225
+ /** Bulk-registers name -> glyph pairs (used by the icons-full subpath). */
226
+ export function registerAll(glyphs) {
227
+ for (const name in glyphs) {
228
+ registryNf.set(name, glyphs[name]);
229
+ }
230
+ }
231
+ // --- Unknown-name diagnostics ---
232
+ // Misses are buffered in a Set and drained through the shared diagnostics
233
+ // exit flush (src/diagnostics.ts), so warnings never tear an active frame
234
+ // mid-render and every dev hint arrives in one block on process exit.
235
+ const missedNames = new Set();
236
+ let flusherRegistered = false;
237
+ function recordMiss(name) {
238
+ if (hintsSuppressed())
239
+ return;
240
+ missedNames.add(name);
241
+ if (!flusherRegistered) {
242
+ flusherRegistered = true;
243
+ registerHintFlusher(drainIconHintLines);
244
+ }
245
+ }
246
+ function* iconNameCandidates() {
247
+ yield* Object.keys(ICON_MAP);
248
+ yield* registryNf.keys();
249
+ }
250
+ function nearestIconName(name) {
251
+ return nearestMatch(stripNfPrefix(name), iconNameCandidates());
252
+ }
253
+ /** Drains buffered misses into hint lines (called by the exit flush). */
254
+ function drainIconHintLines() {
255
+ if (missedNames.size === 0)
256
+ return [];
257
+ const lines = [];
258
+ for (const name of missedNames) {
259
+ const hint = nearestIconName(name);
260
+ lines.push(`unknown icon '${name}' rendered as ''` +
261
+ `${hint ? ` (did you mean '${hint}'?)` : ''}`);
262
+ }
263
+ if (registryNf.size === 0) {
264
+ lines.push("tip: import '@zakmandhro/bunti/icons-full' to enable all ~10.7k Nerd Font icons by name");
265
+ }
266
+ missedNames.clear();
267
+ return lines;
268
+ }
269
+ /** @internal Test hook: unresolved names buffered so far. */
270
+ export function __iconMisses() {
271
+ return [...missedNames];
272
+ }
273
+ /**
274
+ * Resolves an icon name. Resolution order:
275
+ * 1. Curated ICON_MAP (short names, keeps ASCII fallbacks + aliases).
276
+ * 2. Runtime registry (register()/registerAll(), e.g. the icons-full
277
+ * pack). A leading 'nf-' is stripped: 'nf-fa-rocket' === 'fa-rocket'.
278
+ * 3. '' — the miss is buffered and reported once on process exit.
279
+ */
280
+ export function getIcon(name, caps) {
281
+ const def = ICON_MAP[name];
282
+ if (def)
283
+ return caps.nerdFont ? def.nf : def.ascii;
284
+ const key = registryNf.has(name) ? name : stripNfPrefix(name);
285
+ const nf = registryNf.get(key);
286
+ if (nf !== undefined) {
287
+ if (caps.nerdFont)
288
+ return nf;
289
+ return registryAscii.get(key) ?? REGISTRY_ASCII_FALLBACK;
290
+ }
291
+ recordMiss(name);
292
+ return '';
293
+ }
294
+ /**
295
+ * Resolves an icon name to a glyph on the active tier (Nerd Font glyph,
296
+ * or ASCII fallback on plain terminals). Unknown names render as '' and
297
+ * are reported once on process exit with a nearest-name hint.
298
+ * @example text(`${icon('rocket')} Launch`);
299
+ */
300
+ export function icon(name) {
301
+ return getIcon(name, cachedCaps);
302
+ }
303
+ /** Returns the Nerd Font glyph for a name regardless of the active tier. */
304
+ export function nerd(name) {
305
+ return (ICON_MAP[name]?.nf ??
306
+ registryNf.get(name) ??
307
+ registryNf.get(stripNfPrefix(name)) ??
308
+ '');
309
+ }
310
+ /** Picks the given Nerd Font char on the NF tier, else the fallback. */
311
+ export function nerdIcon(nfChar, fallback) {
312
+ return cachedCaps.nerdFont ? nfChar : fallback;
313
+ }
314
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ import * as colors from './colors';
2
+ import * as detect from './detect';
3
+ import * as dsl from './dsl';
4
+ import * as geometry from './geometry';
5
+ import * as icons from './icons';
6
+ import * as input from './input';
7
+ import * as layout from './layout';
8
+ import * as state from './state';
9
+ import * as theme from './theme';
10
+ export type { ColorValue, Gradient } from './colors';
11
+ export { ansi256ToRGB, bg, contrastText, createGradient, fade, fg, hexToRGB, isThemeColor, PALETTE, relativeLuminance, resolveColor, resolveColorToRGB, rgb, rgbTo16, rgbTo256, rgbToHex, } from './colors';
12
+ export type { IconName } from './data/nf-names';
13
+ export type { ColorTier, NerdFontPolicy, TerminalApp, TerminalCapabilities, TerminalProfile, } from './detect';
14
+ export { colorTier, detectCapabilities, detectColorTier, identifyTerminal, setColorTier, } from './detect';
15
+ export type { BuntiContext, DSLBoxOptions, LayerOptions, TypewriterOptions, TypewriterState, } from './dsl';
16
+ export { KEYS, render } from './dsl';
17
+ export { clamp01, easeInCubic, easeInOutCubic, easeInOutQuad, easeInOutQuart, easeInQuad, easeInQuart, easeOutBack, easeOutBounce, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, lerp, lerpRect, linear, } from './easing';
18
+ export type { PlacedRectInput, PlacedRectOptions, Rect, RectInput, SplitOptions, } from './geometry';
19
+ export { innerRect, resolvePlacedRect, resolveRect, splitRect, } from './geometry';
20
+ export type { BuntiIconName, CuratedIconName, IconDefinition, } from './icons';
21
+ export { EMOJI_MAP, ICON_MAP, icon, init, nerd, nerdIcon, register, registerAll, replaceEmojis, } from './icons';
22
+ export type { HeldKeyOptions, InputToken, InputTokenizerOptions, KeyEvent, TerminalResponse, TerminalResponseKind, } from './input';
23
+ export { createKeyEvent, HeldKeyTracker, InputTokenizer } from './input';
24
+ export type { BorderStyle, ListOptions, StyleOptions, TableOptions, } from './layout';
25
+ export { badge, blit, box, createStyle, dimRect, getWindow, gradient, joinHorizontal, joinVertical, list, rect, setCell, table, viewport, wallpaper, } from './layout';
26
+ export { applyInputToState, drainFrameInput, flush, loop, renderFrame, restoreTerminal, updatePointerShape, } from './render';
27
+ export type { Cell, RGB, ScreenOptions, ScreenState } from './state';
28
+ export { ANSI, clearBackBuffer, createScreenState, resizeScreen, } from './state';
29
+ export type { Theme, ThemeColor, ThemeColorInput, ThemeInput, ThemeMode, ThemeToken, } from './theme';
30
+ export { createTheme, darkTheme, isTheme, lightTheme, resolveTheme, THEME_TOKENS, themeColor, } from './theme';
31
+ export { charWidth, indentBlock, stripAnsi, truncate, visibleWidth, } from './utils';
32
+ export type { BuntiColor, ColorFormatter } from './vendor/colors';
33
+ /**
34
+ * Namespaced API surface for `bunti.render(...)` style usage — every
35
+ * named export gathered onto one object.
36
+ * @example import { bunti } from '@zakmandhro/bunti'; await bunti.render(draw, { keyboard: true });
37
+ */
38
+ export declare const bunti: {
39
+ themeColor(input: theme.ThemeColorInput): theme.ThemeColor;
40
+ isTheme(value: unknown): value is theme.Theme;
41
+ createTheme(input?: theme.ThemeInput): theme.Theme;
42
+ resolveTheme(input: theme.Theme | theme.ThemeInput, base?: theme.Theme): theme.Theme;
43
+ THEME_TOKENS: readonly ["background", "surface", "surfaceRaised", "foreground", "muted", "primary", "onPrimary", "accent", "border", "focus", "selection", "success", "warning", "danger", "info"];
44
+ darkTheme: theme.Theme;
45
+ lightTheme: theme.Theme;
46
+ resolveRect(parent: geometry.Rect, input: geometry.RectInput): geometry.Rect;
47
+ resolvePlacedRect(parent: geometry.Rect, input: geometry.PlacedRectInput, options?: geometry.PlacedRectOptions): geometry.Rect;
48
+ innerRect(rect: geometry.Rect, inset: number | {
49
+ top?: number;
50
+ right?: number;
51
+ bottom?: number;
52
+ left?: number;
53
+ }): geometry.Rect;
54
+ splitRect(rect: geometry.Rect, options: geometry.SplitOptions): geometry.Rect[];
55
+ clamp01(value: number): number;
56
+ linear(value: number): number;
57
+ easeInQuad(value: number): number;
58
+ easeOutQuad(value: number): number;
59
+ easeInOutQuad(value: number): number;
60
+ easeInCubic(value: number): number;
61
+ easeOutCubic(value: number): number;
62
+ easeInOutCubic(value: number): number;
63
+ easeInQuart(value: number): number;
64
+ easeOutQuart(value: number): number;
65
+ easeInOutQuart(value: number): number;
66
+ easeOutExpo(value: number): number;
67
+ easeOutElastic(value: number): number;
68
+ easeOutBounce(value: number): number;
69
+ easeOutBack(value: number): number;
70
+ lerp(a: number, b: number, t: number): number;
71
+ lerpRect(a: geometry.Rect, b: geometry.Rect, t: number): geometry.Rect;
72
+ createScreenContext: typeof dsl.createScreenContext;
73
+ render: typeof dsl.render;
74
+ KEYS: {
75
+ UP: string;
76
+ DOWN: string;
77
+ RIGHT: string;
78
+ LEFT: string;
79
+ ENTER: string;
80
+ ESCAPE: string;
81
+ TAB: string;
82
+ BACKSPACE: string;
83
+ SPACE: string;
84
+ HOME: string;
85
+ END: string;
86
+ DELETE: string;
87
+ PAGE_UP: string;
88
+ PAGE_DOWN: string;
89
+ INSERT: string;
90
+ CLICK: string;
91
+ WHEEL_UP: string;
92
+ WHEEL_DOWN: string;
93
+ };
94
+ createScreenState(options?: state.ScreenOptions): state.ScreenState;
95
+ resizeScreen(state: state.ScreenState): void;
96
+ clearBackBuffer(state: state.ScreenState): void;
97
+ ANSI: {
98
+ reset: string;
99
+ clear: string;
100
+ home: string;
101
+ alternateBuffer: string;
102
+ mainBuffer: string;
103
+ hideCursor: string;
104
+ showCursor: string;
105
+ mouseEnable: string;
106
+ mouseDisable: string;
107
+ focusEnable: string;
108
+ focusDisable: string;
109
+ syncStart: string;
110
+ syncEnd: string;
111
+ };
112
+ isThemeColor(value: unknown): value is theme.ThemeColor;
113
+ hexToRGB(hex: string, base?: state.RGB): state.RGB;
114
+ rgbToHex(rgb: state.RGB): string;
115
+ ansi256ToRGB(code: number): state.RGB;
116
+ rgbTo256(rgb: state.RGB): number;
117
+ rgbTo16(rgb: state.RGB): number;
118
+ resolveColor(color: colors.PaletteColor | colors.ColorValue): string | number | undefined;
119
+ createGradient(arg1: colors.ColorValue[] | colors.ColorValue, arg2?: colors.ColorValue | number, arg3?: number): state.RGB[];
120
+ resolveColorToRGB(color: unknown): state.RGB;
121
+ relativeLuminance(color: colors.ColorValue): number;
122
+ contrastText(bgColor: colors.ColorValue): state.RGB;
123
+ adjustBrightness(color: any, amount: number): state.RGB;
124
+ fade(from: colors.ColorValue, to: colors.ColorValue, progress: number): state.RGB;
125
+ darken(color: any, amount?: number): (text: string) => string;
126
+ lighten(color: any, amount?: number): (text: string) => string;
127
+ rgb(r: number, g: number, b: number): {
128
+ r: number;
129
+ g: number;
130
+ b: number;
131
+ };
132
+ fg(color: any, text: string): string;
133
+ bg(color: any, text: string): string;
134
+ THEME_COLOR: typeof colors.THEME_COLOR;
135
+ PALETTE: {
136
+ readonly slate: "235";
137
+ readonly ash: "240";
138
+ readonly gray: "244";
139
+ readonly silver: "247";
140
+ readonly white: "255";
141
+ readonly black: "0";
142
+ readonly midnight: "17";
143
+ readonly ocean: "24";
144
+ readonly sky: "33";
145
+ readonly 'bunti-blue': "38";
146
+ readonly 'deep-navy': "17";
147
+ readonly nebula: "61";
148
+ readonly plasma: "165";
149
+ readonly success: "40";
150
+ readonly warning: "214";
151
+ readonly error: "196";
152
+ readonly info: "39";
153
+ readonly gold: "220";
154
+ readonly rose: "211";
155
+ readonly mint: "121";
156
+ };
157
+ stripAnsi(str: string): string;
158
+ visibleWidth(str: string): number;
159
+ charWidth(char: string): number;
160
+ truncate(str: string, width: number, tail?: string): string;
161
+ wrapText(str: string, width: number): string[];
162
+ indentBlock(content: string, columns: number): string;
163
+ restoreTerminal(state: state.ScreenState): void;
164
+ syncScreenSize(state: state.ScreenState): boolean;
165
+ isResizeSettled(state: state.ScreenState, now?: number): boolean;
166
+ clearTerminalForResize(state: state.ScreenState): void;
167
+ updatePointerShape(state: state.ScreenState): void;
168
+ renderFrame(state: state.ScreenState): string;
169
+ flush(state: state.ScreenState): void;
170
+ loop(state: state.ScreenState, renderCallback: (s: state.ScreenState) => void): Promise<void>;
171
+ applyInputToState(state: state.ScreenState, data: unknown, stop?: () => void): void;
172
+ drainFrameInput(state: state.ScreenState): void;
173
+ setCell(state: state.ScreenState, x: number, y: number, cell: Partial<state.Cell>): void;
174
+ dimRect(state: state.ScreenState, area: geometry.Rect, amount: number): void;
175
+ rect(state: state.ScreenState, x: number, y: number, w: number, h: number, style: layout.RectOptions): void;
176
+ blit(state: state.ScreenState, startX: number, startY: number, content: string, style?: Partial<state.Cell>): void;
177
+ resolveSize(unit: layout.SizeUnit | undefined, parentDim: number, contentDim: number): number;
178
+ box(content: string, options?: layout.StyleOptions, parentW?: number, parentH?: number): string;
179
+ joinHorizontal(...blocks: string[]): string;
180
+ joinVertical(...blocks: string[]): string;
181
+ createStyle(defaults: layout.StyleOptions): (content: string, overrides?: layout.StyleOptions) => string;
182
+ badge(text: string, colorFn?: (s: string) => string): string;
183
+ table(rows: string[][], options?: layout.TableOptions, parentW?: number): string;
184
+ getWindow<T>(items: T[], selectedIndex: number, maxVisible: number): {
185
+ visible: T[];
186
+ start: number;
187
+ hasMoreAbove: boolean;
188
+ hasMoreBelow: boolean;
189
+ };
190
+ list(items: string[], options?: layout.ListOptions, parentW?: number): string;
191
+ viewport(content: string, width: number, height: number, scrollY?: number): string;
192
+ wallpaper(state: any, options: {
193
+ bg: any;
194
+ }): void;
195
+ gradient(state: any, colors: any[], options?: {
196
+ direction?: "vertical" | "horizontal";
197
+ }): void;
198
+ createKeyEvent(key: string, raw?: string, mods?: Partial<Pick<input.KeyEvent, "ctrl" | "alt" | "shift" | "kind">>): input.KeyEvent;
199
+ InputTokenizer: typeof input.InputTokenizer;
200
+ HeldKeyTracker: typeof input.HeldKeyTracker;
201
+ replaceEmojis(text: string): string;
202
+ init(options?: {
203
+ nerdFont?: boolean;
204
+ profile?: detect.TerminalProfile;
205
+ }): Promise<detect.TerminalCapabilities>;
206
+ register(name: string, glyphOrDef: string | icons.IconDefinition): void;
207
+ registerAll(glyphs: Record<string, string>): void;
208
+ __iconMisses(): string[];
209
+ getIcon(name: icons.BuntiIconName, caps: detect.TerminalCapabilities): string;
210
+ icon(name: icons.BuntiIconName): string;
211
+ nerd(name: icons.BuntiIconName): string;
212
+ nerdIcon(nfChar: string, fallback: string): string;
213
+ ICON_MAP: Record<string, icons.IconDefinition>;
214
+ EMOJI_MAP: Record<string, string>;
215
+ identifyTerminal(env?: {
216
+ [x: string]: string | undefined;
217
+ }): detect.TerminalProfile;
218
+ detectColorTier(env?: {
219
+ [x: string]: string | undefined;
220
+ }): detect.ColorTier;
221
+ colorTier(): detect.ColorTier;
222
+ setColorTier(tier?: detect.ColorTier): void;
223
+ detectCapabilities(env?: {
224
+ [x: string]: string | undefined;
225
+ }): Promise<detect.TerminalCapabilities>;
226
+ };
227
+ export default bunti;
228
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,46 @@
1
+ import * as colors from './colors';
2
+ import * as detect from './detect';
3
+ import * as dsl from './dsl';
4
+ import * as easing from './easing';
5
+ import * as geometry from './geometry';
6
+ import * as icons from './icons';
7
+ import * as input from './input';
8
+ import * as layout from './layout';
9
+ import * as render from './render';
10
+ import * as state from './state';
11
+ import * as theme from './theme';
12
+ import * as utils from './utils';
13
+ export { ansi256ToRGB, bg, contrastText, createGradient, fade, fg, hexToRGB, isThemeColor, PALETTE, relativeLuminance, resolveColor, resolveColorToRGB, rgb, rgbTo16, rgbTo256, rgbToHex, } from './colors';
14
+ // Functional API Individual Exports
15
+ export { colorTier, detectCapabilities, detectColorTier, identifyTerminal, setColorTier, } from './detect';
16
+ export { KEYS, render } from './dsl';
17
+ export { clamp01, easeInCubic, easeInOutCubic, easeInOutQuad, easeInOutQuart, easeInQuad, easeInQuart, easeOutBack, easeOutBounce, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, lerp, lerpRect, linear, } from './easing';
18
+ export { innerRect, resolvePlacedRect, resolveRect, splitRect, } from './geometry';
19
+ export { EMOJI_MAP, ICON_MAP, icon, init, nerd, nerdIcon, register, registerAll, replaceEmojis, } from './icons';
20
+ export { createKeyEvent, HeldKeyTracker, InputTokenizer } from './input';
21
+ export { badge, blit, box, createStyle, dimRect, getWindow, gradient, joinHorizontal, joinVertical, list, rect, setCell, table, viewport, wallpaper, } from './layout';
22
+ export { applyInputToState, drainFrameInput, flush, loop, renderFrame, restoreTerminal, updatePointerShape, } from './render';
23
+ export { ANSI, clearBackBuffer, createScreenState, resizeScreen, } from './state';
24
+ export { createTheme, darkTheme, isTheme, lightTheme, resolveTheme, THEME_TOKENS, themeColor, } from './theme';
25
+ export { charWidth, indentBlock, stripAnsi, truncate, visibleWidth, } from './utils';
26
+ /**
27
+ * Namespaced API surface for `bunti.render(...)` style usage — every
28
+ * named export gathered onto one object.
29
+ * @example import { bunti } from '@zakmandhro/bunti'; await bunti.render(draw, { keyboard: true });
30
+ */
31
+ export const bunti = {
32
+ ...detect,
33
+ ...icons,
34
+ ...input,
35
+ ...layout,
36
+ ...render,
37
+ ...utils,
38
+ ...colors,
39
+ ...state,
40
+ ...dsl,
41
+ ...easing,
42
+ ...geometry,
43
+ ...theme,
44
+ };
45
+ export default bunti;
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}