{"version":3,"file":"annuadvent-ngx-cms-article-editor.mjs","sources":["../../../projects/ngx-cms/article-editor/src/constants/article-editor.constants.ts","../../../projects/ngx-cms/article-editor/src/components/article-editor/article-editor.component.ts","../../../projects/ngx-cms/article-editor/src/components/article-editor/article-editor.component.html","../../../projects/ngx-cms/article-editor/src/article-editor.module.ts","../../../projects/ngx-cms/article-editor/src/services/article-editor.service.ts","../../../projects/ngx-cms/article-editor/annuadvent-ngx-cms-article-editor.ts"],"sourcesContent":["import { Tab } from '@annuadvent/ngx-common-ui/tabs';\r\n\r\nexport const ARTICLE_EDITOR_TABS: Array<Tab> = [\r\n  {\r\n    name: 'metainfo',\r\n    title: 'Article Info',\r\n  } as Tab,\r\n  {\r\n    name: 'article',\r\n    title: 'Content',\r\n  } as Tab,\r\n  {\r\n    name: 'moreinfo',\r\n    title: 'More Info',\r\n  } as Tab,\r\n  {\r\n    name: 'publish',\r\n    title: 'Publish',\r\n  } as Tab,\r\n];\r\n\r\nexport const DESCRIPTION_PROMPT_PREFIX = 'Write a good description for ';\r\nexport const KEYWORDS_PROMPT_PREFIX = 'List good keywords for ';\r\nexport const CONTENT_PROMPT_PREFIX = '';\r\nexport const OPENAI_REQUESTS_LIMIT = 3;\r\nexport const OPENAI_REQUEST_TIME_LIMIT = 62000; //miliseconds or 1 min\r\n\r\nexport const MAX_STRONG_FORMATTING_CHAR_COUNT = 60;\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { UtilsService } from '@annuadvent/ngx-core/utils';\r\nimport { ImageInfo } from '@annuadvent/ngx-cms/cms-image-form';\r\nimport { MetaInfo } from '@annuadvent/ngx-common-ui/meta';\r\nimport { Tab } from '@annuadvent/ngx-common-ui/tabs';\r\nimport { Article, ArticleFeatures } from '@annuadvent/ngx-cms/article';\r\nimport { Category } from '@annuadvent/ngx-cms/category';\r\nimport {\r\n  EditorElement,\r\n  EDITOR_ROOT_ELEMENT,\r\n} from '@annuadvent/ngx-cms/content-editor';\r\nimport { ARTICLE_EDITOR_TABS } from '../../constants/article-editor.constants';\r\n\r\nconst SAMPLE_ARTICLE: Article = {\r\n  body: { ...EDITOR_ROOT_ELEMENT },\r\n  metaInfo: {\r\n    title: EDITOR_ROOT_ELEMENT.children[0]?.data?.text,\r\n    description: EDITOR_ROOT_ELEMENT.children[1]?.data?.text,\r\n  },\r\n  features: [],\r\n  categories: [],\r\n  image: { src: '', alt: '' },\r\n};\r\n\r\n@Component({\r\n  selector: 'anu-article-editor',\r\n  templateUrl: './article-editor.component.html',\r\n  styleUrls: ['./article-editor.component.scss'],\r\n})\r\nexport class ArticleEditorComponent implements OnInit, OnChanges {\r\n  @Input() value: Article | null;\r\n  @Input() imageHelpText: string = '';\r\n  @Input() readonlyId: boolean = true;\r\n  @Input() readonlyTitle: boolean = false;\r\n  @Input() enableUniqueId: boolean = true;\r\n  @Input() enablePublish: boolean = true;\r\n  @Input() enableDelete: boolean = true;\r\n  @Input() enableReadonlyIdToggle: boolean = true;\r\n  @Input() enableFeatures: boolean = true;\r\n  @Input() enableOpenai: boolean = false;\r\n  @Input() categories: Array<Category> = [];\r\n  @Output() changed = new EventEmitter<Article>();\r\n  @Output() saveClicked = new EventEmitter<Article>();\r\n  @Output() isLiveClicked = new EventEmitter<Article>();\r\n  @Output() inReviewClicked = new EventEmitter<Article>();\r\n  @Output() deleteClicked = new EventEmitter<Article>();\r\n\r\n  toggleImageForm: boolean = false;\r\n  tabs: Array<Tab> = ARTICLE_EDITOR_TABS.map((t) => ({ ...t }));\r\n\r\n  activeTab = this.tabs[0];\r\n  article: Article;\r\n  sampleArticle: Article;\r\n  selectedArticleCategories: Array<any> = [];\r\n  categoriesMultiSelectItems: Array<any> = [];\r\n  selectedArticleFeatures: Array<any> = [];\r\n  articleFeatures: Array<any> = [];\r\n  readonlyMetaProps: Array<string> = [];\r\n\r\n  constructor(private utils: UtilsService) {\r\n    this.sampleArticle = {\r\n      ...SAMPLE_ARTICLE,\r\n      id: this.utils.getUniqueFromString(SAMPLE_ARTICLE.metaInfo.title),\r\n      created: utils.currentDate,\r\n      updated: utils.currentDate,\r\n    };\r\n    this.article = { ...this.sampleArticle };\r\n    this.articleFeatures = Object.keys(ArticleFeatures).map((key) => ({\r\n      id: ArticleFeatures[key],\r\n      title: ArticleFeatures[key],\r\n    }));\r\n  }\r\n\r\n  private initArticle() {\r\n    if (this.value) {\r\n      this.article = JSON.parse(JSON.stringify(this.value));\r\n    } else {\r\n      this.article = JSON.parse(JSON.stringify(this.sampleArticle));\r\n      this.value = JSON.parse(JSON.stringify(this.sampleArticle));\r\n    }\r\n\r\n    // Init Article Categories\r\n    this.selectedArticleCategories = this.article.categories?.map((cat) => ({\r\n      id: cat,\r\n    }));\r\n    this.categoriesMultiSelectItems = this.categories?.map((cat) => ({\r\n      id: cat?.id,\r\n      title: cat?.metaInfo?.title,\r\n    }));\r\n\r\n    // Init ArticleFeatures\r\n    this.selectedArticleFeatures =\r\n      this.article?.features?.map((f) => ({ id: f, title: f })) || [];\r\n\r\n    // Init Meta form with readonly props\r\n    this.readonlyMetaProps = this.readonlyTitle === true ? ['title'] : [];\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initArticle();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.initArticle();\r\n  }\r\n\r\n  public tabChanged(tab: Tab) {\r\n    this.activeTab = tab;\r\n  }\r\n\r\n  public articleBodyChanged(body: EditorElement) {\r\n    this.article = { ...this.article, body: { ...body } };\r\n    this.changed.emit({ ...this.article });\r\n  }\r\n\r\n  public articleMetaChanged(metaInfo: MetaInfo) {\r\n    if (metaInfo.title !== this.value.metaInfo.title) {\r\n      this.article.id = this.enableUniqueId\r\n        ? this.utils.getUniqueFromString(metaInfo.title)\r\n        : this.utils.toDashedString(metaInfo.title);\r\n    } else {\r\n      this.article.id = this.value.id;\r\n    }\r\n\r\n    this.article = { ...this.article, metaInfo: { ...metaInfo } };\r\n    this.changed.emit({ ...this.article });\r\n  }\r\n\r\n  public onCategoriesChanged(selectedCategories: Array<any> = []): void {\r\n    this.article = {\r\n      ...this.article,\r\n      categories: selectedCategories?.map((cat) => cat?.id),\r\n      metaInfo: {\r\n        ...this.article.metaInfo,\r\n        url: this.utils.getCanonicalUrl('stories', this.article.id),\r\n      },\r\n    };\r\n    this.selectedArticleCategories = [...selectedCategories];\r\n    this.changed.emit({ ...this.article });\r\n  }\r\n\r\n  public onArticleFeaturesChanged(\r\n    selectedArticleFeatures: Array<any> = []\r\n  ): void {\r\n    this.article = {\r\n      ...this.article,\r\n      features: selectedArticleFeatures?.map((f) => f.id),\r\n    };\r\n    this.selectedArticleFeatures = [...selectedArticleFeatures];\r\n    this.changed.emit({ ...this.article });\r\n  }\r\n\r\n  public isLiveChanged(isLive: boolean): void {\r\n    const inReview = isLive === true ? false : this.value.inReview;\r\n    this.article = { ...this.article, isLive, inReview };\r\n    this.isLiveClicked.emit({ ...this.article });\r\n  }\r\n\r\n  public inReviewChanged(inReview: boolean): void {\r\n    const isLive = inReview === true ? false : this.value.isLive;\r\n    this.article = { ...this.article, isLive, inReview };\r\n    this.inReviewClicked.emit({ ...this.article });\r\n  }\r\n\r\n  public changeImage(event: any, clear: boolean = false) {\r\n    event.preventDefault();\r\n    if (clear === true) {\r\n      this.article.image = null;\r\n      this.changed.emit({ ...this.article });\r\n    } else {\r\n      this.toggleImageForm = true;\r\n    }\r\n  }\r\n\r\n  public cancelImageChange() {\r\n    this.toggleImageForm = false;\r\n  }\r\n\r\n  public saveImageChange(image: ImageInfo) {\r\n    this.article.image = image;\r\n    this.article.metaInfo = {\r\n      ...this.article.metaInfo,\r\n      image: image?.src || '',\r\n    };\r\n    this.toggleImageForm = false;\r\n    this.changed.emit({ ...this.article });\r\n  }\r\n\r\n  public saveArticle(event: any): void {\r\n    event.preventDefault();\r\n    this.saveClicked.emit({ ...this.article });\r\n  }\r\n\r\n  public deleteArticle(event: any): void {\r\n    event.preventDefault();\r\n    this.deleteClicked.emit({ ...this.article });\r\n  }\r\n\r\n  public articledDblClick(event: any): void {\r\n    event.preventDefault();\r\n    if (this.enableReadonlyIdToggle) {\r\n      this.readonlyId = !this.readonlyId;\r\n    }\r\n  }\r\n}\r\n","<h2>Article Editor</h2>\r\n<div class=\"row spacing-around-v\" *ngIf=\"!readonlyId && enableReadonlyIdToggle\">\r\n  <label (dblclick)=\"articledDblClick($event)\">Article Id</label>\r\n  <input type=\"text\" name=\"article-id\" [(ngModel)]=\"article.id\" />\r\n</div>\r\n<p *ngIf=\"readonlyId\" (dblclick)=\"articledDblClick($event)\">\r\n  /{{ article?.id }}\r\n</p>\r\n<section *ngIf=\"enableDelete\" class=\"row spacing-v right\">\r\n  <a class=\"btn error\" href=\"#\" (click)=\"deleteArticle($event)\"\r\n    >Delete Article</a\r\n  >\r\n</section>\r\n<anu-tabs\r\n  [tabs]=\"tabs\"\r\n  [activeTab]=\"activeTab\"\r\n  (changed)=\"tabChanged($event)\"\r\n></anu-tabs>\r\n<section class=\"container tab-body\">\r\n  <section\r\n    class=\"tab-item-body col-12\"\r\n    [ngClass]=\"{ active: activeTab.name === 'article' }\"\r\n  >\r\n    <anu-card class=\"shadow spacing article-card col-12\">\r\n      <anu-card-body class=\"col-12\">\r\n        <h1>{{ article?.metaInfo?.title }}</h1>\r\n        <p>{{ article?.metaInfo?.description }}</p>\r\n        <label>You can start writing your content below:</label>\r\n        <anu-content-editor\r\n          [enableOpenai]=\"enableOpenai\"\r\n          class=\"col-12\"\r\n          [value]=\"article?.body\"\r\n          (changed)=\"articleBodyChanged($event)\"\r\n        ></anu-content-editor>\r\n      </anu-card-body>\r\n    </anu-card>\r\n\r\n    <section class=\"row spacing-v right\">\r\n      <a class=\"btn\" href=\"#\" (click)=\"saveArticle($event)\">Save Article</a>\r\n    </section>\r\n  </section>\r\n\r\n  <section\r\n    class=\"tab-item-body\"\r\n    [ngClass]=\"{ active: activeTab.name === 'moreinfo' }\"\r\n  >\r\n    <anu-card\r\n      class=\"shadow spacing spacing-around-v moreinfo-card spacing-around-h-md spacing-around-h-lg\"\r\n    >\r\n      <anu-card-body>\r\n        <div class=\"row center stretch\">\r\n          <div class=\"col-sm-12\">\r\n            <a class=\"spacing-around\" href=\"#\" (click)=\"changeImage($event)\"\r\n              >Change image</a\r\n            >\r\n            <a\r\n              class=\"spacing-around\"\r\n              href=\"#\"\r\n              (click)=\"changeImage($event, true)\"\r\n              >Remove image</a\r\n            >\r\n          </div>\r\n        </div>\r\n      </anu-card-body>\r\n    </anu-card>\r\n\r\n    <anu-card\r\n      class=\"shadow spacing spacing-around-v moreinfo-card spacing-around-h-md spacing-around-h-lg\"\r\n    >\r\n      <anu-card-title>\r\n        <h2>Link Categories to your Article</h2>\r\n      </anu-card-title>\r\n      <anu-card-body>\r\n        <div class=\"row\">\r\n          <anu-multi-select-box\r\n            keyField=\"id\"\r\n            labelField=\"title\"\r\n            [items]=\"categoriesMultiSelectItems\"\r\n            [selectedItems]=\"selectedArticleCategories\"\r\n            (changed)=\"onCategoriesChanged($event)\"\r\n          >\r\n          </anu-multi-select-box>\r\n        </div>\r\n      </anu-card-body>\r\n    </anu-card>\r\n    <anu-card\r\n      *ngIf=\"enableFeatures\"\r\n      class=\"shadow spacing spacing-around-v moreinfo-card spacing-around-h-md spacing-around-h-lg\"\r\n    >\r\n      <anu-card-title>\r\n        <h2>Link Features to your Article</h2>\r\n      </anu-card-title>\r\n      <anu-card-body>\r\n        <div class=\"row\">\r\n          <anu-multi-select-box\r\n            keyField=\"id\"\r\n            labelField=\"title\"\r\n            [items]=\"articleFeatures\"\r\n            [selectedItems]=\"selectedArticleFeatures\"\r\n            (changed)=\"onArticleFeaturesChanged($event)\"\r\n          >\r\n          </anu-multi-select-box>\r\n        </div>\r\n      </anu-card-body>\r\n    </anu-card>\r\n    <anu-modal [opened]=\"toggleImageForm\" (cancelClick)=\"cancelImageChange()\">\r\n      <anu-cms-image-form\r\n        [src]=\"article?.image?.src\"\r\n        [alt]=\"article?.image?.alt\"\r\n        (cancel)=\"cancelImageChange()\"\r\n        [enableOpenai]=\"enableOpenai\"\r\n        (save)=\"saveImageChange($event)\"\r\n      ></anu-cms-image-form>\r\n    </anu-modal>\r\n\r\n    <section class=\"row spacing-v right\">\r\n      <a class=\"btn\" href=\"#\" (click)=\"saveArticle($event)\">Save Article</a>\r\n    </section>\r\n  </section>\r\n\r\n  <section\r\n    class=\"tab-item-body\"\r\n    [ngClass]=\"{ active: activeTab.name === 'metainfo' }\"\r\n  >\r\n    <small\r\n      ><i\r\n        >The <strong>Page title</strong> and\r\n        <strong>Page description</strong> ideally should be same as to your\r\n        article's content.</i\r\n      ></small\r\n    >\r\n    <anu-meta-form\r\n      [metaInfo]=\"article?.metaInfo\"\r\n      [readonlyMetaProps]=\"readonlyMetaProps\"\r\n      (changed)=\"articleMetaChanged($event)\"\r\n    ></anu-meta-form>\r\n\r\n    <section class=\"row spacing-v right\">\r\n      <a class=\"btn\" href=\"#\" (click)=\"saveArticle($event)\">Save Article</a>\r\n    </section>\r\n  </section>\r\n\r\n  <section\r\n    class=\"tab-item-body spacing-v\"\r\n    [ngClass]=\"{ active: activeTab.name === 'publish' }\"\r\n  >\r\n    <div class=\"row center stretch\">\r\n      <!-- inReview  -->\r\n      <div class=\"col-sm-12\">\r\n        <label class=\"spacing-h\"\r\n          >In Review?\r\n          <anu-toggle\r\n            [rounded]=\"true\"\r\n            [checked]=\"article?.inReview\"\r\n            (changed)=\"inReviewChanged($event)\"\r\n          ></anu-toggle\r\n        ></label>\r\n      </div>\r\n      <div class=\"col-sm-12\">\r\n        <span\r\n          *ngIf=\"!enablePublish\"\r\n          [ngClass]=\"article?.isLive ? 'success' : 'warning'\"\r\n          >{{ article?.isLive ? 'Published' : 'Unpublished' }}</span\r\n        >\r\n        <label *ngIf=\"enablePublish\" class=\"spacing-h\"\r\n          >Published?\r\n          <anu-toggle\r\n            [rounded]=\"true\"\r\n            [checked]=\"article?.isLive\"\r\n            (changed)=\"isLiveChanged($event)\"\r\n          ></anu-toggle\r\n        ></label>\r\n      </div>\r\n    </div>\r\n    <h2>Preview Card</h2>\r\n    <anu-article\r\n      class=\"spacing-around-h-md spacing-around-h-lg\"\r\n      [value]=\"article\"\r\n    ></anu-article>\r\n  </section>\r\n</section>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TabsModule } from '@annuadvent/ngx-common-ui/tabs';\r\nimport { CardModule } from '@annuadvent/ngx-common-ui/card';\r\nimport { CmsImageFormModule } from '@annuadvent/ngx-cms/cms-image-form';\r\nimport { ModalModule } from '@annuadvent/ngx-common-ui/modal';\r\nimport { MetaModule } from '@annuadvent/ngx-common-ui/meta';\r\nimport { MultiSelectBoxModule } from '@annuadvent/ngx-common-ui/multi-select-box';\r\nimport { ToggleModule } from '@annuadvent/ngx-common-ui/toggle';\r\nimport { ContentEditorModule } from '@annuadvent/ngx-cms/content-editor';\r\nimport { ArticleModule } from '@annuadvent/ngx-cms/article';\r\nimport { ArticleEditorComponent } from './components/article-editor/article-editor.component';\r\nimport { OpenaiModule } from '@annuadvent/ngx-tools/openai';\r\nimport { FireAuthModule } from '@annuadvent/ngx-tools/fire-auth';\r\n\r\n\r\n@NgModule({\r\n  declarations: [ArticleEditorComponent],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    TabsModule,\r\n    ContentEditorModule,\r\n    CardModule,\r\n    CmsImageFormModule,\r\n    ModalModule,\r\n    MetaModule,\r\n    ArticleModule,\r\n    MultiSelectBoxModule,\r\n    ToggleModule,\r\n    OpenaiModule,\r\n    FireAuthModule,\r\n  ],\r\n  exports: [ArticleEditorComponent],\r\n})\r\nexport class ArticleEditorModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { Article } from '@annuadvent/ngx-cms/article';\r\nimport { UtilsService } from '@annuadvent/ngx-core/utils';\r\nimport { ImageInfo } from '@annuadvent/ngx-cms/cms-image-form';\r\nimport {\r\n  EditorElement,\r\n  EditorElementData,\r\n} from '@annuadvent/ngx-cms/content-editor';\r\nimport { MetaInfo } from '@annuadvent/ngx-common-ui/meta';\r\nimport { META_ALLOWED_VALUES } from '@annuadvent/ngx-common-ui/meta';\r\nimport { AppConfigService } from '@annuadvent/ngx-core/app-config';\r\nimport { OpenaiConfigService, OpenaiService } from '@annuadvent/ngx-tools/openai';\r\nimport {\r\n  CONTENT_PROMPT_PREFIX,\r\n  DESCRIPTION_PROMPT_PREFIX,\r\n  KEYWORDS_PROMPT_PREFIX,\r\n  MAX_STRONG_FORMATTING_CHAR_COUNT,\r\n  OPENAI_REQUESTS_LIMIT,\r\n  OPENAI_REQUEST_TIME_LIMIT,\r\n} from '../constants/article-editor.constants';\r\nimport { Html2JsonService } from '@annuadvent/ngx-cms/content-editor';\r\nimport { FireAuthService } from '@annuadvent/ngx-tools/fire-auth';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ArticleEditorService {\r\n  article$ = new BehaviorSubject<Article>({});\r\n  cleanupPhrases: string = '';\r\n\r\n  constructor(\r\n    private utilsService: UtilsService,\r\n    private openaiService: OpenaiService,\r\n    private openaiConfigService: OpenaiConfigService,\r\n    private html2JsonService: Html2JsonService,\r\n    private appConfigService: AppConfigService,\r\n    private fireAuthService: FireAuthService\r\n  ) {\r\n\r\n    this.openaiConfigService.config.subscribe(config => {\r\n      this.cleanupPhrases = config.cleanupKeywords?.value;\r\n    });\r\n  }\r\n\r\n  public get article(): Observable<Article> {\r\n    return this.article$.asObservable();\r\n  }\r\n\r\n  public createInitializedArticle(\r\n    articleTitle: string,\r\n  ): Article {\r\n    const appConfig = this.appConfigService.config;\r\n\r\n    return {\r\n      id: this.utilsService.getUniqueFromString(articleTitle),\r\n      metaInfo: {\r\n        title: articleTitle,\r\n        description: '',\r\n        keywords: '',\r\n        robots: META_ALLOWED_VALUES.robots[0].name,\r\n        'Content-Type': META_ALLOWED_VALUES.contentTypes[0].name,\r\n        language: META_ALLOWED_VALUES.languages[0].name,\r\n        'revisit-after': '7 days',\r\n        author: appConfig?.metaInfo?.author,\r\n        type: META_ALLOWED_VALUES.types[0].name,\r\n        image: '',\r\n        url: '', // will be updated post assignment\r\n        card: META_ALLOWED_VALUES.cards[0].name,\r\n        site_name: appConfig?.metaInfo?.title,\r\n        audio: '',\r\n        video: '',\r\n        'article:published_time': this.utilsService.currentDate,\r\n        'article:author':\r\n          appConfig?.metaInfo && appConfig?.metaInfo['article:author'],\r\n        'article:section': META_ALLOWED_VALUES.articleSections[0].name,\r\n        'article:tag': '', // will be updated post assignment\r\n      } as MetaInfo,\r\n      image: {\r\n        src: '',\r\n        alt: articleTitle,\r\n      } as ImageInfo,\r\n      body: {} as EditorElement,\r\n      categories: [],\r\n      created: this.utilsService.currentDate,\r\n      updated: this.utilsService.currentDate,\r\n      userId: this.fireAuthService.getCurrentUserId(),\r\n      isLive: false,\r\n      inReview: true,\r\n      features: [],\r\n    };\r\n  }\r\n  public async generateArticleFromOpenai(\r\n    articleTitle: string,\r\n    keyWordsPromptPrefix: string,\r\n    descriptionPromptPrefix: string,\r\n    contentPromptPrefix: string\r\n  ): Promise<Article> {\r\n    const timeStarted = Date.now();\r\n\r\n    const article: Article = this.createInitializedArticle(\r\n      articleTitle,\r\n    );\r\n    this.article$.next(article);\r\n\r\n    // set title prompt content for article body\r\n    article.body = await this.generateArticleContentFromOpenai(\r\n      articleTitle, // article title content.\r\n      contentPromptPrefix\r\n    );\r\n    this.article$.next(article);\r\n\r\n    // set keywords\r\n    article.metaInfo.keywords = (\r\n      await this.generateArticleKeywordsFromOpenai(\r\n        articleTitle,\r\n        keyWordsPromptPrefix\r\n      )\r\n    ).join(', ');\r\n    article.metaInfo['article:tag'] = article.metaInfo.keywords;\r\n    this.article$.next(article);\r\n\r\n    // set description\r\n    article.metaInfo.description =\r\n      (await this.generateArticleDescriptionFromOpenai(\r\n        articleTitle,\r\n        descriptionPromptPrefix\r\n      )) || '';\r\n    this.article$.next(article);\r\n\r\n    // Delay if OPENAI_REQUEST_TIME_LIMIT API time limit is not completed yet.\r\n    const millisecondsEllapsed: number = Date.now() - timeStarted;\r\n    if (millisecondsEllapsed < OPENAI_REQUEST_TIME_LIMIT) {\r\n      await this.utilsService.delay(\r\n        OPENAI_REQUEST_TIME_LIMIT - millisecondsEllapsed\r\n      );\r\n    }\r\n\r\n    // set body\r\n    article.body = await this.generateArticleBodyFromOpenai(\r\n      article.metaInfo.keywords.split(', '), // suheading are actually keywords\r\n      contentPromptPrefix\r\n    );\r\n    this.article$.next(article);\r\n\r\n    // set url/canonical\r\n    article.metaInfo.url = this.generateArticleUrl(\r\n      article.id,\r\n      article.categories\r\n    );\r\n\r\n    // set image\r\n    article.metaInfo.image = article.image.src;\r\n\r\n    return article;\r\n  }\r\n\r\n  public async generateArticleDescriptionFromOpenai(\r\n    articleTitle: string,\r\n    descriptionPromptPrefix: string\r\n  ): Promise<string> {\r\n    const promptText = `${descriptionPromptPrefix || DESCRIPTION_PROMPT_PREFIX\r\n      }${articleTitle}`;\r\n\r\n    const mdText = await this.openaiService.getChatResponse([promptText]);\r\n    const jsonEl = this.html2JsonService.html2json(\r\n      this.html2JsonService.md2html(mdText)\r\n    );\r\n\r\n    return this.readDescriptionFromEditorElement(jsonEl);\r\n  }\r\n\r\n  public async generateArticleKeywordsFromOpenai(\r\n    articleTitle: string,\r\n    descriptionPromptPrefix: string\r\n  ): Promise<Array<string>> {\r\n    const promptText = `${descriptionPromptPrefix || KEYWORDS_PROMPT_PREFIX\r\n      }${articleTitle}`;\r\n\r\n    const mdText = await this.openaiService.getChatResponse([promptText]);\r\n    const jsonEl = this.html2JsonService.html2json(\r\n      this.html2JsonService.md2html(mdText)\r\n    );\r\n\r\n    return this.readKeywordsFromEditorElement(jsonEl);\r\n  }\r\n\r\n  public async generateArticleContentFromOpenai(\r\n    articleTitle: string,\r\n    contentPromptPrefix: string\r\n  ): Promise<EditorElement> {\r\n    const promptText = `${contentPromptPrefix || CONTENT_PROMPT_PREFIX\r\n      }${articleTitle}`;\r\n\r\n    const mdText = await this.openaiService.getChatResponse([promptText]);\r\n    const jsonEl = this.html2JsonService.html2json(\r\n      this.html2JsonService.md2html(mdText)\r\n    );\r\n\r\n    return jsonEl;\r\n  }\r\n\r\n  public async generateArticleBodyFromOpenai(\r\n    articleSubHeadings: Array<string>,\r\n    contentPromptPrefix: string\r\n  ): Promise<EditorElement> {\r\n    let body: EditorElement = this.utilsService.deepCopy(\r\n      this.article$.value.body\r\n    );\r\n\r\n    for (let i = 0; i < articleSubHeadings.length; i += OPENAI_REQUESTS_LIMIT) {\r\n      const timeStarted = Date.now();\r\n      const chunkSubHeadings = articleSubHeadings.slice(\r\n        i,\r\n        i + OPENAI_REQUESTS_LIMIT\r\n      );\r\n      const chunkPromises = chunkSubHeadings.map((promptText) =>\r\n        this.generateArticleContentFromOpenai(promptText, contentPromptPrefix)\r\n      );\r\n      const chunkJsonElms = await Promise.all(chunkPromises);\r\n\r\n      chunkJsonElms.forEach((jsonEl, index) => {\r\n        const subHeadingEl: EditorElement = this.generateArticleSubheading(\r\n          articleSubHeadings[i + index]\r\n        );\r\n        body.children = body.children.concat(subHeadingEl, jsonEl.children);\r\n      });\r\n\r\n      // Inform article body generation progress of the subheadings\r\n      const tempArticle: Article = this.utilsService.deepCopy(\r\n        this.article$.value\r\n      );\r\n      tempArticle.body = this.cleanAndFormatEditorEl(body);\r\n      this.article$.next(tempArticle);\r\n\r\n      // Delay if OPENAI_REQUEST_TIME_LIMIT API time limit is not completed yet.\r\n      const millisecondsEllapsed: number = Date.now() - timeStarted;\r\n      if (\r\n        millisecondsEllapsed < OPENAI_REQUEST_TIME_LIMIT &&\r\n        i + OPENAI_REQUESTS_LIMIT < articleSubHeadings.length\r\n      ) {\r\n        await this.utilsService.delay(\r\n          OPENAI_REQUEST_TIME_LIMIT - millisecondsEllapsed\r\n        );\r\n      }\r\n    }\r\n\r\n    return body;\r\n  }\r\n\r\n  public generateArticleUrl(\r\n    articleId: string,\r\n    articleCategories: Array<string>\r\n  ): string {\r\n    articleCategories = articleCategories || [];\r\n\r\n    return this.utilsService.getCanonicalUrl('stories', articleId);\r\n  }\r\n\r\n  public readDescriptionFromEditorElement(el: EditorElement): string {\r\n    let str = [];\r\n    if (el.tagName.toLowerCase() === 'p' && el.data?.text) {\r\n      str.push(el.data.text);\r\n    }\r\n\r\n    if (el.children && el.children.length) {\r\n      el.children.forEach((chEl) => {\r\n        const chStr = this.readDescriptionFromEditorElement(chEl);\r\n        str.push(chStr);\r\n      });\r\n    }\r\n\r\n    return str.join(' ');\r\n  }\r\n\r\n  public readKeywordsFromEditorElement(el: EditorElement): Array<string> {\r\n    let str: Array<string> = [];\r\n    if (['ul', 'ol'].includes(el.tagName.toLowerCase())) {\r\n      el.children.forEach((chEl) => {\r\n        if (chEl.tagName.toLowerCase() === 'li' && chEl.data?.text) {\r\n          str.push(chEl.data.text);\r\n        }\r\n      });\r\n    }\r\n\r\n    if (el.children && el.children.length) {\r\n      el.children.forEach((chEl) => {\r\n        const chStr = this.readKeywordsFromEditorElement(chEl);\r\n        if (chStr && chStr.length) {\r\n          str = str.concat(chStr);\r\n        }\r\n      });\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  public generateArticleSubheading(subHeadingText: string): EditorElement {\r\n    const editorEl: EditorElement = {\r\n      name: `h2-${Date.now()}`,\r\n      tagName: 'h2',\r\n      isContainer: false,\r\n      focused: false,\r\n      data: { text: subHeadingText } as EditorElementData,\r\n    };\r\n\r\n    return editorEl;\r\n  }\r\n\r\n  public generateArticleImageUrl(imageFullPath: string): string {\r\n    return this.utilsService.getImageUrl(\r\n      imageFullPath,\r\n      this.appConfigService.config.imagesSourceUrl\r\n    );\r\n  }\r\n\r\n  public cleanAndFormatEditorEl(\r\n    jsonEl: EditorElement,\r\n  ): EditorElement {\r\n    return this.formatEditorElement(this.cleanEditorEl(jsonEl));\r\n  }\r\n\r\n  /**\r\n   * Cleans Open ai language keywords and tags with \\n only.\r\n   * @date 6/5/2023 - 12:48:30 AM\r\n   *\r\n   * @public\r\n   * @param {EditorElement} jsonEl\r\n   * @returns {EditorElement}\r\n   */\r\n  public cleanEditorEl(\r\n    jsonEl: EditorElement,\r\n  ): EditorElement {\r\n    const phrases = this.cleanupPhrases.split(', ');\r\n\r\n    if (!phrases || !phrases.length) return this.utilsService.deepCopy(jsonEl);\r\n    if (!jsonEl) return jsonEl;\r\n\r\n    const phrasesF = phrases.filter((phrase) =>\r\n      jsonEl?.data?.text.includes(phrase)\r\n    );\r\n    if (\r\n      phrasesF.length ||\r\n      (jsonEl?.tagName === '#text' && jsonEl?.data?.text === '\\n')\r\n    ) {\r\n      return null;\r\n    } else if (jsonEl?.children && jsonEl.children.length) {\r\n      jsonEl.children = jsonEl.children\r\n        .map((el) => this.cleanEditorEl(el))\r\n        .filter((el) => el !== null);\r\n      return jsonEl;\r\n    }\r\n\r\n    return jsonEl;\r\n  }\r\n\r\n  /**\r\n   * Formats LI items those having an heading within, as strong.\r\n   * @date 6/5/2023 - 12:55:14 AM\r\n   *\r\n   * @public\r\n   * @param {EditorElement} el\r\n   * @returns {EditorElement}\r\n   */\r\n  public formatEditorElement(el: EditorElement): EditorElement {\r\n    if (['ul', 'ol'].includes(el.tagName.toLowerCase())) {\r\n      el.children.forEach((chEl) => {\r\n        if (chEl.tagName.toLowerCase() === 'li' && chEl.data?.text) {\r\n          const str = chEl.data?.text || '';\r\n          const colonIndex = str.indexOf(':');\r\n          const pIndex = str.indexOf('<p>');\r\n          const pTag =\r\n            pIndex >= 0 && pIndex < MAX_STRONG_FORMATTING_CHAR_COUNT\r\n              ? '<p>'\r\n              : '';\r\n          if (colonIndex > 0 && colonIndex < MAX_STRONG_FORMATTING_CHAR_COUNT) {\r\n            // means is a bold text\r\n            let strongText = str.substring(0, colonIndex);\r\n            const normalText = str.substring(colonIndex);\r\n            strongText = pTag ? strongText.replace('<p>', '') : strongText;\r\n            chEl.data.text = `${pTag}<strong>${strongText}</strong>${normalText}`;\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    if (el.children && el.children.length) {\r\n      el.children = el.children.map((chEl) => this.formatEditorElement(chEl));\r\n    }\r\n\r\n    return el;\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5","i2","i3","i4"],"mappings":"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"}