coneko-term 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,261 @@
1
+ import { type RowView } from "./terminal.js";
2
+ import { type ImageDecoder, type ImageSource } from "./images.js";
3
+ /** スクロールバーの幅(CSS ピクセル)。xterm.js 6.0.0 と同じ。 */
4
+ export declare const SCROLLBAR_WIDTH = 14;
5
+ /** `fit` の計算に使う値。長さはすべて CSS ピクセル。 */
6
+ export interface FitInput {
7
+ /** 欄の中身の幅(padding を引いたもの)。 */
8
+ width: number;
9
+ /** 欄の中身の高さ(padding を引いたもの)。 */
10
+ height: number;
11
+ /** セルの幅。 */
12
+ cellWidth: number;
13
+ /** セルの高さ。 */
14
+ cellHeight: number;
15
+ /** スクロールバーの幅。`scrollback` が 0 なら 0。 */
16
+ scrollbarWidth: number;
17
+ }
18
+ /**
19
+ * 欄の大きさから列と行の数を出す。xterm.js 6.0.0 の FitAddon(`proposeDimensions`)と同じ式:
20
+ * 幅からスクロールバーの幅を引いてセルの幅で割り、切り捨てる。列は 2 以上、行は 1 以上。
21
+ * セルの大きさが分からない(0 以下)、または欄が見えていない(幅か高さが 0 以下)ときは
22
+ * `undefined`。
23
+ */
24
+ export declare function proposeDimensions(input: FitInput): {
25
+ cols: number;
26
+ rows: number;
27
+ } | undefined;
28
+ /** 色の語(`RowView.cells` の色の並び)から作る、描画に使う色の表。 */
29
+ export declare class Palette {
30
+ readonly foreground: string;
31
+ readonly background: string;
32
+ readonly cursor: string;
33
+ /** 選択範囲の色。半透明でよい(CSS の色)。 */
34
+ readonly selection: string;
35
+ /** ブロックカーソルの下の字の色。省略したら背景の色。 */
36
+ readonly cursorText: string;
37
+ private colors;
38
+ /** `ansi` は先頭の 16 色か、256 色すべて。 */
39
+ constructor(ansi: readonly string[], foreground: string, background: string, cursor: string,
40
+ /** 選択範囲の色。半透明でよい(CSS の色)。 */
41
+ selection?: string,
42
+ /** ブロックカーソルの下の字の色。省略したら背景の色。 */
43
+ cursorText?: string);
44
+ /** パレットの `index` 番の色。 */
45
+ get(index: number): string;
46
+ /**
47
+ * 色の語を CSS の色にする。上位 8 ビットが種類(0 既定、1 パレット、2 RGB)。
48
+ * `bold` のときは、パレットの 0 から 7 を明るい色(8 から 15)にする(xterm.js の既定)。
49
+ */
50
+ resolve(word: number, isBackground: boolean, bold?: boolean): string;
51
+ }
52
+ /** 描画が `Terminal` から読むもの。画像を描くには、`ImageSource` の 3 つと `readPlacements` も要る。 */
53
+ export interface RenderSource extends Partial<ImageSource> {
54
+ /** 列の数。 */
55
+ readonly cols: number;
56
+ /** 行の数。 */
57
+ readonly rows: number;
58
+ /** スクロールバックの行数。 */
59
+ readonly scrollbackLength: number;
60
+ /** カーソルの状態。 */
61
+ readonly cursor: {
62
+ x: number;
63
+ y: number;
64
+ visible: boolean;
65
+ blinking: boolean;
66
+ shape: "block" | "underline" | "bar";
67
+ };
68
+ /** フォーカスがあるか。 */
69
+ readonly isFocused: boolean;
70
+ /** 画面の一番下から何行さかのぼって見ているか。 */
71
+ readonly viewportOffset: number;
72
+ /** 変わった行を返し、印を消す。 */
73
+ takeDirtyRows(): number[];
74
+ /** 表示位置を考えた、いま見えている `y` 行目の選択範囲 `[開始の列, 終わりの列)`。選択が無ければ `undefined`。 */
75
+ selectionSpan?(y: number): [number, number] | undefined;
76
+ /** 表示位置を考えた、いま見えている `y` 行目。 */
77
+ readViewportRow(y: number): RowView;
78
+ /** 画像の配置の並び(`WasmTerminal.placements` と同じ)。 */
79
+ readPlacements?(): ArrayLike<number>;
80
+ /** 追加のカーソルの `[x, y, 形]` の並び(`WasmTerminal.extra_cursors` と同じ)。 */
81
+ readExtraCursors?(): ArrayLike<number>;
82
+ /** 追加のカーソルの色の語 `[字の色, カーソルの色]`(`WasmTerminal.extra_cursor_colors` と同じ)。 */
83
+ readExtraCursorColors?(): ArrayLike<number>;
84
+ }
85
+ /** 描画の設定。 */
86
+ export interface RenderOptions {
87
+ /** CSS の `font-family`。 */
88
+ fontFamily: string;
89
+ /** CSS ピクセル。 */
90
+ fontSize: number;
91
+ /** 字の高さに掛ける倍率。 */
92
+ lineHeight: number;
93
+ /** 色の表。 */
94
+ palette: Palette;
95
+ }
96
+ /** `CanvasRenderer` が使う Canvas 2D の道具。テストでは入れ替える。 */
97
+ export interface RenderEnv {
98
+ /** 画面の `devicePixelRatio`。 */
99
+ devicePixelRatio(): number;
100
+ /** 次のフレームで `cb` を呼ぶよう頼む(`requestAnimationFrame`)。 */
101
+ requestFrame(cb: () => void): number;
102
+ /** `requestFrame` を取り消す。 */
103
+ cancelFrame(id: number): void;
104
+ /** 画像を読み解く道具。省くとブラウザーの機能を使う。 */
105
+ imageDecoder?: ImageDecoder;
106
+ /** いまの時刻(ミリ秒)。アニメーションのコマを進めるのに使う。省くと `performance.now()`。 */
107
+ now?(): number;
108
+ }
109
+ /** ブラウザーの `devicePixelRatio` と `requestAnimationFrame` を使う、既定の `RenderEnv`。 */
110
+ export declare const browserEnv: RenderEnv;
111
+ /** セルの大きさ。単位は CSS ピクセル。 */
112
+ export interface CellSize {
113
+ width: number;
114
+ height: number;
115
+ }
116
+ /**
117
+ * Canvas 2D でターミナルの画面を描く。
118
+ *
119
+ * - 座標はすべてデバイスピクセルの整数で扱い、canvas の実際の大きさを
120
+ * `devicePixelRatio` 倍にする。にじまない。
121
+ * - 描くのは `requestAnimationFrame` でまとめる。変わった行(と、カーソルが動いた行)だけを描く。
122
+ * 表示位置が動いたり、大きさ・フォント・色が変わったときは全部を描く。
123
+ */
124
+ export declare class CanvasRenderer {
125
+ private canvas;
126
+ private source;
127
+ private options;
128
+ private env;
129
+ private ctx;
130
+ private dpr;
131
+ /** デバイスピクセルでのセルの大きさ。 */
132
+ private cellW;
133
+ private cellH;
134
+ /** セルの上端から、ベースラインまでの距離(デバイスピクセル)。 */
135
+ private baseline;
136
+ private descent;
137
+ private frame;
138
+ private needsFull;
139
+ private extraRows;
140
+ private lastCursor;
141
+ /** いま描く追加のカーソル。行ごと。 */
142
+ private extra;
143
+ /** 追加のカーソルの色の語 `[字の色, カーソルの色]`。 */
144
+ private extraColors;
145
+ /** 直前の描画で追加のカーソルがあった行。消えたときに描き直す。 */
146
+ private lastExtraRows;
147
+ private blinkOn;
148
+ private blinkTimer;
149
+ private disposed;
150
+ private cellSizeListeners;
151
+ /** 直前の描画で、スクロールバックを見ていたか。 */
152
+ private lastOffset;
153
+ private imageCache?;
154
+ /** 今のフレームで描く画像(読み解き済みのもの)。層ごと、`z` と ID の順。 */
155
+ private layers;
156
+ /** 直前のフレームで描いた画像の印。変わったら全部を描き直す。 */
157
+ private lastImageKey;
158
+ /** 直前のフレームで、回している画像があったか(あれば次のフレームも描く)。 */
159
+ private animating;
160
+ constructor(canvas: HTMLCanvasElement, source: RenderSource, options: RenderOptions, env?: RenderEnv);
161
+ /** セルの大きさ(CSS ピクセル)。 */
162
+ get cellSize(): CellSize;
163
+ /** デバイスピクセルでのセルの大きさ。 */
164
+ get deviceCellSize(): CellSize;
165
+ /** セルの大きさが変わった(フォントの読み込みや `devicePixelRatio` の変化のあと)。 */
166
+ onCellSizeChange(listener: (size: CellSize) => void): {
167
+ dispose(): void;
168
+ };
169
+ /** 設定を入れ替えて測り直す。 */
170
+ setOptions(options: RenderOptions): void;
171
+ private font;
172
+ /**
173
+ * 字の幅と高さを測る。フォントを読み終える前に測ると代わりのフォントの値になるので、
174
+ * 読み終えたら呼び直す(`Terminal.open` がそうする)。
175
+ */
176
+ measure(): void;
177
+ /** 列と行の数に合わせて canvas の大きさを決める。 */
178
+ private applySize;
179
+ /** 列と行の数が変わった。 */
180
+ resize(): void;
181
+ /** 全部を描き直す。 */
182
+ invalidate(): void;
183
+ /** 行 `ys`(見えている画面の行番号)を次のフレームで描き直す。 */
184
+ invalidateRows(ys: Iterable<number>): void;
185
+ /** 次のフレームで描く。何回呼んでも 1 回にまとめる。 */
186
+ requestRender(): void;
187
+ /** 画面に何か起きた(書き込みなど)。カーソルの点滅を最初に戻して描く。 */
188
+ touch(): void;
189
+ private restartBlink;
190
+ private stopBlink;
191
+ private updateBlink;
192
+ /** いま描く。通常は `requestRender` で足りる。 */
193
+ render(): void;
194
+ /**
195
+ * 見えている画像の配置を集めて層に分ける。前のフレームから変わったら `true`。
196
+ * 読み解きが終わっていない画像は、終わるまで描かない(終わったら描き直す)。
197
+ */
198
+ private collectImages;
199
+ /** 行 `y` にかかる画像を、`top` から始まる 1 行ぶんだけ描く。 */
200
+ private drawImages;
201
+ /** 追加のカーソルを、いま見える行ごとに集める。さかのぼって見ているときは出さない。 */
202
+ private collectExtraCursors;
203
+ private cursorShown;
204
+ private drawRow;
205
+ /** 追加のカーソルの形(主のカーソルに従うものは、いまの主の形にする)。 */
206
+ private extraShape;
207
+ /** 追加のカーソルのブロックの、字の色と背景色。`fg`・`bg` はそのセルの色。 */
208
+ private extraBlockColors;
209
+ /** 追加のカーソルのうち、ブロックで塗らないもの(中抜き・下線・縦棒)を描く。 */
210
+ private drawExtraCursorShape;
211
+ /**
212
+ * 行のセルごとの前景色・背景色・属性を決める(反転を適用し、太字なら明るい色にする)。
213
+ * `blockX` 列は、ブロックカーソルの色にする(なければ -1)。`extraBlocks` の列は、
214
+ * 追加のカーソルのブロックの色にする。
215
+ */
216
+ private resolveRowColors;
217
+ /** 背景を塗る。同じ色が続くところは 1 回で塗る。 */
218
+ private fillBackgroundRuns;
219
+ /** 選択範囲を、背景の上に半透明で重ねる。字はこの上に描く。 */
220
+ private fillSelection;
221
+ /** 字と、下線・取り消し線を描く。 */
222
+ private drawGlyphsAndLines;
223
+ /**
224
+ * 複数のセルにまたがる字(OSC 66)を描く。`dy` は、いまの行が四角の上から何行目か。
225
+ * 描くのは四角のうち、いまの行にかかる横長の帯だけ(行ごとに描き直すため)。
226
+ * 分数の大きさのときだけ、`v`・`h` の寄せ方で四角の中に置く。
227
+ */
228
+ private drawSized;
229
+ private lineThickness;
230
+ private drawUnderline;
231
+ /** ブロックで塗る場合は字ごと `drawRow` が塗るので、ここは中抜きと下線・縦棒。 */
232
+ private drawCursorShape;
233
+ /** 後始末。 */
234
+ dispose(): void;
235
+ }
236
+ /** スクロールバー。DOM で作る。見た目は xterm.js 6.0.0(VS Code のスクロールバー)に近づける。 */
237
+ export declare class Scrollbar {
238
+ private api;
239
+ readonly track: HTMLElement;
240
+ private slider;
241
+ private cleanups;
242
+ private dragging;
243
+ /** いまのドラッグを終える関数。 */
244
+ private endDrag?;
245
+ constructor(host: HTMLElement, api: {
246
+ /** 全部の行の数(スクロールバック + 画面)。 */
247
+ total(): number;
248
+ /** 画面の行の数。 */
249
+ rows(): number;
250
+ /** 一番上に見えている行(0 が一番古い)。 */
251
+ viewportY(): number;
252
+ scrollToLine(line: number): void;
253
+ scrollLines(n: number): void;
254
+ });
255
+ private bind;
256
+ private startDrag;
257
+ /** 高さ(CSS ピクセル)と中身に合わせて、つまみの位置と大きさを決める。 */
258
+ update(heightPx: number, enabled: boolean): void;
259
+ /** 後始末。DOM から外し、ドラッグ中なら終える。 */
260
+ dispose(): void;
261
+ }