UNPKG

@opentui/core

Version:

OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)

135 lines (134 loc) 5.3 kB
import type { RendererHandle, RenderLib } from "../zig.js"; export interface ClipboardRepresentation { readonly mimeType: string; readonly bytes: Uint8Array; } export type ClipboardSelection = "clipboard" | "primary"; export interface ClipboardReadOptions { readonly preferredTypes: readonly [string, ...string[]]; readonly selection?: ClipboardSelection; readonly signal?: AbortSignal; } export type ClipboardReadResult = { readonly status: "read"; readonly representation: ClipboardRepresentation; } | { readonly status: "empty" | "unsupported" | "cancelled" | "timed-out" | "limit-exceeded"; } | { readonly status: "failed"; readonly error: Error; }; export interface HostClipboardReadOptions { readonly preferredTypes: readonly [string, ...string[]]; readonly selection: ClipboardSelection; readonly maxBytes: number; readonly timeoutMs: number; readonly signal: AbortSignal; } export interface HostClipboardWriteOptions { readonly selection: ClipboardSelection; readonly timeoutMs: number; readonly signal: AbortSignal; } export type HostClipboardWriteResult = { readonly status: "written" | "unsupported" | "cancelled" | "timed-out"; } | { readonly status: "failed"; readonly error: Error; }; export type HostClipboardClearResult = { readonly status: "cleared" | "unsupported" | "cancelled" | "timed-out"; } | { readonly status: "failed"; readonly error: Error; }; export interface HostClipboardBackend { read(options: HostClipboardReadOptions): Promise<ClipboardReadResult>; writeText(text: string, options: HostClipboardWriteOptions): Promise<HostClipboardWriteResult>; clear(options: HostClipboardWriteOptions): Promise<HostClipboardClearResult>; dispose(): Promise<void>; } export type ClipboardWriteDestination = "terminal-only" | "host-only" | "best-available" | "all-available"; export interface ClipboardWriteOptions { readonly destination: ClipboardWriteDestination; readonly selection?: ClipboardSelection; readonly allowRemoteHost?: boolean; readonly signal?: AbortSignal; } export interface TerminalClipboardOperationResult { readonly status: "attempted" | "local-failure" | "not-attempted"; readonly capability: "supported" | "unsupported" | "unknown"; } export interface ClipboardWriteResult { readonly host: HostClipboardWriteResult | { readonly status: "not-attempted"; }; readonly terminal: TerminalClipboardOperationResult; } export interface ClipboardClearResult { readonly host: HostClipboardClearResult | { readonly status: "not-attempted"; }; readonly terminal: TerminalClipboardOperationResult; } export interface ClipboardService { read(options: ClipboardReadOptions): Promise<ClipboardReadResult>; writeText(text: string, options: ClipboardWriteOptions): Promise<ClipboardWriteResult>; clear(options: ClipboardWriteOptions): Promise<ClipboardClearResult>; dispose(): Promise<void>; } export interface HostClipboardOperationOptions { readonly selection?: ClipboardSelection; readonly signal?: AbortSignal; } export interface HostClipboardService { readonly maxWriteBytes: number; read(options: ClipboardReadOptions): Promise<ClipboardReadResult>; writeText(text: string, options?: HostClipboardOperationOptions): Promise<HostClipboardWriteResult>; clear(options?: HostClipboardOperationOptions): Promise<HostClipboardClearResult>; dispose(): Promise<void>; } export interface HostClipboardOptions { readonly timeoutMs?: number; readonly maxReadBytes?: number; readonly maxWriteBytes?: number; readonly maxImagePixels?: number; readonly maxConversionBytes?: number; readonly maxConcurrentOperations?: number; readonly maxProviderTransfers?: number; readonly waylandSeat?: string; } export interface TerminalClipboardAdapter { readonly remote: boolean; writeText(text: string, selection: ClipboardSelection): TerminalClipboardOperationResult; clear(selection: ClipboardSelection): TerminalClipboardOperationResult; } export interface ClipboardOptions { readonly host: HostClipboardService; readonly terminal: TerminalClipboardAdapter; } export declare const createHostClipboard: (options?: HostClipboardOptions) => HostClipboardService; export declare const createClipboard: ({ host, terminal }: ClipboardOptions) => ClipboardService; export declare enum ClipboardTarget { Clipboard = 0, Primary = 1, Select = 2, Secondary = 3 } export interface RendererClipboardBoundary { readonly capabilities: { readonly remote: boolean; readonly osc52_support: "supported" | "unsupported" | "unknown"; } | null; copyToClipboardOSC52(text: string, target?: ClipboardTarget): boolean; clearClipboardOSC52(target?: ClipboardTarget): boolean; } export declare const createRendererClipboardAdapter: (renderer: RendererClipboardBoundary) => TerminalClipboardAdapter; export declare class Clipboard { private lib; private rendererPtr; constructor(lib: RenderLib, rendererPtr: RendererHandle); copyToClipboardOSC52(text: string, target?: ClipboardTarget): boolean; clearClipboardOSC52(target?: ClipboardTarget): boolean; isOsc52Supported(): boolean; }