Add ink integration UI and media playback
This commit is contained in:
Vendored
+32
@@ -0,0 +1,32 @@
|
||||
export type InputMode = 'text' | 'choice' | 'end';
|
||||
export interface StoryTag {
|
||||
key: string;
|
||||
value?: string;
|
||||
param?: string;
|
||||
}
|
||||
export interface ParagraphResult {
|
||||
text: string;
|
||||
tags: StoryTag[];
|
||||
}
|
||||
export interface ChoiceResult {
|
||||
index: number;
|
||||
text: string;
|
||||
tags: StoryTag[];
|
||||
category?: string;
|
||||
letter?: string;
|
||||
}
|
||||
export interface TurnResult {
|
||||
turnId: number;
|
||||
paragraphs: ParagraphResult[];
|
||||
choices: ChoiceResult[];
|
||||
inputMode: InputMode;
|
||||
globalTags?: StoryTag[];
|
||||
gameState?: {
|
||||
currentRoomId?: string;
|
||||
score?: number;
|
||||
moves?: number;
|
||||
statusLine?: string;
|
||||
};
|
||||
suggestions?: string[];
|
||||
}
|
||||
export declare function textToParagraphs(text: string, tags?: StoryTag[]): ParagraphResult[];
|
||||
Vendored
+36
@@ -0,0 +1,36 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.textToParagraphs = textToParagraphs;
|
||||
/**
|
||||
* Shared engine-to-client turn protocol.
|
||||
*/
|
||||
const tag_parser_1 = require("../utils/tag-parser");
|
||||
function textToParagraphs(text, tags = []) {
|
||||
return String(text || '')
|
||||
.replace(/\r\n?/g, '\n')
|
||||
.split(/\n{2,}/)
|
||||
.map((paragraph) => paragraph.trim())
|
||||
.filter(Boolean)
|
||||
.map((paragraph) => {
|
||||
const lines = paragraph.split('\n');
|
||||
const paragraphTags = [...tags];
|
||||
const textLines = [];
|
||||
let tagPrefixOpen = true;
|
||||
for (const line of lines) {
|
||||
const trimmed = line.trim();
|
||||
const maybeTag = tagPrefixOpen && trimmed.startsWith('#') ? (0, tag_parser_1.parseTag)(trimmed) : null;
|
||||
if (maybeTag) {
|
||||
paragraphTags.push(maybeTag);
|
||||
}
|
||||
else {
|
||||
tagPrefixOpen = false;
|
||||
textLines.push(line);
|
||||
}
|
||||
}
|
||||
return {
|
||||
text: textLines.join('\n').trim(),
|
||||
tags: paragraphTags,
|
||||
};
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=turn-result.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"turn-result.js","sourceRoot":"","sources":["../../src/interfaces/turn-result.ts"],"names":[],"mappings":";;AAyCA,4CA6BC;AAtED;;GAEG;AACH,oDAA+C;AAsC/C,SAAgB,gBAAgB,CAAC,IAAY,EAAE,OAAmB,EAAE;IAClE,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvB,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACpC,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,aAAa,GAAe,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAErF,IAAI,QAAQ,EAAE,CAAC;gBACb,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,KAAK,CAAC;gBACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YACjC,IAAI,EAAE,aAAa;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
||||
Reference in New Issue
Block a user