@ny4n/tui 0.0.0-stage → 1.0.1

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 (205) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +948 -2
  3. package/dist/alt-screen-search.d.ts +46 -0
  4. package/dist/alt-screen-search.d.ts.map +1 -0
  5. package/dist/alt-screen-search.js +282 -0
  6. package/dist/alt-screen-search.js.map +1 -0
  7. package/dist/autocomplete.d.ts +57 -0
  8. package/dist/autocomplete.d.ts.map +1 -0
  9. package/dist/autocomplete.js +693 -0
  10. package/dist/autocomplete.js.map +1 -0
  11. package/dist/colors.d.ts +73 -0
  12. package/dist/colors.d.ts.map +1 -0
  13. package/dist/colors.js +273 -0
  14. package/dist/colors.js.map +1 -0
  15. package/dist/components/alt-screen-flash.d.ts +13 -0
  16. package/dist/components/alt-screen-flash.d.ts.map +1 -0
  17. package/dist/components/alt-screen-flash.js +37 -0
  18. package/dist/components/alt-screen-flash.js.map +1 -0
  19. package/dist/components/box.d.ts +25 -0
  20. package/dist/components/box.d.ts.map +1 -0
  21. package/dist/components/box.js +138 -0
  22. package/dist/components/box.js.map +1 -0
  23. package/dist/components/cancellable-loader.d.ts +22 -0
  24. package/dist/components/cancellable-loader.d.ts.map +1 -0
  25. package/dist/components/cancellable-loader.js +35 -0
  26. package/dist/components/cancellable-loader.js.map +1 -0
  27. package/dist/components/editor.d.ts +260 -0
  28. package/dist/components/editor.d.ts.map +1 -0
  29. package/dist/components/editor.js +2044 -0
  30. package/dist/components/editor.js.map +1 -0
  31. package/dist/components/h-stack.d.ts +7 -0
  32. package/dist/components/h-stack.d.ts.map +1 -0
  33. package/dist/components/h-stack.js +43 -0
  34. package/dist/components/h-stack.js.map +1 -0
  35. package/dist/components/image.d.ts +40 -0
  36. package/dist/components/image.d.ts.map +1 -0
  37. package/dist/components/image.js +123 -0
  38. package/dist/components/image.js.map +1 -0
  39. package/dist/components/input.d.ts +48 -0
  40. package/dist/components/input.d.ts.map +1 -0
  41. package/dist/components/input.js +417 -0
  42. package/dist/components/input.js.map +1 -0
  43. package/dist/components/loader.d.ts +33 -0
  44. package/dist/components/loader.d.ts.map +1 -0
  45. package/dist/components/loader.js +76 -0
  46. package/dist/components/loader.js.map +1 -0
  47. package/dist/components/markdown.d.ts +104 -0
  48. package/dist/components/markdown.d.ts.map +1 -0
  49. package/dist/components/markdown.js +821 -0
  50. package/dist/components/markdown.js.map +1 -0
  51. package/dist/components/mouse-region.d.ts +12 -0
  52. package/dist/components/mouse-region.d.ts.map +1 -0
  53. package/dist/components/mouse-region.js +21 -0
  54. package/dist/components/mouse-region.js.map +1 -0
  55. package/dist/components/scroll-view.d.ts +59 -0
  56. package/dist/components/scroll-view.d.ts.map +1 -0
  57. package/dist/components/scroll-view.js +195 -0
  58. package/dist/components/scroll-view.js.map +1 -0
  59. package/dist/components/select-list.d.ts +53 -0
  60. package/dist/components/select-list.d.ts.map +1 -0
  61. package/dist/components/select-list.js +206 -0
  62. package/dist/components/select-list.js.map +1 -0
  63. package/dist/components/settings-list.d.ts +60 -0
  64. package/dist/components/settings-list.d.ts.map +1 -0
  65. package/dist/components/settings-list.js +252 -0
  66. package/dist/components/settings-list.js.map +1 -0
  67. package/dist/components/spacer.d.ts +12 -0
  68. package/dist/components/spacer.d.ts.map +1 -0
  69. package/dist/components/spacer.js +23 -0
  70. package/dist/components/spacer.js.map +1 -0
  71. package/dist/components/stack.d.ts +32 -0
  72. package/dist/components/stack.d.ts.map +1 -0
  73. package/dist/components/stack.js +111 -0
  74. package/dist/components/stack.js.map +1 -0
  75. package/dist/components/text.d.ts +20 -0
  76. package/dist/components/text.d.ts.map +1 -0
  77. package/dist/components/text.js +95 -0
  78. package/dist/components/text.js.map +1 -0
  79. package/dist/components/truncated-text.d.ts +13 -0
  80. package/dist/components/truncated-text.d.ts.map +1 -0
  81. package/dist/components/truncated-text.js +51 -0
  82. package/dist/components/truncated-text.js.map +1 -0
  83. package/dist/components/v-stack.d.ts +8 -0
  84. package/dist/components/v-stack.d.ts.map +1 -0
  85. package/dist/components/v-stack.js +26 -0
  86. package/dist/components/v-stack.js.map +1 -0
  87. package/dist/editor-component.d.ts +39 -0
  88. package/dist/editor-component.d.ts.map +1 -0
  89. package/dist/editor-component.js +2 -0
  90. package/dist/editor-component.js.map +1 -0
  91. package/dist/fuzzy.d.ts +16 -0
  92. package/dist/fuzzy.d.ts.map +1 -0
  93. package/dist/fuzzy.js +111 -0
  94. package/dist/fuzzy.js.map +1 -0
  95. package/dist/index.d.ts +37 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +50 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/keybindings.d.ts +273 -0
  100. package/dist/keybindings.d.ts.map +1 -0
  101. package/dist/keybindings.js +233 -0
  102. package/dist/keybindings.js.map +1 -0
  103. package/dist/keys.d.ts +184 -0
  104. package/dist/keys.d.ts.map +1 -0
  105. package/dist/keys.js +1206 -0
  106. package/dist/keys.js.map +1 -0
  107. package/dist/kill-ring.d.ts +28 -0
  108. package/dist/kill-ring.d.ts.map +1 -0
  109. package/dist/kill-ring.js +44 -0
  110. package/dist/kill-ring.js.map +1 -0
  111. package/dist/latex.d.ts +10 -0
  112. package/dist/latex.d.ts.map +1 -0
  113. package/dist/latex.js +1378 -0
  114. package/dist/latex.js.map +1 -0
  115. package/dist/layout-node.d.ts +40 -0
  116. package/dist/layout-node.d.ts.map +1 -0
  117. package/dist/layout-node.js +6 -0
  118. package/dist/layout-node.js.map +1 -0
  119. package/dist/layout.d.ts +42 -0
  120. package/dist/layout.d.ts.map +1 -0
  121. package/dist/layout.js +344 -0
  122. package/dist/layout.js.map +1 -0
  123. package/dist/native-modifiers.d.ts +4 -0
  124. package/dist/native-modifiers.d.ts.map +1 -0
  125. package/dist/native-modifiers.js +13 -0
  126. package/dist/native-modifiers.js.map +1 -0
  127. package/dist/native-module-path.d.ts +7 -0
  128. package/dist/native-module-path.d.ts.map +1 -0
  129. package/dist/native-module-path.js +19 -0
  130. package/dist/native-module-path.js.map +1 -0
  131. package/dist/native-platform.d.ts +20 -0
  132. package/dist/native-platform.d.ts.map +1 -0
  133. package/dist/native-platform.js +42 -0
  134. package/dist/native-platform.js.map +1 -0
  135. package/dist/oklab.d.ts +43 -0
  136. package/dist/oklab.d.ts.map +1 -0
  137. package/dist/oklab.js +210 -0
  138. package/dist/oklab.js.map +1 -0
  139. package/dist/program-status.d.ts +23 -0
  140. package/dist/program-status.d.ts.map +1 -0
  141. package/dist/program-status.js +43 -0
  142. package/dist/program-status.js.map +1 -0
  143. package/dist/stdin-buffer.d.ts +56 -0
  144. package/dist/stdin-buffer.d.ts.map +1 -0
  145. package/dist/stdin-buffer.js +366 -0
  146. package/dist/stdin-buffer.js.map +1 -0
  147. package/dist/terminal-colors.d.ts +27 -0
  148. package/dist/terminal-colors.d.ts.map +1 -0
  149. package/dist/terminal-colors.js +64 -0
  150. package/dist/terminal-colors.js.map +1 -0
  151. package/dist/terminal-image.d.ts +123 -0
  152. package/dist/terminal-image.d.ts.map +1 -0
  153. package/dist/terminal-image.js +603 -0
  154. package/dist/terminal-image.js.map +1 -0
  155. package/dist/terminal.d.ts +143 -0
  156. package/dist/terminal.d.ts.map +1 -0
  157. package/dist/terminal.js +493 -0
  158. package/dist/terminal.js.map +1 -0
  159. package/dist/tui-alt-screen.d.ts +168 -0
  160. package/dist/tui-alt-screen.d.ts.map +1 -0
  161. package/dist/tui-alt-screen.js +1552 -0
  162. package/dist/tui-alt-screen.js.map +1 -0
  163. package/dist/tui-main-screen.d.ts +39 -0
  164. package/dist/tui-main-screen.d.ts.map +1 -0
  165. package/dist/tui-main-screen.js +595 -0
  166. package/dist/tui-main-screen.js.map +1 -0
  167. package/dist/tui.d.ts +398 -0
  168. package/dist/tui.d.ts.map +1 -0
  169. package/dist/tui.js +1096 -0
  170. package/dist/tui.js.map +1 -0
  171. package/dist/undo-stack.d.ts +17 -0
  172. package/dist/undo-stack.d.ts.map +1 -0
  173. package/dist/undo-stack.js +25 -0
  174. package/dist/undo-stack.js.map +1 -0
  175. package/dist/utils.d.ts +107 -0
  176. package/dist/utils.d.ts.map +1 -0
  177. package/dist/utils.js +1263 -0
  178. package/dist/utils.js.map +1 -0
  179. package/dist/wheel-scroll.d.ts +23 -0
  180. package/dist/wheel-scroll.d.ts.map +1 -0
  181. package/dist/wheel-scroll.js +73 -0
  182. package/dist/wheel-scroll.js.map +1 -0
  183. package/dist/word-navigation.d.ts +25 -0
  184. package/dist/word-navigation.d.ts.map +1 -0
  185. package/dist/word-navigation.js +96 -0
  186. package/dist/word-navigation.js.map +1 -0
  187. package/native/clipboard.h +208 -0
  188. package/native/darwin/README.md +22 -0
  189. package/native/darwin/build.sh +69 -0
  190. package/native/darwin/prebuilds/darwin-arm64/darwin-platform.node +0 -0
  191. package/native/darwin/prebuilds/darwin-x64/darwin-platform.node +0 -0
  192. package/native/darwin/src/darwin-platform.m +132 -0
  193. package/native/linux/README.md +23 -0
  194. package/native/linux/build.sh +65 -0
  195. package/native/linux/prebuilds/linux-arm64/linux-platform-x11.node +0 -0
  196. package/native/linux/prebuilds/linux-x64/linux-platform-x11.node +0 -0
  197. package/native/linux/src/clipboard-worker.h +70 -0
  198. package/native/linux/src/linux-platform-x11.c +274 -0
  199. package/native/napi.h +91 -0
  200. package/native/win32/README.md +31 -0
  201. package/native/win32/build.mjs +232 -0
  202. package/native/win32/prebuilds/win32-arm64/win32-platform.node +0 -0
  203. package/native/win32/prebuilds/win32-x64/win32-platform.node +0 -0
  204. package/native/win32/src/win32-platform.c +241 -0
  205. package/package.json +61 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../src/fuzzy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fuzzy matching utilities.\n * Matches if all query characters appear in order (not necessarily consecutive).\n * Lower score = better match.\n */\n\nexport interface FuzzyMatch {\n\tmatches: boolean;\n\tscore: number;\n}\n\nexport function fuzzyMatch(query: string, text: string): FuzzyMatch {\n\tconst queryLower = query.toLowerCase();\n\tconst textLower = text.toLowerCase();\n\n\tconst matchQuery = (normalizedQuery: string): FuzzyMatch => {\n\t\tif (normalizedQuery.length === 0) {\n\t\t\treturn { matches: true, score: 0 };\n\t\t}\n\n\t\tif (normalizedQuery.length > textLower.length) {\n\t\t\treturn { matches: false, score: 0 };\n\t\t}\n\n\t\tlet queryIndex = 0;\n\t\tlet score = 0;\n\t\tlet lastMatchIndex = -1;\n\t\tlet consecutiveMatches = 0;\n\n\t\twhile (queryIndex < normalizedQuery.length) {\n\t\t\tconst i = textLower.indexOf(normalizedQuery[queryIndex]!, lastMatchIndex + 1);\n\t\t\tif (i === -1) break;\n\n\t\t\tconst isWordBoundary = i === 0 || /[\\s\\-_./:]/.test(textLower[i - 1]!);\n\n\t\t\t// Reward consecutive matches\n\t\t\tif (lastMatchIndex === i - 1) {\n\t\t\t\tconsecutiveMatches++;\n\t\t\t\tscore -= consecutiveMatches * 5;\n\t\t\t} else {\n\t\t\t\tconsecutiveMatches = 0;\n\t\t\t\t// Penalize gaps\n\t\t\t\tif (lastMatchIndex >= 0) {\n\t\t\t\t\tscore += (i - lastMatchIndex - 1) * 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Reward word boundary matches\n\t\t\tif (isWordBoundary) {\n\t\t\t\tscore -= 10;\n\t\t\t}\n\n\t\t\t// Slight penalty for later matches\n\t\t\tscore += i * 0.1;\n\n\t\t\tlastMatchIndex = i;\n\t\t\tqueryIndex++;\n\t\t}\n\n\t\tif (queryIndex < normalizedQuery.length) {\n\t\t\treturn { matches: false, score: 0 };\n\t\t}\n\n\t\tif (normalizedQuery === textLower) {\n\t\t\tscore -= 100;\n\t\t}\n\n\t\treturn { matches: true, score };\n\t};\n\n\tconst primaryMatch = matchQuery(queryLower);\n\tif (primaryMatch.matches) {\n\t\treturn primaryMatch;\n\t}\n\n\tconst alphaNumericMatch = queryLower.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/);\n\tconst numericAlphaMatch = queryLower.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/);\n\tconst swappedQuery = alphaNumericMatch\n\t\t? `${alphaNumericMatch.groups?.digits ?? \"\"}${alphaNumericMatch.groups?.letters ?? \"\"}`\n\t\t: numericAlphaMatch\n\t\t\t? `${numericAlphaMatch.groups?.letters ?? \"\"}${numericAlphaMatch.groups?.digits ?? \"\"}`\n\t\t\t: \"\";\n\n\tif (!swappedQuery) {\n\t\treturn primaryMatch;\n\t}\n\n\tconst swappedMatch = matchQuery(swappedQuery);\n\tif (!swappedMatch.matches) {\n\t\treturn primaryMatch;\n\t}\n\n\treturn { matches: true, score: swappedMatch.score + 5 };\n}\n\n/**\n * Filter and sort items by fuzzy match quality (best matches first).\n * Supports whitespace- and slash-separated tokens: all tokens must match.\n */\nexport function fuzzyFilter<T>(items: T[], query: string, getText: (item: T) => string): T[] {\n\tif (!query.trim()) {\n\t\treturn items;\n\t}\n\n\tconst tokens = query\n\t\t.trim()\n\t\t.split(/[\\s/]+/)\n\t\t.filter((t) => t.length > 0);\n\n\tif (tokens.length === 0) {\n\t\treturn items;\n\t}\n\n\tconst results: { item: T; totalScore: number }[] = [];\n\n\tfor (const item of items) {\n\t\tconst text = getText(item);\n\t\tlet totalScore = 0;\n\t\tlet allMatch = true;\n\n\t\tfor (const token of tokens) {\n\t\t\tconst match = fuzzyMatch(token, text);\n\t\t\tif (match.matches) {\n\t\t\t\ttotalScore += match.score;\n\t\t\t} else {\n\t\t\t\tallMatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (allMatch) {\n\t\t\tresults.push({ item, totalScore });\n\t\t}\n\t}\n\n\tresults.sort((a, b) => a.totalScore - b.totalScore);\n\treturn results.map((r) => r.item);\n}\n"]}
@@ -0,0 +1,37 @@
1
+ export { Marked, type Token, type Tokens } from "marked";
2
+ export { type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, CombinedAutocompleteProvider, type SlashCommand, } from "./autocomplete.ts";
3
+ export { backgroundAnsi, type Color, type ColorMixSpace, colorToHex, colorToOkhsl, colorToOklch, colorToRgb, foregroundAnsi, type IndexedColor, indexedColor, mixColors, type OkhslChannels, type OklchChannels, type OklchColorValue, okhslColor, oklchColor, parseColor, type RgbColorValue, rgbColor, styleText, styleTextWithAnsi, type TerminalColorMode, type TextAttributes, type TextStyle, } from "./colors.ts";
4
+ export { Box } from "./components/box.ts";
5
+ export { CancellableLoader } from "./components/cancellable-loader.ts";
6
+ export { Editor, type EditorOptions, type EditorTheme } from "./components/editor.ts";
7
+ export { HStack } from "./components/h-stack.ts";
8
+ export { Image, type ImageOptions, type ImageTheme, type ImageTranscoder, setImageTranscoder, } from "./components/image.ts";
9
+ export { Input } from "./components/input.ts";
10
+ export { Loader, type LoaderIndicatorOptions } from "./components/loader.ts";
11
+ export { type DefaultTextStyle, Markdown, type MarkdownOptions, type MarkdownTheme } from "./components/markdown.ts";
12
+ export { MouseRegion, type MouseRegionHandler } from "./components/mouse-region.ts";
13
+ export { ScrollView, type ScrollViewOptions, type ScrollViewScrollbar, type ScrollViewScrollToOptions, } from "./components/scroll-view.ts";
14
+ export { type SelectItem, SelectList, type SelectListLayoutOptions, type SelectListTheme, type SelectListTruncatePrimaryContext, } from "./components/select-list.ts";
15
+ export { type SettingItem, SettingsList, type SettingsListTheme } from "./components/settings-list.ts";
16
+ export { Spacer } from "./components/spacer.ts";
17
+ export { Text } from "./components/text.ts";
18
+ export { TruncatedText } from "./components/truncated-text.ts";
19
+ export { type StackChild, type StackEntry, type StackEntryOptions, type StackOptions, VStack, } from "./components/v-stack.ts";
20
+ export type { EditorComponent } from "./editor-component.ts";
21
+ export { type FuzzyMatch, fuzzyFilter, fuzzyMatch } from "./fuzzy.ts";
22
+ export { getKeybindings, type Keybinding, type KeybindingConflict, type KeybindingDefinition, type KeybindingDefinitions, type Keybindings, type KeybindingsConfig, KeybindingsManager, setKeybindings, TUI_KEYBINDINGS, } from "./keybindings.ts";
23
+ export { decodeKittyPrintable, isKeyRelease, isKeyRepeat, isKittyProtocolActive, Key, type KeyEventType, type KeyId, matchesKey, parseKey, setKittyProtocolActive, } from "./keys.ts";
24
+ export { type RenderLatexOptions, renderLatex } from "./latex.ts";
25
+ export { getNativeClipboard, type NativeClipboard } from "./native-platform.ts";
26
+ export { oklabToOkhslLightness } from "./oklab.ts";
27
+ export { formatProgramStatus, type ProgramStatus } from "./program-status.ts";
28
+ export { StdinBuffer, type StdinBufferEventMap, type StdinBufferOptions } from "./stdin-buffer.ts";
29
+ export { isAppleTerminalSession, ProcessTerminal, type Terminal } from "./terminal.ts";
30
+ export { parseTerminalColorSchemeReport, type RgbColor, type TerminalColorScheme, type TerminalColors, } from "./terminal-colors.ts";
31
+ export { allocateImageId, type CellDimensions, calculateImageRows, deleteAllKittyImages, deleteKittyImage, detectCapabilities, encodeITerm2, encodeKitty, getCapabilities, getCellDimensions, getGifDimensions, getImageDimensions, getJpegDimensions, getPngDimensions, getTerminalColorMode, getWebpDimensions, hyperlink, type ImageDimensions, type ImageProtocol, type ImageRenderOptions, imageFallback, renderImage, resetCapabilitiesCache, setCapabilities, setCapabilityOverrides, setCellDimensions, type TerminalCapabilities, } from "./terminal-image.ts";
32
+ export { type Component, Container, CURSOR_MARKER, compositeTuiLine, type Focusable, isFocusable, isViewportTUI, type OverlayAnchor, type OverlayBounds, type OverlayHandle, type OverlayMargin, type OverlayOptions, type OverlayUnfocusOptions, renderFakeCursor, type SizeValue, type TUI, type TuiInputListener, type TuiInputListenerResult, type TuiMode, type TuiMouseButton, type TuiMouseEvent, type TuiMouseEventResult, type TuiMouseEventType, type TuiStopOptions, type ViewportTUI, } from "./tui.ts";
33
+ export { TuiAltScreen, type TuiAltScreenOptions } from "./tui-alt-screen.ts";
34
+ export { TuiMainScreen, type TuiMainScreenRenderState } from "./tui-main-screen.ts";
35
+ export { getOsc8LinkAtColumn, sliceByColumn, stripTerminalSequences, truncateToWidth, visibleWidth, wrapTextWithAnsi, } from "./utils.ts";
36
+ export type { WheelScrollLines } from "./wheel-scroll.ts";
37
+ //# 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,50 @@
1
+ // Core TUI interfaces and classes
2
+ export { Marked } from "marked";
3
+ // Autocomplete support
4
+ export { CombinedAutocompleteProvider, } from "./autocomplete.js";
5
+ // Colors and styling
6
+ export { backgroundAnsi, colorToHex, colorToOkhsl, colorToOklch, colorToRgb, foregroundAnsi, indexedColor, mixColors, okhslColor, oklchColor, parseColor, rgbColor, styleText, styleTextWithAnsi, } from "./colors.js";
7
+ // Components
8
+ export { Box } from "./components/box.js";
9
+ export { CancellableLoader } from "./components/cancellable-loader.js";
10
+ export { Editor } from "./components/editor.js";
11
+ export { HStack } from "./components/h-stack.js";
12
+ export { Image, setImageTranscoder, } from "./components/image.js";
13
+ export { Input } from "./components/input.js";
14
+ export { Loader } from "./components/loader.js";
15
+ export { Markdown } from "./components/markdown.js";
16
+ export { MouseRegion } from "./components/mouse-region.js";
17
+ export { ScrollView, } from "./components/scroll-view.js";
18
+ export { SelectList, } from "./components/select-list.js";
19
+ export { SettingsList } from "./components/settings-list.js";
20
+ export { Spacer } from "./components/spacer.js";
21
+ export { Text } from "./components/text.js";
22
+ export { TruncatedText } from "./components/truncated-text.js";
23
+ export { VStack, } from "./components/v-stack.js";
24
+ // Fuzzy matching
25
+ export { fuzzyFilter, fuzzyMatch } from "./fuzzy.js";
26
+ // Keybindings
27
+ export { getKeybindings, KeybindingsManager, setKeybindings, TUI_KEYBINDINGS, } from "./keybindings.js";
28
+ // Keyboard input handling
29
+ export { decodeKittyPrintable, isKeyRelease, isKeyRepeat, isKittyProtocolActive, Key, matchesKey, parseKey, setKittyProtocolActive, } from "./keys.js";
30
+ // LaTeX rendering
31
+ export { renderLatex } from "./latex.js";
32
+ // Native platform integration
33
+ export { getNativeClipboard } from "./native-platform.js";
34
+ export { oklabToOkhslLightness } from "./oklab.js";
35
+ // Program status reporting (OSC 7501)
36
+ export { formatProgramStatus } from "./program-status.js";
37
+ // Input buffering for batch splitting
38
+ export { StdinBuffer } from "./stdin-buffer.js";
39
+ // Terminal interface and implementations
40
+ export { isAppleTerminalSession, ProcessTerminal } from "./terminal.js";
41
+ // Terminal colors
42
+ export { parseTerminalColorSchemeReport, } from "./terminal-colors.js";
43
+ // Terminal image support
44
+ export { allocateImageId, calculateImageRows, deleteAllKittyImages, deleteKittyImage, detectCapabilities, encodeITerm2, encodeKitty, getCapabilities, getCellDimensions, getGifDimensions, getImageDimensions, getJpegDimensions, getPngDimensions, getTerminalColorMode, getWebpDimensions, hyperlink, imageFallback, renderImage, resetCapabilitiesCache, setCapabilities, setCapabilityOverrides, setCellDimensions, } from "./terminal-image.js";
45
+ export { Container, CURSOR_MARKER, compositeTuiLine, isFocusable, isViewportTUI, renderFakeCursor, } from "./tui.js";
46
+ export { TuiAltScreen } from "./tui-alt-screen.js";
47
+ export { TuiMainScreen } from "./tui-main-screen.js";
48
+ // Utilities
49
+ export { getOsc8LinkAtColumn, sliceByColumn, stripTerminalSequences, truncateToWidth, visibleWidth, wrapTextWithAnsi, } from "./utils.js";
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core TUI interfaces and classes\n\nexport { Marked, type Token, type Tokens } from \"marked\";\n// Autocomplete support\nexport {\n\ttype AutocompleteItem,\n\ttype AutocompleteProvider,\n\ttype AutocompleteSuggestions,\n\tCombinedAutocompleteProvider,\n\ttype SlashCommand,\n} from \"./autocomplete.ts\";\n// Colors and styling\nexport {\n\tbackgroundAnsi,\n\ttype Color,\n\ttype ColorMixSpace,\n\tcolorToHex,\n\tcolorToOkhsl,\n\tcolorToOklch,\n\tcolorToRgb,\n\tforegroundAnsi,\n\ttype IndexedColor,\n\tindexedColor,\n\tmixColors,\n\ttype OkhslChannels,\n\ttype OklchChannels,\n\ttype OklchColorValue,\n\tokhslColor,\n\toklchColor,\n\tparseColor,\n\ttype RgbColorValue,\n\trgbColor,\n\tstyleText,\n\tstyleTextWithAnsi,\n\ttype TerminalColorMode,\n\ttype TextAttributes,\n\ttype TextStyle,\n} from \"./colors.ts\";\n// Components\nexport { Box } from \"./components/box.ts\";\nexport { CancellableLoader } from \"./components/cancellable-loader.ts\";\nexport { Editor, type EditorOptions, type EditorTheme } from \"./components/editor.ts\";\nexport { HStack } from \"./components/h-stack.ts\";\nexport {\n\tImage,\n\ttype ImageOptions,\n\ttype ImageTheme,\n\ttype ImageTranscoder,\n\tsetImageTranscoder,\n} from \"./components/image.ts\";\nexport { Input } from \"./components/input.ts\";\nexport { Loader, type LoaderIndicatorOptions } from \"./components/loader.ts\";\nexport { type DefaultTextStyle, Markdown, type MarkdownOptions, type MarkdownTheme } from \"./components/markdown.ts\";\nexport { MouseRegion, type MouseRegionHandler } from \"./components/mouse-region.ts\";\nexport {\n\tScrollView,\n\ttype ScrollViewOptions,\n\ttype ScrollViewScrollbar,\n\ttype ScrollViewScrollToOptions,\n} from \"./components/scroll-view.ts\";\nexport {\n\ttype SelectItem,\n\tSelectList,\n\ttype SelectListLayoutOptions,\n\ttype SelectListTheme,\n\ttype SelectListTruncatePrimaryContext,\n} from \"./components/select-list.ts\";\nexport { type SettingItem, SettingsList, type SettingsListTheme } from \"./components/settings-list.ts\";\nexport { Spacer } from \"./components/spacer.ts\";\nexport { Text } from \"./components/text.ts\";\nexport { TruncatedText } from \"./components/truncated-text.ts\";\nexport {\n\ttype StackChild,\n\ttype StackEntry,\n\ttype StackEntryOptions,\n\ttype StackOptions,\n\tVStack,\n} from \"./components/v-stack.ts\";\n// Editor component interface (for custom editors)\nexport type { EditorComponent } from \"./editor-component.ts\";\n// Fuzzy matching\nexport { type FuzzyMatch, fuzzyFilter, fuzzyMatch } from \"./fuzzy.ts\";\n// Keybindings\nexport {\n\tgetKeybindings,\n\ttype Keybinding,\n\ttype KeybindingConflict,\n\ttype KeybindingDefinition,\n\ttype KeybindingDefinitions,\n\ttype Keybindings,\n\ttype KeybindingsConfig,\n\tKeybindingsManager,\n\tsetKeybindings,\n\tTUI_KEYBINDINGS,\n} from \"./keybindings.ts\";\n// Keyboard input handling\nexport {\n\tdecodeKittyPrintable,\n\tisKeyRelease,\n\tisKeyRepeat,\n\tisKittyProtocolActive,\n\tKey,\n\ttype KeyEventType,\n\ttype KeyId,\n\tmatchesKey,\n\tparseKey,\n\tsetKittyProtocolActive,\n} from \"./keys.ts\";\n// LaTeX rendering\nexport { type RenderLatexOptions, renderLatex } from \"./latex.ts\";\n// Native platform integration\nexport { getNativeClipboard, type NativeClipboard } from \"./native-platform.ts\";\nexport { oklabToOkhslLightness } from \"./oklab.ts\";\n// Program status reporting (OSC 7501)\nexport { formatProgramStatus, type ProgramStatus } from \"./program-status.ts\";\n// Input buffering for batch splitting\nexport { StdinBuffer, type StdinBufferEventMap, type StdinBufferOptions } from \"./stdin-buffer.ts\";\n// Terminal interface and implementations\nexport { isAppleTerminalSession, ProcessTerminal, type Terminal } from \"./terminal.ts\";\n// Terminal colors\nexport {\n\tparseTerminalColorSchemeReport,\n\ttype RgbColor,\n\ttype TerminalColorScheme,\n\ttype TerminalColors,\n} from \"./terminal-colors.ts\";\n// Terminal image support\nexport {\n\tallocateImageId,\n\ttype CellDimensions,\n\tcalculateImageRows,\n\tdeleteAllKittyImages,\n\tdeleteKittyImage,\n\tdetectCapabilities,\n\tencodeITerm2,\n\tencodeKitty,\n\tgetCapabilities,\n\tgetCellDimensions,\n\tgetGifDimensions,\n\tgetImageDimensions,\n\tgetJpegDimensions,\n\tgetPngDimensions,\n\tgetTerminalColorMode,\n\tgetWebpDimensions,\n\thyperlink,\n\ttype ImageDimensions,\n\ttype ImageProtocol,\n\ttype ImageRenderOptions,\n\timageFallback,\n\trenderImage,\n\tresetCapabilitiesCache,\n\tsetCapabilities,\n\tsetCapabilityOverrides,\n\tsetCellDimensions,\n\ttype TerminalCapabilities,\n} from \"./terminal-image.ts\";\nexport {\n\ttype Component,\n\tContainer,\n\tCURSOR_MARKER,\n\tcompositeTuiLine,\n\ttype Focusable,\n\tisFocusable,\n\tisViewportTUI,\n\ttype OverlayAnchor,\n\ttype OverlayBounds,\n\ttype OverlayHandle,\n\ttype OverlayMargin,\n\ttype OverlayOptions,\n\ttype OverlayUnfocusOptions,\n\trenderFakeCursor,\n\ttype SizeValue,\n\ttype TUI,\n\ttype TuiInputListener,\n\ttype TuiInputListenerResult,\n\ttype TuiMode,\n\ttype TuiMouseButton,\n\ttype TuiMouseEvent,\n\ttype TuiMouseEventResult,\n\ttype TuiMouseEventType,\n\ttype TuiStopOptions,\n\ttype ViewportTUI,\n} from \"./tui.ts\";\nexport { TuiAltScreen, type TuiAltScreenOptions } from \"./tui-alt-screen.ts\";\nexport { TuiMainScreen, type TuiMainScreenRenderState } from \"./tui-main-screen.ts\";\n// Utilities\nexport {\n\tgetOsc8LinkAtColumn,\n\tsliceByColumn,\n\tstripTerminalSequences,\n\ttruncateToWidth,\n\tvisibleWidth,\n\twrapTextWithAnsi,\n} from \"./utils.ts\";\nexport type { WheelScrollLines } from \"./wheel-scroll.ts\";\n"]}
@@ -0,0 +1,273 @@
1
+ import { type KeyId } from "./keys.ts";
2
+ /**
3
+ * Global keybinding registry.
4
+ * Downstream packages can add keybindings via declaration merging.
5
+ */
6
+ export interface Keybindings {
7
+ "tui.editor.cursorUp": true;
8
+ "tui.editor.cursorDown": true;
9
+ "tui.editor.historyPrevious": true;
10
+ "tui.editor.historyNext": true;
11
+ "tui.editor.cursorLeft": true;
12
+ "tui.editor.cursorRight": true;
13
+ "tui.editor.cursorWordLeft": true;
14
+ "tui.editor.cursorWordRight": true;
15
+ "tui.editor.cursorLineStart": true;
16
+ "tui.editor.cursorLineEnd": true;
17
+ "tui.editor.jumpForward": true;
18
+ "tui.editor.jumpBackward": true;
19
+ "tui.editor.pageUp": true;
20
+ "tui.editor.pageDown": true;
21
+ "tui.editor.deleteCharBackward": true;
22
+ "tui.editor.deleteCharForward": true;
23
+ "tui.editor.deleteWordBackward": true;
24
+ "tui.editor.deleteWordForward": true;
25
+ "tui.editor.deleteToLineStart": true;
26
+ "tui.editor.deleteToLineEnd": true;
27
+ "tui.editor.yank": true;
28
+ "tui.editor.yankPop": true;
29
+ "tui.editor.undo": true;
30
+ "tui.input.newLine": true;
31
+ "tui.input.submit": true;
32
+ "tui.input.tab": true;
33
+ "tui.input.copy": true;
34
+ "tui.select.up": true;
35
+ "tui.select.down": true;
36
+ "tui.select.pageUp": true;
37
+ "tui.select.pageDown": true;
38
+ "tui.select.confirm": true;
39
+ "tui.select.cancel": true;
40
+ "tui.altScreen.pageUp": true;
41
+ "tui.altScreen.pageDown": true;
42
+ "tui.altScreen.halfPageUp": true;
43
+ "tui.altScreen.halfPageDown": true;
44
+ "tui.altScreen.lineUp": true;
45
+ "tui.altScreen.lineDown": true;
46
+ "tui.altScreen.previousPrompt": true;
47
+ "tui.altScreen.nextPrompt": true;
48
+ "tui.altScreen.search": true;
49
+ "tui.altScreen.searchNext": true;
50
+ "tui.altScreen.searchPrevious": true;
51
+ "tui.altScreen.searchClose": true;
52
+ "tui.altScreen.top": true;
53
+ "tui.altScreen.bottom": true;
54
+ }
55
+ export type Keybinding = keyof Keybindings;
56
+ export interface KeybindingDefinition {
57
+ defaultKeys: KeyId | KeyId[];
58
+ description?: string;
59
+ }
60
+ export type KeybindingDefinitions = Record<string, KeybindingDefinition>;
61
+ export type KeybindingsConfig = Record<string, KeyId | KeyId[] | undefined>;
62
+ export declare const TUI_KEYBINDINGS: {
63
+ readonly "tui.editor.cursorUp": {
64
+ readonly defaultKeys: "up";
65
+ readonly description: "Move cursor up";
66
+ };
67
+ readonly "tui.editor.cursorDown": {
68
+ readonly defaultKeys: "down";
69
+ readonly description: "Move cursor down";
70
+ };
71
+ readonly "tui.editor.historyPrevious": {
72
+ readonly defaultKeys: [];
73
+ readonly description: "Select previous prompt history entry";
74
+ };
75
+ readonly "tui.editor.historyNext": {
76
+ readonly defaultKeys: [];
77
+ readonly description: "Select next prompt history entry";
78
+ };
79
+ readonly "tui.editor.cursorLeft": {
80
+ readonly defaultKeys: ["left", "ctrl+b"];
81
+ readonly description: "Move cursor left";
82
+ };
83
+ readonly "tui.editor.cursorRight": {
84
+ readonly defaultKeys: ["right", "ctrl+f"];
85
+ readonly description: "Move cursor right";
86
+ };
87
+ readonly "tui.editor.cursorWordLeft": {
88
+ readonly defaultKeys: ["alt+left", "ctrl+left", "alt+b"];
89
+ readonly description: "Move cursor word left";
90
+ };
91
+ readonly "tui.editor.cursorWordRight": {
92
+ readonly defaultKeys: ["alt+right", "ctrl+right", "alt+f"];
93
+ readonly description: "Move cursor word right";
94
+ };
95
+ readonly "tui.editor.cursorLineStart": {
96
+ readonly defaultKeys: ["home", "ctrl+a"];
97
+ readonly description: "Move to line start";
98
+ };
99
+ readonly "tui.editor.cursorLineEnd": {
100
+ readonly defaultKeys: ["end", "ctrl+e"];
101
+ readonly description: "Move to line end";
102
+ };
103
+ readonly "tui.editor.jumpForward": {
104
+ readonly defaultKeys: "ctrl+]";
105
+ readonly description: "Jump forward to character";
106
+ };
107
+ readonly "tui.editor.jumpBackward": {
108
+ readonly defaultKeys: "ctrl+alt+]";
109
+ readonly description: "Jump backward to character";
110
+ };
111
+ readonly "tui.editor.pageUp": {
112
+ readonly defaultKeys: ["pageUp", "ctrl+pageUp"];
113
+ readonly description: "Page up";
114
+ };
115
+ readonly "tui.editor.pageDown": {
116
+ readonly defaultKeys: ["pageDown", "ctrl+pageDown"];
117
+ readonly description: "Page down";
118
+ };
119
+ readonly "tui.editor.deleteCharBackward": {
120
+ readonly defaultKeys: "backspace";
121
+ readonly description: "Delete character backward";
122
+ };
123
+ readonly "tui.editor.deleteCharForward": {
124
+ readonly defaultKeys: ["delete", "ctrl+d"];
125
+ readonly description: "Delete character forward";
126
+ };
127
+ readonly "tui.editor.deleteWordBackward": {
128
+ readonly defaultKeys: ["ctrl+w", "alt+backspace"];
129
+ readonly description: "Delete word backward";
130
+ };
131
+ readonly "tui.editor.deleteWordForward": {
132
+ readonly defaultKeys: ["alt+d", "alt+delete"];
133
+ readonly description: "Delete word forward";
134
+ };
135
+ readonly "tui.editor.deleteToLineStart": {
136
+ readonly defaultKeys: "ctrl+u";
137
+ readonly description: "Delete to line start";
138
+ };
139
+ readonly "tui.editor.deleteToLineEnd": {
140
+ readonly defaultKeys: "ctrl+k";
141
+ readonly description: "Delete to line end";
142
+ };
143
+ readonly "tui.editor.yank": {
144
+ readonly defaultKeys: "ctrl+y";
145
+ readonly description: "Yank";
146
+ };
147
+ readonly "tui.editor.yankPop": {
148
+ readonly defaultKeys: "alt+y";
149
+ readonly description: "Yank pop";
150
+ };
151
+ readonly "tui.editor.undo": {
152
+ readonly defaultKeys: "ctrl+-";
153
+ readonly description: "Undo";
154
+ };
155
+ readonly "tui.input.newLine": {
156
+ readonly defaultKeys: ["shift+enter", "ctrl+j"];
157
+ readonly description: "Insert newline";
158
+ };
159
+ readonly "tui.input.submit": {
160
+ readonly defaultKeys: "enter";
161
+ readonly description: "Submit input";
162
+ };
163
+ readonly "tui.input.tab": {
164
+ readonly defaultKeys: "tab";
165
+ readonly description: "Tab / autocomplete";
166
+ };
167
+ readonly "tui.input.copy": {
168
+ readonly defaultKeys: "ctrl+c";
169
+ readonly description: "Copy selection";
170
+ };
171
+ readonly "tui.select.up": {
172
+ readonly defaultKeys: "up";
173
+ readonly description: "Move selection up";
174
+ };
175
+ readonly "tui.select.down": {
176
+ readonly defaultKeys: "down";
177
+ readonly description: "Move selection down";
178
+ };
179
+ readonly "tui.select.pageUp": {
180
+ readonly defaultKeys: "pageUp";
181
+ readonly description: "Selection page up";
182
+ };
183
+ readonly "tui.select.pageDown": {
184
+ readonly defaultKeys: "pageDown";
185
+ readonly description: "Selection page down";
186
+ };
187
+ readonly "tui.select.confirm": {
188
+ readonly defaultKeys: "enter";
189
+ readonly description: "Confirm selection";
190
+ };
191
+ readonly "tui.select.cancel": {
192
+ readonly defaultKeys: ["escape", "ctrl+c"];
193
+ readonly description: "Cancel selection";
194
+ };
195
+ readonly "tui.altScreen.pageUp": {
196
+ readonly defaultKeys: "pageUp";
197
+ readonly description: "Scroll viewport up one page";
198
+ };
199
+ readonly "tui.altScreen.pageDown": {
200
+ readonly defaultKeys: "pageDown";
201
+ readonly description: "Scroll viewport down one page";
202
+ };
203
+ readonly "tui.altScreen.halfPageUp": {
204
+ readonly defaultKeys: [];
205
+ readonly description: "Scroll viewport up half a page";
206
+ };
207
+ readonly "tui.altScreen.halfPageDown": {
208
+ readonly defaultKeys: [];
209
+ readonly description: "Scroll viewport down half a page";
210
+ };
211
+ readonly "tui.altScreen.lineUp": {
212
+ readonly defaultKeys: [];
213
+ readonly description: "Scroll viewport up one line";
214
+ };
215
+ readonly "tui.altScreen.lineDown": {
216
+ readonly defaultKeys: [];
217
+ readonly description: "Scroll viewport down one line";
218
+ };
219
+ readonly "tui.altScreen.previousPrompt": {
220
+ readonly defaultKeys: ["ctrl+shift+up", "ctrl+up"];
221
+ readonly description: "Jump to previous semantic prompt";
222
+ };
223
+ readonly "tui.altScreen.nextPrompt": {
224
+ readonly defaultKeys: ["ctrl+shift+down", "ctrl+down"];
225
+ readonly description: "Jump to next semantic prompt";
226
+ };
227
+ readonly "tui.altScreen.search": {
228
+ readonly defaultKeys: "ctrl+shift+f";
229
+ readonly description: "Search the primary scroll view";
230
+ };
231
+ readonly "tui.altScreen.searchNext": {
232
+ readonly defaultKeys: ["enter", "ctrl+g"];
233
+ readonly description: "Select the next search match";
234
+ };
235
+ readonly "tui.altScreen.searchPrevious": {
236
+ readonly defaultKeys: ["shift+enter", "ctrl+shift+g"];
237
+ readonly description: "Select the previous search match";
238
+ };
239
+ readonly "tui.altScreen.searchClose": {
240
+ readonly defaultKeys: "escape";
241
+ readonly description: "Close transcript search";
242
+ };
243
+ readonly "tui.altScreen.top": {
244
+ readonly defaultKeys: "ctrl+home";
245
+ readonly description: "Scroll viewport to top";
246
+ };
247
+ readonly "tui.altScreen.bottom": {
248
+ readonly defaultKeys: "ctrl+end";
249
+ readonly description: "Scroll viewport to bottom";
250
+ };
251
+ };
252
+ export interface KeybindingConflict {
253
+ key: KeyId;
254
+ keybindings: string[];
255
+ }
256
+ export declare class KeybindingsManager {
257
+ private definitions;
258
+ private userBindings;
259
+ private keysById;
260
+ private conflicts;
261
+ constructor(definitions: KeybindingDefinitions, userBindings?: KeybindingsConfig);
262
+ private rebuild;
263
+ matches(data: string, keybinding: Keybinding): boolean;
264
+ getKeys(keybinding: Keybinding): KeyId[];
265
+ getDefinition(keybinding: Keybinding): KeybindingDefinition;
266
+ getConflicts(): KeybindingConflict[];
267
+ setUserBindings(userBindings: KeybindingsConfig): void;
268
+ getUserBindings(): KeybindingsConfig;
269
+ getResolvedBindings(): KeybindingsConfig;
270
+ }
271
+ export declare function setKeybindings(keybindings: KeybindingsManager): void;
272
+ export declare function getKeybindings(): KeybindingsManager;
273
+ //# sourceMappingURL=keybindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keybindings.d.ts","sourceRoot":"","sources":["../src/keybindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ import { matchesKey } from "./keys.js";
2
+ export const TUI_KEYBINDINGS = {
3
+ "tui.editor.cursorUp": { defaultKeys: "up", description: "Move cursor up" },
4
+ "tui.editor.cursorDown": { defaultKeys: "down", description: "Move cursor down" },
5
+ "tui.editor.historyPrevious": {
6
+ defaultKeys: [],
7
+ description: "Select previous prompt history entry",
8
+ },
9
+ "tui.editor.historyNext": {
10
+ defaultKeys: [],
11
+ description: "Select next prompt history entry",
12
+ },
13
+ "tui.editor.cursorLeft": {
14
+ defaultKeys: ["left", "ctrl+b"],
15
+ description: "Move cursor left",
16
+ },
17
+ "tui.editor.cursorRight": {
18
+ defaultKeys: ["right", "ctrl+f"],
19
+ description: "Move cursor right",
20
+ },
21
+ "tui.editor.cursorWordLeft": {
22
+ defaultKeys: ["alt+left", "ctrl+left", "alt+b"],
23
+ description: "Move cursor word left",
24
+ },
25
+ "tui.editor.cursorWordRight": {
26
+ defaultKeys: ["alt+right", "ctrl+right", "alt+f"],
27
+ description: "Move cursor word right",
28
+ },
29
+ "tui.editor.cursorLineStart": {
30
+ defaultKeys: ["home", "ctrl+a"],
31
+ description: "Move to line start",
32
+ },
33
+ "tui.editor.cursorLineEnd": {
34
+ defaultKeys: ["end", "ctrl+e"],
35
+ description: "Move to line end",
36
+ },
37
+ "tui.editor.jumpForward": {
38
+ defaultKeys: "ctrl+]",
39
+ description: "Jump forward to character",
40
+ },
41
+ "tui.editor.jumpBackward": {
42
+ defaultKeys: "ctrl+alt+]",
43
+ description: "Jump backward to character",
44
+ },
45
+ "tui.editor.pageUp": { defaultKeys: ["pageUp", "ctrl+pageUp"], description: "Page up" },
46
+ "tui.editor.pageDown": { defaultKeys: ["pageDown", "ctrl+pageDown"], description: "Page down" },
47
+ "tui.editor.deleteCharBackward": {
48
+ defaultKeys: "backspace",
49
+ description: "Delete character backward",
50
+ },
51
+ "tui.editor.deleteCharForward": {
52
+ defaultKeys: ["delete", "ctrl+d"],
53
+ description: "Delete character forward",
54
+ },
55
+ "tui.editor.deleteWordBackward": {
56
+ defaultKeys: ["ctrl+w", "alt+backspace"],
57
+ description: "Delete word backward",
58
+ },
59
+ "tui.editor.deleteWordForward": {
60
+ defaultKeys: ["alt+d", "alt+delete"],
61
+ description: "Delete word forward",
62
+ },
63
+ "tui.editor.deleteToLineStart": {
64
+ defaultKeys: "ctrl+u",
65
+ description: "Delete to line start",
66
+ },
67
+ "tui.editor.deleteToLineEnd": {
68
+ defaultKeys: "ctrl+k",
69
+ description: "Delete to line end",
70
+ },
71
+ "tui.editor.yank": { defaultKeys: "ctrl+y", description: "Yank" },
72
+ "tui.editor.yankPop": { defaultKeys: "alt+y", description: "Yank pop" },
73
+ "tui.editor.undo": { defaultKeys: "ctrl+-", description: "Undo" },
74
+ "tui.input.newLine": { defaultKeys: ["shift+enter", "ctrl+j"], description: "Insert newline" },
75
+ "tui.input.submit": { defaultKeys: "enter", description: "Submit input" },
76
+ "tui.input.tab": { defaultKeys: "tab", description: "Tab / autocomplete" },
77
+ "tui.input.copy": { defaultKeys: "ctrl+c", description: "Copy selection" },
78
+ "tui.select.up": { defaultKeys: "up", description: "Move selection up" },
79
+ "tui.select.down": { defaultKeys: "down", description: "Move selection down" },
80
+ "tui.select.pageUp": { defaultKeys: "pageUp", description: "Selection page up" },
81
+ "tui.select.pageDown": {
82
+ defaultKeys: "pageDown",
83
+ description: "Selection page down",
84
+ },
85
+ "tui.select.confirm": { defaultKeys: "enter", description: "Confirm selection" },
86
+ "tui.select.cancel": {
87
+ defaultKeys: ["escape", "ctrl+c"],
88
+ description: "Cancel selection",
89
+ },
90
+ // These intentionally shadow the unmodified editor bindings in fullscreen mode.
91
+ "tui.altScreen.pageUp": {
92
+ defaultKeys: "pageUp",
93
+ description: "Scroll viewport up one page",
94
+ },
95
+ "tui.altScreen.pageDown": {
96
+ defaultKeys: "pageDown",
97
+ description: "Scroll viewport down one page",
98
+ },
99
+ "tui.altScreen.halfPageUp": {
100
+ defaultKeys: [],
101
+ description: "Scroll viewport up half a page",
102
+ },
103
+ "tui.altScreen.halfPageDown": {
104
+ defaultKeys: [],
105
+ description: "Scroll viewport down half a page",
106
+ },
107
+ "tui.altScreen.lineUp": {
108
+ defaultKeys: [],
109
+ description: "Scroll viewport up one line",
110
+ },
111
+ "tui.altScreen.lineDown": {
112
+ defaultKeys: [],
113
+ description: "Scroll viewport down one line",
114
+ },
115
+ "tui.altScreen.previousPrompt": {
116
+ defaultKeys: ["ctrl+shift+up", "ctrl+up"],
117
+ description: "Jump to previous semantic prompt",
118
+ },
119
+ "tui.altScreen.nextPrompt": {
120
+ defaultKeys: ["ctrl+shift+down", "ctrl+down"],
121
+ description: "Jump to next semantic prompt",
122
+ },
123
+ "tui.altScreen.search": {
124
+ defaultKeys: "ctrl+shift+f",
125
+ description: "Search the primary scroll view",
126
+ },
127
+ "tui.altScreen.searchNext": {
128
+ defaultKeys: ["enter", "ctrl+g"],
129
+ description: "Select the next search match",
130
+ },
131
+ "tui.altScreen.searchPrevious": {
132
+ defaultKeys: ["shift+enter", "ctrl+shift+g"],
133
+ description: "Select the previous search match",
134
+ },
135
+ "tui.altScreen.searchClose": {
136
+ defaultKeys: "escape",
137
+ description: "Close transcript search",
138
+ },
139
+ "tui.altScreen.top": { defaultKeys: "ctrl+home", description: "Scroll viewport to top" },
140
+ "tui.altScreen.bottom": { defaultKeys: "ctrl+end", description: "Scroll viewport to bottom" },
141
+ };
142
+ function normalizeKeys(keys) {
143
+ if (keys === undefined)
144
+ return [];
145
+ const keyList = Array.isArray(keys) ? keys : [keys];
146
+ const seen = new Set();
147
+ const result = [];
148
+ for (const key of keyList) {
149
+ if (!seen.has(key)) {
150
+ seen.add(key);
151
+ result.push(key);
152
+ }
153
+ }
154
+ return result;
155
+ }
156
+ export class KeybindingsManager {
157
+ definitions;
158
+ userBindings;
159
+ keysById = new Map();
160
+ conflicts = [];
161
+ constructor(definitions, userBindings = {}) {
162
+ this.definitions = definitions;
163
+ this.userBindings = userBindings;
164
+ this.rebuild();
165
+ }
166
+ rebuild() {
167
+ this.keysById.clear();
168
+ this.conflicts = [];
169
+ const userClaims = new Map();
170
+ for (const [keybinding, keys] of Object.entries(this.userBindings)) {
171
+ if (!(keybinding in this.definitions))
172
+ continue;
173
+ for (const key of normalizeKeys(keys)) {
174
+ const claimants = userClaims.get(key) ?? new Set();
175
+ claimants.add(keybinding);
176
+ userClaims.set(key, claimants);
177
+ }
178
+ }
179
+ for (const [key, keybindings] of userClaims) {
180
+ if (keybindings.size > 1) {
181
+ this.conflicts.push({ key, keybindings: [...keybindings] });
182
+ }
183
+ }
184
+ for (const [id, definition] of Object.entries(this.definitions)) {
185
+ const userKeys = this.userBindings[id];
186
+ const keys = userKeys === undefined ? normalizeKeys(definition.defaultKeys) : normalizeKeys(userKeys);
187
+ this.keysById.set(id, keys);
188
+ }
189
+ }
190
+ matches(data, keybinding) {
191
+ const keys = this.keysById.get(keybinding) ?? [];
192
+ for (const key of keys) {
193
+ if (matchesKey(data, key))
194
+ return true;
195
+ }
196
+ return false;
197
+ }
198
+ getKeys(keybinding) {
199
+ return [...(this.keysById.get(keybinding) ?? [])];
200
+ }
201
+ getDefinition(keybinding) {
202
+ return this.definitions[keybinding];
203
+ }
204
+ getConflicts() {
205
+ return this.conflicts.map((conflict) => ({ ...conflict, keybindings: [...conflict.keybindings] }));
206
+ }
207
+ setUserBindings(userBindings) {
208
+ this.userBindings = userBindings;
209
+ this.rebuild();
210
+ }
211
+ getUserBindings() {
212
+ return { ...this.userBindings };
213
+ }
214
+ getResolvedBindings() {
215
+ const resolved = {};
216
+ for (const id of Object.keys(this.definitions)) {
217
+ const keys = this.keysById.get(id) ?? [];
218
+ resolved[id] = keys.length === 1 ? keys[0] : [...keys];
219
+ }
220
+ return resolved;
221
+ }
222
+ }
223
+ let globalKeybindings = null;
224
+ export function setKeybindings(keybindings) {
225
+ globalKeybindings = keybindings;
226
+ }
227
+ export function getKeybindings() {
228
+ if (!globalKeybindings) {
229
+ globalKeybindings = new KeybindingsManager(TUI_KEYBINDINGS);
230
+ }
231
+ return globalKeybindings;
232
+ }
233
+ //# sourceMappingURL=keybindings.js.map