Download packages/coding-agent/src/modes/interactive/components/theme-selector.ts from SaylorTwift/pi: direct link, hf CLI and curl.
- Browser
- Download file 1.72 kB
-
https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/modes/interactive/components/theme-selector.ts
- Command line
-
hf download hf://SaylorTwift/pi/packages/coding-agent/src/modes/interactive/components/theme-selector.ts
-
curl -L -o theme-selector.ts https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/modes/interactive/components/theme-selector.ts
1.72 kB
| import { Container, type SelectItem, SelectList, type SelectListLayoutOptions } from "@earendil-works/pi-tui"; | |
| import { getAvailableThemes, getSelectListTheme } from "../theme/theme.ts"; | |
| import { DynamicBorder } from "./dynamic-border.ts"; | |
| const THEME_SELECT_LIST_LAYOUT: SelectListLayoutOptions = { | |
| minPrimaryColumnWidth: 12, | |
| maxPrimaryColumnWidth: 32, | |
| }; | |
| /** | |
| * Component that renders a theme selector | |
| */ | |
| export class ThemeSelectorComponent extends Container { | |
| private selectList: SelectList; | |
| private onPreview: (themeName: string) => void; | |
| constructor( | |
| currentTheme: string, | |
| onSelect: (themeName: string) => void, | |
| onCancel: () => void, | |
| onPreview: (themeName: string) => void, | |
| ) { | |
| super(); | |
| this.onPreview = onPreview; | |
| // Get available themes and create select items | |
| const themes = getAvailableThemes(); | |
| const themeItems: SelectItem[] = themes.map((name) => ({ | |
| value: name, | |
| label: name, | |
| description: name === currentTheme ? "(current)" : undefined, | |
| })); | |
| // Add top border | |
| this.addChild(new DynamicBorder()); | |
| // Create selector | |
| this.selectList = new SelectList(themeItems, 10, getSelectListTheme(), THEME_SELECT_LIST_LAYOUT); | |
| // Preselect current theme | |
| const currentIndex = themes.indexOf(currentTheme); | |
| if (currentIndex !== -1) { | |
| this.selectList.setSelectedIndex(currentIndex); | |
| } | |
| this.selectList.onSelect = (item) => { | |
| onSelect(item.value); | |
| }; | |
| this.selectList.onCancel = () => { | |
| onCancel(); | |
| }; | |
| this.selectList.onSelectionChange = (item) => { | |
| this.onPreview(item.value); | |
| }; | |
| this.addChild(this.selectList); | |
| // Add bottom border | |
| this.addChild(new DynamicBorder()); | |
| } | |
| getSelectList(): SelectList { | |
| return this.selectList; | |
| } | |
| } | |