Add ink integration UI and media playback
This commit is contained in:
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
import type { StoryTag } from '../interfaces/turn-result';
|
||||
export declare function parseTag(raw: string): StoryTag | null;
|
||||
export declare function parseTags(rawTags: unknown[] | undefined): StoryTag[];
|
||||
export declare function getTagValue(tags: StoryTag[], key: string): string | undefined;
|
||||
Vendored
+45
@@ -0,0 +1,45 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.parseTag = parseTag;
|
||||
exports.parseTags = parseTags;
|
||||
exports.getTagValue = getTagValue;
|
||||
const LEGACY_TAG_ALIASES = {
|
||||
audio: 'sfx',
|
||||
audioloop: 'music',
|
||||
separator: 'section',
|
||||
};
|
||||
function normalizeKey(key) {
|
||||
const normalized = key.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, '-');
|
||||
return LEGACY_TAG_ALIASES[normalized] || normalized;
|
||||
}
|
||||
function parseTag(raw) {
|
||||
const text = String(raw || '').trim().replace(/^#\s*/, '');
|
||||
if (!text)
|
||||
return null;
|
||||
const bracketMatch = text.match(/^([A-Za-z][\w-]*)(?:\[([^\]]*)\])?(?:\(([^)]*)\))?$/);
|
||||
if (bracketMatch) {
|
||||
const tag = { key: normalizeKey(bracketMatch[1]) };
|
||||
if (typeof bracketMatch[2] !== 'undefined')
|
||||
tag.value = bracketMatch[2].trim();
|
||||
if (typeof bracketMatch[3] !== 'undefined')
|
||||
tag.param = bracketMatch[3].trim();
|
||||
return tag;
|
||||
}
|
||||
const bareMatch = text.match(/^[A-Za-z][\w-]*$/);
|
||||
if (bareMatch) {
|
||||
return { key: normalizeKey(text) };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function parseTags(rawTags) {
|
||||
if (!Array.isArray(rawTags))
|
||||
return [];
|
||||
return rawTags
|
||||
.map((raw) => parseTag(String(raw ?? '')))
|
||||
.filter((tag) => Boolean(tag));
|
||||
}
|
||||
function getTagValue(tags, key) {
|
||||
const normalizedKey = normalizeKey(key);
|
||||
return tags.find((tag) => tag.key === normalizedKey)?.value;
|
||||
}
|
||||
//# sourceMappingURL=tag-parser.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"tag-parser.js","sourceRoot":"","sources":["../../src/utils/tag-parser.ts"],"names":[],"mappings":";;AAaA,4BAkBC;AAED,8BAMC;AAED,kCAGC;AA1CD,MAAM,kBAAkB,GAA2B;IACjD,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAC1E,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AACtD,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACvF,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,GAAa,EAAE,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,WAAW;YAAE,GAAG,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,IAAI,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,WAAW;YAAE,GAAG,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,SAAS,CAAC,OAA8B;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;SACzC,MAAM,CAAC,CAAC,GAAG,EAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,WAAW,CAAC,IAAgB,EAAE,GAAW;IACvD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC;AAC9D,CAAC"}
|
||||
Reference in New Issue
Block a user