@threestarsoftware/tssgrid 0.1.16 → 0.1.18

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 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.18] - 2026-10-05
7
+
8
+ ### 修正
9
+ - **見出し無しのチェックボックス列で、ヘッダの全選択チェックが中央からずれる不具合を修正**(コア・CSS/JS)— ヘッダの `.tg-head-cb` は見出し文字との間隔用に `margin-right:4px` を持つため、**見出しが無い(`title` 未設定/`''`)単独チェックの時はその4pxで列中央から左にずれ**、本体セル(`margin:0 auto` で中央)と縦に揃わなかった(v0.1.17 でヘッダ空が一般化して露出)。見出し文字が無い時は `tg-head-cb-solo` を付与し `display:block; margin:0 auto` で**本体と同じ中央寄せ**に。見出し有りは従来どおりインライン+4px間隔。
10
+
11
+ ## [0.1.17] - 2026-10-05
12
+
13
+ ### 修正
14
+ - **チェックボックス列のヘッダに `data` 名('checked' 等)が出てしまう不具合を修正**(コア)— `{ type:'checkbox', data:'checked' }` のように **`title` を書かない**と、見出し決定ロジックが「title 未設定 → `data` 名」に落ちてヘッダに「checked」が表示されていた。checkbox 列のヘッダは「**全選択チェックボックス**」なので data 名が出るのはほぼ常に不要。**checkbox 列は title 未設定でもヘッダを空**にするよう修正(`title` を明示すればそれを尊重/`title:''` も従来どおり空)。**非 checkbox 列は従来どおり**(title 未設定なら data 名→列ラベル)。
15
+
6
16
  ## [0.1.16] - 2026-10-04
7
17
 
8
18
  ### 修正
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threestarsoftware/tssgrid",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
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.css CHANGED
@@ -186,6 +186,8 @@
186
186
  .tssgrid .tg-table td .tg-cb { display: block; margin: 0 auto; cursor: pointer; }
187
187
  /* ヘッダの全選択チェックボックス(columns[c].headerCheckbox:false で非表示)。外部CSSで再デザイン可 */
188
188
  .tssgrid .tg-table thead th .tg-head-cb { display: inline-block; margin: 0 4px 0 0; vertical-align: middle; cursor: pointer; }
189
+ /* 見出し文字が無い(単独)=本体セルと同じく中央寄せ(右 4px を打ち消して列中央でチェックが縦に揃う) */
190
+ .tssgrid .tg-table thead th .tg-head-cb.tg-head-cb-solo { display: block; margin: 0 auto; }
189
191
 
190
192
  /* ドロップダウン列: V(シェブロン)キャレットを常時表示。編集中の <select> と同じ SVG=サイズも一致 */
191
193
  .tssgrid .tg-table td.tg-dropdown { position: relative; padding-right: 18px; cursor: pointer; }
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) => (c && (c.title || c.data)) || TssGrid._colLabel(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[]) を自動判別。
@@ -1361,10 +1368,13 @@
1361
1368
  if (this._isHidden(c)) cls.push('tg-hidden');
1362
1369
  const a = cls.length ? ' class="' + cls.join(' ') + '"' : '';
1363
1370
  const grip = (this.resizeCols && this.colCfg(c).resizable !== false) ? '<div class="tg-colgrip"></div>' : '';
1364
- const headCb = (this.colType(c) === 'checkbox' && this.colCfg(c).headerCheckbox !== false) ? '<input type="checkbox" class="tg-cb tg-head-cb" tabindex="-1">' : '';
1365
1371
  let lbl = labels ? labels[c] : this.headers[c];
1366
1372
  if (lbl && typeof lbl === 'object') lbl = lbl.label != null ? lbl.label : '';
1367
- html += '<th data-c="' + c + '"' + a + '>' + headCb + TssGrid.esc(lbl != null ? lbl : '') + grip + '</th>';
1373
+ const lblStr = lbl != null ? String(lbl) : '';
1374
+ // 見出しチェック: 見出し文字が無い(単独)なら中央寄せ=本体セルの中央チェックと揃える。文字がある時だけ右 4px で間隔。
1375
+ const headCb = (this.colType(c) === 'checkbox' && this.colCfg(c).headerCheckbox !== false)
1376
+ ? '<input type="checkbox" class="tg-cb tg-head-cb' + (lblStr === '' ? ' tg-head-cb-solo' : '') + '" tabindex="-1">' : '';
1377
+ html += '<th data-c="' + c + '"' + a + '>' + headCb + TssGrid.esc(lblStr) + grip + '</th>';
1368
1378
  }
1369
1379
  if (delHdr) html += '<th class="tg-rowdel-hdr"></th>'; // 右端削除列の見出し(無地・非データ)。ネストヘッダ時は角を rowspan で出すのでここでは出さない
1370
1380
  return html + '</tr>';