@butlerw/vellum 0.1.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 (446) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +411 -0
  3. package/__fixtures__/responses/code-generation.json +42 -0
  4. package/__fixtures__/responses/error-response.json +20 -0
  5. package/__fixtures__/responses/hello-world.json +32 -0
  6. package/dist/auth-6MCXESOH.js +26 -0
  7. package/dist/chunk-SECXJGWA.js +597 -0
  8. package/dist/index.js +34023 -0
  9. package/package.json +67 -0
  10. package/src/__tests__/commands.e2e.test.ts +728 -0
  11. package/src/__tests__/credentials.test.ts +713 -0
  12. package/src/__tests__/mode-e2e.test.ts +391 -0
  13. package/src/__tests__/tui-integration.test.tsx +1271 -0
  14. package/src/agents/__tests__/task-persistence.test.ts +235 -0
  15. package/src/agents/commands/delegate.ts +240 -0
  16. package/src/agents/commands/index.ts +10 -0
  17. package/src/agents/commands/resume.ts +335 -0
  18. package/src/agents/index.ts +29 -0
  19. package/src/agents/task-persistence.ts +272 -0
  20. package/src/agents/task-resumption.ts +242 -0
  21. package/src/app.tsx +4737 -0
  22. package/src/commands/__tests__/.gitkeep +1 -0
  23. package/src/commands/__tests__/agents.test.ts +606 -0
  24. package/src/commands/__tests__/auth.test.ts +626 -0
  25. package/src/commands/__tests__/autocomplete.test.ts +683 -0
  26. package/src/commands/__tests__/batch.test.ts +287 -0
  27. package/src/commands/__tests__/chain-pipe-parser.test.ts +654 -0
  28. package/src/commands/__tests__/completion.test.ts +238 -0
  29. package/src/commands/__tests__/core.test.ts +363 -0
  30. package/src/commands/__tests__/executor.test.ts +496 -0
  31. package/src/commands/__tests__/exit-codes.test.ts +220 -0
  32. package/src/commands/__tests__/init.test.ts +243 -0
  33. package/src/commands/__tests__/language.test.ts +353 -0
  34. package/src/commands/__tests__/mode-cli.test.ts +667 -0
  35. package/src/commands/__tests__/model.test.ts +277 -0
  36. package/src/commands/__tests__/parser.test.ts +493 -0
  37. package/src/commands/__tests__/performance.bench.ts +380 -0
  38. package/src/commands/__tests__/registry.test.ts +534 -0
  39. package/src/commands/__tests__/resume.test.ts +449 -0
  40. package/src/commands/__tests__/security.test.ts +845 -0
  41. package/src/commands/__tests__/stream-json.test.ts +372 -0
  42. package/src/commands/__tests__/user-commands.test.ts +597 -0
  43. package/src/commands/adapters.ts +267 -0
  44. package/src/commands/agent.ts +395 -0
  45. package/src/commands/agents/generate.ts +506 -0
  46. package/src/commands/agents/index.ts +272 -0
  47. package/src/commands/agents/show.ts +271 -0
  48. package/src/commands/agents/validate.ts +387 -0
  49. package/src/commands/auth.ts +883 -0
  50. package/src/commands/autocomplete.ts +480 -0
  51. package/src/commands/batch/command.ts +388 -0
  52. package/src/commands/batch/executor.ts +361 -0
  53. package/src/commands/batch/index.ts +12 -0
  54. package/src/commands/commit.ts +235 -0
  55. package/src/commands/completion/index.ts +371 -0
  56. package/src/commands/condense.ts +191 -0
  57. package/src/commands/config.ts +344 -0
  58. package/src/commands/context-provider.ts +173 -0
  59. package/src/commands/copy.ts +329 -0
  60. package/src/commands/core/clear.ts +38 -0
  61. package/src/commands/core/exit.ts +43 -0
  62. package/src/commands/core/help.ts +354 -0
  63. package/src/commands/core/index.ts +15 -0
  64. package/src/commands/cost.ts +179 -0
  65. package/src/commands/credentials.tsx +618 -0
  66. package/src/commands/custom-agents/__tests__/custom-agents.test.ts +709 -0
  67. package/src/commands/custom-agents/create.ts +377 -0
  68. package/src/commands/custom-agents/export.ts +135 -0
  69. package/src/commands/custom-agents/import.ts +199 -0
  70. package/src/commands/custom-agents/index.ts +372 -0
  71. package/src/commands/custom-agents/info.ts +318 -0
  72. package/src/commands/custom-agents/list.ts +267 -0
  73. package/src/commands/custom-agents/validate.ts +388 -0
  74. package/src/commands/diff-mode.ts +241 -0
  75. package/src/commands/env.ts +53 -0
  76. package/src/commands/executor.ts +579 -0
  77. package/src/commands/exit-codes.ts +202 -0
  78. package/src/commands/index.ts +701 -0
  79. package/src/commands/init/index.ts +15 -0
  80. package/src/commands/init/prompts.ts +366 -0
  81. package/src/commands/init/templates/commands-readme.md +80 -0
  82. package/src/commands/init/templates/example-command.md +79 -0
  83. package/src/commands/init/templates/example-skill.md +168 -0
  84. package/src/commands/init/templates/example-workflow.md +101 -0
  85. package/src/commands/init/templates/prompts-readme.md +52 -0
  86. package/src/commands/init/templates/rules-readme.md +63 -0
  87. package/src/commands/init/templates/skills-readme.md +83 -0
  88. package/src/commands/init/templates/workflows-readme.md +94 -0
  89. package/src/commands/init.ts +391 -0
  90. package/src/commands/install.ts +90 -0
  91. package/src/commands/language.ts +191 -0
  92. package/src/commands/loaders/.gitkeep +1 -0
  93. package/src/commands/lsp.ts +199 -0
  94. package/src/commands/markdown-commands.ts +253 -0
  95. package/src/commands/mcp.ts +588 -0
  96. package/src/commands/memory/export.ts +341 -0
  97. package/src/commands/memory/index.ts +148 -0
  98. package/src/commands/memory/list.ts +261 -0
  99. package/src/commands/memory/search.ts +346 -0
  100. package/src/commands/memory/utils.ts +15 -0
  101. package/src/commands/metrics.ts +75 -0
  102. package/src/commands/migrate/index.ts +16 -0
  103. package/src/commands/migrate/prompts.ts +477 -0
  104. package/src/commands/mode.ts +331 -0
  105. package/src/commands/model.ts +298 -0
  106. package/src/commands/onboard.ts +205 -0
  107. package/src/commands/open.ts +169 -0
  108. package/src/commands/output/stream-json.ts +373 -0
  109. package/src/commands/parser/chain-parser.ts +370 -0
  110. package/src/commands/parser/index.ts +29 -0
  111. package/src/commands/parser/pipe-parser.ts +480 -0
  112. package/src/commands/parser.ts +588 -0
  113. package/src/commands/persistence.ts +355 -0
  114. package/src/commands/progress.ts +18 -0
  115. package/src/commands/prompt/index.ts +17 -0
  116. package/src/commands/prompt/validate.ts +621 -0
  117. package/src/commands/prompt-priority.ts +401 -0
  118. package/src/commands/registry.ts +374 -0
  119. package/src/commands/sandbox/index.ts +131 -0
  120. package/src/commands/security/index.ts +21 -0
  121. package/src/commands/security/input-sanitizer.ts +168 -0
  122. package/src/commands/security/permission-checker.ts +456 -0
  123. package/src/commands/security/sensitive-data.ts +350 -0
  124. package/src/commands/session/delete.ts +38 -0
  125. package/src/commands/session/export.ts +39 -0
  126. package/src/commands/session/index.ts +26 -0
  127. package/src/commands/session/list.ts +26 -0
  128. package/src/commands/session/resume.ts +562 -0
  129. package/src/commands/session/search.ts +434 -0
  130. package/src/commands/session/show.ts +26 -0
  131. package/src/commands/settings.ts +368 -0
  132. package/src/commands/setup.ts +23 -0
  133. package/src/commands/shell/index.ts +16 -0
  134. package/src/commands/shell/setup.ts +422 -0
  135. package/src/commands/shell-init.ts +50 -0
  136. package/src/commands/shell-integration/index.ts +194 -0
  137. package/src/commands/skill.ts +1220 -0
  138. package/src/commands/spec.ts +558 -0
  139. package/src/commands/status.ts +246 -0
  140. package/src/commands/theme.ts +211 -0
  141. package/src/commands/think.ts +551 -0
  142. package/src/commands/trust.ts +211 -0
  143. package/src/commands/tutorial.ts +522 -0
  144. package/src/commands/types.ts +512 -0
  145. package/src/commands/update.ts +274 -0
  146. package/src/commands/usage.ts +213 -0
  147. package/src/commands/user-commands.ts +630 -0
  148. package/src/commands/utils.ts +142 -0
  149. package/src/commands/vim.ts +152 -0
  150. package/src/commands/workflow.ts +257 -0
  151. package/src/components/header.tsx +25 -0
  152. package/src/components/input.tsx +25 -0
  153. package/src/components/message-list.tsx +32 -0
  154. package/src/components/status-bar.tsx +23 -0
  155. package/src/index.tsx +614 -0
  156. package/src/onboarding/__tests__/tutorial.test.ts +740 -0
  157. package/src/onboarding/index.ts +69 -0
  158. package/src/onboarding/tips/index.ts +9 -0
  159. package/src/onboarding/tips/tip-engine.ts +459 -0
  160. package/src/onboarding/tutorial/index.ts +88 -0
  161. package/src/onboarding/tutorial/lessons/basics.ts +151 -0
  162. package/src/onboarding/tutorial/lessons/index.ts +151 -0
  163. package/src/onboarding/tutorial/lessons/modes.ts +230 -0
  164. package/src/onboarding/tutorial/lessons/tools.ts +172 -0
  165. package/src/onboarding/tutorial/progress-tracker.ts +350 -0
  166. package/src/onboarding/tutorial/storage.ts +249 -0
  167. package/src/onboarding/tutorial/tutorial-system.ts +462 -0
  168. package/src/onboarding/tutorial/types.ts +310 -0
  169. package/src/orchestrator-singleton.ts +129 -0
  170. package/src/shutdown.ts +33 -0
  171. package/src/test/e2e/assertions.ts +267 -0
  172. package/src/test/e2e/fixtures.ts +204 -0
  173. package/src/test/e2e/harness.ts +575 -0
  174. package/src/test/e2e/index.ts +57 -0
  175. package/src/test/e2e/types.ts +228 -0
  176. package/src/test/fixtures/__tests__/fake-response-loader.test.ts +314 -0
  177. package/src/test/fixtures/fake-response-loader.ts +314 -0
  178. package/src/test/fixtures/index.ts +20 -0
  179. package/src/tui/__tests__/mcp-panel.test.tsx +82 -0
  180. package/src/tui/__tests__/mcp-wiring.test.tsx +78 -0
  181. package/src/tui/__tests__/mode-components.test.tsx +395 -0
  182. package/src/tui/__tests__/permission-ask-flow.test.tsx +138 -0
  183. package/src/tui/__tests__/sidebar-panel-data.test.tsx +148 -0
  184. package/src/tui/__tests__/tools-panel-hotkeys.test.tsx +41 -0
  185. package/src/tui/adapters/agent-adapter.ts +1008 -0
  186. package/src/tui/adapters/index.ts +48 -0
  187. package/src/tui/adapters/message-adapter.ts +315 -0
  188. package/src/tui/adapters/persistence-bridge.ts +331 -0
  189. package/src/tui/adapters/session-adapter.ts +419 -0
  190. package/src/tui/buffered-stdout.ts +223 -0
  191. package/src/tui/components/AgentProgress.tsx +424 -0
  192. package/src/tui/components/Banner/AsciiArt.ts +160 -0
  193. package/src/tui/components/Banner/Banner.tsx +355 -0
  194. package/src/tui/components/Banner/ShimmerContext.tsx +131 -0
  195. package/src/tui/components/Banner/ShimmerText.tsx +193 -0
  196. package/src/tui/components/Banner/TypeWriterGradient.tsx +321 -0
  197. package/src/tui/components/Banner/index.ts +61 -0
  198. package/src/tui/components/Banner/useShimmer.ts +241 -0
  199. package/src/tui/components/ChatView.tsx +11 -0
  200. package/src/tui/components/Checkpoint/CheckpointDiffView.tsx +371 -0
  201. package/src/tui/components/Checkpoint/SnapshotCheckpointPanel.tsx +440 -0
  202. package/src/tui/components/Checkpoint/index.ts +19 -0
  203. package/src/tui/components/CostDisplay.tsx +226 -0
  204. package/src/tui/components/InitErrorBanner.tsx +122 -0
  205. package/src/tui/components/Input/Autocomplete.tsx +603 -0
  206. package/src/tui/components/Input/EnhancedCommandInput.tsx +471 -0
  207. package/src/tui/components/Input/HighlightedText.tsx +236 -0
  208. package/src/tui/components/Input/MentionAutocomplete.tsx +375 -0
  209. package/src/tui/components/Input/TextInput.tsx +1002 -0
  210. package/src/tui/components/Input/__tests__/Autocomplete.test.tsx +374 -0
  211. package/src/tui/components/Input/__tests__/TextInput.test.tsx +241 -0
  212. package/src/tui/components/Input/__tests__/highlight.test.ts +219 -0
  213. package/src/tui/components/Input/__tests__/slash-command-utils.test.ts +104 -0
  214. package/src/tui/components/Input/highlight.ts +362 -0
  215. package/src/tui/components/Input/index.ts +36 -0
  216. package/src/tui/components/Input/slash-command-utils.ts +135 -0
  217. package/src/tui/components/Layout.tsx +432 -0
  218. package/src/tui/components/McpPanel.tsx +137 -0
  219. package/src/tui/components/MemoryPanel.tsx +448 -0
  220. package/src/tui/components/Messages/CodeBlock.tsx +527 -0
  221. package/src/tui/components/Messages/DiffView.tsx +679 -0
  222. package/src/tui/components/Messages/ImageReference.tsx +89 -0
  223. package/src/tui/components/Messages/MarkdownBlock.tsx +228 -0
  224. package/src/tui/components/Messages/MarkdownRenderer.tsx +498 -0
  225. package/src/tui/components/Messages/MessageBubble.tsx +270 -0
  226. package/src/tui/components/Messages/MessageList.tsx +1719 -0
  227. package/src/tui/components/Messages/StreamingText.tsx +216 -0
  228. package/src/tui/components/Messages/ThinkingBlock.tsx +408 -0
  229. package/src/tui/components/Messages/ToolResultPreview.tsx +243 -0
  230. package/src/tui/components/Messages/__tests__/CodeBlock.test.tsx +296 -0
  231. package/src/tui/components/Messages/__tests__/DiffView.test.tsx +239 -0
  232. package/src/tui/components/Messages/__tests__/MarkdownRenderer.test.tsx +303 -0
  233. package/src/tui/components/Messages/__tests__/MessageBubble.test.tsx +268 -0
  234. package/src/tui/components/Messages/__tests__/MessageList.test.tsx +324 -0
  235. package/src/tui/components/Messages/__tests__/StreamingText.test.tsx +215 -0
  236. package/src/tui/components/Messages/index.ts +25 -0
  237. package/src/tui/components/ModeIndicator.tsx +177 -0
  238. package/src/tui/components/ModeSelector.tsx +216 -0
  239. package/src/tui/components/ModelSelector.tsx +339 -0
  240. package/src/tui/components/OnboardingWizard.tsx +670 -0
  241. package/src/tui/components/PhaseProgressIndicator.tsx +270 -0
  242. package/src/tui/components/RateLimitIndicator.tsx +82 -0
  243. package/src/tui/components/ScreenReaderLayout.tsx +295 -0
  244. package/src/tui/components/SettingsPanel.tsx +643 -0
  245. package/src/tui/components/Sidebar/SystemStatusPanel.tsx +284 -0
  246. package/src/tui/components/Sidebar/index.ts +9 -0
  247. package/src/tui/components/Status/ModelStatusBar.tsx +270 -0
  248. package/src/tui/components/Status/index.ts +12 -0
  249. package/src/tui/components/StatusBar/AgentModeIndicator.tsx +257 -0
  250. package/src/tui/components/StatusBar/ContextProgress.tsx +167 -0
  251. package/src/tui/components/StatusBar/FileChangesIndicator.tsx +62 -0
  252. package/src/tui/components/StatusBar/GitIndicator.tsx +89 -0
  253. package/src/tui/components/StatusBar/HeaderBar.tsx +126 -0
  254. package/src/tui/components/StatusBar/ModelIndicator.tsx +157 -0
  255. package/src/tui/components/StatusBar/PersistenceStatusIndicator.tsx +210 -0
  256. package/src/tui/components/StatusBar/ResilienceIndicator.tsx +106 -0
  257. package/src/tui/components/StatusBar/SandboxIndicator.tsx +167 -0
  258. package/src/tui/components/StatusBar/StatusBar.tsx +368 -0
  259. package/src/tui/components/StatusBar/ThinkingModeIndicator.tsx +170 -0
  260. package/src/tui/components/StatusBar/TokenBreakdown.tsx +246 -0
  261. package/src/tui/components/StatusBar/TokenCounter.tsx +135 -0
  262. package/src/tui/components/StatusBar/TrustModeIndicator.tsx +130 -0
  263. package/src/tui/components/StatusBar/WorkspaceIndicator.tsx +86 -0
  264. package/src/tui/components/StatusBar/__tests__/AgentModeIndicator.test.tsx +193 -0
  265. package/src/tui/components/StatusBar/__tests__/StatusBar.test.tsx +729 -0
  266. package/src/tui/components/StatusBar/index.ts +60 -0
  267. package/src/tui/components/TipBanner.tsx +115 -0
  268. package/src/tui/components/TodoItem.tsx +208 -0
  269. package/src/tui/components/TodoPanel.tsx +455 -0
  270. package/src/tui/components/Tools/ApprovalQueue.tsx +407 -0
  271. package/src/tui/components/Tools/OptionSelector.tsx +160 -0
  272. package/src/tui/components/Tools/PermissionDialog.tsx +286 -0
  273. package/src/tui/components/Tools/ToolParams.tsx +483 -0
  274. package/src/tui/components/Tools/ToolsPanel.tsx +178 -0
  275. package/src/tui/components/Tools/__tests__/PermissionDialog.test.tsx +510 -0
  276. package/src/tui/components/Tools/__tests__/ToolParams.test.tsx +432 -0
  277. package/src/tui/components/Tools/index.ts +21 -0
  278. package/src/tui/components/TrustPrompt.tsx +279 -0
  279. package/src/tui/components/UpdateBanner.tsx +166 -0
  280. package/src/tui/components/VimModeIndicator.tsx +112 -0
  281. package/src/tui/components/backtrack/BacktrackControls.tsx +402 -0
  282. package/src/tui/components/backtrack/index.ts +13 -0
  283. package/src/tui/components/common/AutoApprovalStatus.tsx +251 -0
  284. package/src/tui/components/common/CostWarning.tsx +294 -0
  285. package/src/tui/components/common/DynamicShortcutHints.tsx +209 -0
  286. package/src/tui/components/common/EnhancedLoadingIndicator.tsx +305 -0
  287. package/src/tui/components/common/ErrorBoundary.tsx +140 -0
  288. package/src/tui/components/common/GradientText.tsx +224 -0
  289. package/src/tui/components/common/HotkeyHelpModal.tsx +193 -0
  290. package/src/tui/components/common/HotkeyHints.tsx +70 -0
  291. package/src/tui/components/common/MaxSizedBox.tsx +354 -0
  292. package/src/tui/components/common/NewMessagesBadge.tsx +65 -0
  293. package/src/tui/components/common/ProtectedFileLegend.tsx +89 -0
  294. package/src/tui/components/common/ScrollIndicator.tsx +160 -0
  295. package/src/tui/components/common/Spinner.tsx +342 -0
  296. package/src/tui/components/common/StreamingIndicator.tsx +316 -0
  297. package/src/tui/components/common/VirtualizedList/VirtualizedList.tsx +428 -0
  298. package/src/tui/components/common/VirtualizedList/hooks/index.ts +19 -0
  299. package/src/tui/components/common/VirtualizedList/hooks/useBatchedScroll.ts +64 -0
  300. package/src/tui/components/common/VirtualizedList/hooks/useScrollAnchor.ts +290 -0
  301. package/src/tui/components/common/VirtualizedList/hooks/useVirtualization.ts +340 -0
  302. package/src/tui/components/common/VirtualizedList/index.ts +30 -0
  303. package/src/tui/components/common/VirtualizedList/types.ts +107 -0
  304. package/src/tui/components/common/__tests__/NewMessagesBadge.test.tsx +74 -0
  305. package/src/tui/components/common/__tests__/ScrollIndicator.test.tsx +193 -0
  306. package/src/tui/components/common/index.ts +110 -0
  307. package/src/tui/components/index.ts +79 -0
  308. package/src/tui/components/session/CheckpointPanel.tsx +323 -0
  309. package/src/tui/components/session/RollbackDialog.tsx +169 -0
  310. package/src/tui/components/session/SessionItem.tsx +136 -0
  311. package/src/tui/components/session/SessionListPanel.tsx +252 -0
  312. package/src/tui/components/session/SessionPicker.tsx +449 -0
  313. package/src/tui/components/session/SessionPreview.tsx +240 -0
  314. package/src/tui/components/session/__tests__/session.test.tsx +408 -0
  315. package/src/tui/components/session/index.ts +28 -0
  316. package/src/tui/components/session/types.ts +116 -0
  317. package/src/tui/components/theme/__tests__/tokens.test.ts +471 -0
  318. package/src/tui/components/theme/index.ts +227 -0
  319. package/src/tui/components/theme/tokens.ts +484 -0
  320. package/src/tui/config/defaults.ts +134 -0
  321. package/src/tui/config/index.ts +17 -0
  322. package/src/tui/context/AnimationContext.tsx +284 -0
  323. package/src/tui/context/AppContext.tsx +349 -0
  324. package/src/tui/context/BracketedPasteContext.tsx +372 -0
  325. package/src/tui/context/LspContext.tsx +192 -0
  326. package/src/tui/context/McpContext.tsx +325 -0
  327. package/src/tui/context/MessagesContext.tsx +870 -0
  328. package/src/tui/context/OverflowContext.tsx +213 -0
  329. package/src/tui/context/RateLimitContext.tsx +108 -0
  330. package/src/tui/context/ResilienceContext.tsx +275 -0
  331. package/src/tui/context/RootProvider.tsx +136 -0
  332. package/src/tui/context/ScrollContext.tsx +331 -0
  333. package/src/tui/context/ToolsContext.tsx +702 -0
  334. package/src/tui/context/__tests__/BracketedPasteContext.test.tsx +416 -0
  335. package/src/tui/context/index.ts +140 -0
  336. package/src/tui/enterprise-integration.ts +282 -0
  337. package/src/tui/hooks/__tests__/useBacktrack.test.tsx +138 -0
  338. package/src/tui/hooks/__tests__/useBracketedPaste.test.tsx +222 -0
  339. package/src/tui/hooks/__tests__/useCopyMode.test.tsx +336 -0
  340. package/src/tui/hooks/__tests__/useHotkeys.ctrl-input.test.tsx +96 -0
  341. package/src/tui/hooks/__tests__/useHotkeys.test.tsx +454 -0
  342. package/src/tui/hooks/__tests__/useInputHistory.test.tsx +660 -0
  343. package/src/tui/hooks/__tests__/useLineBuffer.test.ts +295 -0
  344. package/src/tui/hooks/__tests__/useModeController.test.ts +137 -0
  345. package/src/tui/hooks/__tests__/useModeShortcuts.test.tsx +142 -0
  346. package/src/tui/hooks/__tests__/useScrollController.test.ts +464 -0
  347. package/src/tui/hooks/__tests__/useVim.test.tsx +531 -0
  348. package/src/tui/hooks/index.ts +252 -0
  349. package/src/tui/hooks/useAgentLoop.ts +712 -0
  350. package/src/tui/hooks/useAlternateBuffer.ts +398 -0
  351. package/src/tui/hooks/useAnimatedScrollbar.ts +241 -0
  352. package/src/tui/hooks/useBacktrack.ts +443 -0
  353. package/src/tui/hooks/useBracketedPaste.ts +104 -0
  354. package/src/tui/hooks/useCollapsible.ts +240 -0
  355. package/src/tui/hooks/useCopyMode.ts +382 -0
  356. package/src/tui/hooks/useCostSummary.ts +75 -0
  357. package/src/tui/hooks/useDesktopNotification.ts +414 -0
  358. package/src/tui/hooks/useDiffMode.ts +44 -0
  359. package/src/tui/hooks/useFileChangeStats.ts +110 -0
  360. package/src/tui/hooks/useFileSuggestions.ts +284 -0
  361. package/src/tui/hooks/useFlickerDetector.ts +250 -0
  362. package/src/tui/hooks/useGitStatus.ts +200 -0
  363. package/src/tui/hooks/useHotkeys.ts +579 -0
  364. package/src/tui/hooks/useImagePaste.ts +114 -0
  365. package/src/tui/hooks/useInputHighlight.ts +145 -0
  366. package/src/tui/hooks/useInputHistory.ts +246 -0
  367. package/src/tui/hooks/useKeyboardScroll.ts +209 -0
  368. package/src/tui/hooks/useLineBuffer.ts +356 -0
  369. package/src/tui/hooks/useMentionAutocomplete.ts +235 -0
  370. package/src/tui/hooks/useModeController.ts +167 -0
  371. package/src/tui/hooks/useModeShortcuts.ts +196 -0
  372. package/src/tui/hooks/usePermissionHandler.ts +146 -0
  373. package/src/tui/hooks/usePersistence.ts +480 -0
  374. package/src/tui/hooks/usePersistenceShortcuts.ts +225 -0
  375. package/src/tui/hooks/usePlaceholderRotation.ts +143 -0
  376. package/src/tui/hooks/useProviderStatus.ts +270 -0
  377. package/src/tui/hooks/useRateLimitStatus.ts +90 -0
  378. package/src/tui/hooks/useScreenReader.ts +315 -0
  379. package/src/tui/hooks/useScrollController.ts +450 -0
  380. package/src/tui/hooks/useScrollEventBatcher.ts +185 -0
  381. package/src/tui/hooks/useSidebarPanelData.ts +115 -0
  382. package/src/tui/hooks/useSmoothScroll.ts +202 -0
  383. package/src/tui/hooks/useSnapshots.ts +300 -0
  384. package/src/tui/hooks/useStateAndRef.ts +50 -0
  385. package/src/tui/hooks/useTerminalSize.ts +206 -0
  386. package/src/tui/hooks/useToolApprovalController.ts +91 -0
  387. package/src/tui/hooks/useVim.ts +334 -0
  388. package/src/tui/hooks/useWorkspace.ts +56 -0
  389. package/src/tui/i18n/__tests__/init.test.ts +278 -0
  390. package/src/tui/i18n/__tests__/language-config.test.ts +199 -0
  391. package/src/tui/i18n/__tests__/locale-detection.test.ts +250 -0
  392. package/src/tui/i18n/__tests__/settings-integration.test.ts +262 -0
  393. package/src/tui/i18n/index.ts +72 -0
  394. package/src/tui/i18n/init.ts +131 -0
  395. package/src/tui/i18n/language-config.ts +106 -0
  396. package/src/tui/i18n/locale-detection.ts +173 -0
  397. package/src/tui/i18n/settings-integration.ts +557 -0
  398. package/src/tui/i18n/tui-namespace.ts +538 -0
  399. package/src/tui/i18n/types.ts +312 -0
  400. package/src/tui/index.ts +43 -0
  401. package/src/tui/lsp-integration.ts +409 -0
  402. package/src/tui/metrics-integration.ts +366 -0
  403. package/src/tui/plugins.ts +383 -0
  404. package/src/tui/resilience.ts +342 -0
  405. package/src/tui/sandbox-integration.ts +317 -0
  406. package/src/tui/services/clipboard.ts +348 -0
  407. package/src/tui/services/fuzzy-search.ts +441 -0
  408. package/src/tui/services/index.ts +72 -0
  409. package/src/tui/services/markdown-renderer.ts +565 -0
  410. package/src/tui/services/open-external.ts +247 -0
  411. package/src/tui/services/syntax-highlighter.ts +483 -0
  412. package/src/tui/slash-commands.ts +12 -0
  413. package/src/tui/theme/index.ts +15 -0
  414. package/src/tui/theme/provider.tsx +206 -0
  415. package/src/tui/tip-integration.ts +300 -0
  416. package/src/tui/types/__tests__/ink-extended.test.ts +121 -0
  417. package/src/tui/types/ink-extended.ts +87 -0
  418. package/src/tui/utils/__tests__/bracketedPaste.test.ts +231 -0
  419. package/src/tui/utils/__tests__/heightEstimator.test.ts +157 -0
  420. package/src/tui/utils/__tests__/text-width.test.ts +158 -0
  421. package/src/tui/utils/__tests__/textSanitizer.test.ts +266 -0
  422. package/src/tui/utils/__tests__/ui-sizing.test.ts +169 -0
  423. package/src/tui/utils/bracketedPaste.ts +107 -0
  424. package/src/tui/utils/cursor-manager.ts +131 -0
  425. package/src/tui/utils/detectTerminal.ts +596 -0
  426. package/src/tui/utils/findLastSafeSplitPoint.ts +92 -0
  427. package/src/tui/utils/heightEstimator.ts +198 -0
  428. package/src/tui/utils/index.ts +91 -0
  429. package/src/tui/utils/isNarrowWidth.ts +52 -0
  430. package/src/tui/utils/stdoutGuard.ts +90 -0
  431. package/src/tui/utils/synchronized-update.ts +70 -0
  432. package/src/tui/utils/text-width.ts +225 -0
  433. package/src/tui/utils/textSanitizer.ts +225 -0
  434. package/src/tui/utils/textUtils.ts +114 -0
  435. package/src/tui/utils/ui-sizing.ts +192 -0
  436. package/src/tui-blessed/app.ts +160 -0
  437. package/src/tui-blessed/index.ts +2 -0
  438. package/src/tui-blessed/neo-blessed.d.ts +6 -0
  439. package/src/tui-blessed/test.ts +21 -0
  440. package/src/tui-blessed/types.ts +14 -0
  441. package/src/utils/icons.ts +130 -0
  442. package/src/utils/index.ts +33 -0
  443. package/src/utils/resume-hint.ts +86 -0
  444. package/src/version.ts +1 -0
  445. package/tsconfig.json +8 -0
  446. package/vitest.config.ts +35 -0
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Theme Component Exports
3
+ *
4
+ * Design tokens and theme utilities for TUI components.
5
+ * This module provides a simple, component-focused theme API
6
+ * while leveraging the full theme system from @vellum/shared.
7
+ *
8
+ * @module tui/components/theme
9
+ */
10
+
11
+ // =============================================================================
12
+ // Design Tokens
13
+ // =============================================================================
14
+
15
+ export type {
16
+ BackgroundColorToken,
17
+ BorderColorToken,
18
+ // Token key types
19
+ ColorToken,
20
+ FontSizeToken,
21
+ FontWeightToken,
22
+ IconToken,
23
+ LineHeightToken,
24
+ SpacingToken,
25
+ StatusColorToken,
26
+ TextColorToken,
27
+ Tokens,
28
+ } from "./tokens.js";
29
+ export {
30
+ animationTiming,
31
+ backgroundColors,
32
+ borderCharsBold,
33
+ borderCharsDouble,
34
+ borderCharsRounded,
35
+ borderCharsSingle,
36
+ borderColors,
37
+ // Borders
38
+ borderRadius,
39
+ borderWidth,
40
+ // Core colors
41
+ colors,
42
+ // Typography
43
+ fontSizes,
44
+ fontWeights,
45
+ // Icons
46
+ icons,
47
+ lineHeights,
48
+ // Spacing
49
+ spacing,
50
+ // Animation
51
+ spinnerFrames,
52
+ statusColors,
53
+ textColors,
54
+ // Grouped tokens
55
+ tokens,
56
+ } from "./tokens.js";
57
+
58
+ // =============================================================================
59
+ // Theme Utilities
60
+ // =============================================================================
61
+
62
+ import {
63
+ type ColorToken,
64
+ colors,
65
+ type FontSizeToken,
66
+ fontSizes,
67
+ type SpacingToken,
68
+ spacing,
69
+ } from "./tokens.js";
70
+
71
+ /**
72
+ * Get a color value by token name
73
+ *
74
+ * @param token - Color token name
75
+ * @returns Hex color string
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const primaryColor = getColor('primary'); // '#7C3AED'
80
+ * const errorColor = getColor('error'); // '#EF4444'
81
+ * ```
82
+ */
83
+ export function getColor(token: ColorToken): string {
84
+ return colors[token];
85
+ }
86
+
87
+ /**
88
+ * Get a spacing value by token name
89
+ *
90
+ * @param token - Spacing token name
91
+ * @returns Spacing value in characters
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const padding = getSpacing('md'); // 4
96
+ * const margin = getSpacing('lg'); // 8
97
+ * ```
98
+ */
99
+ export function getSpacing(token: SpacingToken): number {
100
+ return spacing[token];
101
+ }
102
+
103
+ /**
104
+ * Get a font size value by token name
105
+ *
106
+ * @param token - Font size token name
107
+ * @returns Font size value
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const bodySize = getFontSize('md'); // 14
112
+ * const headingSize = getFontSize('xl'); // 20
113
+ * ```
114
+ */
115
+ export function getFontSize(token: FontSizeToken): number {
116
+ return fontSizes[token];
117
+ }
118
+
119
+ /**
120
+ * Create spacing object for padding/margin
121
+ *
122
+ * @param top - Top spacing token
123
+ * @param right - Right spacing token (optional, defaults to top)
124
+ * @param bottom - Bottom spacing token (optional, defaults to top)
125
+ * @param left - Left spacing token (optional, defaults to right)
126
+ * @returns Spacing value or object
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * createSpacing('md'); // 4
131
+ * createSpacing('sm', 'md'); // { vertical: 2, horizontal: 4 }
132
+ * createSpacing('xs', 'sm', 'md', 'lg'); // { top: 1, right: 2, bottom: 4, left: 8 }
133
+ * ```
134
+ */
135
+ export function createSpacing(top: SpacingToken): number;
136
+ export function createSpacing(
137
+ vertical: SpacingToken,
138
+ horizontal: SpacingToken
139
+ ): { vertical: number; horizontal: number };
140
+ export function createSpacing(
141
+ top: SpacingToken,
142
+ right: SpacingToken,
143
+ bottom: SpacingToken,
144
+ left: SpacingToken
145
+ ): { top: number; right: number; bottom: number; left: number };
146
+ export function createSpacing(
147
+ first: SpacingToken,
148
+ second?: SpacingToken,
149
+ third?: SpacingToken,
150
+ fourth?: SpacingToken
151
+ ):
152
+ | number
153
+ | { vertical: number; horizontal: number }
154
+ | { top: number; right: number; bottom: number; left: number } {
155
+ if (second === undefined) {
156
+ return spacing[first];
157
+ }
158
+ if (third === undefined || fourth === undefined) {
159
+ return {
160
+ vertical: spacing[first],
161
+ horizontal: spacing[second],
162
+ };
163
+ }
164
+ return {
165
+ top: spacing[first],
166
+ right: spacing[second],
167
+ bottom: spacing[third],
168
+ left: spacing[fourth],
169
+ };
170
+ }
171
+
172
+ /**
173
+ * Check if a string is a valid color token
174
+ *
175
+ * @param value - String to check
176
+ * @returns True if valid color token
177
+ */
178
+ export function isColorToken(value: string): value is ColorToken {
179
+ return value in colors;
180
+ }
181
+
182
+ /**
183
+ * Check if a string is a valid spacing token
184
+ *
185
+ * @param value - String to check
186
+ * @returns True if valid spacing token
187
+ */
188
+ export function isSpacingToken(value: string): value is SpacingToken {
189
+ return value in spacing;
190
+ }
191
+
192
+ /**
193
+ * Get all color tokens as an array
194
+ *
195
+ * @returns Array of color token names
196
+ */
197
+ export function getColorTokens(): ColorToken[] {
198
+ return Object.keys(colors) as ColorToken[];
199
+ }
200
+
201
+ /**
202
+ * Get all spacing tokens as an array
203
+ *
204
+ * @returns Array of spacing token names
205
+ */
206
+ export function getSpacingTokens(): SpacingToken[] {
207
+ return Object.keys(spacing) as SpacingToken[];
208
+ }
209
+
210
+ // =============================================================================
211
+ // Re-exports from main theme module
212
+ // =============================================================================
213
+
214
+ // Re-export shared theme types for convenience
215
+ export type {
216
+ ThemeContextValue,
217
+ ThemeName,
218
+ VellumTheme,
219
+ } from "@vellum/shared";
220
+
221
+ // Re-export theme provider from main theme module
222
+ export {
223
+ ThemeContext,
224
+ ThemeProvider,
225
+ type ThemeProviderProps,
226
+ useTheme,
227
+ } from "../../theme/index.js";
@@ -0,0 +1,484 @@
1
+ /**
2
+ * Design Tokens
3
+ *
4
+ * Core design tokens for the Vellum TUI component system.
5
+ * These tokens provide a foundation for consistent styling
6
+ * across all TUI components.
7
+ *
8
+ * Terminal-compatible colors and spacing values.
9
+ *
10
+ * @module tui/components/theme/tokens
11
+ */
12
+
13
+ // =============================================================================
14
+ // Color Tokens
15
+ // =============================================================================
16
+
17
+ /**
18
+ * Core color palette
19
+ *
20
+ * Terminal-compatible hex colors that work well in both
21
+ * dark and light terminal backgrounds.
22
+ */
23
+ export const colors = {
24
+ /** Primary brand color - purple accent */
25
+ primary: "#7C3AED",
26
+
27
+ /** Secondary color - subtle gray */
28
+ secondary: "#6B7280",
29
+
30
+ /** Success state - green */
31
+ success: "#10B981",
32
+
33
+ /** Warning state - amber */
34
+ warning: "#F59E0B",
35
+
36
+ /** Error state - red */
37
+ error: "#EF4444",
38
+
39
+ /** Muted/disabled - light gray */
40
+ muted: "#9CA3AF",
41
+
42
+ /** Info state - blue */
43
+ info: "#3B82F6",
44
+
45
+ /** Accent highlight - indigo */
46
+ accent: "#6366F1",
47
+ } as const;
48
+
49
+ /**
50
+ * Semantic text colors
51
+ */
52
+ export const textColors = {
53
+ /** Primary text - high contrast */
54
+ primary: "#FFFFFF",
55
+
56
+ /** Secondary text - medium emphasis */
57
+ secondary: "#D1D5DB",
58
+
59
+ /** Muted text - low emphasis */
60
+ muted: "#9CA3AF",
61
+
62
+ /** Inverted text - for light backgrounds */
63
+ inverted: "#111827",
64
+
65
+ /** User message color */
66
+ user: "#60A5FA",
67
+
68
+ /** Assistant message color - bright white for readability */
69
+ assistant: "#ffffff",
70
+
71
+ /** System message color */
72
+ system: "#9CA3AF",
73
+
74
+ /** Tool output color */
75
+ tool: "#34D399",
76
+ } as const;
77
+
78
+ /**
79
+ * Background colors
80
+ */
81
+ export const backgroundColors = {
82
+ /** Primary background */
83
+ primary: "#111827",
84
+
85
+ /** Secondary background - panels */
86
+ secondary: "#1F2937",
87
+
88
+ /** Elevated background - dialogs */
89
+ elevated: "#374151",
90
+
91
+ /** Code block background */
92
+ code: "#0D1117",
93
+ } as const;
94
+
95
+ /**
96
+ * Border colors
97
+ */
98
+ export const borderColors = {
99
+ /** Default border */
100
+ default: "#374151",
101
+
102
+ /** Focused element border */
103
+ focus: "#7C3AED",
104
+
105
+ /** Muted border */
106
+ muted: "#1F2937",
107
+ } as const;
108
+
109
+ /**
110
+ * Status indicator colors
111
+ */
112
+ export const statusColors = {
113
+ /** Pending/loading state */
114
+ pending: "#F59E0B",
115
+
116
+ /** Running/active state */
117
+ running: "#3B82F6",
118
+
119
+ /** Complete/success state */
120
+ complete: "#10B981",
121
+
122
+ /** Error/failed state */
123
+ error: "#EF4444",
124
+
125
+ /** Approved state */
126
+ approved: "#10B981",
127
+
128
+ /** Rejected state */
129
+ rejected: "#EF4444",
130
+ } as const;
131
+
132
+ // =============================================================================
133
+ // Spacing Tokens
134
+ // =============================================================================
135
+
136
+ /**
137
+ * Spacing scale values
138
+ *
139
+ * Values represent character/cell counts in terminal context.
140
+ * Used for padding, margins, and gaps.
141
+ */
142
+ export const spacing = {
143
+ /** No spacing (0) */
144
+ none: 0,
145
+
146
+ /** Extra small (1 character) */
147
+ xs: 1,
148
+
149
+ /** Small (2 characters) */
150
+ sm: 2,
151
+
152
+ /** Medium (4 characters) */
153
+ md: 4,
154
+
155
+ /** Large (8 characters) */
156
+ lg: 8,
157
+
158
+ /** Extra large (16 characters) */
159
+ xl: 16,
160
+ } as const;
161
+
162
+ // =============================================================================
163
+ // Typography Tokens
164
+ // =============================================================================
165
+
166
+ /**
167
+ * Font size scale
168
+ *
169
+ * In terminal context, "size" typically maps to
170
+ * emphasis through styling rather than actual size.
171
+ * These values can be used for responsive layouts.
172
+ */
173
+ export const fontSizes = {
174
+ /** Extra small - footnotes */
175
+ xs: 10,
176
+
177
+ /** Small - captions */
178
+ sm: 12,
179
+
180
+ /** Base size - body text */
181
+ md: 14,
182
+
183
+ /** Large - headings */
184
+ lg: 16,
185
+
186
+ /** Extra large - titles */
187
+ xl: 20,
188
+
189
+ /** Double extra large - hero text */
190
+ xxl: 24,
191
+ } as const;
192
+
193
+ /**
194
+ * Font weight scale
195
+ *
196
+ * Terminal support varies, but these semantic
197
+ * values enable styling in supporting terminals.
198
+ */
199
+ export const fontWeights = {
200
+ /** Light weight (300) */
201
+ light: 300,
202
+
203
+ /** Normal weight (400) */
204
+ normal: 400,
205
+
206
+ /** Medium weight (500) */
207
+ medium: 500,
208
+
209
+ /** Semibold weight (600) */
210
+ semibold: 600,
211
+
212
+ /** Bold weight (700) */
213
+ bold: 700,
214
+ } as const;
215
+
216
+ /**
217
+ * Line height scale
218
+ */
219
+ export const lineHeights = {
220
+ /** Tight - compact text */
221
+ tight: 1.25,
222
+
223
+ /** Normal - body text */
224
+ normal: 1.5,
225
+
226
+ /** Relaxed - spacious text */
227
+ relaxed: 1.75,
228
+ } as const;
229
+
230
+ // =============================================================================
231
+ // Border Tokens
232
+ // =============================================================================
233
+
234
+ /**
235
+ * Border radius values
236
+ *
237
+ * In terminal, these map to character-based borders.
238
+ */
239
+ export const borderRadius = {
240
+ /** No rounding */
241
+ none: 0,
242
+
243
+ /** Small rounding */
244
+ sm: 1,
245
+
246
+ /** Medium rounding */
247
+ md: 2,
248
+
249
+ /** Large rounding */
250
+ lg: 4,
251
+
252
+ /** Full rounding - pill shapes */
253
+ full: 999,
254
+ } as const;
255
+
256
+ /**
257
+ * Border width values
258
+ */
259
+ export const borderWidth = {
260
+ /** No border */
261
+ none: 0,
262
+
263
+ /** Thin border (1 character) */
264
+ thin: 1,
265
+
266
+ /** Medium border (2 characters) */
267
+ medium: 2,
268
+
269
+ /** Thick border (3+ characters) */
270
+ thick: 3,
271
+ } as const;
272
+
273
+ /**
274
+ * Box-drawing characters for single-line borders
275
+ */
276
+ export const borderCharsSingle = {
277
+ topLeft: "┌",
278
+ topRight: "┐",
279
+ bottomLeft: "└",
280
+ bottomRight: "┘",
281
+ horizontal: "─",
282
+ vertical: "│",
283
+ } as const;
284
+
285
+ /**
286
+ * Box-drawing characters for double-line borders
287
+ */
288
+ export const borderCharsDouble = {
289
+ topLeft: "╔",
290
+ topRight: "╗",
291
+ bottomLeft: "╚",
292
+ bottomRight: "╝",
293
+ horizontal: "═",
294
+ vertical: "║",
295
+ } as const;
296
+
297
+ /**
298
+ * Box-drawing characters for rounded borders
299
+ */
300
+ export const borderCharsRounded = {
301
+ topLeft: "╭",
302
+ topRight: "╮",
303
+ bottomLeft: "╰",
304
+ bottomRight: "╯",
305
+ horizontal: "─",
306
+ vertical: "│",
307
+ } as const;
308
+
309
+ /**
310
+ * Box-drawing characters for bold borders
311
+ */
312
+ export const borderCharsBold = {
313
+ topLeft: "┏",
314
+ topRight: "┓",
315
+ bottomLeft: "┗",
316
+ bottomRight: "┛",
317
+ horizontal: "━",
318
+ vertical: "┃",
319
+ } as const;
320
+
321
+ // =============================================================================
322
+ // Animation Tokens
323
+ // =============================================================================
324
+
325
+ /**
326
+ * Spinner frame sequences
327
+ */
328
+ export const spinnerFrames = {
329
+ /** Braille dots spinner */
330
+ dots: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
331
+
332
+ /** Simple line spinner */
333
+ line: ["-", "\\", "|", "/"],
334
+
335
+ /** Arc spinner */
336
+ arc: ["◜", "◠", "◝", "◞", "◡", "◟"],
337
+
338
+ /** Bounce spinner */
339
+ bounce: ["⠁", "⠂", "⠄", "⠂"],
340
+ } as const;
341
+
342
+ /**
343
+ * Animation timing values (milliseconds)
344
+ */
345
+ export const animationTiming = {
346
+ /** Spinner frame interval */
347
+ frameInterval: 80,
348
+
349
+ /** Cursor blink interval */
350
+ cursorBlink: 530,
351
+
352
+ /** Fast transition */
353
+ fast: 150,
354
+
355
+ /** Normal transition */
356
+ normal: 300,
357
+
358
+ /** Slow transition */
359
+ slow: 500,
360
+ } as const;
361
+
362
+ // =============================================================================
363
+ // Icon Tokens
364
+ // =============================================================================
365
+
366
+ /**
367
+ * Status and UI icons
368
+ */
369
+ export const icons = {
370
+ /** Success indicator */
371
+ success: "✓",
372
+
373
+ /** Error indicator */
374
+ error: "✗",
375
+
376
+ /** Warning indicator */
377
+ warning: "⚠",
378
+
379
+ /** Info indicator */
380
+ info: "ℹ",
381
+
382
+ /** Pending indicator */
383
+ pending: "○",
384
+
385
+ /** Checked checkbox */
386
+ checked: "☑",
387
+
388
+ /** Unchecked checkbox */
389
+ unchecked: "☐",
390
+
391
+ /** Collapsed/right arrow */
392
+ collapsed: "▸",
393
+
394
+ /** Expanded/down arrow */
395
+ expanded: "▾",
396
+
397
+ /** User icon */
398
+ user: "@",
399
+
400
+ /** Assistant/AI icon */
401
+ assistant: "*",
402
+
403
+ /** Tool icon */
404
+ tool: ">",
405
+
406
+ /** Edit/pencil icon */
407
+ edit: "~",
408
+
409
+ /** Copy icon */
410
+ copy: "#",
411
+
412
+ /** Loading/spinner placeholder */
413
+ loading: "◌",
414
+
415
+ /** Arrow right */
416
+ arrowRight: "→",
417
+
418
+ /** Arrow left */
419
+ arrowLeft: "←",
420
+
421
+ /** Arrow up */
422
+ arrowUp: "↑",
423
+
424
+ /** Arrow down */
425
+ arrowDown: "↓",
426
+ } as const;
427
+
428
+ // =============================================================================
429
+ // Type Exports
430
+ // =============================================================================
431
+
432
+ /** Color token keys */
433
+ export type ColorToken = keyof typeof colors;
434
+
435
+ /** Text color token keys */
436
+ export type TextColorToken = keyof typeof textColors;
437
+
438
+ /** Background color token keys */
439
+ export type BackgroundColorToken = keyof typeof backgroundColors;
440
+
441
+ /** Border color token keys */
442
+ export type BorderColorToken = keyof typeof borderColors;
443
+
444
+ /** Status color token keys */
445
+ export type StatusColorToken = keyof typeof statusColors;
446
+
447
+ /** Spacing token keys */
448
+ export type SpacingToken = keyof typeof spacing;
449
+
450
+ /** Font size token keys */
451
+ export type FontSizeToken = keyof typeof fontSizes;
452
+
453
+ /** Font weight token keys */
454
+ export type FontWeightToken = keyof typeof fontWeights;
455
+
456
+ /** Line height token keys */
457
+ export type LineHeightToken = keyof typeof lineHeights;
458
+
459
+ /** Icon token keys */
460
+ export type IconToken = keyof typeof icons;
461
+
462
+ /** All design tokens grouped */
463
+ export const tokens = {
464
+ colors,
465
+ textColors,
466
+ backgroundColors,
467
+ borderColors,
468
+ statusColors,
469
+ spacing,
470
+ fontSizes,
471
+ fontWeights,
472
+ lineHeights,
473
+ borderRadius,
474
+ borderWidth,
475
+ borderCharsSingle,
476
+ borderCharsDouble,
477
+ borderCharsRounded,
478
+ borderCharsBold,
479
+ spinnerFrames,
480
+ animationTiming,
481
+ icons,
482
+ } as const;
483
+
484
+ export type Tokens = typeof tokens;