@dataclouder/ngx-agent-cards 0.1.97 → 0.1.98
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.
|
@@ -772,11 +772,13 @@ function removeEmojis(text) {
|
|
|
772
772
|
return text.replace(/[\u{1F000}-\u{1F6FF}|\u{1F900}-\u{1F9FF}|\u{2600}-\u{26FF}|\u{2700}-\u{27BF}|\u{1F300}-\u{1F5FF}|\u{1F680}-\u{1F6FF}|\u{1F1E0}-\u{1F1FF}|\u{1F900}-\u{1F9FF}|\u{1F100}-\u{1F1FF}|\u{1F200}-\u{1F2FF}|\u{2100}-\u{26FF}]/gu, '');
|
|
773
773
|
}
|
|
774
774
|
function removeSpecialCharacters(inputText) {
|
|
775
|
-
// Remove special characters (*, _, [
|
|
775
|
+
// Remove special characters (*, _, [, ], `, #, >, -)
|
|
776
776
|
if (!inputText) {
|
|
777
777
|
return '';
|
|
778
778
|
}
|
|
779
|
-
|
|
779
|
+
// Remove markdown formatting: *, _, [, ], `, # (headers), > (blockquotes), - (lists)
|
|
780
|
+
// We also remove backticks as requested.
|
|
781
|
+
return inputText.replace(/[*_\[\]`#>]/g, '').replace(/^[-]\s+/gm, '');
|
|
780
782
|
}
|
|
781
783
|
|
|
782
784
|
class AudioService {
|
|
@@ -2424,37 +2426,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
2424
2426
|
function matchTranscription(originalText, transcription) {
|
|
2425
2427
|
const result = [];
|
|
2426
2428
|
const transcriptionMap = new Map();
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
console.log('Iluminado perfector');
|
|
2431
|
-
}
|
|
2432
|
-
// Create a map of lowercase words to an array of their corresponding objects in transcription
|
|
2429
|
+
// Helper to clean word for matching: lowercase and remove basic punctuation
|
|
2430
|
+
const cleanForMatch = (w) => w.toLowerCase().replace(/[.,!?;:()"]/g, '').trim();
|
|
2431
|
+
// Create a map of cleaned words to their transcription objects
|
|
2433
2432
|
for (const obj of transcription) {
|
|
2434
|
-
const
|
|
2435
|
-
if (
|
|
2436
|
-
|
|
2433
|
+
const cleaned = cleanForMatch(obj.word);
|
|
2434
|
+
if (!cleaned)
|
|
2435
|
+
continue;
|
|
2436
|
+
if (transcriptionMap.has(cleaned)) {
|
|
2437
|
+
transcriptionMap.get(cleaned).push(obj);
|
|
2437
2438
|
}
|
|
2438
2439
|
else {
|
|
2439
|
-
transcriptionMap.set(
|
|
2440
|
+
transcriptionMap.set(cleaned, [obj]);
|
|
2440
2441
|
}
|
|
2441
2442
|
}
|
|
2442
|
-
// Split the original text into
|
|
2443
|
-
const words = originalText.split(
|
|
2443
|
+
// Split the original text into words while keeping punctuation attached to the words
|
|
2444
|
+
const words = originalText.split(/\s+/);
|
|
2444
2445
|
let currentTime = 0;
|
|
2445
2446
|
for (const word of words) {
|
|
2446
|
-
const
|
|
2447
|
-
const matchedObjs = transcriptionMap.get(
|
|
2447
|
+
const cleaned = cleanForMatch(word);
|
|
2448
|
+
const matchedObjs = transcriptionMap.get(cleaned);
|
|
2448
2449
|
if (matchedObjs && matchedObjs.length > 0) {
|
|
2449
2450
|
const matchedObj = matchedObjs.shift();
|
|
2450
2451
|
result.push({
|
|
2451
|
-
word: word,
|
|
2452
|
+
word: word, // Keep original word with punctuation for display
|
|
2452
2453
|
start: Number(matchedObj.start.toFixed(3)),
|
|
2453
2454
|
end: Number(matchedObj.end.toFixed(3)),
|
|
2454
2455
|
});
|
|
2455
2456
|
currentTime = matchedObj.end;
|
|
2456
2457
|
}
|
|
2457
2458
|
else {
|
|
2459
|
+
// Fallback: if no match, use a zero-duration timestamp at the current time
|
|
2458
2460
|
result.push({
|
|
2459
2461
|
word: word,
|
|
2460
2462
|
start: Number(currentTime.toFixed(3)),
|
|
@@ -4265,11 +4267,11 @@ class MessageContentDisplayer {
|
|
|
4265
4267
|
console.log('debug', this.wordWithMeta());
|
|
4266
4268
|
}
|
|
4267
4269
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MessageContentDisplayer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4268
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MessageContentDisplayer, isStandalone: true, selector: "message-content-displayer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, markWord: { classPropertyName: "markWord", publicName: "markWord", isSignal: true, isRequired: false, transformFunction: null }, highlightColor: { classPropertyName: "highlightColor", publicName: "highlightColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { playAudio: "playAudio", audioCompleted: "audioCompleted", wordClicked: "wordClicked" }, host: { properties: { "style.--highlight-bg-color": "this.hostHighlightColor" } }, ngImport: i0, template: "<div class=\"audio-text-sync-container\">\n <i (click)=\"onPlayMessage()\" class=\"play-button\">\n @switch (iconState()) { @case ('loading') { <i class=\"spin-animation pi pi-spinner-dotted\"></i> } @case ('playing') { <i class=\"pi pi-volume-up\"></i> }\n @case ('paused') { <i class=\"pi pi-pause-circle\"></i> } @case ('playable') { <i class=\"pi pi-play-circle\" style=\"color: white\"></i> } }\n </i>\n\n <!-- Display transcription with highlighting -->\n <p style=\"width: 100%\" [class]=\"'text-content ' + classTag()\">\n @for (word of wordWithMeta(); track trackByIndex($index, word)) {\n <span\n [class]=\"word.tag\"\n [class.highlight]=\"word.isHighlighted\"\n [class.marked]=\"word.marked\"\n (click)=\"onWordClick(word)\"\n [attr.id]=\"'word-' + message().messageId + '-' + word.index\"\n >{{ word.word }}\n </span>\n }\n </p>\n</div>\n@if (message().imageUrl) {\n<div class=\"tour-image-container\" style=\"display: flex; justify-content: center\">\n <img [src]=\"message().imageUrl\" alt=\"Tour Image\" style=\"max-width: 220px; height: auto\" />\n</div>\n}\n", styles: [":host{display:block}.audio-text-sync-container{display:flex;align-items:flex-start;gap:2px;align-items:center}.play-button{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:24px;margin-top:4px}.play-button:hover{opacity:.8}.text-content{flex:1}.highlight{background-color:var(--highlight-bg-color, rgb(60, 216, 255));border-radius:4px}::ng-deep .marked{position:relative;color:#f8bfbc}::ng-deep .marked:before{content:\"\";z-index:-2;left:-.1em;top:.1em;border-width:2px;border-style:solid;border-color:#f27068;position:absolute;border-right-color:transparent;width:100%;height:1em;transform:rotate(2deg);opacity:.7;border-radius:50%;padding:.1em .25em}::ng-deep .marked:after{content:\"\";z-index:-1;left:-.1em;top:.4em;padding:.1em .25em;border-width:2px;border-style:solid;border-color:#f27068;border-left-color:transparent;border-top-color:transparent;position:absolute;width:100%;height:1em;transform:rotate(-1deg);opacity:.7;border-radius:50%}.spin-animation{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.em{font-style:italic;color
|
|
4270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MessageContentDisplayer, isStandalone: true, selector: "message-content-displayer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, markWord: { classPropertyName: "markWord", publicName: "markWord", isSignal: true, isRequired: false, transformFunction: null }, highlightColor: { classPropertyName: "highlightColor", publicName: "highlightColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { playAudio: "playAudio", audioCompleted: "audioCompleted", wordClicked: "wordClicked" }, host: { properties: { "style.--highlight-bg-color": "this.hostHighlightColor" } }, ngImport: i0, template: "<div class=\"audio-text-sync-container\">\n <i (click)=\"onPlayMessage()\" class=\"play-button\">\n @switch (iconState()) { @case ('loading') { <i class=\"spin-animation pi pi-spinner-dotted\"></i> } @case ('playing') { <i class=\"pi pi-volume-up\"></i> }\n @case ('paused') { <i class=\"pi pi-pause-circle\"></i> } @case ('playable') { <i class=\"pi pi-play-circle\" style=\"color: white\"></i> } }\n </i>\n\n <!-- Display transcription with highlighting -->\n <p style=\"width: 100%\" [class]=\"'text-content ' + classTag()\">\n @for (word of wordWithMeta(); track trackByIndex($index, word)) {\n <span\n [class]=\"word.tag\"\n [class.highlight]=\"word.isHighlighted\"\n [class.marked]=\"word.marked\"\n (click)=\"onWordClick(word)\"\n [attr.id]=\"'word-' + message().messageId + '-' + word.index\"\n >{{ word.word }}\n </span>\n }\n </p>\n</div>\n@if (message().imageUrl) {\n<div class=\"tour-image-container\" style=\"display: flex; justify-content: center\">\n <img [src]=\"message().imageUrl\" alt=\"Tour Image\" style=\"max-width: 220px; height: auto\" />\n</div>\n}\n", styles: [":host{display:block}.audio-text-sync-container{display:flex;align-items:flex-start;gap:2px;align-items:center}.play-button{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:24px;margin-top:4px}.play-button:hover{opacity:.8}.text-content{flex:1}.highlight{background-color:var(--highlight-bg-color, rgb(60, 216, 255));border-radius:4px}::ng-deep .marked{position:relative;color:#f8bfbc}::ng-deep .marked:before{content:\"\";z-index:-2;left:-.1em;top:.1em;border-width:2px;border-style:solid;border-color:#f27068;position:absolute;border-right-color:transparent;width:100%;height:1em;transform:rotate(2deg);opacity:.7;border-radius:50%;padding:.1em .25em}::ng-deep .marked:after{content:\"\";z-index:-1;left:-.1em;top:.4em;padding:.1em .25em;border-width:2px;border-style:solid;border-color:#f27068;border-left-color:transparent;border-top-color:transparent;position:absolute;width:100%;height:1em;transform:rotate(-1deg);opacity:.7;border-radius:50%}.spin-animation{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.em{font-style:italic;color:var(--chat-message-italic-color, rgb(184, 208, 252))}.strong{font-weight:700;color:inherit}.italic{font-style:italic;color:var(--chat-message-italic-color, rgb(252, 198, 184))}.em_strong{font-weight:700;font-style:italic;color:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4269
4271
|
}
|
|
4270
4272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MessageContentDisplayer, decorators: [{
|
|
4271
4273
|
type: Component,
|
|
4272
|
-
args: [{ selector: 'message-content-displayer', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"audio-text-sync-container\">\n <i (click)=\"onPlayMessage()\" class=\"play-button\">\n @switch (iconState()) { @case ('loading') { <i class=\"spin-animation pi pi-spinner-dotted\"></i> } @case ('playing') { <i class=\"pi pi-volume-up\"></i> }\n @case ('paused') { <i class=\"pi pi-pause-circle\"></i> } @case ('playable') { <i class=\"pi pi-play-circle\" style=\"color: white\"></i> } }\n </i>\n\n <!-- Display transcription with highlighting -->\n <p style=\"width: 100%\" [class]=\"'text-content ' + classTag()\">\n @for (word of wordWithMeta(); track trackByIndex($index, word)) {\n <span\n [class]=\"word.tag\"\n [class.highlight]=\"word.isHighlighted\"\n [class.marked]=\"word.marked\"\n (click)=\"onWordClick(word)\"\n [attr.id]=\"'word-' + message().messageId + '-' + word.index\"\n >{{ word.word }}\n </span>\n }\n </p>\n</div>\n@if (message().imageUrl) {\n<div class=\"tour-image-container\" style=\"display: flex; justify-content: center\">\n <img [src]=\"message().imageUrl\" alt=\"Tour Image\" style=\"max-width: 220px; height: auto\" />\n</div>\n}\n", styles: [":host{display:block}.audio-text-sync-container{display:flex;align-items:flex-start;gap:2px;align-items:center}.play-button{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:24px;margin-top:4px}.play-button:hover{opacity:.8}.text-content{flex:1}.highlight{background-color:var(--highlight-bg-color, rgb(60, 216, 255));border-radius:4px}::ng-deep .marked{position:relative;color:#f8bfbc}::ng-deep .marked:before{content:\"\";z-index:-2;left:-.1em;top:.1em;border-width:2px;border-style:solid;border-color:#f27068;position:absolute;border-right-color:transparent;width:100%;height:1em;transform:rotate(2deg);opacity:.7;border-radius:50%;padding:.1em .25em}::ng-deep .marked:after{content:\"\";z-index:-1;left:-.1em;top:.4em;padding:.1em .25em;border-width:2px;border-style:solid;border-color:#f27068;border-left-color:transparent;border-top-color:transparent;position:absolute;width:100%;height:1em;transform:rotate(-1deg);opacity:.7;border-radius:50%}.spin-animation{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.em{font-style:italic;color
|
|
4274
|
+
args: [{ selector: 'message-content-displayer', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"audio-text-sync-container\">\n <i (click)=\"onPlayMessage()\" class=\"play-button\">\n @switch (iconState()) { @case ('loading') { <i class=\"spin-animation pi pi-spinner-dotted\"></i> } @case ('playing') { <i class=\"pi pi-volume-up\"></i> }\n @case ('paused') { <i class=\"pi pi-pause-circle\"></i> } @case ('playable') { <i class=\"pi pi-play-circle\" style=\"color: white\"></i> } }\n </i>\n\n <!-- Display transcription with highlighting -->\n <p style=\"width: 100%\" [class]=\"'text-content ' + classTag()\">\n @for (word of wordWithMeta(); track trackByIndex($index, word)) {\n <span\n [class]=\"word.tag\"\n [class.highlight]=\"word.isHighlighted\"\n [class.marked]=\"word.marked\"\n (click)=\"onWordClick(word)\"\n [attr.id]=\"'word-' + message().messageId + '-' + word.index\"\n >{{ word.word }}\n </span>\n }\n </p>\n</div>\n@if (message().imageUrl) {\n<div class=\"tour-image-container\" style=\"display: flex; justify-content: center\">\n <img [src]=\"message().imageUrl\" alt=\"Tour Image\" style=\"max-width: 220px; height: auto\" />\n</div>\n}\n", styles: [":host{display:block}.audio-text-sync-container{display:flex;align-items:flex-start;gap:2px;align-items:center}.play-button{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:24px;margin-top:4px}.play-button:hover{opacity:.8}.text-content{flex:1}.highlight{background-color:var(--highlight-bg-color, rgb(60, 216, 255));border-radius:4px}::ng-deep .marked{position:relative;color:#f8bfbc}::ng-deep .marked:before{content:\"\";z-index:-2;left:-.1em;top:.1em;border-width:2px;border-style:solid;border-color:#f27068;position:absolute;border-right-color:transparent;width:100%;height:1em;transform:rotate(2deg);opacity:.7;border-radius:50%;padding:.1em .25em}::ng-deep .marked:after{content:\"\";z-index:-1;left:-.1em;top:.4em;padding:.1em .25em;border-width:2px;border-style:solid;border-color:#f27068;border-left-color:transparent;border-top-color:transparent;position:absolute;width:100%;height:1em;transform:rotate(-1deg);opacity:.7;border-radius:50%}.spin-animation{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.em{font-style:italic;color:var(--chat-message-italic-color, rgb(184, 208, 252))}.strong{font-weight:700;color:inherit}.italic{font-style:italic;color:var(--chat-message-italic-color, rgb(252, 198, 184))}.em_strong{font-weight:700;font-style:italic;color:inherit}\n"] }]
|
|
4273
4275
|
}], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], markWord: [{ type: i0.Input, args: [{ isSignal: true, alias: "markWord", required: false }] }], highlightColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightColor", required: false }] }], hostHighlightColor: [{
|
|
4274
4276
|
type: HostBinding,
|
|
4275
4277
|
args: ['style.--highlight-bg-color']
|
|
@@ -5494,10 +5496,12 @@ class ACCMotionGenerationComponent {
|
|
|
5494
5496
|
return;
|
|
5495
5497
|
}
|
|
5496
5498
|
this.isLoading.set(true);
|
|
5499
|
+
debugger;
|
|
5497
5500
|
console.log(emptyAsset);
|
|
5498
5501
|
this.toastService.info({ title: 'Generando video NO Cierres esta ventana', subtitle: 'Esto puede tomar unos momentos' });
|
|
5499
5502
|
const dataAsset = await this.assetService.saveGeneratedAssets(emptyAsset);
|
|
5500
5503
|
try {
|
|
5504
|
+
debugger;
|
|
5501
5505
|
const videoGen = await this.assetService.generateVideoFromAsset(dataAsset.id);
|
|
5502
5506
|
this.generatedAsset.set(videoGen);
|
|
5503
5507
|
const storageMotion = { ...videoGen.result, metadata: { moodState: this.emotionSelected } };
|
|
@@ -7245,9 +7249,7 @@ class DCAgentCardFormComponent extends EntityBaseFormComponent {
|
|
|
7245
7249
|
header: 'Generate Character',
|
|
7246
7250
|
width: '70vw',
|
|
7247
7251
|
maximizable: true,
|
|
7248
|
-
data: {
|
|
7249
|
-
agentCard: this.entity(),
|
|
7250
|
-
},
|
|
7252
|
+
data: { agentCard: this.entity() },
|
|
7251
7253
|
modal: true,
|
|
7252
7254
|
closable: true,
|
|
7253
7255
|
});
|