@threestarsoftware/tssgrid 0.1.15 → 0.1.17
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 +10 -0
- package/package.json +1 -1
- package/src/tssgrid.js +20 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
TssGrid の各リリースの変更点。日付は JST。形式は [Keep a Changelog](https://keepachangelog.com/ja/1.1.0/) 準拠(ゆるめ)。
|
|
4
4
|
数値は特記なき限り**自社調べ**(headless Chrome / Windows 11・環境差あり)。
|
|
5
5
|
|
|
6
|
+
## [0.1.17] - 2026-10-05
|
|
7
|
+
|
|
8
|
+
### 修正
|
|
9
|
+
- **チェックボックス列のヘッダに `data` 名('checked' 等)が出てしまう不具合を修正**(コア)— `{ type:'checkbox', data:'checked' }` のように **`title` を書かない**と、見出し決定ロジックが「title 未設定 → `data` 名」に落ちてヘッダに「checked」が表示されていた。checkbox 列のヘッダは「**全選択チェックボックス**」なので data 名が出るのはほぼ常に不要。**checkbox 列は title 未設定でもヘッダを空**にするよう修正(`title` を明示すればそれを尊重/`title:''` も従来どおり空)。**非 checkbox 列は従来どおり**(title 未設定なら data 名→列ラベル)。
|
|
10
|
+
|
|
11
|
+
## [0.1.16] - 2026-10-04
|
|
12
|
+
|
|
13
|
+
### 修正
|
|
14
|
+
- **ドロップダウン(`type:'dropdown'`)で「未選択」のまま矢印キーを押すと先頭オプションが選ばれてしまう不具合を修正**(コア)— ネイティブ `<select>` はフォーカス中(リストが閉じていても)`↑↓←→` でオプションが変わる仕様で、特に「未選択(空)を選ぶと値が変わらず `change` が出ない=エディタへフォーカスが戻らない」ため `<select>` にフォーカスが残り、次の矢印が `<select>` に吸われて **空→先頭** に変化+即確定していた。`<select>` の keydown で `←→↑↓` を横取りし、**現在値を確定して隣セルへ移動(Excel 流の nav)**に。リスト展開中は OS ポップアップがキーを奪うのでこのハンドラは発火しない=閉じてフォーカスだけ残った時の誤爆のみを防ぐ。`Enter`/`Tab`/`Esc` は不変。
|
|
15
|
+
|
|
6
16
|
## [0.1.15] - 2026-09-30
|
|
7
17
|
|
|
8
18
|
### 追加
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threestarsoftware/tssgrid",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"description": "軽量・ノービルド・日本語IME堅牢な編集グリッド(vanilla JS / 依存なし / MIT)。Excel ライクな入力画面を <script> タグ1本で。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "ThreeStarSoftware (https://www.threestarsoftware.co.jp/)",
|
package/src/tssgrid.js
CHANGED
|
@@ -61,8 +61,15 @@
|
|
|
61
61
|
this.name = opts.name || 'grid';
|
|
62
62
|
this.columns = opts.columns || [];
|
|
63
63
|
// 見出し: 明示 headers > columns の title/data 由来 > 既定 A,B,C
|
|
64
|
+
// 見出しの決定: 明示 title('' 含む)を最優先で尊重。checkbox 列は「ヘッダ=全選択チェック」なので
|
|
65
|
+
// title 未設定でも data 名('checked' 等)を出さない(空)。それ以外は title 未設定なら data 名→無ければ列ラベル。
|
|
64
66
|
this.headers = opts.headers || (this.columns.length
|
|
65
|
-
? this.columns.map((c, i) =>
|
|
67
|
+
? this.columns.map((c, i) => {
|
|
68
|
+
if (!c) return undefined; // 列定義なし=従来どおり(空表示)
|
|
69
|
+
if (c.title != null) return c.title; // 明示 title('' で見出し無し)を尊重
|
|
70
|
+
if (c.type === 'checkbox') return ''; // checkbox は data 名を見出しに出さない
|
|
71
|
+
return c.data || TssGrid._colLabel(i); // 従来: title 未設定は data 名 → 無ければ列ラベル
|
|
72
|
+
})
|
|
66
73
|
: ['A', 'B', 'C']);
|
|
67
74
|
this.COLS = this.headers.length;
|
|
68
75
|
// データ取り込み: 配列(string[][]) と オブジェクト配列(object[]) を自動判別。
|
|
@@ -3011,6 +3018,18 @@
|
|
|
3011
3018
|
if (e.key === 'Enter') { e.preventDefault(); this._commitSelect(); this._advance('enter', e.shiftKey); }
|
|
3012
3019
|
else if (e.key === 'Tab') { e.preventDefault(); this._commitSelect(); this._advance('tab', e.shiftKey); }
|
|
3013
3020
|
else if (e.key === 'Escape') { e.preventDefault(); this._cancelSelect(); }
|
|
3021
|
+
else if (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
|
|
3022
|
+
// ←→↑↓ はネイティブ <select> の「オプション変更」を止め、現在値を確定して隣セルへ移動(Excel 流の nav)。
|
|
3023
|
+
// これが無いと、未選択(空)のまま矢印を押すと select が選択肢を 空→先頭 に変え change が即確定=「矢印で先頭が選ばれる」不具合になる。
|
|
3024
|
+
// リストが開いている時は OS ポップアップがキーを奪いこのハンドラは発火しない=閉じて focus だけ残った時の誤爆のみ防ぐ。
|
|
3025
|
+
e.preventDefault();
|
|
3026
|
+
this._commitSelect();
|
|
3027
|
+
const r = this.active.r, c = this.active.c;
|
|
3028
|
+
if (e.key === 'ArrowUp') this.setActive(this._stepRowM(r, c, -1), c);
|
|
3029
|
+
else if (e.key === 'ArrowDown') this.setActive(this._stepRowM(r, c, 1), c);
|
|
3030
|
+
else if (e.key === 'ArrowLeft') this.setActive(r, this._stepColM(r, c, -1));
|
|
3031
|
+
else this.setActive(r, this._stepColM(r, c, 1));
|
|
3032
|
+
}
|
|
3014
3033
|
});
|
|
3015
3034
|
this.select.addEventListener('blur', () => { if (this.mode === 'edit' && this.select.style.display !== 'none') this._commitSelect(); });
|
|
3016
3035
|
// 選択肢を選んだら即確定(移動はしない=Excel と同様にそのセルに留まる)。
|