{
  "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\n\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.data.subscribe(({ articleData }) => {\r\n\r\n      this.article = articleData.article;\r\n      this.relatedArticles = articleData.relatedArticles;\r\n\r\n      if (!this.article) {\r\n        this.router.navigate(['/']);\r\n        return;\r\n      }\r\n\r\n      this.seoService.setBlogPostingSchema(this.article);\r\n\r\n      this.summary = this.blogService.generateSummary(\r\n        this.article.content\r\n      );\r\n\r\n      if (isPlatformBrowser(this.platformId)) {\r\n        setTimeout(() => 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", "@if (article){\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\r\n}\r\n"],
  "mappings": ";qvBASA,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,qEEYTqD,EAAA,EAAA,MAAA,MACEC,EAAA,EAAA,MAAA,EAAA,EACAC,EAAA,CAAA,cACFC,EAAA,mBADEC,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,CAAA,EAAA,OAAAC,EAAST,EAAAU,SAAAN,EAAAO,EAAA,CAAiB,CAAA,CAAA,EAC3BhB,EAAA,CAAA,EACFC,EAAA,mCAF+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,kBAAAC,EAAApB,EAAAqB,eAAA,6BA1FR5B,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,MACgBC,EAAA,GAAA,MAAA,EAAA,EACjCC,EAAA,EAAA,EAA6BC,EAAA,MAC7BH,EAAA,GAAA,OAAA,EAAA,MAIEC,EAAA,GAAA,MAAA,EAAA,EACAC,EAAA,EAAA,eAEFC,EAAA,EACA0B,EAAA,GAAAC,GAAA,EAAA,EAAA,MAAA,EAMF3B,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,GAAAO,GAAA,EAAA,EAAA,IAAA,GAAAL,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,EACE6B,EAAA,GAAAG,GAAA,EAAA,CAAA,EAQF7B,EAAA,EAAM,EAERF,EAAA,GAAA,gBAAA,EAAiC,GAAA,iBAAA,EAEnCE,EAAA,kBA9FuCC,EAAA,CAAA,EAAA6B,EAAA1B,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAA0B,QAAA,EAG7B9B,EAAA,CAAA,EAAAC,EAAA,IAAAE,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAA2B,YAAA,KAAA,EAGE/B,EAAA,2DAGAA,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAA,GAAA,GAAAC,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAA4B,YAAA,cAAA,EAAA,GAAA,EAGFhC,EAAA,CAAA,EAAAiC,EAAA9B,EAAAC,SAAA,MAAAD,EAAAC,QAAAC,UAAA,GAAA,EAAA,EAQsBL,EAAA,CAAA,EAAA6B,EAAA1B,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAAa,KAAA,EAIxBjB,EAAA,CAAA,EAAAkB,EAAA,MAAA,0BAAAf,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAA8B,YAAAC,CAAA,EAAoD,MAAAhC,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAAa,KAAA,EAQ1CjB,EAAA,CAAA,EAAAkB,EAAA,OAAAf,EAAAC,SAAA,KAAA,KAAAD,EAAAC,QAAAgC,OAAA,EAYDpC,EAAA,EAAA,EAAAqC,EAAA,OAAAlC,EAAAmC,OAAAC,aAAAJ,CAAA,EAEAnC,EAAA,CAAA,EAAAqC,EAAA,OAAAlC,EAAAmC,OAAAE,WAAAL,CAAA,EAaPnC,EAAA,CAAA,EAAAuB,EAAApB,EAAAsC,OAAA,EAuBJzC,EAAA,EAAA,EAAAiC,EAAA9B,EAAAqB,gBAAAkB,OAAA,EAAA,GAAA,EAAA,GDjDR,IAAaC,IAAmB,IAAA,CAA1B,MAAOA,CAAmB,CAEtBC,YAAcC,EAAOC,CAAW,EAChCC,MAAQF,EAAOG,CAAc,EAC7BC,WAAaJ,EAAOK,EAAU,EAC9BC,OAASN,EAAOO,CAAM,EAEpBhD,QACAoB,gBAAiC,CAAA,EAC3CiB,QAA2C,CAAA,EAE3CY,eACQC,WAAaT,EAAOU,CAAW,EACvCvC,cAAgB,GACRwC,SAERlB,OAASmB,EAGTC,UAAQ,CACN,KAAKX,MAAMY,KAAKC,UAAU,CAAC,CAAEC,YAAAA,CAAW,IAAM,CAK5C,GAHA,KAAKzD,QAAUyD,EAAYzD,QAC3B,KAAKoB,gBAAkBqC,EAAYrC,gBAE/B,CAAC,KAAKpB,QAAS,CACjB,KAAK+C,OAAOW,SAAS,CAAC,GAAG,CAAC,EAC1B,MACF,CAEA,KAAKb,WAAWc,qBAAqB,KAAK3D,OAAO,EAEjD,KAAKqC,QAAU,KAAKG,YAAYoB,gBAC9B,KAAK5D,QAAQgC,OAAO,EAGlB6B,EAAkB,KAAKX,UAAU,GACnCY,WAAW,IAAM,KAAKC,oBAAmB,CAAE,CAE/C,CAAC,CACH,CAEAC,iBAAe,CACRH,EAAkB,KAAKX,UAAU,GAGtC,KAAKa,oBAAmB,CAC1B,CAEQA,qBAAmB,CAEzB,KAAKX,UAAUa,WAAU,EAEzBH,WAAW,IAAK,CAEd,IAAMI,EACJ,KAAKjB,eAAekB,cAAcC,iBAAiB,IAAI,EAEpDF,EAAS5B,SAId4B,EAASG,QAASC,GAAwB,CAExCA,EAAQ5D,GAAK,KAAK8B,YAAY+B,kBAC5BD,EAAQE,aAAe,EAAE,CAG7B,CAAC,EAED,KAAKpB,SAAW,IAAIqB,qBACjBC,GAAW,CAEVA,EAAQL,QAAQM,GAAQ,CAElBA,EAAMC,iBACR,KAAKhE,cACF+D,EAAME,OAAuBnE,GAGpC,CAAC,CAEH,EACA,CACEoE,WAAY,sBACb,EAGHZ,EAASG,QAASC,GAAwB,CACxC,KAAKlB,UAAU2B,QAAQT,CAAO,CAChC,CAAC,EAEH,CAAC,CAEH,CAEA7D,SAASC,EAAU,CACjB,IAAMsE,EAAUC,SAASC,eAAexE,CAAE,EAErCsE,GAILA,EAAQG,eAAe,CACrBC,SAAU,SACVC,MAAO,QACR,CAEH,CAEAC,aAAW,CACT,KAAKlC,UAAUa,WAAU,EACzB,KAAKpB,WAAW0C,aAAY,CAC9B,4CAjHWhD,EAAmB,2BAAnBA,EAAmBiD,UAAA,CAAA,CAAA,iBAAA,CAAA,EAAAC,UAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,2jECzChCrE,EAAA,EAAAuE,GAAA,GAAA,GAAA,UAAA,CAAA,OAAA/D,EAAA8D,EAAA3F,QAAA,EAAA,EAAA,iBD0BI6F,EACAC,EACAC,EACAC,EACAC,GACAC,EACAC,GACAC,GACAC,EACAC,GACAC,CAAW,EAAAC,OAAA,CAAA;+DAAA,CAAA,CAAA,SAKFjE,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_0_Conditional_61_For_1_Template", "_forTrack0", "\u0275\u0275repeater", "relatedArticles", "\u0275\u0275template", "BlogDetailComponent_Conditional_0_Conditional_17_Template", "BlogDetailComponent_Conditional_0_For_51_Template", "BlogDetailComponent_Conditional_0_Conditional_61_Template", "\u0275\u0275textInterpolate", "category", "readingTime", "publishedAt", "\u0275\u0275conditional", "coverImage", "\u0275\u0275sanitizeUrl", "content", "\u0275\u0275propertyInterpolate", "mydata", "linkedinLink", "googleLink", "summary", "length", "BlogDetailComponent", "blogService", "inject", "BlogService", "route", "ActivatedRoute", "seoService", "SeoService", "router", "Router", "articleContent", "platformId", "PLATFORM_ID", "observer", "myInfo", "ngOnInit", "data", "subscribe", "articleData", "navigate", "setBlogPostingSchema", "generateSummary", "isPlatformBrowser", "setTimeout", "initSummaryObserver", "ngAfterViewInit", "disconnect", "headings", "nativeElement", "querySelectorAll", "forEach", "heading", "generateHeadingId", "textContent", "IntersectionObserver", "entries", "entry", "isIntersecting", "target", "rootMargin", "observe", "element", "document", "getElementById", "scrollIntoView", "behavior", "block", "ngOnDestroy", "removeSchema", "selectors", "viewQuery", "rf", "ctx", "BlogDetailComponent_Conditional_0_Template", "LucideArrowLeft", "DatePipe", "LucideClock4", "LucideCalendar", "MarkdownComponent", "RouterLink", "NewsletterComponent", "ProjectCtaComponent", "LucideRepeat2", "ArticleCardComponent", "LucideGlobe", "styles"]
}
