@threestarsoftware/tssgrid 0.1.20 → 0.1.21
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 +5 -0
- package/package.json +1 -1
- package/src/tssgrid.js +5 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
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.21] - 2026-10-06
|
|
7
|
+
|
|
8
|
+
### 修正
|
|
9
|
+
- **チェックボックス列のヘッダ全選択が、read-only 行のせいで「選べる行は全部 ON なのに − になる」のを修正**(コア)— v0.1.20 で全選択の無効判定(`_columnAllReadOnly`)は read-only 行を除外したが、**状態判定(`_columnCheckState`=✓/−/☐)は read-only 行を total に数えたまま**だった。全選択(`setColumnChecked`)は read-only をスキップするので、状態判定も**「操作できる行(非空かつ非 read-only)」だけで数える**よう統一。選べる行が全部 ON なら **✓**(押せば全部外れる)。あわせて**全 read-only 列では右クリックメニュー「すべてチェック/外す」を出さない**(no-op なので・ヘッダ無効と整合)。これでチェックボックス×read-only の全経路(状態判定/無効判定/全選択書込/body トグル/コンテキストメニュー)が「操作できる集合」で揃った。
|
|
10
|
+
|
|
6
11
|
## [0.1.20] - 2026-10-06
|
|
7
12
|
|
|
8
13
|
### 修正
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threestarsoftware/tssgrid",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
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
|
@@ -1611,7 +1611,9 @@
|
|
|
1611
1611
|
_columnCheckState(c) {
|
|
1612
1612
|
let checked = 0, total = 0;
|
|
1613
1613
|
for (let r = 0; r < this.ROWS; r++) {
|
|
1614
|
-
|
|
1614
|
+
// 全選択は readOnly をスキップする(setColumnChecked と同じ)ので、状態判定も「操作できる行」だけで数える。
|
|
1615
|
+
// これを入れないと「選べる行は全部 ON なのに、押せない行のせいで − 表示」になる。
|
|
1616
|
+
if (this._rowBlankExcept(r, c) || this._isReadOnly(r, c)) continue;
|
|
1615
1617
|
total++; if (this._isCheckedVal(c, this.data[r][c])) checked++;
|
|
1616
1618
|
}
|
|
1617
1619
|
return total === 0 ? 'none' : (checked === total ? 'all' : (checked === 0 ? 'none' : 'some'));
|
|
@@ -2642,8 +2644,8 @@
|
|
|
2642
2644
|
case 'cut': return { label: '切り取り', disabled: !this.copyPaste, act: () => this.copy(true) };
|
|
2643
2645
|
case 'paste': return { label: '貼り付け', disabled: !this.copyPaste, act: () => this.paste() };
|
|
2644
2646
|
case 'clear': return { label: '内容をクリア', act: () => this.clearRange() };
|
|
2645
|
-
case 'check_column': return this.colType(s.c0) === 'checkbox' ? { label: 'すべてチェック', act: () => this.setColumnChecked(s.c0, true) } : null;
|
|
2646
|
-
case 'uncheck_column': return this.colType(s.c0) === 'checkbox' ? { label: 'すべて外す', act: () => this.setColumnChecked(s.c0, false) } : null;
|
|
2647
|
+
case 'check_column': return (this.colType(s.c0) === 'checkbox' && !this._columnAllReadOnly(s.c0)) ? { label: 'すべてチェック', act: () => this.setColumnChecked(s.c0, true) } : null; // 全 read-only 列は no-op なので出さない(ヘッダ無効と整合)
|
|
2648
|
+
case 'uncheck_column': return (this.colType(s.c0) === 'checkbox' && !this._columnAllReadOnly(s.c0)) ? { label: 'すべて外す', act: () => this.setColumnChecked(s.c0, false) } : null;
|
|
2647
2649
|
case 'undo': return { label: '元に戻す', disabled: !this.history.canUndo(), act: () => this.history.undo() };
|
|
2648
2650
|
case 'redo': return { label: 'やり直し', disabled: !this.history.canRedo(), act: () => this.history.redo() };
|
|
2649
2651
|
default: return /^-+$/.test(key) || key === 'separator' ? { sep: true } : null;
|