@threestarsoftware/tssgrid 0.1.4 → 0.1.5
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.
- package/CHANGELOG.md +15 -0
- package/README.md +28 -0
- package/package.json +1 -1
- package/plugins/tss-filter.css +9 -0
- package/plugins/tss-filter.js +48 -9
- package/src/tssgrid.css +16 -0
- package/src/tssgrid.d.ts +464 -450
- package/src/tssgrid.js +104 -15
package/src/tssgrid.d.ts
CHANGED
|
@@ -1,450 +1,464 @@
|
|
|
1
|
-
// =============================================================================
|
|
2
|
-
// TssGrid 型定義(公開APIの契約)
|
|
3
|
-
// - これが「外から呼べるもの」の正本。エディタ補完にはここに宣言したものだけ出る
|
|
4
|
-
// =内部メソッド(setCell / pushCmd / place など)は候補に出ず、自然に守られる。
|
|
5
|
-
// - 低レベルだが公開しているメソッドは JSDoc に「通常は○○を推奨」と明記(逃げ道は塞がない)。
|
|
6
|
-
// - v1 ドラフト。実装と差異を見つけたら本ファイルを正として揃える/直す。
|
|
7
|
-
// - 使い方:
|
|
8
|
-
// <script src="tssgrid.js"> 読み込み時 … グローバル TssGrid / HistoryManager に型が付く
|
|
9
|
-
// import { TssGrid } from 'tssgrid' … ESM entry 整備後(§npm化)に有効
|
|
10
|
-
// =============================================================================
|
|
11
|
-
|
|
12
|
-
export type MoveDir = 'down' | 'up' | 'right' | 'left' | 'none';
|
|
13
|
-
export type CellType = 'text' | 'number' | 'date' | 'time' | 'dropdown' | 'checkbox';
|
|
14
|
-
export type ChangeSource = 'edit' | 'paste' | 'fill' | 'delete' | 'undo' | 'redo';
|
|
15
|
-
|
|
16
|
-
/** 1つの値変更(onBeforeChange / onAfterChange の配列要素)。newValue を書き換えると整形確定。 */
|
|
17
|
-
export interface ChangeItem {
|
|
18
|
-
r: number;
|
|
19
|
-
c: number;
|
|
20
|
-
oldValue: any;
|
|
21
|
-
newValue: any;
|
|
22
|
-
source: ChangeSource;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** 選択範囲。r0/c0=開始、r1/c1=終了(昇順とは限らない)。 */
|
|
26
|
-
export interface SelectionRange { r0: number; c0: number; r1: number; c1: number; }
|
|
27
|
-
export interface CellCoord { r: number; c: number; }
|
|
28
|
-
export interface SelectionInfo { range: SelectionRange; active: CellCoord; extent: CellCoord; }
|
|
29
|
-
|
|
30
|
-
/** validator が弾いたセル(onInvalid / getInvalidCells)。 */
|
|
31
|
-
export interface Rejection { r: number; c: number; value: any; code?: string; level?: string; message?: string; }
|
|
32
|
-
/** 読み取り専用セルへの変更を弾いた時(onReadOnly)。 */
|
|
33
|
-
export interface ReadOnlyBlock { r: number; c: number; value: any; }
|
|
34
|
-
|
|
35
|
-
/** 行/列の挿入・削除の情報(onStructureChange / onBeforeStructureChange)。 */
|
|
36
|
-
export interface StructureInfo { type: 'insertRow' | 'insertRows' | 'deleteRows' | 'insertCol' | 'deleteCols'; undo?: boolean; [k: string]: any; }
|
|
37
|
-
|
|
38
|
-
/** validator の戻り値: true=OK / 文字列=エラー文 / オブジェクト=メッセージカタログ解決用。 */
|
|
39
|
-
export type ValidatorResult = true | string | { code: string; params?: Record<string, any>; level?: string };
|
|
40
|
-
|
|
41
|
-
/** 列定義(options.columns[c])。`data` は data オブジェクトのキー(または列 index)。 */
|
|
42
|
-
export interface ColumnDef {
|
|
43
|
-
/** data オブジェクトのキー。配列データなら省略可(位置で対応)。 */
|
|
44
|
-
data?: string | number;
|
|
45
|
-
/** ヘッダ見出し(headers より優先)。 */
|
|
46
|
-
title?: string;
|
|
47
|
-
/** セルタイプ。既定 'text'。 */
|
|
48
|
-
type?: CellType;
|
|
49
|
-
/** dropdown の選択肢。 */
|
|
50
|
-
options?: Array<string | { value: string; label?: string }>;
|
|
51
|
-
/** 列ごとの初期幅(px)。列定義に同居=並べ替え/コピペで幅が追従。 */
|
|
52
|
-
width?: number;
|
|
53
|
-
/** false でこの列だけリサイズ禁止。 */
|
|
54
|
-
resizable?: boolean;
|
|
55
|
-
/** 列既定の水平/垂直整列。 */
|
|
56
|
-
align?: 'left' | 'center' | 'right';
|
|
57
|
-
valign?: 'top' | 'middle' | 'bottom';
|
|
58
|
-
/** 列単位の読み取り専用。関数でセル単位判定も可。 */
|
|
59
|
-
readOnly?: boolean | ((value: any, cell: CellCoord) => boolean);
|
|
60
|
-
/** 入力検証。編集/貼付/フィルの全経路に効く。 */
|
|
61
|
-
validator?: (value: any, cell: CellCoord) => ValidatorResult;
|
|
62
|
-
/** カスタム編集UI(薄いオブジェクト契約 or それを返す関数)。 */
|
|
63
|
-
editor?: EditorDef | (() => EditorDef);
|
|
64
|
-
/** 入力の正規化(保存値へ変換)。 */
|
|
65
|
-
parse?: (input: string, cell: CellCoord) => any;
|
|
66
|
-
/** 表示の整形(保存値→表示)。文字列 or 宣言的 CellFormat。 */
|
|
67
|
-
format?: string | object | ((value: any, cell: CellCoord) => string);
|
|
68
|
-
/** 数値型: 千区切り表示。 */
|
|
69
|
-
thousands?: boolean;
|
|
70
|
-
/** 数値型: 接頭辞(例 '¥')。 */
|
|
71
|
-
prefix?: string;
|
|
72
|
-
/** 値/行を見てセルに付与する CSS クラス(条件付き書式)。 */
|
|
73
|
-
cellClass?: (r: number, c: number, value: any, row: any) => string;
|
|
74
|
-
/** セル単位のインラインスタイル(連続色・データバー等)。 */
|
|
75
|
-
cellStyle?: (r: number, c: number, value: any, row: any) => Partial<CSSStyleDeclaration> | Record<string, string>;
|
|
76
|
-
/** true で表示だけ生HTML(値はテキスト保存のまま)。 */
|
|
77
|
-
html?: boolean;
|
|
78
|
-
/** 列単位の折り返し。 */
|
|
79
|
-
wordWrap?: boolean;
|
|
80
|
-
/** 複数行(改行)入力を有効化。編集は隠し textarea(IME 直打ち対応)、表示は改行保持(pre-wrap)。行高は自動で伸びないので rowHeights 等で確保する。 */
|
|
81
|
-
multiline?: boolean;
|
|
82
|
-
/** 空セルの薄いヒント文字。 */
|
|
83
|
-
placeholder?: string;
|
|
84
|
-
[k: string]: any;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** new TssGrid(container, options) のオプション。 */
|
|
88
|
-
export interface TssGridOptions {
|
|
89
|
-
headers?: string[];
|
|
90
|
-
/** 初期データ。2次元配列 or オブジェクト配列。 */
|
|
91
|
-
data?: any[][] | Record<string, any>[];
|
|
92
|
-
/** 渡すと複数グリッドで Undo を共有。 */
|
|
93
|
-
history?: HistoryManager;
|
|
94
|
-
name?: string;
|
|
95
|
-
showDump?: boolean;
|
|
96
|
-
/** Enter 確定後の移動方向(既定 'down')。Shift で逆。実行時に書換可。 */
|
|
97
|
-
enterMoves?: MoveDir;
|
|
98
|
-
/** Tab 確定後の移動方向(既定 'right')。Shift で逆。実行時に書換可。 */
|
|
99
|
-
tabMoves?: MoveDir;
|
|
100
|
-
initialCell?: [number, number] | { r: number; c: number | string };
|
|
101
|
-
/** 入力フロー制御。Enter/Tab の移動先を上書き(null で既定方向)。入力セルだけ巡回できる。 */
|
|
102
|
-
nextCell?: (a: { r: number; c: number; key: string; shift: boolean }) => { r: number; c: number } | null;
|
|
103
|
-
columns?: ColumnDef[];
|
|
104
|
-
/** 検証NG時。'revert'=元に戻す / 'keep'=赤く警告して残す。 */
|
|
105
|
-
invalidMode?: 'revert' | 'keep';
|
|
106
|
-
invalidTitle?: boolean;
|
|
107
|
-
/** エラーの共通メッセージカタログ。 */
|
|
108
|
-
messages?: Record<string, any> | ((info: { code: string; params?: any; level?: string }) => string);
|
|
109
|
-
pasteOverflow?: 'clip' | 'error';
|
|
110
|
-
/** 貼付元の行数がグリッド行数を超える時、不足分を insertRows で一括生成してから貼る(既定 false=従来のクランプ)。行生成+値貼付は1回の undo で戻る。maxRows 上限内・超過分は pasteOverflow に従う。 */
|
|
111
|
-
pasteAutoGrow?: boolean;
|
|
112
|
-
colWidths?: number[] | Record<string, number>;
|
|
113
|
-
rowHeights?: number[] | Record<string, number>;
|
|
114
|
-
defaultColWidth?: number;
|
|
115
|
-
defaultRowHeight?: number;
|
|
116
|
-
minColWidth?: number;
|
|
117
|
-
minRowHeight?: number;
|
|
118
|
-
resizeMode?: 'preview' | 'live';
|
|
119
|
-
/** 左から固定する列数。freezeCols(n) でも変更可。 */
|
|
120
|
-
frozenCols?: number;
|
|
121
|
-
/** 上から固定する行数。freezeRows(n) でも変更可。frozenCols 併用で四隅固定。 */
|
|
122
|
-
frozenRows?: number;
|
|
123
|
-
/** ヘッダ結合(複数段見出し)。最下段がリーフ=実列。 */
|
|
124
|
-
nestedHeaders?: Array<Array<string | { label: string; colspan?: number }>>;
|
|
125
|
-
width?: number | string;
|
|
126
|
-
height?: number | string;
|
|
127
|
-
resizeCols?: boolean;
|
|
128
|
-
resizeRows?: boolean;
|
|
129
|
-
/** false で選択カーソルを非表示(表示専用グリッド向け・内部選択は保持)。 */
|
|
130
|
-
cursor?: boolean;
|
|
131
|
-
stretchH?: 'none' | 'last' | 'all';
|
|
132
|
-
rowHeaders?: boolean;
|
|
133
|
-
/** 行番号列の幅(px)。既定 40。大量行で桁数が増える時に広げる。 */
|
|
134
|
-
rowHeaderWidth?: number;
|
|
135
|
-
/** 行ヘッダの表示内容。未指定=行番号(r+1) / false=数字なし(空) / (r)=>文字列=カスタム表示。 */
|
|
136
|
-
rowHeaderLabel?: false | ((r: number) => string | number);
|
|
137
|
-
/** 行のドラッグ並べ替え。true=行ヘッダーセルの ⠿ アイコンを掴んで移動 / 'header'=行ヘッダーセル全体が移動ハンドル(クリック=選択/ドラッグ=移動)。 */
|
|
138
|
-
rowReorder?: boolean | 'header';
|
|
139
|
-
/** 行ヘッダーの ⠿ マークの位置。'before'=番号の前(既定)/ 'after'=番号の後 / false=マークを出さない。 */
|
|
140
|
-
rowReorderMark?: 'before' | 'after' | false;
|
|
141
|
-
/**
|
|
142
|
-
*
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
export
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
*
|
|
336
|
-
*
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
/**
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
// ----
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
|
|
433
|
-
/**
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// TssGrid 型定義(公開APIの契約)
|
|
3
|
+
// - これが「外から呼べるもの」の正本。エディタ補完にはここに宣言したものだけ出る
|
|
4
|
+
// =内部メソッド(setCell / pushCmd / place など)は候補に出ず、自然に守られる。
|
|
5
|
+
// - 低レベルだが公開しているメソッドは JSDoc に「通常は○○を推奨」と明記(逃げ道は塞がない)。
|
|
6
|
+
// - v1 ドラフト。実装と差異を見つけたら本ファイルを正として揃える/直す。
|
|
7
|
+
// - 使い方:
|
|
8
|
+
// <script src="tssgrid.js"> 読み込み時 … グローバル TssGrid / HistoryManager に型が付く
|
|
9
|
+
// import { TssGrid } from 'tssgrid' … ESM entry 整備後(§npm化)に有効
|
|
10
|
+
// =============================================================================
|
|
11
|
+
|
|
12
|
+
export type MoveDir = 'down' | 'up' | 'right' | 'left' | 'none';
|
|
13
|
+
export type CellType = 'text' | 'number' | 'date' | 'time' | 'dropdown' | 'checkbox';
|
|
14
|
+
export type ChangeSource = 'edit' | 'paste' | 'fill' | 'delete' | 'undo' | 'redo';
|
|
15
|
+
|
|
16
|
+
/** 1つの値変更(onBeforeChange / onAfterChange の配列要素)。newValue を書き換えると整形確定。 */
|
|
17
|
+
export interface ChangeItem {
|
|
18
|
+
r: number;
|
|
19
|
+
c: number;
|
|
20
|
+
oldValue: any;
|
|
21
|
+
newValue: any;
|
|
22
|
+
source: ChangeSource;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** 選択範囲。r0/c0=開始、r1/c1=終了(昇順とは限らない)。 */
|
|
26
|
+
export interface SelectionRange { r0: number; c0: number; r1: number; c1: number; }
|
|
27
|
+
export interface CellCoord { r: number; c: number; }
|
|
28
|
+
export interface SelectionInfo { range: SelectionRange; active: CellCoord; extent: CellCoord; }
|
|
29
|
+
|
|
30
|
+
/** validator が弾いたセル(onInvalid / getInvalidCells)。 */
|
|
31
|
+
export interface Rejection { r: number; c: number; value: any; code?: string; level?: string; message?: string; }
|
|
32
|
+
/** 読み取り専用セルへの変更を弾いた時(onReadOnly)。 */
|
|
33
|
+
export interface ReadOnlyBlock { r: number; c: number; value: any; }
|
|
34
|
+
|
|
35
|
+
/** 行/列の挿入・削除の情報(onStructureChange / onBeforeStructureChange)。 */
|
|
36
|
+
export interface StructureInfo { type: 'insertRow' | 'insertRows' | 'deleteRows' | 'insertCol' | 'deleteCols'; undo?: boolean; [k: string]: any; }
|
|
37
|
+
|
|
38
|
+
/** validator の戻り値: true=OK / 文字列=エラー文 / オブジェクト=メッセージカタログ解決用。 */
|
|
39
|
+
export type ValidatorResult = true | string | { code: string; params?: Record<string, any>; level?: string };
|
|
40
|
+
|
|
41
|
+
/** 列定義(options.columns[c])。`data` は data オブジェクトのキー(または列 index)。 */
|
|
42
|
+
export interface ColumnDef {
|
|
43
|
+
/** data オブジェクトのキー。配列データなら省略可(位置で対応)。 */
|
|
44
|
+
data?: string | number;
|
|
45
|
+
/** ヘッダ見出し(headers より優先)。 */
|
|
46
|
+
title?: string;
|
|
47
|
+
/** セルタイプ。既定 'text'。 */
|
|
48
|
+
type?: CellType;
|
|
49
|
+
/** dropdown の選択肢。 */
|
|
50
|
+
options?: Array<string | { value: string; label?: string }>;
|
|
51
|
+
/** 列ごとの初期幅(px)。列定義に同居=並べ替え/コピペで幅が追従。 */
|
|
52
|
+
width?: number;
|
|
53
|
+
/** false でこの列だけリサイズ禁止。 */
|
|
54
|
+
resizable?: boolean;
|
|
55
|
+
/** 列既定の水平/垂直整列。 */
|
|
56
|
+
align?: 'left' | 'center' | 'right';
|
|
57
|
+
valign?: 'top' | 'middle' | 'bottom';
|
|
58
|
+
/** 列単位の読み取り専用。関数でセル単位判定も可。 */
|
|
59
|
+
readOnly?: boolean | ((value: any, cell: CellCoord) => boolean);
|
|
60
|
+
/** 入力検証。編集/貼付/フィルの全経路に効く。 */
|
|
61
|
+
validator?: (value: any, cell: CellCoord) => ValidatorResult;
|
|
62
|
+
/** カスタム編集UI(薄いオブジェクト契約 or それを返す関数)。 */
|
|
63
|
+
editor?: EditorDef | (() => EditorDef);
|
|
64
|
+
/** 入力の正規化(保存値へ変換)。 */
|
|
65
|
+
parse?: (input: string, cell: CellCoord) => any;
|
|
66
|
+
/** 表示の整形(保存値→表示)。文字列 or 宣言的 CellFormat。 */
|
|
67
|
+
format?: string | object | ((value: any, cell: CellCoord) => string);
|
|
68
|
+
/** 数値型: 千区切り表示。 */
|
|
69
|
+
thousands?: boolean;
|
|
70
|
+
/** 数値型: 接頭辞(例 '¥')。 */
|
|
71
|
+
prefix?: string;
|
|
72
|
+
/** 値/行を見てセルに付与する CSS クラス(条件付き書式)。 */
|
|
73
|
+
cellClass?: (r: number, c: number, value: any, row: any) => string;
|
|
74
|
+
/** セル単位のインラインスタイル(連続色・データバー等)。 */
|
|
75
|
+
cellStyle?: (r: number, c: number, value: any, row: any) => Partial<CSSStyleDeclaration> | Record<string, string>;
|
|
76
|
+
/** true で表示だけ生HTML(値はテキスト保存のまま)。 */
|
|
77
|
+
html?: boolean;
|
|
78
|
+
/** 列単位の折り返し。 */
|
|
79
|
+
wordWrap?: boolean;
|
|
80
|
+
/** 複数行(改行)入力を有効化。編集は隠し textarea(IME 直打ち対応)、表示は改行保持(pre-wrap)。行高は自動で伸びないので rowHeights 等で確保する。 */
|
|
81
|
+
multiline?: boolean;
|
|
82
|
+
/** 空セルの薄いヒント文字。 */
|
|
83
|
+
placeholder?: string;
|
|
84
|
+
[k: string]: any;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** new TssGrid(container, options) のオプション。 */
|
|
88
|
+
export interface TssGridOptions {
|
|
89
|
+
headers?: string[];
|
|
90
|
+
/** 初期データ。2次元配列 or オブジェクト配列。 */
|
|
91
|
+
data?: any[][] | Record<string, any>[];
|
|
92
|
+
/** 渡すと複数グリッドで Undo を共有。 */
|
|
93
|
+
history?: HistoryManager;
|
|
94
|
+
name?: string;
|
|
95
|
+
showDump?: boolean;
|
|
96
|
+
/** Enter 確定後の移動方向(既定 'down')。Shift で逆。実行時に書換可。 */
|
|
97
|
+
enterMoves?: MoveDir;
|
|
98
|
+
/** Tab 確定後の移動方向(既定 'right')。Shift で逆。実行時に書換可。 */
|
|
99
|
+
tabMoves?: MoveDir;
|
|
100
|
+
initialCell?: [number, number] | { r: number; c: number | string };
|
|
101
|
+
/** 入力フロー制御。Enter/Tab の移動先を上書き(null で既定方向)。入力セルだけ巡回できる。 */
|
|
102
|
+
nextCell?: (a: { r: number; c: number; key: string; shift: boolean }) => { r: number; c: number } | null;
|
|
103
|
+
columns?: ColumnDef[];
|
|
104
|
+
/** 検証NG時。'revert'=元に戻す / 'keep'=赤く警告して残す。 */
|
|
105
|
+
invalidMode?: 'revert' | 'keep';
|
|
106
|
+
invalidTitle?: boolean;
|
|
107
|
+
/** エラーの共通メッセージカタログ。 */
|
|
108
|
+
messages?: Record<string, any> | ((info: { code: string; params?: any; level?: string }) => string);
|
|
109
|
+
pasteOverflow?: 'clip' | 'error';
|
|
110
|
+
/** 貼付元の行数がグリッド行数を超える時、不足分を insertRows で一括生成してから貼る(既定 false=従来のクランプ)。行生成+値貼付は1回の undo で戻る。maxRows 上限内・超過分は pasteOverflow に従う。 */
|
|
111
|
+
pasteAutoGrow?: boolean;
|
|
112
|
+
colWidths?: number[] | Record<string, number>;
|
|
113
|
+
rowHeights?: number[] | Record<string, number>;
|
|
114
|
+
defaultColWidth?: number;
|
|
115
|
+
defaultRowHeight?: number;
|
|
116
|
+
minColWidth?: number;
|
|
117
|
+
minRowHeight?: number;
|
|
118
|
+
resizeMode?: 'preview' | 'live';
|
|
119
|
+
/** 左から固定する列数。freezeCols(n) でも変更可。 */
|
|
120
|
+
frozenCols?: number;
|
|
121
|
+
/** 上から固定する行数。freezeRows(n) でも変更可。frozenCols 併用で四隅固定。 */
|
|
122
|
+
frozenRows?: number;
|
|
123
|
+
/** ヘッダ結合(複数段見出し)。最下段がリーフ=実列。 */
|
|
124
|
+
nestedHeaders?: Array<Array<string | { label: string; colspan?: number }>>;
|
|
125
|
+
width?: number | string;
|
|
126
|
+
height?: number | string;
|
|
127
|
+
resizeCols?: boolean;
|
|
128
|
+
resizeRows?: boolean;
|
|
129
|
+
/** false で選択カーソルを非表示(表示専用グリッド向け・内部選択は保持)。 */
|
|
130
|
+
cursor?: boolean;
|
|
131
|
+
stretchH?: 'none' | 'last' | 'all';
|
|
132
|
+
rowHeaders?: boolean;
|
|
133
|
+
/** 行番号列の幅(px)。既定 40。大量行で桁数が増える時に広げる。 */
|
|
134
|
+
rowHeaderWidth?: number;
|
|
135
|
+
/** 行ヘッダの表示内容。未指定=行番号(r+1) / false=数字なし(空) / (r)=>文字列=カスタム表示。 */
|
|
136
|
+
rowHeaderLabel?: false | ((r: number) => string | number);
|
|
137
|
+
/** 行のドラッグ並べ替え。true=行ヘッダーセルの ⠿ アイコンを掴んで移動 / 'header'=行ヘッダーセル全体が移動ハンドル(クリック=選択/ドラッグ=移動)。 */
|
|
138
|
+
rowReorder?: boolean | 'header';
|
|
139
|
+
/** 行ヘッダーの ⠿ マークの位置。'before'=番号の前(既定)/ 'after'=番号の後 / false=マークを出さない。 */
|
|
140
|
+
rowReorderMark?: 'before' | 'after' | false;
|
|
141
|
+
/** 右端に非データの「削除列」(🗑)を1列出す。既定 false。クリックで deleteRows(右クリック→行を削除と同一経路・1 undo で復活)。
|
|
142
|
+
* 最後の1行(0行にはできない)は削除でなく「中身クリア(行は残す)」=🗑 は無効にならず内容だけ空に(readOnly はスキップ・1 undo で復活)。
|
|
143
|
+
* minRows>1 のロック時は下限で🗑 を無効表示(削除もクリアもしない)。allowDeleteRows:false なら列ごと出さない。
|
|
144
|
+
* getRows/getData/toCSV・列インデックス・列選択/リサイズ/reorder の対象外。 */
|
|
145
|
+
rowDelete?: boolean;
|
|
146
|
+
/** 削除列の幅(px)。既定 36。 */
|
|
147
|
+
rowDeleteWidth?: number;
|
|
148
|
+
/** 仮想スクロール(固定行高ウィンドウイング)。大量行を可視窓だけ描画。true か { buffer:窓上下バッファ行数(既定6) }。
|
|
149
|
+
* 制約(v1): 行高一定/固定行列・折り返し・セル結合は非対応(指定時は自動無効化)。 */
|
|
150
|
+
virtual?: boolean | { buffer?: number };
|
|
151
|
+
colHeaders?: boolean;
|
|
152
|
+
hiddenColumns?: number[];
|
|
153
|
+
wordWrap?: boolean;
|
|
154
|
+
/** multiline 列の Enter 挙動。'commit'(既定・Excel風): Enter=確定 / Alt+Enter=改行。'newline'(メモ帳風): Enter=改行 / Ctrl+Enter=確定。 */
|
|
155
|
+
multilineEnter?: 'commit' | 'newline';
|
|
156
|
+
/** multiline セル右上の「複数行」ヒント表示(既定 true)。色は CSS 変数 --tg-ml-mark。false で非表示。 */
|
|
157
|
+
multilineMark?: boolean;
|
|
158
|
+
/** multiline 編集時に伸びる箱の最大行数(既定 10)。超えた分はボックス内スクロール。ビューポート/wrap を超える時はそちらが優先。 */
|
|
159
|
+
multilineEditMaxLines?: number;
|
|
160
|
+
placeholder?: string;
|
|
161
|
+
className?: string;
|
|
162
|
+
/** false でフィル完全OFF。詳細指定も可。 */
|
|
163
|
+
fillHandle?: boolean | { direction?: 'vertical' | 'horizontal' | 'both'; autoInsertRow?: boolean };
|
|
164
|
+
autoColumnSize?: boolean | number;
|
|
165
|
+
copyPaste?: boolean;
|
|
166
|
+
/** 共有エディタへのブラウザ自動入力(Chrome の「ポイントカード/住所/支払い」等)を強めに抑止する。既定 false。
|
|
167
|
+
* 通常は name + autocomplete='off' で抑止するが、Chrome は loyalty/payment 系で 'off' を無視することがある。
|
|
168
|
+
* true にすると autocomplete='new-password' に切り替えて確実に止める(副作用として環境により鍵アイコンや生成PW提案が出る場合あり=opt-in)。
|
|
169
|
+
* 周囲に自前のラベル付き `<input>`(フォーム塊)を並べる埋め込み画面で有効。 */
|
|
170
|
+
suppressAutofill?: boolean;
|
|
171
|
+
minSpareRows?: number;
|
|
172
|
+
autoWrapRow?: boolean;
|
|
173
|
+
autoWrapCol?: boolean;
|
|
174
|
+
minRows?: number;
|
|
175
|
+
maxRows?: number;
|
|
176
|
+
minCols?: number;
|
|
177
|
+
maxCols?: number;
|
|
178
|
+
/** グリッド全体を読み取り専用(ビューア用途)。 */
|
|
179
|
+
readOnly?: boolean;
|
|
180
|
+
/** 右クリックメニュー。true=既定 / false=無効 / 配列 or {items} =構成(組込キー文字列+カスタム MenuItem)。 */
|
|
181
|
+
contextMenu?: boolean | Array<string | MenuItem> | { items: Array<string | MenuItem> };
|
|
182
|
+
/** Ctrl+ヘッダで行/列を飛び飛び複数選択(既定 true)。false で Ctrl+クリックは単一選択に戻る。 */
|
|
183
|
+
disjointSelect?: boolean;
|
|
184
|
+
allowInsertRows?: boolean;
|
|
185
|
+
allowDeleteRows?: boolean;
|
|
186
|
+
allowInsertCols?: boolean;
|
|
187
|
+
allowDeleteCols?: boolean;
|
|
188
|
+
shortcuts?: any[];
|
|
189
|
+
/** プラグイン(関数 or 登録名)。init(grid) で初期化。 */
|
|
190
|
+
plugins?: any[];
|
|
191
|
+
|
|
192
|
+
// ---- イベント / コールバック -------------------------------------------
|
|
193
|
+
/** 確定の直前。検証・自動整形。false で全取消、change.newValue 書換で整形。 */
|
|
194
|
+
onBeforeChange?: (changes: ChangeItem[], source: ChangeSource) => boolean | void;
|
|
195
|
+
/** 確定の直後(undo/redo 含む)。保存・再計算に。 */
|
|
196
|
+
onAfterChange?: (changes: ChangeItem[], source: ChangeSource) => void;
|
|
197
|
+
onEditStart?: (info: { r: number; c: number; value: any }) => void;
|
|
198
|
+
onEditEnd?: (info: { r: number; c: number; oldValue: any; newValue: any; canceled: boolean }) => void;
|
|
199
|
+
onSelectionChange?: (info: SelectionInfo) => void;
|
|
200
|
+
onBeforeSelectionChange?: (info: SelectionInfo) => boolean | void;
|
|
201
|
+
onBeforePaste?: (data: string[][]) => boolean | string[][] | void;
|
|
202
|
+
onAfterPaste?: (data: string[][], info: { range: SelectionRange }) => void;
|
|
203
|
+
onBeforeCopy?: (data: string[][], info: { range: SelectionRange }) => boolean | string[][] | void;
|
|
204
|
+
onBeforeCut?: (data: string[][], info: { range: SelectionRange }) => boolean | string[][] | void;
|
|
205
|
+
onAfterCopy?: (data: string[][], info: { range: SelectionRange; cut: boolean }) => void;
|
|
206
|
+
onBeforeStructureChange?: (info: StructureInfo) => boolean | void;
|
|
207
|
+
onStructureChange?: (info: StructureInfo) => void;
|
|
208
|
+
/** 遅延ロード(push): 描画窓が変わった時に呼ぶ (start,end)。未取得(PENDING)行を fillRows で埋めるトリガ。 */
|
|
209
|
+
onViewportChange?: (start: number, end: number) => void;
|
|
210
|
+
/** 遅延ロード(push): dataComplete=false で sort/filter 要求が来た時に呼ぶ。エンジンはローカル計算せず、これで通知+パージ=プラグインがサーバ側で並替/絞込して setRowCount+fillRows し直す。 */
|
|
211
|
+
onSortFilterChange?: (state: { type: 'sort' | 'filter'; sort?: any; filter?: any }) => void;
|
|
212
|
+
onBeforeAutofill?: (src: SelectionRange, target: SelectionRange) => boolean | void;
|
|
213
|
+
onAfterAutofill?: (src: SelectionRange, target: SelectionRange) => void;
|
|
214
|
+
onBeforeKeyDown?: (e: KeyboardEvent) => boolean | void;
|
|
215
|
+
onHeaderClick?: (c: number, e: MouseEvent) => boolean | void;
|
|
216
|
+
/** 各列ヘッダ th の生成後に呼ぶ(再描画毎に自動で再実行)。ソートアイコン等の要素差し込み用。 */
|
|
217
|
+
onHeaderRender?: (th: HTMLTableCellElement, c: number) => void;
|
|
218
|
+
onInvalid?: (rejections: Rejection[], source: ChangeSource) => void;
|
|
219
|
+
onReadOnly?: (blocked: ReadOnlyBlock[], source: ChangeSource) => void;
|
|
220
|
+
onChange?: (grid: TssGrid) => void;
|
|
221
|
+
onPasteOverflow?: (info: { anchor: CellCoord; height: number; width: number; rows: number; cols: number; overRows: number; overCols: number }) => void;
|
|
222
|
+
|
|
223
|
+
[k: string]: any;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export interface CsvOptions {
|
|
227
|
+
headers?: boolean; formatted?: boolean; skipEmpty?: boolean; eol?: string;
|
|
228
|
+
/** CSV数式インジェクション無害化(既定 true)。=@+- 始まりの非数値セルを ' で保護。生値が要る用途は false。 */
|
|
229
|
+
sanitizeFormula?: boolean;
|
|
230
|
+
delimiter?: string; [k: string]: any;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** カスタム編集UIが `open` で受け取る ctx。確定は commit=本体の関所(検証/整形/readOnly/履歴)を通る。 */
|
|
234
|
+
export interface EditorContext {
|
|
235
|
+
grid: TssGrid; r: number; c: number; value: any; td: HTMLTableCellElement | null;
|
|
236
|
+
commit(value?: any): void; cancel(): void;
|
|
237
|
+
/** inline エディタのみ: true。 */
|
|
238
|
+
inline?: boolean;
|
|
239
|
+
/** inline エディタのみ: 打鍵/IME が入る本体の共有 input(読み取り・listen 用)。 */
|
|
240
|
+
input?: HTMLInputElement | HTMLTextAreaElement;
|
|
241
|
+
/** inline エディタのみ: 共有 input の値を差し替える(候補で置換する用・確定はしない)。 */
|
|
242
|
+
setValue?(value: any): void;
|
|
243
|
+
/**
|
|
244
|
+
* inline エディタのみ: 打たれた文字を**この列の保存値**に解釈する(=セルの確定と同じ読み方。
|
|
245
|
+
* `columns[c].parse` があればそれ、無ければ型ごとの組込=date/time/number)。解釈できなければ `null`。
|
|
246
|
+
* **エディタが独自パーサを持つと本体と食い違う**ので、打った内容に追従する実装は必ずこれを使うこと。
|
|
247
|
+
*/
|
|
248
|
+
parseCell?(value: any): any;
|
|
249
|
+
[k: string]: any;
|
|
250
|
+
}
|
|
251
|
+
/** カスタム編集UIの契約(`columns[c].editor`)。 */
|
|
252
|
+
export interface EditorDef {
|
|
253
|
+
open(ctx: EditorContext): void;
|
|
254
|
+
close?(): void;
|
|
255
|
+
/** セル右端に出すアイコン。 */
|
|
256
|
+
icon?: string;
|
|
257
|
+
/** シングルクリックで開く(ドロップダウン同様)。 */
|
|
258
|
+
openOnClick?: boolean;
|
|
259
|
+
/**
|
|
260
|
+
* `true` で「本体の共有 input に乗るエディタ」=**打鍵の1文字目・IME 直打ちが素のテキスト列と同じに効く**。
|
|
261
|
+
* 入力は本体(IME 堅牢な共有 input)に任せ、エディタは候補表示等だけを担当する型。text/number 系の列で有効
|
|
262
|
+
* (dropdown/checkbox/ネイティブ日付は従来どおり対象外)。未指定なら従来のフォーカスを奪うエディタ(挙動不変)。
|
|
263
|
+
*/
|
|
264
|
+
inline?: boolean;
|
|
265
|
+
/** inline のみ: 本体より先にキーを受ける(**IME 変換中も呼ばれる**=変換中の↑↓を奪わない実装が書ける)。`false` で本体既定を止める。 */
|
|
266
|
+
onKeyDown?(e: KeyboardEvent, ctx: EditorContext): boolean | void;
|
|
267
|
+
/** inline のみ: 共有 input の入力通知(候補の絞り込み用)。 */
|
|
268
|
+
onInput?(value: string, ctx: EditorContext): void;
|
|
269
|
+
[k: string]: any;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** 右クリックの対象種別。カスタムメニュー項目の name/disabled/hidden の第2引数、callback の {ctx} で受け取る。 */
|
|
273
|
+
export interface MenuContext { on: 'col' | 'row' | 'cell' | 'corner'; r: number; c: number; }
|
|
274
|
+
|
|
275
|
+
/** 右クリックメニューのカスタム項目。name/disabled/hidden は関数なら (range, ctx) で呼ばれる。 */
|
|
276
|
+
export interface MenuItem {
|
|
277
|
+
name?: string | ((range: SelectionRange, ctx: MenuContext) => string);
|
|
278
|
+
callback?: (arg: { range: SelectionRange; key?: string; ctx: MenuContext }) => void;
|
|
279
|
+
disabled?: boolean | ((range: SelectionRange, ctx: MenuContext) => boolean);
|
|
280
|
+
hidden?: boolean | ((range: SelectionRange, ctx: MenuContext) => boolean);
|
|
281
|
+
danger?: boolean; separator?: boolean; key?: string; submenu?: Array<string | MenuItem>;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/** Undo/Redo 履歴。複数グリッドで共有すると Undo タイムラインが繋がる。 */
|
|
285
|
+
export declare class HistoryManager {
|
|
286
|
+
constructor(max?: number);
|
|
287
|
+
onChange: ((h: HistoryManager) => void) | null;
|
|
288
|
+
push(cmd: { apply: () => void; revert: () => void }): void;
|
|
289
|
+
undo(): void;
|
|
290
|
+
redo(): void;
|
|
291
|
+
clear(): void;
|
|
292
|
+
canUndo(): boolean;
|
|
293
|
+
canRedo(): boolean;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* 軽量・ノービルド・日本語IME堅牢な編集グリッド。
|
|
298
|
+
* @example
|
|
299
|
+
* const grid = new TssGrid(document.getElementById('app'), {
|
|
300
|
+
* columns: [{ data: 'name', title: '品名' }, { data: 'qty', title: '数量', type: 'number' }],
|
|
301
|
+
* data: [{ name: 'りんご', qty: 12 }],
|
|
302
|
+
* });
|
|
303
|
+
*/
|
|
304
|
+
export declare class TssGrid {
|
|
305
|
+
constructor(container: HTMLElement, options?: TssGridOptions);
|
|
306
|
+
|
|
307
|
+
/** 行数 / 列数(読み取り)。 */
|
|
308
|
+
readonly ROWS: number;
|
|
309
|
+
readonly COLS: number;
|
|
310
|
+
/** 列定義(実行時参照)。 */
|
|
311
|
+
columns: ColumnDef[];
|
|
312
|
+
/** 履歴マネージャ。 */
|
|
313
|
+
history: HistoryManager;
|
|
314
|
+
/** Enter/Tab 確定後の移動方向(代入で即反映)。 */
|
|
315
|
+
enterMoves: MoveDir;
|
|
316
|
+
tabMoves: MoveDir;
|
|
317
|
+
|
|
318
|
+
// ---- データ -------------------------------------------------------------
|
|
319
|
+
/** 全データを2次元配列で取得(コピー)。 */
|
|
320
|
+
getData(): any[][];
|
|
321
|
+
/** 全行をオブジェクト配列で取得(columns[c].data キー基準)。 */
|
|
322
|
+
getRows(): Record<string, any>[];
|
|
323
|
+
/** r 行目をオブジェクトで取得。 */
|
|
324
|
+
getRow(r: number): Record<string, any>;
|
|
325
|
+
/** 列を縦に取得(index か data キー)。 */
|
|
326
|
+
getColumn(cOrKey: number | string): any[] | undefined;
|
|
327
|
+
/** 全列を配列の配列で取得。 */
|
|
328
|
+
getColumns(): any[][];
|
|
329
|
+
/** 1セルの値を取得(c は index か data キー)。 */
|
|
330
|
+
getValue(r: number, cOrKey: number | string): any;
|
|
331
|
+
/** データを差し替え(履歴・フィルタ・整列状態はリセット)。 */
|
|
332
|
+
setData(rows: any[][] | Record<string, any>[]): void;
|
|
333
|
+
/**
|
|
334
|
+
* 背景で"育てる"追記(progressive)。data 末尾へ rows を足し、可視窓+スペーサだけ再描画する。
|
|
335
|
+
* buildTable 全再描画をせず、スクロール位置・アクティブセル・フォーカス・選択・編集中のエディタと値を保ち、履歴にも積まない。
|
|
336
|
+
* 「先頭ページを描く→残りを idle で appendRows」して first-paint を早める土台(既存の setData/insertRows 経路は不変)。
|
|
337
|
+
* rows は現在のデータと同形(オブジェクトモードはオブジェクト配列/配列モードは行配列)。
|
|
338
|
+
*/
|
|
339
|
+
appendRows(rows: any[][] | Record<string, any>[], opts?: { keepScroll?: boolean; noHistory?: boolean }): void;
|
|
340
|
+
/**
|
|
341
|
+
* 遅延ロード(push・on-demand)。総行数を total に確保し、未取得ぶんを PENDING 行で埋める(virtual 前提)。
|
|
342
|
+
* dataComplete=false になり、この間 minSpareRows は自動無効。onViewportChange で「今要る範囲」を受け fillRows で埋める流れ。
|
|
343
|
+
* setData で解除。AG Grid の Infinite Row Model 相当を push プリミティブで。
|
|
344
|
+
*/
|
|
345
|
+
setRowCount(total: number): void;
|
|
346
|
+
/**
|
|
347
|
+
* 遅延ロード(push): PENDING 行 [start, start+rows.length) を実データに差し替える(onViewportChange への応答)。
|
|
348
|
+
* 塗り替え範囲が可視窓に重なる時だけ窓を再描画=スクロール/選択/アクティブは不変。全 PENDING が埋まると dataComplete=true。
|
|
349
|
+
*/
|
|
350
|
+
fillRows(start: number, rows: any[][] | Record<string, any>[]): void;
|
|
351
|
+
/** 遅延ロード: 全行がロード済みなら true。setRowCount で false、全 fillRows 完了で true に戻る。 */
|
|
352
|
+
readonly dataComplete: boolean;
|
|
353
|
+
/** 1セルに書き込み(履歴あり・検証/onBeforeChange 経由)。force=true で readOnly 貫通。 */
|
|
354
|
+
setValue(r: number, cOrKey: number | string, val: any, force?: boolean): void;
|
|
355
|
+
/** 履歴に積まず・検証も通さず直接書き込み(計算列など派生値用。readOnly 貫通)。 */
|
|
356
|
+
setValueRaw(r: number, cOrKey: number | string, val: any): void;
|
|
357
|
+
|
|
358
|
+
// ---- 並べ替え / フィルタ -------------------------------------------------
|
|
359
|
+
/** 列で並べ替え(c は index か data キー)。 */
|
|
360
|
+
sortBy(cOrKey: number | string, dir?: 'asc' | 'desc'): void;
|
|
361
|
+
/** 多段(複数列)で並べ替え。specs は優先順(先頭=第1キー)。各段は sortBy と同じ比較規則。 */
|
|
362
|
+
sortByCols(specs: Array<{ col: number | string; dir?: 'asc' | 'desc' }>): void;
|
|
363
|
+
/** 比較関数で並べ替え。 */
|
|
364
|
+
sortRows(cmp: (a: any[], b: any[]) => number): void;
|
|
365
|
+
/** 並べ替え解除(入力順に戻す)。 */
|
|
366
|
+
clearSort(): void;
|
|
367
|
+
isSorted(): boolean;
|
|
368
|
+
/** 非破壊フィルタ。pred(row, masterIndex, src)=>boolean、または { col: 値|fn }。 */
|
|
369
|
+
filter(pred: ((row: any[], masterIndex: number, src: any) => boolean) | Record<string, any>): void;
|
|
370
|
+
/** フィルタ解除(フィルタ中に編集/追加した行も含め全部戻る)。 */
|
|
371
|
+
clearFilter(): void;
|
|
372
|
+
isFiltered(): boolean;
|
|
373
|
+
/** フィルタ中でも全行(マスタ)を取得。 */
|
|
374
|
+
getAllRows(): Record<string, any>[];
|
|
375
|
+
|
|
376
|
+
// ---- 選択 / カーソル ----------------------------------------------------
|
|
377
|
+
setActive(r: number, c: number): void;
|
|
378
|
+
setExtent(r: number, c: number): void;
|
|
379
|
+
selectRect(r0: number, c0: number, r1: number, c1: number): void;
|
|
380
|
+
selectRow(r: number): void;
|
|
381
|
+
selectCol(c: number): void;
|
|
382
|
+
selectAll(): void;
|
|
383
|
+
/** 選択中の列インデックス(Ctrl+ヘッダクリックの飛び飛び選択に対応・昇順)。列選択モードでなければ `[]`。 */
|
|
384
|
+
getSelectedColumns(): number[];
|
|
385
|
+
/** 選択中の行インデックス(Ctrl+行ヘッダクリックの飛び飛び選択に対応・昇順)。行選択モードでなければ `[]`。 */
|
|
386
|
+
getSelectedRows(): number[];
|
|
387
|
+
/** 飛び飛びの複数列をまとめて削除(高index側から。右クリック「N 列を削除」の実体)。 */
|
|
388
|
+
deleteColsSet(cols: number[]): void;
|
|
389
|
+
/** 飛び飛びの複数行をまとめて削除(高index側から。右クリック「N 行を削除」の実体)。 */
|
|
390
|
+
deleteRowsSet(rows: number[]): void;
|
|
391
|
+
|
|
392
|
+
// ---- 行 / 列 構造 -------------------------------------------------------
|
|
393
|
+
insertRow(ri: number, where?: 'above' | 'below'): void;
|
|
394
|
+
/** count 行を1回の再描画・1つの undo コマンドで挿入(大量挿入を O(N) に)。maxRows 上限でクランプ。既定 count=1 は insertRow と等価。 */
|
|
395
|
+
insertRows(ri: number, count?: number, where?: 'above' | 'below'): void;
|
|
396
|
+
deleteRows(r0: number, r1?: number): void;
|
|
397
|
+
/** 行 r の中身を空にする(行自体は残す・readOnly はスキップ・1 undo)。rowDelete の🗑を最後の1行で押した時の実体。 */
|
|
398
|
+
clearRow(r: number): void;
|
|
399
|
+
insertCol(ci: number, where?: 'left' | 'right'): void;
|
|
400
|
+
deleteCols(c0: number, c1?: number): void;
|
|
401
|
+
/** 1行を移動(Undo 対応)。 */
|
|
402
|
+
moveRow(from: number, to: number): void;
|
|
403
|
+
/** 複数行をまとめて移動(Undo 対応)。 */
|
|
404
|
+
moveRows(r0: number, r1: number, to: number): void;
|
|
405
|
+
|
|
406
|
+
// ---- 列の表示 / 幅 / 固定 / 行高 ---------------------------------------
|
|
407
|
+
hideColumn(c: number): void;
|
|
408
|
+
showColumn(c: number): void;
|
|
409
|
+
toggleColumn(c: number): void;
|
|
410
|
+
isColumnHidden(c: number): boolean;
|
|
411
|
+
getHiddenColumns(): number[];
|
|
412
|
+
setColWidth(c: number, px: number): void;
|
|
413
|
+
autoSizeColumn(c: number): void;
|
|
414
|
+
autoSizeAllColumns(): void;
|
|
415
|
+
freezeCols(n: number): void;
|
|
416
|
+
freezeRows(n: number): void;
|
|
417
|
+
setRowHeight(r: number, px: number): void;
|
|
418
|
+
|
|
419
|
+
// ---- セル状態 / 検証 ----------------------------------------------------
|
|
420
|
+
setAlignment(align: string, range?: SelectionRange): void;
|
|
421
|
+
getAlignment(r: number, c: number): string;
|
|
422
|
+
setCellReadOnly(flag: boolean, range?: SelectionRange): void;
|
|
423
|
+
/** 今の全セルを検証し、NG を一覧で返す(保存前チェック等)。 */
|
|
424
|
+
getInvalidCells(): Rejection[];
|
|
425
|
+
|
|
426
|
+
// ---- 出力 / 再描画 / 破棄 ----------------------------------------------
|
|
427
|
+
toCSV(opts?: CsvOptions): string;
|
|
428
|
+
downloadCSV(filename: string, opts?: CsvOptions): void;
|
|
429
|
+
/** 列定義変更後などの再描画(データ・選択は保持)。 */
|
|
430
|
+
redraw(): void;
|
|
431
|
+
/** 画像/フォント等の遅延レイアウト後に幾何キャッシュを再構築する保険。 */
|
|
432
|
+
refreshGeometry(): void;
|
|
433
|
+
/** グリッドを破棄(リスナ除去・DOM 撤去・idempotent)。フレームワークの teardown で呼ぶ。 */
|
|
434
|
+
destroy(): void;
|
|
435
|
+
|
|
436
|
+
// ---- 拡張 ---------------------------------------------------------------
|
|
437
|
+
addShortcut(s: { name: string; keys: string; handler: (grid: TssGrid, e: KeyboardEvent) => void }): void;
|
|
438
|
+
removeShortcut(name: string): void;
|
|
439
|
+
usePlugin(plugin: ((grid: TssGrid, opts?: any) => any) | string, opts?: any): any;
|
|
440
|
+
getPlugin(name: string): any;
|
|
441
|
+
|
|
442
|
+
// ---- 低レベル(公開はするが通常は上位APIを推奨) -----------------------
|
|
443
|
+
/** 選択範囲(または range)をクリア。※通常は値消去なら setValue('') を推奨。一括の低レベル手段。 */
|
|
444
|
+
clearRange(): void;
|
|
445
|
+
/** 選択範囲をクリップボードへ。cut=true で切り取り。 */
|
|
446
|
+
copy(cut?: boolean): void;
|
|
447
|
+
/** テーブルDOMを再構築(低レベル)。※通常は redraw() を推奨。主にプラグイン拡張者向け。 */
|
|
448
|
+
buildTable(): void;
|
|
449
|
+
/** セルの DOM 要素を返す(低レベル・内部DOM構造に依存)。結合セルはアンカーに解決。 */
|
|
450
|
+
cellEl(r: number, c: number): HTMLTableCellElement | null;
|
|
451
|
+
|
|
452
|
+
/** 遅延ロード: 未取得行を表す sentinel。setRowCount が未取得ぶんを data[r] に入れ、fillRows で実データへ差し替える。 */
|
|
453
|
+
static readonly PENDING: unique symbol;
|
|
454
|
+
|
|
455
|
+
[k: string]: any;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// グローバル(<script> 読み込み時の window.TssGrid / window.HistoryManager)にも型を付ける。
|
|
459
|
+
declare global {
|
|
460
|
+
interface Window {
|
|
461
|
+
TssGrid: typeof TssGrid;
|
|
462
|
+
HistoryManager: typeof HistoryManager;
|
|
463
|
+
}
|
|
464
|
+
}
|