@kawaijs/renderer-dom 0.1.11 → 0.1.13

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.
Files changed (107) hide show
  1. package/README.md +34 -12
  2. package/dist/asset-fallbacks.d.ts +13 -0
  3. package/dist/asset-fallbacks.d.ts.map +1 -0
  4. package/dist/asset-fallbacks.js +41 -0
  5. package/dist/asset-fallbacks.js.map +1 -0
  6. package/dist/components/choice-menu.d.ts +12 -0
  7. package/dist/components/choice-menu.d.ts.map +1 -0
  8. package/dist/components/choice-menu.js +43 -0
  9. package/dist/components/choice-menu.js.map +1 -0
  10. package/dist/components/dialogue-box.d.ts +29 -0
  11. package/dist/components/dialogue-box.d.ts.map +1 -0
  12. package/dist/components/dialogue-box.js +155 -0
  13. package/dist/components/dialogue-box.js.map +1 -0
  14. package/dist/components/hotspot-layer.d.ts +13 -0
  15. package/dist/components/hotspot-layer.d.ts.map +1 -0
  16. package/dist/components/hotspot-layer.js +48 -0
  17. package/dist/components/hotspot-layer.js.map +1 -0
  18. package/dist/components/main-menu.d.ts +36 -0
  19. package/dist/components/main-menu.d.ts.map +1 -0
  20. package/dist/components/main-menu.js +258 -0
  21. package/dist/components/main-menu.js.map +1 -0
  22. package/dist/components/quick-menu.d.ts +22 -0
  23. package/dist/components/quick-menu.d.ts.map +1 -0
  24. package/dist/components/quick-menu.js +59 -0
  25. package/dist/components/quick-menu.js.map +1 -0
  26. package/dist/components/stage-layer.d.ts +39 -0
  27. package/dist/components/stage-layer.d.ts.map +1 -0
  28. package/dist/components/stage-layer.js +257 -0
  29. package/dist/components/stage-layer.js.map +1 -0
  30. package/dist/components/vfx-layer.d.ts +32 -0
  31. package/dist/components/vfx-layer.d.ts.map +1 -0
  32. package/dist/components/vfx-layer.js +357 -0
  33. package/dist/components/vfx-layer.js.map +1 -0
  34. package/dist/embed.d.ts +5 -0
  35. package/dist/embed.d.ts.map +1 -0
  36. package/dist/embed.js +17 -0
  37. package/dist/embed.js.map +1 -0
  38. package/dist/icons.d.ts +31 -0
  39. package/dist/icons.d.ts.map +1 -0
  40. package/dist/icons.js +31 -0
  41. package/dist/icons.js.map +1 -0
  42. package/dist/index.d.ts +31 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +69 -3
  45. package/dist/index.js.map +1 -1
  46. package/dist/layout/viewport-adapter.d.ts +52 -0
  47. package/dist/layout/viewport-adapter.d.ts.map +1 -0
  48. package/dist/layout/viewport-adapter.js +146 -0
  49. package/dist/layout/viewport-adapter.js.map +1 -0
  50. package/dist/modals/about-modal.d.ts +3 -0
  51. package/dist/modals/about-modal.d.ts.map +1 -0
  52. package/dist/modals/about-modal.js +59 -0
  53. package/dist/modals/about-modal.js.map +1 -0
  54. package/dist/modals/achievements-modal.d.ts +4 -0
  55. package/dist/modals/achievements-modal.d.ts.map +1 -0
  56. package/dist/modals/achievements-modal.js +103 -0
  57. package/dist/modals/achievements-modal.js.map +1 -0
  58. package/dist/modals/confirm-modal.d.ts +9 -0
  59. package/dist/modals/confirm-modal.d.ts.map +1 -0
  60. package/dist/modals/confirm-modal.js +80 -0
  61. package/dist/modals/confirm-modal.js.map +1 -0
  62. package/dist/modals/gallery-modal.d.ts +4 -0
  63. package/dist/modals/gallery-modal.d.ts.map +1 -0
  64. package/dist/modals/gallery-modal.js +128 -0
  65. package/dist/modals/gallery-modal.js.map +1 -0
  66. package/dist/modals/history-modal.d.ts +3 -0
  67. package/dist/modals/history-modal.d.ts.map +1 -0
  68. package/dist/modals/history-modal.js +66 -0
  69. package/dist/modals/history-modal.js.map +1 -0
  70. package/dist/modals/input-modal.d.ts +10 -0
  71. package/dist/modals/input-modal.d.ts.map +1 -0
  72. package/dist/modals/input-modal.js +62 -0
  73. package/dist/modals/input-modal.js.map +1 -0
  74. package/dist/modals/save-load-modal.d.ts +3 -0
  75. package/dist/modals/save-load-modal.d.ts.map +1 -0
  76. package/dist/modals/save-load-modal.js +262 -0
  77. package/dist/modals/save-load-modal.js.map +1 -0
  78. package/dist/modals/settings-modal.d.ts +14 -0
  79. package/dist/modals/settings-modal.d.ts.map +1 -0
  80. package/dist/modals/settings-modal.js +128 -0
  81. package/dist/modals/settings-modal.js.map +1 -0
  82. package/dist/renderer.d.ts +65 -56
  83. package/dist/renderer.d.ts.map +1 -1
  84. package/dist/renderer.js +655 -734
  85. package/dist/renderer.js.map +1 -1
  86. package/dist/share-meta.d.ts +27 -0
  87. package/dist/share-meta.d.ts.map +1 -0
  88. package/dist/share-meta.js +113 -0
  89. package/dist/share-meta.js.map +1 -0
  90. package/dist/touch.d.ts +16 -0
  91. package/dist/touch.d.ts.map +1 -0
  92. package/dist/touch.js +66 -0
  93. package/dist/touch.js.map +1 -0
  94. package/dist/types.d.ts +134 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +85 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/focus-trap.d.ts +6 -0
  99. package/dist/utils/focus-trap.d.ts.map +1 -0
  100. package/dist/utils/focus-trap.js +52 -0
  101. package/dist/utils/focus-trap.js.map +1 -0
  102. package/dist/utils/rich-text.d.ts +7 -0
  103. package/dist/utils/rich-text.d.ts.map +1 -0
  104. package/dist/utils/rich-text.js +31 -0
  105. package/dist/utils/rich-text.js.map +1 -0
  106. package/package.json +17 -3
  107. package/src/theme.css +2081 -685
@@ -0,0 +1,262 @@
1
+ import { encodeContinueToken, buildContinueHref } from '@kawaijs/runtime';
2
+ import { SVG_ICONS } from '../icons.js';
3
+ import { showConfirmModal } from './confirm-modal.js';
4
+ import { trapFocus } from '../utils/focus-trap.js';
5
+ function cleanPreviewText(text) {
6
+ return text
7
+ .replace(/\{[a-zA-Z0-9#=_., -]+\}/g, '')
8
+ .replace(/\{(?:\/)[a-zA-Z0-9]+\}/g, '')
9
+ .trim();
10
+ }
11
+ export async function showSaveLoadModal(rootEl, vm, mode, onLoaded) {
12
+ const existing = rootEl.querySelector('.kawa-modal-overlay:not(.kawa-confirm-overlay)');
13
+ if (existing)
14
+ existing.remove();
15
+ const overlay = document.createElement('div');
16
+ overlay.className = 'kawa-modal-overlay';
17
+ const card = document.createElement('div');
18
+ card.className = 'kawa-modal-card';
19
+ card.setAttribute('role', 'dialog');
20
+ card.setAttribute('aria-modal', 'true');
21
+ card.setAttribute('aria-label', mode === 'save' ? 'Save Game' : 'Load Game');
22
+ const header = document.createElement('div');
23
+ header.className = 'kawa-modal-header';
24
+ const title = document.createElement('div');
25
+ title.className = 'kawa-modal-title';
26
+ title.innerHTML = `${mode === 'save' ? SVG_ICONS.save : SVG_ICONS.load} <span>${mode === 'save' ? 'Save Game' : 'Load Game'}</span>`;
27
+ const releaseFocus = trapFocus(card);
28
+ const close = () => {
29
+ releaseFocus();
30
+ overlay.remove();
31
+ };
32
+ const closeBtn = document.createElement('button');
33
+ closeBtn.type = 'button';
34
+ closeBtn.className = 'kawa-btn';
35
+ closeBtn.innerHTML = `${SVG_ICONS.close} <span>Close</span>`;
36
+ closeBtn.setAttribute('aria-label', 'Close modal');
37
+ closeBtn.addEventListener('click', (e) => {
38
+ e.preventDefault();
39
+ close();
40
+ });
41
+ header.appendChild(title);
42
+ header.appendChild(closeBtn);
43
+ const body = document.createElement('div');
44
+ body.className = 'kawa-modal-body';
45
+ const shareCurrent = document.createElement('button');
46
+ shareCurrent.type = 'button';
47
+ shareCurrent.className = 'kawa-slot-btn kawa-slot-btn-link kawa-continue-link-btn';
48
+ shareCurrent.innerHTML = `${SVG_ICONS.bookmark} <span>Copy continue link (current progress)</span>`;
49
+ shareCurrent.setAttribute('aria-label', 'Copy continue link for current progress');
50
+ shareCurrent.addEventListener('click', async (e) => {
51
+ e.preventDefault();
52
+ const slot = await vm.save('__continue_share__');
53
+ const token = encodeContinueToken(slot);
54
+ await vm.getSaveManager().deleteSlot('__continue_share__');
55
+ if (!token) {
56
+ shareCurrent.querySelector('span').textContent = 'Progress too large to link';
57
+ return;
58
+ }
59
+ const href = buildContinueHref(token);
60
+ try {
61
+ if (navigator.clipboard?.writeText) {
62
+ await navigator.clipboard.writeText(href);
63
+ }
64
+ else {
65
+ window.prompt('Copy this continue link:', href);
66
+ }
67
+ const label = shareCurrent.querySelector('span');
68
+ if (label) {
69
+ label.textContent = 'Continue link copied!';
70
+ window.setTimeout(() => {
71
+ label.textContent = 'Copy continue link (current progress)';
72
+ }, 1600);
73
+ }
74
+ }
75
+ catch {
76
+ window.prompt('Copy this continue link:', href);
77
+ }
78
+ });
79
+ body.appendChild(shareCurrent);
80
+ const grid = document.createElement('div');
81
+ grid.className = 'kawa-slots-grid';
82
+ const saveManager = vm.getSaveManager();
83
+ const slots = await saveManager.listSlots(6);
84
+ slots.forEach((slot, idx) => {
85
+ const slotNum = String(idx + 1);
86
+ const isOccupied = slot !== null;
87
+ const slotCard = document.createElement('div');
88
+ slotCard.className = `kawa-slot-card ${isOccupied ? 'kawa-slot-occupied' : 'kawa-slot-empty'}`;
89
+ const slotHeader = document.createElement('div');
90
+ slotHeader.className = 'kawa-slot-header';
91
+ const badge = document.createElement('span');
92
+ badge.className = `kawa-slot-badge ${isOccupied ? 'kawa-slot-badge-occupied' : 'kawa-slot-badge-empty'}`;
93
+ badge.innerHTML = `${SVG_ICONS.bookmark} <span>Slot ${slotNum}</span>`;
94
+ const timeSpan = document.createElement('span');
95
+ timeSpan.className = 'kawa-slot-time';
96
+ if (slot) {
97
+ const d = new Date(slot.timestamp);
98
+ const dateFormatted = d.toLocaleDateString(undefined, {
99
+ month: '2-digit',
100
+ day: '2-digit',
101
+ year: 'numeric'
102
+ });
103
+ const timeFormatted = d.toLocaleTimeString(undefined, {
104
+ hour: '2-digit',
105
+ minute: '2-digit',
106
+ second: '2-digit'
107
+ });
108
+ timeSpan.innerHTML = `${SVG_ICONS.clock} <span>${dateFormatted}, ${timeFormatted}</span>`;
109
+ timeSpan.title = d.toLocaleString();
110
+ }
111
+ else {
112
+ timeSpan.textContent = 'Empty';
113
+ }
114
+ slotHeader.appendChild(badge);
115
+ slotHeader.appendChild(timeSpan);
116
+ slotCard.appendChild(slotHeader);
117
+ if (slot) {
118
+ const preview = document.createElement('div');
119
+ preview.className = 'kawa-slot-preview';
120
+ const previewIcon = document.createElement('span');
121
+ previewIcon.className = 'kawa-slot-preview-icon';
122
+ previewIcon.innerHTML = SVG_ICONS.quote;
123
+ const previewText = document.createElement('span');
124
+ previewText.className = 'kawa-slot-preview-text';
125
+ previewText.textContent = cleanPreviewText(slot.previewText || `Label: ${slot.snapshot.state.currentLabel}`);
126
+ preview.appendChild(previewIcon);
127
+ preview.appendChild(previewText);
128
+ slotCard.appendChild(preview);
129
+ }
130
+ else {
131
+ const emptyState = document.createElement('div');
132
+ emptyState.className = 'kawa-slot-empty-content';
133
+ const emptyIcon = document.createElement('span');
134
+ emptyIcon.className = 'kawa-slot-empty-icon';
135
+ emptyIcon.innerHTML = SVG_ICONS.plus;
136
+ const emptyText = document.createElement('span');
137
+ emptyText.className = 'kawa-slot-empty-text';
138
+ emptyText.textContent = 'No save data';
139
+ emptyState.appendChild(emptyIcon);
140
+ emptyState.appendChild(emptyText);
141
+ slotCard.appendChild(emptyState);
142
+ }
143
+ const actions = document.createElement('div');
144
+ actions.className = 'kawa-slot-actions';
145
+ if (mode === 'save') {
146
+ const saveActionBtn = document.createElement('button');
147
+ saveActionBtn.type = 'button';
148
+ saveActionBtn.className = 'kawa-slot-btn kawa-slot-btn-save';
149
+ const label = isOccupied ? 'Overwrite' : 'Save Here';
150
+ saveActionBtn.innerHTML = `${SVG_ICONS.save} <span>${label}</span>`;
151
+ saveActionBtn.setAttribute('aria-label', `${label} slot ${slotNum}`);
152
+ saveActionBtn.addEventListener('click', async (e) => {
153
+ e.preventDefault();
154
+ await vm.save(slotNum);
155
+ close();
156
+ void showSaveLoadModal(rootEl, vm, 'save', onLoaded);
157
+ });
158
+ actions.appendChild(saveActionBtn);
159
+ }
160
+ else {
161
+ if (slot) {
162
+ const loadActionBtn = document.createElement('button');
163
+ loadActionBtn.type = 'button';
164
+ loadActionBtn.className = 'kawa-slot-btn kawa-slot-btn-load';
165
+ loadActionBtn.innerHTML = `${SVG_ICONS.load} <span>Load</span>`;
166
+ loadActionBtn.setAttribute('aria-label', `Load slot ${slotNum}`);
167
+ loadActionBtn.addEventListener('click', async (e) => {
168
+ e.preventDefault();
169
+ const ok = await vm.load(slotNum);
170
+ if (ok) {
171
+ close();
172
+ onLoaded?.();
173
+ }
174
+ });
175
+ actions.appendChild(loadActionBtn);
176
+ }
177
+ else {
178
+ const emptyBtn = document.createElement('button');
179
+ emptyBtn.type = 'button';
180
+ emptyBtn.className = 'kawa-slot-btn kawa-slot-btn-disabled';
181
+ emptyBtn.disabled = true;
182
+ emptyBtn.innerHTML = `${SVG_ICONS.load} <span>Empty</span>`;
183
+ actions.appendChild(emptyBtn);
184
+ }
185
+ }
186
+ if (slot) {
187
+ const linkBtn = document.createElement('button');
188
+ linkBtn.type = 'button';
189
+ linkBtn.className = 'kawa-slot-btn kawa-slot-btn-link';
190
+ linkBtn.innerHTML = `${SVG_ICONS.bookmark} <span>Copy Link</span>`;
191
+ linkBtn.title = 'Copy continue link';
192
+ linkBtn.setAttribute('aria-label', `Copy continue link for slot ${slotNum}`);
193
+ linkBtn.addEventListener('click', async (e) => {
194
+ e.preventDefault();
195
+ e.stopPropagation();
196
+ const token = encodeContinueToken(slot);
197
+ if (!token) {
198
+ linkBtn.querySelector('span').textContent = 'Too large';
199
+ return;
200
+ }
201
+ const href = buildContinueHref(token);
202
+ try {
203
+ if (navigator.clipboard?.writeText) {
204
+ await navigator.clipboard.writeText(href);
205
+ }
206
+ else {
207
+ const ta = document.createElement('textarea');
208
+ ta.value = href;
209
+ ta.style.position = 'fixed';
210
+ ta.style.left = '-9999px';
211
+ document.body.appendChild(ta);
212
+ ta.select();
213
+ document.execCommand('copy');
214
+ ta.remove();
215
+ }
216
+ const label = linkBtn.querySelector('span');
217
+ if (label) {
218
+ const prev = label.textContent;
219
+ label.textContent = 'Copied!';
220
+ window.setTimeout(() => {
221
+ label.textContent = prev;
222
+ }, 1400);
223
+ }
224
+ }
225
+ catch {
226
+ window.prompt('Copy this continue link:', href);
227
+ }
228
+ });
229
+ actions.appendChild(linkBtn);
230
+ const delBtn = document.createElement('button');
231
+ delBtn.type = 'button';
232
+ delBtn.className = 'kawa-slot-btn kawa-slot-btn-del';
233
+ delBtn.innerHTML = SVG_ICONS.trash;
234
+ delBtn.title = 'Delete Save';
235
+ delBtn.setAttribute('aria-label', `Delete slot ${slotNum}`);
236
+ delBtn.addEventListener('click', (e) => {
237
+ e.preventDefault();
238
+ e.stopPropagation();
239
+ showConfirmModal(rootEl, {
240
+ title: 'Delete Save',
241
+ message: `Are you sure you want to delete Slot ${slotNum}? This cannot be undone.`,
242
+ confirmText: 'Delete',
243
+ cancelText: 'Cancel',
244
+ onConfirm: async () => {
245
+ await saveManager.deleteSlot(slotNum);
246
+ close();
247
+ void showSaveLoadModal(rootEl, vm, mode, onLoaded);
248
+ }
249
+ });
250
+ });
251
+ actions.appendChild(delBtn);
252
+ }
253
+ slotCard.appendChild(actions);
254
+ grid.appendChild(slotCard);
255
+ });
256
+ body.appendChild(grid);
257
+ card.appendChild(header);
258
+ card.appendChild(body);
259
+ overlay.appendChild(card);
260
+ rootEl.appendChild(overlay);
261
+ }
262
+ //# sourceMappingURL=save-load-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-load-modal.js","sourceRoot":"","sources":["../../src/modals/save-load-modal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface SettingsModalOptions {
2
+ typewriterSpeed: number;
3
+ autoDelayMs: number;
4
+ musicVolume?: number;
5
+ soundVolume?: number;
6
+ onSettingsChange: (settings: {
7
+ typewriterSpeed: number;
8
+ autoDelayMs: number;
9
+ musicVolume?: number;
10
+ soundVolume?: number;
11
+ }) => void;
12
+ }
13
+ export declare function showSettingsModal(rootEl: HTMLElement, options: SettingsModalOptions): void;
14
+ //# sourceMappingURL=settings-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-modal.d.ts","sourceRoot":"","sources":["../../src/modals/settings-modal.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,CAAC,QAAQ,EAAE;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,CAAC;CACZ;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CA2I1F"}
@@ -0,0 +1,128 @@
1
+ import { SVG_ICONS } from '../icons.js';
2
+ import { trapFocus } from '../utils/focus-trap.js';
3
+ export function showSettingsModal(rootEl, options) {
4
+ const existing = rootEl.querySelector('.kawa-modal-overlay:not(.kawa-confirm-overlay)');
5
+ if (existing)
6
+ existing.remove();
7
+ let currentSpeed = options.typewriterSpeed;
8
+ let currentDelay = options.autoDelayMs;
9
+ let currentMusic = options.musicVolume ?? 0.8;
10
+ let currentSound = options.soundVolume ?? 1.0;
11
+ const overlay = document.createElement('div');
12
+ overlay.className = 'kawa-modal-overlay';
13
+ const card = document.createElement('div');
14
+ card.className = 'kawa-modal-card';
15
+ card.setAttribute('role', 'dialog');
16
+ card.setAttribute('aria-modal', 'true');
17
+ card.setAttribute('aria-label', 'Preferences / Settings');
18
+ const header = document.createElement('div');
19
+ header.className = 'kawa-modal-header';
20
+ const title = document.createElement('div');
21
+ title.className = 'kawa-modal-title';
22
+ title.innerHTML = `${SVG_ICONS.settings} <span>Preferences</span>`;
23
+ const releaseFocus = trapFocus(card);
24
+ const close = () => {
25
+ releaseFocus();
26
+ overlay.remove();
27
+ };
28
+ const closeBtn = document.createElement('button');
29
+ closeBtn.type = 'button';
30
+ closeBtn.className = 'kawa-btn';
31
+ closeBtn.innerHTML = `${SVG_ICONS.close} <span>Close</span>`;
32
+ closeBtn.setAttribute('aria-label', 'Close settings');
33
+ closeBtn.addEventListener('click', (e) => {
34
+ e.preventDefault();
35
+ close();
36
+ });
37
+ header.appendChild(title);
38
+ header.appendChild(closeBtn);
39
+ const body = document.createElement('div');
40
+ body.className = 'kawa-modal-body';
41
+ const notifyChange = () => {
42
+ options.onSettingsChange({
43
+ typewriterSpeed: currentSpeed,
44
+ autoDelayMs: currentDelay,
45
+ musicVolume: currentMusic,
46
+ soundVolume: currentSound
47
+ });
48
+ };
49
+ // 1. Text Speed
50
+ const speedRow = document.createElement('div');
51
+ speedRow.className = 'kawa-setting-row';
52
+ speedRow.innerHTML = `
53
+ <div class="kawa-setting-header">
54
+ <span>Text Display Speed</span>
55
+ <span class="kawa-setting-value" id="kawa-speed-val">${currentSpeed === 0 ? 'Instant' : `${currentSpeed}ms`}</span>
56
+ </div>
57
+ <input type="range" class="kawa-slider" id="kawa-speed-slider" min="0" max="60" step="5" value="${currentSpeed}">
58
+ `;
59
+ const speedInput = speedRow.querySelector('#kawa-speed-slider');
60
+ const speedValEl = speedRow.querySelector('#kawa-speed-val');
61
+ speedInput.addEventListener('input', () => {
62
+ currentSpeed = Number(speedInput.value);
63
+ speedValEl.textContent = currentSpeed === 0 ? 'Instant' : `${currentSpeed}ms`;
64
+ notifyChange();
65
+ });
66
+ // 2. Auto Forward Delay
67
+ const autoRow = document.createElement('div');
68
+ autoRow.className = 'kawa-setting-row';
69
+ const autoVal = (currentDelay / 1000).toFixed(1);
70
+ autoRow.innerHTML = `
71
+ <div class="kawa-setting-header">
72
+ <span>Auto-Forward Time</span>
73
+ <span class="kawa-setting-value" id="kawa-auto-val">${autoVal}s</span>
74
+ </div>
75
+ <input type="range" class="kawa-slider" id="kawa-auto-slider" min="500" max="5000" step="250" value="${currentDelay}">
76
+ `;
77
+ const autoInput = autoRow.querySelector('#kawa-auto-slider');
78
+ const autoValEl = autoRow.querySelector('#kawa-auto-val');
79
+ autoInput.addEventListener('input', () => {
80
+ currentDelay = Number(autoInput.value);
81
+ autoValEl.textContent = `${(currentDelay / 1000).toFixed(1)}s`;
82
+ notifyChange();
83
+ });
84
+ // 3. Audio Volume Sliders
85
+ const musicRow = document.createElement('div');
86
+ musicRow.className = 'kawa-setting-row';
87
+ const musicPercent = Math.round(currentMusic * 100);
88
+ musicRow.innerHTML = `
89
+ <div class="kawa-setting-header">
90
+ <span>${SVG_ICONS.volumeOn} Music Volume</span>
91
+ <span class="kawa-setting-value" id="kawa-music-val">${musicPercent}%</span>
92
+ </div>
93
+ <input type="range" class="kawa-slider" id="kawa-music-slider" min="0" max="100" step="5" value="${musicPercent}">
94
+ `;
95
+ const musicInput = musicRow.querySelector('#kawa-music-slider');
96
+ const musicValEl = musicRow.querySelector('#kawa-music-val');
97
+ musicInput.addEventListener('input', () => {
98
+ currentMusic = Number(musicInput.value) / 100;
99
+ musicValEl.textContent = `${musicInput.value}%`;
100
+ notifyChange();
101
+ });
102
+ const sfxRow = document.createElement('div');
103
+ sfxRow.className = 'kawa-setting-row';
104
+ const sfxPercent = Math.round(currentSound * 100);
105
+ sfxRow.innerHTML = `
106
+ <div class="kawa-setting-header">
107
+ <span>${SVG_ICONS.volumeOn} Sound & Voice Volume</span>
108
+ <span class="kawa-setting-value" id="kawa-sfx-val">${sfxPercent}%</span>
109
+ </div>
110
+ <input type="range" class="kawa-slider" id="kawa-sfx-slider" min="0" max="100" step="5" value="${sfxPercent}">
111
+ `;
112
+ const sfxInput = sfxRow.querySelector('#kawa-sfx-slider');
113
+ const sfxValEl = sfxRow.querySelector('#kawa-sfx-val');
114
+ sfxInput.addEventListener('input', () => {
115
+ currentSound = Number(sfxInput.value) / 100;
116
+ sfxValEl.textContent = `${sfxInput.value}%`;
117
+ notifyChange();
118
+ });
119
+ body.appendChild(speedRow);
120
+ body.appendChild(autoRow);
121
+ body.appendChild(musicRow);
122
+ body.appendChild(sfxRow);
123
+ card.appendChild(header);
124
+ card.appendChild(body);
125
+ overlay.appendChild(card);
126
+ rootEl.appendChild(overlay);
127
+ }
128
+ //# sourceMappingURL=settings-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-modal.js","sourceRoot":"","sources":["../../src/modals/settings-modal.ts"],"names":[],"mappings":"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"}
@@ -1,86 +1,95 @@
1
1
  import type { StoryPackage } from '@kawaijs/ast';
2
2
  import type { StoryVM } from '@kawaijs/runtime';
3
- export type AssetType = 'background' | 'character' | 'audio';
4
- export declare function defaultAssetResolver(path: string, type: AssetType): string;
5
- /**
6
- * Preload all background and character assets mentioned in a story to eliminate visual flashes.
7
- */
8
- export declare function preloadStoryAssets(story: StoryPackage, assetResolver?: (path: string, type: AssetType) => string): void;
9
- export declare const SVG_ICONS: {
10
- back: string;
11
- history: string;
12
- save: string;
13
- load: string;
14
- auto: string;
15
- skip: string;
16
- settings: string;
17
- volumeOn: string;
18
- volumeMute: string;
19
- trash: string;
20
- close: string;
21
- arrowDown: string;
22
- replay: string;
23
- };
24
- /**
25
- * Parses inline rich text markup: {b}...{/b}, {i}...{/i}, {color=#hex}...{/color}, {size=1.2em}...{/size}
26
- */
27
- export declare function formatRichText(raw: string): string;
28
- export interface DOMRendererOptions {
29
- container: HTMLElement;
30
- typewriterSpeed?: number;
31
- autoDelayMs?: number;
32
- assetResolver?: (path: string, type: AssetType) => string;
33
- }
3
+ import { type DOMRendererOptions, type GalleryItem } from './types.js';
4
+ import { ViewportAdapter } from './layout/viewport-adapter.js';
5
+ export * from './icons.js';
6
+ export * from './types.js';
7
+ export * from './asset-fallbacks.js';
8
+ export * from './utils/rich-text.js';
9
+ export * from './utils/focus-trap.js';
10
+ export * from './layout/viewport-adapter.js';
11
+ export * from './modals/save-load-modal.js';
12
+ export * from './modals/settings-modal.js';
13
+ export * from './modals/history-modal.js';
14
+ export * from './modals/about-modal.js';
15
+ export * from './modals/gallery-modal.js';
16
+ export * from './modals/achievements-modal.js';
17
+ export * from './modals/confirm-modal.js';
18
+ export * from './modals/input-modal.js';
19
+ export * from './components/main-menu.js';
20
+ export * from './components/dialogue-box.js';
21
+ export * from './components/choice-menu.js';
22
+ export * from './components/quick-menu.js';
23
+ export * from './components/stage-layer.js';
24
+ export * from './components/vfx-layer.js';
25
+ export * from './share-meta.js';
26
+ export * from './embed.js';
27
+ export * from './touch.js';
28
+ export declare function extractGalleryItems(story?: StoryPackage): GalleryItem[];
34
29
  export declare class DOMRenderer {
35
30
  private readonly vm;
36
31
  private readonly container;
32
+ private readonly options;
37
33
  private typewriterSpeed;
38
34
  private autoDelayMs;
35
+ private musicVolume;
36
+ private soundVolume;
39
37
  private readonly assetResolver;
38
+ private readonly mainMenuOptions?;
39
+ private readonly audioManager?;
40
40
  private rootEl;
41
- private stageEl;
42
- private backgroundEl;
43
- private bgLayerA;
44
- private bgLayerB;
45
- private activeBgLayer;
46
- private currentBgUrl;
47
- private charactersEl;
48
- private activeCharacters;
49
- private modeBadgeEl;
50
- private dialogueBoxEl;
51
- private speakerTagEl;
52
- private dialogueTextEl;
53
- private choiceContainerEl;
54
- private backBtnEl;
55
- private autoBtnEl;
56
- private skipBtnEl;
57
- private currentTypewriterInterval;
58
- private isTypewriting;
59
- private fullCurrentText;
60
- private isChoicePending;
41
+ private stageLayer;
42
+ private dialogueBox;
43
+ private choiceMenu;
44
+ private hotspotLayer;
45
+ private quickMenu;
46
+ private mainMenu;
47
+ private viewportAdapter?;
48
+ private appliedStyleTargets;
61
49
  private isAutoMode;
62
50
  private isSkipMode;
63
51
  private autoTimer;
64
52
  private skipInterval;
53
+ private pauseTimer;
54
+ private errorToastTimer;
55
+ private advanceLockUntil;
56
+ private destroyed;
65
57
  private unsubscribeVMState?;
58
+ private unsubscribeCamera?;
59
+ private unsubscribeAudio?;
60
+ private unsubscribeError?;
66
61
  private boundKeyHandler?;
62
+ private touchControls?;
67
63
  constructor(vm: StoryVM, options: DOMRendererOptions);
68
64
  destroy(): void;
65
+ showErrorToast(message: string): void;
66
+ getViewportAdapter(): ViewportAdapter | undefined;
69
67
  shakeScreen(type?: 'shake' | 'vpunch' | 'hpunch'): void;
70
68
  flashScreen(): void;
71
69
  toggleAutoMode(force?: boolean): void;
72
70
  toggleSkipMode(force?: boolean): void;
71
+ showMainMenu(): void;
72
+ hideMainMenu(): void;
73
+ /** Keep title-screen a11y tree clean: gameplay controls must not stay focusable under the menu. */
74
+ private setGameplayUiInert;
75
+ isMainMenuActive(): boolean;
76
+ startNewGame(): void;
77
+ continueLatestGame(): Promise<boolean>;
78
+ showSaveLoadModal(mode: 'save' | 'load'): Promise<void>;
79
+ showSettingsModal(): void;
80
+ showHistoryModal(): void;
81
+ showAboutModal(): void;
82
+ showGalleryModal(): void;
73
83
  private updateModeUI;
74
84
  private scheduleAutoAdvance;
75
85
  private buildDOM;
76
86
  private bindEvents;
77
87
  private handleUserAdvance;
88
+ private syncUrlLabel;
89
+ private syncShareMeta;
90
+ private applyThemeAndStyles;
78
91
  private render;
79
- private startTypewriter;
80
- private finishTypewriter;
81
- showSettingsModal(): void;
92
+ private renderEndingCard;
82
93
  private saveSettings;
83
- showSaveLoadModal(mode: 'save' | 'load'): Promise<void>;
84
- showHistoryModal(): void;
85
94
  }
86
95
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}