@threestarsoftware/tssgrid 0.0.6 → 0.0.7

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.0.7] - 2026-07-10
7
+
8
+ ### 修正
9
+ - カスタムエディタ(`tss-calendar` / `tss-datetime` 等、`body` 直下にポップアップを出す型)を**開いたままフィルタ/ソート/フリーズ/再描画**すると、ポップアップが画面に取り残されて浮く不具合を修正(`buildTable()` が開いているエディタを閉じていなかった)。1修正で全カスタムエディタに効く。
10
+ - ポップアップ型エディタ(`tss-calendar` / `tss-time` / `tss-datetime` / `tss-autocomplete`)で、**別のセルを続けて開く**と前のポップアップと `document` リスナが片付かず取り残し/リークする不具合を修正(各 `show()` 冒頭で `teardown()` するよう統一)。
11
+
12
+ ### 補足(挙動変化・影響範囲)
13
+ - カスタムエディタを開いたまま再描画/フィルタ/ソートすると、そのエディタは**キャンセル確定**となり `onEditEnd({ canceled: true })` が発火するようになりました(従来は発火せずポップアップだけ取り残していた)。
14
+ - ネイティブのドロップダウン(`<select>`)は永続要素のため上記いずれの影響も受けません(確認済み)。
15
+
6
16
  ## [0.0.6] - 2026-06-30
7
17
 
8
18
  ### 追加
@@ -67,6 +77,7 @@ TssGrid の各リリースの変更点。日付は JST。形式は [Keep a Chang
67
77
  - 初回公開。コア(編集グリッド/日本語 IME 堅牢・全角半角・セル結合・固定行列・非破壊フィルタ・条件付き書式・コピー/貼付・Undo/Redo ほか)+同梱プラグイン+サンプル一式。
68
78
  - 目玉デモ(方眼ガント/在庫管理)をサイトでライブ化。
69
79
 
80
+ [0.0.7]: https://github.com/threestarsoftware/TssGrid/releases/tag/v0.0.7
70
81
  [0.0.6]: https://github.com/threestarsoftware/TssGrid/releases/tag/v0.0.6
71
82
  [0.0.5]: https://github.com/threestarsoftware/TssGrid/releases/tag/v0.0.5
72
83
  [0.0.4]: https://github.com/threestarsoftware/TssGrid/releases/tag/v0.0.4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threestarsoftware/tssgrid",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "軽量・ノービルド・日本語IME堅牢な編集グリッド(vanilla JS / 依存なし / MIT)。Excel ライクな入力画面を <script> タグ1本で。",
5
5
  "license": "MIT",
6
6
  "author": "ThreeStarSoftware (https://www.threestarsoftware.co.jp/)",
@@ -88,6 +88,7 @@
88
88
  pop.style.minWidth = r.width + 'px';
89
89
  }
90
90
  function show(anchor, value, ctx) {
91
+ teardown(); // 既に開いていれば先に片付ける(open-while-open の取り残し防止・tss-calendar と同方針)
91
92
  done = false; ref = { ctx: ctx };
92
93
  pop = document.createElement('div'); pop.className = 'tss-ac' + (opts.className ? ' ' + opts.className : ''); pop.tabIndex = -1;
93
94
  pop.innerHTML = '<input class="tss-ac-input" type="text"><div class="tss-ac-list"></div>';
@@ -98,6 +98,7 @@
98
98
  if (k === 'PageUp' || k === 'PageDown') { e.preventDefault(); view = new Date(view.getFullYear(), view.getMonth() + (k === 'PageUp' ? -1 : 1), 1); render(); }
99
99
  }
100
100
  function show(anchor, value, onPick, onCancel) {
101
+ teardown(); // 既に開いていれば先に片付ける(前の pop 除去+outside リスナ解除・open-while-open の取り残し防止)
101
102
  done = false; sel = parseISO(value);
102
103
  view = sel ? new Date(sel.getFullYear(), sel.getMonth(), 1) : new Date();
103
104
  focus = sel ? new Date(sel) : new Date();
@@ -137,6 +137,7 @@
137
137
  else if (e.key === 'Enter') { e.preventDefault(); commit(value()); }
138
138
  }
139
139
  function show(anchor, val, onPick, onCancel) {
140
+ teardown(); // 既に開いていれば先に片付ける(open-while-open の取り残し防止・tss-calendar と同方針)
140
141
  done = false;
141
142
  var p = parseDT(val), tp = p ? null : parseTimeOnly(val); // 日付付き or 時刻のみ
142
143
  selD = p ? p.d : null;
@@ -61,6 +61,7 @@
61
61
  else if (e.key === 'Enter') { e.preventDefault(); commit(readValue()); }
62
62
  }
63
63
  function show(anchor, value, onPick, onCancel) {
64
+ teardown(); // 既に開いていれば先に片付ける(open-while-open の取り残し防止・tss-calendar と同方針)
64
65
  done = false;
65
66
  pop = document.createElement('div'); pop.className = 'tss-time' + (opts.className ? ' ' + opts.className : ''); pop.tabIndex = -1;
66
67
  document.body.appendChild(pop);
package/src/tssgrid.js CHANGED
@@ -1218,6 +1218,7 @@
1218
1218
  this._renderWindow(this._vWindow(), false); // 窓を即同期(place 前に DOM を確定)
1219
1219
  }
1220
1220
  buildTable() {
1221
+ if (this._customEditor && this._customCancel) this._customCancel(); // 開いているカスタムエディタを閉じる(body直下ポップアップの取り残し防止・_commitActive と同じ扱い)
1221
1222
  this._selhdrFg = null; // 選択ヘッダ文字色キャッシュ破棄(テーマ変更に追従)
1222
1223
  const rh = this.rowHeaders;
1223
1224
  let html = '<colgroup>' + (rh ? '<col style="width:' + this.rowHeaderW + 'px">' : '');