@dataclouder/ngx-lessons 0.0.32 → 0.0.33

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.
@@ -1 +1 @@
1
- {"version":3,"file":"dataclouder-ngx-lessons.mjs","sources":["../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/ComponentBuilder.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/ComponentWithForm.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector-builder/selector-builder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector-builder/selector-builder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer-buider/text-writer-buider.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer-buider/text-writer-buider.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcher.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcher.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker-builder/speaker-builder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker-builder/speaker-builder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/lessons.clases.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/models/lessons.pipes.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/models/notion.models.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-card/dc-lesson-card.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-card/dc-lesson-card.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-list/dc-lesson-list.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-list/dc-lesson-list.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-form/lesson-form.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-form/lesson-form.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/services/lesson-ai.service.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-renderer/dc-lesson-renderer.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-renderer/dc-lesson-renderer.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/services/lesson-notion.service.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/services/lesson-utils.service.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-component-adder/dc-lesson-component-adder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-component-adder/dc-lesson-component-adder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-metadata-editor/dc-lesson-metadata-editor.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-metadata-editor/dc-lesson-metadata-editor.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-editor/dc-lesson-editor.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-editor/dc-lesson-editor.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/lesson-dynamic.component.ts","../../../../projects/dataclouder/ngx-lessons/src/public-api.ts","../../../../projects/dataclouder/ngx-lessons/src/dataclouder-ngx-lessons.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { FormBuilder, FormControl } from '@angular/forms';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nimport { LessonComponentBuilders, LessonComponentConfiguration, LessonComponentEnum, LessonCompSettings } from './lessons.clases';\r\nimport { nanoid } from 'nanoid';\r\n\r\n// Create a type that maps the interface to FormControls\r\nexport type LessonCompSettingsForm = {\r\n [K in keyof Required<LessonCompSettings>]: FormControl<LessonCompSettings[K]>;\r\n};\r\n\r\nexport interface ComponentBuildData {\r\n str: string;\r\n obj: LessonComponentConfiguration;\r\n}\r\n\r\n@Component({\r\n selector: 'app-component-builder',\r\n template: '<div>no template</div>',\r\n})\r\nexport class ComponentBuilder {\r\n constructor(protected formBuilder: FormBuilder, protected ref: DynamicDialogRef) {}\r\n\r\n // Sobreescribir si es necesario\r\n // public formGroup = this.formBuilder.group<LessonCompSettings>({});\r\n\r\n public formGroup = this.formBuilder.group({\r\n response: new FormControl<string | null>(null),\r\n responses: new FormControl<string | null>(null),\r\n options: this.formBuilder.array([]),\r\n text: new FormControl<string | null>(null),\r\n hint: new FormControl<string | null>(null),\r\n explanation: new FormControl<string | null>(null),\r\n });\r\n\r\n // Every component knows its type by comparing agains LessonComponentBuilders\r\n get questionType(): LessonComponentEnum {\r\n const self = this;\r\n\r\n const name = Object.keys(LessonComponentBuilders).find((componentName: any) => {\r\n const componentClass = LessonComponentBuilders[componentName];\r\n if (self instanceof componentClass) {\r\n return componentName;\r\n }\r\n });\r\n\r\n return <LessonComponentEnum>name;\r\n }\r\n\r\n protected getCode(): LessonComponentConfiguration {\r\n const data = this.formGroup.value;\r\n // Deleting null values\r\n Object.keys(data).forEach((key) => {\r\n if (data[key] === null) {\r\n delete data[key];\r\n }\r\n });\r\n const code: LessonComponentConfiguration = { component: this.questionType, settings: { ...data } as unknown as LessonCompSettings };\r\n return code;\r\n }\r\n\r\n public showCode() {\r\n const code = this.getCode();\r\n const stringCode = `~${JSON.stringify(code)}~`;\r\n alert(stringCode);\r\n }\r\n\r\n public getComponentData(): ComponentBuildData {\r\n const code = this.getCode();\r\n const id = nanoid().replace(/-/g, '_');\r\n code.id = id;\r\n return { str: `~${JSON.stringify(code)}~`, obj: code };\r\n }\r\n\r\n // TODO: for now copyToClipboard is the that that closes modal and return data.\r\n public async copyToClipboard() {\r\n const data = this.getComponentData();\r\n await navigator.clipboard.writeText(data.str);\r\n this.ref.close(data);\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'app-component-form',\n template: '<div>no template</div>',\n})\nexport abstract class ComponentWithForm implements OnInit {\n // @Input() settings: LessonCompSettings;\n\n public control: UntypedFormControl = new UntypedFormControl();\n public status: string;\n\n ngOnInit(): void {\n this.control.valueChanges.subscribe(() => {\n this.status = 'basic';\n });\n }\n\n public validate(): void {\n // TODO: generic method to evaluate\n }\n\n public abstract evaluate(): boolean;\n}\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SelectModule } from 'primeng/select';\r\n\r\nimport { ComponentWithForm } from '../ComponentWithForm';\r\nimport { LessonComponentConfiguration, LessonComponentInterface } from '../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-selector',\r\n templateUrl: './selector.component.html',\r\n styleUrls: ['./selector.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, SelectModule],\r\n})\r\nexport class SelectorComponent extends ComponentWithForm implements LessonComponentInterface {\r\n public isFilled = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n @Input() config: LessonComponentConfiguration;\r\n\r\n public evaluate() {\r\n let result;\r\n if (this.control.value == null) {\r\n result = null;\r\n } else {\r\n result = this.control.value?.toLowerCase().trim() === this.config.settings.response.toLowerCase().trim();\r\n }\r\n\r\n if (result) {\r\n this.status = 'success';\r\n } else {\r\n this.status = 'danger';\r\n }\r\n this.isFilled = true;\r\n return result;\r\n }\r\n\r\n public override validate() {\r\n if (this.control.invalid) {\r\n this.status = 'warning';\r\n }\r\n return true;\r\n }\r\n}\r\n","<p-select [class]=\"status\" placeholder=\"Selecciona\" [options]=\"config.settings.options\" [formControl]=\"control\"></p-select>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormArray, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';\r\n\r\n\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\nimport { ComponentBuilder } from '../../ComponentBuilder';\r\nimport { SelectorComponent } from '../selector.component';\r\nimport { LessonComponentConfiguration, LessonComponentEnum } from '../../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-selector-builder',\r\n templateUrl: './selector-builder.component.html',\r\n styleUrls: ['./selector-builder.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, SelectorComponent, InputTextModule, ButtonModule, MessageModule],\r\n})\r\nexport class SelectorBuilderComponent extends ComponentBuilder implements OnInit {\r\n constructor(\r\n protected override formBuilder: FormBuilder,\r\n // protected override toastrService: ToastService,\r\n protected override ref: DynamicDialogRef,\r\n ) {\r\n super(formBuilder, null);\r\n }\r\n public sampleConfig: LessonComponentConfiguration = {\r\n id: '1',\r\n component: LessonComponentEnum.Selector,\r\n settings: {\r\n options: ['fourteen ninety-two', 'fourteen ninety-six', 'fifteen ninety-one'],\r\n response: 'fourteen ninety-two',\r\n hint: 'Pista para la respuesta',\r\n explanation: 'Explicación de la respuesta',\r\n responses: 'Opción 1, Opción 2, Opción 3',\r\n text: 'Texto de la pregunta',\r\n },\r\n };\r\n\r\n // public formGroup = this.formBuilder.group({\r\n // options: this.formBuilder.array([]),\r\n // response: ['', Validators.required],\r\n // hint: [],\r\n // explanation: [],\r\n // });\r\n\r\n ngOnInit(): void {\r\n this.formGroup.get('response');\r\n }\r\n\r\n public isRendered;\r\n\r\n //TODO Probablemente estos 3 pueden irse a una clase abstracta\r\n\r\n public pushControlToFormArray(controlName: string): void {\r\n this.formGroup.controls.options.push(this.formBuilder.control(''));\r\n // (this.formGroup.get(controlName) as UntypedFormArray).push(this.formBuilder.control(''));\r\n console.log(this.formGroup.controls.options);\r\n }\r\n\r\n public deleteFormArrayByIndex(controlName: string, index: number): void {\r\n (this.formGroup.get(controlName) as UntypedFormArray).removeAt(index);\r\n }\r\n\r\n get optionsForm(): UntypedFormArray {\r\n return this.formGroup.get('options') as UntypedFormArray;\r\n }\r\n}\r\n","<div>\n <div>\n <p-message>Construcción del componente de Selección, sirve para hacer una pregunta y mostrar varias opciones, ejemplo:</p-message>\n </div>\n\n <div>\n <span>En que año llegó cristobal colon a america?</span>\n <app-selector [config]=\"sampleConfig\"></app-selector>\n </div>\n\n <hr />\n\n <div>\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\n <input class=\"form-input\" type=\"text\" pInputText fullWidth formControlName=\"response\" placeholder=\"Respuesta Correcta...\" />\n <br />\n\n <input class=\"form-input\" type=\"\" pInputText fullWidth formControlName=\"hint\" placeholder=\"Escribe una pista para esta pregunta\" />\n\n <br />\n <input\n class=\"form-input\"\n type=\"text\"\n pInputText\n fullWidth\n formControlName=\"explanation\"\n placeholder=\"Excribe una explicación para la respuesta\" />\n\n <hr />\n <h6>Opciones</h6>\n\n <div class=\"form-group\" formArrayName=\"options\">\n @for (item of optionsForm.controls; track item; let i = $index) {\n <div\n style=\"display: flex; gap: 10px; align-items: center; justify-content: space-between; margin-bottom: 10px; flex-direction: column\"\n >\n <div>\n <input type=\"text\" pInputText fullWidth [formControlName]=\"i\" />\n <p-button (click)=\"deleteFormArrayByIndex('options', i)\" icon=\"pi pi-times\" severity=\"danger\"></p-button>\n </div>\n </div>\n }\n </div>\n\n <p-button (click)=\"pushControlToFormArray('options')\" label=\"Agregar Opción\" [text]=\"true\" severity=\"help\"></p-button>\n </form>\n\n <!-- <button nbButton (click)=\"isRendered = !isRendered\"> Renderizar </button> -->\n\n @if (isRendered) {\n <div>\n <!-- TODO: probably i need to pass some params -->\n <app-selector></app-selector>\n </div>\n }\n </div>\n\n <div>\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\" [rounded]=\"true\"></p-button>\n <p-button (click)=\"showCode()\" [disabled]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\n </div>\n </div>\n","import { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormBuilder, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nimport { ComponentBuilder } from '../../ComponentBuilder';\r\n\r\n@Component({\r\n selector: 'app-text-writer-buider',\r\n templateUrl: './text-writer-buider.component.html',\r\n styleUrls: ['./text-writer-buider.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, ButtonModule, InputTextModule],\r\n})\r\nexport class TextWriterBuiderComponent extends ComponentBuilder implements OnInit {\r\n constructor(\r\n protected override formBuilder: UntypedFormBuilder,\r\n // protected override toastrService: ToastService,\r\n protected override ref: DynamicDialogRef,\r\n ) {\r\n super(formBuilder, null);\r\n }\r\n\r\n override formGroup = this.formBuilder.group({ response: ['', Validators.required], hint: [], explanation: [] });\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<div>\r\n <div>\r\n <h5>Constructor de formulario con texto</h5>\r\n </div>\r\n\r\n <div>\r\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\r\n <input pInputText type=\"text\" nbInput fullWidth formControlName=\"response\" placeholder=\"Respuesta\" />\r\n\r\n <input pInputText class=\"form-input\" type=\"\" nbInput fullWidth formControlName=\"hint\"\r\n placeholder=\"Escribe una pista para esta pregunta\" />\r\n\r\n <input pInputText class=\"form-input\" type=\"text\" nbInput fullWidth formControlName=\"explanation\"\r\n placeholder=\"Excribe una explicación para la respuesta\" />\r\n </form>\r\n </div>\r\n\r\n <div>\r\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\"\r\n [rounded]=\"true\"></p-button>\r\n <p-button (click)=\"showCode()\" [disabled]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\"\r\n severity=\"secondary\"></p-button>\r\n </div>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\nimport { ComponentWithForm } from '../ComponentWithForm';\r\nimport { LessonComponentConfiguration, LessonComponentInterface } from '../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-text-writer',\r\n templateUrl: './text-writer.component.html',\r\n styleUrls: ['./text-writer.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, InputTextModule],\r\n})\r\nexport class TextWriterComponent extends ComponentWithForm implements OnInit, LessonComponentInterface {\r\n @Input() config: LessonComponentConfiguration;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n public size: number;\r\n // esta por decidir como va a funcionar los hits, explanation and hint.\r\n public hint: string;\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.size = this.getSize();\r\n }\r\n\r\n private getSize(): number {\r\n return this.config.settings.response.length < 20 ? this.config.settings.response.length : 20;\r\n }\r\n\r\n public evaluate() {\r\n let result;\r\n if (this.control.value == null) {\r\n result = null;\r\n } else {\r\n result = this.control.value.toLowerCase().trim() == this.config.settings.response.toLowerCase().trim();\r\n }\r\n\r\n if (result) {\r\n this.status = 'success';\r\n } else {\r\n this.status = 'danger';\r\n\r\n this.hint = this.config.settings.explanation;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public override validate() {\r\n if (this.control.invalid) {\r\n this.status = 'warning';\r\n this.hint = this.config.settings.hint;\r\n }\r\n return true;\r\n }\r\n}\r\n","<input [class]=\"this.status\" pInputText [formControl]=\"control\" fieldSize=\"small\" type=\"text\" placeholder=\"Respuesta\"\n [size]=\"size\" />\n\n<!-- [ngClass]=\"{ 'selected-radio': 'true']}\" -->","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';\n\n\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\n\nimport { ComponentBuilder } from '../../ComponentBuilder';\n\n@Component({\n selector: 'app-translation-switcher-builder',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, ButtonModule, InputTextModule],\n templateUrl: './translationSwitcherBuilder.component.html',\n styleUrl: './translationSwitcherBuilder.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TranslationSwitcherBuilderComponent extends ComponentBuilder implements OnInit {\n constructor(\n protected override formBuilder: FormBuilder,\n // protected override toastrService: ToastService,\n protected override ref: DynamicDialogRef,\n ) {\n super(formBuilder, null);\n }\n // Este componente reutiliza completamente el form del padre y todos los métodos\n\n ngOnInit(): void {}\n}\n","<div>\n <div>\n <h5>Constructor de translation switcher</h5>\n </div>\n\n <div>\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\n <input style=\"width: 100%\" pInputText type=\"text\" nbInput fullWidth formControlName=\"text\" placeholder=\"Texto para visualizar\" />\n\n <br /><br />\n\n <input\n style=\"width: 100%\"\n pInputText\n class=\"form-input\"\n type=\"\"\n nbInput\n fullWidth\n formControlName=\"response\"\n placeholder=\"Traducción al hacer clic\" />\n </form>\n </div>\n <br />\n <div>\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\" [rounded]=\"true\"></p-button>\n <p-button (click)=\"showCode()\" [disabled]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\n\nimport { ButtonModule } from 'primeng/button';\n\nimport { SpeakerCompConfiguration } from '../lessons.clases';\n\n@Component({\n selector: 'app-translation-switcher',\n standalone: true,\n imports: [ButtonModule],\n templateUrl: './translationSwitcher.component.html',\n styleUrl: './translationSwitcher.component.css',\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class TranslationSwitcherComponent implements OnInit {\n @Input() config: SpeakerCompConfiguration;\n\n public visibleText = '';\n ngOnInit(): void {\n this.visibleText = this.config.settings.text;\n console.log('config', this.config);\n }\n\n public switchTranslation() {\n if (this.visibleText === this.config.settings.text) {\n this.visibleText = this.config.settings.response;\n } else {\n this.visibleText = this.config.settings.text;\n }\n }\n}\n","<button\n pButton\n style=\"padding: 0px 2px\"\n severity=\"help\"\n size=\"small\"\n (click)=\"switchTranslation()\"\n [label]=\"visibleText\"\n [text]=\"true\"\n [rounded]=\"true\"></button>\n","import { Component, signal } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ComponentBuilder } from '../../ComponentBuilder';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { NgxTtsComponent, TTSGenerated } from '@dataclouder/ngx-tts';\r\nimport { LessonComponentConfiguration, LessonCompSettings } from '../../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-speaker-builder',\r\n templateUrl: './speaker-builder.component.html',\r\n styleUrls: ['./speaker-builder.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, InputTextModule, ButtonModule, DropdownModule, NgxTtsComponent],\r\n})\r\nexport class SpeakerBuilderComponent extends ComponentBuilder {\r\n public tts = signal<TTSGenerated | undefined>(undefined);\r\n\r\n public handleTtsGenerated(event: TTSGenerated): void {\r\n console.log('TTS generated:', event);\r\n this.tts.set(event);\r\n }\r\n\r\n // Update return type and add settings object\r\n protected override getCode(): LessonComponentConfiguration<LessonCompSettings & { voice: string }> {\r\n const ttsValue = this.tts();\r\n if (!ttsValue) {\r\n // Handle the case where tts is undefined, maybe throw an error or return a default config\r\n console.error('TTS data is not generated yet.');\r\n // Depending on requirements, you might return a default/empty config or throw\r\n return { component: this.questionType, inputs: {} }; // Example: return empty inputs\r\n }\r\n const code: LessonComponentConfiguration<LessonCompSettings & { voice: string }> = {\r\n component: this.questionType,\r\n inputs: { tts: ttsValue },\r\n };\r\n return code;\r\n }\r\n}\r\n","<div>\r\n <div>\r\n <h5>Constructor de Speaker</h5>\r\n </div>\r\n\r\n <lib-ngx-tts (ttsGenerated)=\"handleTtsGenerated($event)\"></lib-ngx-tts>\r\n\r\n <br />\r\n <div>\r\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\" [rounded]=\"true\"></p-button>\r\n <p-button (click)=\"showCode()\" [disabled]=\"!tts()\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\r\n </div>\r\n</div>\r\n","// ❌ can use this until i copy services to this lib\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SpeakerCompConfiguration } from '../lessons.clases';\r\nimport { TTSGenerated } from '@dataclouder/ngx-tts';\r\n\r\n// import { CONVERSATION_AI_TOKEN } from '@dataclouder/ngx-agent-cards';\r\n@Component({\r\n selector: 'app-speaker',\r\n templateUrl: './speaker.component.html',\r\n styleUrls: ['./speaker.component.scss'],\r\n standalone: true,\r\n imports: [ButtonModule],\r\n})\r\nexport class SpeakerComponent implements OnInit {\r\n ngOnInit(): void {\r\n // throw new Error('Method not implemented.');\r\n }\r\n @Input() config: SpeakerCompConfiguration;\r\n @Input() tts: TTSGenerated | undefined;\r\n\r\n // voiceOptions = VoiceOptions;\r\n // constructor(private speachService: SpeechService, private audioService: AudioService) {}\r\n // ngOnInit(): void {}\r\n public speach() {\r\n console.log('should speech but will do in next version');\r\n // if (this.config.audio) {\r\n // this.audioService.playAudio(this.config.audio.url);\r\n // } else {\r\n // this.speachService.speach(this.config.settings.text);\r\n // }\r\n }\r\n}\r\n","<button\r\n pButton\r\n style=\"padding: 0px 2px\"\r\n severity=\"help\"\r\n size=\"small\"\r\n (click)=\"speach()\"\r\n [label]=\"config?.settings?.text\"\r\n [text]=\"true\"\r\n [rounded]=\"true\"></button>\r\n","import { UntypedFormControl } from '@angular/forms';\nimport { InjectionToken, Type } from '@angular/core';\nimport { Provider } from '@angular/core';\n\nimport { SelectorBuilderComponent } from './selector/selector-builder/selector-builder.component';\nimport { SelectorComponent } from './selector/selector.component';\n\nimport { TextWriterBuiderComponent } from './text-writer/text-writer-buider/text-writer-buider.component';\nimport { TextWriterComponent } from './text-writer/text-writer.component';\nimport { TranslationSwitcherBuilderComponent } from './translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component';\nimport { TranslationSwitcherComponent } from './translationSwitcher/translationSwitcher.component';\nimport { SpeakerBuilderComponent } from './speaker/speaker-builder/speaker-builder.component';\nimport { SpeakerComponent } from './speaker/speaker.component';\n\nexport type LessonComponentsType = 'selector' | 'speaker' | 'text-writer' | 'verb-summary' | 'word-summary';\n\nexport enum LessonComponentEnum {\n Selector = 'selector',\n Speaker = 'speaker',\n TextWriter = 'textWriter',\n VerbSummary = 'verbSummary',\n WordSummary = 'wordSummary',\n TranslationSwitcher = 'translationSwitcher',\n}\n\nexport const LessonComponentBuilders = {\n [LessonComponentEnum.Selector]: SelectorBuilderComponent,\n [LessonComponentEnum.Speaker]: SpeakerBuilderComponent,\n [LessonComponentEnum.TextWriter]: TextWriterBuiderComponent,\n // [LessonComponentEnum.VerbSummary]: VerbSummaryBuilderComponent,\n // [LessonComponentEnum.WordSummary]: WordSummaryBuilderComponent,\n [LessonComponentEnum.TranslationSwitcher]: TranslationSwitcherBuilderComponent,\n};\n\nexport const LessonComponents = {\n [LessonComponentEnum.Selector]: SelectorComponent,\n [LessonComponentEnum.Speaker]: SpeakerComponent,\n [LessonComponentEnum.TextWriter]: TextWriterComponent,\n // [LessonComponentEnum.VerbSummary]: VerbSummaryComponent,\n // [LessonComponentEnum.WordSummary]: WordSummaryComponent,\n [LessonComponentEnum.TranslationSwitcher]: TranslationSwitcherComponent,\n};\n\nexport function getLessonComponentClass(type: LessonComponentsType) {\n return LessonComponents[type];\n}\n\nexport interface LessonCompSettings {\n response?: string;\n responses?: string; // en caso de que haya multiples respuestas\n options?: string[]; // optiones para visualizar\n text?: string;\n hint?: string;\n explanation?: string;\n}\n// Make LessonComponentConfiguration generic for settings\nexport interface LessonComponentConfiguration<T extends LessonCompSettings = LessonCompSettings> {\n id?: string;\n component: LessonComponentEnum;\n settings?: T; // for component that need and standards\n inputs?: Record<string, any>; // for whatever component.\n}\n\nexport interface StorageFile {\n bucket: string;\n url: string;\n path: string; // path where the file is in the storage\n}\n\nexport interface AudioStorage extends StorageFile {\n text?: string;\n voiceType?: string;\n}\n// Make SpeakerCompConfiguration extend the generic base interface\nexport interface SpeakerCompConfiguration extends LessonComponentConfiguration<LessonCompSettings & { voice: string }> {\n audio: AudioStorage;\n // settings is now inherited correctly via the generic type argument\n}\n\nexport interface LessonComponentInterface {\n // Update config to use the generic form\n config: LessonComponentConfiguration<any>;\n\n control?: UntypedFormControl;\n\n validate?(): boolean | null;\n evaluate?(): boolean | null;\n}\n// nuevs\n\n// import { UntypedFormControl } from '@angular/forms';\n\n// import { LessonComponents } from '../models/lessons.class';\n\nexport const LESSONS_TOKEN = new InjectionToken<LessonsAbstractService>('Lessons Service');\n\n// Removed duplicate LessonComponentEnum definition\n// Removed duplicate StorageFile definition\n\nexport interface ImgStorageData extends StorageFile {\n fullPath: string; // path + name\n resolutions: any;\n resolution: string;\n}\n\nexport type LessonImage = ImgStorageData & { type: string };\n\n// Removed duplicate LessonCompSettings definition\n// Removed duplicate LessonComponentConfiguration definition\n\n// New way of render components\nexport interface DynamicContentComponent {\n id: string; // duplicated id\n component: LessonComponentEnum; // name of the component\n inputs: Record<string, any>;\n config: LessonComponentConfiguration<any>;\n}\n\ntype StorageType = StorageFile & { type: string };\n\nexport interface Media {\n audios?: StorageType[];\n images?: StorageType[];\n}\n\nexport interface ILessonExtra {\n notionPageId?: string;\n}\n\nexport interface ILesson {\n // me faltan los comentarios\n _id: any;\n id: string;\n title: string;\n description: string;\n isPublished: boolean;\n // isPrivate: boolean;\n textCoded: string;\n authorId: string;\n authorEmail: string;\n tags: string[];\n media: Media;\n // Update components array to use generic form\n components: Array<LessonComponentConfiguration<any>>;\n dynamicComponents: Record<string, DynamicContentComponent>;\n baseLang: string;\n targetLang: string;\n\n generatedByAI: boolean;\n prompt: string;\n level: number;\n extras: ILessonExtra;\n}\n\nexport interface ILessonWithTaken extends ILesson {\n // FIXME: moved to lessons lib\n\n taken: any;\n}\n\n// Think on someway of getting the toast alerts service\n\nexport abstract class LessonsAbstractService {\n abstract getLessons(paginator?: any): Promise<any>;\n abstract getLesson(id: string): Promise<any>;\n abstract postLesson(lesson: ILesson): Promise<any>;\n abstract updateLesson(lesson: ILesson): Promise<any>;\n abstract deleteLesson(id: string): Promise<any>;\n abstract generateLesson(lesson: ILesson): Promise<any>;\n abstract postGenerateByAI(id: string): Promise<any>;\n abstract extractTextFromHtml(html: string): string;\n}\n\n// my-service.provider.ts\nexport function provideLessonsService(serviceImplementation: Type<LessonsAbstractService>): Provider[] {\n return [\n {\n provide: LESSONS_TOKEN,\n useExisting: serviceImplementation,\n },\n ];\n}\n\n// export type LessonComponentsType = 'selector' | 'speaker' | 'text-writer' | 'verb-summary' | 'word-summary';\n\n// export function getLessonComponentClass(type: LessonComponentsType) {\n// // return LessonComponents[type];\n// return null;\n// }\n\n// Removed duplicate LessonComponentConfiguration definition\n// Removed duplicate StorageFile definition\n// Removed duplicate AudioStorage definition\n// Removed duplicate SpeakerCompConfiguration definition\n// Removed duplicate LessonComponentInterface definition\n\n// export const LessonComponents = {\n// [LessonComponentEnum.Selector]: 1,\n// [LessonComponentEnum.Speaker]: 2,\n// [LessonComponentEnum.TextWriter]: 3,\n// [LessonComponentEnum.VerbSummary]: 4,\n// [LessonComponentEnum.WordSummary]: 5,\n// [LessonComponentEnum.TranslationSwitcher]: 6,\n// }\n\nexport const LangCodeDescription = {\n es: 'Spanish',\n en: 'English',\n it: 'Italian',\n pt: 'Portuguese',\n fr: 'French',\n};\n\nexport const LangCodeDescriptionEs = {\n es: 'Español',\n en: 'Inglés',\n it: 'Italiano',\n pt: 'Portugués',\n fr: 'Frances',\n};\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { LangCodeDescription, LangCodeDescriptionEs } from '../components/lesson-mini-components/components/lessons.clases';\n\n@Pipe({\n name: 'langDesc',\n standalone: true,\n})\nexport class LangDescTranslationPipe implements PipeTransform {\n transform(value: string, lang: string): boolean {\n if (lang === 'es') {\n return LangCodeDescriptionEs[value];\n } else {\n return LangCodeDescription[value];\n }\n }\n}\n\n@Pipe({\n name: 'flagEmoji',\n standalone: true,\n})\nexport class FlagLanguagePipe implements PipeTransform {\n transform(lang: string): string {\n if (lang === 'en') {\n return '🇺🇸';\n } else if (lang === 'es') {\n return '🇲🇽';\n } else if (lang === 'fr') {\n return '🇫🇷';\n } else if (lang === 'it') {\n return '🇮🇹';\n } else if (lang === 'pt') {\n return '🇧🇷';\n } else {\n return '';\n }\n }\n}\n","// NOTE: what to do? IAgent Deponds on ngx-agent-cards but lessons don't\n// import { IAgentCard } from '@dataclouder/ngx-agent-cards';\n\nimport { InjectionToken, Provider, Type } from '@angular/core';\n\nexport type NotionDBResponse = {\n success: boolean;\n databases: { id: string; title: string; url: string; created_time: string }[];\n error?: string;\n count: number;\n};\n\nexport type NotionPageResponse = {\n success: boolean;\n pages: { id: string; title: string; url: string; created_time: string }[];\n error?: string;\n count: number;\n};\n\nexport const NOTION_SERVICE_TOKEN = new InjectionToken<NotionAbstractService>('notion.service');\n\nexport abstract class NotionAbstractService {\n abstract getDBAvailible(): Promise<NotionDBResponse>;\n abstract getPagesAvailable(): Promise<NotionPageResponse>;\n abstract createNotionPage(card: any): Promise<{ success: boolean; error: string; page: any }>;\n abstract getPageInSpecificFormat(pageId: string, format: NotionExportType): Promise<any>;\n}\n\nexport function provideNotionService(serviceImplementation: Type<NotionAbstractService>): Provider[] {\n return [\n {\n provide: NOTION_SERVICE_TOKEN,\n useExisting: serviceImplementation,\n },\n ];\n}\n\nexport enum NotionExportType {\n HTML = 'html',\n MARKDOWN = 'markdown',\n PLAIN_TEXT = 'plain_text',\n SIMPLE_BLOCKS = 'simple_blocks',\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { PopoverModule } from 'primeng/popover';\r\n\r\nimport { SpeedDialModule } from 'primeng/speeddial';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { CardModule } from 'primeng/card';\r\n\r\nimport { ILesson, ILessonWithTaken } from '../../lesson-mini-components/components/lessons.clases';\r\nimport { OnActionEvent } from '@dataclouder/ngx-core';\r\n\r\nenum EventCard {\r\n Edit = 'edit',\r\n Delete = 'delete',\r\n Select = 'select',\r\n Qr = 'qr',\r\n}\r\n@Component({\r\n selector: 'dc-lesson-card',\r\n templateUrl: './dc-lesson-card.component.html',\r\n styleUrls: ['./dc-lesson-card.component.scss'],\r\n standalone: true,\r\n imports: [DatePipe, ButtonModule, PopoverModule, SpeedDialModule, CardModule],\r\n})\r\nexport class DcLessonCardComponent implements OnInit {\r\n @Input() lesson: ILessonWithTaken | ILesson | any;\r\n @Input() showOptions: boolean = true;\r\n\r\n @Output() onAction: EventEmitter<OnActionEvent> = new EventEmitter();\r\n\r\n public coverUrl: string = 'assets/background/default-background.webp';\r\n public eventType = EventCard;\r\n\r\n public items: MenuItem[] = [\r\n {\r\n label: 'Editar',\r\n icon: 'pi pi-pencil',\r\n command: () => {\r\n this.eventCard(EventCard.Edit);\r\n },\r\n },\r\n {\r\n label: 'Eliminar',\r\n icon: 'pi pi-trash',\r\n command: () => {\r\n this.eventCard(EventCard.Delete);\r\n },\r\n },\r\n {\r\n label: 'Tomar lección',\r\n icon: 'pi pi-play',\r\n command: () => {\r\n this.eventCard(EventCard.Select);\r\n },\r\n },\r\n ];\r\n\r\n ngOnInit() {\r\n if (this.lesson?.media?.images![0]?.url) {\r\n this.coverUrl = this.lesson.media.images[0].url;\r\n }\r\n }\r\n\r\n public eventCard(eventType: EventCard) {\r\n switch (eventType) {\r\n case EventCard.Edit:\r\n this.onAction.emit({ action: 'edit', item: this.lesson });\r\n break;\r\n case EventCard.Delete:\r\n this.onAction.emit({ action: 'delete', item: this.lesson });\r\n break;\r\n case EventCard.Select:\r\n this.onAction.emit({ action: 'select', item: this.lesson });\r\n break;\r\n case EventCard.Qr:\r\n this.onAction.emit({ action: 'qr', item: this.lesson });\r\n break;\r\n }\r\n }\r\n}\r\n","<div class=\"card-container\">\n @if(showOptions){\n <p-speeddial\n class=\"dial-button\"\n [model]=\"items\"\n [radius]=\"70\"\n type=\"quarter-circle\"\n direction=\"down-left\"\n [buttonProps]=\"{ severity: 'primary', rounded: true, outlined: true, raised: true }\" />\n }\n <p-card>\n <div class=\"lesson-card\">\n <div class=\"photo\">\n <img [src]=\"coverUrl\" alt=\"\" />\n </div>\n\n <span class=\"date\">{{ lesson.createdDate | date : 'dd/MM/yyyy' }}</span>\n\n <div class=\"description\">\n <h1>{{ lesson.title }}</h1>\n <p>{{ lesson.description }}</p>\n <div class=\"card-footer\">\n <div class=\"status-tags\">\n <span class=\"level-tag\">Nivel {{ lesson.level }}</span>\n @if (lesson.taken?.status == 'passed') {\n <span class=\"status-tag success\">Tomada</span>\n }\n @if (lesson.taken?.status == 'failed') {\n <span class=\"status-tag danger\">Fallida</span>\n }\n </div>\n\n <div class=\"actions\">\n <p-button label=\"Tomar lección\" (onClick)=\"eventCard(eventType.Select)\" severity=\"primary\"> </p-button>\n </div>\n </div>\n </div>\n </div>\n </p-card>\n </div>\n","import { ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Output, Type, ViewChildren, QueryList, OnDestroy, input } from '@angular/core';\n\nimport { PaginatorModule } from 'primeng/paginator';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\n\nimport { Subscription } from 'rxjs';\nimport {\n DCFilterBarComponent,\n ICustomFilter,\n OnActionEvent,\n PaginationBase,\n PColumn,\n QuickTableComponent,\n TOAST_ALERTS_TOKEN,\n ToastAlertsAbstractService,\n} from '@dataclouder/ngx-core';\n\nimport { LESSONS_TOKEN, LessonsAbstractService } from '../../lesson-mini-components/components/lessons.clases';\nimport { DcLessonCardComponent } from '../dc-lesson-card/dc-lesson-card.component';\nimport { MenuItem } from 'node_modules/primeng/api/menuitem';\n\nconst tableViewColumns: PColumn[] = [\n { field: 'media.images[0].url', header: 'Image', type: 'image' },\n { field: 'title', header: 'Título' },\n { field: 'description', header: 'Descripción' },\n];\n\nconst TableViewActions: MenuItem[] = [\n { title: 'select', label: 'Select', icon: 'pi pi-check', severity: 'primary' },\n { title: 'qr', label: 'QR', icon: 'pi pi-qrcode', severity: 'info' },\n { title: 'edit', label: 'Edit', icon: 'pi pi-pencil', severity: 'info' },\n { title: 'delete', label: 'Delete', icon: 'pi pi-trash', severity: 'danger' },\n];\n\nconst returnProperties: Record<string, 0 | 1> = { id: 1, title: 1, assets: 1 };\n\n@Component({\n selector: 'dc-lesson-list',\n templateUrl: './dc-lesson-list.component.html',\n styleUrls: ['./dc-lesson-list.component.scss'],\n standalone: true,\n imports: [RouterModule, DCFilterBarComponent, PaginatorModule, NgComponentOutlet, QuickTableComponent],\n})\nexport class DCLessonListComponent extends PaginationBase implements OnInit, OnDestroy {\n @Input() public showOptions: boolean = true;\n @Input() public customCardComponent?: Type<DcLessonCardComponent>;\n @Input() public customFilters: ICustomFilter[] = [];\n @Input() public viewType: 'table' | 'cards' = 'cards';\n\n // readonly actions = input<MenuItem[]>(TableViewActions);\n\n public override columns: PColumn[] = tableViewColumns;\n\n @ViewChildren('outlet') outlets!: QueryList<NgComponentOutlet>;\n\n public cardComponent: Type<DcLessonCardComponent> = null;\n public cardEventSubs: Subscription[] = [];\n\n public lessons: any[] = [];\n public isLoadingLessons = false;\n\n constructor(\n private cdr: ChangeDetectorRef,\n public override router: Router,\n public override route: ActivatedRoute,\n @Inject(LESSONS_TOKEN) private lessonsService: LessonsAbstractService,\n @Inject(TOAST_ALERTS_TOKEN) private toastrService: ToastAlertsAbstractService,\n ) {\n super(route, router);\n }\n\n ngOnInit(): void {\n this.filterConfig.returnProps = returnProperties;\n this.cardComponent = this.customCardComponent || DcLessonCardComponent;\n\n this.getPaginatedLessons(this.filterConfig);\n }\n\n public subscribeDinamicInstantToEvents() {\n this.clearcardEventSubs();\n this.subscribeToCardEvents();\n }\n\n private subscribeToCardEvents() {\n this.outlets.forEach((outlet) => {\n const instance: DcLessonCardComponent = outlet.componentInstance;\n\n this.cardEventSubs.push(\n instance.onAction.subscribe((lesson: any) => {\n this.doOrEmitAction(lesson);\n }),\n );\n });\n }\n\n private clearcardEventSubs() {\n this.cardEventSubs.forEach((sub) => sub.unsubscribe());\n this.cardEventSubs = [];\n }\n\n ngOnDestroy() {\n this.clearcardEventSubs();\n }\n\n public async getPaginatedLessons(paginator: any) {\n try {\n this.lessons = null;\n this.isLoadingLessons = true;\n this.cdr.detectChanges();\n const lessons = await this.lessonsService.getLessons(paginator);\n\n this.lessons = lessons['rows'] || lessons;\n this.totalRecords = lessons['count'] || this.lessons.length;\n\n console.log('lessons', lessons);\n\n setTimeout(() => {\n this.subscribeDinamicInstantToEvents();\n });\n } finally {\n this.isLoadingLessons = false;\n this.cdr.detectChanges();\n }\n }\n\n public search(searchText: string) {\n this.filterConfig['text'] = searchText;\n this.getPaginatedLessons(this.filterConfig);\n }\n\n private removeLesson(lesson: any) {\n const response = confirm('¿Estás seguro de querer eliminar esta lección?');\n if (response) {\n this.lessonsService.deleteLesson(lesson._id);\n this.lessons = this.lessons.filter((l) => l._id !== lesson._id);\n this.cdr.detectChanges();\n this.toastrService.success({ title: 'Adios a la lección', subtitle: 'La lección ha sido eliminada correctamente' });\n }\n }\n\n public newLesson() {\n this.onAction.emit({ action: 'new' });\n }\n\n public applyFilterBarEvent(filterEvent: OnActionEvent) {\n if (filterEvent.action == 'changeView') {\n this.viewType = this.viewType === 'table' ? 'cards' : 'table';\n return;\n } else {\n console.log('filterChanged in dc-lesson-list', filterEvent);\n this.filterConfig = filterEvent.item;\n this.filterConfig.returnProps = returnProperties;\n\n this.getPaginatedLessons(this.filterConfig);\n }\n }\n\n protected override loadData(): Promise<void> {\n return this.getPaginatedLessons(this.filterConfig);\n }\n\n public doOrEmitAction(actionEvent: OnActionEvent) {\n if (actionEvent.action === 'delete') {\n this.removeLesson(actionEvent.item);\n } else {\n this.onAction.emit(actionEvent);\n }\n }\n}\n","<dc-filter-bar [customFilters]=\"customFilters\" (onFilterAction)=\"applyFilterBarEvent($event)\" (onNew)=\"newLesson()\"></dc-filter-bar>\n\n@if(viewType === 'table') {\n<app-quick-table [columns]=\"columns\" [tableData]=\"lessons\" (onAction)=\"doOrEmitAction($event)\"></app-quick-table>\n} @else {\n<div class=\"lesson-list-container\">\n @if (!isLoadingLessons && lessons?.length > 0) { @for (lesson of lessons; track lesson._id) {\n <ng-container\n #outlet=\"ngComponentOutlet\"\n [ngComponentOutlet]=\"cardComponent\"\n [ngComponentOutletInputs]=\"{\n lesson: lesson,\n showOptions: showOptions\n }\">\n </ng-container>\n } } @else {\n <p>No se encontraron lecciones disponibles</p>\n }\n</div>\n}\n\n<p-paginator\n currentPageReportTemplate=\"{{ totalRecords }} lecciones\"\n [showCurrentPageReport]=\"true\"\n (onPageChange)=\"onPageChange($event)\"\n [first]=\"paginatorFirst\"\n [rows]=\"paginatorRows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"[10, 20, 30]\">\n</p-paginator>\n","import { Component } from '@angular/core';\n\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'dc-lesson-form',\n templateUrl: './lesson-form.component.html',\n styleUrls: ['./lesson-form.component.scss'],\n standalone: true,\n imports: [ReactiveFormsModule],\n})\nexport class DCLessonFormComponent {\n // Form implementation will go here\n}\n","<div class=\"lesson-form-container\">\n <h2>Lesson Form</h2>\n <p>Esto es dentro del componente de la leccion</p>\n <!-- Form implementation will go here -->\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { IAgentCard, IMiniAgentCard, TextEngines, ConversationType } from '@dataclouder/ngx-agent-cards';\nimport { ILesson, LangCodeDescription, LESSONS_TOKEN, LessonsAbstractService } from '../components/lesson-mini-components/components/lessons.clases';\n\n// Re-define or import constants if they are not exported from the component file\nconst DEFAULT_LESSON_AGENT_CARD: IAgentCard = {\n conversationSettings: {\n conversationType: ConversationType.General,\n textEngine: TextEngines.SimpleText,\n autoStart: true,\n },\n characterCard: {\n data: {\n name: 'Lesson Master',\n description: 'You are an AI developed by Polilan Company, you are a lesson master, you are going to help the user to learn english',\n tags: ['lesson', 'master', 'ai'],\n post_history_instructions:\n 'Your reply should be always short, 1 or 2 paragraphs at most, and to the point, and you should ask friendly questions all the time',\n },\n },\n model: { provider: 'google' },\n};\n\nfunction getDefaultLessonEvaluatorAgentCard(lessonText: string): IMiniAgentCard {\n return {\n expectedResponseType: `interface EvalResult {\n score: number; // Score of the user's response 0 to 3\n feedback: string; // Feedback of the user's understanding of the conversation\n }`,\n messages: [],\n model: { id: 'gpt-4o-mini', provider: 'openai' },\n sources: [lessonText],\n task: `User is reading a taking a lesson, now their are having a conversation,\n you have to evaluate the current conversation, and give a feedback of the user understanding of the lesson,\n this is the lesson: ${lessonText}`,\n };\n}\n\n@Injectable({\n providedIn: 'root', // Or provide appropriately if it's library-specific\n})\nexport class LessonAIService {\n private readonly lessonService = inject<LessonsAbstractService>(LESSONS_TOKEN);\n // TODO: Inject the application-level UserService\n // private readonly userService = inject(UserService);\n\n constructor() {}\n\n /**\n * Generates the necessary agent cards for a lesson chat session.\n * @param lesson The lesson data.\n * @returns An object containing the master agent card and the evaluator agent card.\n */\n async generateAgentCards(lesson: ILesson): Promise<{ masterAgent: IAgentCard; evaluatorAgent: IMiniAgentCard } | null> {\n // TODO: Implement the logic moved from DCLessonRendererComponent.startAI here\n // 1. Get user data using the injected UserService\n // 2. Extract lesson text using lessonService\n // 3. Build prompts (scenario, userInformationPrompt)\n // 4. Configure and return the agent cards\n\n alert('AI User data fetching needs refactoring into this service.');\n // Placeholder for user data - replace with actual service call\n const user = {\n personalData: { firstname: 'Test', lastname: 'User' },\n settings: { targetLanguage: 'en', baseLanguage: 'es' },\n languageProgress: { en: { level: '1' } },\n } as any; // Replace 'any' with your actual User type/interface\n\n if (!user) {\n console.error('User data not available to generate agent cards.');\n // Handle error appropriately - maybe return null or throw?\n return null;\n }\n\n const lessonText = this.lessonService.extractTextFromHtml(lesson.textCoded);\n\n const scenario = `The user is reading lessons through this app interface. They will now talk with you, and you need to evaluate their understanding of the lesson.\nAsk friendly questions throughout the conversation and help them learn English. Here is the lesson text the user just read:\n${lessonText}\nIn your next reply, start by greeting the user, asking something about the lesson, and then continue the conversation.`;\n\n const targetLevel = parseInt(user.languageProgress[user.settings.targetLanguage]?.level ?? '1');\n const langTargetDesc = LangCodeDescription[user.settings.targetLanguage] ?? user.settings.targetLanguage;\n const langBaseDesc = LangCodeDescription[user.settings.baseLanguage] ?? user.settings.baseLanguage;\n\n let userInformationPrompt = `\nUser information: user name is ${user.personalData.firstname} ${user.personalData.lastname}, their native language is ${langBaseDesc},\nand right now is learning ${langTargetDesc}, their current level is ${targetLevel} out of 5.`;\n\n if (targetLevel <= 2) {\n userInformationPrompt += `\\nUser is a beginner in ${langTargetDesc}, always reply mainly in ${langBaseDesc}, but during the conversation use simple words and phrases in ${langTargetDesc} to help them learn.`;\n }\n\n // Create a deep copy of the default card to avoid modifying the constant\n const masterAgent: IAgentCard = JSON.parse(JSON.stringify(DEFAULT_LESSON_AGENT_CARD));\n masterAgent.characterCard.data.scenario = scenario;\n masterAgent.characterCard.data.post_history_instructions += `\\n${userInformationPrompt}`;\n\n const evaluatorAgent = getDefaultLessonEvaluatorAgentCard(lessonText);\n\n return { masterAgent, evaluatorAgent };\n }\n}\n","import { Component, ComponentRef, ElementRef, Renderer2, ViewChild, ViewContainerRef, computed, effect, inject, input, signal } from '@angular/core'; // Added signal imports\nimport { FormGroup, FormControl, Validators } from '@angular/forms'; // Use typed forms\nimport { KeyValuePipe } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { LessonAIService } from '../../../services/lesson-ai.service'; // Import the new service\n\nimport {\n getLessonComponentClass,\n ILesson,\n LessonComponentConfiguration,\n LessonComponentsType,\n LESSONS_TOKEN,\n LessonsAbstractService,\n} from '../../lesson-mini-components/components/lessons.clases';\n\nimport { TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } from '@dataclouder/ngx-core';\nimport { LessonComponentInterface } from '../../lesson-mini-components/components/lessons.clases';\nimport { DCChatComponent, IAgentCard, IMiniAgentCard } from '@dataclouder/ngx-agent-cards';\n\nimport { DrawerModule } from 'primeng/drawer';\n\n@Component({\n selector: 'dc-lesson-renderer',\n templateUrl: './dc-lesson-renderer.component.html',\n styleUrls: ['./dc-lesson-renderer.component.scss'],\n standalone: true,\n imports: [KeyValuePipe, ButtonModule, DCChatComponent, DrawerModule],\n})\nexport class DCLessonRendererComponent {\n // --- Signal Inputs ---\n lessonInput = input<ILesson>(); // Input signal for lesson object\n lessonIdInput = input<string>(); // Input signal for lesson ID\n test = input<boolean>(false);\n\n // --- View Childs ---\n @ViewChild('dynamicLesson', { static: true }) dynamicLesson: ElementRef<HTMLElement>;\n\n // --- Injected Services (using inject function) ---\n private readonly renderer = inject(Renderer2);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly toastrService = inject<ToastAlertsAbstractService>(TOAST_ALERTS_TOKEN);\n private readonly lessonService = inject<LessonsAbstractService>(LESSONS_TOKEN);\n private readonly lessonAIService = inject(LessonAIService); // Inject the new service\n\n // --- State Signals ---\n lesson = signal<ILesson | undefined>(undefined); // Internal lesson state signal\n chatVisible = signal(false); // Signal for chat visibility\n agentMasterLesson = signal<IAgentCard | undefined>(undefined); // Signal for agent card\n evaluatorAgentCard = signal<IMiniAgentCard | undefined>(undefined); // Signal for evaluator card\n\n // --- Computed Signals ---\n imageCover = computed(() => this.lesson()?.media?.images?.find((img) => img.type === 'cover')?.url); // Computed signal for imageCover\n\n // --- Properties ---\n private components: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n public mainForm: FormGroup<{ [key: string]: FormControl<any> }> = new FormGroup({});\n\n constructor() {\n // Effect to fetch lesson data if ID is provided and lesson object isn't\n effect(\n async () => {\n const lessonInput = this.lessonInput();\n const lessonId = this.lessonIdInput();\n\n if (lessonInput) {\n this.lesson.set(lessonInput); // Use input lesson directly\n } else if (lessonId && !this.lesson()) {\n // Fetch only if ID exists and internal lesson is not set\n console.log(`Fetching lesson with ID: ${lessonId}`);\n try {\n // Consider adding a loading state signal here\n const fetchedLesson = await this.lessonService.getLesson(lessonId);\n this.lesson.set(fetchedLesson);\n console.log('Fetched lesson:', fetchedLesson);\n } catch (error) {\n console.error(`Failed to fetch lesson with ID: ${lessonId}`, error);\n this.toastrService.error({ subtitle: 'Failed to load lesson data.', title: 'Error' });\n this.lesson.set(undefined); // Reset lesson on error\n } finally {\n // Reset loading state signal here\n }\n } else if (!lessonInput && !lessonId) {\n // Handle case where neither input is provided, maybe clear the lesson?\n this.lesson.set(undefined);\n }\n },\n { allowSignalWrites: true },\n ); // Allow signal writes inside effect\n\n // Effect to render the lesson whenever the lesson signal changes\n effect(() => {\n const currentLesson = this.lesson();\n if (currentLesson) {\n this._renderLesson(currentLesson);\n } else {\n // Clear previous rendering if lesson becomes undefined\n this._clearLessonRendering();\n }\n });\n }\n\n // --- Rendering Logic ---\n\n private _clearLessonRendering(): void {\n // Destroy previously created dynamic components\n Object.values(this.components).forEach((compRef) => compRef.destroy());\n this.components = {};\n // Clear the form\n this.mainForm = new FormGroup({});\n // Clear the HTML content\n if (this.dynamicLesson?.nativeElement) {\n this.dynamicLesson.nativeElement.innerHTML = '';\n }\n }\n\n private _renderLesson(lessonData: ILesson): void {\n this._clearLessonRendering(); // Clear previous state first\n\n console.log('Rendering lesson:', lessonData.id);\n // console.log('Image cover URL:', this.imageCover()); // Access computed signal\n\n // 1) Parse textCoded, create components, and build HTML structure\n const { htmlContent, components } = this._parseAndCreateComponents(lessonData);\n this.components = components;\n\n // 2) Aggregate form controls from created components\n this._aggregateFormControls(this.components);\n\n // 3) Set the innerHTML of the target element\n this.dynamicLesson.nativeElement.innerHTML = htmlContent;\n\n // 4) Inject the component views into the DOM\n this._injectComponentsIntoDom(this.components);\n }\n\n private _parseAndCreateComponents(lessonData: ILesson): { htmlContent: string; components: { [key: string]: ComponentRef<LessonComponentInterface> } } {\n const r1 = new RegExp('~(.+?)~', 'g');\n let count = 0;\n const createdComponents: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n\n const htmlContent = lessonData.textCoded.replace(r1, (_matching, jsonCoded) => {\n const componentName = `dynamicComp${count}`;\n count++;\n const componentRef = this._createComponentReferenceWithJson(jsonCoded, lessonData);\n if (!componentRef) {\n console.error(`Failed to create component for: ${jsonCoded}`);\n return '<!-- component creation failed -->'; // Placeholder in HTML\n }\n createdComponents[componentName] = componentRef;\n return `<span id=\"${componentName}\"></span>`; // Return span placeholder\n });\n\n return { htmlContent, components: createdComponents };\n }\n\n private _aggregateFormControls(components: { [key: string]: ComponentRef<LessonComponentInterface> }): void {\n const newFormControls: { [key: string]: FormControl<any> } = {};\n Object.entries(components).forEach(([name, componentRef]) => {\n // Check if the instance has a control property that is a FormControl\n if (componentRef.instance?.control instanceof FormControl) {\n newFormControls[name] = componentRef.instance.control;\n // Add required validator (consider making this configurable via component config?)\n newFormControls[name].addValidators(Validators.required);\n }\n });\n this.mainForm = new FormGroup(newFormControls); // Create the typed FormGroup\n }\n\n private _injectComponentsIntoDom(components: { [key: string]: ComponentRef<LessonComponentInterface> }): void {\n Object.entries(components).forEach(([name, componentRef]) => {\n const elementRef = document.getElementById(name); // Find the placeholder span\n if (elementRef) {\n this._addComponentToNode(componentRef, elementRef);\n } else {\n console.warn(`Placeholder element with ID '${name}' not found in the DOM.`);\n }\n });\n }\n\n private _addComponentToNode(componentRef: ComponentRef<LessonComponentInterface>, nodeDOM: HTMLElement): void {\n this.renderer.appendChild(nodeDOM, componentRef.location.nativeElement);\n }\n\n private _createComponentReferenceWithJson(json: string, currentLesson: ILesson): ComponentRef<LessonComponentInterface> | null {\n try {\n let lessonCodedConfig: LessonComponentConfiguration = JSON.parse(json);\n debugger;\n // Attempt to find pre-configured component data in the lesson object by ID\n if (lessonCodedConfig.id && currentLesson?.dynamicComponents[lessonCodedConfig.id]) {\n const foundConfig = currentLesson.dynamicComponents[lessonCodedConfig.id];\n if (foundConfig) {\n // Merge configurations: Start with coded, override/add with found lesson config\n lessonCodedConfig = { ...lessonCodedConfig, ...foundConfig };\n }\n }\n\n const LessonClass = getLessonComponentClass(<LessonComponentsType>lessonCodedConfig.component);\n\n if (!LessonClass) {\n console.error(`Component class not found for type: ${lessonCodedConfig.component}. JSON: ${json}`);\n return null; // Return null if class doesn't exist\n }\n\n // Create component instance\n const componentRef = this.viewContainerRef.createComponent<LessonComponentInterface>(LessonClass);\n\n if (lessonCodedConfig.inputs) {\n for (const key in lessonCodedConfig.inputs) {\n if (lessonCodedConfig.inputs.hasOwnProperty(key)) {\n componentRef.instance[key] = lessonCodedConfig.inputs[key];\n }\n }\n }\n // i think i can improve this to pass only settings not all config, Assign the configuration to the component instance\n // settings data i defined in form interface, config will be all the component data including id and component type\n if (lessonCodedConfig.settings) {\n componentRef.instance.config = lessonCodedConfig;\n }\n return componentRef;\n } catch (error) {\n console.error(`Error processing component JSON: ${json}`, error);\n return null; // Return null on JSON parsing or other errors\n }\n }\n\n // --- Evaluation Logic ---\n\n public async evaluateForms() {\n this.mainForm.markAllAsTouched(); // Mark all controls for validation feedback\n\n if (!this.mainForm.valid) {\n // Trigger validation feedback on individual components visually if needed\n Object.keys(this.mainForm.controls).forEach((controlName) => {\n if (this.components[controlName]?.instance?.validate) {\n this.components[controlName].instance.validate(); // Assuming validate method handles visual feedback\n }\n });\n this.toastrService.warn({ subtitle: 'Por favor completa todos los ejercicios', title: 'Incompleto' });\n return;\n }\n\n const rates = { correct: 0, incorrect: 0, score: 0 };\n\n // Evaluate each component associated with a form control\n Object.keys(this.mainForm.controls).forEach((controlName) => {\n const instance = this.components[controlName]?.instance;\n // Check if the instance has an evaluate method (duck typing is okay here)\n if (instance && typeof instance.evaluate === 'function') {\n try {\n const result = instance.evaluate();\n if (result) {\n rates.correct++;\n } else {\n rates.incorrect++;\n }\n } catch (err) {\n console.error('Error during evaluation for component:', controlName, instance, err);\n rates.incorrect++; // Count errors as incorrect\n }\n }\n });\n\n if (this.test()) {\n // Access signal value\n console.log('Test mode: Evaluation skipped saving.');\n this.toastrService.info({ subtitle: `Test Results: ${rates.correct} correct, ${rates.incorrect} incorrect`, title: 'Test Mode' });\n return;\n }\n\n const totalQuestions = rates.correct + rates.incorrect;\n rates.score = totalQuestions > 0 ? rates.correct / totalQuestions : 0; // Avoid division by zero\n\n const status = rates.score >= 0.7 ? 'passed' : 'failed'; // Use >= for threshold\n\n const currentLesson = this.lesson();\n if (!currentLesson) {\n console.error('Cannot save result, lesson data is missing.');\n this.toastrService.error({ subtitle: 'Cannot save result, lesson data missing.', title: 'Error' });\n return;\n }\n const takenLesson = { lessonId: currentLesson.id, status: status, score: rates.score };\n\n console.log('Lesson evaluation result:', takenLesson);\n // TODO: Re-implement saving the taken lesson status via lessonService\n // try {\n // await this.lessonService.saveTakenLesson(takenLesson);\n // if (status === 'passed') {\n // this.toastrService.success({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%. Se guardó tu progreso.`, title: '¡Muy bien!' });\n // } else {\n // this.toastrService.warn({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%. Revisa tus respuestas.`, title: 'Casi lo logras' });\n // }\n // } catch (error) {\n // console.error('Failed to save taken lesson', error);\n // this.toastrService.error({ subtitle: 'No se pudo guardar tu progreso.', title: 'Error' });\n // }\n if (status === 'passed') {\n this.toastrService.success({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%.`, title: '¡Muy bien!' });\n } else {\n this.toastrService.warn({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%. Revisa tus respuestas.`, title: 'Casi lo logras' });\n }\n }\n\n // --- AI Chat Logic ---\n\n public async startAI() {\n const currentLesson = this.lesson();\n if (!currentLesson) {\n console.error('Cannot start AI without a lesson.');\n this.toastrService.error({ subtitle: 'Lesson data not available.', title: 'Cannot Start Chat' });\n return;\n }\n\n console.log('Requesting agent cards from LessonAIService...');\n try {\n // Call the service to get the agent cards\n const agentCards = await this.lessonAIService.generateAgentCards(currentLesson);\n\n if (agentCards) {\n this.agentMasterLesson.set(agentCards.masterAgent);\n this.evaluatorAgentCard.set(agentCards.evaluatorAgent);\n this.chatVisible.set(true);\n console.log('Agent cards received and set.');\n } else {\n console.error('Failed to generate agent cards (service returned null).');\n this.toastrService.error({ subtitle: 'Could not prepare the AI chat session.', title: 'Error' });\n }\n } catch (error) {\n console.error('Error generating agent cards:', error);\n this.toastrService.error({ subtitle: 'An error occurred while preparing the AI chat.', title: 'Error' });\n }\n }\n}\n","<div>\n <div #dynamicLesson class=\"targetclass\">\n <ng-template #target></ng-template>\n </div>\n</div>\n\n<br />\n<div style=\"display: flex; gap: 10px\">\n @if ((mainForm.controls | keyvalue)?.length) {\n <div>\n <p-button label=\"Calificar Lección\" icon=\"pi pi-check-circle\" (click)=\"evaluateForms()\" [rounded]=\"true\"></p-button>\n </div>\n }\n\n <p-button icon=\"pi pi-verified\" [rounded]=\"true\" (click)=\"startAI()\" label=\"Repasar con IA\" />\n</div>\n<br /><br />\n\n@if(chatVisible()) {\n<p-drawer header=\"Conversation\" [visible]=\"chatVisible()\" position=\"bottom\" styleClass=\"app-bottom-overlay\">\n <dc-chat [agentCard]=\"agentMasterLesson()\" [evaluatorAgentCard]=\"evaluatorAgentCard()\"></dc-chat>\n</p-drawer>\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { ILesson, LESSONS_TOKEN } from '../components/lesson-mini-components/components/lessons.clases';\nimport { NOTION_SERVICE_TOKEN, NotionExportType } from '../models/notion.models';\nimport { TOAST_ALERTS_TOKEN } from '@dataclouder/ngx-core';\n\n@Injectable() // Consider providing in root or specific module/component\nexport class LessonNotionService {\n #notionService = inject(NOTION_SERVICE_TOKEN);\n #lessonService = inject(LESSONS_TOKEN);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n\n // Keep track of loading state specific to Notion operations\n isLoading = signal(false);\n\n /**\n * Extracts the Notion Page ID from a URL.\n * @param url The Notion page URL.\n * @returns The extracted page ID or null if invalid.\n */\n private extractNotionPageId(url: string): string | null {\n const notionIdRegex = /[a-f0-9]{32}(?=\\?|$)/;\n const match = url.match(notionIdRegex);\n const notionId = match ? match[0] : null;\n if (!notionId) {\n this.#toastService.error({\n title: 'URL inválido',\n subtitle: 'Por favor ingresa una URL válida de Notion.',\n });\n return null;\n }\n return notionId;\n }\n\n /**\n * Links an existing lesson with a Notion page ID by updating the lesson's extras.\n * @param lesson The current lesson data.\n * @param notionPageId The Notion page ID to link.\n * @returns The updated lesson data from the backend or undefined on failure.\n */\n public async linkLessonWithNotion(lesson: ILesson, notionPageId: string): Promise<ILesson | undefined> {\n if (!lesson || !lesson.id) {\n // Ensure lesson exists and has an ID\n this.#toastService.warn({ title: 'No se puede enlazar', subtitle: 'La lección debe existir y tener un ID.' });\n return undefined;\n }\n\n const updatedLesson = {\n ...lesson,\n extras: {\n ...(lesson.extras || {}),\n notionPageId: notionPageId,\n },\n };\n\n this.isLoading.set(true);\n try {\n const savedLesson = await this.#lessonService.postLesson(updatedLesson);\n this.#toastService.success({ title: 'Listo', subtitle: 'Se enlazó la lección con Notion.' });\n return savedLesson;\n } catch (error) {\n // Remove explicit type, rely on tsconfig setting\n console.error('Error linking with Notion:', error);\n this.#toastService.error({ title: 'Error al enlazar', subtitle: 'Ocurrió un error inesperado.' });\n return undefined;\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Handles the process of importing lesson content from Notion.\n * It prompts the user for a URL if necessary, extracts the ID, fetches content,\n * and potentially links the lesson if it's an existing one.\n * @param currentLesson The current lesson data (can be a new or existing lesson).\n * @param lessonId The current lesson ID (null if it's a new lesson).\n * @returns The fetched HTML content from Notion, or null if the process fails.\n */\n public async importAndLinkLessonFromNotion(currentLesson: ILesson | undefined, lessonId: string | null): Promise<string | null> {\n if (!currentLesson) return null;\n\n let notionPageId: string | null = null;\n\n if (currentLesson.extras?.notionPageId) {\n const useExisting = confirm(`Ya tenemos el id ${currentLesson.extras.notionPageId} ¿Quieres usar este id para importar?`);\n if (useExisting) {\n notionPageId = currentLesson.extras.notionPageId;\n } else {\n const inputUrl = prompt('Ingresa la NUEVA URL de Notion para importar (este ID NO se guardará automáticamente si la lección ya existe)');\n if (!inputUrl) return null; // User cancelled\n notionPageId = this.extractNotionPageId(inputUrl);\n }\n } else {\n const inputUrl = prompt('Ingresa el URL de Notion para importar la lección (se enlazará si la lección ya existe)');\n if (!inputUrl) return null; // User cancelled\n notionPageId = this.extractNotionPageId(inputUrl);\n // Link automatically only if we got a valid Notion ID AND the lesson already exists (has an ID)\n if (notionPageId && lessonId) {\n const linkedLesson = await this.linkLessonWithNotion(currentLesson, notionPageId);\n if (!linkedLesson) {\n // Linking failed, maybe stop the import? Or proceed without linking?\n // For now, let's stop.\n this.#toastService.error({ title: 'Error de Enlace', subtitle: 'No se pudo enlazar con Notion antes de importar.' });\n return null;\n }\n // If linking succeeded, the lesson object might have changed, but we proceed with the import using the notionPageId.\n }\n }\n\n if (!notionPageId) {\n this.#toastService.warn({ title: 'Sin ID de Notion', subtitle: 'No se proporcionó un ID de Notion válido para importar.' });\n return null;\n }\n\n this.isLoading.set(true);\n try {\n this.#toastService.info({ title: 'Importando lección...', subtitle: 'Espera unos segundos' });\n const md = await this.#notionService.getPageInSpecificFormat(notionPageId, NotionExportType.HTML);\n console.log('Imported MD/HTML:', md);\n this.#toastService.success({ title: 'Contenido Importado', subtitle: 'Contenido de Notion obtenido.' });\n return md.content; // Return the fetched content\n } catch (error) {\n // Remove explicit type, rely on tsconfig setting\n console.error('Error importing from Notion:', error);\n this.#toastService.error({ title: 'Error de importación', subtitle: 'Ocurrió un error inesperado.' });\n return null; // Return null on failure\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Fetches content from the linked Notion page for AI improvement (placeholder).\n * @param lesson The current lesson data.\n */\n public async improveLessonWithNotionAI(lesson: ILesson | undefined): Promise<void> {\n if (!lesson) return;\n const notionId = lesson.extras?.notionPageId;\n\n if (!notionId) {\n this.#toastService.warn({ title: 'Sin ID de Notion', subtitle: 'Enlaza la lección con Notion primero.' });\n return;\n }\n\n this.isLoading.set(true);\n try {\n this.#toastService.info({ title: 'Mejorando con IA...', subtitle: 'Obteniendo contenido de Notion.' });\n const md = await this.#notionService.getPageInSpecificFormat(notionId, NotionExportType.HTML);\n console.log('Content to improve:', md);\n // TODO: Add actual AI improvement logic here\n // e.g., call another service: await this.aiImprovementService.improve(md.content);\n // Then potentially update the lesson via lessonService or return data\n this.#toastService.success({ title: 'Contenido Obtenido', subtitle: 'Listo para mejorar con IA (lógica no implementada).' });\n } catch (error) {\n // Remove explicit type, rely on tsconfig setting\n console.error('Error improving with AI:', error);\n this.#toastService.error({ title: 'Error de IA', subtitle: 'Ocurrió un error inesperado.' });\n } finally {\n this.isLoading.set(false);\n }\n }\n}\n","import { Injectable, inject, WritableSignal } from '@angular/core';\nimport { ILesson, LessonImage, LESSONS_TOKEN, DynamicContentComponent } from '../components/lesson-mini-components/components/lessons.clases'; // Added DynamicContentComponent\nimport { TOAST_ALERTS_TOKEN } from '@dataclouder/ngx-core';\n\n@Injectable({\n providedIn: 'root', // Provide globally or in a specific module if preferred\n})\nexport class LessonUtilsService {\n #lessonService = inject(LESSONS_TOKEN);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n\n constructor() {}\n\n /**\n * Validates if audios need generation for the given lesson.\n * Currently logs a placeholder message.\n * @param lesson The lesson object (or signal) to validate.\n */\n public validateAudios(lesson: ILesson | undefined): void {\n // Access lesson data directly\n if (!lesson?.components) {\n return;\n }\n // Placeholder logic - adapt as needed from original component\n console.log('Validating audios for lesson:', lesson.id);\n // Original logic commented out - requires SpeakerCompConfiguration type\n // const needsGeneration = lesson.components.some((component: any) => // Use 'any' or define SpeakerCompConfiguration\n // component.component === 'speaker' && component.settings?.voice && !component.audio\n // );\n // if (needsGeneration) {\n // this.#toastService.warn({ title: 'Audios por generar', subtitle: 'Se encontraron audios pendientes' });\n // // Consider calling generation service here or returning a flag\n // // this.#lessonService.generateAudiosForLesson(lesson.id).then(res => { ... });\n // }\n }\n\n /**\n * Updates the lesson signal with a new cover image.\n * @param lessonSignal The signal holding the lesson data.\n * @param imageUploaded The image data object from the upload event.\n */\n public uploadCover(lessonSignal: WritableSignal<ILesson | undefined>, imageUploaded: any): void {\n // Use 'any' for now, refine if event structure is known\n const newImage: LessonImage = {\n type: 'cover',\n url: imageUploaded?.url,\n path: imageUploaded?.path,\n fullPath: imageUploaded?.fullPath,\n resolutions: imageUploaded?.resolutions ?? [],\n resolution: imageUploaded?.resolution,\n bucket: imageUploaded?.bucket,\n // Add any other required fields from LessonImage or ImgStorageData\n };\n\n lessonSignal.update((currentLesson) => {\n if (!currentLesson) return undefined;\n\n let updatedImages: LessonImage[];\n const existingMedia = currentLesson.media;\n\n if (!existingMedia || !existingMedia.images) {\n updatedImages = [newImage];\n } else {\n const filteredImages = existingMedia.images.filter((img: any) => img.type !== 'cover');\n const mappedExistingImages: LessonImage[] = filteredImages.map(\n (img: any): LessonImage => ({\n type: img.type,\n url: img.url,\n path: img.path,\n fullPath: img.fullPath,\n resolutions: img.resolutions ?? [],\n resolution: img.resolution,\n bucket: img.bucket,\n }),\n );\n updatedImages = [...mappedExistingImages, newImage];\n }\n\n return {\n ...currentLesson,\n media: {\n ...(existingMedia || {}),\n images: updatedImages,\n },\n };\n });\n // Note: Saving the lesson should be triggered from the component after calling this.\n }\n\n /**\n * Generates lesson content using AI. Assumes the lesson is already saved.\n * @param lessonId The ID of the lesson to generate content for.\n * @returns The updated lesson object after AI generation, or null on failure.\n */\n public async generateByAI(lessonId: string): Promise<ILesson | null> {\n if (!lessonId) {\n this.#toastService.warn({ title: 'ID Requerido', subtitle: 'Se necesita un ID de lección para usar IA.' });\n return null;\n }\n\n // No need to save here, component should ensure it's saved before calling.\n try {\n await this.#lessonService.postGenerateByAI(lessonId);\n // Re-fetch the lesson data to get AI updates\n const updatedLesson = await this.#lessonService.getLesson(lessonId);\n if (updatedLesson) {\n this.#toastService.success({ title: 'IA completada', subtitle: 'Lección actualizada con IA.' });\n return updatedLesson;\n } else {\n throw new Error('Failed to fetch lesson after AI generation');\n }\n } catch (error: any) {\n // Type the error object\n console.error('Error during AI generation in service:', error);\n this.#toastService.error({ title: 'Error de IA', subtitle: 'No se pudo generar la lección con IA.' });\n return null; // Return null in catch block\n }\n // Loading state should be managed by the component calling this service.\n }\n\n /**\n * Cleans orphaned components from the lesson's dynamicComponents.\n * An orphaned component is one present in dynamicComponents but its ID is not found in the textCoded HTML.\n * @param lesson The lesson object to clean.\n * @returns A new lesson object with orphaned components removed from dynamicComponents.\n */\n public cleanOrphanedComponents(lesson: ILesson): ILesson {\n if (!lesson || !lesson.textCoded || !lesson.dynamicComponents) {\n // Return the original lesson if essential parts are missing\n return lesson;\n }\n\n const textCoded = lesson.textCoded;\n const existingComponents = lesson.dynamicComponents;\n const existingComponentIds = new Set(Object.keys(existingComponents));\n\n // Regex to find \"id\":\"<component_id>\" within the textCoded string\n const idRegex = /\"id\":\"([^\"]+)\"/g;\n const foundIdsInText = new Set<string>();\n let match;\n\n while ((match = idRegex.exec(textCoded)) !== null) {\n const potentialId = match[1];\n // Check if the found ID actually exists in our dynamic components map\n // This ensures we only count IDs that correspond to known components.\n if (existingComponentIds.has(potentialId)) {\n foundIdsInText.add(potentialId);\n }\n }\n\n const orphanedIds: string[] = [];\n const cleanedDynamicComponents: Record<string, DynamicContentComponent> = {};\n\n // Iterate through existing component IDs\n for (const componentId of existingComponentIds) {\n if (foundIdsInText.has(componentId)) {\n // Keep the component if its ID was found in the text\n cleanedDynamicComponents[componentId] = existingComponents[componentId];\n } else {\n // Mark as orphaned if not found\n orphanedIds.push(componentId);\n }\n }\n\n // Log a warning if any orphaned components were found\n if (orphanedIds.length > 0) {\n console.warn(`[LessonUtilsService] Orphaned components detected and will be removed from lesson data (IDs not found in textCoded):`, orphanedIds);\n this.#toastService.warn({\n title: 'Componentes Huérfanos Detectados',\n subtitle: `Se removerán ${orphanedIds.length} componentes no usados del editor.`,\n // life: 5000, // Removed 'life' property as it might not be supported by ToastData\n });\n }\n\n // Return a new lesson object with the cleaned components\n return {\n ...lesson,\n dynamicComponents: cleanedDynamicComponents,\n };\n }\n}\n","import { Component, EventEmitter, Output, inject } from '@angular/core'; // Added inject\nimport { CommonModule } from '@angular/common';\n// PrimeNG\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog'; // Added DialogService, DynamicDialogRef\n// Dataclouder\nimport { TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } from '@dataclouder/ngx-core'; // Added Toast imports\n// Project specific\nimport { LessonComponentEnum, LessonComponentBuilders } from '../../lesson-mini-components/components/lessons.clases'; // Added LessonComponentBuilders\n\n@Component({\n selector: 'dc-lesson-component-adder',\n standalone: true,\n imports: [CommonModule, ButtonModule, TooltipModule],\n templateUrl: './dc-lesson-component-adder.component.html',\n styleUrls: ['./dc-lesson-component-adder.component.css'],\n providers: [DialogService], // Provide DialogService here\n})\nexport class DCLessonComponentAdderComponent {\n // Services\n #dialogService = inject(DialogService);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n\n @Output() componentAdded = new EventEmitter<any>(); // Changed Output name and type\n\n // Expose enum to the template\n public lessonComponentEnum = LessonComponentEnum;\n\n // Moved logic from DCLessonEditorComponent\n public openComponentBuilder(type: LessonComponentEnum): void {\n const componentToBuild = LessonComponentBuilders[type];\n if (!componentToBuild) {\n console.error(`No component builder found for type: ${type}`);\n this.#toastService.error({ title: 'Error', subtitle: `Componente desconocido: ${type}` });\n return;\n }\n const dialogRef: DynamicDialogRef = this.#dialogService.open(componentToBuild, {\n width: '80vw',\n header: 'Agregar componente',\n closable: true,\n });\n\n // Handle the result and emit the new event\n dialogRef.onClose.subscribe((result) => {\n if (result) {\n console.log('Component builder closed:', result);\n this.componentAdded.emit(result); // Emit the result when dialog closes successfully\n }\n });\n }\n}\n","<span>Componentes: </span>\n<div style=\"display: flex; gap: 10px; flex-wrap: wrap\">\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.Selector)\"\n pTooltip=\"Agrega un selector con multiples opciones\"\n tooltipPosition=\"bottom\">\n Selector\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.Speaker)\"\n pTooltip=\"Para que una palabra o frase sea reproducible\"\n tooltipPosition=\"bottom\">\n Speaker\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.TextWriter)\"\n pTooltip=\"Escribe una respuesta en un cuadro de texto\"\n tooltipPosition=\"bottom\">\n Text\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.VerbSummary)\"\n pTooltip=\"Muestra la información de un verbo\"\n tooltipPosition=\"bottom\">\n Verb\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.WordSummary)\"\n pTooltip=\"Muestra la información de una palabra\"\n tooltipPosition=\"bottom\">\n Palabra\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.TranslationSwitcher)\"\n pTooltip=\"Muestra el texto pero al pica cambia de idioma\"\n tooltipPosition=\"bottom\">\n Traducción\n </p-button>\n <!-- Add other buttons here if needed, following the same pattern -->\n</div>\n","import { Component, EventEmitter, Input, Output, WritableSignal, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TooltipModule } from 'primeng/tooltip'; // Added TooltipModule\nimport { ILesson } from '../../lesson-mini-components/components/lessons.clases';\nimport { FlagLanguagePipe, LangDescTranslationPipe } from '../../../models/lessons.pipes';\n\n@Component({\n selector: 'dc-lesson-metadata-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ButtonModule,\n InputTextModule,\n TooltipModule, // Added TooltipModule\n FlagLanguagePipe, // Added Pipe\n LangDescTranslationPipe, // Added Pipe\n ],\n templateUrl: './dc-lesson-metadata-editor.component.html',\n styleUrls: ['./dc-lesson-metadata-editor.component.css'],\n})\nexport class DCLessonMetadataEditorComponent {\n // Use signal for input lesson data\n @Input({ required: true }) lesson: WritableSignal<ILesson | undefined> = signal(undefined);\n @Input({ required: true }) isLoadingLesson: WritableSignal<boolean> = signal(false);\n\n // Outputs for actions\n @Output() saveRequest = new EventEmitter<void>();\n @Output() importNotionRequest = new EventEmitter<void>();\n @Output() improveNotionRequest = new EventEmitter<void>();\n @Output() generateAIRequest = new EventEmitter<void>();\n\n // Output for property changes\n @Output() propertyChange = new EventEmitter<{ property: keyof ILesson; value: any }>();\n\n // Method to emit property changes, called by ngModelChange in the template\n onPropertyChange<K extends keyof ILesson>(property: K, value: ILesson[K]): void {\n this.propertyChange.emit({ property, value });\n }\n\n // Methods to emit action requests\n emitSaveRequest(): void {\n this.saveRequest.emit();\n }\n\n emitImportNotionRequest(): void {\n this.importNotionRequest.emit();\n }\n\n emitImproveNotionRequest(): void {\n this.improveNotionRequest.emit();\n }\n\n emitGenerateAIRequest(): void {\n this.generateAIRequest.emit();\n }\n}\n","@if (lesson(); as currentLesson) {\n<div>\n <div>\n <div style=\"display: flex; gap: 10px; padding: 10px\">\n <p-button label=\"Guardar\" severity=\"primary\" (click)=\"emitSaveRequest()\" />\n <p-button label=\"Importar de Notion\" severity=\"help\" (click)=\"emitImportNotionRequest()\" />\n <p-button label=\"Mejorar Notion con AI\" severity=\"help\" (click)=\"emitImproveNotionRequest()\" />\n </div>\n\n <!-- Use one-way binding and ngModelChange for signals -->\n <div>\n <input\n pInputText\n style=\"width: 100%\"\n [ngModel]=\"currentLesson.title\"\n (ngModelChange)=\"onPropertyChange('title', $event)\"\n type=\"text\"\n placeholder=\"Agrega un título\" />\n </div>\n <div style=\"margin-top: 4px\">\n <input\n pInputText\n style=\"width: 100%\"\n [ngModel]=\"currentLesson.description\"\n (ngModelChange)=\"onPropertyChange('description', $event)\"\n type=\"text\"\n placeholder=\"Agrega una descripción\" />\n </div>\n\n <div style=\"display: flex; align-items: center; margin-top: 10px\">\n <input\n pInputText\n style=\"flex: auto; margin-right: 5px\"\n [ngModel]=\"currentLesson.prompt\"\n (ngModelChange)=\"onPropertyChange('prompt', $event)\"\n type=\"text\"\n placeholder=\"Prompt para IA (opcional)\" />\n <p-button severity=\"primary\" [disabled]=\"isLoadingLesson()\" (click)=\"emitGenerateAIRequest()\"> Generar con IA </p-button>\n </div>\n\n <div style=\"margin-top: 10px\">\n <label class=\"checkbox-container\" style=\"margin-right: 15px\">\n <input\n type=\"checkbox\"\n [ngModel]=\"currentLesson.isPublished\"\n (ngModelChange)=\"onPropertyChange('isPublished', $event)\"\n title=\"Cuando termines la edición marca esta casilla\" />\n <span class=\"checkmark\"></span>\n Publicada\n </label>\n\n <input\n pInputText\n [ngModel]=\"currentLesson.level\"\n (ngModelChange)=\"onPropertyChange('level', $event)\"\n type=\"number\"\n placeholder=\"Nivel\"\n style=\"width: 80px\" />\n </div>\n\n <!-- Access signal values -->\n <div style=\"margin-top: 10px; font-size: 0.9em; color: var(--text-color-secondary)\">\n {{ currentLesson.baseLang | flagEmoji }} -> {{ currentLesson.targetLang | flagEmoji }} Lección para hablantes de\n {{ currentLesson.baseLang | langDesc : 'es' }} que aprenden\n {{ currentLesson.targetLang | langDesc : 'es' }}\n </div>\n </div>\n</div>\n} @else {\n<!-- Optional: Show a loading state or placeholder if lesson is undefined -->\n<p>Cargando datos de la lección...</p>\n}\n","import { Component, ComponentRef, ElementRef, computed, effect, inject, signal, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ActivatedRoute, Router, ParamMap } from '@angular/router';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { map } from 'rxjs';\n\nimport BalloonEditor from '@ckeditor/ckeditor5-build-balloon-block';\nimport { CKEditorModule } from '@ckeditor/ckeditor5-angular';\n// PrimeNG\n// Removed DialogService, DynamicDialogRef, SpeedDialModule, MenuItem\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SplitterModule } from 'primeng/splitter';\nimport { TooltipModule } from 'primeng/tooltip';\n// Dataclouder\nimport { AspectType, CropperComponentModal, ResolutionType, StorageImageSettings } from '@dataclouder/ngx-cloud-storage';\nimport { TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } from '@dataclouder/ngx-core';\n\nimport { DCLessonRendererComponent } from '../dc-lesson-renderer/dc-lesson-renderer.component';\n// Added DynamicContentComponent to the import below\nimport {\n LessonComponentEnum,\n LessonImage,\n ILesson,\n LessonComponentInterface,\n LESSONS_TOKEN,\n DynamicContentComponent,\n LessonComponentConfiguration,\n} from '../../lesson-mini-components/components/lessons.clases';\nimport { LessonComponentBuilders } from '../../lesson-mini-components/components/lessons.clases';\nimport { FlagLanguagePipe, LangDescTranslationPipe } from '../../../models/lessons.pipes';\n// Notion types might still be needed if passed/returned, but token injection removed\nimport { NotionExportType } from '../../../models/notion.models';\n// Removed MenuItem import\nimport { LessonNotionService } from '../../../services/lesson-notion.service';\nimport { LessonUtilsService } from '../../../services/lesson-utils.service'; // Import the new utils service\nimport { DCLessonComponentAdderComponent } from '../dc-lesson-component-adder/dc-lesson-component-adder.component'; // Import the component adder\nimport { DCLessonMetadataEditorComponent } from '../dc-lesson-metadata-editor/dc-lesson-metadata-editor.component'; // Import the metadata editor\nimport { ComponentBuildData } from '../../lesson-mini-components/components/ComponentBuilder';\nimport { JsonPipe } from '@angular/common';\n\nconst GradientCss = 'linear-gradient(to bottom,var(--primary-color), rgba(213, 238, 239, 0.31))';\n\n@Component({\n selector: 'dc-lesson-editor',\n templateUrl: './dc-lesson-editor.component.html',\n styleUrls: ['./dc-lesson-editor.component.css'],\n standalone: true,\n imports: [\n ButtonModule,\n CKEditorModule,\n CropperComponentModal,\n DCLessonRendererComponent,\n FormsModule,\n InputTextModule,\n SplitterModule,\n TooltipModule,\n // Removed SpeedDialModule\n DCLessonComponentAdderComponent, // Add the component adder here\n DCLessonMetadataEditorComponent, // Add the metadata editor here\n JsonPipe,\n ],\n providers: [LessonNotionService], // Provide the service here\n})\nexport class DCLessonEditorComponent {\n // Services\n #activatedRoute = inject(ActivatedRoute); // Re-inject as it's needed for navigation\n #lessonNotionService = inject(LessonNotionService);\n #lessonUtilsService = inject(LessonUtilsService);\n #router = inject(Router);\n // Removed #dialogService injection\n #lessonService = inject(LESSONS_TOKEN);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n // ViewChild\n @ViewChild('target', { read: ViewContainerRef }) target: ViewContainerRef;\n @ViewChild('dhtml', { static: true }) dhtml: ElementRef;\n // Signals States\n readonly lessonId = toSignal(inject(ActivatedRoute).paramMap.pipe(map((params: ParamMap) => params.get('id'))));\n lesson = signal<ILesson | undefined>(undefined); // Initialize as undefined\n isCropperVisible = signal(false);\n isLoadingLesson = signal(false);\n // Removed items signal\n // Computed Signals\n coverImageUrl = computed(() => {\n const currentLesson = this.lesson();\n const coverImage = currentLesson?.media?.images?.find((img: any) => img.type === 'cover') as LessonImage | undefined;\n return coverImage?.url || '/assets/images/default_banner.webp';\n });\n\n // Computed signal to get dynamic components as an array for easier iteration in the template\n readonly dynamicComponentsArray = computed(() => {\n const currentLesson = this.lesson();\n if (currentLesson?.dynamicComponents) {\n return Object.values(currentLesson.dynamicComponents);\n }\n return []; // Return empty array if no lesson or no dynamic components\n });\n\n // States\n public components: { [key: string]: ComponentRef<LessonComponentInterface> } = {}; // Current Dynamic components\n public editor = BalloonEditor;\n public lessonComponentEnum = LessonComponentEnum;\n\n public coverStorageSettings: StorageImageSettings = {\n path: 'lessons/covers',\n fileName: 'cover',\n cropSettings: { resizeToWidth: 850, aspectRatio: AspectType.RectangleLarge, resolutions: [ResolutionType.Medium] },\n };\n\n constructor() {\n // Removed Speed Dial Items initialization\n\n // Effect to fetch lesson data when ID changes\n effect(async () => {\n const id = this.lessonId();\n console.log('Lesson ID Signal:', id);\n if (id) {\n this.isLoadingLesson.set(true); // Start loading\n try {\n const fetchedLesson = await this.#lessonService.getLesson(id);\n if (fetchedLesson) {\n this.lesson.set(fetchedLesson);\n } else {\n this.lesson.set(undefined); // Reset if not found\n this.#toastService.warn({ title: 'No se encontró la lección', subtitle: 'Quizá el id es incorrecto' });\n // Optional: Navigate away or show a specific \"not found\" state\n // this.#router.navigate(['/path/to/lessons']);\n }\n } catch (error) {\n console.error('Error fetching lesson:', error);\n this.lesson.set(undefined); // Reset on error\n this.#toastService.error({ title: 'Error al cargar la lección', subtitle: 'Intenta de nuevo más tarde' });\n } finally {\n this.isLoadingLesson.set(false); // Stop loading\n }\n } else {\n // Handle case for new lesson (ID is null/undefined)\n this.lesson.set({ textCoded: `<h1>Nueva lección </h1> <p> Texto aquí</p>`, tags: [] } as ILesson); // Set default new lesson structure\n this.isLoadingLesson.set(false); // Ensure loading is off\n }\n });\n }\n\n /**\n * Updates a specific property on the lesson signal.\n * Used for ngModelChange events to simulate two-way binding with signals.\n * @param property The key of the ILesson property to update.\n * @param value The new value for the property.\n */\n public updateLessonProperty<K extends keyof ILesson>(property: K, value: ILesson[K]): void {\n this.lesson.update((currentLesson) => {\n if (!currentLesson) return undefined;\n return { ...currentLesson, [property]: value };\n });\n }\n\n public onTagRemove(tag: any): void {\n this.lesson.update((currentLesson) => {\n if (!currentLesson) return undefined;\n const updatedTags = currentLesson.tags.filter((text: string) => text !== tag.text);\n return { ...currentLesson, tags: updatedTags };\n });\n }\n\n public onTagAdd(tag: { value: string; input: any }): void {\n if (tag.value) {\n this.lesson.update((currentLesson) => {\n if (!currentLesson) return undefined;\n // Avoid duplicate tags if necessary\n if (currentLesson.tags.includes(tag.value)) {\n return currentLesson;\n }\n const updatedTags = [...currentLesson.tags, tag.value];\n return { ...currentLesson, tags: updatedTags };\n });\n }\n tag.input.nativeElement.value = ''; // Clear input\n }\n\n public async saveLesson(event?: Event): Promise<ILesson | undefined> {\n event?.preventDefault();\n\n const currentLesson = this.lesson();\n if (!currentLesson) {\n this.#toastService.error({ title: 'Error', subtitle: 'No hay datos de lección para guardar' });\n return undefined;\n }\n\n // Clean orphaned components before saving\n const lessonToSave = this.#lessonUtilsService.cleanOrphanedComponents(currentLesson);\n\n // TODO: Implement optimization for saving only changed data.\n // This requires comparing lessonToSave with the initially fetched state.\n this.isLoadingLesson.set(true); // Indicate saving\n try {\n // Use the cleaned lesson object for saving\n const savedLesson = await this.#lessonService.postLesson(lessonToSave);\n const currentId = this.lessonId();\n\n if (!currentId) {\n // It was a new lesson, now it has an ID. Navigate.\n this.#toastService.success({ title: 'Se creó la lección', subtitle: 'Éxito' });\n // The effect should automatically fetch the lesson again after navigation due to paramMap change.\n this.#router.navigate(['../', savedLesson.id], { relativeTo: this.#activatedRoute });\n } else {\n // It was an existing lesson, update the signal with the potentially updated data from the backend.\n this.lesson.set(savedLesson);\n this.#toastService.info({ title: 'Se guardaron los cambios en la lección', subtitle: 'Guardado' });\n // Call the service method for validation\n this.#lessonUtilsService.validateAudios(this.lesson());\n }\n return savedLesson;\n } catch (error: any) {\n // Type error\n console.error('Error saving lesson:', error);\n this.#toastService.error({ title: 'Error al guardar', subtitle: 'No se pudieron guardar los cambios' });\n return undefined;\n } finally {\n this.isLoadingLesson.set(false); // Finish saving indication\n }\n } // Add missing closing brace for saveLesson\n\n // Removed openComponentBuilder method\n\n /**\n * Handles the event emitted when a component is added via the adder component.\n * @param result The configuration data returned from the component builder dialog. Expected format: { obj: LessonComponentConfiguration }\n */\n public onComponentAdded(result: ComponentBuildData): void {\n debugger;\n // Check if result and result.obj.id exist\n const newComponent = result?.obj;\n if (newComponent?.id) {\n console.log('Component builder closed, result received in editor:', newComponent);\n\n // // Transform LessonComponentConfiguration to DynamicContentComponent\n // const dynamicComponentToAdd: DynamicContentComponent = {\n // id: componentConfig.id,\n // component: componentConfig.component,\n // inputs: {\n // config: componentConfig, // Pass the original config object as an input named 'config'\n // // Add other potential inputs if needed based on component type later\n // },\n // };\n\n // Update the lesson signal, adding the transformed component to the dynamicComponents object\n this.lesson.update((currentLesson: any) => {\n if (!currentLesson) return undefined;\n\n // Ensure dynamicComponents object exists, initialize if not\n const currentDynamicComponents = currentLesson.dynamicComponents || {};\n\n // Create the updated dynamicComponents object\n const updatedDynamicComponents: Record<string, LessonComponentConfiguration<any>> = {\n ...currentDynamicComponents,\n [newComponent.id]: newComponent, // Use component's id as the key\n };\n\n // Return the updated lesson state\n return { ...currentLesson, dynamicComponents: updatedDynamicComponents };\n });\n\n // Optionally save the lesson after adding the component\n // this.saveLesson();\n }\n }\n\n public openCropper(): void {\n // Correctly define openCropper\n this.isCropperVisible.set(true);\n }\n\n // isLoadingLesson signal is used directly\n\n public async generateByAI(): Promise<void> {\n const currentId = this.lessonId();\n if (!currentId) {\n this.#toastService.warn({ title: 'Guardar primero', subtitle: 'Guarda la lección antes de usar IA.' });\n return;\n }\n\n this.isLoadingLesson.set(true);\n try {\n // Ensure latest changes are saved before generating\n const savedLesson = await this.saveLesson();\n if (!savedLesson) {\n // Handle save error - toast is shown in saveLesson\n throw new Error('Failed to save before AI generation');\n }\n\n // Call the service method\n const updatedLesson = await this.#lessonUtilsService.generateByAI(currentId);\n\n if (updatedLesson) {\n this.lesson.set(updatedLesson); // Update the signal with AI changes from service\n // Toast success is handled by the service\n } else {\n // Toast error is handled by the service\n throw new Error('AI generation failed or lesson fetch failed after generation.');\n }\n } catch (error: any) {\n // Type error\n console.error('Error during AI generation process in component:', error);\n // Service handles specific AI error toasts, maybe add a general one here if needed\n // this.#toastService.error({ title: 'Error General', subtitle: 'Ocurrió un problema durante el proceso de IA.' });\n } finally {\n this.isLoadingLesson.set(false); // Stop loading\n }\n }\n\n /**\n * Handles the image upload event, updates the lesson signal via the service, and saves.\n * @param event The image upload event data.\n */\n public async onImageUploaded(event: any): Promise<void> {\n // Call the service to update the signal\n this.#lessonUtilsService.uploadCover(this.lesson, event);\n // The coverBackground computed signal will update automatically.\n // Save the lesson after the signal has been updated\n await this.saveLesson();\n }\n\n /**\n * Imports lesson content from Notion using the LessonNotionService.\n */\n public async importFromNotion(): Promise<void> {\n // Use the service's loading state or manage locally\n this.isLoadingLesson.set(true);\n try {\n const newContent = await this.#lessonNotionService.importAndLinkLessonFromNotion(this.lesson(), this.lessonId());\n\n if (newContent !== null) {\n // Update the lesson signal's textCoded property\n this.updateLessonProperty('textCoded', newContent);\n // Toast success is handled within the service now\n }\n // If newContent is null, the service handled errors/toasts\n } finally {\n // Ensure loading state is reset regardless of service outcome\n // If observing service state: this.isLoadingLesson.set(this.#lessonNotionService.isLoading());\n this.isLoadingLesson.set(false); // Keep local loading for now\n }\n }\n\n /**\n * Calls the LessonNotionService to improve the lesson using AI based on Notion content.\n */\n public async improveNotionWithAI(): Promise<void> {\n await this.#lessonNotionService.improveLessonWithNotionAI(this.lesson());\n }\n\n public showComponentDetails(data: any) {\n alert('showComponentDetails' + JSON.stringify(data));\n }\n}\n","<div style=\"position: relative; margin-bottom: 20px\">\n <img class=\"header-cover\" [src]=\"coverImageUrl()\" alt=\"Lesson Cover Image\" />\n\n <dc-cropper-modal\n style=\"position: absolute; top: 10px; left: 20px\"\n [buttonLabel]=\"'Carga una portada'\"\n [imgStorageSettings]=\"coverStorageSettings\"\n (imageUploaded)=\"onImageUploaded($event)\"></dc-cropper-modal>\n</div>\n\n<br />\n\n<!-- Lesson Metadata Editor -->\n<dc-lesson-metadata-editor\n [lesson]=\"lesson\"\n [isLoadingLesson]=\"isLoadingLesson\"\n (saveRequest)=\"saveLesson()\"\n (importNotionRequest)=\"importFromNotion()\"\n (improveNotionRequest)=\"improveNotionWithAI()\"\n (generateAIRequest)=\"generateByAI()\"\n (propertyChange)=\"updateLessonProperty($event.property, $event.value)\">\n</dc-lesson-metadata-editor>\n\n<hr />\n\n<!-- Component Adder -->\n<dc-lesson-component-adder (componentAdded)=\"onComponentAdded($event)\"></dc-lesson-component-adder>\n\n<!-- Display Added Components -->\n<div class=\"added-components-list\" style=\"margin-top: 15px; margin-bottom: 15px\">\n <h4>Componentes Agregados:</h4>\n @if (dynamicComponentsArray().length > 0) {\n <ul>\n @for (comp of dynamicComponentsArray(); track comp.id) {\n <li>ID: {{ comp.id }} - Tipo: {{ comp.component }}<button pButton icon=\"pi pi-info\" (click)=\"showComponentDetails(comp)\"></button></li>\n }\n </ul>\n } @else {\n <p>Aún no se han agregado componentes.</p>\n }\n</div>\n\n<hr />\n\n<!-- Text Editor and Renderer -->\n<p-splitter [style]=\"{ height: '80vh' }\" styleClass=\"mb-8\">\n <ng-template pTemplate>\n <ckeditor\n (keydown.control.s)=\"saveLesson($event)\"\n class=\"text-editor\"\n [editor]=\"editor\"\n [ngModel]=\"lesson()?.textCoded\"\n (ngModelChange)=\"updateLessonProperty('textCoded', $event)\">\n </ckeditor>\n </ng-template>\n\n <ng-template pTemplate>\n <dc-lesson-renderer class=\"text-editor\" [lessonInput]=\"lesson()\" [test]=\"true\"></dc-lesson-renderer>\n </ng-template>\n</p-splitter>\n\n<div class=\"float-button\">\n <!-- Removed p-speeddial -->\n <p-button icon=\"pi pi-save\" (click)=\"saveLesson()\" severity=\"primary\" [rounded]=\"true\" [raised]=\"true\" pTooltip=\"Guardar (Ctrl + S)\"> </p-button>\n</div>\n\n<hr />\n","import { Component, Input } from '@angular/core';\n\nimport { LessonCompSettings } from './lessons.clases';\n\n@Component({\n selector: 'app-lesson-component',\n template: '<div>no template</div>',\n standalone: true,\n})\n// This is the base class for all the components that are going to be used in the lessons.\nexport class LessonDynamicComponent {\n @Input() settings: LessonCompSettings = {} as LessonCompSettings;\n}\n","/*\n * Public API Surface of lessons\n */\n\nexport * from './lib/models/lessons.pipes';\nexport * from './lib/models/notion.models';\n\nexport * from './lib/components/dc-lessons/lesson-list/dc-lesson-list.component';\nexport * from './lib/components/dc-lessons/lesson-form/lesson-form.component';\nexport * from './lib/components/dc-lessons/dc-lesson-editor/dc-lesson-editor.component';\nexport * from './lib/components/dc-lessons/dc-lesson-card/dc-lesson-card.component';\n\nexport * from './lib/components/dc-lessons/dc-lesson-renderer/dc-lesson-renderer.component';\n\nexport * from './lib/components/lesson-mini-components/components/ComponentWithForm';\nexport * from './lib/components/lesson-mini-components/components/lesson-dynamic.component';\nexport * from './lib/components/lesson-mini-components/components/lessons.clases';\n\nexport * from './lib/components/lesson-mini-components/components/ComponentBuilder';\nexport * from './lib/components/lesson-mini-components/components/text-writer/text-writer-buider/text-writer-buider.component';\nexport * from './lib/components/lesson-mini-components/components/text-writer/text-writer.component';\nexport * from './lib/components/lesson-mini-components/components/selector/selector-builder/selector-builder.component';\nexport * from './lib/components/lesson-mini-components/components/selector/selector.component';\nexport * from './lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcher.component';\nexport * from './lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"dataclouder-ngx-lessons.mjs","sources":["../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/ComponentBuilder.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/ComponentWithForm.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector-builder/selector-builder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/selector/selector-builder/selector-builder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer-buider/text-writer-buider.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer-buider/text-writer-buider.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/text-writer/text-writer.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcher.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcher.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker-builder/speaker-builder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker-builder/speaker-builder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/speaker/speaker.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/lessons.clases.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/models/lessons.pipes.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/models/notion.models.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/models/simple-agents.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-card/dc-lesson-card.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-card/dc-lesson-card.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-list/dc-lesson-list.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-list/dc-lesson-list.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-form/lesson-form.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/lesson-form/lesson-form.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/services/lesson-ai.service.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-renderer/dc-lesson-renderer.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-renderer/dc-lesson-renderer.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/services/lesson-notion.service.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/services/lesson-utils.service.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-component-adder/dc-lesson-component-adder.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-component-adder/dc-lesson-component-adder.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-metadata-editor/dc-lesson-metadata-editor.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-metadata-editor/dc-lesson-metadata-editor.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-editor/dc-lesson-editor.component.ts","../../../../projects/dataclouder/ngx-lessons/src/lib/components/dc-lessons/dc-lesson-editor/dc-lesson-editor.component.html","../../../../projects/dataclouder/ngx-lessons/src/lib/components/lesson-mini-components/components/lesson-dynamic.component.ts","../../../../projects/dataclouder/ngx-lessons/src/public-api.ts","../../../../projects/dataclouder/ngx-lessons/src/dataclouder-ngx-lessons.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { FormBuilder, FormControl } from '@angular/forms';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nimport { LessonComponentBuilders, LessonComponentConfiguration, LessonComponentEnum, LessonCompSettings } from './lessons.clases';\r\nimport { nanoid } from 'nanoid';\r\n\r\n// Create a type that maps the interface to FormControls\r\nexport type LessonCompSettingsForm = {\r\n [K in keyof Required<LessonCompSettings>]: FormControl<LessonCompSettings[K]>;\r\n};\r\n\r\nexport interface ComponentBuildData {\r\n str: string;\r\n obj: LessonComponentConfiguration;\r\n}\r\n\r\n@Component({\r\n selector: 'app-component-builder',\r\n template: '<div>no template</div>',\r\n})\r\nexport class ComponentBuilder {\r\n constructor(protected formBuilder: FormBuilder, protected ref: DynamicDialogRef) {}\r\n\r\n // Sobreescribir si es necesario\r\n // public formGroup = this.formBuilder.group<LessonCompSettings>({});\r\n\r\n public formGroup = this.formBuilder.group({\r\n response: new FormControl<string | null>(null),\r\n responses: new FormControl<string | null>(null),\r\n options: this.formBuilder.array([]),\r\n text: new FormControl<string | null>(null),\r\n hint: new FormControl<string | null>(null),\r\n explanation: new FormControl<string | null>(null),\r\n });\r\n\r\n // Every component knows its type by comparing agains LessonComponentBuilders\r\n get questionType(): LessonComponentEnum {\r\n const self = this;\r\n\r\n const name = Object.keys(LessonComponentBuilders).find((componentName: any) => {\r\n const componentClass = LessonComponentBuilders[componentName];\r\n if (self instanceof componentClass) {\r\n return componentName;\r\n }\r\n });\r\n\r\n return <LessonComponentEnum>name;\r\n }\r\n\r\n protected getCode(): LessonComponentConfiguration {\r\n const data = this.formGroup.value;\r\n // Deleting null values\r\n Object.keys(data).forEach((key) => {\r\n if (data[key] === null) {\r\n delete data[key];\r\n }\r\n });\r\n const code: LessonComponentConfiguration = { component: this.questionType, settings: { ...data } as unknown as LessonCompSettings };\r\n return code;\r\n }\r\n\r\n public showCode() {\r\n const code = this.getCode();\r\n const stringCode = `~${JSON.stringify(code)}~`;\r\n alert(stringCode);\r\n }\r\n\r\n public getComponentData(): ComponentBuildData {\r\n const code = this.getCode();\r\n const id = nanoid().replace(/-/g, '_');\r\n code.id = id;\r\n return { str: `~${JSON.stringify(code)}~`, obj: code };\r\n }\r\n\r\n // TODO: for now copyToClipboard is the that that closes modal and return data.\r\n public async copyToClipboard() {\r\n const data = this.getComponentData();\r\n await navigator.clipboard.writeText(data.str);\r\n this.ref.close(data);\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'app-component-form',\n template: '<div>no template</div>',\n})\nexport abstract class ComponentWithForm implements OnInit {\n // @Input() settings: LessonCompSettings;\n\n public control: UntypedFormControl = new UntypedFormControl();\n public status: string;\n\n ngOnInit(): void {\n this.control.valueChanges.subscribe(() => {\n this.status = 'basic';\n });\n }\n\n public validate(): void {\n // TODO: generic method to evaluate\n }\n\n public abstract evaluate(): boolean;\n}\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SelectModule } from 'primeng/select';\r\n\r\nimport { ComponentWithForm } from '../ComponentWithForm';\r\nimport { LessonComponentConfiguration, LessonComponentInterface } from '../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-selector',\r\n templateUrl: './selector.component.html',\r\n styleUrls: ['./selector.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, SelectModule],\r\n})\r\nexport class SelectorComponent extends ComponentWithForm implements LessonComponentInterface {\r\n public isFilled = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n @Input() config: LessonComponentConfiguration;\r\n\r\n public evaluate() {\r\n let result;\r\n if (this.control.value == null) {\r\n result = null;\r\n } else {\r\n result = this.control.value?.toLowerCase().trim() === this.config.settings.response.toLowerCase().trim();\r\n }\r\n\r\n if (result) {\r\n this.status = 'success';\r\n } else {\r\n this.status = 'danger';\r\n }\r\n this.isFilled = true;\r\n return result;\r\n }\r\n\r\n public override validate() {\r\n if (this.control.invalid) {\r\n this.status = 'warning';\r\n }\r\n return true;\r\n }\r\n}\r\n","<p-select [class]=\"status\" placeholder=\"Selecciona\" [options]=\"config.settings.options\" [formControl]=\"control\"></p-select>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormArray, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';\r\n\r\n\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\nimport { ComponentBuilder } from '../../ComponentBuilder';\r\nimport { SelectorComponent } from '../selector.component';\r\nimport { LessonComponentConfiguration, LessonComponentEnum } from '../../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-selector-builder',\r\n templateUrl: './selector-builder.component.html',\r\n styleUrls: ['./selector-builder.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, SelectorComponent, InputTextModule, ButtonModule, MessageModule],\r\n})\r\nexport class SelectorBuilderComponent extends ComponentBuilder implements OnInit {\r\n constructor(\r\n protected override formBuilder: FormBuilder,\r\n // protected override toastrService: ToastService,\r\n protected override ref: DynamicDialogRef,\r\n ) {\r\n super(formBuilder, null);\r\n }\r\n public sampleConfig: LessonComponentConfiguration = {\r\n id: '1',\r\n component: LessonComponentEnum.Selector,\r\n settings: {\r\n options: ['fourteen ninety-two', 'fourteen ninety-six', 'fifteen ninety-one'],\r\n response: 'fourteen ninety-two',\r\n hint: 'Pista para la respuesta',\r\n explanation: 'Explicación de la respuesta',\r\n responses: 'Opción 1, Opción 2, Opción 3',\r\n text: 'Texto de la pregunta',\r\n },\r\n };\r\n\r\n // public formGroup = this.formBuilder.group({\r\n // options: this.formBuilder.array([]),\r\n // response: ['', Validators.required],\r\n // hint: [],\r\n // explanation: [],\r\n // });\r\n\r\n ngOnInit(): void {\r\n this.formGroup.get('response');\r\n }\r\n\r\n public isRendered;\r\n\r\n //TODO Probablemente estos 3 pueden irse a una clase abstracta\r\n\r\n public pushControlToFormArray(controlName: string): void {\r\n this.formGroup.controls.options.push(this.formBuilder.control(''));\r\n // (this.formGroup.get(controlName) as UntypedFormArray).push(this.formBuilder.control(''));\r\n console.log(this.formGroup.controls.options);\r\n }\r\n\r\n public deleteFormArrayByIndex(controlName: string, index: number): void {\r\n (this.formGroup.get(controlName) as UntypedFormArray).removeAt(index);\r\n }\r\n\r\n get optionsForm(): UntypedFormArray {\r\n return this.formGroup.get('options') as UntypedFormArray;\r\n }\r\n}\r\n","<div>\n <div>\n <p-message>Construcción del componente de Selección, sirve para hacer una pregunta y mostrar varias opciones, ejemplo:</p-message>\n </div>\n\n <div>\n <span>En que año llegó cristobal colon a america?</span>\n <app-selector [config]=\"sampleConfig\"></app-selector>\n </div>\n\n <hr />\n\n <div>\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\n <input class=\"form-input\" type=\"text\" pInputText fullWidth formControlName=\"response\" placeholder=\"Respuesta Correcta...\" />\n <br />\n\n <input class=\"form-input\" type=\"\" pInputText fullWidth formControlName=\"hint\" placeholder=\"Escribe una pista para esta pregunta\" />\n\n <br />\n <input\n class=\"form-input\"\n type=\"text\"\n pInputText\n fullWidth\n formControlName=\"explanation\"\n placeholder=\"Excribe una explicación para la respuesta\" />\n\n <hr />\n <h6>Opciones</h6>\n\n <div class=\"form-group\" formArrayName=\"options\">\n @for (item of optionsForm.controls; track item; let i = $index) {\n <div\n style=\"display: flex; gap: 10px; align-items: center; justify-content: space-between; margin-bottom: 10px; flex-direction: column\"\n >\n <div>\n <input type=\"text\" pInputText fullWidth [formControlName]=\"i\" />\n <p-button (click)=\"deleteFormArrayByIndex('options', i)\" icon=\"pi pi-times\" severity=\"danger\"></p-button>\n </div>\n </div>\n }\n </div>\n\n <p-button (click)=\"pushControlToFormArray('options')\" label=\"Agregar Opción\" [text]=\"true\" severity=\"help\"></p-button>\n </form>\n\n <!-- <button nbButton (click)=\"isRendered = !isRendered\"> Renderizar </button> -->\n\n @if (isRendered) {\n <div>\n <!-- TODO: probably i need to pass some params -->\n <app-selector></app-selector>\n </div>\n }\n </div>\n\n <div>\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\" [rounded]=\"true\"></p-button>\n <p-button (click)=\"showCode()\" [disabled]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\n </div>\n </div>\n","import { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormBuilder, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nimport { ComponentBuilder } from '../../ComponentBuilder';\r\n\r\n@Component({\r\n selector: 'app-text-writer-buider',\r\n templateUrl: './text-writer-buider.component.html',\r\n styleUrls: ['./text-writer-buider.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, ButtonModule, InputTextModule],\r\n})\r\nexport class TextWriterBuiderComponent extends ComponentBuilder implements OnInit {\r\n constructor(\r\n protected override formBuilder: UntypedFormBuilder,\r\n // protected override toastrService: ToastService,\r\n protected override ref: DynamicDialogRef,\r\n ) {\r\n super(formBuilder, null);\r\n }\r\n\r\n override formGroup = this.formBuilder.group({ response: ['', Validators.required], hint: [], explanation: [] });\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<div>\r\n <div>\r\n <h5>Constructor de formulario con texto</h5>\r\n </div>\r\n\r\n <div>\r\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\r\n <input pInputText type=\"text\" nbInput fullWidth formControlName=\"response\" placeholder=\"Respuesta\" />\r\n\r\n <input pInputText class=\"form-input\" type=\"\" nbInput fullWidth formControlName=\"hint\"\r\n placeholder=\"Escribe una pista para esta pregunta\" />\r\n\r\n <input pInputText class=\"form-input\" type=\"text\" nbInput fullWidth formControlName=\"explanation\"\r\n placeholder=\"Excribe una explicación para la respuesta\" />\r\n </form>\r\n </div>\r\n\r\n <div>\r\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\"\r\n [rounded]=\"true\"></p-button>\r\n <p-button (click)=\"showCode()\" [disabled]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\"\r\n severity=\"secondary\"></p-button>\r\n </div>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\nimport { ComponentWithForm } from '../ComponentWithForm';\r\nimport { LessonComponentConfiguration, LessonComponentInterface } from '../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-text-writer',\r\n templateUrl: './text-writer.component.html',\r\n styleUrls: ['./text-writer.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, InputTextModule],\r\n})\r\nexport class TextWriterComponent extends ComponentWithForm implements OnInit, LessonComponentInterface {\r\n @Input() config: LessonComponentConfiguration;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n public size: number;\r\n // esta por decidir como va a funcionar los hits, explanation and hint.\r\n public hint: string;\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.size = this.getSize();\r\n }\r\n\r\n private getSize(): number {\r\n return this.config.settings.response.length < 20 ? this.config.settings.response.length : 20;\r\n }\r\n\r\n public evaluate() {\r\n let result;\r\n if (this.control.value == null) {\r\n result = null;\r\n } else {\r\n result = this.control.value.toLowerCase().trim() == this.config.settings.response.toLowerCase().trim();\r\n }\r\n\r\n if (result) {\r\n this.status = 'success';\r\n } else {\r\n this.status = 'danger';\r\n\r\n this.hint = this.config.settings.explanation;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public override validate() {\r\n if (this.control.invalid) {\r\n this.status = 'warning';\r\n this.hint = this.config.settings.hint;\r\n }\r\n return true;\r\n }\r\n}\r\n","<input [class]=\"this.status\" pInputText [formControl]=\"control\" fieldSize=\"small\" type=\"text\" placeholder=\"Respuesta\"\n [size]=\"size\" />\n\n<!-- [ngClass]=\"{ 'selected-radio': 'true']}\" -->","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';\n\n\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\n\nimport { ComponentBuilder } from '../../ComponentBuilder';\n\n@Component({\n selector: 'app-translation-switcher-builder',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, ButtonModule, InputTextModule],\n templateUrl: './translationSwitcherBuilder.component.html',\n styleUrl: './translationSwitcherBuilder.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TranslationSwitcherBuilderComponent extends ComponentBuilder implements OnInit {\n constructor(\n protected override formBuilder: FormBuilder,\n // protected override toastrService: ToastService,\n protected override ref: DynamicDialogRef,\n ) {\n super(formBuilder, null);\n }\n // Este componente reutiliza completamente el form del padre y todos los métodos\n\n ngOnInit(): void {}\n}\n","<div>\n <div>\n <h5>Constructor de translation switcher</h5>\n </div>\n\n <div>\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\n <input style=\"width: 100%\" pInputText type=\"text\" nbInput fullWidth formControlName=\"text\" placeholder=\"Texto para visualizar\" />\n\n <br /><br />\n\n <input\n style=\"width: 100%\"\n pInputText\n class=\"form-input\"\n type=\"\"\n nbInput\n fullWidth\n formControlName=\"response\"\n placeholder=\"Traducción al hacer clic\" />\n </form>\n </div>\n <br />\n <div>\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\" [rounded]=\"true\"></p-button>\n <p-button (click)=\"showCode()\" [disabled]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\n\nimport { ButtonModule } from 'primeng/button';\n\nimport { SpeakerCompConfiguration } from '../lessons.clases';\n\n@Component({\n selector: 'app-translation-switcher',\n standalone: true,\n imports: [ButtonModule],\n templateUrl: './translationSwitcher.component.html',\n styleUrl: './translationSwitcher.component.css',\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class TranslationSwitcherComponent implements OnInit {\n @Input() config: SpeakerCompConfiguration;\n\n public visibleText = '';\n ngOnInit(): void {\n this.visibleText = this.config.settings.text;\n console.log('config', this.config);\n }\n\n public switchTranslation() {\n if (this.visibleText === this.config.settings.text) {\n this.visibleText = this.config.settings.response;\n } else {\n this.visibleText = this.config.settings.text;\n }\n }\n}\n","<button\n pButton\n style=\"padding: 0px 2px\"\n severity=\"help\"\n size=\"small\"\n (click)=\"switchTranslation()\"\n [label]=\"visibleText\"\n [text]=\"true\"\n [rounded]=\"true\"></button>\n","import { Component, signal } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ComponentBuilder } from '../../ComponentBuilder';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { NgxTtsComponent, TTSGenerated } from '@dataclouder/ngx-tts';\r\nimport { LessonComponentConfiguration, LessonCompSettings } from '../../lessons.clases';\r\n\r\n@Component({\r\n selector: 'app-speaker-builder',\r\n templateUrl: './speaker-builder.component.html',\r\n styleUrls: ['./speaker-builder.component.scss'],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, InputTextModule, ButtonModule, DropdownModule, NgxTtsComponent],\r\n})\r\nexport class SpeakerBuilderComponent extends ComponentBuilder {\r\n public tts = signal<TTSGenerated | undefined>(undefined);\r\n\r\n public handleTtsGenerated(event: TTSGenerated): void {\r\n console.log('TTS generated:', event);\r\n this.tts.set(event);\r\n }\r\n\r\n // Update return type and add settings object\r\n protected override getCode(): LessonComponentConfiguration<LessonCompSettings & { voice: string }> {\r\n const ttsValue = this.tts();\r\n if (!ttsValue) {\r\n // Handle the case where tts is undefined, maybe throw an error or return a default config\r\n console.error('TTS data is not generated yet.');\r\n // Depending on requirements, you might return a default/empty config or throw\r\n return { component: this.questionType, inputs: {} }; // Example: return empty inputs\r\n }\r\n const code: LessonComponentConfiguration<LessonCompSettings & { voice: string }> = {\r\n component: this.questionType,\r\n inputs: { tts: ttsValue },\r\n };\r\n return code;\r\n }\r\n}\r\n","<div>\r\n <div>\r\n <h5>Constructor de Speaker</h5>\r\n </div>\r\n\r\n <lib-ngx-tts (ttsGenerated)=\"handleTtsGenerated($event)\"></lib-ngx-tts>\r\n\r\n <br />\r\n <div>\r\n <p-button (click)=\"copyToClipboard()\" [disabled]=\"formGroup.invalid\" label=\"Copia Código\" [rounded]=\"true\"></p-button>\r\n <p-button (click)=\"showCode()\" [disabled]=\"!tts()\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\r\n </div>\r\n</div>\r\n","// ❌ can use this until i copy services to this lib\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SpeakerCompConfiguration } from '../lessons.clases';\r\nimport { TTSGenerated } from '@dataclouder/ngx-tts';\r\n\r\n// import { CONVERSATION_AI_TOKEN } from '@dataclouder/ngx-agent-cards';\r\n@Component({\r\n selector: 'app-speaker',\r\n templateUrl: './speaker.component.html',\r\n styleUrls: ['./speaker.component.scss'],\r\n standalone: true,\r\n imports: [ButtonModule],\r\n})\r\nexport class SpeakerComponent implements OnInit {\r\n ngOnInit(): void {\r\n // throw new Error('Method not implemented.');\r\n }\r\n @Input() config: SpeakerCompConfiguration;\r\n @Input() tts: TTSGenerated | undefined;\r\n\r\n // voiceOptions = VoiceOptions;\r\n // constructor(private speachService: SpeechService, private audioService: AudioService) {}\r\n // ngOnInit(): void {}\r\n public speach() {\r\n console.log('should speech but will do in next version');\r\n // if (this.config.audio) {\r\n // this.audioService.playAudio(this.config.audio.url);\r\n // } else {\r\n // this.speachService.speach(this.config.settings.text);\r\n // }\r\n }\r\n}\r\n","<button\r\n pButton\r\n style=\"padding: 0px 2px\"\r\n severity=\"help\"\r\n size=\"small\"\r\n (click)=\"speach()\"\r\n [label]=\"config?.settings?.text\"\r\n [text]=\"true\"\r\n [rounded]=\"true\"></button>\r\n","import { UntypedFormControl } from '@angular/forms';\nimport { InjectionToken, Type } from '@angular/core';\nimport { Provider } from '@angular/core';\n\nimport { SelectorBuilderComponent } from './selector/selector-builder/selector-builder.component';\nimport { SelectorComponent } from './selector/selector.component';\n\nimport { TextWriterBuiderComponent } from './text-writer/text-writer-buider/text-writer-buider.component';\nimport { TextWriterComponent } from './text-writer/text-writer.component';\nimport { TranslationSwitcherBuilderComponent } from './translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component';\nimport { TranslationSwitcherComponent } from './translationSwitcher/translationSwitcher.component';\nimport { SpeakerBuilderComponent } from './speaker/speaker-builder/speaker-builder.component';\nimport { SpeakerComponent } from './speaker/speaker.component';\n\nexport type LessonComponentsType = 'selector' | 'speaker' | 'text-writer' | 'verb-summary' | 'word-summary';\n\nexport enum LessonComponentEnum {\n Selector = 'selector',\n Speaker = 'speaker',\n TextWriter = 'textWriter',\n VerbSummary = 'verbSummary',\n WordSummary = 'wordSummary',\n TranslationSwitcher = 'translationSwitcher',\n}\n\nexport const LessonComponentBuilders = {\n [LessonComponentEnum.Selector]: SelectorBuilderComponent,\n [LessonComponentEnum.Speaker]: SpeakerBuilderComponent,\n [LessonComponentEnum.TextWriter]: TextWriterBuiderComponent,\n // [LessonComponentEnum.VerbSummary]: VerbSummaryBuilderComponent,\n // [LessonComponentEnum.WordSummary]: WordSummaryBuilderComponent,\n [LessonComponentEnum.TranslationSwitcher]: TranslationSwitcherBuilderComponent,\n};\n\nexport const LessonComponents = {\n [LessonComponentEnum.Selector]: SelectorComponent,\n [LessonComponentEnum.Speaker]: SpeakerComponent,\n [LessonComponentEnum.TextWriter]: TextWriterComponent,\n // [LessonComponentEnum.VerbSummary]: VerbSummaryComponent,\n // [LessonComponentEnum.WordSummary]: WordSummaryComponent,\n [LessonComponentEnum.TranslationSwitcher]: TranslationSwitcherComponent,\n};\n\nexport function getLessonComponentClass(type: LessonComponentsType) {\n return LessonComponents[type];\n}\n\nexport interface LessonCompSettings {\n response?: string;\n responses?: string; // en caso de que haya multiples respuestas\n options?: string[]; // optiones para visualizar\n text?: string;\n hint?: string;\n explanation?: string;\n}\n// Make LessonComponentConfiguration generic for settings\nexport interface LessonComponentConfiguration<T extends LessonCompSettings = LessonCompSettings> {\n id?: string;\n component: LessonComponentEnum;\n settings?: T; // for component that need and standards\n inputs?: Record<string, any>; // for whatever component.\n}\n\nexport interface StorageFile {\n bucket: string;\n url: string;\n path: string; // path where the file is in the storage\n}\n\nexport interface AudioStorage extends StorageFile {\n text?: string;\n voiceType?: string;\n}\n// Make SpeakerCompConfiguration extend the generic base interface\nexport interface SpeakerCompConfiguration extends LessonComponentConfiguration<LessonCompSettings & { voice: string }> {\n audio: AudioStorage;\n // settings is now inherited correctly via the generic type argument\n}\n\nexport interface LessonComponentInterface {\n // Update config to use the generic form\n config: LessonComponentConfiguration<any>;\n\n control?: UntypedFormControl;\n\n validate?(): boolean | null;\n evaluate?(): boolean | null;\n}\n// nuevs\n\n// import { UntypedFormControl } from '@angular/forms';\n\n// import { LessonComponents } from '../models/lessons.class';\n\nexport const LESSONS_TOKEN = new InjectionToken<LessonsAbstractService>('Lessons Service');\n\n// Removed duplicate LessonComponentEnum definition\n// Removed duplicate StorageFile definition\n\nexport interface ImgStorageData extends StorageFile {\n fullPath: string; // path + name\n resolutions: any;\n resolution: string;\n}\n\nexport type LessonImage = ImgStorageData & { type: string };\n\n// Removed duplicate LessonCompSettings definition\n// Removed duplicate LessonComponentConfiguration definition\n\n// New way of render components\nexport interface DynamicContentComponent {\n id: string; // duplicated id\n component: LessonComponentEnum; // name of the component\n inputs: Record<string, any>;\n config: LessonComponentConfiguration<any>;\n}\n\ntype StorageType = StorageFile & { type: string };\n\nexport interface Media {\n audios?: StorageType[];\n images?: StorageType[];\n}\n\nexport interface ILessonExtra {\n notionPageId?: string;\n}\n\nexport interface ILesson {\n // me faltan los comentarios\n _id: any;\n id: string;\n title: string;\n description: string;\n isPublished: boolean;\n // isPrivate: boolean;\n textCoded: string;\n authorId: string;\n authorEmail: string;\n tags: string[];\n media: Media;\n // Update components array to use generic form\n components: Array<LessonComponentConfiguration<any>>;\n dynamicComponents: Record<string, DynamicContentComponent>;\n baseLang: string;\n targetLang: string;\n\n generatedByAI: boolean;\n prompt: string;\n level: number;\n extras: ILessonExtra;\n}\n\nexport interface ILessonWithTaken extends ILesson {\n // FIXME: moved to lessons lib\n\n taken: any;\n}\n\n// Think on someway of getting the toast alerts service\n\nexport abstract class LessonsAbstractService {\n abstract getLessons(paginator?: any): Promise<any>;\n abstract getLesson(id: string): Promise<any>;\n abstract postLesson(lesson: ILesson): Promise<any>;\n abstract updateLesson(lesson: ILesson): Promise<any>;\n abstract deleteLesson(id: string): Promise<any>;\n abstract generateLesson(lesson: ILesson): Promise<any>;\n abstract postGenerateByAI(id: string): Promise<any>;\n abstract extractTextFromHtml(html: string): string;\n abstract postImproveMDWithAI(lessonId: string, markdownText: string): Promise<any>; // Added for AI Markdown improvement\n}\n\n// my-service.provider.ts\nexport function provideLessonsService(serviceImplementation: Type<LessonsAbstractService>): Provider[] {\n return [\n {\n provide: LESSONS_TOKEN,\n useExisting: serviceImplementation,\n },\n ];\n}\n\n// export type LessonComponentsType = 'selector' | 'speaker' | 'text-writer' | 'verb-summary' | 'word-summary';\n\n// export function getLessonComponentClass(type: LessonComponentsType) {\n// // return LessonComponents[type];\n// return null;\n// }\n\n// Removed duplicate LessonComponentConfiguration definition\n// Removed duplicate StorageFile definition\n// Removed duplicate AudioStorage definition\n// Removed duplicate SpeakerCompConfiguration definition\n// Removed duplicate LessonComponentInterface definition\n\n// export const LessonComponents = {\n// [LessonComponentEnum.Selector]: 1,\n// [LessonComponentEnum.Speaker]: 2,\n// [LessonComponentEnum.TextWriter]: 3,\n// [LessonComponentEnum.VerbSummary]: 4,\n// [LessonComponentEnum.WordSummary]: 5,\n// [LessonComponentEnum.TranslationSwitcher]: 6,\n// }\n\nexport const LangCodeDescription = {\n es: 'Spanish',\n en: 'English',\n it: 'Italian',\n pt: 'Portuguese',\n fr: 'French',\n};\n\nexport const LangCodeDescriptionEs = {\n es: 'Español',\n en: 'Inglés',\n it: 'Italiano',\n pt: 'Portugués',\n fr: 'Frances',\n};\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { LangCodeDescription, LangCodeDescriptionEs } from '../components/lesson-mini-components/components/lessons.clases';\n\n@Pipe({\n name: 'langDesc',\n standalone: true,\n})\nexport class LangDescTranslationPipe implements PipeTransform {\n transform(value: string, lang: string): boolean {\n if (lang === 'es') {\n return LangCodeDescriptionEs[value];\n } else {\n return LangCodeDescription[value];\n }\n }\n}\n\n@Pipe({\n name: 'flagEmoji',\n standalone: true,\n})\nexport class FlagLanguagePipe implements PipeTransform {\n transform(lang: string): string {\n if (lang === 'en') {\n return '🇺🇸';\n } else if (lang === 'es') {\n return '🇲🇽';\n } else if (lang === 'fr') {\n return '🇫🇷';\n } else if (lang === 'it') {\n return '🇮🇹';\n } else if (lang === 'pt') {\n return '🇧🇷';\n } else {\n return '';\n }\n }\n}\n","// NOTE: what to do? IAgent Deponds on ngx-agent-cards but lessons don't\n// import { IAgentCard } from '@dataclouder/ngx-agent-cards';\n\nimport { InjectionToken, Provider, Type } from '@angular/core';\n\nexport type NotionDBResponse = {\n success: boolean;\n databases: { id: string; title: string; url: string; created_time: string }[];\n error?: string;\n count: number;\n};\n\nexport type NotionPageResponse = {\n success: boolean;\n pages: { id: string; title: string; url: string; created_time: string }[];\n error?: string;\n count: number;\n};\n\nexport const NOTION_SERVICE_TOKEN = new InjectionToken<NotionAbstractService>('notion.service');\n\nexport abstract class NotionAbstractService {\n abstract getDBAvailible(): Promise<NotionDBResponse>;\n abstract getPagesAvailable(): Promise<NotionPageResponse>;\n abstract createNotionPage(card: any): Promise<{ success: boolean; error: string; page: any }>;\n abstract getPageInSpecificFormat(pageId: string, format: NotionExportType): Promise<any>;\n}\n\nexport function provideNotionService(serviceImplementation: Type<NotionAbstractService>): Provider[] {\n return [\n {\n provide: NOTION_SERVICE_TOKEN,\n useExisting: serviceImplementation,\n },\n ];\n}\n\nexport enum NotionExportType {\n HTML = 'html',\n MARKDOWN = 'markdown',\n PLAIN_TEXT = 'plain_text',\n SIMPLE_BLOCKS = 'simple_blocks',\n}\n","import { ISimpleAgent } from '@dataclouder/ngx-agent-cards';\n\nconst MarkdownWriterSkill = `\nYou are an Expert Markdown Writer with the following qualities:\nYou are a world-class Markdown formatting specialist who excels at organizing information in a visually appealing and highly accessible manner. Your writing combines technical precision with creative presentation to engage readers of all backgrounds.\nYour Core Skills 📝\n\nYou transform complex information into beautifully structured Markdown documents\nYou strategically use headings, lists, and formatting to create clear visual hierarchies\nYou incorporate helpful emojis to enhance readability and engagement\nYou write in a clear, concise style that's accessible to general audiences\n\nYour Process Approach 🔄\n\nYou always begin with a logical document structure before adding content\nYou organize information into clearly defined sections with descriptive headings\nYou balance visual elements with textual content for optimal readability\nYou maintain consistent formatting patterns throughout documents\n\nYour Writing Style ✨\n\nYou use simple, direct language that's easy for everyone to understand\nYou explain technical concepts using everyday examples and analogies\nYou create a friendly, conversational tone while maintaining professionalism\nYou break down complex ideas into manageable segments\n\nYour Special Touches 🎯\n\nYou know exactly when and where to add emojis for maximum impact\nYou create custom tables to present comparative information effectively\nYou use blockquotes to highlight important takeaways\nYou incorporate visual dividers to separate major content sections\n\nWhen responding to requests, you'll first understand the subject matter, then organize it into a logical structure with clear headings, appropriate formatting elements, and helpful visual enhancements. Your goal is always to create content that's not only informative but also visually engaging and accessible to all readers.\n`;\n\nconst EnglishLessonSkill = `\n\nYou are also an English lesson professor, you write lessons for Spanish learners.\nexplain the best you can will all your experience teaching. \n\nYou can infer the level of the lesson from the content or user request, so can increase difficulty\n\nFor Basic Level: generate an English lesson for Spanish learners at a basic level (A1-A2).\n\nInclude:\n\n- Simple dialogues or short texts.\n- Key vocabulary with simple definitions or Spanish translations.\n- Basic grammar points explained simply (e.g., \"to be\" verb, simple present).\n- Practice exercises (e.g., fill-in-the-blanks, simple questions).\n\nFor Intermediate Level: generate an English lesson for Spanish learners at a medium level (B1-B2).\n\nInclude:\n\n- Texts or dialogues of moderate length and complexity.\n- New vocabulary and common phrasal verbs with context.\n- Explanation and practice of intermediate grammar points (e.g., past simple vs. present perfect, conditionals).\n- Exercises that require more detailed responses or understanding.\n- The content should be engaging and cover topics relevant to daily life, work, or hobbies.\n\nFor Advanced Level: generate an English lesson for Spanish learners at an advanced level (C1-C2).\n\nInclude:\n\n- Challenging texts or discussions.\n- Advanced vocabulary, idioms, and nuanced expressions.\n- Exploration of complex grammar or stylistic points.\n- Exercises that encourage critical thinking, debate, or detailed writing.\n- The content should be stimulating and cover a wide range of topics, including academic or professional contexts.\n\n`;\n\nconst UserRequirements = `\n User also can provide additional instructions or requirements for the lesson or current lesson to improve it.\n`;\n\nexport const BasicAgentCard: ISimpleAgent = {\n systemPrompt: `\n ${MarkdownWriterSkill}\n ${EnglishLessonSkill}\n ${UserRequirements}\n \n`,\n model: { id: 'gemini-2.5-flash-preview-04-17', provider: 'google' },\n};\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { PopoverModule } from 'primeng/popover';\r\n\r\nimport { SpeedDialModule } from 'primeng/speeddial';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { CardModule } from 'primeng/card';\r\n\r\nimport { ILesson, ILessonWithTaken } from '../../lesson-mini-components/components/lessons.clases';\r\nimport { OnActionEvent } from '@dataclouder/ngx-core';\r\n\r\nenum EventCard {\r\n Edit = 'edit',\r\n Delete = 'delete',\r\n Select = 'select',\r\n Qr = 'qr',\r\n}\r\n@Component({\r\n selector: 'dc-lesson-card',\r\n templateUrl: './dc-lesson-card.component.html',\r\n styleUrls: ['./dc-lesson-card.component.scss'],\r\n standalone: true,\r\n imports: [DatePipe, ButtonModule, PopoverModule, SpeedDialModule, CardModule],\r\n})\r\nexport class DcLessonCardComponent implements OnInit {\r\n @Input() lesson: ILessonWithTaken | ILesson | any;\r\n @Input() showOptions: boolean = true;\r\n\r\n @Output() onAction: EventEmitter<OnActionEvent> = new EventEmitter();\r\n\r\n public coverUrl: string = 'assets/background/default-background.webp';\r\n public eventType = EventCard;\r\n\r\n public items: MenuItem[] = [\r\n {\r\n label: 'Editar',\r\n icon: 'pi pi-pencil',\r\n command: () => {\r\n this.eventCard(EventCard.Edit);\r\n },\r\n },\r\n {\r\n label: 'Eliminar',\r\n icon: 'pi pi-trash',\r\n command: () => {\r\n this.eventCard(EventCard.Delete);\r\n },\r\n },\r\n {\r\n label: 'Tomar lección',\r\n icon: 'pi pi-play',\r\n command: () => {\r\n this.eventCard(EventCard.Select);\r\n },\r\n },\r\n ];\r\n\r\n ngOnInit() {\r\n if (this.lesson?.media?.images![0]?.url) {\r\n this.coverUrl = this.lesson.media.images[0].url;\r\n }\r\n }\r\n\r\n public eventCard(eventType: EventCard) {\r\n switch (eventType) {\r\n case EventCard.Edit:\r\n this.onAction.emit({ action: 'edit', item: this.lesson });\r\n break;\r\n case EventCard.Delete:\r\n this.onAction.emit({ action: 'delete', item: this.lesson });\r\n break;\r\n case EventCard.Select:\r\n this.onAction.emit({ action: 'select', item: this.lesson });\r\n break;\r\n case EventCard.Qr:\r\n this.onAction.emit({ action: 'qr', item: this.lesson });\r\n break;\r\n }\r\n }\r\n}\r\n","<div class=\"card-container\">\n @if(showOptions){\n <p-speeddial\n class=\"dial-button\"\n [model]=\"items\"\n [radius]=\"70\"\n type=\"quarter-circle\"\n direction=\"down-left\"\n [buttonProps]=\"{ severity: 'primary', rounded: true, outlined: true, raised: true }\" />\n }\n <p-card>\n <div class=\"lesson-card\">\n <div class=\"photo\">\n <img [src]=\"coverUrl\" alt=\"\" />\n </div>\n\n <span class=\"date\">{{ lesson.createdDate | date : 'dd/MM/yyyy' }}</span>\n\n <div class=\"description\">\n <h1>{{ lesson.title }}</h1>\n <p>{{ lesson.description }}</p>\n <div class=\"card-footer\">\n <div class=\"status-tags\">\n <span class=\"level-tag\">Nivel {{ lesson.level }}</span>\n @if (lesson.taken?.status == 'passed') {\n <span class=\"status-tag success\">Tomada</span>\n }\n @if (lesson.taken?.status == 'failed') {\n <span class=\"status-tag danger\">Fallida</span>\n }\n </div>\n\n <div class=\"actions\">\n <p-button label=\"Tomar lección\" (onClick)=\"eventCard(eventType.Select)\" severity=\"primary\"> </p-button>\n </div>\n </div>\n </div>\n </div>\n </p-card>\n </div>\n","import { ChangeDetectorRef, Component, Inject, Input, OnInit, Type, ViewChildren, QueryList, OnDestroy } from '@angular/core';\n\nimport { PaginatorModule } from 'primeng/paginator';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\n\nimport { Subscription } from 'rxjs';\nimport {\n DCFilterBarComponent,\n ICustomFilter,\n OnActionEvent,\n PaginationBase,\n PColumn,\n QuickTableComponent,\n TOAST_ALERTS_TOKEN,\n ToastAlertsAbstractService,\n} from '@dataclouder/ngx-core';\n\nimport { LESSONS_TOKEN, LessonsAbstractService } from '../../lesson-mini-components/components/lessons.clases';\nimport { DcLessonCardComponent } from '../dc-lesson-card/dc-lesson-card.component';\nimport { MenuItem } from 'node_modules/primeng/api/menuitem';\n\nconst tableViewColumns: PColumn[] = [\n { field: 'media.images[0].url', header: 'Image', type: 'image' },\n { field: 'title', header: 'Título' },\n { field: 'description', header: 'Descripción' },\n];\n\nconst TableViewActions: MenuItem[] = [\n { title: 'select', label: 'Select', icon: 'pi pi-check', severity: 'primary' },\n { title: 'qr', label: 'QR', icon: 'pi pi-qrcode', severity: 'info' },\n { title: 'edit', label: 'Edit', icon: 'pi pi-pencil', severity: 'info' },\n { title: 'delete', label: 'Delete', icon: 'pi pi-trash', severity: 'danger' },\n];\n\nconst returnProperties: Record<string, 0 | 1> = { id: 1, title: 1, assets: 1 };\n\n@Component({\n selector: 'dc-lesson-list',\n templateUrl: './dc-lesson-list.component.html',\n styleUrls: ['./dc-lesson-list.component.scss'],\n standalone: true,\n imports: [RouterModule, DCFilterBarComponent, PaginatorModule, NgComponentOutlet, QuickTableComponent],\n})\nexport class DCLessonListComponent extends PaginationBase implements OnInit, OnDestroy {\n @Input() public showOptions: boolean = true;\n @Input() public customCardComponent?: Type<DcLessonCardComponent>;\n @Input() public customFilters: ICustomFilter[] = [];\n @Input() public viewType: 'table' | 'cards' = 'cards';\n\n public override columns: PColumn[] = tableViewColumns;\n\n @ViewChildren('outlet') outlets!: QueryList<NgComponentOutlet>;\n\n public cardComponent: Type<DcLessonCardComponent> = null;\n public cardEventSubs: Subscription[] = [];\n\n public lessons: any[] = [];\n public isLoadingLessons = false;\n\n constructor(\n private cdr: ChangeDetectorRef,\n public override router: Router,\n public override route: ActivatedRoute,\n @Inject(LESSONS_TOKEN) private lessonsService: LessonsAbstractService,\n @Inject(TOAST_ALERTS_TOKEN) private toastrService: ToastAlertsAbstractService,\n ) {\n super(route, router);\n }\n\n ngOnInit(): void {\n this.filterConfig.returnProps = returnProperties;\n this.cardComponent = this.customCardComponent || DcLessonCardComponent;\n\n this.getPaginatedLessons(this.filterConfig);\n }\n\n public subscribeDinamicInstantToEvents() {\n this.clearcardEventSubs();\n this.subscribeToCardEvents();\n }\n\n private subscribeToCardEvents() {\n this.outlets.forEach((outlet) => {\n const instance: DcLessonCardComponent = outlet.componentInstance;\n\n this.cardEventSubs.push(\n instance.onAction.subscribe((lesson: any) => {\n this.doOrEmitAction(lesson);\n }),\n );\n });\n }\n\n private clearcardEventSubs() {\n this.cardEventSubs.forEach((sub) => sub.unsubscribe());\n this.cardEventSubs = [];\n }\n\n ngOnDestroy() {\n this.clearcardEventSubs();\n }\n\n public async getPaginatedLessons(paginator: any) {\n try {\n this.lessons = null;\n this.isLoadingLessons = true;\n this.cdr.detectChanges();\n const lessons = await this.lessonsService.getLessons(paginator);\n\n this.lessons = lessons['rows'] || lessons;\n this.totalRecords = lessons['count'] || this.lessons.length;\n\n console.log('lessons', lessons);\n\n setTimeout(() => {\n this.subscribeDinamicInstantToEvents();\n });\n } finally {\n this.isLoadingLessons = false;\n this.cdr.detectChanges();\n }\n }\n\n public search(searchText: string) {\n this.filterConfig['text'] = searchText;\n this.getPaginatedLessons(this.filterConfig);\n }\n\n private removeLesson(lesson: any) {\n const response = confirm('¿Estás seguro de querer eliminar esta lección?');\n if (response) {\n this.lessonsService.deleteLesson(lesson._id);\n this.lessons = this.lessons.filter((l) => l._id !== lesson._id);\n this.cdr.detectChanges();\n this.toastrService.success({ title: 'Adios a la lección', subtitle: 'La lección ha sido eliminada correctamente' });\n }\n }\n\n public newLesson() {\n this.onAction.emit({ action: 'new' });\n }\n\n public applyFilterBarEvent(filterEvent: OnActionEvent) {\n if (filterEvent.action == 'changeView') {\n this.viewType = this.viewType === 'table' ? 'cards' : 'table';\n return;\n } else {\n console.log('filterChanged in dc-lesson-list', filterEvent);\n this.filterConfig = filterEvent.item;\n this.filterConfig.returnProps = returnProperties;\n\n this.getPaginatedLessons(this.filterConfig);\n }\n }\n\n protected override loadData(): Promise<void> {\n return this.getPaginatedLessons(this.filterConfig);\n }\n\n public doOrEmitAction(actionEvent: OnActionEvent) {\n if (actionEvent.action === 'delete') {\n this.removeLesson(actionEvent.item);\n } else {\n this.onAction.emit(actionEvent);\n }\n }\n}\n","<dc-filter-bar [customFilters]=\"customFilters\" (onFilterAction)=\"applyFilterBarEvent($event)\" (onNew)=\"newLesson()\"></dc-filter-bar>\n\n@if(viewType === 'table') {\n<app-quick-table [columns]=\"columns\" [tableData]=\"lessons\" (onAction)=\"doOrEmitAction($event)\"></app-quick-table>\n} @else {\n<div class=\"lesson-list-container\">\n @if (!isLoadingLessons && lessons?.length > 0) { @for (lesson of lessons; track lesson._id) {\n <ng-container\n #outlet=\"ngComponentOutlet\"\n [ngComponentOutlet]=\"cardComponent\"\n [ngComponentOutletInputs]=\"{\n lesson: lesson,\n showOptions: showOptions\n }\">\n </ng-container>\n } } @else {\n <p>No se encontraron lecciones disponibles</p>\n }\n</div>\n}\n\n<p-paginator\n currentPageReportTemplate=\"{{ totalRecords }} lecciones\"\n [showCurrentPageReport]=\"true\"\n (onPageChange)=\"onPageChange($event)\"\n [first]=\"paginatorFirst\"\n [rows]=\"paginatorRows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"[10, 20, 30]\">\n</p-paginator>\n","import { Component } from '@angular/core';\n\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'dc-lesson-form',\n templateUrl: './lesson-form.component.html',\n styleUrls: ['./lesson-form.component.scss'],\n standalone: true,\n imports: [ReactiveFormsModule],\n})\nexport class DCLessonFormComponent {\n // Form implementation will go here\n}\n","<div class=\"lesson-form-container\">\n <h2>Lesson Form</h2>\n <p>Esto es dentro del componente de la leccion</p>\n <!-- Form implementation will go here -->\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport {\n IAgentCard,\n IMiniAgentCard,\n TextEngines,\n ConversationType,\n ISimpleAgent,\n IConversationSettings,\n ChatMessage,\n ChatRole,\n USER_DATA_EXCHANGE,\n} from '@dataclouder/ngx-agent-cards';\nimport { ILesson, LangCodeDescription, LESSONS_TOKEN, LessonsAbstractService } from '../components/lesson-mini-components/components/lessons.clases';\n\n// Re-define or import constants if they are not exported from the component file\nconst DEFAULT_LESSON_AGENT_CARD: IAgentCard = {\n conversationSettings: {\n conversationType: ConversationType.General,\n textEngine: TextEngines.SimpleText,\n autoStart: true,\n },\n characterCard: {\n data: {\n name: 'Lesson Master',\n description: 'You are an AI developed by Polilan Company, you are a lesson master, you are going to help the user to learn english',\n tags: ['lesson', 'master', 'ai'],\n post_history_instructions:\n 'Your reply should be always short, 1 or 2 paragraphs at most, and to the point, and you should ask friendly questions all the time',\n },\n },\n model: { provider: 'google' },\n};\n\nconst AppRolePlaySkill = `\nYou are an app role play assistant from Polilan App. The user is reading lessons through this app interface. They will now talk with you, and you need to evaluate their understanding of the lesson.\nAsk friendly questions throughout the conversation and help them learn English.\n`;\n\nconst EngagementSkill = `\nYou are an engagement assistant, start by greeting the user, asking something about the lesson, and then continue the conversation. always ask one or two friendly questions. \nthat makes sense for the lesson. \n`;\n\nconst BasicAgentCard: ISimpleAgent = {\n systemPrompt: 'You are a helpful assistant.',\n model: { provider: 'openai', id: 'gpt-4o' },\n};\n\nfunction getDefaultLessonEvaluatorAgentCard(lessonText: string): IMiniAgentCard {\n return {\n expectedResponseType: `interface EvalResult {\n score: number; // Score of the user's response 0 to 3\n feedback: string; // Feedback of the user's understanding of the conversation\n }`,\n messages: [],\n model: { id: 'gpt-4o-mini', provider: 'openai' },\n sources: [lessonText],\n task: `User is reading a taking a lesson, now their are having a conversation,\n you have to evaluate the current conversation, and give a feedback of the user understanding of the lesson,\n this is the lesson: ${lessonText}`,\n };\n}\n\n@Injectable({\n providedIn: 'root', // Or provide appropriately if it's library-specific\n})\nexport class LessonAIService {\n private readonly lessonService = inject<LessonsAbstractService>(LESSONS_TOKEN);\n // TODO: Inject the application-level UserService\n private readonly userService = inject(USER_DATA_EXCHANGE);\n\n /**\n * Builds the scenario prompt string based on lesson content and user info.\n * @param lessonText The extracted text content of the lesson.\n * @param userInformationPrompt The formatted string containing user details.\n * @returns The complete scenario prompt string.\n */\n private _buildScenarioPrompt(lessonText: string, userInformationPrompt: string): string {\n return `\n${AppRolePlaySkill}\n<Lesson Text>\n${lessonText}\n${EngagementSkill}\n<User Information>\n${userInformationPrompt}`;\n }\n\n /**\n * Generates the necessary agent cards for a lesson chat session.\n * @param lesson The lesson data.\n * @returns An object containing the master agent card and the evaluator agent card.\n */\n async generateAgentCards(lesson: ILesson): Promise<{ masterAgent: IAgentCard; evaluatorAgent: IMiniAgentCard } | null> {\n const lessonText = this.lessonService.extractTextFromHtml(lesson.textCoded);\n\n const userInformationPrompt = this.userService.getUserDataInformation();\n\n const scenario = this._buildScenarioPrompt(lessonText, userInformationPrompt);\n\n // Create a deep copy of the default card to avoid modifying the constant\n const masterAgent: IAgentCard = JSON.parse(JSON.stringify(DEFAULT_LESSON_AGENT_CARD));\n\n masterAgent.characterCard.data.scenario = scenario;\n masterAgent.characterCard.data.post_history_instructions += `\\n${userInformationPrompt}`;\n\n const evaluatorAgent = getDefaultLessonEvaluatorAgentCard(lessonText);\n\n return { masterAgent, evaluatorAgent };\n }\n\n /**\n * Generates conversation settings for a lesson, using the lesson scenario as the initial prompt.\n * @param lesson The lesson data.\n * @returns An IConversationSettings object configured for the lesson scenario.\n */\n async generateConversationSettingsForLesson(lesson: ILesson): Promise<IConversationSettings | null> {\n // TODO: Consolidate user fetching logic if possible, or ensure consistency\n const user = {\n personalData: { firstname: 'Test', lastname: 'User' },\n settings: { targetLanguage: 'en', baseLanguage: 'es' },\n languageProgress: { en: { level: '1' } },\n } as any; // Replace 'any' with your actual User type/interface\n\n if (!user) {\n console.error('User data not available to generate conversation settings.');\n return null;\n }\n\n const lessonText = this.lessonService.extractTextFromHtml(lesson.textCoded);\n const userInformationPrompt = this.userService.getUserDataInformation();\n\n const scenario = this._buildScenarioPrompt(lessonText, userInformationPrompt);\n\n const initialMessage: ChatMessage = {\n role: ChatRole.System,\n content: scenario,\n };\n\n // Use defaults similar to DEFAULT_LESSON_AGENT_CARD but adjust for prompt-based start\n const conversationSettings: IConversationSettings = {\n conversationType: ConversationType.General,\n textEngine: TextEngines.SimpleText,\n autoStart: true,\n messages: [initialMessage],\n model: { provider: 'google' },\n };\n\n return conversationSettings;\n }\n}\n","import { Component, ComponentRef, ElementRef, Renderer2, ViewChild, ViewContainerRef, computed, effect, inject, input, signal } from '@angular/core'; // Added signal imports\nimport { FormGroup, FormControl, Validators } from '@angular/forms'; // Use typed forms\nimport { KeyValuePipe } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { LessonAIService } from '../../../services/lesson-ai.service'; // Import the new service\n\nimport {\n getLessonComponentClass,\n ILesson,\n LessonComponentConfiguration,\n LessonComponentsType,\n LESSONS_TOKEN,\n LessonsAbstractService,\n} from '../../lesson-mini-components/components/lessons.clases';\n\nimport { TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } from '@dataclouder/ngx-core';\nimport { LessonComponentInterface } from '../../lesson-mini-components/components/lessons.clases';\nimport { DCChatComponent, IAgentCard, IConversationSettings, IMiniAgentCard } from '@dataclouder/ngx-agent-cards';\n\nimport { DrawerModule } from 'primeng/drawer';\n\n@Component({\n selector: 'dc-lesson-renderer',\n templateUrl: './dc-lesson-renderer.component.html',\n styleUrls: ['./dc-lesson-renderer.component.scss'],\n standalone: true,\n imports: [KeyValuePipe, ButtonModule, DCChatComponent, DrawerModule],\n})\nexport class DCLessonRendererComponent {\n // --- Signal Inputs ---\n lessonInput = input<ILesson>(); // Input signal for lesson object\n lessonIdInput = input<string>(); // Input signal for lesson ID\n test = input<boolean>(false);\n\n // --- View Childs ---\n @ViewChild('dynamicLesson', { static: true }) dynamicLesson: ElementRef<HTMLElement>;\n\n // --- Injected Services (using inject function) ---\n private readonly renderer = inject(Renderer2);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly toastrService = inject<ToastAlertsAbstractService>(TOAST_ALERTS_TOKEN);\n private readonly lessonService = inject<LessonsAbstractService>(LESSONS_TOKEN);\n private readonly lessonAIService = inject(LessonAIService); // Inject the new service\n\n // --- State Signals ---\n lesson = signal<ILesson | undefined>(undefined); // Internal lesson state signal\n chatVisible = signal(false); // Signal for chat visibility\n agentMasterLesson = signal<IAgentCard | undefined>(undefined); // Signal for agent card\n evaluatorAgentCard = signal<IMiniAgentCard | undefined>(undefined); // Signal for evaluator card\n conversationSettings = signal<IConversationSettings | undefined>(undefined);\n\n // --- Computed Signals ---\n imageCover = computed(() => this.lesson()?.media?.images?.find((img) => img.type === 'cover')?.url); // Computed signal for imageCover\n\n // --- Properties ---\n private components: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n public mainForm: FormGroup<{ [key: string]: FormControl<any> }> = new FormGroup({});\n private previousTextCoded: string | undefined | null = undefined; // Store previous value\n\n constructor() {\n // Effect to fetch lesson data if ID is provided and lesson object isn't\n effect(\n async () => {\n const lessonInput = this.lessonInput();\n const lessonId = this.lessonIdInput();\n\n if (lessonInput) {\n this.lesson.set(lessonInput); // Use input lesson directly\n } else if (lessonId && !this.lesson()) {\n // Fetch only if ID exists and internal lesson is not set\n console.log(`[Renderer] Effect 1: Fetching lesson ${lessonId}`);\n try {\n // Consider adding a loading state signal here\n const fetchedLesson = await this.lessonService.getLesson(lessonId);\n this.lesson.set(fetchedLesson);\n console.log('Fetched lesson:', fetchedLesson);\n } catch (error) {\n console.error(`Failed to fetch lesson with ID: ${lessonId}`, error);\n this.toastrService.error({ subtitle: 'Failed to load lesson data.', title: 'Error' });\n this.lesson.set(undefined); // Reset lesson on error\n } finally {\n // Reset loading state signal here\n }\n } else if (!lessonInput && !lessonId) {\n // Handle case where neither input is provided, maybe clear the lesson?\n this.lesson.set(undefined);\n }\n },\n { allowSignalWrites: true },\n ); // Allow signal writes inside effect\n\n // Effect to render the lesson only when textCoded value actually changes\n effect(() => {\n const currentLesson = this.lesson(); // Read the lesson signal\n const newTextCoded = currentLesson?.textCoded; // Get the current textCoded value\n\n // Quick fix to only render on changes textCode not all the lesson\n if (newTextCoded !== this.previousTextCoded) {\n if (newTextCoded !== undefined && newTextCoded !== null && currentLesson) {\n this._renderLesson(currentLesson);\n } else {\n this._clearLessonRendering();\n }\n // Update the stored previous value *after* comparison and action\n this.previousTextCoded = newTextCoded;\n } else {\n console.log('[Renderer] textCoded has NOT changed. Skipping render/clear.');\n }\n });\n }\n\n // --- Rendering Logic ---\n\n private _clearLessonRendering(): void {\n // Destroy previously created dynamic components\n Object.values(this.components).forEach((compRef) => compRef.destroy());\n this.components = {};\n // Clear the form\n this.mainForm = new FormGroup({});\n // Clear the HTML content\n if (this.dynamicLesson?.nativeElement) {\n this.dynamicLesson.nativeElement.innerHTML = '';\n }\n }\n\n private _renderLesson(lessonData: ILesson): void {\n this._clearLessonRendering(); // Clear previous state first\n\n console.log('Rendering lesson:', lessonData.id);\n // console.log('Image cover URL:', this.imageCover()); // Access computed signal\n\n // 1) Parse textCoded, create components, and build HTML structure\n const { htmlContent, components } = this._parseAndCreateComponents(lessonData);\n this.components = components;\n\n // 2) Aggregate form controls from created components\n this._aggregateFormControls(this.components);\n\n // 3) Set the innerHTML of the target element\n this.dynamicLesson.nativeElement.innerHTML = htmlContent;\n\n // 4) Inject the component views into the DOM\n this._injectComponentsIntoDom(this.components);\n }\n\n private _parseAndCreateComponents(lessonData: ILesson): { htmlContent: string; components: { [key: string]: ComponentRef<LessonComponentInterface> } } {\n const r1 = new RegExp('~(.+?)~', 'g');\n let count = 0;\n //\n const createdComponents: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n\n const htmlContent = lessonData.textCoded.replace(r1, (_matching, jsonCoded) => {\n const componentName = `dynamicComp${count}`;\n count++;\n const componentRef = this._createComponentReferenceWithJson(jsonCoded, lessonData);\n if (!componentRef) {\n console.error(`Failed to create component for: ${jsonCoded}`);\n return '<!-- component creation failed -->'; // Placeholder in HTML\n }\n createdComponents[componentName] = componentRef;\n return `<span id=\"${componentName}\"></span>`; // Return span placeholder\n });\n\n return { htmlContent, components: createdComponents };\n }\n\n private _aggregateFormControls(components: { [key: string]: ComponentRef<LessonComponentInterface> }): void {\n const newFormControls: { [key: string]: FormControl<any> } = {};\n Object.entries(components).forEach(([name, componentRef]) => {\n // Check if the instance has a control property that is a FormControl\n if (componentRef.instance?.control instanceof FormControl) {\n newFormControls[name] = componentRef.instance.control;\n // Add required validator (consider making this configurable via component config?)\n newFormControls[name].addValidators(Validators.required);\n }\n });\n this.mainForm = new FormGroup(newFormControls); // Create the typed FormGroup\n }\n\n private _injectComponentsIntoDom(components: { [key: string]: ComponentRef<LessonComponentInterface> }): void {\n Object.entries(components).forEach(([name, componentRef]) => {\n const elementRef = document.getElementById(name); // Find the placeholder span\n if (elementRef) {\n this._addComponentToNode(componentRef, elementRef);\n } else {\n console.warn(`Placeholder element with ID '${name}' not found in the DOM.`);\n }\n });\n }\n\n private _addComponentToNode(componentRef: ComponentRef<LessonComponentInterface>, nodeDOM: HTMLElement): void {\n this.renderer.appendChild(nodeDOM, componentRef.location.nativeElement);\n }\n\n private _createComponentReferenceWithJson(json: string, currentLesson: ILesson): ComponentRef<LessonComponentInterface> | null {\n try {\n let lessonCodedConfig: LessonComponentConfiguration = JSON.parse(json);\n //\n // Attempt to find pre-configured component data in the lesson object by ID\n if (lessonCodedConfig.id && currentLesson?.dynamicComponents[lessonCodedConfig.id]) {\n const foundConfig = currentLesson.dynamicComponents[lessonCodedConfig.id];\n if (foundConfig) {\n // Merge configurations: Start with coded, override/add with found lesson config\n lessonCodedConfig = { ...lessonCodedConfig, ...foundConfig };\n }\n }\n\n const LessonClass = getLessonComponentClass(<LessonComponentsType>lessonCodedConfig.component);\n\n if (!LessonClass) {\n console.error(`Component class not found for type: ${lessonCodedConfig.component}. JSON: ${json}`);\n return null; // Return null if class doesn't exist\n }\n\n // Create component instance\n const componentRef = this.viewContainerRef.createComponent<LessonComponentInterface>(LessonClass);\n\n if (lessonCodedConfig.inputs) {\n for (const key in lessonCodedConfig.inputs) {\n if (lessonCodedConfig.inputs.hasOwnProperty(key)) {\n componentRef.instance[key] = lessonCodedConfig.inputs[key];\n }\n }\n }\n // i think i can improve this to pass only settings not all config, Assign the configuration to the component instance\n // settings data i defined in form interface, config will be all the component data including id and component type\n if (lessonCodedConfig.settings) {\n componentRef.instance.config = lessonCodedConfig;\n }\n return componentRef;\n } catch (error) {\n console.error(`Error processing component JSON: ${json}`, error);\n return null; // Return null on JSON parsing or other errors\n }\n }\n\n // --- Evaluation Logic ---\n\n public async evaluateForms() {\n this.mainForm.markAllAsTouched(); // Mark all controls for validation feedback\n\n if (!this.mainForm.valid) {\n // Trigger validation feedback on individual components visually if needed\n Object.keys(this.mainForm.controls).forEach((controlName) => {\n if (this.components[controlName]?.instance?.validate) {\n this.components[controlName].instance.validate(); // Assuming validate method handles visual feedback\n }\n });\n this.toastrService.warn({ subtitle: 'Por favor completa todos los ejercicios', title: 'Incompleto' });\n return;\n }\n\n const rates = { correct: 0, incorrect: 0, score: 0 };\n\n // Evaluate each component associated with a form control\n Object.keys(this.mainForm.controls).forEach((controlName) => {\n const instance = this.components[controlName]?.instance;\n // Check if the instance has an evaluate method (duck typing is okay here)\n if (instance && typeof instance.evaluate === 'function') {\n try {\n const result = instance.evaluate();\n if (result) {\n rates.correct++;\n } else {\n rates.incorrect++;\n }\n } catch (err) {\n console.error('Error during evaluation for component:', controlName, instance, err);\n rates.incorrect++; // Count errors as incorrect\n }\n }\n });\n\n if (this.test()) {\n // Access signal value\n console.log('Test mode: Evaluation skipped saving.');\n this.toastrService.info({ subtitle: `Test Results: ${rates.correct} correct, ${rates.incorrect} incorrect`, title: 'Test Mode' });\n return;\n }\n\n const totalQuestions = rates.correct + rates.incorrect;\n rates.score = totalQuestions > 0 ? rates.correct / totalQuestions : 0; // Avoid division by zero\n\n const status = rates.score >= 0.7 ? 'passed' : 'failed'; // Use >= for threshold\n\n const currentLesson = this.lesson();\n if (!currentLesson) {\n console.error('Cannot save result, lesson data is missing.');\n this.toastrService.error({ subtitle: 'Cannot save result, lesson data missing.', title: 'Error' });\n return;\n }\n const takenLesson = { lessonId: currentLesson.id, status: status, score: rates.score };\n\n console.log('Lesson evaluation result:', takenLesson);\n // TODO: Re-implement saving the taken lesson status via lessonService\n // try {\n // await this.lessonService.saveTakenLesson(takenLesson);\n // if (status === 'passed') {\n // this.toastrService.success({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%. Se guardó tu progreso.`, title: '¡Muy bien!' });\n // } else {\n // this.toastrService.warn({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%. Revisa tus respuestas.`, title: 'Casi lo logras' });\n // }\n // } catch (error) {\n // console.error('Failed to save taken lesson', error);\n // this.toastrService.error({ subtitle: 'No se pudo guardar tu progreso.', title: 'Error' });\n // }\n if (status === 'passed') {\n this.toastrService.success({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%.`, title: '¡Muy bien!' });\n } else {\n this.toastrService.warn({ subtitle: `Calificación: ${Math.round(rates.score * 100)}%. Revisa tus respuestas.`, title: 'Casi lo logras' });\n }\n }\n\n // --- AI Chat Logic ---\n\n public async startAI() {\n const currentLesson = this.lesson();\n if (!currentLesson) {\n console.error('Cannot start AI without a lesson.');\n this.toastrService.error({ subtitle: 'Lesson data not available.', title: 'Cannot Start Chat' });\n return;\n }\n\n console.log('Requesting agent cards from LessonAIService...');\n try {\n // Call the service to get the agent cards\n const conversationSettings = await this.lessonAIService.generateConversationSettingsForLesson(currentLesson);\n\n if (conversationSettings) {\n // this.agentMasterLesson.set(agentCards);\n // this.evaluatorAgentCard.set(agentCards.evaluatorAgent);\n this.conversationSettings.set(conversationSettings);\n this.chatVisible.set(true);\n console.log('Agent cards received and set.');\n } else {\n console.error('Failed to generate agent cards (service returned null).');\n this.toastrService.error({ subtitle: 'Could not prepare the AI chat session.', title: 'Error' });\n }\n } catch (error) {\n console.error('Error generating agent cards:', error);\n this.toastrService.error({ subtitle: 'An error occurred while preparing the AI chat.', title: 'Error' });\n }\n }\n}\n","<div>\n <div #dynamicLesson class=\"targetclass\">\n <ng-template #target></ng-template>\n </div>\n</div>\n\n<br />\n<div style=\"display: flex; gap: 10px\">\n @if ((mainForm.controls | keyvalue)?.length) {\n <div>\n <p-button label=\"Calificar Lección\" icon=\"pi pi-check-circle\" (click)=\"evaluateForms()\" [rounded]=\"true\"></p-button>\n </div>\n }\n\n <p-button icon=\"pi pi-verified\" [rounded]=\"true\" (click)=\"startAI()\" label=\"Repasar con IA\" />\n</div>\n<br /><br />\n\n@if(chatVisible()) {\n<p-drawer header=\"Conversation\" [visible]=\"chatVisible()\" position=\"bottom\" styleClass=\"app-bottom-overlay\">\n <dc-chat [conversationSettings]=\"conversationSettings()\"></dc-chat>\n</p-drawer>\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { ILesson, LESSONS_TOKEN } from '../components/lesson-mini-components/components/lessons.clases';\nimport { NOTION_SERVICE_TOKEN, NotionExportType } from '../models/notion.models';\nimport { TOAST_ALERTS_TOKEN } from '@dataclouder/ngx-core';\n\n@Injectable() // Consider providing in root or specific module/component\nexport class LessonNotionService {\n #notionService = inject(NOTION_SERVICE_TOKEN);\n #lessonService = inject(LESSONS_TOKEN);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n\n // Keep track of loading state specific to Notion operations\n isLoading = signal(false);\n\n /**\n * Extracts the Notion Page ID from a URL.\n * @param url The Notion page URL.\n * @returns The extracted page ID or null if invalid.\n */\n private extractNotionPageId(url: string): string | null {\n const notionIdRegex = /[a-f0-9]{32}(?=\\?|$)/;\n const match = url.match(notionIdRegex);\n const notionId = match ? match[0] : null;\n if (!notionId) {\n this.#toastService.error({\n title: 'URL inválido',\n subtitle: 'Por favor ingresa una URL válida de Notion.',\n });\n return null;\n }\n return notionId;\n }\n\n /**\n * Links an existing lesson with a Notion page ID by updating the lesson's extras.\n * @param lesson The current lesson data.\n * @param notionPageId The Notion page ID to link.\n * @returns The updated lesson data from the backend or undefined on failure.\n */\n public async linkLessonWithNotion(lesson: ILesson, notionPageId: string): Promise<ILesson | undefined> {\n if (!lesson || !lesson.id) {\n // Ensure lesson exists and has an ID\n this.#toastService.warn({ title: 'No se puede enlazar', subtitle: 'La lección debe existir y tener un ID.' });\n return undefined;\n }\n\n const updatedLesson = {\n ...lesson,\n extras: {\n ...(lesson.extras || {}),\n notionPageId: notionPageId,\n },\n };\n\n this.isLoading.set(true);\n try {\n const savedLesson = await this.#lessonService.postLesson(updatedLesson);\n this.#toastService.success({ title: 'Listo', subtitle: 'Se enlazó la lección con Notion.' });\n return savedLesson;\n } catch (error) {\n // Remove explicit type, rely on tsconfig setting\n console.error('Error linking with Notion:', error);\n this.#toastService.error({ title: 'Error al enlazar', subtitle: 'Ocurrió un error inesperado.' });\n return undefined;\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Handles the process of importing lesson content from Notion.\n * It prompts the user for a URL if necessary, extracts the ID, fetches content,\n * and potentially links the lesson if it's an existing one.\n * @param currentLesson The current lesson data (can be a new or existing lesson).\n * @param lessonId The current lesson ID (null if it's a new lesson).\n * @returns The fetched HTML content from Notion, or null if the process fails.\n */\n public async importAndLinkLessonFromNotion(currentLesson: ILesson | undefined, lessonId: string | null): Promise<string | null> {\n if (!currentLesson) return null;\n\n let notionPageId: string | null = null;\n\n if (currentLesson.extras?.notionPageId) {\n const useExisting = confirm(`Ya tenemos el id ${currentLesson.extras.notionPageId} ¿Quieres usar este id para importar?`);\n if (useExisting) {\n notionPageId = currentLesson.extras.notionPageId;\n } else {\n const inputUrl = prompt('Ingresa la NUEVA URL de Notion para importar (este ID NO se guardará automáticamente si la lección ya existe)');\n if (!inputUrl) return null; // User cancelled\n notionPageId = this.extractNotionPageId(inputUrl);\n }\n } else {\n const inputUrl = prompt('Ingresa el URL de Notion para importar la lección (se enlazará si la lección ya existe)');\n if (!inputUrl) return null; // User cancelled\n notionPageId = this.extractNotionPageId(inputUrl);\n // Link automatically only if we got a valid Notion ID AND the lesson already exists (has an ID)\n if (notionPageId && lessonId) {\n const linkedLesson = await this.linkLessonWithNotion(currentLesson, notionPageId);\n if (!linkedLesson) {\n // Linking failed, maybe stop the import? Or proceed without linking?\n // For now, let's stop.\n this.#toastService.error({ title: 'Error de Enlace', subtitle: 'No se pudo enlazar con Notion antes de importar.' });\n return null;\n }\n // If linking succeeded, the lesson object might have changed, but we proceed with the import using the notionPageId.\n }\n }\n\n if (!notionPageId) {\n this.#toastService.warn({ title: 'Sin ID de Notion', subtitle: 'No se proporcionó un ID de Notion válido para importar.' });\n return null;\n }\n\n this.isLoading.set(true);\n try {\n this.#toastService.info({ title: 'Importando lección...', subtitle: 'Espera unos segundos' });\n const md = await this.#notionService.getPageInSpecificFormat(notionPageId, NotionExportType.HTML);\n console.log('Imported MD/HTML:', md);\n this.#toastService.success({ title: 'Contenido Importado', subtitle: 'Contenido de Notion obtenido.' });\n return md.content; // Return the fetched content\n } catch (error) {\n // Remove explicit type, rely on tsconfig setting\n console.error('Error importing from Notion:', error);\n this.#toastService.error({ title: 'Error de importación', subtitle: 'Ocurrió un error inesperado.' });\n return null; // Return null on failure\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Fetches content from the linked Notion page for AI improvement (placeholder).\n * @param lesson The current lesson data.\n */\n public async improveLessonWithNotionAI(lesson: ILesson | undefined): Promise<void> {\n if (!lesson) return;\n const notionId = lesson.extras?.notionPageId;\n\n if (!notionId) {\n this.#toastService.warn({ title: 'Sin ID de Notion', subtitle: 'Enlaza la lección con Notion primero.' });\n return;\n }\n\n this.isLoading.set(true);\n try {\n this.#toastService.info({ title: 'Mejorando con IA...', subtitle: 'Obteniendo contenido de Notion.' });\n const md = await this.#notionService.getPageInSpecificFormat(notionId, NotionExportType.HTML);\n console.log('Content to improve:', md);\n // TODO: Add actual AI improvement logic here\n // e.g., call another service: await this.aiImprovementService.improve(md.content);\n // Then potentially update the lesson via lessonService or return data\n this.#toastService.success({ title: 'Contenido Obtenido', subtitle: 'Listo para mejorar con IA (lógica no implementada).' });\n } catch (error) {\n // Remove explicit type, rely on tsconfig setting\n console.error('Error improving with AI:', error);\n this.#toastService.error({ title: 'Error de IA', subtitle: 'Ocurrió un error inesperado.' });\n } finally {\n this.isLoading.set(false);\n }\n }\n}\n","import { Injectable, inject, WritableSignal } from '@angular/core';\nimport { ILesson, LessonImage, LESSONS_TOKEN, DynamicContentComponent } from '../components/lesson-mini-components/components/lessons.clases'; // Added DynamicContentComponent\nimport { LoadingBarService, TOAST_ALERTS_TOKEN } from '@dataclouder/ngx-core';\nimport { ChatRole, CONVERSATION_AI_TOKEN, ISimpleTask } from '@dataclouder/ngx-agent-cards';\nimport { BasicAgentCard } from '../models/simple-agents';\n\n@Injectable({\n providedIn: 'root', // Provide globally or in a specific module if preferred\n})\nexport class LessonUtilsService {\n #lessonService = inject(LESSONS_TOKEN);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n #agentService = inject(CONVERSATION_AI_TOKEN);\n\n loadingBarService = inject(LoadingBarService);\n\n /**\n * Validates if audios need generation for the given lesson.\n * Currently logs a placeholder message.\n * @param lesson The lesson object (or signal) to validate.\n */\n public validateAudios(lesson: ILesson | undefined): void {\n // Access lesson data directly\n if (!lesson?.components) {\n return;\n }\n // Placeholder logic - adapt as needed from original component\n console.log('Validating audios for lesson:', lesson.id);\n // Original logic commented out - requires SpeakerCompConfiguration type\n // const needsGeneration = lesson.components.some((component: any) => // Use 'any' or define SpeakerCompConfiguration\n // component.component === 'speaker' && component.settings?.voice && !component.audio\n // );\n // if (needsGeneration) {\n // this.#toastService.warn({ title: 'Audios por generar', subtitle: 'Se encontraron audios pendientes' });\n // // Consider calling generation service here or returning a flag\n // // this.#lessonService.generateAudiosForLesson(lesson.id).then(res => { ... });\n // }\n }\n\n /**\n * Updates the lesson signal with a new cover image.\n * @param lessonSignal The signal holding the lesson data.\n * @param imageUploaded The image data object from the upload event.\n */\n public uploadCover(lessonSignal: WritableSignal<ILesson | undefined>, imageUploaded: any): void {\n // Use 'any' for now, refine if event structure is known\n const newImage: LessonImage = {\n type: 'cover',\n url: imageUploaded?.url,\n path: imageUploaded?.path,\n fullPath: imageUploaded?.fullPath,\n resolutions: imageUploaded?.resolutions ?? [],\n resolution: imageUploaded?.resolution,\n bucket: imageUploaded?.bucket,\n // Add any other required fields from LessonImage or ImgStorageData\n };\n\n lessonSignal.update((currentLesson) => {\n if (!currentLesson) return undefined;\n\n let updatedImages: LessonImage[];\n const existingMedia = currentLesson.media;\n\n if (!existingMedia || !existingMedia.images) {\n updatedImages = [newImage];\n } else {\n const filteredImages = existingMedia.images.filter((img: any) => img.type !== 'cover');\n const mappedExistingImages: LessonImage[] = filteredImages.map(\n (img: any): LessonImage => ({\n type: img.type,\n url: img.url,\n path: img.path,\n fullPath: img.fullPath,\n resolutions: img.resolutions ?? [],\n resolution: img.resolution,\n bucket: img.bucket,\n }),\n );\n updatedImages = [...mappedExistingImages, newImage];\n }\n\n return {\n ...currentLesson,\n media: {\n ...(existingMedia || {}),\n images: updatedImages,\n },\n };\n });\n // Note: Saving the lesson should be triggered from the component after calling this.\n }\n\n /**\n * Generates lesson content using AI. Assumes the lesson is already saved.\n * @param lessonId The ID of the lesson to generate content for.\n * @returns The updated lesson object after AI generation, or null on failure.\n */\n public async generateByAI(lessonId: string): Promise<ILesson | null> {\n if (!lessonId) {\n this.#toastService.warn({ title: 'ID Requerido', subtitle: 'Se necesita un ID de lección para usar IA.' });\n return null;\n }\n\n // No need to save here, component should ensure it's saved before calling.\n try {\n await this.#lessonService.postGenerateByAI(lessonId);\n // Re-fetch the lesson data to get AI updates\n const updatedLesson = await this.#lessonService.getLesson(lessonId);\n if (updatedLesson) {\n this.#toastService.success({ title: 'IA completada', subtitle: 'Lección actualizada con IA.' });\n return updatedLesson;\n } else {\n throw new Error('Failed to fetch lesson after AI generation');\n }\n } catch (error: any) {\n // Type the error object\n console.error('Error during AI generation in service:', error);\n this.#toastService.error({ title: 'Error de IA', subtitle: 'No se pudo generar la lección con IA.' });\n return null; // Return null in catch block\n }\n // Loading state should be managed by the component calling this service.\n }\n\n /**\n * Improves the provided Markdown text using AI and updates the lesson.\n * Assumes the lesson is already saved before calling this.\n * @param lessonId The ID of the lesson to update.\n * @param markdownText The Markdown text generated from the lesson's HTML content.\n * @returns The updated lesson object after AI improvement, or null on failure.\n */\n public async improveMDWithAI(lesson: ILesson, markdownText: string): Promise<string | null> {\n if (!markdownText) {\n this.#toastService.warn({ title: 'Texto Requerido', subtitle: 'Se necesita texto Markdown para mejorar con IA.' });\n return null;\n }\n\n try {\n this.loadingBarService.showIndeterminate();\n\n const agentCard = BasicAgentCard;\n\n let task = `Improve the following lesson return only the lesson markdown: ${markdownText}`;\n if (lesson.prompt) {\n task = `${task} Also consider the original prompt: ${lesson.prompt} when improving the lesson.`;\n }\n const appTask: ISimpleTask = { task: task };\n\n const messages = [\n { content: agentCard.systemPrompt, role: ChatRole.System },\n { content: appTask.task, role: ChatRole.User },\n ];\n\n const response = await this.#agentService.callChatCompletion({ messages, model: agentCard.model });\n let improvedMarkdown = response.content;\n\n // Remove potential markdown fences\n const markdownFenceStart = '```markdown\\n';\n const markdownFenceEnd = '\\n```';\n if (improvedMarkdown.startsWith(markdownFenceStart) && improvedMarkdown.endsWith(markdownFenceEnd)) {\n improvedMarkdown = improvedMarkdown.slice(markdownFenceStart.length, -markdownFenceEnd.length);\n } else {\n // Also handle cases where it might just be ``` at the start/end\n const simpleFence = '```';\n if (improvedMarkdown.startsWith(simpleFence)) {\n improvedMarkdown = improvedMarkdown.slice(simpleFence.length);\n }\n if (improvedMarkdown.endsWith(simpleFence)) {\n improvedMarkdown = improvedMarkdown.slice(0, -simpleFence.length);\n }\n }\n // Trim any leading/trailing whitespace that might remain after removing fences\n improvedMarkdown = improvedMarkdown.trim();\n\n console.log('Improved Markdown:', improvedMarkdown);\n\n return improvedMarkdown;\n } catch (error: any) {\n console.error('Error during AI Markdown improvement in service:', error);\n this.#toastService.error({ title: 'Error de IA', subtitle: 'No se pudo mejorar la lección con IA.' });\n return null; // Return null in catch block\n } finally {\n this.loadingBarService.successAndHide();\n }\n // Loading state should be managed by the component calling this service.\n }\n\n /**\n * Cleans orphaned components from the lesson's dynamicComponents.\n * An orphaned component is one present in dynamicComponents but its ID is not found in the textCoded HTML.\n * @param lesson The lesson object to clean.\n * @returns A new lesson object with orphaned components removed from dynamicComponents.\n */\n public cleanOrphanedComponents(lesson: ILesson): ILesson {\n if (!lesson || !lesson.textCoded || !lesson.dynamicComponents) {\n // Return the original lesson if essential parts are missing\n return lesson;\n }\n\n const textCoded = lesson.textCoded;\n const existingComponents = lesson.dynamicComponents;\n const existingComponentIds = new Set(Object.keys(existingComponents));\n\n // Regex to find \"id\":\"<component_id>\" within the textCoded string\n const idRegex = /\"id\":\"([^\"]+)\"/g;\n const foundIdsInText = new Set<string>();\n let match;\n\n while ((match = idRegex.exec(textCoded)) !== null) {\n const potentialId = match[1];\n // Check if the found ID actually exists in our dynamic components map\n // This ensures we only count IDs that correspond to known components.\n if (existingComponentIds.has(potentialId)) {\n foundIdsInText.add(potentialId);\n }\n }\n\n const orphanedIds: string[] = [];\n const cleanedDynamicComponents: Record<string, DynamicContentComponent> = {};\n\n // Iterate through existing component IDs\n for (const componentId of existingComponentIds) {\n if (foundIdsInText.has(componentId)) {\n // Keep the component if its ID was found in the text\n cleanedDynamicComponents[componentId] = existingComponents[componentId];\n } else {\n // Mark as orphaned if not found\n orphanedIds.push(componentId);\n }\n }\n\n // Log a warning if any orphaned components were found\n if (orphanedIds.length > 0) {\n console.warn(`[LessonUtilsService] Orphaned components detected and will be removed from lesson data (IDs not found in textCoded):`, orphanedIds);\n this.#toastService.warn({\n title: 'Componentes Huérfanos Detectados',\n subtitle: `Se removerán ${orphanedIds.length} componentes no usados del editor.`,\n // life: 5000, // Removed 'life' property as it might not be supported by ToastData\n });\n }\n\n // Return a new lesson object with the cleaned components\n return {\n ...lesson,\n dynamicComponents: cleanedDynamicComponents,\n };\n }\n}\n","import { Component, EventEmitter, Output, inject } from '@angular/core'; // Added inject\nimport { CommonModule } from '@angular/common';\n// PrimeNG\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog'; // Added DialogService, DynamicDialogRef\n// Dataclouder\nimport { TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } from '@dataclouder/ngx-core'; // Added Toast imports\n// Project specific\nimport { LessonComponentEnum, LessonComponentBuilders } from '../../lesson-mini-components/components/lessons.clases'; // Added LessonComponentBuilders\n\n@Component({\n selector: 'dc-lesson-component-adder',\n standalone: true,\n imports: [CommonModule, ButtonModule, TooltipModule],\n templateUrl: './dc-lesson-component-adder.component.html',\n styleUrls: ['./dc-lesson-component-adder.component.css'],\n providers: [DialogService], // Provide DialogService here\n})\nexport class DCLessonComponentAdderComponent {\n // Services\n #dialogService = inject(DialogService);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n\n @Output() componentAdded = new EventEmitter<any>(); // Changed Output name and type\n\n // Expose enum to the template\n public lessonComponentEnum = LessonComponentEnum;\n\n // Moved logic from DCLessonEditorComponent\n public openComponentBuilder(type: LessonComponentEnum): void {\n const componentToBuild = LessonComponentBuilders[type];\n if (!componentToBuild) {\n console.error(`No component builder found for type: ${type}`);\n this.#toastService.error({ title: 'Error', subtitle: `Componente desconocido: ${type}` });\n return;\n }\n const dialogRef: DynamicDialogRef = this.#dialogService.open(componentToBuild, {\n width: '80vw',\n header: 'Agregar componente',\n closable: true,\n });\n\n // Handle the result and emit the new event\n dialogRef.onClose.subscribe((result) => {\n if (result) {\n console.log('Component builder closed:', result);\n this.componentAdded.emit(result); // Emit the result when dialog closes successfully\n }\n });\n }\n}\n","<span>Componentes: </span>\n<div style=\"display: flex; gap: 10px; flex-wrap: wrap\">\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.Selector)\"\n pTooltip=\"Agrega un selector con multiples opciones\"\n tooltipPosition=\"bottom\">\n Selector\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.Speaker)\"\n pTooltip=\"Para que una palabra o frase sea reproducible\"\n tooltipPosition=\"bottom\">\n Speaker\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.TextWriter)\"\n pTooltip=\"Escribe una respuesta en un cuadro de texto\"\n tooltipPosition=\"bottom\">\n Text\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.VerbSummary)\"\n pTooltip=\"Muestra la información de un verbo\"\n tooltipPosition=\"bottom\">\n Verb\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.WordSummary)\"\n pTooltip=\"Muestra la información de una palabra\"\n tooltipPosition=\"bottom\">\n Palabra\n </p-button>\n <p-button\n severity=\"info\"\n (click)=\"openComponentBuilder(lessonComponentEnum.TranslationSwitcher)\"\n pTooltip=\"Muestra el texto pero al pica cambia de idioma\"\n tooltipPosition=\"bottom\">\n Traducción\n </p-button>\n <!-- Add other buttons here if needed, following the same pattern -->\n</div>\n","import { Component, EventEmitter, Input, Output, WritableSignal, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TooltipModule } from 'primeng/tooltip'; // Added TooltipModule\nimport { ILesson } from '../../lesson-mini-components/components/lessons.clases';\nimport { FlagLanguagePipe, LangDescTranslationPipe } from '../../../models/lessons.pipes';\n\n@Component({\n selector: 'dc-lesson-metadata-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ButtonModule,\n InputTextModule,\n TooltipModule, // Added TooltipModule\n FlagLanguagePipe, // Added Pipe\n LangDescTranslationPipe, // Added Pipe\n ],\n templateUrl: './dc-lesson-metadata-editor.component.html',\n styleUrls: ['./dc-lesson-metadata-editor.component.css'],\n})\nexport class DCLessonMetadataEditorComponent {\n // Use signal for input lesson data\n @Input({ required: true }) lesson: WritableSignal<ILesson | undefined> = signal(undefined);\n @Input({ required: true }) isLoadingLesson: WritableSignal<boolean> = signal(false);\n\n // Outputs for actions\n @Output() saveRequest = new EventEmitter<void>();\n @Output() importNotionRequest = new EventEmitter<void>();\n @Output() improveNotionRequest = new EventEmitter<void>();\n @Output() generateAIRequest = new EventEmitter<void>();\n\n // Output for property changes\n @Output() propertyChange = new EventEmitter<{ property: keyof ILesson; value: any }>();\n\n // Method to emit property changes, called by ngModelChange in the template\n onPropertyChange<K extends keyof ILesson>(property: K, value: ILesson[K]): void {\n this.propertyChange.emit({ property, value });\n }\n\n // Methods to emit action requests\n emitSaveRequest(): void {\n this.saveRequest.emit();\n }\n\n emitImportNotionRequest(): void {\n this.importNotionRequest.emit();\n }\n\n emitImproveNotionRequest(): void {\n this.improveNotionRequest.emit();\n }\n\n emitGenerateAIRequest(): void {\n this.generateAIRequest.emit();\n }\n}\n","@if (lesson(); as currentLesson) {\n<div>\n <div>\n <div style=\"display: flex; gap: 10px; padding: 10px\">\n <p-button label=\"Guardar\" severity=\"primary\" (click)=\"emitSaveRequest()\" />\n <p-button label=\"Importar de Notion\" severity=\"help\" (click)=\"emitImportNotionRequest()\" />\n <p-button label=\"Mejorar Notion con AI\" severity=\"help\" (click)=\"emitImproveNotionRequest()\" />\n </div>\n\n <!-- Use one-way binding and ngModelChange for signals -->\n <div>\n <input\n pInputText\n style=\"width: 100%\"\n [ngModel]=\"currentLesson.title\"\n (ngModelChange)=\"onPropertyChange('title', $event)\"\n type=\"text\"\n placeholder=\"Agrega un título\" />\n </div>\n <div style=\"margin-top: 4px\">\n <input\n pInputText\n style=\"width: 100%\"\n [ngModel]=\"currentLesson.description\"\n (ngModelChange)=\"onPropertyChange('description', $event)\"\n type=\"text\"\n placeholder=\"Agrega una descripción\" />\n </div>\n\n <div style=\"display: flex; align-items: center; margin-top: 10px\">\n <input\n pInputText\n style=\"flex: auto; margin-right: 5px\"\n [ngModel]=\"currentLesson.prompt\"\n (ngModelChange)=\"onPropertyChange('prompt', $event)\"\n type=\"text\"\n placeholder=\"Prompt para IA (opcional)\" />\n <p-button severity=\"primary\" label=\"Generar con IA\" icon=\"pi pi-sparkles\" [disabled]=\"isLoadingLesson()\" (click)=\"emitGenerateAIRequest()\" />\n </div>\n\n <div style=\"margin-top: 10px\">\n <label class=\"checkbox-container\" style=\"margin-right: 15px\">\n <input\n type=\"checkbox\"\n [ngModel]=\"currentLesson.isPublished\"\n (ngModelChange)=\"onPropertyChange('isPublished', $event)\"\n title=\"Cuando termines la edición marca esta casilla\" />\n <span class=\"checkmark\"></span>\n Publicada\n </label>\n\n <input\n pInputText\n [ngModel]=\"currentLesson.level\"\n (ngModelChange)=\"onPropertyChange('level', $event)\"\n type=\"number\"\n placeholder=\"Nivel\"\n style=\"width: 80px\" />\n </div>\n\n <!-- Access signal values -->\n <div style=\"margin-top: 10px; font-size: 0.9em; color: var(--text-color-secondary)\">\n {{ currentLesson.baseLang | flagEmoji }} -> {{ currentLesson.targetLang | flagEmoji }} Lección para hablantes de\n {{ currentLesson.baseLang | langDesc : 'es' }} que aprenden\n {{ currentLesson.targetLang | langDesc : 'es' }}\n </div>\n </div>\n</div>\n} @else {\n<!-- Optional: Show a loading state or placeholder if lesson is undefined -->\n<p>Cargando datos de la lección...</p>\n}\n","import { Component, ComponentRef, ElementRef, computed, effect, inject, signal, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ActivatedRoute, Router, ParamMap } from '@angular/router';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { map } from 'rxjs';\n\nimport BalloonEditor from '@ckeditor/ckeditor5-build-balloon-block';\nimport { CKEditorModule } from '@ckeditor/ckeditor5-angular';\n// PrimeNG\n// Removed DialogService, DynamicDialogRef, SpeedDialModule, MenuItem\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SplitterModule } from 'primeng/splitter';\nimport { TooltipModule } from 'primeng/tooltip';\n// Dataclouder\nimport { AspectType, CropperComponentModal, ResolutionType, StorageImageSettings } from '@dataclouder/ngx-cloud-storage';\nimport { TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } from '@dataclouder/ngx-core';\n\nimport { DCLessonRendererComponent } from '../dc-lesson-renderer/dc-lesson-renderer.component';\n// Added DynamicContentComponent to the import below\nimport {\n LessonComponentEnum,\n LessonImage,\n ILesson,\n LessonComponentInterface,\n LESSONS_TOKEN,\n LessonComponentConfiguration,\n} from '../../lesson-mini-components/components/lessons.clases';\n\nimport { LessonNotionService } from '../../../services/lesson-notion.service';\nimport { LessonUtilsService } from '../../../services/lesson-utils.service'; // Import the new utils service\nimport { DCLessonComponentAdderComponent } from '../dc-lesson-component-adder/dc-lesson-component-adder.component'; // Import the component adder\nimport { DCLessonMetadataEditorComponent } from '../dc-lesson-metadata-editor/dc-lesson-metadata-editor.component'; // Import the metadata editor\nimport { ComponentBuildData } from '../../lesson-mini-components/components/ComponentBuilder';\nimport TurndownService from 'turndown';\nimport { marked } from 'marked'; // Import marked for Markdown to HTML conversion\n\n@Component({\n selector: 'dc-lesson-editor',\n templateUrl: './dc-lesson-editor.component.html',\n styleUrls: ['./dc-lesson-editor.component.css'],\n standalone: true,\n imports: [\n ButtonModule,\n CKEditorModule,\n CropperComponentModal,\n DCLessonRendererComponent,\n FormsModule,\n InputTextModule,\n SplitterModule,\n TooltipModule,\n DCLessonComponentAdderComponent, // Add the component adder here\n DCLessonMetadataEditorComponent, // Add the metadata editor here\n ],\n providers: [LessonNotionService], // Provide the service here\n})\nexport class DCLessonEditorComponent {\n // Services\n #activatedRoute = inject(ActivatedRoute); // Re-inject as it's needed for navigation\n #lessonNotionService = inject(LessonNotionService);\n #lessonUtilsService = inject(LessonUtilsService);\n #router = inject(Router);\n #lessonService = inject(LESSONS_TOKEN);\n #toastService = inject(TOAST_ALERTS_TOKEN);\n // ViewChild\n @ViewChild('target', { read: ViewContainerRef }) target: ViewContainerRef;\n @ViewChild('dhtml', { static: true }) dhtml: ElementRef;\n // Signals States\n readonly lessonId = toSignal(inject(ActivatedRoute).paramMap.pipe(map((params: ParamMap) => params.get('id'))));\n lesson = signal<ILesson | undefined>(undefined); // Initialize as undefined\n isLoadingLesson = signal(false);\n // Computed Signals\n coverImageUrl = computed(() => {\n const currentLesson = this.lesson();\n const coverImage = currentLesson?.media?.images?.find((img: any) => img.type === 'cover') as LessonImage | undefined;\n return coverImage?.url || '/assets/images/default_banner.webp';\n });\n\n // Computed signal to get dynamic components as an array for easier iteration in the template\n readonly dynamicComponentsArray = computed(() => {\n const currentLesson = this.lesson();\n if (currentLesson?.dynamicComponents) {\n return Object.values(currentLesson.dynamicComponents);\n }\n return []; // Return empty array if no lesson or no dynamic components\n });\n\n // States\n public components: { [key: string]: ComponentRef<LessonComponentInterface> } = {}; // Current Dynamic components\n public editor = BalloonEditor;\n public lessonComponentEnum = LessonComponentEnum;\n\n public coverStorageSettings: StorageImageSettings = {\n path: 'lessons/covers',\n fileName: 'cover',\n cropSettings: { resizeToWidth: 850, aspectRatio: AspectType.RectangleLarge, resolutions: [ResolutionType.Medium] },\n };\n\n constructor() {\n // Effect to fetch lesson data when ID changes\n effect(async () => {\n const id = this.lessonId();\n console.log('Lesson ID Signal:', id);\n if (id) {\n this.isLoadingLesson.set(true); // Start loading\n try {\n const fetchedLesson = await this.#lessonService.getLesson(id);\n if (fetchedLesson) {\n this.lesson.set(fetchedLesson);\n } else {\n this.lesson.set(undefined); // Reset if not found\n this.#toastService.warn({ title: 'No se encontró la lección', subtitle: 'Quizá el id es incorrecto' });\n // Optional: Navigate away or show a specific \"not found\" state\n // this.#router.navigate(['/path/to/lessons']);\n }\n } catch (error) {\n console.error('Error fetching lesson:', error);\n this.lesson.set(undefined); // Reset on error\n this.#toastService.error({ title: 'Error al cargar la lección', subtitle: 'Intenta de nuevo más tarde' });\n } finally {\n this.isLoadingLesson.set(false); // Stop loading\n }\n } else {\n // Handle case for new lesson (ID is null/undefined)\n this.lesson.set({ textCoded: `<h1>Nueva lección </h1> <p> Texto aquí</p>`, tags: [] } as ILesson); // Set default new lesson structure\n this.saveLesson();\n this.isLoadingLesson.set(false); // Ensure loading is off\n }\n });\n }\n\n /**\n * Updates a specific property on the lesson signal.\n * Used for ngModelChange events to simulate two-way binding with signals.\n * @param property The key of the ILesson property to update.\n * @param value The new value for the property.\n */\n public updateLessonProperty<K extends keyof ILesson>(property: K, value: ILesson[K]): void {\n console.log('Updating property:', property, value);\n this.lesson.update((currentLesson) => {\n if (!currentLesson) return undefined;\n return { ...currentLesson, [property]: value };\n });\n }\n\n public onTagRemove(tag: any): void {\n this.lesson.update((currentLesson) => {\n if (!currentLesson) return undefined;\n const updatedTags = currentLesson.tags.filter((text: string) => text !== tag.text);\n return { ...currentLesson, tags: updatedTags };\n });\n }\n\n public onTagAdd(tag: { value: string; input: any }): void {\n if (tag.value) {\n this.lesson.update((currentLesson) => {\n if (!currentLesson) return undefined;\n // Avoid duplicate tags if necessary\n if (currentLesson.tags.includes(tag.value)) {\n return currentLesson;\n }\n const updatedTags = [...currentLesson.tags, tag.value];\n return { ...currentLesson, tags: updatedTags };\n });\n }\n tag.input.nativeElement.value = ''; // Clear input\n }\n\n public async saveLesson(event?: Event): Promise<ILesson | undefined> {\n event?.preventDefault();\n\n const currentLesson = this.lesson();\n if (!currentLesson) {\n this.#toastService.error({ title: 'Error', subtitle: 'No hay datos de lección para guardar' });\n return undefined;\n }\n\n // Clean orphaned components before saving\n const lessonToSave = this.#lessonUtilsService.cleanOrphanedComponents(currentLesson);\n\n // TODO: Implement optimization for saving only changed data.\n // This requires comparing lessonToSave with the initially fetched state.\n this.isLoadingLesson.set(true); // Indicate saving\n try {\n // Use the cleaned lesson object for saving\n const savedLesson = await this.#lessonService.postLesson(lessonToSave);\n const currentId = this.lessonId();\n\n if (!currentId) {\n // It was a new lesson, now it has an ID. Navigate.\n this.#toastService.success({ title: 'Se creó la lección', subtitle: 'Éxito' });\n // The effect should automatically fetch the lesson again after navigation due to paramMap change.\n this.#router.navigate(['./', savedLesson.id], { relativeTo: this.#activatedRoute });\n } else {\n // It was an existing lesson, update the signal with the potentially updated data from the backend.\n this.lesson.set(savedLesson);\n this.#toastService.info({ title: 'Se guardaron los cambios en la lección', subtitle: 'Guardado' });\n // Call the service method for validation\n this.#lessonUtilsService.validateAudios(this.lesson());\n }\n return savedLesson;\n } catch (error: any) {\n // Type error\n console.error('Error saving lesson:', error);\n this.#toastService.error({ title: 'Error al guardar', subtitle: 'No se pudieron guardar los cambios' });\n return undefined;\n } finally {\n this.isLoadingLesson.set(false); // Finish saving indication\n }\n } // Add missing closing brace for saveLesson\n\n // Removed openComponentBuilder method\n\n /**\n * Handles the event emitted when a component is added via the adder component.\n * @param result The configuration data returned from the component builder dialog. Expected format: { obj: LessonComponentConfiguration }\n */\n public onComponentAdded(result: ComponentBuildData): void {\n // Check if result and result.obj.id exist\n const newComponent = result?.obj;\n if (newComponent?.id) {\n console.log('Component builder closed, result received in editor:', newComponent);\n\n // // Transform LessonComponentConfiguration to DynamicContentComponent\n // const dynamicComponentToAdd: DynamicContentComponent = {\n // id: componentConfig.id,\n // component: componentConfig.component,\n // inputs: {\n // config: componentConfig, // Pass the original config object as an input named 'config'\n // // Add other potential inputs if needed based on component type later\n // },\n // };\n\n // Update the lesson signal, adding the transformed component to the dynamicComponents object\n this.lesson.update((currentLesson: any) => {\n if (!currentLesson) return undefined;\n\n // Ensure dynamicComponents object exists, initialize if not\n const currentDynamicComponents = currentLesson.dynamicComponents || {};\n\n // Create the updated dynamicComponents object\n const updatedDynamicComponents: Record<string, LessonComponentConfiguration<any>> = {\n ...currentDynamicComponents,\n [newComponent.id]: newComponent, // Use component's id as the key\n };\n\n // Return the updated lesson state\n return { ...currentLesson, dynamicComponents: updatedDynamicComponents };\n });\n\n // Optionally save the lesson after adding the component\n // this.saveLesson();\n }\n }\n\n // isLoadingLesson signal is used directly\n\n public async generateByAI(): Promise<void> {\n const currentId = this.lessonId();\n if (!currentId) {\n this.#toastService.warn({ title: 'Guardar primero', subtitle: 'Guarda la lección antes de usar IA.' });\n return;\n }\n\n this.isLoadingLesson.set(true);\n try {\n // Ensure latest changes are saved before generating\n const savedLesson = await this.saveLesson();\n if (!savedLesson) {\n // Handle save error - toast is shown in saveLesson\n throw new Error('Failed to save before AI generation');\n }\n\n // // Removed debugger\n\n const rawHtmlContent = this.lesson()?.textCoded || '';\n if (!rawHtmlContent) {\n console.warn('No HTML content found in lesson to process.');\n this.isLoadingLesson.set(false);\n return; // Exit if no content\n }\n\n // Replace encoded JSON with actual text before Markdown conversion\n const processedHtmlContent = this._extractTextFromEncodedJson(rawHtmlContent);\n\n const turndownService = new TurndownService();\n // Convert the processed HTML (with text instead of JSON) to Markdown\n const markdownText = turndownService.turndown(processedHtmlContent);\n\n const improvedMarkdown = await this.#lessonUtilsService.improveMDWithAI(this.lesson(), markdownText);\n\n if (improvedMarkdown) {\n // Convert the improved Markdown back to HTML before setting it\n const improvedHtml = marked(improvedMarkdown) as string;\n this.lesson.set({ ...this.lesson(), textCoded: improvedHtml }); // Update the signal with the converted HTML\n // Toast success is handled by the service\n } else {\n // Toast error is handled by the service\n throw new Error('AI generation failed or lesson fetch failed after generation.');\n }\n } catch (error: any) {\n // Type error\n console.error('Error during AI generation process in component:', error);\n // Service handles specific AI error toasts, maybe add a general one here if needed\n // this.#toastService.error({ title: 'Error General', subtitle: 'Ocurrió un problema durante el proceso de IA.' });\n } finally {\n this.isLoadingLesson.set(false); // Stop loading\n }\n }\n\n /**\n * Replaces encoded JSON blocks (~...~) in HTML with their 'settings.text' value.\n * @param htmlInput The HTML string containing encoded JSON.\n * @returns The processed HTML string with text replacements.\n */\n private _extractTextFromEncodedJson(htmlInput: string): string {\n const jsonRegex = /~(.+?)~/g; // Global flag to replace all occurrences\n\n return htmlInput.replace(jsonRegex, (match, jsonCoded) => {\n try {\n // Attempt to decode HTML entities that might be present in the JSON string\n const decodedJson = jsonCoded.replace(/\"/g, '\"').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n const data = JSON.parse(decodedJson);\n // Return the text if available, otherwise keep the original match (or an error placeholder)\n return data?.settings?.text || match;\n } catch (error) {\n console.error('Failed to parse JSON inside HTML:', jsonCoded, error);\n return '<!-- invalid component data -->'; // Placeholder for parsing errors\n }\n });\n }\n\n /**\n * Handles the image upload event, updates the lesson signal via the service, and saves.\n * @param event The image upload event data.\n */\n public async onImageUploaded(event: any): Promise<void> {\n // Call the service to update the signal\n this.#lessonUtilsService.uploadCover(this.lesson, event);\n // The coverBackground computed signal will update automatically.\n // Save the lesson after the signal has been updated\n await this.saveLesson();\n }\n\n /**\n * Imports lesson content from Notion using the LessonNotionService.\n */\n public async importFromNotion(): Promise<void> {\n // Use the service's loading state or manage locally\n this.isLoadingLesson.set(true);\n try {\n const newContent = await this.#lessonNotionService.importAndLinkLessonFromNotion(this.lesson(), this.lessonId());\n\n if (newContent !== null) {\n // Update the lesson signal's textCoded property\n this.updateLessonProperty('textCoded', newContent);\n // Toast success is handled within the service now\n }\n // If newContent is null, the service handled errors/toasts\n } finally {\n // Ensure loading state is reset regardless of service outcome\n // If observing service state: this.isLoadingLesson.set(this.#lessonNotionService.isLoading());\n this.isLoadingLesson.set(false); // Keep local loading for now\n }\n }\n\n /**\n * Calls the LessonNotionService to improve the lesson using AI based on Notion content.\n */\n public async improveNotionWithAI(): Promise<void> {\n await this.#lessonNotionService.improveLessonWithNotionAI(this.lesson());\n }\n\n public showComponentDetails(data: any) {\n alert('showComponentDetails' + JSON.stringify(data));\n }\n}\n","<div style=\"position: relative; margin-bottom: 20px\">\n <img class=\"header-cover\" [src]=\"coverImageUrl()\" alt=\"Lesson Cover Image\" />\n\n <dc-cropper-modal\n style=\"position: absolute; top: 10px; left: 20px\"\n [buttonLabel]=\"'Carga una portada'\"\n [imgStorageSettings]=\"coverStorageSettings\"\n (imageUploaded)=\"onImageUploaded($event)\"></dc-cropper-modal>\n</div>\n\n<br />\n\n<!-- Lesson Metadata Editor -->\n<dc-lesson-metadata-editor\n [lesson]=\"lesson\"\n [isLoadingLesson]=\"isLoadingLesson\"\n (saveRequest)=\"saveLesson()\"\n (importNotionRequest)=\"importFromNotion()\"\n (improveNotionRequest)=\"improveNotionWithAI()\"\n (generateAIRequest)=\"generateByAI()\"\n (propertyChange)=\"updateLessonProperty($event.property, $event.value)\">\n</dc-lesson-metadata-editor>\n\n<hr />\n\n<!-- Component Adder -->\n<dc-lesson-component-adder (componentAdded)=\"onComponentAdded($event)\"></dc-lesson-component-adder>\n\n<!-- Display Added Components -->\n<div class=\"added-components-list\" style=\"margin-top: 15px; margin-bottom: 15px\">\n <h4>Componentes Agregados:</h4>\n @if (dynamicComponentsArray().length > 0) {\n <ul>\n @for (comp of dynamicComponentsArray(); track comp.id) {\n <li>ID: {{ comp.id }} - Tipo: {{ comp.component }}<button pButton icon=\"pi pi-info\" (click)=\"showComponentDetails(comp)\"></button></li>\n }\n </ul>\n } @else {\n <p>Aún no se han agregado componentes.</p>\n }\n</div>\n\n<hr />\n\n<!-- Text Editor and Renderer -->\n<p-splitter [style]=\"{ height: '80vh' }\">\n <ng-template pTemplate>\n <ckeditor\n (keydown.control.s)=\"saveLesson($event)\"\n class=\"text-editor\"\n [editor]=\"editor\"\n [ngModel]=\"lesson()?.textCoded\"\n (ngModelChange)=\"updateLessonProperty('textCoded', $event)\">\n </ckeditor>\n </ng-template>\n\n <ng-template pTemplate>\n <dc-lesson-renderer class=\"text-editor\" [lessonInput]=\"lesson()\" [test]=\"true\"></dc-lesson-renderer>\n </ng-template>\n</p-splitter>\n\n<div class=\"float-button\">\n <!-- Removed p-speeddial -->\n <p-button icon=\"pi pi-save\" (click)=\"saveLesson()\" severity=\"primary\" [rounded]=\"true\" [raised]=\"true\" pTooltip=\"Guardar (Ctrl + S)\"> </p-button>\n</div>\n\n<hr />\n","import { Component, Input } from '@angular/core';\n\nimport { LessonCompSettings } from './lessons.clases';\n\n@Component({\n selector: 'app-lesson-component',\n template: '<div>no template</div>',\n standalone: true,\n})\n// This is the base class for all the components that are going to be used in the lessons.\nexport class LessonDynamicComponent {\n @Input() settings: LessonCompSettings = {} as LessonCompSettings;\n}\n","/*\n * Public API Surface of lessons\n */\n\nexport * from './lib/models/lessons.pipes';\nexport * from './lib/models/notion.models';\nexport * from './lib/models/simple-agents';\n\nexport * from './lib/components/dc-lessons/lesson-list/dc-lesson-list.component';\nexport * from './lib/components/dc-lessons/lesson-form/lesson-form.component';\nexport * from './lib/components/dc-lessons/dc-lesson-editor/dc-lesson-editor.component';\nexport * from './lib/components/dc-lessons/dc-lesson-card/dc-lesson-card.component';\n\nexport * from './lib/components/dc-lessons/dc-lesson-renderer/dc-lesson-renderer.component';\n\nexport * from './lib/components/lesson-mini-components/components/ComponentWithForm';\nexport * from './lib/components/lesson-mini-components/components/lesson-dynamic.component';\nexport * from './lib/components/lesson-mini-components/components/lessons.clases';\n\nexport * from './lib/components/lesson-mini-components/components/ComponentBuilder';\nexport * from './lib/components/lesson-mini-components/components/text-writer/text-writer-buider/text-writer-buider.component';\nexport * from './lib/components/lesson-mini-components/components/text-writer/text-writer.component';\nexport * from './lib/components/lesson-mini-components/components/selector/selector-builder/selector-builder.component';\nexport * from './lib/components/lesson-mini-components/components/selector/selector.component';\nexport * from './lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcher.component';\nexport * from './lib/components/lesson-mini-components/components/translationSwitcher/translationSwitcherBuilder/translationSwitcherBuilder.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","BasicAgentCard","i4","i5","i6"],"mappings":"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"}