@threestarsoftware/tssgrid 0.1.38 → 0.1.40

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.40] - 2026-11-09
7
+
8
+ ### 修正
9
+ - **`display:none` の中でビルドした表の見出し高さが 0 のまま直らない不具合**。非表示だと `offsetHeight` が 0 を返すため、ヘッダ高キャッシュ `_theadH`・ネストヘッダの段積み・固定行(`frozenRows`)の sticky-top が 0 で固まり、タブ/アコーディオンで後から表示しても崩れたままだった。表示されて実寸が得られた時(既存の ResizeObserver → `_reflow`)に**ヘッダ高を測り直し、値が変わった時だけ依存レイアウトを貼り直して自己修復**する `_remeasureHead()` を追加(レスポンシブなヘッダ高変化にも効く)。手動の再描画呼び出しは不要。
10
+
11
+ ## [0.1.39] - 2026-11-08
12
+
13
+ ### 修正
14
+ - **TssAutocomplete の候補ボックスがページスクロールでズレる不具合**。ポップアップは `getBoundingClientRect()`(ビューポート基準)の座標で位置決めしているのに CSS が `position: absolute`(=ページ基準で解釈)だったため、下へスクロールするほど候補ボックスが上へずれていた。`position: fixed` に修正(他ピッカー tss-calendar / tss-time / tss-datetime / tss-combo / tss-cascade は元から `fixed`=これで同挙動に揃う)。CSS 1行のみ・JS 変更なし。利用側で `.tss-ac { position: fixed }` を上書きしていた場合、その回避策は不要。
15
+
6
16
  ## [0.1.38] - 2026-11-06
7
17
 
8
18
  ### 追加
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threestarsoftware/tssgrid",
3
- "version": "0.1.38",
3
+ "version": "0.1.40",
4
4
  "description": "軽量・ノービルド・日本語IME堅牢な編集グリッド(vanilla JS / 依存なし / MIT)。Excel ライクな入力画面を <script> タグ1本で。",
5
5
  "license": "MIT",
6
6
  "author": "ThreeStarSoftware (https://www.threestarsoftware.co.jp/)",
@@ -1,6 +1,6 @@
1
1
  /* TssAutocomplete — 候補サジェスト ポップアップ。見た目は変数とクラスで自由に。 */
2
2
  .tss-ac {
3
- position: absolute; z-index: 9999; background: #fff;
3
+ position: fixed; z-index: 9999; background: #fff;
4
4
  border: 1px solid var(--ac-border, #c3ccd6); border-radius: 6px;
5
5
  box-shadow: 0 6px 24px rgba(20, 40, 80, .18); padding: 4px;
6
6
  font: inherit; box-sizing: border-box;
package/src/tssgrid.js CHANGED
@@ -3068,8 +3068,24 @@
3068
3068
  this.extent = e; this.updateSelectionUI(); this._fireSelection();
3069
3069
  }
3070
3070
 
3071
+ // display:none 中にビルドされた表はヘッダ高(_theadH)・ネスト段/固定行の sticky-top が 0 のまま固まる
3072
+ // (offsetHeight が 0 を返すため)。表示されて実寸が得られた時(ResizeObserver→_reflow)に測り直し、
3073
+ // 値が変わった時だけ依存レイアウトを貼り直して自己修復する。レスポンシブなヘッダ高変化にも効く。
3074
+ _remeasureHead() {
3075
+ if (!this.colHeaders || !this.table) return false;
3076
+ const thd = this.table.querySelector('thead');
3077
+ const h = thd ? thd.offsetHeight : 0;
3078
+ if (h === this._theadH) return false; // 変化なし(まだ非表示=0のまま等)=無駄な再適用をしない
3079
+ this._theadH = h;
3080
+ this.wrap.style.setProperty('--tg-thead-h', h + 'px'); // scrollIntoView の scroll-margin-top を実寸へ
3081
+ this._applyHeaderSticky(); // ネストヘッダの段積み(tr.offsetHeight 依存)
3082
+ this._applyFrozenRows(); // 固定行の sticky-top はヘッダ高に依存
3083
+ return true;
3084
+ }
3085
+
3071
3086
  // スクロール / リサイズでセル位置が動いた時、エディタと選択枠を貼り直す
3072
3087
  _reflow() {
3088
+ this._remeasureHead(); // display:none 中ビルドでヘッダ高が0固着→表示時に測り直して自己修復
3073
3089
  if (this.stretchH !== 'none') this._applyStretch(); // 枠幅が変わったら余白を再配分
3074
3090
  this._buildGeomCache(); // 幅/枠が変わったので実測幾何を取り直す(リサイズ/ResizeObserver/window resize)
3075
3091
  if (this.virtual) this._renderWindow(this._vWindow(), false); // 枠高が変われば窓行数も変わる=窓を同期