@dataclouder/ngx-lessons 0.0.26 → 0.0.28

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/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/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/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\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\n@Component({\r\n selector: 'app-component-builder',\r\n template: '<div>no template</div>',\r\n})\r\nexport class ComponentBuilder {\r\n constructor(\r\n protected formBuilder: FormBuilder,\r\n // protected toastrService: ToastService, // protected ref: NbDialogRef<ComponentBuilder>,\r\n protected ref: DynamicDialogRef,\r\n ) {}\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 private getCode(): string {\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 id = Math.random().toString(36).substring(7);\r\n const code: LessonComponentConfiguration = { id: id, component: this.questionType, settings: { ...data } as unknown as LessonCompSettings };\r\n return `~${JSON.stringify(code)}~`;\r\n }\r\n\r\n public showCode() {\r\n const code = this.getCode();\r\n alert(code);\r\n }\r\n\r\n public async copyToClipboard() {\r\n const code = this.getCode();\r\n await navigator.clipboard.writeText(code);\r\n // this.toastrService.info('Control + V para pegar', 'Se copió al portapapeles');\r\n // this.ref.close();\r\n this.ref.close(code);\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 { DropdownModule } from 'primeng/dropdown';\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, DropdownModule],\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-dropdown [class]=\"status\" placeholder=\"Selecciona\" [options]=\"config.settings.options\" [formControl]=\"control\"\r\n [showClear]=\"true\"></p-dropdown>","import { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormArray, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';\r\nimport { NgFor, NgIf } from '@angular/common';\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, NgFor, NgIf, 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>\r\n <div>\r\n <p-message>Construcción del componente de Selección, sirve para hacer una pregunta y mostrar varias opciones, ejemplo:</p-message>\r\n </div>\r\n\r\n <div>\r\n <span>En que año llegó cristobal colon a america?</span>\r\n <app-selector [config]=\"sampleConfig\"></app-selector>\r\n </div>\r\n\r\n <hr />\r\n\r\n <div>\r\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\r\n <input class=\"form-input\" type=\"text\" pInputText fullWidth formControlName=\"response\" placeholder=\"Respuesta Correcta...\" />\r\n <br />\r\n\r\n <input class=\"form-input\" type=\"\" pInputText fullWidth formControlName=\"hint\" placeholder=\"Escribe una pista para esta pregunta\" />\r\n\r\n <br />\r\n <input\r\n class=\"form-input\"\r\n type=\"text\"\r\n pInputText\r\n fullWidth\r\n formControlName=\"explanation\"\r\n placeholder=\"Excribe una explicación para la respuesta\" />\r\n\r\n <hr />\r\n <h6>Opciones</h6>\r\n\r\n <div class=\"form-group\" formArrayName=\"options\">\r\n <div\r\n style=\"display: flex; gap: 10px; align-items: center; justify-content: space-between; margin-bottom: 10px; flex-direction: column\"\r\n *ngFor=\"let item of optionsForm.controls; let i = index\">\r\n <div>\r\n <input type=\"text\" pInputText fullWidth [formControlName]=\"i\" />\r\n <p-button (click)=\"deleteFormArrayByIndex('options', i)\" icon=\"pi pi-times\" severity=\"danger\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <p-button (click)=\"pushControlToFormArray('options')\" label=\"Agregar Opción\" [text]=\"true\" severity=\"help\"></p-button>\r\n </form>\r\n\r\n <!-- <button nbButton (click)=\"isRendered = !isRendered\"> Renderizar </button> -->\r\n\r\n <div *ngIf=\"isRendered\">\r\n <!-- TODO: probably i need to pass some params -->\r\n <app-selector></app-selector>\r\n </div>\r\n </div>\r\n\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]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\r\n </div>\r\n</div>\r\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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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 { 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';\n// import { 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}\nexport interface LessonComponentConfiguration {\n id: string;\n component: LessonComponentEnum;\n settings: LessonCompSettings;\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}\nexport interface SpeakerCompConfiguration extends LessonComponentConfiguration {\n audio: AudioStorage;\n settings: LessonCompSettings & { voice: string };\n}\n\nexport interface LessonComponentInterface {\n config: LessonComponentConfiguration;\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// export enum LessonComponentEnum {\n// Selector = 'selector',\n// Speaker = 'speaker',\n// TextWriter = 'textWriter',\n// VerbSummary = 'verbSummary',\n// WordSummary = 'wordSummary',\n// TranslationSwitcher = 'translationSwitcher',\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 ImgStorageData extends StorageFile {\n fullPath: string; // path + name\n resolutions: any;\n resolution: string;\n}\n\nexport type LessonImage = ImgStorageData & { type: string };\n\n// export 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\nexport interface LessonComponentConfiguration {\n id: string;\n component: LessonComponentEnum;\n settings: LessonCompSettings;\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 components: Array<LessonComponentConfiguration>;\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\nexport interface LessonComponentConfiguration {\n id: string;\n component: LessonComponentEnum;\n settings: LessonCompSettings;\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\nexport interface SpeakerCompConfiguration extends LessonComponentConfiguration {\n audio: AudioStorage;\n settings: LessonCompSettings & { voice: string };\n}\n\nexport interface LessonComponentInterface {\n config: LessonComponentConfiguration;\n\n control?: UntypedFormControl;\n\n validate?(): boolean | null;\n evaluate?(): boolean | null;\n}\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 { NgFor, NgIf, 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\n\r\nimport { ILesson, ILessonWithTaken } from '../../lesson-mini-components/components/lessons.clases';\r\n\r\nenum EventCard {\r\n Edit = 'edit',\r\n Remove = 'remove',\r\n Take = 'take',\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: [NgFor, NgIf, DatePipe, ButtonModule, PopoverModule, SpeedDialModule],\r\n})\r\nexport class DcLessonCardComponent implements OnInit {\r\n @Input() lesson: ILessonWithTaken | ILesson | any;\r\n @Input() isAdmin: boolean = true;\r\n // TODO: i think i can refactor this to create actions, so only one event emitting actions.\r\n @Output() take: EventEmitter<any> = new EventEmitter();\r\n @Output() edit: EventEmitter<any> = new EventEmitter();\r\n @Output() remove: EventEmitter<any> = new EventEmitter();\r\n @Output() qr: EventEmitter<any> = 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.Remove);\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.Take);\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.edit.emit(this.lesson);\r\n break;\r\n case EventCard.Remove:\r\n this.remove.emit(this.lesson);\r\n break;\r\n case EventCard.Take:\r\n this.take.emit(this.lesson);\r\n break;\r\n case EventCard.Qr:\r\n this.qr.emit(this.lesson);\r\n break;\r\n }\r\n }\r\n}\r\n","<div class=\"card-container\">\r\n <p-speeddial\r\n class=\"dial-button\"\r\n [model]=\"items\"\r\n [radius]=\"70\"\r\n type=\"quarter-circle\"\r\n direction=\"down-left\"\r\n [buttonProps]=\"{ severity: 'primary', rounded: true, outlined: true, raised: true }\" />\r\n\r\n <div class=\"blog-card\">\r\n <div class=\"meta\">\r\n <div class=\"photo\" [style.backgroundImage]=\"'url(' + coverUrl + ')'\"></div>\r\n <ul class=\"details\">\r\n <li class=\"author\">\r\n <a>{{ lesson.authorEmail }}</a>\r\n </li>\r\n <li class=\"date\">{{ lesson.createdDate | date : 'dd/MM/yyyy' }}</li>\r\n <li class=\"tags\">\r\n <ul>\r\n <li *ngFor=\"let tag of lesson.tags\">\r\n <a>{{ tag }}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"description\">\r\n <h1>{{ lesson.title }}</h1>\r\n <p>{{ lesson.description }}</p>\r\n <div class=\"card-footer\">\r\n <div class=\"status-tags\">\r\n <span class=\"level-tag\">Nivel {{ lesson.level }}</span>\r\n <span *ngIf=\"lesson.taken?.status == 'passed'\" class=\"status-tag success\">Tomada</span>\r\n <span *ngIf=\"lesson.taken?.status == 'failed'\" class=\"status-tag danger\">Fallida</span>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <p-button label=\"Tomar lección\" (onClick)=\"eventCard(eventType.Take)\" severity=\"primary\"> </p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Output, Type, ViewChildren, QueryList, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\n\nimport { Subscription } from 'rxjs';\nimport { DCFilterBarComponent, ICustomFilter, PaginationBase, TOAST_ALERTS_TOKEN, ToastAlertsAbstractService } 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';\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: [CommonModule, RouterModule, DCFilterBarComponent, PaginatorModule, NgComponentOutlet],\n})\nexport class DCLessonListComponent extends PaginationBase implements OnInit, OnDestroy {\n @Input() public isAdmin: boolean = false;\n @Input() public customCardComponent?: Type<DcLessonCardComponent>;\n @Input() public customFilters: ICustomFilter[] = [];\n @Output() public onTakeLesson: EventEmitter<any> = new EventEmitter();\n @Output() public onEditLesson: EventEmitter<any> = new EventEmitter();\n @Output() public onRemoveLesson: EventEmitter<any> = new EventEmitter();\n @Output() public qr: EventEmitter<any> = new EventEmitter();\n @Output() public onNewLesson: EventEmitter<any> = new EventEmitter();\n @ViewChildren('outlet') outlets!: QueryList<NgComponentOutlet>;\n\n public cardComponent: Type<DcLessonCardComponent> = null;\n private 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.take.subscribe((lesson: any) => {\n this.takeLesson(lesson);\n }),\n instance.edit.subscribe((lesson: any) => {\n this.editLesson(lesson);\n }),\n instance.remove.subscribe((lesson: any) => {\n this.removeLesson(lesson);\n }),\n instance.qr.subscribe((lesson: any) => {\n this.generateQR(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 goToLessonDetails(id: string) {\n // this.router.navigate([`${RouteNames.App}/${RouteNames.LessonsV2}/details/${id}`]);\n alert('TODO: goToLessonDetails');\n }\n\n public search(searchText: string) {\n this.filterConfig['text'] = searchText;\n this.getPaginatedLessons(this.filterConfig);\n }\n\n public generateQR(lesson: any) {\n this.qr.emit(lesson);\n }\n\n public takeLesson(lesson: any) {\n this.onTakeLesson.emit(lesson);\n }\n\n public editLesson(lesson: any) {\n this.onEditLesson.emit(lesson);\n }\n\n public 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.onNewLesson.emit();\n }\n\n public filterChanged(filters: any) {\n console.log('filterChanged in dc-lesson-list', filters);\n this.filterConfig = filters;\n this.filterConfig.returnProps = returnProperties;\n\n this.getPaginatedLessons(this.filterConfig);\n }\n\n protected override loadData(): Promise<void> {\n return this.getPaginatedLessons(this.filterConfig);\n }\n}\n","<dc-filter-bar [customFilters]=\"customFilters\" (onSearch)=\"search($event)\" (onFilterChange)=\"filterChanged($event)\" (onNew)=\"newLesson()\"></dc-filter-bar>\n\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 isAdmin: isAdmin\n }\">\n </ng-container>\n } } @else {\n <p>No se encontraron lecciones disponibles</p>\n }\n</div>\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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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 { Component, ComponentRef, ElementRef, Inject, Input, OnInit, Renderer2, ViewChild, ViewContainerRef } from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgIf, KeyValuePipe } from '@angular/common';\n\nimport { ButtonModule } from 'primeng/button';\n\nimport {\n getLessonComponentClass,\n ILesson,\n LangCodeDescription,\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 { ComponentWithForm } from '../../lesson-mini-components/components/ComponentWithForm';\nimport {\n CONVERSATION_AI_TOKEN,\n AgentCardsAbstractService,\n DCConversationPromptBuilderService,\n DCChatComponent,\n IAgentCard,\n ConversationType,\n TextEngines,\n IMiniAgentCard,\n} from '@dataclouder/ngx-agent-cards';\n\nimport { DrawerModule } from 'primeng/drawer';\n\n// TODO: i need strategy to create prompt dinamically dpending on user language and level.\nconst DefaultLessonAgentCard: 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\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: [NgIf, KeyValuePipe, ButtonModule, DCChatComponent, DrawerModule],\n})\nexport class DCLessonRendererComponent implements OnInit {\n @Input() public lesson: ILesson;\n @Input() public test: boolean;\n\n @ViewChild('dynamicLesson', { static: true }) dynamicLesson: ElementRef;\n\n public lessonId: string = this.activatedRoute.snapshot.paramMap.get('id');\n public dataText: string = `<h1>Nueva lección </h1> <p> Texto aquí</p>`;\n public components: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n public mainForm: UntypedFormGroup = new UntypedFormGroup({});\n public imageCover: string;\n\n public chatVisible: boolean = false;\n\n constructor(\n private renderer: Renderer2,\n private viewContainerRef: ViewContainerRef,\n private activatedRoute: ActivatedRoute,\n @Inject(TOAST_ALERTS_TOKEN) private toastrService: ToastAlertsAbstractService,\n @Inject(LESSONS_TOKEN) private lessonService: LessonsAbstractService,\n @Inject(CONVERSATION_AI_TOKEN) private agentCardsService: AgentCardsAbstractService,\n private conversationBuilder: DCConversationPromptBuilderService, // private userService: UserService,\n ) {}\n\n ngOnInit(): void {\n this.initLesson();\n }\n\n public async initLesson() {\n await this.getLessonIfId();\n this.renderLesson();\n }\n\n public async getLessonIfId() {\n if (this.lesson) {\n return;\n }\n\n if (!this.lessonId) {\n return;\n }\n this.dataText = `<h1>Cargando </h1> <p>...</p>`;\n this.lesson = await this.lessonService.getLesson(this.lessonId);\n console.log('lesson', this.lesson);\n }\n\n private renderLesson(): void {\n this.imageCover = this.lesson.media?.images?.find((img) => img.type === 'cover')?.url;\n\n console.log('imageCover', this.imageCover);\n // Pasos para renderizar,\n // 0) Usar la expresión regular para sustitur los componentes por un span con un id\n // 1) En el mismo proceso de remplazar se contruyen dinamicamente los componentes\n // 2) Agregar componentes al DOM en su respectivo spanid\n\n // TODO Optimización, es posible agregar el componente al DOM en el mismo paso en que se crea el span?\n\n const r1 = new RegExp('~(.+?)~', 'g');\n let count = 0;\n this.components = {}; //Si se destruye la lección, se destruyen todos los componentes dinamicis? tODO necesito reiniciar?\n\n const lessonHtml = this.lesson.textCoded.replace(r1, (_matching, jsonCoded) => {\n const componentName = `dynamicComp${count}`;\n count++;\n const componentRef = this.createComponentReferenceWithJson(jsonCoded);\n if (!componentRef) {\n return null;\n }\n this.components[componentName] = componentRef;\n if (componentRef.instance.control) {\n // Algunos componentes tienen formularios, estos se copian en mainForm como un unico control\n this.mainForm.addControl(componentName, componentRef.instance.control);\n this.mainForm.get(componentName).setValidators([Validators.required]);\n }\n return `<span id=\"${componentName}\"></span>`;\n });\n\n this.dynamicLesson.nativeElement.innerHTML = lessonHtml;\n\n for (let compName of Object.keys(this.components)) {\n // Interpolar componentes dentro del lugar correspondiente\n const elementRef = document.getElementById(compName);\n this.addComponentToNode(this.components[compName], elementRef);\n }\n }\n\n private addComponentToNode(componentRef: ComponentRef<LessonComponentInterface>, nodeDOM: any) {\n this.renderer.appendChild(nodeDOM, componentRef.location.nativeElement);\n }\n\n private createComponentReferenceWithJson(json: string): ComponentRef<LessonComponentInterface> {\n const lessonCodedConfig: LessonComponentConfiguration = JSON.parse(json);\n\n let componentConfig;\n if (this.lesson.components && lessonCodedConfig.id) {\n // TODO: retomar, Creo que esta linea es para reutilziar los componentes por id, pero si no tiene,\n componentConfig = this.lesson.components.find((comp) => comp.id === lessonCodedConfig.id);\n }\n\n const LessonClass = getLessonComponentClass(<LessonComponentsType>lessonCodedConfig.component);\n\n if (!LessonClass) {\n console.error('No existe este componente, revisa el codigo insertado' + json);\n // throw new Error('No existe este com revisa el codigo insertado');\n return null;\n }\n\n const componentRef = this.viewContainerRef.createComponent<LessonComponentInterface>(LessonClass);\n componentRef.instance.config = componentConfig || lessonCodedConfig;\n return componentRef;\n }\n\n public async evaluateForms() {\n if (!this.mainForm.valid) {\n for (let controlName of Object.keys(this.mainForm.controls)) {\n this.components[controlName].instance.validate();\n }\n this.toastrService.warn({ subtitle: 'Por favor completa todos los formularios', title: 'Espera' });\n return;\n }\n\n const rates = { correct: 0, incorrect: 0, score: 0 };\n\n for (let controlName of Object.keys(this.mainForm.controls)) {\n const instance = this.components[controlName].instance;\n if (instance instanceof ComponentWithForm) {\n // TODO: quizá no necesito validar instanceof ComponentWithForm ya que se garantiza que todo en mainform tiene un control.\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('Validation method for instance is failing', instance);\n }\n }\n }\n if (this.test) {\n return;\n }\n rates.score = rates.correct / (rates.correct + rates.incorrect);\n\n const status = rates.score > 0.7 ? 'passed' : 'failed';\n\n const takenLesson = { lessonId: this.lesson.id, status: status, score: rates.score };\n // TODO: implementar el servicio para guardar la lección tomada\n // await this.lessonService.saveTakenLesson(takenLesson);\n\n if (status === 'passed') {\n this.toastrService.success({ subtitle: 'Aprobaste, se guardó tu calificación', title: 'Muy bien' });\n } else {\n this.toastrService.warn({ subtitle: 'Revisa tus respuestas', title: 'Algunas preguntas no son correctas' });\n }\n }\n\n public agentMasterLesson: IAgentCard;\n\n public evaluatorAgentCard: IMiniAgentCard;\n\n public async startAI() {\n // TODO: para refactorizar y utilizar las lecciones en otro componente, voy a necesitar pasar esto al servicio abstracto asi cada aplicación lo implementa.\n const lessonText = this.lessonService.extractTextFromHtml(this.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. \n Ask friendly questions throughout the conversation and help them learn English. Here is the lesson text the user just read:\n ${lessonText}\n In your next reply, start by greeting the user, asking something about the lesson, and then continue the conversation.`;\n\n // const user = this.userService.getUserSnapshot();\n alert('i need to fix this, need to find a way to pass user throug the service not the library, i think i already started something.');\n const user = {} as any;\n const targetLevel = parseInt(user.languageProgress[user.settings.targetLanguage].level);\n\n const langTargetDesc = LangCodeDescription[user.settings.targetLanguage];\n const langBaseDesc = LangCodeDescription[user.settings.baseLanguage];\n\n let userInformationPrompt = `\n User information: user name is ${user.personalData.firstname} ${user.personalData.lastname}, their native language is ${langBaseDesc}, \n and right now is learning ${langTargetDesc}, their current level is ${user.languageProgress[user.settings.targetLanguage].level} out of 5.`;\n\n if (targetLevel <= 2) {\n userInformationPrompt += `\\nUser is a beginner in english, always reply in ${langBaseDesc}, but during the conversation use simple words in ${langTargetDesc}`;\n }\n\n console.log('lessonText', lessonText);\n\n const lessonAgentCard: IAgentCard = DefaultLessonAgentCard;\n lessonAgentCard.characterCard.data.scenario = scenario;\n lessonAgentCard.characterCard.data.post_history_instructions += `\\n${userInformationPrompt}`;\n this.agentMasterLesson = lessonAgentCard;\n\n this.evaluatorAgentCard = this.getDefualtLessonEvaluatorAgentCard(lessonText);\n this.chatVisible = true;\n }\n\n private getDefualtLessonEvaluatorAgentCard(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","<div>\r\n <!-- <div *ngIf=\"lesson\">\r\n {lesson.title }} \r\n <br>\r\n <img [src]=\"imageCover\" alt=\"\">\r\n </div> -->\r\n\r\n <div #dynamicLesson class=\"targetclass\">\r\n <ng-template #target></ng-template>\r\n </div>\r\n</div>\r\n\r\n<br />\r\n<div style=\"display: flex; gap: 10px\">\r\n <div *ngIf=\"(mainForm.controls | keyvalue)?.length\">\r\n <p-button label=\"Calificar Lección\" icon=\"pi pi-check-circle\" (click)=\"evaluateForms()\" [rounded]=\"true\"></p-button>\r\n </div>\r\n\r\n <p-button icon=\"pi pi-verified\" [rounded]=\"true\" (click)=\"startAI()\" label=\"Repasar con IA\" />\r\n</div>\r\n<br /><br />\r\n\r\n@if(chatVisible) {\r\n<p-drawer header=\"Conversation\" [(visible)]=\"chatVisible\" position=\"bottom\" styleClass=\"app-bottom-overlay\">\r\n <dc-chat [agentCard]=\"agentMasterLesson\" [evaluatorAgentCard]=\"evaluatorAgentCard\"></dc-chat>\r\n</p-drawer>\r\n}\r\n","import { ChangeDetectorRef, Component, ComponentRef, ElementRef, Inject, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nimport BalloonEditor from '@ckeditor/ckeditor5-build-balloon-block';\nimport { CKEditorModule } from '@ckeditor/ckeditor5-angular';\n// PrimeNG\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { SpeedDialModule } from 'primeng/speeddial';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SplitterModule } from 'primeng/splitter';\nimport { TooltipModule } from 'primeng/tooltip';\n// Dataclouder\nimport { AspectType, CropImageSettings, 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';\nimport {\n LessonComponentEnum,\n LessonImage,\n ILesson,\n LessonComponentInterface,\n LESSONS_TOKEN,\n LessonsAbstractService,\n} from '../../lesson-mini-components/components/lessons.clases';\nimport { LessonComponentBuilders } from '../../lesson-mini-components/components/lessons.clases';\nimport { FlagLanguagePipe, LangDescTranslationPipe } from '../../../models/lessons.pipes';\nimport { NOTION_SERVICE_TOKEN, NotionAbstractService, NotionExportType } from '../../../models/notion.models';\nimport { MenuItem } from 'primeng/api';\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 FormsModule,\n CKEditorModule,\n CropperComponentModal,\n ButtonModule,\n InputTextModule,\n SplitterModule,\n DCLessonRendererComponent,\n LangDescTranslationPipe,\n FlagLanguagePipe,\n TooltipModule,\n SpeedDialModule,\n ],\n})\nexport class DCLessonEditorComponent implements OnInit {\n // public get activatedRoute(): ActivatedRoute {\n // return this._activatedRoute;\n // }\n // public set activatedRoute(value: ActivatedRoute) {\n // this._activatedRoute = value;\n // }\n @ViewChild('target', { read: ViewContainerRef }) target: ViewContainerRef;\n @ViewChild('dhtml', { static: true }) dhtml: ElementRef;\n\n public editor = BalloonEditor;\n public coverStorageSettings: StorageImageSettings = {\n path: 'lessons/covers',\n fileName: 'cover',\n cropSettings: { resizeToWidth: 850, aspectRatio: AspectType.RectangleLarge, resolutions: [ResolutionType.Medium] },\n };\n\n public lessonComponentEnum = LessonComponentEnum;\n public lessonId: string = this._activatedRoute.snapshot.paramMap.get('id');\n public lesson: any = { textCoded: `<h1>Nueva lección </h1> <p> Texto aquí</p>`, tags: [] };\n public components: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n public isRendered: boolean = false;\n public cover: string = '';\n public isCropperVisible = false;\n public items: MenuItem[];\n\n constructor(\n @Inject(LESSONS_TOKEN) private lessonService: LessonsAbstractService,\n @Inject(TOAST_ALERTS_TOKEN) private toastService: ToastAlertsAbstractService,\n @Inject(NOTION_SERVICE_TOKEN) private notionService: NotionAbstractService,\n private _activatedRoute: ActivatedRoute,\n private router: Router,\n private cdr: ChangeDetectorRef,\n private dialogService: DialogService,\n ) {}\n\n ngOnInit(): void {\n this.getLessonIfId();\n\n this.items = [\n {\n tooltipOptions: { tooltipLabel: 'Reparar con IA: Repara la lección con IA', tooltipPosition: 'bottom' },\n icon: 'pi pi-magic',\n command: () => this.generateByAI(),\n },\n {\n tooltipOptions: { tooltipLabel: 'Selector: Agrega un selector con multiples opciones', tooltipPosition: 'bottom' },\n icon: 'pi pi-caret-down',\n command: () => this.openComponentBuilder('selector'),\n },\n {\n tooltipOptions: { tooltipLabel: 'Hablar: Para que una palabra o frase sea reproducible', tooltipPosition: 'bottom' },\n icon: 'pi pi-megaphone',\n command: () => this.openComponentBuilder('speaker'),\n },\n {\n tooltipOptions: {\n tooltipLabel: 'Entrada de texto: Escribe una respuesta en un cuadro de texto',\n tooltipPosition: 'bottom',\n },\n icon: 'pi pi-pencil',\n command: () => this.openComponentBuilder('textWriter'),\n },\n {\n tooltipOptions: { tooltipLabel: 'Verbo: Para ver datos de un verbo', tooltipPosition: 'bottom' },\n icon: 'pi pi-eye',\n command: () => this.openComponentBuilder('verbSummary'),\n },\n {\n tooltipOptions: { tooltipLabel: 'Palabra: Para ver datos de una palabra', tooltipPosition: 'bottom' },\n icon: 'pi pi-file-word',\n command: () => this.openComponentBuilder('wordSummary'),\n },\n ];\n }\n\n public async getLessonIfId(): Promise<void> {\n if (!this.lessonId) {\n this.cover = `${GradientCss}, url(\"/assets/images/default_banner.webp\")`;\n return;\n }\n this.lesson = await this.lessonService.getLesson(this.lessonId);\n console.log('lesson', this.lesson);\n if (!this.lesson) {\n this.toastService.warn({ title: 'No se encontró la lección', subtitle: 'Quiza el id es incorrecto' });\n }\n this.togleRender();\n this.updateCover();\n }\n\n public updateCover(): void {\n const cover: LessonImage = this.lesson.media?.images?.find((img) => img.type === 'cover');\n if (cover) {\n this.cover = `${GradientCss}, url('${cover.url}')`;\n } else {\n this.cover = `${GradientCss}, url(\"/assets/images/default_banner.webp\")`;\n }\n this.cdr.detectChanges();\n }\n\n public onTagRemove(tag: any): void {\n this.lesson.tags = this.lesson.tags.filter((text) => text !== tag.text);\n }\n\n public onTagAdd(tag: { value: string; input: any }): void {\n if (tag.value) {\n this.lesson.tags.push(tag.value);\n }\n tag.input.nativeElement.value = '';\n }\n\n public async saveLesson(event: Event = null): Promise<ILesson> {\n if (event) {\n event.preventDefault();\n }\n // TODO: Optimización importante, guardar una lección guarda todos los datos de nuevo, y no solo los que se modificaron, encontrar una forma de optimizar.\n const lesson = await this.lessonService.postLesson(this.lesson);\n if (!this.lessonId) {\n this.toastService.success({ title: 'Se creó la lección', subtitle: 'Éxito' });\n this.router.navigate([lesson.id], { relativeTo: this._activatedRoute });\n } else {\n this.toastService.info({ title: 'Se guadarón los cambios en la lección', subtitle: 'Guardado' });\n this.lesson = lesson;\n this.validateAudios();\n }\n\n this.togleRender();\n return lesson;\n }\n\n public async validateAudios() {\n if (!this.lesson.components) {\n return;\n }\n // al menos un audio sin generar.\n // agregar más condigciones después\n // this.lesson.components.forEach((component: SpeakerCompConfiguration) => {\n // if (component.component === 'speaker') {\n // if (component.settings.voice && !component.audio) {\n // // this.toastrService.warn('Se encontraron audios por generar', 'Será rápido');\n // // TODO call backend.\n // this.lessonService.generateAudiosForLesson(this.lesson.id).then((res) => {\n // // this.toastrService.success('Se generaron los audios', 'Listo');\n // console.log(res);\n // });\n // return;\n // }\n // }\n // });\n }\n\n public togleRender(_event: any = null): void {\n this.isRendered = false;\n setTimeout(() => {\n this.isRendered = true;\n this.cdr.detectChanges();\n }, 400);\n this.cdr.detectChanges();\n }\n\n public openComponentBuilder(type: string): Observable<any> {\n return this.dialogService.open(LessonComponentBuilders[type], { width: '550px', header: 'Agregar componente', closable: true }).onClose.pipe();\n }\n\n public uploadCover(imageUploaded: any) {\n const image = { type: 'cover', ...imageUploaded };\n\n if (!this.lesson.media) {\n // puede que no exista media\n this.lesson.media = {};\n this.lesson.media.images = [image];\n } else {\n // solo sustituir el cover si ya existe, como siempre utilizo el mismo nombre, no tengo que eliminar la anterior si actualizo.\n // const currentCover = this.lesson.media.images.find((img) => img.type === 'cover');\n\n this.lesson.media.images = this.lesson.media.images.filter((img) => img.type !== 'cover');\n this.lesson.media.images.push(image);\n }\n this.updateCover();\n this.saveLesson();\n }\n\n openCropper() {\n this.isCropperVisible = true;\n }\n\n isLoadingLesson = false;\n public async generateByAI() {\n this.isLoadingLesson = true;\n try {\n await this.saveLesson();\n await this.lessonService.postGenerateByAI(this.lesson.id);\n await this.getLessonIfId();\n } finally {\n this.isLoadingLesson = false;\n }\n }\n\n public onImageSelected(event: any) {\n console.log(event);\n }\n\n public async onImageUploaded(event: any) {\n this.uploadCover(event);\n this.cdr.detectChanges();\n }\n\n public async importFromNotion() {\n let notionPageId: string;\n if (this.lesson?.extras?.notionPageId) {\n const response = confirm(`Ya tenemos el id ${this.lesson.extras?.notionPageId} ¿Quieres usar este id?`);\n if (!response) {\n return;\n }\n notionPageId = this.lesson.extras?.notionPageId;\n } else {\n const response = prompt('Ingresa el url de notion para importar la lección, se guardará este id');\n if (!response) {\n return;\n }\n notionPageId = this.extractNotionPageId(response);\n if (!notionPageId) return;\n this.linkWithNotion(notionPageId);\n }\n\n this.toastService.info({ title: 'Importando lección...', subtitle: 'Espera unos segundos' });\n\n const md = await this.notionService.getPageInSpecificFormat(notionPageId, NotionExportType.HTML);\n console.log(md);\n this.lesson.textCoded = md.content;\n this.togleRender();\n this.toastService.success({ title: 'Listo', subtitle: 'La lección se importó correctamente' });\n }\n\n extractNotionPageId(url: string) {\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 }\n return notionId;\n }\n\n public async linkWithNotion(notionPageId: string) {\n const extra = this.lesson.extras || {};\n extra.notionPageId = notionPageId;\n\n await this.lessonService.postLesson({ ...this.lesson, extras: extra });\n this.toastService.success({ title: 'Listo', subtitle: 'Se enlazó la lección con Notion' });\n }\n\n public async improveNotionWithAI() {\n const md = await this.notionService.getPageInSpecificFormat(this.lesson.extras.notionPageId, NotionExportType.HTML);\n console.log(md);\n\n // this.lesson.textCoded = md.content;\n\n // this.togleRender();\n // this.toastService.success({ title: 'Listo', subtitle: 'La lección se mejoró con AI' });\n }\n}\n","<div style=\"position: relative; margin-bottom: 20px\">\n <div class=\"header-cover\" [style.background-image]=\"cover\"></div>\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<div>\n <div>\n <div>\n <div style=\"display: flex; gap: 10px; padding: 10px\">\n <p-button label=\"Guardar\" severity=\"primary\" (click)=\"saveLesson()\" />\n\n <p-button label=\"Previsualizar\" severity=\"secondary\" (click)=\"togleRender()\" />\n <p-button label=\"Importar de Notion\" severity=\"help\" (click)=\"importFromNotion()\" />\n <p-button label=\"Mejorar Notion con AI\" severity=\"help\" (click)=\"improveNotionWithAI()\" />\n </div>\n\n <div>\n <input pInputText style=\"width: 100%\" [(ngModel)]=\"lesson.title\" type=\"text\" placeholder=\"Agrega un título\" />\n </div>\n <div style=\"margin-top: 4px\">\n <input pInputText style=\"width: 100%\" [(ngModel)]=\"lesson.description\" type=\"text\" placeholder=\"Agrega una descripción\" />\n </div>\n\n <div style=\"display: flex; align-items: center\">\n <br />\n <br />\n <input pInputText style=\"flex: auto\" [(ngModel)]=\"lesson.prompt\" type=\"text\" placeholder=\"Prompt\" />\n <p-button severity=\"primary\" [disabled]=\"isLoadingLesson\" (click)=\"generateByAI()\"> Generar </p-button>\n </div>\n\n <div>\n <label class=\"checkbox-container\">\n <input type=\"checkbox\" [(ngModel)]=\"lesson.isPublished\" title=\"Cuando termines la edición marca esta casilla\" />\n <span class=\"checkmark\"></span>\n Lección publicada\n </label>\n <br />\n\n <input pInputText [(ngModel)]=\"lesson.level\" type=\"number\" placeholder=\"Level\" />\n </div>\n\n <div>\n {{ lesson.baseLang | flagEmoji }} -> {{ lesson.targetLang | flagEmoji }} Lección para hablantes de {{ lesson.baseLang | langDesc : 'es' }} que aprenden\n {{ lesson.targetLang | langDesc : 'es' }}\n </div>\n </div>\n </div>\n\n <hr />\n <span>Componentes: </span>\n <div style=\"display: flex; gap: 10px\">\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.Selector)\" pTooltip=\"Agrega un selector con multiples opciones\">\n Selector\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.Speaker)\" pTooltip=\"Para que una palabra o frase sea reproducible\">\n Speaker\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.TextWriter)\" pTooltip=\"Escribe una respuesta en un cuadro de texto\">\n Text\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.VerbSummary)\" pTooltip=\"Muestra la información de un verbo\"> Text </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.VerbSummary)\" pTooltip=\"Muestra la información de un verbo\"> Verb </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.WordSummary)\" pTooltip=\"Muestra la información de una palabra\">\n Palabra\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.TranslationSwitcher)\" pTooltip=\"Muestra el texto pero al pica cambia de idioma\">\n Traducción\n </p-button>\n </div>\n\n <hr />\n\n <p-splitter [style]=\"{ height: '80vh' }\" styleClass=\"mb-8\">\n <ng-template pTemplate>\n <ckeditor\n (keydown.control.s)=\"saveLesson($event)\"\n (keydown.control.space)=\"togleRender($event)\"\n class=\"text-editor\"\n [editor]=\"editor\"\n [(ngModel)]=\"lesson.textCoded\">\n </ckeditor>\n </ng-template>\n\n <ng-template pTemplate>\n @if (isRendered) {\n <dc-lesson-renderer class=\"text-editor\" [lesson]=\"lesson\" [test]=\"true\"></dc-lesson-renderer>\n }\n </ng-template>\n </p-splitter>\n\n <div class=\"float-button\">\n <p-speeddial [model]=\"items\" [radius]=\"120\" type=\"quarter-circle\" direction=\"up-left\" />\n\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</div>\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","i4","i7","i10"],"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/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/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/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\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\n@Component({\r\n selector: 'app-component-builder',\r\n template: '<div>no template</div>',\r\n})\r\nexport class ComponentBuilder {\r\n constructor(\r\n protected formBuilder: FormBuilder,\r\n // protected toastrService: ToastService, // protected ref: NbDialogRef<ComponentBuilder>,\r\n protected ref: DynamicDialogRef,\r\n ) {}\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 private getCode(): string {\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 id = Math.random().toString(36).substring(7);\r\n const code: LessonComponentConfiguration = { id: id, component: this.questionType, settings: { ...data } as unknown as LessonCompSettings };\r\n return `~${JSON.stringify(code)}~`;\r\n }\r\n\r\n public showCode() {\r\n const code = this.getCode();\r\n alert(code);\r\n }\r\n\r\n public async copyToClipboard() {\r\n const code = this.getCode();\r\n await navigator.clipboard.writeText(code);\r\n // this.toastrService.info('Control + V para pegar', 'Se copió al portapapeles');\r\n // this.ref.close();\r\n this.ref.close(code);\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 { DropdownModule } from 'primeng/dropdown';\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, DropdownModule],\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-dropdown [class]=\"status\" placeholder=\"Selecciona\" [options]=\"config.settings.options\" [formControl]=\"control\"\r\n [showClear]=\"true\"></p-dropdown>","import { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormArray, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';\r\nimport { NgFor, NgIf } from '@angular/common';\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, NgFor, NgIf, 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>\r\n <div>\r\n <p-message>Construcción del componente de Selección, sirve para hacer una pregunta y mostrar varias opciones, ejemplo:</p-message>\r\n </div>\r\n\r\n <div>\r\n <span>En que año llegó cristobal colon a america?</span>\r\n <app-selector [config]=\"sampleConfig\"></app-selector>\r\n </div>\r\n\r\n <hr />\r\n\r\n <div>\r\n <form class=\"builder-form\" [formGroup]=\"formGroup\">\r\n <input class=\"form-input\" type=\"text\" pInputText fullWidth formControlName=\"response\" placeholder=\"Respuesta Correcta...\" />\r\n <br />\r\n\r\n <input class=\"form-input\" type=\"\" pInputText fullWidth formControlName=\"hint\" placeholder=\"Escribe una pista para esta pregunta\" />\r\n\r\n <br />\r\n <input\r\n class=\"form-input\"\r\n type=\"text\"\r\n pInputText\r\n fullWidth\r\n formControlName=\"explanation\"\r\n placeholder=\"Excribe una explicación para la respuesta\" />\r\n\r\n <hr />\r\n <h6>Opciones</h6>\r\n\r\n <div class=\"form-group\" formArrayName=\"options\">\r\n <div\r\n style=\"display: flex; gap: 10px; align-items: center; justify-content: space-between; margin-bottom: 10px; flex-direction: column\"\r\n *ngFor=\"let item of optionsForm.controls; let i = index\">\r\n <div>\r\n <input type=\"text\" pInputText fullWidth [formControlName]=\"i\" />\r\n <p-button (click)=\"deleteFormArrayByIndex('options', i)\" icon=\"pi pi-times\" severity=\"danger\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <p-button (click)=\"pushControlToFormArray('options')\" label=\"Agregar Opción\" [text]=\"true\" severity=\"help\"></p-button>\r\n </form>\r\n\r\n <!-- <button nbButton (click)=\"isRendered = !isRendered\"> Renderizar </button> -->\r\n\r\n <div *ngIf=\"isRendered\">\r\n <!-- TODO: probably i need to pass some params -->\r\n <app-selector></app-selector>\r\n </div>\r\n </div>\r\n\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]=\"formGroup.invalid\" label=\"Mostrar\" [rounded]=\"true\" severity=\"secondary\"></p-button>\r\n </div>\r\n</div>\r\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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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 { 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';\n// import { 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}\nexport interface LessonComponentConfiguration {\n id: string;\n component: LessonComponentEnum;\n settings: LessonCompSettings;\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}\nexport interface SpeakerCompConfiguration extends LessonComponentConfiguration {\n audio: AudioStorage;\n settings: LessonCompSettings & { voice: string };\n}\n\nexport interface LessonComponentInterface {\n config: LessonComponentConfiguration;\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// export enum LessonComponentEnum {\n// Selector = 'selector',\n// Speaker = 'speaker',\n// TextWriter = 'textWriter',\n// VerbSummary = 'verbSummary',\n// WordSummary = 'wordSummary',\n// TranslationSwitcher = 'translationSwitcher',\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 ImgStorageData extends StorageFile {\n fullPath: string; // path + name\n resolutions: any;\n resolution: string;\n}\n\nexport type LessonImage = ImgStorageData & { type: string };\n\n// export 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\nexport interface LessonComponentConfiguration {\n id: string;\n component: LessonComponentEnum;\n settings: LessonCompSettings;\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 components: Array<LessonComponentConfiguration>;\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\nexport interface LessonComponentConfiguration {\n id: string;\n component: LessonComponentEnum;\n settings: LessonCompSettings;\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\nexport interface SpeakerCompConfiguration extends LessonComponentConfiguration {\n audio: AudioStorage;\n settings: LessonCompSettings & { voice: string };\n}\n\nexport interface LessonComponentInterface {\n config: LessonComponentConfiguration;\n\n control?: UntypedFormControl;\n\n validate?(): boolean | null;\n evaluate?(): boolean | null;\n}\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 { NgFor, NgIf, 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\n\r\nenum EventCard {\r\n Edit = 'edit',\r\n Remove = 'remove',\r\n Take = 'take',\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: [NgFor, NgIf, DatePipe, ButtonModule, PopoverModule, SpeedDialModule, CardModule],\r\n})\r\nexport class DcLessonCardComponent implements OnInit {\r\n @Input() lesson: ILessonWithTaken | ILesson | any;\r\n @Input() isAdmin: boolean = true;\r\n // TODO: i think i can refactor this to create actions, so only one event emitting actions.\r\n @Output() take: EventEmitter<any> = new EventEmitter();\r\n @Output() edit: EventEmitter<any> = new EventEmitter();\r\n @Output() remove: EventEmitter<any> = new EventEmitter();\r\n @Output() qr: EventEmitter<any> = 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.Remove);\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.Take);\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.edit.emit(this.lesson);\r\n break;\r\n case EventCard.Remove:\r\n this.remove.emit(this.lesson);\r\n break;\r\n case EventCard.Take:\r\n this.take.emit(this.lesson);\r\n break;\r\n case EventCard.Qr:\r\n this.qr.emit(this.lesson);\r\n break;\r\n }\r\n }\r\n}\r\n","<div class=\"card-container\">\r\n <p-speeddial\r\n class=\"dial-button\"\r\n [model]=\"items\"\r\n [radius]=\"70\"\r\n type=\"quarter-circle\"\r\n direction=\"down-left\"\r\n [buttonProps]=\"{ severity: 'primary', rounded: true, outlined: true, raised: true }\" />\r\n\r\n <p-card>\r\n <div class=\"lesson-card\">\r\n <div class=\"photo\">\r\n <img [src]=\"coverUrl\" alt=\"\" />\r\n </div>\r\n\r\n <span class=\"date\">{{ lesson.createdDate | date : 'dd/MM/yyyy' }}</span>\r\n\r\n <div class=\"description\">\r\n <h1>{{ lesson.title }}</h1>\r\n <p>{{ lesson.description }}</p>\r\n <div class=\"card-footer\">\r\n <div class=\"status-tags\">\r\n <span class=\"level-tag\">Nivel {{ lesson.level }}</span>\r\n <span *ngIf=\"lesson.taken?.status == 'passed'\" class=\"status-tag success\">Tomada</span>\r\n <span *ngIf=\"lesson.taken?.status == 'failed'\" class=\"status-tag danger\">Fallida</span>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <p-button label=\"Tomar lección\" (onClick)=\"eventCard(eventType.Take)\" severity=\"primary\"> </p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n","import { ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Output, Type, ViewChildren, QueryList, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\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 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: [CommonModule, RouterModule, DCFilterBarComponent, PaginatorModule, NgComponentOutlet, QuickTableComponent],\n})\nexport class DCLessonListComponent extends PaginationBase implements OnInit, OnDestroy {\n @Input() public isAdmin: boolean = false;\n @Input() public customCardComponent?: Type<DcLessonCardComponent>;\n @Input() public customFilters: ICustomFilter[] = [];\n @Input() public viewType: 'table' | 'card' = 'card';\n\n @Input() public override actions: MenuItem[] = TableViewActions;\n\n @Output() public onTakeLesson: EventEmitter<any> = new EventEmitter();\n @Output() public onEditLesson: EventEmitter<any> = new EventEmitter();\n @Output() public onRemoveLesson: EventEmitter<any> = new EventEmitter();\n @Output() public qr: EventEmitter<any> = new EventEmitter();\n @Output() public onNewLesson: EventEmitter<any> = new EventEmitter();\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.take.subscribe((lesson: any) => {\n this.takeLesson(lesson);\n }),\n instance.edit.subscribe((lesson: any) => {\n this.editLesson(lesson);\n }),\n instance.remove.subscribe((lesson: any) => {\n this.removeLesson(lesson);\n }),\n instance.qr.subscribe((lesson: any) => {\n this.generateQR(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 goToLessonDetails(id: string) {\n // this.router.navigate([`${RouteNames.App}/${RouteNames.LessonsV2}/details/${id}`]);\n alert('TODO: goToLessonDetails');\n }\n\n public search(searchText: string) {\n this.filterConfig['text'] = searchText;\n this.getPaginatedLessons(this.filterConfig);\n }\n\n private generateQR(lesson: any) {\n this.qr.emit(lesson);\n }\n\n private takeLesson(lesson: any) {\n this.onTakeLesson.emit(lesson);\n }\n\n private editLesson(lesson: any) {\n this.onEditLesson.emit(lesson);\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.onNewLesson.emit();\n }\n\n public filterChanged(filters: any) {\n console.log('filterChanged in dc-lesson-list', filters);\n this.filterConfig = filters;\n this.filterConfig.returnProps = returnProperties;\n\n this.getPaginatedLessons(this.filterConfig);\n }\n\n protected override loadData(): Promise<void> {\n return this.getPaginatedLessons(this.filterConfig);\n }\n\n public override doAction(event: { item: any; action: MenuItem }) {\n if (event.action.label === 'Select') {\n this.takeLesson(event.item);\n } else if (event.action.label === 'QR') {\n this.generateQR(event.item);\n } else if (event.action.label === 'Edit') {\n this.editLesson(event.item);\n } else if (event.action.label === 'Delete') {\n this.removeLesson(event.item);\n }\n }\n}\n","<dc-filter-bar [customFilters]=\"customFilters\" (onSearch)=\"search($event)\" (onFilterChange)=\"filterChanged($event)\" (onNew)=\"newLesson()\"></dc-filter-bar>\n\n@if(viewType === 'table') {\n<app-quick-table [columns]=\"columns\" [tableData]=\"lessons\" [actions]=\"actions\" (onAction)=\"doAction($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 isAdmin: isAdmin\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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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 { Component, ComponentRef, ElementRef, Inject, Input, OnInit, Renderer2, ViewChild, ViewContainerRef } from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgIf, KeyValuePipe } from '@angular/common';\n\nimport { ButtonModule } from 'primeng/button';\n\nimport {\n getLessonComponentClass,\n ILesson,\n LangCodeDescription,\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 { ComponentWithForm } from '../../lesson-mini-components/components/ComponentWithForm';\nimport {\n CONVERSATION_AI_TOKEN,\n AgentCardsAbstractService,\n DCConversationPromptBuilderService,\n DCChatComponent,\n IAgentCard,\n ConversationType,\n TextEngines,\n IMiniAgentCard,\n} from '@dataclouder/ngx-agent-cards';\n\nimport { DrawerModule } from 'primeng/drawer';\n\n// TODO: i need strategy to create prompt dinamically dpending on user language and level.\nconst DefaultLessonAgentCard: 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\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: [NgIf, KeyValuePipe, ButtonModule, DCChatComponent, DrawerModule],\n})\nexport class DCLessonRendererComponent implements OnInit {\n @Input() public lesson: ILesson;\n @Input() public test: boolean;\n\n @ViewChild('dynamicLesson', { static: true }) dynamicLesson: ElementRef;\n\n public lessonId: string = this.activatedRoute.snapshot.paramMap.get('id');\n public dataText: string = `<h1>Nueva lección </h1> <p> Texto aquí</p>`;\n public components: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n public mainForm: UntypedFormGroup = new UntypedFormGroup({});\n public imageCover: string;\n\n public chatVisible: boolean = false;\n\n constructor(\n private renderer: Renderer2,\n private viewContainerRef: ViewContainerRef,\n private activatedRoute: ActivatedRoute,\n @Inject(TOAST_ALERTS_TOKEN) private toastrService: ToastAlertsAbstractService,\n @Inject(LESSONS_TOKEN) private lessonService: LessonsAbstractService,\n @Inject(CONVERSATION_AI_TOKEN) private agentCardsService: AgentCardsAbstractService,\n private conversationBuilder: DCConversationPromptBuilderService, // private userService: UserService,\n ) {}\n\n ngOnInit(): void {\n this.initLesson();\n }\n\n public async initLesson() {\n await this.getLessonIfId();\n this.renderLesson();\n }\n\n public async getLessonIfId() {\n if (this.lesson) {\n return;\n }\n\n if (!this.lessonId) {\n return;\n }\n this.dataText = `<h1>Cargando </h1> <p>...</p>`;\n this.lesson = await this.lessonService.getLesson(this.lessonId);\n console.log('lesson', this.lesson);\n }\n\n private renderLesson(): void {\n this.imageCover = this.lesson.media?.images?.find((img) => img.type === 'cover')?.url;\n\n console.log('imageCover', this.imageCover);\n // Pasos para renderizar,\n // 0) Usar la expresión regular para sustitur los componentes por un span con un id\n // 1) En el mismo proceso de remplazar se contruyen dinamicamente los componentes\n // 2) Agregar componentes al DOM en su respectivo spanid\n\n // TODO Optimización, es posible agregar el componente al DOM en el mismo paso en que se crea el span?\n\n const r1 = new RegExp('~(.+?)~', 'g');\n let count = 0;\n this.components = {}; //Si se destruye la lección, se destruyen todos los componentes dinamicis? tODO necesito reiniciar?\n\n const lessonHtml = this.lesson.textCoded.replace(r1, (_matching, jsonCoded) => {\n const componentName = `dynamicComp${count}`;\n count++;\n const componentRef = this.createComponentReferenceWithJson(jsonCoded);\n if (!componentRef) {\n return null;\n }\n this.components[componentName] = componentRef;\n if (componentRef.instance.control) {\n // Algunos componentes tienen formularios, estos se copian en mainForm como un unico control\n this.mainForm.addControl(componentName, componentRef.instance.control);\n this.mainForm.get(componentName).setValidators([Validators.required]);\n }\n return `<span id=\"${componentName}\"></span>`;\n });\n\n this.dynamicLesson.nativeElement.innerHTML = lessonHtml;\n\n for (let compName of Object.keys(this.components)) {\n // Interpolar componentes dentro del lugar correspondiente\n const elementRef = document.getElementById(compName);\n this.addComponentToNode(this.components[compName], elementRef);\n }\n }\n\n private addComponentToNode(componentRef: ComponentRef<LessonComponentInterface>, nodeDOM: any) {\n this.renderer.appendChild(nodeDOM, componentRef.location.nativeElement);\n }\n\n private createComponentReferenceWithJson(json: string): ComponentRef<LessonComponentInterface> {\n const lessonCodedConfig: LessonComponentConfiguration = JSON.parse(json);\n\n let componentConfig;\n if (this.lesson.components && lessonCodedConfig.id) {\n // TODO: retomar, Creo que esta linea es para reutilziar los componentes por id, pero si no tiene,\n componentConfig = this.lesson.components.find((comp) => comp.id === lessonCodedConfig.id);\n }\n\n const LessonClass = getLessonComponentClass(<LessonComponentsType>lessonCodedConfig.component);\n\n if (!LessonClass) {\n console.error('No existe este componente, revisa el codigo insertado' + json);\n // throw new Error('No existe este com revisa el codigo insertado');\n return null;\n }\n\n const componentRef = this.viewContainerRef.createComponent<LessonComponentInterface>(LessonClass);\n componentRef.instance.config = componentConfig || lessonCodedConfig;\n return componentRef;\n }\n\n public async evaluateForms() {\n if (!this.mainForm.valid) {\n for (let controlName of Object.keys(this.mainForm.controls)) {\n this.components[controlName].instance.validate();\n }\n this.toastrService.warn({ subtitle: 'Por favor completa todos los formularios', title: 'Espera' });\n return;\n }\n\n const rates = { correct: 0, incorrect: 0, score: 0 };\n\n for (let controlName of Object.keys(this.mainForm.controls)) {\n const instance = this.components[controlName].instance;\n if (instance instanceof ComponentWithForm) {\n // TODO: quizá no necesito validar instanceof ComponentWithForm ya que se garantiza que todo en mainform tiene un control.\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('Validation method for instance is failing', instance);\n }\n }\n }\n if (this.test) {\n return;\n }\n rates.score = rates.correct / (rates.correct + rates.incorrect);\n\n const status = rates.score > 0.7 ? 'passed' : 'failed';\n\n const takenLesson = { lessonId: this.lesson.id, status: status, score: rates.score };\n // TODO: implementar el servicio para guardar la lección tomada\n // await this.lessonService.saveTakenLesson(takenLesson);\n\n if (status === 'passed') {\n this.toastrService.success({ subtitle: 'Aprobaste, se guardó tu calificación', title: 'Muy bien' });\n } else {\n this.toastrService.warn({ subtitle: 'Revisa tus respuestas', title: 'Algunas preguntas no son correctas' });\n }\n }\n\n public agentMasterLesson: IAgentCard;\n\n public evaluatorAgentCard: IMiniAgentCard;\n\n public async startAI() {\n // TODO: para refactorizar y utilizar las lecciones en otro componente, voy a necesitar pasar esto al servicio abstracto asi cada aplicación lo implementa.\n const lessonText = this.lessonService.extractTextFromHtml(this.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. \n Ask friendly questions throughout the conversation and help them learn English. Here is the lesson text the user just read:\n ${lessonText}\n In your next reply, start by greeting the user, asking something about the lesson, and then continue the conversation.`;\n\n // const user = this.userService.getUserSnapshot();\n alert('i need to fix this, need to find a way to pass user throug the service not the library, i think i already started something.');\n const user = {} as any;\n const targetLevel = parseInt(user.languageProgress[user.settings.targetLanguage].level);\n\n const langTargetDesc = LangCodeDescription[user.settings.targetLanguage];\n const langBaseDesc = LangCodeDescription[user.settings.baseLanguage];\n\n let userInformationPrompt = `\n User information: user name is ${user.personalData.firstname} ${user.personalData.lastname}, their native language is ${langBaseDesc}, \n and right now is learning ${langTargetDesc}, their current level is ${user.languageProgress[user.settings.targetLanguage].level} out of 5.`;\n\n if (targetLevel <= 2) {\n userInformationPrompt += `\\nUser is a beginner in english, always reply in ${langBaseDesc}, but during the conversation use simple words in ${langTargetDesc}`;\n }\n\n console.log('lessonText', lessonText);\n\n const lessonAgentCard: IAgentCard = DefaultLessonAgentCard;\n lessonAgentCard.characterCard.data.scenario = scenario;\n lessonAgentCard.characterCard.data.post_history_instructions += `\\n${userInformationPrompt}`;\n this.agentMasterLesson = lessonAgentCard;\n\n this.evaluatorAgentCard = this.getDefualtLessonEvaluatorAgentCard(lessonText);\n this.chatVisible = true;\n }\n\n private getDefualtLessonEvaluatorAgentCard(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","<div>\r\n <!-- <div *ngIf=\"lesson\">\r\n {lesson.title }} \r\n <br>\r\n <img [src]=\"imageCover\" alt=\"\">\r\n </div> -->\r\n\r\n <div #dynamicLesson class=\"targetclass\">\r\n <ng-template #target></ng-template>\r\n </div>\r\n</div>\r\n\r\n<br />\r\n<div style=\"display: flex; gap: 10px\">\r\n <div *ngIf=\"(mainForm.controls | keyvalue)?.length\">\r\n <p-button label=\"Calificar Lección\" icon=\"pi pi-check-circle\" (click)=\"evaluateForms()\" [rounded]=\"true\"></p-button>\r\n </div>\r\n\r\n <p-button icon=\"pi pi-verified\" [rounded]=\"true\" (click)=\"startAI()\" label=\"Repasar con IA\" />\r\n</div>\r\n<br /><br />\r\n\r\n@if(chatVisible) {\r\n<p-drawer header=\"Conversation\" [(visible)]=\"chatVisible\" position=\"bottom\" styleClass=\"app-bottom-overlay\">\r\n <dc-chat [agentCard]=\"agentMasterLesson\" [evaluatorAgentCard]=\"evaluatorAgentCard\"></dc-chat>\r\n</p-drawer>\r\n}\r\n","import { ChangeDetectorRef, Component, ComponentRef, ElementRef, Inject, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nimport BalloonEditor from '@ckeditor/ckeditor5-build-balloon-block';\nimport { CKEditorModule } from '@ckeditor/ckeditor5-angular';\n// PrimeNG\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { SpeedDialModule } from 'primeng/speeddial';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SplitterModule } from 'primeng/splitter';\nimport { TooltipModule } from 'primeng/tooltip';\n// Dataclouder\nimport { AspectType, CropImageSettings, 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';\nimport {\n LessonComponentEnum,\n LessonImage,\n ILesson,\n LessonComponentInterface,\n LESSONS_TOKEN,\n LessonsAbstractService,\n} from '../../lesson-mini-components/components/lessons.clases';\nimport { LessonComponentBuilders } from '../../lesson-mini-components/components/lessons.clases';\nimport { FlagLanguagePipe, LangDescTranslationPipe } from '../../../models/lessons.pipes';\nimport { NOTION_SERVICE_TOKEN, NotionAbstractService, NotionExportType } from '../../../models/notion.models';\nimport { MenuItem } from 'primeng/api';\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 FormsModule,\n CKEditorModule,\n CropperComponentModal,\n ButtonModule,\n InputTextModule,\n SplitterModule,\n DCLessonRendererComponent,\n LangDescTranslationPipe,\n FlagLanguagePipe,\n TooltipModule,\n SpeedDialModule,\n ],\n})\nexport class DCLessonEditorComponent implements OnInit {\n // public get activatedRoute(): ActivatedRoute {\n // return this._activatedRoute;\n // }\n // public set activatedRoute(value: ActivatedRoute) {\n // this._activatedRoute = value;\n // }\n @ViewChild('target', { read: ViewContainerRef }) target: ViewContainerRef;\n @ViewChild('dhtml', { static: true }) dhtml: ElementRef;\n\n public editor = BalloonEditor;\n public coverStorageSettings: StorageImageSettings = {\n path: 'lessons/covers',\n fileName: 'cover',\n cropSettings: { resizeToWidth: 850, aspectRatio: AspectType.RectangleLarge, resolutions: [ResolutionType.Medium] },\n };\n\n public lessonComponentEnum = LessonComponentEnum;\n public lessonId: string = this._activatedRoute.snapshot.paramMap.get('id');\n public lesson: any = { textCoded: `<h1>Nueva lección </h1> <p> Texto aquí</p>`, tags: [] };\n public components: { [key: string]: ComponentRef<LessonComponentInterface> } = {};\n public isRendered: boolean = false;\n public cover: string = '';\n public isCropperVisible = false;\n public items: MenuItem[];\n\n constructor(\n @Inject(LESSONS_TOKEN) private lessonService: LessonsAbstractService,\n @Inject(TOAST_ALERTS_TOKEN) private toastService: ToastAlertsAbstractService,\n @Inject(NOTION_SERVICE_TOKEN) private notionService: NotionAbstractService,\n private _activatedRoute: ActivatedRoute,\n private router: Router,\n private cdr: ChangeDetectorRef,\n private dialogService: DialogService,\n ) {}\n\n ngOnInit(): void {\n this.getLessonIfId();\n\n this.items = [\n {\n tooltipOptions: { tooltipLabel: 'Reparar con IA: Repara la lección con IA', tooltipPosition: 'bottom' },\n icon: 'pi pi-magic',\n command: () => this.generateByAI(),\n },\n {\n tooltipOptions: { tooltipLabel: 'Selector: Agrega un selector con multiples opciones', tooltipPosition: 'bottom' },\n icon: 'pi pi-caret-down',\n command: () => this.openComponentBuilder('selector'),\n },\n {\n tooltipOptions: { tooltipLabel: 'Hablar: Para que una palabra o frase sea reproducible', tooltipPosition: 'bottom' },\n icon: 'pi pi-megaphone',\n command: () => this.openComponentBuilder('speaker'),\n },\n {\n tooltipOptions: {\n tooltipLabel: 'Entrada de texto: Escribe una respuesta en un cuadro de texto',\n tooltipPosition: 'bottom',\n },\n icon: 'pi pi-pencil',\n command: () => this.openComponentBuilder('textWriter'),\n },\n {\n tooltipOptions: { tooltipLabel: 'Verbo: Para ver datos de un verbo', tooltipPosition: 'bottom' },\n icon: 'pi pi-eye',\n command: () => this.openComponentBuilder('verbSummary'),\n },\n {\n tooltipOptions: { tooltipLabel: 'Palabra: Para ver datos de una palabra', tooltipPosition: 'bottom' },\n icon: 'pi pi-file-word',\n command: () => this.openComponentBuilder('wordSummary'),\n },\n ];\n }\n\n public async getLessonIfId(): Promise<void> {\n if (!this.lessonId) {\n this.cover = `${GradientCss}, url(\"/assets/images/default_banner.webp\")`;\n return;\n }\n this.lesson = await this.lessonService.getLesson(this.lessonId);\n console.log('lesson', this.lesson);\n if (!this.lesson) {\n this.toastService.warn({ title: 'No se encontró la lección', subtitle: 'Quiza el id es incorrecto' });\n }\n this.togleRender();\n this.updateCover();\n }\n\n public updateCover(): void {\n const cover: LessonImage = this.lesson.media?.images?.find((img) => img.type === 'cover');\n if (cover) {\n this.cover = `${GradientCss}, url('${cover.url}')`;\n } else {\n this.cover = `${GradientCss}, url(\"/assets/images/default_banner.webp\")`;\n }\n this.cdr.detectChanges();\n }\n\n public onTagRemove(tag: any): void {\n this.lesson.tags = this.lesson.tags.filter((text) => text !== tag.text);\n }\n\n public onTagAdd(tag: { value: string; input: any }): void {\n if (tag.value) {\n this.lesson.tags.push(tag.value);\n }\n tag.input.nativeElement.value = '';\n }\n\n public async saveLesson(event: Event = null): Promise<ILesson> {\n if (event) {\n event.preventDefault();\n }\n // TODO: Optimización importante, guardar una lección guarda todos los datos de nuevo, y no solo los que se modificaron, encontrar una forma de optimizar.\n const lesson = await this.lessonService.postLesson(this.lesson);\n if (!this.lessonId) {\n this.toastService.success({ title: 'Se creó la lección', subtitle: 'Éxito' });\n this.router.navigate([lesson.id], { relativeTo: this._activatedRoute });\n } else {\n this.toastService.info({ title: 'Se guadarón los cambios en la lección', subtitle: 'Guardado' });\n this.lesson = lesson;\n this.validateAudios();\n }\n\n this.togleRender();\n return lesson;\n }\n\n public async validateAudios() {\n if (!this.lesson.components) {\n return;\n }\n // al menos un audio sin generar.\n // agregar más condigciones después\n // this.lesson.components.forEach((component: SpeakerCompConfiguration) => {\n // if (component.component === 'speaker') {\n // if (component.settings.voice && !component.audio) {\n // // this.toastrService.warn('Se encontraron audios por generar', 'Será rápido');\n // // TODO call backend.\n // this.lessonService.generateAudiosForLesson(this.lesson.id).then((res) => {\n // // this.toastrService.success('Se generaron los audios', 'Listo');\n // console.log(res);\n // });\n // return;\n // }\n // }\n // });\n }\n\n public togleRender(_event: any = null): void {\n this.isRendered = false;\n setTimeout(() => {\n this.isRendered = true;\n this.cdr.detectChanges();\n }, 400);\n this.cdr.detectChanges();\n }\n\n public openComponentBuilder(type: string): Observable<any> {\n return this.dialogService.open(LessonComponentBuilders[type], { width: '550px', header: 'Agregar componente', closable: true }).onClose.pipe();\n }\n\n public uploadCover(imageUploaded: any) {\n const image = { type: 'cover', ...imageUploaded };\n\n if (!this.lesson.media) {\n // puede que no exista media\n this.lesson.media = {};\n this.lesson.media.images = [image];\n } else {\n // solo sustituir el cover si ya existe, como siempre utilizo el mismo nombre, no tengo que eliminar la anterior si actualizo.\n // const currentCover = this.lesson.media.images.find((img) => img.type === 'cover');\n\n this.lesson.media.images = this.lesson.media.images.filter((img) => img.type !== 'cover');\n this.lesson.media.images.push(image);\n }\n this.updateCover();\n this.saveLesson();\n }\n\n openCropper() {\n this.isCropperVisible = true;\n }\n\n isLoadingLesson = false;\n public async generateByAI() {\n this.isLoadingLesson = true;\n try {\n await this.saveLesson();\n await this.lessonService.postGenerateByAI(this.lesson.id);\n await this.getLessonIfId();\n } finally {\n this.isLoadingLesson = false;\n }\n }\n\n public onImageSelected(event: any) {\n console.log(event);\n }\n\n public async onImageUploaded(event: any) {\n this.uploadCover(event);\n this.cdr.detectChanges();\n }\n\n public async importFromNotion() {\n let notionPageId: string;\n if (this.lesson?.extras?.notionPageId) {\n const response = confirm(`Ya tenemos el id ${this.lesson.extras?.notionPageId} ¿Quieres usar este id?`);\n if (!response) {\n return;\n }\n notionPageId = this.lesson.extras?.notionPageId;\n } else {\n const response = prompt('Ingresa el url de notion para importar la lección, se guardará este id');\n if (!response) {\n return;\n }\n notionPageId = this.extractNotionPageId(response);\n if (!notionPageId) return;\n this.linkWithNotion(notionPageId);\n }\n\n this.toastService.info({ title: 'Importando lección...', subtitle: 'Espera unos segundos' });\n\n const md = await this.notionService.getPageInSpecificFormat(notionPageId, NotionExportType.HTML);\n console.log(md);\n this.lesson.textCoded = md.content;\n this.togleRender();\n this.toastService.success({ title: 'Listo', subtitle: 'La lección se importó correctamente' });\n }\n\n extractNotionPageId(url: string) {\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 }\n return notionId;\n }\n\n public async linkWithNotion(notionPageId: string) {\n const extra = this.lesson.extras || {};\n extra.notionPageId = notionPageId;\n\n await this.lessonService.postLesson({ ...this.lesson, extras: extra });\n this.toastService.success({ title: 'Listo', subtitle: 'Se enlazó la lección con Notion' });\n }\n\n public async improveNotionWithAI() {\n const md = await this.notionService.getPageInSpecificFormat(this.lesson.extras.notionPageId, NotionExportType.HTML);\n console.log(md);\n\n // this.lesson.textCoded = md.content;\n\n // this.togleRender();\n // this.toastService.success({ title: 'Listo', subtitle: 'La lección se mejoró con AI' });\n }\n}\n","<div style=\"position: relative; margin-bottom: 20px\">\n <div class=\"header-cover\" [style.background-image]=\"cover\"></div>\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<div>\n <div>\n <div>\n <div style=\"display: flex; gap: 10px; padding: 10px\">\n <p-button label=\"Guardar\" severity=\"primary\" (click)=\"saveLesson()\" />\n\n <p-button label=\"Previsualizar\" severity=\"secondary\" (click)=\"togleRender()\" />\n <p-button label=\"Importar de Notion\" severity=\"help\" (click)=\"importFromNotion()\" />\n <p-button label=\"Mejorar Notion con AI\" severity=\"help\" (click)=\"improveNotionWithAI()\" />\n </div>\n\n <div>\n <input pInputText style=\"width: 100%\" [(ngModel)]=\"lesson.title\" type=\"text\" placeholder=\"Agrega un título\" />\n </div>\n <div style=\"margin-top: 4px\">\n <input pInputText style=\"width: 100%\" [(ngModel)]=\"lesson.description\" type=\"text\" placeholder=\"Agrega una descripción\" />\n </div>\n\n <div style=\"display: flex; align-items: center\">\n <br />\n <br />\n <input pInputText style=\"flex: auto\" [(ngModel)]=\"lesson.prompt\" type=\"text\" placeholder=\"Prompt\" />\n <p-button severity=\"primary\" [disabled]=\"isLoadingLesson\" (click)=\"generateByAI()\"> Generar </p-button>\n </div>\n\n <div>\n <label class=\"checkbox-container\">\n <input type=\"checkbox\" [(ngModel)]=\"lesson.isPublished\" title=\"Cuando termines la edición marca esta casilla\" />\n <span class=\"checkmark\"></span>\n Lección publicada\n </label>\n <br />\n\n <input pInputText [(ngModel)]=\"lesson.level\" type=\"number\" placeholder=\"Level\" />\n </div>\n\n <div>\n {{ lesson.baseLang | flagEmoji }} -> {{ lesson.targetLang | flagEmoji }} Lección para hablantes de {{ lesson.baseLang | langDesc : 'es' }} que aprenden\n {{ lesson.targetLang | langDesc : 'es' }}\n </div>\n </div>\n </div>\n\n <hr />\n <span>Componentes: </span>\n <div style=\"display: flex; gap: 10px\">\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.Selector)\" pTooltip=\"Agrega un selector con multiples opciones\">\n Selector\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.Speaker)\" pTooltip=\"Para que una palabra o frase sea reproducible\">\n Speaker\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.TextWriter)\" pTooltip=\"Escribe una respuesta en un cuadro de texto\">\n Text\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.VerbSummary)\" pTooltip=\"Muestra la información de un verbo\"> Text </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.VerbSummary)\" pTooltip=\"Muestra la información de un verbo\"> Verb </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.WordSummary)\" pTooltip=\"Muestra la información de una palabra\">\n Palabra\n </p-button>\n <p-button severity=\"info\" (click)=\"openComponentBuilder(lessonComponentEnum.TranslationSwitcher)\" pTooltip=\"Muestra el texto pero al pica cambia de idioma\">\n Traducción\n </p-button>\n </div>\n\n <hr />\n\n <p-splitter [style]=\"{ height: '80vh' }\" styleClass=\"mb-8\">\n <ng-template pTemplate>\n <ckeditor\n (keydown.control.s)=\"saveLesson($event)\"\n (keydown.control.space)=\"togleRender($event)\"\n class=\"text-editor\"\n [editor]=\"editor\"\n [(ngModel)]=\"lesson.textCoded\">\n </ckeditor>\n </ng-template>\n\n <ng-template pTemplate>\n @if (isRendered) {\n <dc-lesson-renderer class=\"text-editor\" [lesson]=\"lesson\" [test]=\"true\"></dc-lesson-renderer>\n }\n </ng-template>\n </p-splitter>\n\n <div class=\"float-button\">\n <p-speeddial [model]=\"items\" [radius]=\"120\" type=\"quarter-circle\" direction=\"up-left\" />\n\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</div>\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","i4","i7","i10"],"mappings":"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"}