Skip to content

create

Creates a new Element with positioning, dimensions, and event handlers - it acts as a shared base for most elements that can be found in this library.

Example

ts
import { Element, Term } from "@monstermann/signals-tui";

const element = Element.create({
    row: 0,
    col: 0,
    width: 80,
    height: 24,
});

Term.render(() => {
    // The element has to be informed that it is mounted,
    // during the rendering phase.
    element.mount();
});

Options

ts
interface ElementOptions {
    col?: MaybeReactive<number>;
    height?: MaybeReactive<number>;
    row?: MaybeReactive<number>;
    width?: MaybeReactive<number>;
    onBlur?: () => void;
    onFocus?: () => void;
    onKeypress?: (event: KeyEvent) => void;
    onMount?: () => void;
    onMouse?: (event: MouseEvent) => void;
    onPaste?: (event: PasteEvent) => void;
    onRender?: () => void;
    onUnmount?: () => void;
}

Element

ts
interface Element {
    bottom: Memo<number>;
    col: Memo<number>;
    height: Memo<number>;
    isFocused: ReadonlySignal<boolean>;
    isMounted: ReadonlySignal<boolean>;
    left: Memo<number>;
    maxHeight: Memo<number>;
    maxWidth: Memo<number>;
    onBlur: ReadonlyEmitter<void>;
    onFocus: ReadonlyEmitter<void>;
    onKeypress: ReadonlyEmitter<KeyEvent>;
    onMount: ReadonlyEmitter<void>;
    onMouse: ReadonlyEmitter<MouseEvent>;
    onPaste: ReadonlyEmitter<PasteEvent>;
    onRender: ReadonlyEmitter<void>;
    onUnmount: ReadonlyEmitter<void>;
    right: Memo<number>;
    row: Memo<number>;
    top: Memo<number>;
    width: Memo<number>;
    mount: () => void;
}