{
  "version": 3,
  "sources": ["src/app/core/services/seo.service.ts", "src/app/pages/blog/pages/blog-detail/blog-detail.component.ts", "src/app/pages/blog/pages/blog-detail/blog-detail.component.html"],
  "sourcesContent": ["import {inject, Inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {Meta, Title} from '@angular/platform-browser';\r\nimport {BlogArticle} from '../interfaces/blogArticle.interface';\r\nimport {environment} from '../../../environment/environment';\r\nimport {isPlatformBrowser} from '@angular/common';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class SeoService {\r\n\r\n  private schemaScript?: HTMLScriptElement;\r\nprivate platformId =   inject(PLATFORM_ID);\r\n\r\n  constructor(private titleService: Title,\r\n              private meta: Meta) {\r\n  }\r\n\r\n  setBlogPostingSchema(article: BlogArticle): void {\r\n\r\n    this.removeSchema();\r\n    const baseUrl = environment.baseUrl;\r\n\r\n    const schema = {\r\n      '@context': 'https://schema.org',\r\n      '@type': 'BlogPosting',\r\n\r\n      headline: article.title,\r\n\r\n      description: article.excerpt,\r\n\r\n      image: [\r\n        `${baseUrl}/${article.coverImage.replace(/^\\//, '')}`\r\n      ],\r\n\r\n      datePublished: article.publishedAt,\r\n\r\n      dateModified:\r\n        article.updatedAt ??\r\n        article.publishedAt,\r\n\r\n      articleSection:\r\n      article.category,\r\n\r\n      keywords:\r\n        article.tags.join(', '),\r\n\r\n      author: {\r\n        '@type': 'Person',\r\n        name: 'Cristian TUDOROIU'\r\n      },\r\n\r\n      publisher: {\r\n        '@type': 'Organization',\r\n        name: 'TGC Studios',\r\n        logo: {\r\n          '@type': 'ImageObject',\r\n          url: `${baseUrl}/assets/img/logo.webp`\r\n        }\r\n      },\r\n\r\n      mainEntityOfPage: {\r\n        '@type': 'WebPage',\r\n        '@id': `${baseUrl}/blog/${article.slug}`\r\n      }\r\n    };\r\n\r\n    if (!isPlatformBrowser(this.platformId)) return;\r\n    this.schemaScript =\r\n      document.createElement('script');\r\n\r\n    this.schemaScript.type =\r\n      'application/ld+json';\r\n\r\n    this.schemaScript.textContent =\r\n      JSON.stringify(schema);\r\n\r\n    document.head.appendChild(\r\n      this.schemaScript\r\n    );\r\n  }\r\n\r\n  removeSchema(): void {\r\n    this.schemaScript?.remove();\r\n  }\r\n}\r\n", "import {AfterViewInit, Component, ElementRef, inject, OnDestroy, OnInit, ViewChild} from '@angular/core';\r\nimport {BlogService} from '../../services/blog.service';\r\nimport {ActivatedRoute, Router, RouterLink} from '@angular/router';\r\nimport {\r\n  LucideArrowLeft,\r\n  LucideCalendar,\r\n  LucideClock4, LucideGlobe,\r\n  LucideRepeat2\r\n} from '@lucide/angular';\r\nimport {DatePipe} from '@angular/common';\r\nimport {MarkdownComponent} from 'ngx-markdown';\r\n\r\nimport {PLATFORM_ID} from '@angular/core';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {myInfo} from '../../../../core/data/my-data';\r\nimport {NewsletterComponent} from '../../components/newsletter/newsletter.component';\r\nimport {ProjectCtaComponent} from '../../components/project-cta/project-cta.component';\r\nimport {BlogArticle} from '../../../../core/interfaces/blogArticle.interface';\r\nimport {SeoService} from '../../../../core/services/seo.service';\r\nimport {ArticleCardComponent} from '../../components/blog-article/article-card.component';\r\nimport {switchMap} from 'rxjs';\r\n\r\n\r\n@Component({\r\n  selector: 'app-blog-detail',\r\n  imports: [\r\n    LucideArrowLeft,\r\n    DatePipe,\r\n    LucideClock4,\r\n    LucideCalendar,\r\n    MarkdownComponent,\r\n    RouterLink,\r\n    NewsletterComponent,\r\n    ProjectCtaComponent,\r\n    LucideRepeat2,\r\n    ArticleCardComponent,\r\n    LucideGlobe\r\n  ],\r\n  templateUrl: './blog-detail.component.html',\r\n  styleUrl: './blog-detail.component.sass'\r\n})\r\nexport class BlogDetailComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n  private blogService = inject(BlogService);\r\n  private route = inject(ActivatedRoute);\r\n  private seoService = inject(SeoService);\r\n  private router = inject(Router);\r\n\r\n  protected article !: BlogArticle | undefined;\r\n  protected relatedArticles: BlogArticle[] = [];\r\n  summary: { id: string, title: string }[] = [];\r\n  @ViewChild('articleContent')\r\n  articleContent!: ElementRef;\r\n  private platformId = inject(PLATFORM_ID);\r\n  activeHeading = '';\r\n  private observer?: IntersectionObserver;\r\n\r\n  mydata = myInfo;\r\n\r\n\r\n  ngOnInit(): void {\r\n    this.route.paramMap.pipe(\r\n      switchMap((params: any) => {\r\n        const slug = params.get('slug')!;\r\n        return this.blogService.getArticleBySlug(slug);\r\n      })\r\n    ).subscribe(response => {\r\n      if (!response.article) {\r\n        this.router.navigate(['/404']);\r\n        return;\r\n      }\r\n      this.article = response.article;\r\n      this.relatedArticles = response.relatedArticles;\r\n      this.seoService.setBlogPostingSchema(this.article);\r\n\r\n      this.summary = this.blogService.generateSummary(response.article.content);\r\n      if (isPlatformBrowser(this.platformId)) {\r\n        this.initSummaryObserver();\r\n      }\r\n    })\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (!isPlatformBrowser(this.platformId)) {\r\n      return;\r\n    }\r\n    this.initSummaryObserver();\r\n  }\r\n\r\n  private initSummaryObserver(): void {\r\n\r\n    this.observer?.disconnect();\r\n\r\n    setTimeout(() => {\r\n\r\n      const headings =\r\n        this.articleContent.nativeElement.querySelectorAll('h2');\r\n\r\n      if (!headings.length) {\r\n        return;\r\n      }\r\n\r\n      headings.forEach((heading: HTMLElement) => {\r\n\r\n        heading.id = this.blogService.generateHeadingId(\r\n          heading.textContent ?? ''\r\n        );\r\n\r\n      });\r\n\r\n      this.observer = new IntersectionObserver(\r\n        (entries) => {\r\n\r\n          entries.forEach(entry => {\r\n\r\n            if (entry.isIntersecting) {\r\n              this.activeHeading =\r\n                (entry.target as HTMLElement).id;\r\n            }\r\n\r\n          });\r\n\r\n        },\r\n        {\r\n          rootMargin: '-100px 0px -70% 0px'\r\n        }\r\n      );\r\n\r\n      headings.forEach((heading: HTMLElement) => {\r\n        this.observer?.observe(heading);\r\n      });\r\n\r\n    });\r\n\r\n  }\r\n\r\n  scrollTo(id: string) {\r\n    const element = document.getElementById(id);\r\n\r\n    if (!element) {\r\n      return;\r\n    }\r\n\r\n    element.scrollIntoView({\r\n      behavior: 'smooth',\r\n      block: 'start'\r\n    });\r\n\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.observer?.disconnect();\r\n    this.seoService.removeSchema();\r\n  }\r\n\r\n}\r\n", "<section class=\"blog-detail-container\" >\r\n  <section class=\"blog-detail\">\r\n    <div class=\"blog-detail-header\">\r\n      <a routerLink=\"/blog\" class=\"back-btn\">\r\n        <svg lucideArrowLeft class=\"icon\"></svg>\r\n        Retour au blog</a>\r\n      <div class=\"header-meta\">\r\n        <span class=\"article-category\">{{ article?.category }}</span>\r\n        <div class=\"infos\">\r\n          <span class=\"article-reading-time\"><svg lucideClock4 class=\"icon\" ></svg>\r\n            {{ article?.readingTime }}min</span>\r\n          <time\r\n            class=\"article-date\"\r\n            [attr.datetime]=\"article?.publishedAt\">\r\n\r\n            <svg lucideCalendar class=\"icon\"></svg>\r\n            {{ article?.publishedAt | date:'dd MMMM yyyy' }}\r\n\r\n          </time>\r\n          @if (article?.updatedAt) {\r\n            <time>\r\n              <svg lucideRepeat2 class=\"icon\"></svg>\r\n              {{ article?.updatedAt | date:'dd MMMM yyyy' }}\r\n            </time>\r\n          }\r\n        </div>\r\n      </div>\r\n      <h1 class=\"article-title\">{{ article?.title }}</h1>\r\n    </div>\r\n    <div class=\"article-image\">\r\n      <img\r\n        [src]=\"'assets/img/blog/cover/'+article?.coverImage\"\r\n        [alt]=\"article?.title\"\r\n        width=\"1200\"\r\n        height=\"630\"\r\n        fetchpriority=\"high\">\r\n    </div>\r\n    <div class=\"article-body\">\r\n      <div class=\"article-content\" #articleContent>\r\n        <markdown [data]=\"article?.content\" class=\"blog-content\"></markdown>\r\n        <div class=\"author-content\">\r\n          <div class=\"author-avatar\">\r\n            <span>TGC</span>\r\n          </div>\r\n          <div class=\"content\">\r\n            <h5 class=\"nom\">Cristian TUDOROIU</h5>\r\n            <h6 class=\"metier\">Développeur Fullstack Freelance</h6>\r\n            <p class=\"texte\">Développeur web freelance passionné par la création d'interfaces performantes et\r\n              l'optimisation SEO. J'aide les entreprises à transformer leur présence en ligne en véritable levier de\r\n              croissance.</p>\r\n            <div class=\"icons\">\r\n              <a href=\"{{mydata.linkedinLink}}\" target=\"_blank\"> <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 640 640\" fill=\"currentColor\"><path d=\"M196.3 512L103.4 512L103.4 212.9L196.3 212.9L196.3 512zM149.8 172.1C120.1 172.1 96 147.5 96 117.8C96 103.5 101.7 89.9 111.8 79.8C121.9 69.7 135.6 64 149.8 64C164 64 177.7 69.7 187.8 79.8C197.9 89.9 203.6 103.6 203.6 117.8C203.6 147.5 179.5 172.1 149.8 172.1zM543.9 512L451.2 512L451.2 366.4C451.2 331.7 450.5 287.2 402.9 287.2C354.6 287.2 347.2 324.9 347.2 363.9L347.2 512L254.4 512L254.4 212.9L343.5 212.9L343.5 253.7L344.8 253.7C357.2 230.2 387.5 205.4 432.7 205.4C526.7 205.4 544 267.3 544 347.7L544 512L543.9 512z\"/></svg></a>\r\n              <a href=\"https://www.cristian-tudoroiu.fr\" target=\"_blank\"> <svg lucideGlobe class=\"icon\"></svg></a>\r\n              <a href=\"{{mydata.googleLink}}\" target=\"_blank\"> <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M564 325.8C564 467.3 467.1 568 324 568C186.8 568 76 457.2 76 320C76 182.8 186.8 72 324 72C390.8 72 447 96.5 490.3 136.9L422.8 201.8C334.5 116.6 170.3 180.6 170.3 320C170.3 406.5 239.4 476.6 324 476.6C422.2 476.6 459 406.2 464.8 369.7L324 369.7L324 284.4L560.1 284.4C562.4 297.1 564 309.3 564 325.8z\"/></svg></a>\r\n\r\n\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <aside class=\"article-summary\">\r\n\r\n        <div class=\"summary-card\">\r\n\r\n          <h3>Sommaire</h3>\r\n\r\n          @for (item of summary; track item.id) {\r\n\r\n            <a (click)=\"scrollTo(item.id)\" [class.active]=\"activeHeading === item.id\">\r\n              {{ item.title }}\r\n            </a>\r\n\r\n          }\r\n\r\n        </div>\r\n\r\n      </aside>\r\n    </div>\r\n  </section>\r\n  <section class=\"related-articles\">\r\n    <div class=\"related-articles-header\">\r\n      <h6 class=\"subtitle\">Continuez votre lecture</h6>\r\n      <h2 class=\"title\">Articles similaires</h2>\r\n      <p class=\"texte\">Découvrez d'autres ressources séléctionnées pour approfondir le sujet et faire passer votre présence en ligne\r\n        au niveau supérieur.\r\n      </p>\r\n\r\n    </div>\r\n    <div class=\"list-related-articles\">\r\n      @if (relatedArticles.length > 0) {\r\n        @for (relatedArticle of relatedArticles; track relatedArticle.id) {\r\n          <app-article-card [article]=\"relatedArticle\"></app-article-card>\r\n        }\r\n      }\r\n\r\n\r\n\r\n    </div>\r\n  </section>\r\n  <app-newsletter></app-newsletter>\r\n  <app-project-cta></app-project-cta>\r\n</section>\r\n"],
  "mappings": ";2tBASA,IAAaA,IAAU,IAAA,CAAjB,MAAOA,CAAU,CAKDC,aACAC,KAJZC,aACFC,WAAeC,EAAOC,CAAW,EAEvCC,YAAoBN,EACAC,EAAU,CADV,KAAAD,aAAAA,EACA,KAAAC,KAAAA,CACpB,CAEAM,qBAAqBC,EAAoB,CAEvC,KAAKC,aAAY,EACjB,IAAMC,EAAUC,EAAYD,QAEtBE,EAAS,CACb,WAAY,qBACZ,QAAS,cAETC,SAAUL,EAAQM,MAElBC,YAAaP,EAAQQ,QAErBC,MAAO,CACL,GAAGP,CAAO,IAAIF,EAAQU,WAAWC,QAAQ,MAAO,EAAE,CAAC,EAAE,EAGvDC,cAAeZ,EAAQa,YAEvBC,aACEd,EAAQe,WACRf,EAAQa,YAEVG,eACAhB,EAAQiB,SAERC,SACElB,EAAQmB,KAAKC,KAAK,IAAI,EAExBC,OAAQ,CACN,QAAS,SACTC,KAAM,qBAGRC,UAAW,CACT,QAAS,eACTD,KAAM,cACNE,KAAM,CACJ,QAAS,cACTC,IAAK,GAAGvB,CAAO,0BAInBwB,iBAAkB,CAChB,QAAS,UACT,MAAO,GAAGxB,CAAO,SAASF,EAAQ2B,IAAI,KAIrCC,EAAkB,KAAKjC,UAAU,IACtC,KAAKD,aACHmC,SAASC,cAAc,QAAQ,EAEjC,KAAKpC,aAAaqC,KAChB,sBAEF,KAAKrC,aAAasC,YAChBC,KAAKC,UAAU9B,CAAM,EAEvByB,SAASM,KAAKC,YACZ,KAAK1C,YAAY,EAErB,CAEAO,cAAY,CACV,KAAKP,cAAc2C,OAAM,CAC3B,4CA3EW9C,GAAU+C,EAAAC,CAAA,EAAAD,EAAAE,CAAA,CAAA,CAAA,6BAAVjD,EAAUkD,QAAVlD,EAAUmD,UAAAC,WAFT,MAAM,CAAA,SAEPpD,CAAU,GAAA,qEEWXqD,EAAA,EAAA,MAAA,MACEC,EAAA,EAAA,MAAA,EAAA,EACAC,EAAA,CAAA,cACFC,EAAA,kBADEC,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAA,EAAA,EAAAC,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAAC,UAAA,cAAA,EAAA,GAAA,sCA8CFT,EAAA,EAAA,IAAA,EAAA,EAAGU,EAAA,QAAA,UAAA,CAAA,IAAAC,EAAAC,EAAAC,CAAA,EAAAC,UAAAP,EAAAQ,EAAA,EAAA,OAAAC,EAAST,EAAAU,SAAAN,EAAAO,EAAA,CAAiB,CAAA,CAAA,EAC3BhB,EAAA,CAAA,EACFC,EAAA,kCAF+BgB,EAAA,SAAAZ,EAAAa,gBAAAT,EAAAO,EAAA,EAC7Bd,EAAA,EAAAC,EAAA,IAAAM,EAAAU,MAAA,GAAA,4BAsBJpB,EAAA,EAAA,mBAAA,EAAA,yBAAkBqB,EAAA,UAAAC,CAAA,4BADpBC,EAAA,EAAAC,GAAA,EAAA,EAAA,mBAAA,GAAAC,EAAA,iBAAAC,EAAApB,EAAAqB,eAAA,GDjDR,IAAaC,IAAmB,IAAA,CAA1B,MAAOA,CAAmB,CAEtBC,YAAcC,EAAOC,EAAW,EAChCC,MAAQF,EAAOG,CAAc,EAC7BC,WAAaJ,EAAOK,EAAU,EAC9BC,OAASN,EAAOO,CAAM,EAEpB9B,QACAoB,gBAAiC,CAAA,EAC3CW,QAA2C,CAAA,EAE3CC,eACQC,WAAaV,EAAOW,CAAW,EACvCtB,cAAgB,GACRuB,SAERC,OAASC,EAGTC,UAAQ,CACN,KAAKb,MAAMc,SAASC,KAClBC,EAAWC,GAAe,CACxB,IAAMC,EAAOD,EAAOE,IAAI,MAAM,EAC9B,OAAO,KAAKtB,YAAYuB,iBAAiBF,CAAI,CAC/C,CAAC,CAAC,EACFG,UAAUC,GAAW,CACrB,GAAI,CAACA,EAAS/C,QAAS,CACrB,KAAK6B,OAAOmB,SAAS,CAAC,MAAM,CAAC,EAC7B,MACF,CACA,KAAKhD,QAAU+C,EAAS/C,QACxB,KAAKoB,gBAAkB2B,EAAS3B,gBAChC,KAAKO,WAAWsB,qBAAqB,KAAKjD,OAAO,EAEjD,KAAK+B,QAAU,KAAKT,YAAY4B,gBAAgBH,EAAS/C,QAAQmD,OAAO,EACpEC,EAAkB,KAAKnB,UAAU,GACnC,KAAKoB,oBAAmB,CAE5B,CAAC,CACH,CAEAC,iBAAe,CACRF,EAAkB,KAAKnB,UAAU,GAGtC,KAAKoB,oBAAmB,CAC1B,CAEQA,qBAAmB,CAEzB,KAAKlB,UAAUoB,WAAU,EAEzBC,WAAW,IAAK,CAEd,IAAMC,EACJ,KAAKzB,eAAe0B,cAAcC,iBAAiB,IAAI,EAEpDF,EAASG,SAIdH,EAASI,QAASC,GAAwB,CAExCA,EAAQpD,GAAK,KAAKY,YAAYyC,kBAC5BD,EAAQE,aAAe,EAAE,CAG7B,CAAC,EAED,KAAK7B,SAAW,IAAI8B,qBACjBC,GAAW,CAEVA,EAAQL,QAAQM,GAAQ,CAElBA,EAAMC,iBACR,KAAKxD,cACFuD,EAAME,OAAuB3D,GAGpC,CAAC,CAEH,EACA,CACE4D,WAAY,sBACb,EAGHb,EAASI,QAASC,GAAwB,CACxC,KAAK3B,UAAUoC,QAAQT,CAAO,CAChC,CAAC,EAEH,CAAC,CAEH,CAEArD,SAASC,EAAU,CACjB,IAAM8D,EAAUC,SAASC,eAAehE,CAAE,EAErC8D,GAILA,EAAQG,eAAe,CACrBC,SAAU,SACVC,MAAO,QACR,CAEH,CAEAC,aAAW,CACT,KAAK3C,UAAUoB,WAAU,EACzB,KAAK5B,WAAWoD,aAAY,CAC9B,4CAhHW1D,EAAmB,2BAAnBA,EAAmB2D,UAAA,CAAA,CAAA,iBAAA,CAAA,EAAAC,UAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,8jECzChC1F,EAAA,EAAA,UAAA,CAAA,EAAwC,EAAA,UAAA,CAAA,EACT,EAAA,MAAA,CAAA,EACK,EAAA,IAAA,CAAA,MAE5BC,EAAA,EAAA,MAAA,CAAA,EACAC,EAAA,EAAA,iBAAA,EAAcC,EAAA,MAChBH,EAAA,EAAA,MAAA,CAAA,EAAyB,EAAA,OAAA,CAAA,EACQE,EAAA,CAAA,EAAuBC,EAAA,EACtDH,EAAA,EAAA,MAAA,CAAA,EAAmB,GAAA,OAAA,CAAA,MACkBC,EAAA,GAAA,MAAA,EAAA,EACjCC,EAAA,EAAA,EAA6BC,EAAA,MAC/BH,EAAA,GAAA,OAAA,EAAA,MAIEC,EAAA,GAAA,MAAA,EAAA,EACAC,EAAA,EAAA,eAEFC,EAAA,EACAyF,EAAA,GAAAC,GAAA,EAAA,EAAA,MAAA,EAMF1F,EAAA,EAAM,MAERH,EAAA,GAAA,KAAA,EAAA,EAA0BE,EAAA,EAAA,EAAoBC,EAAA,EAAK,EAErDH,EAAA,GAAA,MAAA,EAAA,EACEC,EAAA,GAAA,MAAA,EAAA,EAMFE,EAAA,EACAH,EAAA,GAAA,MAAA,EAAA,EAA0B,GAAA,MAAA,GAAA,CAAA,EAEtBC,EAAA,GAAA,WAAA,EAAA,EACAD,EAAA,GAAA,MAAA,EAAA,EAA4B,GAAA,MAAA,EAAA,EACC,GAAA,MAAA,EACnBE,EAAA,GAAA,KAAA,EAAGC,EAAA,EAAO,EAElBH,EAAA,GAAA,MAAA,EAAA,EAAqB,GAAA,KAAA,EAAA,EACHE,EAAA,GAAA,mBAAA,EAAiBC,EAAA,EACjCH,EAAA,GAAA,KAAA,EAAA,EAAmBE,EAAA,GAAA,oCAAA,EAA+BC,EAAA,EAClDH,EAAA,GAAA,IAAA,EAAA,EAAiBE,EAAA,GAAA,uNAAA,EAEJC,EAAA,EACbH,EAAA,GAAA,MAAA,EAAA,EAAmB,GAAA,IAAA,EAAA,MACkCA,EAAA,GAAA,MAAA,EAAA,EAAyGC,EAAA,GAAA,OAAA,EAAA,EAAihBE,EAAA,EAAM,MACnrBH,EAAA,GAAA,IAAA,EAAA,MAA4DC,EAAA,GAAA,MAAA,EAAA,EAAoCE,EAAA,MAChGH,EAAA,GAAA,IAAA,EAAA,MAAiDA,EAAA,GAAA,MAAA,EAAA,EAAyGC,EAAA,GAAA,OAAA,EAAA,EAAsTE,EAAA,EAAM,EAAI,EAGtd,EACF,EACF,MAERH,EAAA,GAAA,QAAA,EAAA,EAA+B,GAAA,MAAA,EAAA,EAEH,GAAA,IAAA,EAEpBE,EAAA,GAAA,UAAA,EAAQC,EAAA,EAEZqB,EAAA,GAAAsE,GAAA,EAAA,EAAA,IAAA,GAAApE,EAAA,EAQFvB,EAAA,EAAM,EAEA,EACJ,EAERH,EAAA,GAAA,UAAA,EAAA,EAAkC,GAAA,MAAA,EAAA,EACK,GAAA,KAAA,EAAA,EACdE,EAAA,GAAA,yBAAA,EAAuBC,EAAA,EAC5CH,EAAA,GAAA,KAAA,EAAA,EAAkBE,EAAA,GAAA,qBAAA,EAAmBC,EAAA,EACrCH,EAAA,GAAA,IAAA,EAAA,EAAiBE,EAAA,GAAA,uJAAA,EAEjBC,EAAA,EAAI,EAGNH,EAAA,GAAA,MAAA,EAAA,EACE4F,EAAA,GAAAG,GAAA,EAAA,CAAA,EAQF5F,EAAA,EAAM,EAERF,EAAA,GAAA,gBAAA,EAAiC,GAAA,iBAAA,EAEnCE,EAAA,SA9FuCC,EAAA,CAAA,EAAA4F,EAAAL,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAAyF,QAAA,EAG3B7F,EAAA,CAAA,EAAAC,EAAA,IAAAsF,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAA0F,YAAA,KAAA,EAGA9F,EAAA,2DAGAA,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAA,GAAA,GAAAqF,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAA2F,YAAA,cAAA,EAAA,GAAA,EAGF/F,EAAA,CAAA,EAAAgG,EAAAT,EAAAnF,SAAA,MAAAmF,EAAAnF,QAAAC,UAAA,GAAA,EAAA,EAQsBL,EAAA,CAAA,EAAA4F,EAAAL,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAAa,KAAA,EAIxBjB,EAAA,CAAA,EAAAkB,EAAA,MAAA,0BAAAqE,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAA6F,YAAAC,CAAA,EAAoD,MAAAX,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAAa,KAAA,EAQ1CjB,EAAA,CAAA,EAAAkB,EAAA,OAAAqE,EAAAnF,SAAA,KAAA,KAAAmF,EAAAnF,QAAAmD,OAAA,EAYDvD,EAAA,EAAA,EAAAmG,EAAA,OAAAZ,EAAA/C,OAAA4D,aAAAF,CAAA,EAEAlG,EAAA,CAAA,EAAAmG,EAAA,OAAAZ,EAAA/C,OAAA6D,WAAAH,CAAA,EAaPlG,EAAA,CAAA,EAAAuB,EAAAgE,EAAApD,OAAA,EAuBJnC,EAAA,EAAA,EAAAgG,EAAAT,EAAA/D,gBAAAwC,OAAA,EAAA,GAAA,EAAA,kBD/DFsC,EACAC,EACAC,EACAC,EACAC,GACAC,EACAC,GACAC,GACAC,EACAC,GACAC,CAAW,EAAAC,OAAA,CAAA;+DAAA,CAAA,CAAA,SAKFxF,CAAmB,GAAA",
  "names": ["SeoService", "titleService", "meta", "schemaScript", "platformId", "inject", "PLATFORM_ID", "constructor", "setBlogPostingSchema", "article", "removeSchema", "baseUrl", "environment", "schema", "headline", "title", "description", "excerpt", "image", "coverImage", "replace", "datePublished", "publishedAt", "dateModified", "updatedAt", "articleSection", "category", "keywords", "tags", "join", "author", "name", "publisher", "logo", "url", "mainEntityOfPage", "slug", "isPlatformBrowser", "document", "createElement", "type", "textContent", "JSON", "stringify", "head", "appendChild", "remove", "\u0275\u0275inject", "Title", "Meta", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind2", "ctx_r0", "article", "updatedAt", "\u0275\u0275listener", "item_r3", "\u0275\u0275restoreView", "_r2", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "scrollTo", "id", "\u0275\u0275classProp", "activeHeading", "title", "\u0275\u0275property", "relatedArticle_r4", "\u0275\u0275repeaterCreate", "BlogDetailComponent_Conditional_61_For_1_Template", "_forTrack0", "\u0275\u0275repeater", "relatedArticles", "BlogDetailComponent", "blogService", "inject", "BlogService", "route", "ActivatedRoute", "seoService", "SeoService", "router", "Router", "summary", "articleContent", "platformId", "PLATFORM_ID", "observer", "mydata", "myInfo", "ngOnInit", "paramMap", "pipe", "switchMap", "params", "slug", "get", "getArticleBySlug", "subscribe", "response", "navigate", "setBlogPostingSchema", "generateSummary", "content", "isPlatformBrowser", "initSummaryObserver", "ngAfterViewInit", "disconnect", "setTimeout", "headings", "nativeElement", "querySelectorAll", "length", "forEach", "heading", "generateHeadingId", "textContent", "IntersectionObserver", "entries", "entry", "isIntersecting", "target", "rootMargin", "observe", "element", "document", "getElementById", "scrollIntoView", "behavior", "block", "ngOnDestroy", "removeSchema", "selectors", "viewQuery", "rf", "ctx", "\u0275\u0275template", "BlogDetailComponent_Conditional_17_Template", "BlogDetailComponent_For_51_Template", "BlogDetailComponent_Conditional_61_Template", "\u0275\u0275textInterpolate", "category", "readingTime", "publishedAt", "\u0275\u0275conditional", "coverImage", "\u0275\u0275sanitizeUrl", "\u0275\u0275propertyInterpolate", "linkedinLink", "googleLink", "LucideArrowLeft", "DatePipe", "LucideClock4", "LucideCalendar", "MarkdownComponent", "RouterLink", "NewsletterComponent", "ProjectCtaComponent", "LucideRepeat2", "ArticleCardComponent", "LucideGlobe", "styles"]
}
