mdv-live 0.5.15 → 0.5.16
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 +60 -0
- package/package.json +1 -1
- package/src/static/app.js +708 -96
- package/src/static/lib/saveQueue.js +51 -22
- package/src/static/presenter.html +23 -4
- package/src/static/styles.css +211 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,66 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.16] - 2026-05-09
|
|
9
|
+
|
|
10
|
+
### Added — Inline Speaker Notes (PowerPoint-style)
|
|
11
|
+
|
|
12
|
+
メインプレビューに **PowerPoint 風の上下分割レイアウト** を追加。
|
|
13
|
+
|
|
14
|
+
- 上 = スライドステージ、下 = スピーカーノート編集領域、間に**ドラッグ可能な
|
|
15
|
+
仕切り**。ノート領域を広げるとスライドが連動して縮む(CSS Grid: `1fr` /
|
|
16
|
+
ハンドル / `--marp-notes-row`)。
|
|
17
|
+
- 仕切りは:
|
|
18
|
+
- ドラッグでリサイズ → `localStorage` (`mdv-notes-row-px`) に永続化
|
|
19
|
+
- ダブルクリックでデフォルト 240px にリセット(短いビューポートでは clamp)
|
|
20
|
+
- ビューポートに対して `SLIDE_ROW_MIN_PX` を超えないよう attach 時 / drag 中に clamp
|
|
21
|
+
- 0px (完全閉じ) も有効値として保存され、リロードしても復元
|
|
22
|
+
- ノート編集は `contenteditable`、**800ms debounce で自動保存**。Presenter View
|
|
23
|
+
と同じ `/api/marp/decks/:path/slides/:N/note` API、ETag 楽観的ロック、STALE
|
|
24
|
+
時はバックアップを `localStorage` に退避。
|
|
25
|
+
- 多コメントスライド (`notesMultiplicity > 1`) と etag 不在のデッキは編集不可化、
|
|
26
|
+
banner で警告。
|
|
27
|
+
- スライドナビ (← / → / Space / N / F / P) はノート編集中に **無効化** (keydown
|
|
28
|
+
stopPropagation)。
|
|
29
|
+
- スライド切替 → アクティブな panel のみ表示 (JS 駆動の `.active` クラス)。
|
|
30
|
+
|
|
31
|
+
### Changed — saveQueue contract
|
|
32
|
+
|
|
33
|
+
- `enqueue()` が **`Promise<{ok, etag, reason, code}>`** を返すように変更
|
|
34
|
+
(既存 caller は戻り値を無視して動作継続)。
|
|
35
|
+
- `enqueue()` / `saveFn` に **`origin`** 引数 (`'presenter'` / `'inline'` / undef)
|
|
36
|
+
を追加。coalesce / rebase / `lastSavedEtag` を **per-origin** で管理し、
|
|
37
|
+
Presenter ↔ Inline の同時編集で互いの ETag を踏まないようにした。
|
|
38
|
+
- COALESCED / DROPPED の場合、superseded な enqueue() は対応する sentinel で
|
|
39
|
+
resolve する (caller が `await` で永遠に止まらない)。
|
|
40
|
+
|
|
41
|
+
### Changed — Marp viewer
|
|
42
|
+
|
|
43
|
+
- `position: fixed` の `.marp-nav` を半透明 backdrop で右下に floating(広い
|
|
44
|
+
notes panel と被ってもスライド/ノートが透けて見える)。
|
|
45
|
+
- `body.marp-fullscreen` 時はノート領域・ハンドルを 0 行にして全画面プレゼン。
|
|
46
|
+
- 印刷 (`@media print`): split・ハンドル・ノート領域を hide、`.marpit` を
|
|
47
|
+
`display: block` に戻して 1 ページ 1 スライドに復帰(multi-slide PDF が 1 枚に
|
|
48
|
+
collapse する regression を fix)。
|
|
49
|
+
|
|
50
|
+
### Fixed (codex review round 1〜10 で潰した issues)
|
|
51
|
+
|
|
52
|
+
- file_update が編集中に来た場合の deferred render(focus blur 後に再描画)
|
|
53
|
+
- tab 切替中の status 誤配信 / 誤った deck の STALE backup 上書き
|
|
54
|
+
- drag 中に detach されたとき body cursor / userSelect の残留
|
|
55
|
+
- BroadcastChannel 不在環境での `queue 未初期化` regression(saveQueue を channel
|
|
56
|
+
から独立させた)
|
|
57
|
+
- Presenter editing 中に inline 由来の `note-saved` で status / backup が汚染
|
|
58
|
+
- 古い save が完了した時点で `保存済み` と表示する誤報(live editor とのテキスト
|
|
59
|
+
一致 + pending timer 不在を確認)
|
|
60
|
+
|
|
61
|
+
### Tests
|
|
62
|
+
|
|
63
|
+
- 251 → **257 件 (+6)**:
|
|
64
|
+
- saveQueue の Promise 返却 / COALESCED / DROPPED / origin forwarding /
|
|
65
|
+
per-origin coalesce 5 件
|
|
66
|
+
- 既存 saveQueue regression の vm sandbox 互換 fix 1 件
|
|
67
|
+
|
|
8
68
|
## [0.5.15] - 2026-05-09
|
|
9
69
|
|
|
10
70
|
### Refactored
|