@oh-my-pi/pi-tui 12.17.0 → 12.17.2

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 (2) hide show
  1. package/CHANGELOG.md +522 -0
  2. package/package.json +53 -50
package/CHANGELOG.md ADDED
@@ -0,0 +1,522 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ## [12.12.2] - 2026-02-19
6
+
7
+ ### Fixed
8
+
9
+ - Fixed non-forced full re-renders clearing terminal scrollback history during streaming updates by limiting scrollback clears to explicit forced re-renders.
10
+
11
+ ## [12.12.0] - 2026-02-19
12
+
13
+ ### Added
14
+
15
+ - Added PageUp/PageDown navigation for editor content and autocomplete selection to jump across long wrapped inputs faster.
16
+
17
+ ### Fixed
18
+
19
+ - Fixed history-entry navigation anchoring (Up opens at top, Down opens at bottom) and preserved editor scroll context when max-height changes to keep cursor movement visible in long prompts ([#99](https://github.com/can1357/oh-my-pi/issues/99)).
20
+
21
+ ## [12.11.3] - 2026-02-19
22
+
23
+ ### Fixed
24
+
25
+ - Fixed differential deleted-line rendering when content shrinks to empty so stale first-row content is cleared reliably.
26
+ - Fixed incremental stale-row clearing to use erase-below semantics in synchronized output, reducing leftover-line artifacts after shrink operations.
27
+
28
+ ## [12.9.0] - 2026-02-17
29
+ ### Added
30
+
31
+ - Exported `getTerminalId()` function to get a stable identifier for the current terminal, with support for TTY device paths and terminal multiplexers
32
+ - Exported `getTtyPath()` function to resolve the TTY device path for stdin via POSIX `ttyname(3)`
33
+
34
+ ## [12.5.0] - 2026-02-15
35
+ ### Added
36
+
37
+ - Added `cursorOverride` and `cursorOverrideWidth` properties to customize the end-of-text cursor glyph with ANSI-styled strings
38
+ - Added `getUseTerminalCursor()` method to query the terminal cursor mode setting
39
+
40
+ ## [11.10.0] - 2026-02-10
41
+ ### Added
42
+
43
+ - Added `hint` property to autocomplete items to display dim ghost text after cursor when item is selected
44
+ - Added `getInlineHint()` method to `SlashCommand` interface for providing inline hint text based on argument state
45
+ - Added `getInlineHint()` method to `AutocompleteProvider` interface for displaying dim ghost text after cursor
46
+ - Added `hintStyle` theme option to customize styling of inline hint/ghost text in editor
47
+
48
+ ### Changed
49
+
50
+ - Updated editor to render inline hint text as dim ghost text after cursor when autocomplete suggestions are active or provider supplies hints
51
+
52
+ ## [11.8.0] - 2026-02-10
53
+ ### Added
54
+
55
+ - Added Alt+Y keybinding to cycle through kill ring entries (yank-pop)
56
+ - Added undo support to Input component with Ctrl+Z keybinding
57
+ - Added kill ring support to Input component for Emacs-style kill/yank operations
58
+ - Added yank (Ctrl+Y) and yank-pop (Alt+Y) support to Input component
59
+
60
+ ### Changed
61
+
62
+ - Changed Editor kill ring implementation to use dedicated KillRing class for better state management
63
+ - Changed Editor undo stack to use generic UndoStack class with automatic state cloning
64
+ - Changed kill/yank behavior to properly accumulate consecutive kill operations
65
+ - Changed Input component deletion methods to record killed text in kill ring
66
+ - Changed undo coalescing in Input component to group consecutive word typing into single undo units
67
+
68
+ ## [11.4.1] - 2026-02-06
69
+ ### Fixed
70
+
71
+ - Fixed terminal scrolling when displaying overlays after rendering large content, preventing hundreds of blank lines from being output
72
+
73
+ ## [11.3.0] - 2026-02-06
74
+
75
+ ### Breaking Changes
76
+
77
+ - Removed `getCursorPosition()` method from Component interface and implementations, eliminating hardware cursor positioning support
78
+
79
+ ### Added
80
+
81
+ - Added sticky column behavior for vertical cursor movement, preserving target column when navigating through lines of varying lengths
82
+ - Added `drainInput()` method to Terminal interface to prevent Kitty key release events from leaking to parent shell over slow SSH connections
83
+ - Added `setClearOnShrink()` method to control whether full re-render occurs when content shrinks below working area
84
+ - Added support for hidden paths (e.g., `.pi`, `.github`) in autocomplete while excluding `.git` directories
85
+
86
+ ### Changed
87
+
88
+ - Changed default value of `PI_HARDWARE_CURSOR` environment variable from implicit true to explicit `"1"` for clarity
89
+ - Changed default value of `PI_CLEAR_ON_SHRINK` environment variable from implicit false to explicit `"0"` for clarity
90
+ - Changed TUI to clear screen on startup to prevent shell prompts and status messages from bleeding into the first rendered frame
91
+ - Refactored full-render logic into reusable helper function to reduce code duplication across multiple render paths
92
+ - Changed autocomplete to include hidden paths but filter out `.git` and its contents
93
+ - Changed Input component to properly handle surrogate pairs in Unicode text, preventing cursor display corruption with emoji and multi-byte characters
94
+ - Changed Editor to use `setCursorCol()` for all cursor column updates, enabling sticky column tracking
95
+ - Changed Editor's vertical navigation to implement sticky column logic via `moveToVisualLine()` and `computeVerticalMoveColumn()`
96
+ - Changed Editor's Enter key handling to extract submit logic into `submitValue()` method for better code organization
97
+ - Changed SettingsList to truncate long lines to viewport width, preventing text overflow
98
+ - Changed Terminal's `stop()` method to drain stdin before restoring raw mode, fixing race condition where Ctrl+D could close parent shell over SSH
99
+ - Changed TUI rendering to add `clearOnShrink` option (controlled by `PI_CLEAR_ON_SHRINK` env var) for reducing redraws on slower terminals
100
+ - Changed TUI rendering to detect when extra lines exceed viewport height and trigger full re-render instead of incremental updates
101
+
102
+ ### Fixed
103
+
104
+ - Fixed rendering of extra blank lines when content shrinks by improving cursor positioning logic during line deletion
105
+ - Fixed cursor display position in Input component when scrolling horizontally through long text
106
+ - Fixed Kitty keyboard protocol disable sequence to use safe write method, preventing potential output buffering issues
107
+ - Fixed unnecessary full-screen redraws when changes occur in out-of-view components (e.g., spinners), reducing terminal scroll events and improving performance on slower connections
108
+ - Fixed scrollback clearing behavior to only clear screen instead of scrollback when resizing or shrinking content, preventing loss of terminal history
109
+ - Fixed `.git` directory appearing in autocomplete suggestions when filtering by prefix
110
+ - Fixed cursor position corruption in Input component when displaying text with emoji and combining characters
111
+ - Fixed `.git` directory appearing in autocomplete suggestions
112
+ - Fixed race condition where Kitty key release events could leak to parent shell after TUI exit over slow SSH connections
113
+ - Fixed Editor's word movement (Ctrl+Left/Right) to properly reset sticky column for subsequent vertical navigation
114
+ - Fixed Editor's undo operation to reset sticky column state when restoring cursor position
115
+ - Fixed Editor's right arrow key at end of last line to set sticky column for subsequent up/down navigation
116
+ - Fixed TUI rendering to correctly detect viewport changes and avoid false full-redraws after content shrinks
117
+ - Fixed Kitty protocol key parsing to prefer codepoint over base layout for Latin letters and symbols, fixing keyboard layout issues (e.g., Dvorak)
118
+
119
+ ## [11.0.0] - 2026-02-05
120
+
121
+ ### Added
122
+
123
+ - Introduced `terminal-capabilities.ts` module consolidating terminal detection and image protocol support
124
+ - Added `TerminalInfo` class with methods for detecting image lines and formatting notifications
125
+ - Added `NotifyProtocol` enum supporting Bell, OSC 99, and OSC 9 notification protocols
126
+ - Added `isNotificationSuppressed()` function to check `OMP_NOTIFICATIONS` environment variable
127
+ - Added `TERMINAL` constant providing detected terminal capabilities at runtime
128
+
129
+ ### Changed
130
+
131
+ - Changed notification suppression environment variable from `OMP_NOTIFICATIONS` to `PI_NOTIFICATIONS`
132
+ - Changed TUI write log environment variable from `OMP_TUI_WRITE_LOG` to `PI_TUI_WRITE_LOG`
133
+ - Changed hardware cursor environment variable from `OMP_HARDWARE_CURSOR` to `PI_HARDWARE_CURSOR`
134
+ - Updated environment variable access to use `getEnv()` utility function from `@oh-my-pi/pi-utils` for consistent handling
135
+ - Renamed `TERMINAL_INFO` export to `TERMINAL` for clearer API semantics
136
+ - Reorganized terminal image exports from `terminal-image` to `terminal-capabilities` module
137
+ - Updated all internal references to use `TERMINAL` instead of `TERMINAL_INFO`
138
+
139
+ ### Removed
140
+
141
+ - Removed `terminal-image` module exports from public API (functionality migrated to `terminal-capabilities`)
142
+
143
+ ## [10.5.0] - 2026-02-04
144
+
145
+ ### Fixed
146
+
147
+ - Treated inline image lines with cursor-move prefixes as image sequences to prevent width overflow crashes
148
+
149
+ ## [9.8.0] - 2026-02-01
150
+
151
+ ### Changed
152
+
153
+ - Moved `wrapTextWithAnsi` export to `@oh-my-pi/pi-natives` package
154
+
155
+ ### Fixed
156
+
157
+ - Improved Kitty terminal key sequence parsing to correctly handle text field codepoints in CSI-u sequences
158
+ - Fixed handling of private use Unicode codepoints (U+E000 to U+F8FF) in Kitty key decoding to prevent invalid character interpretation
159
+
160
+ ## [9.7.0] - 2026-02-01
161
+ ### Breaking Changes
162
+
163
+ - Removed `Key` helper object from public API; use string literals like `"ctrl+c"` instead of `Key.ctrl("c")`
164
+ - Removed `KeyEventType` export from public API
165
+
166
+ ### Changed
167
+
168
+ - Migrated key parsing and matching logic to native implementation for improved performance
169
+ - Simplified `isKeyRelease()` and `isKeyRepeat()` to use regex pattern matching instead of string inclusion checks
170
+
171
+ ## [9.6.2] - 2026-02-01
172
+ ### Changed
173
+
174
+ - Renamed `EllipsisKind` enum to `Ellipsis` for clearer API naming
175
+ - Changed hardcoded ellipsis character from theme-configurable to literal "…" in editor truncation
176
+ - Refactored `visibleWidth` function to use caching wrapper around new `visibleWidthRaw` implementation for improved performance
177
+
178
+ ### Removed
179
+
180
+ - Removed `truncateToWidth`, `sliceWithWidth`, and `extractSegments` functions from public API (now re-exported directly from @oh-my-pi/pi-natives)
181
+ - Removed `ellipsis` property from `SymbolTheme` interface
182
+ - Removed `extractAnsiCode` function from public API
183
+
184
+ ## [9.6.1] - 2026-02-01
185
+ ### Changed
186
+
187
+ - Improved performance of key ID parsing with optimized cache lookup strategy
188
+ - Simplified `visibleWidth` calculation to use consistent Bun.stringWidth approach for all string lengths
189
+
190
+ ### Removed
191
+
192
+ - Removed `visibleWidth` benchmark file in favor of Kitty sequence benchmarking
193
+
194
+ ## [9.5.0] - 2026-02-01
195
+ ### Changed
196
+
197
+ - Improved fuzzy file search performance by using native implementation instead of spawning external process
198
+ - Replaced external `fd` binary with native fuzzy path search for `@`-prefixed autocomplete
199
+
200
+ ## [9.4.0] - 2026-01-31
201
+ ### Added
202
+
203
+ - Exported `padding` utility function for creating space-padded strings efficiently
204
+
205
+ ### Changed
206
+
207
+ - Optimized padding operations across all components to use pre-allocated space buffer for better performance
208
+
209
+ ## [9.2.2] - 2026-01-31
210
+
211
+ ### Added
212
+ - Added setAutocompleteMaxVisible() configuration (3-20 items)
213
+ - Added image detection to terminal capabilities (containsImage method)
214
+ - Added stdin monitoring to detect stalled input events and log warnings
215
+
216
+ ### Changed
217
+ - Improved blockquote rendering with text wrapping in Markdown component
218
+ - Restructured terminal capabilities from interface-based to class-based model
219
+ - Improved table column width calculation with word-aware wrapping
220
+ - Refactored text utilities to use native WASM implementations for strings >256 chars with JS fast path
221
+
222
+ ### Fixed
223
+ - Simplified terminal write error handling to mark terminal as dead on any write failure
224
+ - Fixed multi-line strings in renderOutputBlock causing width overflow
225
+ - Fixed slash command autocomplete applying stale completion when typing quickly
226
+
227
+ ### Removed
228
+ - Removed TUI layout engine exports from public API (BoxNode, ColumnNode, LayoutNode, etc.)
229
+
230
+ ## [8.12.7] - 2026-01-29
231
+
232
+ ### Fixed
233
+ - Fixed slash command autocomplete applying stale completion when typing quickly
234
+
235
+ ## [8.4.1] - 2026-01-25
236
+
237
+ ### Added
238
+ - Added fuzzy match function for autocomplete suggestions
239
+ ## [8.4.0] - 2026-01-25
240
+
241
+ ### Changed
242
+ - Added Ctrl+Backspace as a delete-word-backward keybinding and improved modified backspace matching
243
+
244
+ ### Fixed
245
+ - Terminal gracefully handles write failures by marking dead instead of exiting the process
246
+ - Reserved cursor space for zero padding and corrected end-of-line cursor rendering to prevent wrap glitches
247
+ - Corrected editor end-of-line cursor rendering assertion to use includes() instead of endsWith()
248
+ ## [8.2.0] - 2026-01-24
249
+
250
+ ### Added
251
+ - Added mermaid diagram rendering engine (renderMermaidToPng) with mmdc CLI integration
252
+ - Added terminal graphics encoding (iTerm2/Kitty) for mermaid diagrams with automatic width scaling
253
+ - Added mermaid block extraction and deduplication utilities (extractMermaidBlocks)
254
+
255
+ ### Changed
256
+ - Updated TypeScript configuration for better publish-time configuration handling with tsconfig.publish.json
257
+ - Migrated file system operations from synchronous to asynchronous APIs in autocomplete provider for non-blocking I/O
258
+ - Migrated node module imports from named to namespace imports across all packages for consistency with project guidelines
259
+
260
+ ### Fixed
261
+ - Fixed crash when terminal becomes unavailable (EIO errors) by exiting gracefully instead of throwing
262
+ - Fixed potential errors during emergency terminal restore when terminal is already dead
263
+ - Fixed autocomplete race condition by tracking request ID to prevent stale suggestion results
264
+ ## [6.8.3] - 2026-01-21
265
+ ### Added
266
+
267
+ - Added undo support in the editor via `Ctrl+-`
268
+ - Added `Alt+Delete` as a delete-word-forward shortcut
269
+ - Added configurable code block indentation for Markdown rendering
270
+ - Added undo support in the editor via `Ctrl+-`.
271
+ - Added configurable code block indentation for Markdown rendering.
272
+ - Added `Alt+Delete` as a delete-word-forward shortcut.
273
+
274
+ ### Changed
275
+
276
+ - Improved fuzzy matching to handle alphanumeric swaps
277
+ - Normalized keybinding definitions to lowercase internally
278
+ - Improved fuzzy matching to handle alphanumeric swaps.
279
+ - Normalized keybinding definitions to lowercase internally.
280
+
281
+ ### Fixed
282
+
283
+ - Added legacy terminal support for `Ctrl+` symbol key combinations
284
+ - Added legacy terminal support for `Ctrl+` symbol key combinations.
285
+
286
+ ## [6.8.1] - 2026-01-20
287
+
288
+ ### Fixed
289
+
290
+ - Fixed viewport tracking after partial renders to prevent autocomplete list artifacts
291
+
292
+ ## [5.6.7] - 2026-01-18
293
+
294
+ ### Added
295
+
296
+ - Added configurable editor padding via `editorPaddingX` theme option
297
+ - Added `setMaxHeight()` method to limit editor height with scrolling
298
+ - Added Emacs-style kill ring for text deletion operations
299
+ - Added `Alt+D` keybinding to delete words forward
300
+ - Added `Ctrl+Y` keybinding to yank from kill ring
301
+ - Added `waitForRender()` method to await pending renders
302
+ - Added Focusable interface and hardware cursor marker support for IME positioning
303
+ - Added support for shifted symbol keys in keybindings
304
+
305
+ ### Changed
306
+
307
+ - Updated tab bar rendering to wrap text across multiple lines when content exceeds available width
308
+ - Expanded Kitty keyboard protocol coverage for non-Latin layouts and legacy Alt sequences
309
+ - Improved cursor positioning with safer bounds checking
310
+ - Updated editor layout to respect configurable padding
311
+ - Refactored scrolling logic for better viewport management
312
+
313
+ ### Fixed
314
+
315
+ - Fixed key detection for shifted symbol characters
316
+ - Fixed backspace handling with additional codepoint support
317
+ - Fixed Alt+letter key combinations for better recognition
318
+
319
+ ## [5.3.1] - 2026-01-15
320
+ ### Fixed
321
+
322
+ - Fixed rendering issues on Windows by preventing re-entrant renders
323
+
324
+ ## [5.1.0] - 2026-01-14
325
+
326
+ ### Added
327
+
328
+ - Added `pageUp` and `pageDown` key support with `selectPageUp`/`selectPageDown` editor actions
329
+ - Added `isPageUp()` and `isPageDown()` helper functions
330
+ - Added `SizeValue` type for CSS-like overlay sizing (absolute or percentage strings like `"50%"`)
331
+ - Added `OverlayHandle` interface with `hide()`, `setHidden()`, `isHidden()` methods for overlay visibility control
332
+ - Added `visible` callback to `OverlayOptions` for dynamic visibility based on terminal dimensions
333
+ - Added `pad` parameter to `truncateToWidth()` for padding result with spaces to exact width
334
+
335
+ ### Changed
336
+
337
+ - Changed `OverlayOptions` to use `SizeValue` type for `width`, `maxHeight`, `row`, and `col` properties
338
+ - Changed `showOverlay()` to return `OverlayHandle` for controlling overlay visibility
339
+ - Removed `widthPercent`, `maxHeightPercent`, `rowPercent`, `colPercent` from `OverlayOptions` (use percentage strings instead)
340
+
341
+ ### Fixed
342
+
343
+ - Fixed numbered list items showing "1." for all items when code blocks break list continuity
344
+ - Fixed width overflow protection in overlay compositing to prevent TUI crashes
345
+
346
+ ## [4.7.0] - 2026-01-12
347
+
348
+ ### Fixed
349
+ - Remove trailing space padding from Text, Markdown, and TruncatedText components when no background color is set (fixes copied text including unwanted whitespace)
350
+
351
+ ## [4.6.0] - 2026-01-12
352
+
353
+ ### Added
354
+ - Add fuzzy matching module (`fuzzyMatch`, `fuzzyFilter`) for command autocomplete
355
+ - Add `getExpandedText()` to editor for expanding paste markers
356
+ - Add backslash+enter newline fallback for terminals without Kitty protocol
357
+
358
+ ### Fixed
359
+ - Remove Kitty protocol query timeout that caused shift+enter delays
360
+ - Add bracketed paste check to prevent false key release/repeat detection
361
+ - Rendering optimizations: only re-render changed lines
362
+ - Refactor input component to use keybindings manager
363
+
364
+ ## [4.4.4] - 2026-01-11
365
+ ### Fixed
366
+
367
+ - Fixed Ctrl+Enter sequences to insert new lines in the editor
368
+
369
+ ## [4.2.1] - 2026-01-11
370
+ ### Changed
371
+
372
+ - Improved file autocomplete to show directory listing when typing `@` with no query, and fall back to prefix matching when fuzzy search returns no results
373
+
374
+ ### Fixed
375
+
376
+ - Fixed editor redraw glitch when canceling autocomplete suggestions
377
+ - Fixed `fd` tool detection to automatically find `fd` or `fdfind` in PATH when not explicitly configured
378
+
379
+ ## [4.1.0] - 2026-01-10
380
+ ### Added
381
+
382
+ - Added persistent prompt history storage support via `setHistoryStorage()` method, allowing history to be saved and restored across sessions
383
+
384
+ ## [4.0.0] - 2026-01-10
385
+ ### Added
386
+
387
+ - `EditorComponent` interface for custom editor implementations
388
+ - `StdinBuffer` class to split batched stdin into individual sequences
389
+ - Overlay compositing via `TUI.showOverlay()` and `TUI.hideOverlay()` for `ctx.ui.custom()` with `{ overlay: true }`
390
+ - Kitty keyboard protocol flag 2 support for key release events (`isKeyRelease()`, `isKeyRepeat()`, `KeyEventType`)
391
+ - `setKittyProtocolActive()`, `isKittyProtocolActive()` for Kitty protocol state management
392
+ - `kittyProtocolActive` property on Terminal interface to query Kitty protocol state
393
+ - `Component.wantsKeyRelease` property to opt-in to key release events (default false)
394
+ - Input component `onEscape` callback for handling escape key presses
395
+
396
+ ### Changed
397
+
398
+ - Terminal startup now queries Kitty protocol support before enabling event reporting
399
+ - Default editor `newLine` binding now uses `shift+enter` only
400
+
401
+ ### Fixed
402
+
403
+ - Key presses no longer dropped when batched with other events over SSH
404
+ - TUI now filters out key release events by default, preventing double-processing of keys
405
+ - `matchesKey()` now correctly matches Kitty protocol sequences for unmodified letter keys
406
+ - Crash when pasting text with trailing whitespace exceeding terminal width through Markdown rendering
407
+
408
+ ## [3.32.0] - 2026-01-08
409
+
410
+ ### Fixed
411
+
412
+ - Fixed text wrapping allowing long whitespace tokens to exceed line width
413
+
414
+ ## [3.20.0] - 2026-01-06
415
+ ### Added
416
+
417
+ - Added `isCapsLock` helper function for detecting Caps Lock key press via Kitty protocol
418
+ - Added `isCtrlY` helper function for detecting Ctrl+Y keyboard input
419
+ - Added configurable editor keybindings with typed key identifiers and action matching
420
+ - Added word-wrapped editor rendering for long lines
421
+
422
+ ### Changed
423
+
424
+ - Settings list descriptions now wrap to the available width instead of truncating
425
+
426
+ ### Fixed
427
+
428
+ - Fixed Shift+Enter detection in legacy terminals that send ESC+CR sequence
429
+
430
+ ## [3.15.1] - 2026-01-05
431
+
432
+ ### Fixed
433
+
434
+ - Fixed editor cursor blinking by allowing terminal cursor positioning when enabled.
435
+
436
+ ## [3.15.0] - 2026-01-05
437
+
438
+ ### Added
439
+
440
+ - Added `inputCursor` symbol for customizing the text input cursor character
441
+ - Added `symbols` property to `EditorTheme`, `MarkdownTheme`, and `SelectListTheme` interfaces for component-level symbol customization
442
+ - Added `SymbolTheme` interface for customizing UI symbols including cursors, borders, spinners, and box-drawing characters
443
+ - Added support for custom spinner frames in the Loader component
444
+
445
+ ## [3.9.1337] - 2026-01-04
446
+ ### Added
447
+
448
+ - Added `setTopBorder()` method to Editor component for displaying custom status content in the top border
449
+ - Added `getWidth()` method to TUI class for retrieving terminal width
450
+ - Added rounded corner box-drawing characters to Editor component borders
451
+
452
+ ### Changed
453
+
454
+ - Changed Editor component to use proper box borders with vertical side borders instead of horizontal-only borders
455
+ - Changed cursor style from block to thin blinking bar (▏) at end of line
456
+
457
+ ## [1.500.0] - 2026-01-03
458
+ ### Added
459
+
460
+ - Added `getText()` method to Text component for retrieving current text content
461
+
462
+ ## [1.337.1] - 2026-01-02
463
+
464
+ ### Added
465
+
466
+ - TabBar component for horizontal tab navigation
467
+ - Emergency terminal restore to prevent corrupted state on crashes
468
+ - Overhauled UI with welcome screen and powerline footer
469
+ - Theme-configurable HTML export colors
470
+ - `ctx.ui.theme` getter for styling status text with theme colors
471
+
472
+ ### Changed
473
+
474
+ - Forked to @oh-my-pi scope with unified versioning across all packages
475
+
476
+ ### Fixed
477
+
478
+ - Strip OSC 8 hyperlink sequences in `visibleWidth()`
479
+ - Crash on Unicode format characters in `visibleWidth()`
480
+ - Markdown code block syntax highlighting
481
+
482
+ ## [1.337.0] - 2026-01-02
483
+
484
+ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mono](https://github.com/badlogic/pi-mono).
485
+
486
+ ## [0.31.1] - 2026-01-02
487
+
488
+ ### Fixed
489
+
490
+ - `visibleWidth()` now strips OSC 8 hyperlink sequences, fixing text wrapping for clickable links ([#396](https://github.com/badlogic/pi-mono/pull/396) by [@Cursivez](https://github.com/Cursivez))
491
+
492
+ ## [0.31.0] - 2026-01-02
493
+
494
+ ### Added
495
+
496
+ - `isShiftCtrlO()` key detection function for Shift+Ctrl+O (Kitty protocol)
497
+ - `isShiftCtrlD()` key detection function for Shift+Ctrl+D (Kitty protocol)
498
+ - `TUI.onDebug` callback for global debug key handling (Shift+Ctrl+D)
499
+ - `wrapTextWithAnsi()` utility now exported (wraps text to width, preserving ANSI codes)
500
+
501
+ ### Changed
502
+
503
+ - README.md completely rewritten with accurate component documentation, theme interfaces, and examples
504
+ - `visibleWidth()` reimplemented with grapheme-based width calculation, 10x faster on Bun and ~15% faster on Node ([#369](https://github.com/badlogic/pi-mono/pull/369) by [@nathyong](https://github.com/nathyong))
505
+
506
+ ### Fixed
507
+
508
+ - Markdown component now renders HTML tags as plain text instead of silently dropping them ([#359](https://github.com/badlogic/pi-mono/issues/359))
509
+ - Crash in `visibleWidth()` and grapheme iteration when encountering undefined code points ([#372](https://github.com/badlogic/pi-mono/pull/372) by [@HACKE-RC](https://github.com/HACKE-RC))
510
+ - ZWJ emoji sequences (rainbow flag, family, etc.) now render with correct width instead of being split into multiple characters ([#369](https://github.com/badlogic/pi-mono/pull/369) by [@nathyong](https://github.com/nathyong))
511
+
512
+ ## [0.29.0] - 2025-12-25
513
+
514
+ ### Added
515
+
516
+ - **Auto-space before pasted file paths**: When pasting a file path (starting with `/`, `~`, or `.`) and the cursor is after a word character, a space is automatically prepended for better readability. Useful when dragging screenshots from macOS. ([#307](https://github.com/badlogic/pi-mono/pull/307) by [@mitsuhiko](https://github.com/mitsuhiko))
517
+ - **Word navigation for Input component**: Added Ctrl+Left/Right and Alt+Left/Right support for word-by-word cursor movement. ([#306](https://github.com/badlogic/pi-mono/pull/306) by [@kim0](https://github.com/kim0))
518
+ - **Full Unicode input**: Input component now accepts Unicode characters beyond ASCII. ([#306](https://github.com/badlogic/pi-mono/pull/306) by [@kim0](https://github.com/kim0))
519
+
520
+ ### Fixed
521
+
522
+ - **Readline-style Ctrl+W**: Now skips trailing whitespace before deleting the preceding word, matching standard readline behavior. ([#306](https://github.com/badlogic/pi-mono/pull/306) by [@kim0](https://github.com/kim0))
package/package.json CHANGED
@@ -1,32 +1,22 @@
1
1
  {
2
+ "type": "module",
2
3
  "name": "@oh-my-pi/pi-tui",
3
- "version": "12.17.0",
4
+ "version": "12.17.2",
4
5
  "description": "Terminal User Interface library with differential rendering for efficient text-based applications",
5
- "type": "module",
6
- "main": "./src/index.ts",
7
- "types": "./src/index.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./src/index.ts",
11
- "import": "./src/index.ts"
12
- },
13
- "./components/*": {
14
- "types": "./src/components/*.ts",
15
- "import": "./src/components/*.ts"
16
- },
17
- "./*": {
18
- "types": "./src/*.ts",
19
- "import": "./src/*.ts"
20
- }
6
+ "homepage": "https://github.com/can1357/oh-my-pi",
7
+ "author": "Can Bölük",
8
+ "contributors": [
9
+ "Mario Zechner"
10
+ ],
11
+ "license": "MIT",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/can1357/oh-my-pi.git",
15
+ "directory": "packages/tui"
21
16
  },
22
- "scripts": {
23
- "check": "tsgo -p tsconfig.json",
24
- "test": "bun test test/*.test.ts"
17
+ "bugs": {
18
+ "url": "https://github.com/can1357/oh-my-pi/issues"
25
19
  },
26
- "files": [
27
- "src/**/*",
28
- "README.md"
29
- ],
30
20
  "keywords": [
31
21
  "tui",
32
22
  "terminal",
@@ -36,31 +26,44 @@
36
26
  "typescript",
37
27
  "cli"
38
28
  ],
39
- "author": "Can Bölük",
40
- "contributors": ["Mario Zechner"],
41
- "license": "MIT",
42
- "repository": {
43
- "type": "git",
44
- "url": "git+https://github.com/can1357/oh-my-pi.git",
45
- "directory": "packages/tui"
29
+ "main": "./src/index.ts",
30
+ "types": "./src/index.ts",
31
+ "scripts": {
32
+ "check": "tsgo -p tsconfig.json",
33
+ "test": "bun test test/*.test.ts"
46
34
  },
47
- "homepage": "https://github.com/can1357/oh-my-pi",
48
- "bugs": {
49
- "url": "https://github.com/can1357/oh-my-pi/issues"
50
- },
51
- "engines": {
52
- "bun": ">=1.3.7"
53
- },
54
- "dependencies": {
55
- "@oh-my-pi/pi-natives": "12.17.0",
56
- "@oh-my-pi/pi-utils": "12.17.0",
57
- "@types/mime-types": "^3.0.1",
58
- "chalk": "^5.6.2",
59
- "marked": "^17.0.2",
60
- "mime-types": "^3.0.2"
61
- },
62
- "devDependencies": {
63
- "@xterm/headless": "^6.0.0",
64
- "@xterm/xterm": "^6.0.0"
65
- }
35
+ "dependencies": {
36
+ "@oh-my-pi/pi-natives": "12.17.2",
37
+ "@oh-my-pi/pi-utils": "12.17.2",
38
+ "@types/mime-types": "^3.0.1",
39
+ "chalk": "^5.6.2",
40
+ "marked": "^17.0.2",
41
+ "mime-types": "^3.0.2"
42
+ },
43
+ "devDependencies": {
44
+ "@xterm/headless": "^6.0.0",
45
+ "@xterm/xterm": "^6.0.0"
46
+ },
47
+ "engines": {
48
+ "bun": ">=1.3.7"
49
+ },
50
+ "files": [
51
+ "src",
52
+ "README.md",
53
+ "CHANGELOG.md"
54
+ ],
55
+ "exports": {
56
+ ".": {
57
+ "types": "./src/index.ts",
58
+ "import": "./src/index.ts"
59
+ },
60
+ "./*": {
61
+ "types": "./src/*.ts",
62
+ "import": "./src/*.ts"
63
+ },
64
+ "./components/*": {
65
+ "types": "./src/components/*.ts",
66
+ "import": "./src/components/*.ts"
67
+ }
68
+ }
66
69
  }