@threestarsoftware/tssgrid 0.1.17 → 0.1.19
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 +10 -0
- package/README.md +1 -0
- package/package.json +1 -1
- package/src/tssgrid.css +2 -0
- package/src/tssgrid.js +17 -2
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.19] - 2026-10-06
|
|
7
|
+
|
|
8
|
+
### 修正
|
|
9
|
+
- **`Ctrl+;`(今日)/ `Ctrl+:`(現在時刻)が、カレンダー等のピッカーを開いた編集中だと効かず、キーがブラウザ既定(環境により拡大など)に素通りしていたのを修正**(コア)— 従来は nav モードでしか処理していなかったため、date/time 列やカレンダー(`tss-calendar` 等のカスタムエディタ)の**ピッカーを開いている編集中**に押すとハンドラを素通りしていた。編集中でも **date/time/カスタムエディタ列なら横取り**し、`preventDefault`(ブラウザ既定への抜けを防止)→ピッカーを閉じて今日/現在時刻を挿入するように。テキスト(自由入力)編集中は横取りしない(打鍵・IME を壊さない)。**JIS で時刻は `Ctrl+:`**(`:` 専用キー)を使用(`Ctrl+Shift+;` は JIS では `+`=ブラウザ拡大)。ON/OFF は従来どおり `dateShortcuts`。
|
|
10
|
+
|
|
11
|
+
## [0.1.18] - 2026-10-05
|
|
12
|
+
|
|
13
|
+
### 修正
|
|
14
|
+
- **見出し無しのチェックボックス列で、ヘッダの全選択チェックが中央からずれる不具合を修正**(コア・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間隔。
|
|
15
|
+
|
|
6
16
|
## [0.1.17] - 2026-10-05
|
|
7
17
|
|
|
8
18
|
### 修正
|
package/README.md
CHANGED
|
@@ -413,6 +413,7 @@ grid.removeShortcut('dup');
|
|
|
413
413
|
|
|
414
414
|
- いずれも `setValue`/検証を通り **Undo 1回**で戻せます(fill は**列の型に合わない値は貼り付けと同様に弾かれます**)。`readOnly` セルはスキップ。
|
|
415
415
|
- 無効化: `dateShortcuts: false`(`Ctrl+;`/`Ctrl+:`)・`fillShortcuts: false`(`Ctrl+D`/`Ctrl+R`)。独自に `addShortcut` で同じキーを登録すれば**そちらが優先**されます。
|
|
416
|
+
- `Ctrl+;`/`Ctrl+:` は **date/time/カレンダー等のピッカーを開いている編集中でも効きます**(ピッカーを閉じて今日/現在時刻を挿入。これによりキーがブラウザ既定に素通りするのも防止)。テキスト(自由入力)編集中は横取りしません。**JIS で時刻は `Ctrl+:`**(`:` 専用キー)を使ってください(`Ctrl+Shift+;` は JIS では `+` =ブラウザ拡大になります)。
|
|
416
417
|
- **入れる形式**: `date`/`time` 型の列は**列の仕組みに従う**(ISO 保存=`YYYY-MM-DD`/`HH:MM`、見た目は列の `format` で `/` でも自由)。**それ以外(テキスト等)の列は** `todayFormat` / `nowFormat` で形式を選べます(既定 `'YYYY-MM-DD'` / `'HH:MM'`。トークン `YYYY`/`MM`/`DD`・`HH`/`mm`、または `(d: Date) => string`)。例: `todayFormat: 'YYYY/MM/DD'`(スラッシュ区切り)。
|
|
417
418
|
|
|
418
419
|
**プラグイン**(軽量 base-plugin 相当。`init(grid)→{destroy?}` の薄い契約):
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threestarsoftware/tssgrid",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.19",
|
|
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
|
@@ -1368,10 +1368,13 @@
|
|
|
1368
1368
|
if (this._isHidden(c)) cls.push('tg-hidden');
|
|
1369
1369
|
const a = cls.length ? ' class="' + cls.join(' ') + '"' : '';
|
|
1370
1370
|
const grip = (this.resizeCols && this.colCfg(c).resizable !== false) ? '<div class="tg-colgrip"></div>' : '';
|
|
1371
|
-
const headCb = (this.colType(c) === 'checkbox' && this.colCfg(c).headerCheckbox !== false) ? '<input type="checkbox" class="tg-cb tg-head-cb" tabindex="-1">' : '';
|
|
1372
1371
|
let lbl = labels ? labels[c] : this.headers[c];
|
|
1373
1372
|
if (lbl && typeof lbl === 'object') lbl = lbl.label != null ? lbl.label : '';
|
|
1374
|
-
|
|
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>';
|
|
1375
1378
|
}
|
|
1376
1379
|
if (delHdr) html += '<th class="tg-rowdel-hdr"></th>'; // 右端削除列の見出し(無地・非データ)。ネストヘッダ時は角を rowspan で出すのでここでは出さない
|
|
1377
1380
|
return html + '</tr>';
|
|
@@ -3340,6 +3343,18 @@
|
|
|
3340
3343
|
// input ベース編集では「打ち始め」時に元値が input に入らないためネイティブ undo では元値に戻せない。
|
|
3341
3344
|
// ここで元値(this.data[r][c]=未確定)に戻す=Excel流。続けて Ctrl+Z すると nav の history.undo で前の確定操作へ連鎖。
|
|
3342
3345
|
const ctrl = e.ctrlKey || e.metaKey;
|
|
3346
|
+
// 日付/時刻ショートカットはカレンダー等(date/time/カスタムエディタ)の編集中でも効かせる。
|
|
3347
|
+
// これが無いと編集モードでは素通りして「ブラウザ既定」(環境により拡大など)に抜ける。
|
|
3348
|
+
// テキスト(自由入力)編集中は対象外=打鍵・IME を壊さない。
|
|
3349
|
+
if (this.dateShortcuts && ctrl && (e.key === ';' || e.key === ':')) {
|
|
3350
|
+
const t = this.colType(this.active.c);
|
|
3351
|
+
if (this.colCfg(this.active.c).editor || t === 'date' || t === 'time') {
|
|
3352
|
+
e.preventDefault();
|
|
3353
|
+
this.toNav(); // 開いているピッカー/inline エディタを閉じる
|
|
3354
|
+
this._insertDateTime(e.key === ':'); // 今日/現在時刻を挿入(検証/Undo を通る)
|
|
3355
|
+
return;
|
|
3356
|
+
}
|
|
3357
|
+
}
|
|
3343
3358
|
if (e.key === 'Escape' || (ctrl && !e.shiftKey && e.key.toLowerCase() === 'z')) {
|
|
3344
3359
|
e.preventDefault();
|
|
3345
3360
|
const r = this.active.r, c = this.active.c, v = this.data[r][c];
|