feat: export measureText and kittyModifiers to match Ink public API (#13)

This commit is contained in:
Yunfei He
2026-05-27 23:12:20 +08:00
committed by GitHub
parent 48beac5673
commit 0e7d7753f9
4 changed files with 24 additions and 14 deletions
+7 -1
View File
@@ -32,4 +32,10 @@ export {
} from "./composables/useBoxMetrics.ts";
export { renderScreenReaderOutput, type ScreenReaderOptions } from "./paint/screen-reader.ts";
export type { DevState, DevErrorInfo } from "./hmr.ts";
export { kittyFlags, type KittyKeyboardOptions, type KittyFlagName } from "./io/kitty-keyboard.ts";
export {
kittyFlags,
kittyModifiers,
type KittyKeyboardOptions,
type KittyFlagName,
} from "./io/kitty-keyboard.ts";
export { measureText } from "./host/text-measure.ts";
+11
View File
@@ -12,6 +12,17 @@ export const kittyFlags = {
export type KittyFlagName = keyof typeof kittyFlags;
export const kittyModifiers = {
shift: 1,
alt: 2,
ctrl: 4,
super: 8,
hyper: 16,
meta: 32,
capsLock: 64,
numLock: 128,
} as const;
export type KittyKeyboardOptions = {
mode?: "auto" | "enabled" | "disabled";
flags?: KittyFlagName[];
+2 -13
View File
@@ -1,6 +1,8 @@
// Ported from Ink's parse-keypress.ts
// @see https://github.com/vadimdemedes/ink
import { kittyModifiers } from "./kitty-keyboard.ts";
const textDecoder = new TextDecoder();
const metaKeyCodeRe = /^(?:\x1b)([a-zA-Z0-9])$/;
@@ -136,19 +138,6 @@ export interface Keypress {
ignore?: boolean;
}
// Kitty keyboard protocol modifier bits.
// The actual modifier value in CSI sequences is (modifiers - 1).
const kittyModifiers = {
shift: 1,
alt: 2,
ctrl: 4,
super: 8,
hyper: 16,
meta: 32,
capsLock: 64,
numLock: 128,
} as const;
// Kitty keyboard protocol: CSI codepoint ; modifiers [: eventType] [; text-as-codepoints] u
const kittyKeyRe = /^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/;