Download packages/pi-tui/src/layout-node.ts from SaylorTwift/kimi-code: direct link, hf CLI and curl.
- Browser
- Download file 1.36 kB
-
https://huggingface.co/SaylorTwift/kimi-code/resolve/main/packages/pi-tui/src/layout-node.ts
- Command line
-
hf download hf://SaylorTwift/kimi-code/packages/pi-tui/src/layout-node.ts
-
curl -L -o layout-node.ts https://huggingface.co/SaylorTwift/kimi-code/resolve/main/packages/pi-tui/src/layout-node.ts
1.36 kB
| import type { Component } from "./tui.ts"; | |
| export const LAYOUT_NODE = Symbol.for("@earendil-works/pi-tui/layout-node"); | |
| export interface LayoutViewport { | |
| width: number; | |
| height: number; | |
| } | |
| export interface StackLayoutEntry { | |
| component: Component; | |
| basis?: number | "auto"; | |
| grow?: number; | |
| shrink?: number; | |
| minSize?: number; | |
| maxSize?: number; | |
| visible?: (viewport: LayoutViewport) => boolean; | |
| } | |
| export interface StackLayoutNode { | |
| type: "vstack" | "hstack"; | |
| entries: readonly StackLayoutEntry[]; | |
| gap: number; | |
| align: "stretch" | "start" | "center" | "end"; | |
| } | |
| export interface ScrollLayoutState { | |
| readonly scrollTop: number; | |
| readonly primary: boolean; | |
| readonly overscroll: "chain" | "contain"; | |
| readonly viewportHeight: number; | |
| getContentWidth(width: number): number; | |
| updateLayout(contentHeight: number, viewportHeight: number, requestRender: () => void): void; | |
| } | |
| export interface ScrollLayoutNode { | |
| type: "scroll"; | |
| component: Component; | |
| state: ScrollLayoutState; | |
| } | |
| export type LayoutNode = StackLayoutNode | ScrollLayoutNode; | |
| export interface LayoutComponent extends Component { | |
| [LAYOUT_NODE](): LayoutNode; | |
| } | |
| export function getLayoutNode(component: Component): LayoutNode | undefined { | |
| const candidate = component as Partial<LayoutComponent>; | |
| return typeof candidate[LAYOUT_NODE] === "function" ? candidate[LAYOUT_NODE]() : undefined; | |
| } | |