- Eliminated core/ directory (252 files, 23 subdirs → distributed)
- Reduced max nesting from 9 levels to 5 levels
- Promoted tool subdirs to top level: exa/, lsp/, patch/, task/, web/
- Merged web-scrapers/ + web-search/ into web/{scrapers,search}/
- Flattened modes/interactive/ to modes/
- Split execution/ into: ipy/ (python), exec/ (bash), ssh/
- Renamed ipy/python-*.ts to ipy/*.ts (executor, kernel, etc.)
- Flattened cursor/exec-bridge.ts to cursor.ts
- Created logical groupings: config/, session/, extensibility/, export/
- Updated all imports across 500+ files
26 lines
793 B
TypeScript
26 lines
793 B
TypeScript
import type { Component } from "@oh-my-pi/pi-tui";
|
|
import { theme } from "$c/modes/theme/theme";
|
|
|
|
/**
|
|
* Dynamic border component that adjusts to viewport width.
|
|
*
|
|
* Note: When used from hooks loaded via jiti, the global `theme` may be undefined
|
|
* because jiti creates a separate module cache. Always pass an explicit color
|
|
* function when using DynamicBorder in components exported for hook use.
|
|
*/
|
|
export class DynamicBorder implements Component {
|
|
private color: (str: string) => string;
|
|
|
|
constructor(color: (str: string) => string = (str) => theme.fg("border", str)) {
|
|
this.color = color;
|
|
}
|
|
|
|
invalidate(): void {
|
|
// No cached state to invalidate currently
|
|
}
|
|
|
|
render(width: number): string[] {
|
|
return [this.color(theme.boxSharp.horizontal.repeat(Math.max(1, width)))];
|
|
}
|
|
}
|