@threestarsoftware/tssgrid 0.1.22 → 0.1.24

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.24] - 2026-10-08
7
+
8
+ ### 追加
9
+ - **遅延ロード(`setRowCount` / `fillRows` / `onViewportChange`)のサンプルを追加** — `examples/lazy-load.html`。AG Grid の Infinite Row Model 相当=**10万件を一度に取らず、仮想スクロールで見える範囲だけ取得**する型を動く例に。①`setRowCount(total)` で確保(未取得は「読込中」表示)→ ②`onViewportChange(start,end)` で要る範囲を受け → ③`fillRows(start, rows)` で流し込む。ブロック単位取得(取得済み/取得中はスキップ)+サーバ呼び出しログで「可視ぶんだけ取得」を可視化。README のページネーション節からリンク。コア変更なし。
10
+
11
+ ## [0.1.23] - 2026-10-08
12
+
13
+ ### 追加
14
+ - **`TssGrid.zen2han(s)` / `TssGrid.esc(s)` を公開 static として型定義(`.d.ts`)に追加**(コア)— 全角→半角ユーティリティ(内部名 `_zen2han` を公開名 `zen2han` にリネーム)と HTML エスケープ `esc` を、**TypeScript から型付きで呼べる**ように宣言。`number`/`date`/`time` の組込 parse で使うほか、**カスタム `parse`/`format` から `TssGrid.zen2han(v)` を再利用**できる(例: 和暦・年月日の自前パーサの前処理で全角も吸収)。挙動は不変。
15
+
6
16
  ## [0.1.22] - 2026-10-07
7
17
 
8
18
  ### 追加
package/README.md CHANGED
@@ -364,7 +364,7 @@ async function load() {
364
364
  // 前/次/ページ番号は <button> で外に置き、go(p) → load() を呼ぶ
365
365
  ```
366
366
  - **`total` が返るサーバ**: 「全何件・何ページ」まで出せる(上の例)。**`total` が無い(cursor のみ)**: ページ番号は出せないので **`appendRows` で「もっと読む」=無限スクロール型**に。
367
- - **1本の長いスクロールで必要分だけ取得**したいなら、ページ送りでなく `setRowCount(total)` + `onViewportChange` + `fillRows(start, rows)`(AG Grid の Infinite Row Model 相当・上の「メソッド」参照)。
367
+ - **1本の長いスクロールで必要分だけ取得**したいなら、ページ送りでなく `setRowCount(total)` + `onViewportChange(start,end)` + `fillRows(start, rows)`(AG Grid の Infinite Row Model 相当・`virtual:true` 前提/未取得行は「読込中」表示)。動く例: [`examples/lazy-load.html`](https://tssgrid.threestarsoftware.co.jp/examples/lazy-load.html)(10万件を見える範囲だけ取得)。
368
368
  - sort/filter をサーバ側でやる場合も同じ=**操作 → 再 fetch → `setData`**(遅延スクロール型なら `onSortFilterChange` で委譲)。
369
369
 
370
370
  ### 同梱プラグイン: ヘッダ オートフィルタ(filter UI)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threestarsoftware/tssgrid",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
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.d.ts CHANGED
@@ -489,6 +489,13 @@ export declare class TssGrid {
489
489
  /** 遅延ロード: 未取得行を表す sentinel。setRowCount が未取得ぶんを data[r] に入れ、fillRows で実データへ差し替える。 */
490
490
  static readonly PENDING: unique symbol;
491
491
 
492
+ /** 全角→半角(数字・符号・小数点・カンマ・%・¥・空白+日付/時刻の区切り /:)。IME 誤入力対策のユーティリティ。
493
+ * number/date/time の組込 parse で使うほか、カスタム `parse`/`format` から `TssGrid.zen2han(v)` として呼べる。 */
494
+ static zen2han(s: string): string;
495
+
496
+ /** HTML エスケープ(`&` `<` `>`)。`format` で HTML を組む時などに。 */
497
+ static esc(s: any): string;
498
+
492
499
  [k: string]: any;
493
500
  }
494
501
 
package/src/tssgrid.js CHANGED
@@ -961,7 +961,7 @@
961
961
  static _colLabel(n) { let s = ''; n = n | 0; do { s = String.fromCharCode(65 + (n % 26)) + s; n = Math.floor(n / 26) - 1; } while (n >= 0); return s; }
962
962
  // 入力文字列 → 'yyyy-mm-dd'(不正は null)。yyyymmdd / yyyy-mm-dd / yyyy/mm/dd / yyyy.mm.dd を許容。
963
963
  static _parseDate(s) {
964
- s = TssGrid._zen2han(String(s).trim()); // IME ON の全角(2026/01/01 等)も半角化して受理
964
+ s = TssGrid.zen2han(String(s).trim()); // IME ON の全角(2026/01/01 等)も半角化して受理
965
965
  if (s === '') return null;
966
966
  let y, m, d;
967
967
  const sep = /^(\d{4})[-/.](\d{1,2})[-/.](\d{1,2})$/.exec(s);
@@ -974,7 +974,7 @@
974
974
  // 入力文字列 → 24時間制 'HH:MM' / 'HH:MM:SS'(不正は null)。24h と 12h(AM/PM) の両方を受理。
975
975
  static _parseTime(s) {
976
976
  // IME ON の全角(9:30 等)も半角化して受理
977
- const m = /^(\d{1,2}):(\d{2})(?::(\d{2}))?\s*([AaPp][.]?[Mm][.]?)?$/.exec(TssGrid._zen2han(String(s).trim()));
977
+ const m = /^(\d{1,2}):(\d{2})(?::(\d{2}))?\s*([AaPp][.]?[Mm][.]?)?$/.exec(TssGrid.zen2han(String(s).trim()));
978
978
  if (!m) return null;
979
979
  let h = +m[1]; const mi = +m[2], se = m[3] == null ? null : +m[3];
980
980
  const ap = m[4] ? m[4][0].toLowerCase() : null; // 'a' | 'p' | null
@@ -991,9 +991,10 @@
991
991
  return h + ':' + m[2] + (m[3] != null ? ':' + m[3] : '') + ' ' + ap;
992
992
  }
993
993
  // CellFormat: 入力(グルーピング/前後綴り混じり) → 正規化した数値文字列(保存値)。不正は null。
994
- // 全角→半角(数値・日付・時刻文脈)。数字・符号・小数点・カンマ・%・¥・空白+日付/時刻の区切り(/:)を半角化。
994
+ // 全角→半角(公開 static ユーティリティ)。数字・符号・小数点・カンマ・%・¥・空白+日付/時刻の区切り(/:)を半角化。
995
995
  // 業務フォームの IME 誤入力対策(IME ON のまま「2026/01/01」「9:30」等を打っても弾かず半角で受理)。
996
- static _zen2han(s) {
996
+ // 内部(number/date/time の parse)で使うほか、カスタム parse/format から TssGrid.zen2han(v) として呼べる。
997
+ static zen2han(s) {
997
998
  return String(s)
998
999
  .replace(/[0-9]/g, ch => String.fromCharCode(ch.charCodeAt(0) - 0xFEE0))
999
1000
  .replace(/+/g, '+').replace(/[-−ー―]/g, '-')
@@ -1003,7 +1004,7 @@
1003
1004
  }
1004
1005
  static _parseNumber(v, cfg) {
1005
1006
  let s = String(v).trim();
1006
- if (cfg.zenkaku !== false) s = TssGrid._zen2han(s); // 既定で全角→半角(cfg.zenkaku:false で無効化)
1007
+ if (cfg.zenkaku !== false) s = TssGrid.zen2han(s); // 既定で全角→半角(cfg.zenkaku:false で無効化)
1007
1008
  if (cfg.prefix) s = s.split(cfg.prefix).join('');
1008
1009
  if (cfg.suffix) s = s.split(cfg.suffix).join('');
1009
1010
  s = s.replace(/,/g, '').replace(/\s/g, '');