feat(npcs): inspect cards, Show overlay, and optional external link

Clicking an NPC tile opens description cards (multi-select accordion); Show puts avatars on screen. Optional URL opens a webview tab. Avatar pan in the editor commits on pointer up.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-08-19 10:42:57 +08:00
parent 1a9f0f2557
commit 0f4bb76b41
35 changed files with 1189 additions and 259 deletions
@@ -129,4 +129,18 @@ void test('NpcsEditorApp: token appearance via PlayerTokenView', () => {
const src = fs.readFileSync(path.join(rendererRoot, 'npcs/NpcsEditorApp.tsx'), 'utf8');
assert.ok(src.includes('PlayerTokenView'));
assert.ok(src.includes('disposition') || src.includes('updateNpcFields'));
assert.ok(src.includes('avatarPickHint'));
assert.ok(src.includes('useFileDropZone'));
assert.ok(!src.includes("t('npcs.chooseAvatar')"));
assert.ok(src.includes('externalUrl'));
});
void test('NpcsApp: inspect cards vs Show checkbox, webview for external link', () => {
const src = fs.readFileSync(path.join(rendererRoot, 'npcs/NpcsApp.tsx'), 'utf8');
assert.ok(src.includes("kind: 'inspect.toggle'"));
assert.ok(src.includes('onActivate()'));
assert.ok(src.includes("kind: 'toggle'"));
assert.ok(src.includes('npcs.showOnScreen'));
assert.ok(src.includes('NpcExternalWebview') || src.includes('webview'));
assert.ok(src.includes('npcs.tabExternalLink'));
});