Download packages/tui/src/util/layout.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 1.07 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/tui/src/util/layout.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/tui/src/util/layout.ts
-
curl -L -o layout.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/tui/src/util/layout.ts
1.07 kB
| import type { BaseRenderable, BoxRenderable } from "@opentui/core" | |
| const previousByParent = new WeakMap< | |
| BaseRenderable, | |
| { frameID: number; previous: WeakMap<BaseRenderable, BaseRenderable | undefined> } | |
| >() | |
| export function setPreLayoutSiblingMargin(el: BoxRenderable, margin: (previous?: BaseRenderable) => number) { | |
| // Run before Yoga layout so scroll geometry matches the rendered frame. | |
| el.onLifecyclePass = () => { | |
| const parent = el.parent | |
| if (!parent) return | |
| const cached = previousByParent.get(parent) | |
| const previous = cached?.frameID === el.ctx.frameId ? cached.previous : previousSiblings(parent, el.ctx.frameId) | |
| const value = margin(previous.get(el)) | |
| if (el.marginTop !== value) el.marginTop = value | |
| } | |
| } | |
| function previousSiblings(parent: BaseRenderable, frameID: number) { | |
| const previous = new WeakMap<BaseRenderable, BaseRenderable | undefined>() | |
| parent.getChildren().forEach((child, index, children) => previous.set(child, children[index - 1])) | |
| previousByParent.set(parent, { frameID, previous }) | |
| return previous | |
| } | |