Packages

🌈 Ink bindings for Gleam! ✨

Current section

Files

Jump to
glink src glink.ffi.mjs
Raw

src/glink.ffi.mjs

import * as ink from "ink"
import { jsx } from "../redraw/redraw.ffi.mjs"
import { to_props_object } from "./internal.ffi.mjs"
import { Size } from "./glink.mjs"
import * as $useFocus from "./glink/use_focus.mjs"
import * as $useFocusManager from "./glink/use_focus_manager.mjs"
import { Key } from "./glink/use_input.mjs"
import { Stderr } from "./glink/use_stderr.mjs"
import { Stdin } from "./glink/use_stdin.mjs"
import { Stdout } from "./glink/use_stdout.mjs"
export function box(styles, props, children) {
return jsx(ink.Box, to_props_object([...styles, ...props]), children)
}
export function newline(count) {
return jsx(ink.Newline, { count })
}
export function spacer() {
return jsx(ink.Spacer)
}
export function static_(props, children) {
return jsx(ink.Static, to_props_object(props), children)
}
export function text(props, children) {
return jsx(ink.Text, to_props_object(props), children)
}
export function transform(transformFn, children) {
return jsx(ink.Transform, { transform: transformFn }, children)
}
export function measure_element(node) {
const size = ink.measureElement(node)
return new Size(size.width, size.height)
}
export function render(component) {
return ink.render(component)
}
export function use_app() {
return ink.useApp()
}
export function use_focus(props) {
const output = ink.useFocus(to_props_object(props))
return new $useFocus.Output(output.isFocused, output.focus)
}
export function use_focus_manager() {
const output = ink.useFocusManager()
return new $useFocusManager.Output(
output.enableFocus,
output.disableFocus,
output.focusNext,
output.focusPrevious,
output.focus,
)
}
export function use_input(handler, options) {
ink.useInput((input, key) => {
handler(
input,
new Key(
key.upArrow,
key.downArrow,
key.leftArrow,
key.rightArrow,
key.pageDown,
key.pageUp,
key.return,
key.escape,
key.ctrl,
key.shift,
key.tab,
key.backspace,
key.delete,
key.meta,
),
)
}, to_props_object(options))
}
export function use_stdin() {
const stdin = ink.useStdin()
return new Stdin(
stdin.stdin,
stdin.setRawMode,
stdin.isRawModeSupported,
stdin.internal_exitOnCtrlC,
stdin.internal_eventEmitter,
)
}
export function use_stderr() {
const stderr = ink.useStderr()
return new Stderr(
stderr.stderr,
stderr.write,
)
}
export function use_stdout() {
const stdout = ink.useStdout()
return new Stdout(
stdout.stdout,
stdout.write,
)
}