@posiwise/resource-module 0.0.203 → 0.0.205

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.
Files changed (34) hide show
  1. package/fesm2022/{posiwise-resource-module-resource-blogs.module-mSKg7oDE.mjs → posiwise-resource-module-resource-blogs.module-C_sTQ0w2.mjs} +3 -3
  2. package/fesm2022/{posiwise-resource-module-resource-blogs.module-mSKg7oDE.mjs.map → posiwise-resource-module-resource-blogs.module-C_sTQ0w2.mjs.map} +1 -1
  3. package/fesm2022/{posiwise-resource-module-resource-case-studies.module-rCEpwQ4J.mjs → posiwise-resource-module-resource-case-studies.module-D1hCU5_H.mjs} +3 -3
  4. package/fesm2022/posiwise-resource-module-resource-case-studies.module-D1hCU5_H.mjs.map +1 -0
  5. package/fesm2022/{posiwise-resource-module-resource-events.module-Djau8zuG.mjs → posiwise-resource-module-resource-events.module-D7yC0Sqt.mjs} +3 -3
  6. package/fesm2022/posiwise-resource-module-resource-events.module-D7yC0Sqt.mjs.map +1 -0
  7. package/fesm2022/{posiwise-resource-module-resource-hub.module-CQtyBld2.mjs → posiwise-resource-module-resource-hub.module-alVvQLvR.mjs} +5 -5
  8. package/fesm2022/posiwise-resource-module-resource-hub.module-alVvQLvR.mjs.map +1 -0
  9. package/fesm2022/{posiwise-resource-module-resource-integrations.module-BXyPZf3W.mjs → posiwise-resource-module-resource-integrations.module-G4XvMMYf.mjs} +5 -5
  10. package/fesm2022/posiwise-resource-module-resource-integrations.module-G4XvMMYf.mjs.map +1 -0
  11. package/fesm2022/{posiwise-resource-module-resource-jobs.module-B53AOs8y.mjs → posiwise-resource-module-resource-jobs.module-DOdaBrZi.mjs} +3 -3
  12. package/fesm2022/{posiwise-resource-module-resource-jobs.module-B53AOs8y.mjs.map → posiwise-resource-module-resource-jobs.module-DOdaBrZi.mjs.map} +1 -1
  13. package/fesm2022/{posiwise-resource-module-resource-post.module-DIaB5kyW.mjs → posiwise-resource-module-resource-post.module-CGxj27dN.mjs} +3 -3
  14. package/fesm2022/{posiwise-resource-module-resource-post.module-DIaB5kyW.mjs.map → posiwise-resource-module-resource-post.module-CGxj27dN.mjs.map} +1 -1
  15. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-Btxs8la7.mjs → posiwise-resource-module-resource-release-notes.module-CLry1QNC.mjs} +5 -5
  16. package/fesm2022/posiwise-resource-module-resource-release-notes.module-CLry1QNC.mjs.map +1 -0
  17. package/fesm2022/{posiwise-resource-module-resource-root.module-BukwL-wp.mjs → posiwise-resource-module-resource-root.module-x4TYntdq.mjs} +7 -7
  18. package/fesm2022/posiwise-resource-module-resource-root.module-x4TYntdq.mjs.map +1 -0
  19. package/fesm2022/{posiwise-resource-module-resource-videos.module-CFkPbXn3.mjs → posiwise-resource-module-resource-videos.module-2ugtK7wA.mjs} +5 -5
  20. package/fesm2022/posiwise-resource-module-resource-videos.module-2ugtK7wA.mjs.map +1 -0
  21. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-DBjSfwx4.mjs → posiwise-resource-module-resource-white-papers.module-pn6rtDc3.mjs} +5 -5
  22. package/fesm2022/posiwise-resource-module-resource-white-papers.module-pn6rtDc3.mjs.map +1 -0
  23. package/fesm2022/posiwise-resource-module.mjs +176 -141
  24. package/fesm2022/posiwise-resource-module.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/types/posiwise-resource-module.d.ts +66 -20
  27. package/fesm2022/posiwise-resource-module-resource-case-studies.module-rCEpwQ4J.mjs.map +0 -1
  28. package/fesm2022/posiwise-resource-module-resource-events.module-Djau8zuG.mjs.map +0 -1
  29. package/fesm2022/posiwise-resource-module-resource-hub.module-CQtyBld2.mjs.map +0 -1
  30. package/fesm2022/posiwise-resource-module-resource-integrations.module-BXyPZf3W.mjs.map +0 -1
  31. package/fesm2022/posiwise-resource-module-resource-release-notes.module-Btxs8la7.mjs.map +0 -1
  32. package/fesm2022/posiwise-resource-module-resource-root.module-BukwL-wp.mjs.map +0 -1
  33. package/fesm2022/posiwise-resource-module-resource-videos.module-CFkPbXn3.mjs.map +0 -1
  34. package/fesm2022/posiwise-resource-module-resource-white-papers.module-DBjSfwx4.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-jobs.module-B53AOs8y.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-jobs/job-cards/job-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-jobs/job-cards/job-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs-top-banner/resource-jobs-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs-top-banner/resource-jobs-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs.component.html","../../../../libs/resource-module/src/lib/public/modules/jobs/resource-jobs.module.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppLoaderComponent } from '@posiwise/app-loader';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { DateFormatPipe } from '@posiwise/pipes';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { PublicPost, ResourcePager } from '../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../resource-edit-card-lazy/resource-edit-card-lazy.component';\n\nexport type JobPost = PublicPost & { blurb?: string; cta_text?: string; published_at?: string };\n\n/** Open positions for one tag category, paged on scroll. */\n@Component({\n selector: 'pw-resource-job-cards',\n templateUrl: './job-cards.component.html',\n styleUrls: ['./job-cards.component.scss', './job-cards-states.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DateFormatPipe, TranslocoPipe, AppLoaderComponent, ResourceEditCardLazyComponent]\n})\nexport class ResourceJobCardsComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true }) categoryId!: number;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n pager: ResourcePager<JobPost>;\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n canEdit = false;\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n this.subscriptionId = res ? JSON.parse(res)?.subscriptionId : undefined;\n this.cdr.markForCheck();\n });\n }\n this.loadPosts();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['user'] || changes['userLoggedIn']) && this.userLoggedIn && this.user) {\n this.canEdit = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n }\n\n get posts(): JobPost[] {\n return this.pager?.items ?? [];\n }\n\n get isLoaded(): boolean {\n return this.pager?.isLoaded ?? false;\n }\n\n get isLoadingMore(): boolean {\n return this.pager?.isLoadingMore ?? false;\n }\n\n /** The open positions could not be loaded; never shown as \"no open positions\". */\n get hasError(): boolean {\n return !!this.pager?.hasError && this.posts.length === 0;\n }\n\n get total(): number {\n return this.pager?.totalCount ?? 0;\n }\n\n loadPosts(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n ),\n tagCategoryIds: String(this.categoryId)\n }),\n () => this.cdr.markForCheck(),\n () => true\n );\n this.pager.reset();\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n this.pager?.loadMoreIfNearBottom();\n }\n\n /** An off-site apply link when the post has one, otherwise the post's own page. */\n jobLink(post: JobPost): string {\n return post.external_url || `/resources/view/${post.slug}`;\n }\n}\n","<section class=\"jobs-section\">\n <div class=\"container\">\n @if (!isLoaded) {\n <div class=\"jobs-loading\">\n <pw-loader [isVisible]=\"true\" />\n </div>\n } @else if (hasError) {\n <div class=\"jobs-state jobs-error\" role=\"alert\">\n <p class=\"jobs-state__message\">{{ 'Resource.Jobs.LoadError' | transloco }}</p>\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"loadPosts()\">\n {{ 'Resource.Jobs.Retry' | transloco }}\n </button>\n </div>\n } @else if (posts.length === 0) {\n <div class=\"jobs-state jobs-empty\">\n <span class=\"jobs-state__icon\" aria-hidden=\"true\"><i class=\"fa fa-briefcase\"></i></span>\n <p class=\"jobs-state__message\">{{ 'Resource.Jobs.Empty' | transloco }}</p>\n </div>\n } @else {\n <p class=\"jobs-count\">\n {{ (total === 1 ? 'Resource.Jobs.CountOne' : 'Resource.Jobs.CountMany') | transloco: { count: total } }}\n </p>\n <ul class=\"jobs-grid\">\n @for (post of posts; track post.id) {\n <li class=\"job-card\">\n <pw-resource-edit-card-lazy\n class=\"job-card__edit\"\n [canEdit]=\"canEdit\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadPosts()\" />\n <span class=\"job-card__icon\" aria-hidden=\"true\"><i class=\"fa fa-briefcase\"></i></span>\n <h2 class=\"job-card__title\">\n <a\n class=\"job-card__link\"\n [href]=\"jobLink(post)\"\n [attr.target]=\"post.external_url ? '_blank' : null\"\n [attr.rel]=\"post.external_url ? 'noopener noreferrer' : null\">\n {{ post.title }}\n @if (post.external_url) {\n <span class=\"visually-hidden\">{{ 'Resource.Jobs.OpensInNewTab' | transloco }}</span>\n }\n </a>\n </h2>\n @if (post.blurb) {\n <p class=\"job-card__blurb\">{{ post.blurb }}</p>\n }\n <div class=\"job-card__footer\">\n @if (post.published_at) {\n <span class=\"job-card__date\">\n {{ 'Resource.Jobs.Posted' | transloco: { date: (post.published_at | dateFormat) } }}\n </span>\n }\n <span class=\"job-card__cta\" aria-hidden=\"true\">\n {{ post.cta_text || ('Resource.Jobs.ViewRole' | transloco) }}\n <i class=\"fa fa-arrow-right\"></i>\n </span>\n </div>\n </li>\n }\n </ul>\n @if (isLoadingMore) {\n <div class=\"jobs-loading jobs-loading--more\">\n <pw-loader [isVisible]=\"true\" />\n </div>\n }\n }\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\nimport { ResourceTopBannerEditComponent } from '../../resource-top-banner-edit/resource-top-banner-edit.component';\n\nconst FALLBACK_IMAGE = '/assets/img/resource/careers-team.svg';\nconst FALLBACK_IMAGE_STILL = '/assets/img/resource/careers-team-static.svg';\n\n@Component({\n selector: 'pw-resource-jobs-top-banner',\n templateUrl: './resource-jobs-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n '../../resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss',\n './resource-jobs-top-banner.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ResourceTopBannerEditComponent, TranslocoPipe]\n})\nexport class ResourceJobsTopBannerComponent extends BaseTopBannerComponent {\n /** The master's uploaded banner, or the default when none was uploaded. */\n get bannerImage(): string {\n return this.hasUploadedImage ? this.blogPostTag.image.url : FALLBACK_IMAGE;\n }\n\n /** The default art animates; this still copy is served when the visitor asks for reduced motion. */\n readonly stillBannerImage = FALLBACK_IMAGE_STILL;\n\n get hasUploadedImage(): boolean {\n const url = this.blogPostTag?.image?.url;\n return !!url && !url.includes('no_image_uploaded_squared');\n }\n\n get hasDescription(): boolean {\n const description = this.blogPostTag?.description;\n return !!description && description !== 'null';\n }\n\n protected getSearchTerm(): string {\n return 'Jobs';\n }\n}\n","<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n @if (blogPostTag?.title) {\n <span>{{ blogPostTag.title }}</span>\n } @else {\n <span>{{ 'Resource.Jobs.DefaultTitle' | transloco }}</span>\n }\n @if (canEditResourcesValue && blogPostTag) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n @if (hasDescription) {\n <p class=\"intro jobs-banner-intro\">{{ blogPostTag.description }}</p>\n } @else {\n <p class=\"intro\">{{ 'Resource.Jobs.DefaultIntro' | transloco }}</p>\n }\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <picture class=\"jobs-banner-picture\">\n @if (!hasUploadedImage) {\n <source media=\"(prefers-reduced-motion: reduce)\" [srcset]=\"stillBannerImage\" />\n }\n <img class=\"resource-laptop-img dyn-img jobs-banner-art\"\n [src]=\"bannerImage\"\n [alt]=\"'Resource.Jobs.BannerAlt' | transloco\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </picture>\n </div>\n </div>\n }\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\nimport { ResourceJobCardsComponent } from './job-cards/job-cards.component';\nimport { ResourceJobsTopBannerComponent } from './resource-jobs-top-banner/resource-jobs-top-banner.component';\n\n/** `/resources/careers`: every published post tagged Jobs, as job cards. */\n@Component({\n selector: 'pw-resource-jobs',\n templateUrl: './resource-jobs.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ResourceJobsTopBannerComponent,\n ResourceJobCardsComponent,\n Trial4ContactUsComponent\n ]\n})\nexport class ResourceJobsComponent extends BaseResourceComponent {\n protected getResourceType(): string {\n return 'Jobs';\n }\n\n // The job cards page through the posts themselves; the base class would fetch them a second time.\n protected override getPosts(): void {\n return;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n\n<pw-resource-jobs-top-banner />\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-job-cards [categoryId]=\"blogPostTag.tag_category_id\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\" />\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceJobsComponent } from '../../components/resource-jobs/resource-jobs.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceJobsComponent,\n data: {\n title: 'Resources - Careers',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [ResourceSharedModule, RouterModule.forChild(routes), ResourceJobsComponent]\n})\nexport class ResourceJobsModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-jobs.module-DOdaBrZi.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-jobs/job-cards/job-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-jobs/job-cards/job-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs-top-banner/resource-jobs-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs-top-banner/resource-jobs-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-jobs/resource-jobs.component.html","../../../../libs/resource-module/src/lib/public/modules/jobs/resource-jobs.module.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppLoaderComponent } from '@posiwise/app-loader';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { DateFormatPipe } from '@posiwise/pipes';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { PublicPost, ResourcePager } from '../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../resource-edit-card-lazy/resource-edit-card-lazy.component';\n\nexport type JobPost = PublicPost & { blurb?: string; cta_text?: string; published_at?: string };\n\n/** Open positions for one tag category, paged on scroll. */\n@Component({\n selector: 'pw-resource-job-cards',\n templateUrl: './job-cards.component.html',\n styleUrls: ['./job-cards.component.scss', './job-cards-states.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DateFormatPipe, TranslocoPipe, AppLoaderComponent, ResourceEditCardLazyComponent]\n})\nexport class ResourceJobCardsComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true }) categoryId!: number;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n pager: ResourcePager<JobPost>;\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n canEdit = false;\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n this.subscriptionId = res ? JSON.parse(res)?.subscriptionId : undefined;\n this.cdr.markForCheck();\n });\n }\n this.loadPosts();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['user'] || changes['userLoggedIn']) && this.userLoggedIn && this.user) {\n this.canEdit = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n }\n\n get posts(): JobPost[] {\n return this.pager?.items ?? [];\n }\n\n get isLoaded(): boolean {\n return this.pager?.isLoaded ?? false;\n }\n\n get isLoadingMore(): boolean {\n return this.pager?.isLoadingMore ?? false;\n }\n\n /** The open positions could not be loaded; never shown as \"no open positions\". */\n get hasError(): boolean {\n return !!this.pager?.hasError && this.posts.length === 0;\n }\n\n get total(): number {\n return this.pager?.totalCount ?? 0;\n }\n\n loadPosts(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n ),\n tagCategoryIds: String(this.categoryId)\n }),\n () => this.cdr.markForCheck(),\n () => true\n );\n this.pager.reset();\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n this.pager?.loadMoreIfNearBottom();\n }\n\n /** An off-site apply link when the post has one, otherwise the post's own page. */\n jobLink(post: JobPost): string {\n return post.external_url || `/resources/view/${post.slug}`;\n }\n}\n","<section class=\"jobs-section\">\n <div class=\"container\">\n @if (!isLoaded) {\n <div class=\"jobs-loading\">\n <pw-loader [isVisible]=\"true\" />\n </div>\n } @else if (hasError) {\n <div class=\"jobs-state jobs-error\" role=\"alert\">\n <p class=\"jobs-state__message\">{{ 'Resource.Jobs.LoadError' | transloco }}</p>\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"loadPosts()\">\n {{ 'Resource.Jobs.Retry' | transloco }}\n </button>\n </div>\n } @else if (posts.length === 0) {\n <div class=\"jobs-state jobs-empty\">\n <span class=\"jobs-state__icon\" aria-hidden=\"true\"><i class=\"fa fa-briefcase\"></i></span>\n <p class=\"jobs-state__message\">{{ 'Resource.Jobs.Empty' | transloco }}</p>\n </div>\n } @else {\n <p class=\"jobs-count\">\n {{ (total === 1 ? 'Resource.Jobs.CountOne' : 'Resource.Jobs.CountMany') | transloco: { count: total } }}\n </p>\n <ul class=\"jobs-grid\">\n @for (post of posts; track post.id) {\n <li class=\"job-card\">\n <pw-resource-edit-card-lazy\n class=\"job-card__edit\"\n [canEdit]=\"canEdit\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadPosts()\" />\n <span class=\"job-card__icon\" aria-hidden=\"true\"><i class=\"fa fa-briefcase\"></i></span>\n <h2 class=\"job-card__title\">\n <a\n class=\"job-card__link\"\n [href]=\"jobLink(post)\"\n [attr.target]=\"post.external_url ? '_blank' : null\"\n [attr.rel]=\"post.external_url ? 'noopener noreferrer' : null\">\n {{ post.title }}\n @if (post.external_url) {\n <span class=\"visually-hidden\">{{ 'Resource.Jobs.OpensInNewTab' | transloco }}</span>\n }\n </a>\n </h2>\n @if (post.blurb) {\n <p class=\"job-card__blurb\">{{ post.blurb }}</p>\n }\n <div class=\"job-card__footer\">\n @if (post.published_at) {\n <span class=\"job-card__date\">\n {{ 'Resource.Jobs.Posted' | transloco: { date: (post.published_at | dateFormat) } }}\n </span>\n }\n <span class=\"job-card__cta\" aria-hidden=\"true\">\n {{ post.cta_text || ('Resource.Jobs.ViewRole' | transloco) }}\n <i class=\"fa fa-arrow-right\"></i>\n </span>\n </div>\n </li>\n }\n </ul>\n @if (isLoadingMore) {\n <div class=\"jobs-loading jobs-loading--more\">\n <pw-loader [isVisible]=\"true\" />\n </div>\n }\n }\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\nimport { ResourceTopBannerEditComponent } from '../../resource-top-banner-edit/resource-top-banner-edit.component';\n\nconst FALLBACK_IMAGE = '/assets/img/resource/careers-team.svg';\nconst FALLBACK_IMAGE_STILL = '/assets/img/resource/careers-team-static.svg';\n\n@Component({\n selector: 'pw-resource-jobs-top-banner',\n templateUrl: './resource-jobs-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n '../../resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss',\n './resource-jobs-top-banner.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ResourceTopBannerEditComponent, TranslocoPipe]\n})\nexport class ResourceJobsTopBannerComponent extends BaseTopBannerComponent {\n /** The master's uploaded banner, or the default when none was uploaded. */\n get bannerImage(): string {\n return this.hasUploadedImage ? this.blogPostTag.image.url : FALLBACK_IMAGE;\n }\n\n /** The default art animates; this still copy is served when the visitor asks for reduced motion. */\n readonly stillBannerImage = FALLBACK_IMAGE_STILL;\n\n get hasUploadedImage(): boolean {\n const url = this.blogPostTag?.image?.url;\n return !!url && !url.includes('no_image_uploaded_squared');\n }\n\n get hasDescription(): boolean {\n const description = this.blogPostTag?.description;\n return !!description && description !== 'null';\n }\n\n protected getSearchTerm(): string {\n return 'Jobs';\n }\n}\n","<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n @if (blogPostTag?.title) {\n <span>{{ blogPostTag.title }}</span>\n } @else {\n <span>{{ 'Resource.Jobs.DefaultTitle' | transloco }}</span>\n }\n @if (canEditResourcesValue && blogPostTag) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n @if (hasDescription) {\n <p class=\"intro jobs-banner-intro\">{{ blogPostTag.description }}</p>\n } @else {\n <p class=\"intro\">{{ 'Resource.Jobs.DefaultIntro' | transloco }}</p>\n }\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <picture class=\"jobs-banner-picture\">\n @if (!hasUploadedImage) {\n <source media=\"(prefers-reduced-motion: reduce)\" [srcset]=\"stillBannerImage\" />\n }\n <img class=\"resource-laptop-img dyn-img jobs-banner-art\"\n [src]=\"bannerImage\"\n [alt]=\"'Resource.Jobs.BannerAlt' | transloco\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </picture>\n </div>\n </div>\n }\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\nimport { ResourceJobCardsComponent } from './job-cards/job-cards.component';\nimport { ResourceJobsTopBannerComponent } from './resource-jobs-top-banner/resource-jobs-top-banner.component';\n\n/** `/resources/careers`: every published post tagged Jobs, as job cards. */\n@Component({\n selector: 'pw-resource-jobs',\n templateUrl: './resource-jobs.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ResourceJobsTopBannerComponent,\n ResourceJobCardsComponent,\n Trial4ContactUsComponent\n ]\n})\nexport class ResourceJobsComponent extends BaseResourceComponent {\n protected getResourceType(): string {\n return 'Jobs';\n }\n\n // The job cards page through the posts themselves; the base class would fetch them a second time.\n protected override getPosts(): void {\n return;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n\n<pw-resource-jobs-top-banner />\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-job-cards [categoryId]=\"blogPostTag.tag_category_id\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\" />\n}\n\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceJobsComponent } from '../../components/resource-jobs/resource-jobs.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceJobsComponent,\n data: {\n title: 'Resources - Careers',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [ResourceSharedModule, RouterModule.forChild(routes), ResourceJobsComponent]\n})\nexport class ResourceJobsModule {}\n"],"mappings":"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"}
@@ -632,7 +632,7 @@ var ResourcePostComponent = class ResourcePostComponent extends AppBaseComponent
632
632
  selector: "app-resource-post",
633
633
  usesInheritance: true,
634
634
  ngImport: i0,
635
- template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-resource-post-details></pw-resource-post-details>\n<pw-related-resources></pw-related-resources>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>",
635
+ template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n<pw-resource-post-details></pw-resource-post-details>\n<pw-related-resources></pw-related-resources>\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>",
636
636
  styles: ["::ng-deep .resource-header .navbar-nav .nav-item .nav-link{color:#000!important}\n"],
637
637
  dependencies: [
638
638
  {
@@ -688,7 +688,7 @@ i0.ɵɵngDeclareClassMetadata({
688
688
  Trial4ContactUsComponent
689
689
  ],
690
690
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
691
- template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-resource-post-details></pw-resource-post-details>\n<pw-related-resources></pw-related-resources>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>",
691
+ template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n<pw-resource-post-details></pw-resource-post-details>\n<pw-related-resources></pw-related-resources>\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>",
692
692
  styles: ["::ng-deep .resource-header .navbar-nav .nav-item .nav-link{color:#000!important}\n"]
693
693
  }]
694
694
  }]
@@ -768,4 +768,4 @@ i0.ɵɵngDeclareClassMetadata({
768
768
  });
769
769
  export { ResourcePostModule };
770
770
 
771
- //# sourceMappingURL=posiwise-resource-module-resource-post.module-DIaB5kyW.mjs.map
771
+ //# sourceMappingURL=posiwise-resource-module-resource-post.module-CGxj27dN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-post.module-DIaB5kyW.mjs","names":["i1"],"sources":["../../../../libs/resource-module/src/lib/shared/models/resource.model.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/related-resources.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/related-resources.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post-details/resource-post-details.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post-details/resource-post-details.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post.component.html","../../../../libs/resource-module/src/lib/public/modules/post/resource-post.module.ts"],"sourcesContent":["import { FormBuilder, Validators } from '@angular/forms';\n\nexport class ResourceBlog {\n static getResourcePostsForm() {\n return new FormBuilder().group({\n related_entity_id: [''],\n related_entity_type: [''],\n comment: [null, Validators.required],\n user_id: ['']\n });\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { RouterLink } from '@angular/router';\n\nimport { HubSpotMeetingsSharedModule } from '@posiwise/alpha-module';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, CustomToastService, TagService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { ButtonBusyDirective, LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { Bind } from 'primeng/bind';\nimport { Textarea } from 'primeng/textarea';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { ResourceBlog } from '../../../../shared/models/resource.model';\n\nimport { ResourceCardComponent } from './resource-cards/resource-cards.component';\n\n@Component({\n selector: 'pw-related-resources',\n templateUrl: './related-resources.component.html',\n styleUrls: ['./related-resources.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n Bind,\n Textarea,\n ButtonBusyDirective,\n RouterLink,\n LazyImgDirective,\n HubSpotMeetingsSharedModule,\n ResourceCardComponent,\n DatePipe,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class RelatedResourcesComponent extends AppBaseComponent implements OnInit {\n private readonly resourceService = inject(ResourceService);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly tagService = inject(TagService);\n private readonly authService = inject(AuthService);\n private readonly toastr = inject(CustomToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n resourceCards = [\n {\n title: 'BLOG: Here’s why you should QA your distributor invoices',\n image: '/assets/img/resource/resource-qa.png',\n alt: 'QA distributor invoices',\n url: '/resources/view/here-s-why-you-should-be-seeking-independent-qa-of-all-distributor-inv'\n },\n {\n title: 'BLOG: 4 instant hacks to uplift your MSP’s monthly billing',\n image: '/assets/img/resource/resource-hacks.png',\n alt: 'Monthly billing hacks',\n url: '/resources/view/4-instant-hacks-to-uplift-your-msp-s-monthly-billing'\n },\n {\n title: 'BLOG: The trivial detail that will either future-proof or sabotage your PSA.',\n image: '/assets/img/resource/resource-psa.png',\n alt: 'PSA future-proof',\n url: '/resources/view/the-trivial-detail-that-will-either-future-proof-or-sabotage-your-psa'\n }\n ];\n\n post;\n masterSubscriptionId;\n slug;\n\n postComments = [];\n commentForm;\n\n userLoggedIn: boolean;\n\n demoLinks = this.appConfig?.pages_config?.book_demo?.items;\n\n user: User;\n blogPostTag;\n subscriptionId;\n isMasterSubscription;\n linkedInUrl = this.appConfig?.social?.linkedin_url;\n company_email = this.appConfig.company.email;\n\n constructor() {\n super();\n this.commentForm = ResourceBlog.getResourcePostsForm();\n }\n\n ngOnInit(): void {\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.route.params.subscribe(params => {\n this.slug = params['slug'] ?? '';\n this.getBlogItem(this.slug);\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n\n this.getPostTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getPostTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n get hasValidDemoLinks(): boolean {\n return (\n Array.isArray(this.demoLinks) && this.demoLinks.some(link => link?.title ?? link?.url)\n );\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === 'Blog Posts');\n this.cdr.markForCheck();\n });\n }\n\n private getBlogItem(slug: string) {\n this.resourceService.getPostBySlug(slug).subscribe(response => {\n let blogBody;\n if (response?.body) {\n blogBody = HelperService.sanitizeQuillBody(response.body, this.sanitizer);\n }\n const date = new Date(response?.when);\n const formatted = date.toISOString().split('T')[0];\n this.postComments = response.entity_comments;\n this.post = { ...response, body: blogBody, when: formatted };\n this.cdr.markForCheck();\n });\n }\n\n onComment() {\n const data = { ...this.commentForm.value };\n data.related_entity_id = this.post?.id;\n data.related_entity_type = 'Post';\n data.user_id = this.user?.id;\n this.resourceService.postComments(data).subscribe(() => {\n this.getBlogItem(this.slug);\n this.commentForm.reset();\n this.toastr.success(this.translation.translate('Resource.Posts.CommentAdded'));\n this.cdr.markForCheck();\n });\n }\n\n trackByComment(_index: number, item: { id: number }) {\n return item.id;\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n}\n","\n\n<section class=\"resource-body-section\">\n <div class=\"container\">\n <div class=\"ql-snow body-quill\"\n >\n <div class=\"ql-editor body post-body-text\"\n [innerHTML]=\"post?.body\">\n </div>\n </div>\n <section class=\"resource-offer-section\">\n\n <div class=\"row mt-5 mb-4 response-row\">\n <div class=\"col-12\">\n @if (userLoggedIn) {\n <form\n class=\"p-fluid mb-5\"\n [formGroup]=\"commentForm\"\n (ngSubmit)=\"onComment()\"\n >\n <div class=\"card shadow-sm no-border p-4\">\n <div class=\"field\">\n <label for=\"related-resources-comment\" class=\"font-bold text-lg mb-4 comment-label\">💬 LEAVE A COMMENT</label>\n <textarea\n id=\"related-resources-comment\"\n pInputTextarea\n formControlName=\"comment\"\n rows=\"6\"\n fluid\n placeholder=\"What's on your mind?\"\n\n aria-label=\"What's on your mind?\" ></textarea>\n @if (commentForm.get('comment')?.invalid && commentForm.get('comment')?.touched) {\n <small\n class=\"text-danger\"\n >Please enter comment</small\n >\n }\n </div>\n <div class=\"text-end mt-3\">\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"sign-btn sign-header-btn\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n } @else {\n <p class=\"text-center pt-3 pb-3 user-not-logged-in text-muted shadow-sm mb-5\">\n <a [routerLink]=\"['/login']\" class=\"text-primary fw-bold\">Log in</a> to leave a comment!\n </p>\n }\n </div>\n </div>\n\n @if (postComments.length > 0) {\n <div class=\"row mt-5 comment-row\">\n @for (comment of postComments; track trackByComment($index, comment)) {\n <div class=\"col-12\">\n <div class=\"card no-border shadow-sm p-3 mb-3\">\n <div class=\"d-flex align-items-start\">\n <img\n [src]=\"comment?.author?.avatar?.[0]?.url || 'assets/img/icons/male.png'\"\n alt=\"avatar\"\n class=\"rounded-circle me-3\"\n width=\"50\"\n height=\"50\"\n (error)=\"handleImageError($event, 'assets/img/icons/male.png')\"\n />\n <div class=\"flex-grow-1\">\n <div class=\"fw-bold text-dark\">\n {{ comment.user?.first_name || '' }} {{ comment.user?.last_name || '' }}\n </div>\n <div class=\"text-muted small mb-2\">{{ comment.created_at | date: 'dd MMM yyyy, h:mm a' }}</div>\n <div class=\"text-body\">\n {{ comment.comment }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n\n </section>\n </div>\n <hr class=\"resource-divider\" />\n </section>\n\n @if (hasValidDemoLinks) {\n <section class=\"resource-book-section\">\n <div class=\"container\">\n <p class=\"resource-contact\">\n Any questions, get in touch <a href=\"mailto:{{ company_email }}\">here</a>,\n <a [href]=\"linkedInUrl\" target=\"_blank\">connect on LinkedIn</a>, or book a meeting below:\n </p>\n </div>\n <pw-book-a-demo [isBlog]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-book-a-demo>\n <hr class=\"resource-divider\" />\n </section>\n }\n\n\n @if (blogPostTag?.tag_category_id) {\n <pw-resource-cards [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [isHeaderVisible]=\"true\" resourceLink=\"/resources/blogs\" [isRelated]=\"true\" [resourceTitle]=\"'Other resources you may be interested in:'\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-cards>\n }\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit\n} from '@angular/core';\nimport { DomSanitizer, Meta, Title } from '@angular/platform-browser';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { ADMIN_ROUTERS, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { DateFormatPipe } from '@posiwise/pipes';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Tooltip } from 'primeng/tooltip';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\n@Component({\n selector: 'pw-resource-post-details',\n templateUrl: './resource-post-details.component.html',\n styleUrls: ['./resource-post-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n Tooltip,\n RouterLink,\n LazyImgDirective,\n NoDataComponent,\n DateFormatPipe,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourcePostDetailsComponent extends AppBaseComponent implements OnInit {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly authService = inject(AuthService);\n private readonly titleService = inject(Title);\n private readonly meta = inject(Meta);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly cdr = inject(ChangeDetectorRef);\n\n post;\n masterSubscriptionId;\n slug;\n blogPermission: string;\n userLoggedIn: boolean;\n routers = ADMIN_ROUTERS;\n hasBlogAccess: boolean;\n user: User;\n subscriptionId: number;\n blogPostTag;\n postCategoryTags = [];\n isLoaded = false;\n\n private static readonly CATEGORY_LABEL_KEYS: Record<string, string> = {\n 'Blog Posts': 'Resource.Posts.Category.BlogPosts',\n 'Case Studies': 'Resource.Posts.Category.CaseStudies',\n Webinars: 'Resource.Posts.Category.Webinars',\n Videos: 'Resource.Posts.Category.Videos',\n Events: 'Resource.Posts.Category.Events',\n 'White Papers': 'Resource.Posts.Category.WhitePapers',\n 'Product Release Notes': 'Resource.Posts.Category.ProductReleaseNotes'\n };\n private static readonly DEFAULT_CATEGORY_LABEL_KEY = 'Resource.Posts.Category.Default';\n\n ngOnInit(): void {\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.route.params.subscribe(params => {\n this.slug = params['slug'] ?? '';\n this.getBlogItem(this.slug);\n this.cdr.markForCheck();\n });\n\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n\n if (res) {\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.hasBlogAccess = HelperService.checkBlogPermission(this.user);\n this.cdr.markForCheck();\n });\n }\n\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.subscriptionId || this.masterSubscriptionId)\n .subscribe(response => {\n this.postCategoryTags = response.tags ?? [];\n this.blogPostTag = this.postCategoryTags.find(tag => tag.name === 'Blog Posts');\n // Update SEO metadata again now that blogPostTag is available\n if (this.post) {\n this.setOpenGraphMetaTags();\n }\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n get postCategoryLabelKey(): string {\n const categoryIds = new Set(this.postCategoryTags.map(t => t.id));\n const match = this.post?.tags?.find(t => categoryIds.has(t.id));\n return (\n ResourcePostDetailsComponent.CATEGORY_LABEL_KEYS[match?.name] ??\n ResourcePostDetailsComponent.DEFAULT_CATEGORY_LABEL_KEY\n );\n }\n\n private getBlogItem(slug: string) {\n this.resourceService.getPostBySlug(slug).subscribe(response => {\n let blogBody;\n if (response?.body) {\n blogBody = HelperService.sanitizeQuillBody(response.body, this.sanitizer);\n }\n this.post = { ...response, body: blogBody };\n this.cdr.markForCheck();\n });\n }\n\n private setOpenGraphMetaTags() {\n if (this.post.title) {\n this.meta.updateTag({ property: 'og:title', content: this.post.title });\n this.meta.updateTag({ name: 'twitter:title', content: this.post.title });\n }\n\n if (this.post.blurb) {\n this.meta.updateTag({ property: 'og:description', content: this.post.blurb });\n this.meta.updateTag({ name: 'twitter:description', content: this.post.blurb });\n }\n\n let imageUrl = null;\n if (this.post?.picture?.url && !this.post.picture.url.includes('default-photo.jpg')) {\n imageUrl = this.post.picture.url;\n } else if (\n this.blogPostTag?.image?.url &&\n !this.blogPostTag.image.url.includes('no_image_uploaded_squared')\n ) {\n imageUrl = this.blogPostTag.image.url;\n }\n\n if (imageUrl) {\n this.meta.updateTag({ property: 'og:image', content: imageUrl });\n this.meta.updateTag({ name: 'twitter:image', content: imageUrl });\n }\n\n this.meta.updateTag({ property: 'og:type', content: 'article' });\n this.meta.updateTag({ property: 'og:url', content: window.location.href });\n this.meta.updateTag({ property: 'og:site_name', content: 'PosiWise' });\n\n // Twitter Card properties\n this.meta.updateTag({ name: 'twitter:card', content: 'summary_large_image' });\n this.meta.updateTag({ name: 'twitter:site', content: '@posiwise' });\n }\n\n getImageUrl(): string | null {\n if (this.post?.picture?.url && !this.post.picture.url.includes('default-photo.jpg')) {\n return this.post.picture.url;\n } else if (\n this.blogPostTag?.image?.url &&\n !this.blogPostTag.image.url.includes('no_image_uploaded_squared')\n ) {\n return this.blogPostTag.image.url;\n }\n return null;\n }\n}\n","<section class=\"resource-hero-section\">\n <div class=\"container d-flex flex-wrap\" [ngClass]=\"getImageUrl() ? 'container-top' : 'container-no-image'\">\n <div class=\"hero-left\">\n <p class=\"blog-label\">{{ postCategoryLabelKey | transloco }}</p>\n\n <h1 class=\"hero-title\">\n @if (post?.title) {\n <span [innerHTML]=\"post.title\"></span>\n } @else {\n &nbsp;\n }\n @if (userLoggedIn && hasBlogAccess) {\n <a\n class=\"ms-3 text-decoration-none\"\n pTooltip=\"Edit this post\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Edit this blog post\"\n [routerLink]=\"['/admin/resources/', post?.slug]\"\n target=\"_blank\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </a>\n }\n </h1>\n\n\n <div class=\"author-info\">\n <img [src]=\"post?.author?.avatar?.[0]?.url || 'assets/img/icons/male.png'\" alt=\"User Profile Logo\" class=\"author-img\" />\n <div class=\"author-meta\">\n <p>Article by {{ post?.author?.first_name }} {{ post?.author?.last_name }}</p>\n <p class=\"date\">{{post?.published_at | dateFormat}}</p>\n </div>\n </div>\n </div>\n\n @if (isLoaded) {\n <div class=\"hero-right\">\n @if (getImageUrl()) {\n <img\n [src]=\"getImageUrl()\"\n alt=\"Blog Post\"\n class=\"hero-image\"\n />\n } @else {\n <pw-no-data\n class=\"data-image\"\n [withImage]=\"true\"\n [message]=\"'Resource.Tag.NoImageMessage' | transloco\"\n [description]=\"'Resource.Tag.NoDataMessage' | transloco\"\n ></pw-no-data>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { RelatedResourcesComponent } from './related-resources/related-resources.component';\nimport { ResourcePostDetailsComponent } from './resource-post-details/resource-post-details.component';\n\n@Component({\n selector: 'app-resource-post',\n templateUrl: './resource-post.component.html',\n styleUrl: './resource-post.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ResourcePostDetailsComponent,\n RelatedResourcesComponent,\n Trial4ContactUsComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourcePostComponent extends AppBaseComponent implements OnInit {\n private readonly titleService = inject(Title);\n private readonly authService = inject(AuthService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n slug: string;\n user: User;\n userLoggedIn: boolean | undefined = undefined;\n\n ngOnInit(): void {\n this.route.params.subscribe(params => {\n this.slug = params['slug'] ?? 'Default';\n this.cdr.markForCheck();\n });\n\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.cdr.markForCheck();\n });\n }\n this.cdr.markForCheck();\n });\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-resource-post-details></pw-resource-post-details>\n<pw-related-resources></pw-related-resources>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { RelatedResourcesComponent } from '../../components/resource-post/related-resources/related-resources.component';\nimport { ResourcePostComponent } from '../../components/resource-post/resource-post.component';\nimport { ResourcePostDetailsComponent } from '../../components/resource-post/resource-post-details/resource-post-details.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourcePostComponent,\n data: {\n title: 'Resources - Post',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [\n ResourceSharedModule,\n TooltipModule,\n RouterModule.forChild(routes),\n ResourcePostComponent,\n ResourcePostDetailsComponent,\n RelatedResourcesComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourcePostModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-post.module-CGxj27dN.mjs","names":["i1"],"sources":["../../../../libs/resource-module/src/lib/shared/models/resource.model.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/related-resources.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/related-resources.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post-details/resource-post-details.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post-details/resource-post-details.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/resource-post.component.html","../../../../libs/resource-module/src/lib/public/modules/post/resource-post.module.ts"],"sourcesContent":["import { FormBuilder, Validators } from '@angular/forms';\n\nexport class ResourceBlog {\n static getResourcePostsForm() {\n return new FormBuilder().group({\n related_entity_id: [''],\n related_entity_type: [''],\n comment: [null, Validators.required],\n user_id: ['']\n });\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { RouterLink } from '@angular/router';\n\nimport { HubSpotMeetingsSharedModule } from '@posiwise/alpha-module';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, CustomToastService, TagService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { ButtonBusyDirective, LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { Bind } from 'primeng/bind';\nimport { Textarea } from 'primeng/textarea';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { ResourceBlog } from '../../../../shared/models/resource.model';\n\nimport { ResourceCardComponent } from './resource-cards/resource-cards.component';\n\n@Component({\n selector: 'pw-related-resources',\n templateUrl: './related-resources.component.html',\n styleUrls: ['./related-resources.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n Bind,\n Textarea,\n ButtonBusyDirective,\n RouterLink,\n LazyImgDirective,\n HubSpotMeetingsSharedModule,\n ResourceCardComponent,\n DatePipe,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class RelatedResourcesComponent extends AppBaseComponent implements OnInit {\n private readonly resourceService = inject(ResourceService);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly tagService = inject(TagService);\n private readonly authService = inject(AuthService);\n private readonly toastr = inject(CustomToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n resourceCards = [\n {\n title: 'BLOG: Here’s why you should QA your distributor invoices',\n image: '/assets/img/resource/resource-qa.png',\n alt: 'QA distributor invoices',\n url: '/resources/view/here-s-why-you-should-be-seeking-independent-qa-of-all-distributor-inv'\n },\n {\n title: 'BLOG: 4 instant hacks to uplift your MSP’s monthly billing',\n image: '/assets/img/resource/resource-hacks.png',\n alt: 'Monthly billing hacks',\n url: '/resources/view/4-instant-hacks-to-uplift-your-msp-s-monthly-billing'\n },\n {\n title: 'BLOG: The trivial detail that will either future-proof or sabotage your PSA.',\n image: '/assets/img/resource/resource-psa.png',\n alt: 'PSA future-proof',\n url: '/resources/view/the-trivial-detail-that-will-either-future-proof-or-sabotage-your-psa'\n }\n ];\n\n post;\n masterSubscriptionId;\n slug;\n\n postComments = [];\n commentForm;\n\n userLoggedIn: boolean;\n\n demoLinks = this.appConfig?.pages_config?.book_demo?.items;\n\n user: User;\n blogPostTag;\n subscriptionId;\n isMasterSubscription;\n linkedInUrl = this.appConfig?.social?.linkedin_url;\n company_email = this.appConfig.company.email;\n\n constructor() {\n super();\n this.commentForm = ResourceBlog.getResourcePostsForm();\n }\n\n ngOnInit(): void {\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.route.params.subscribe(params => {\n this.slug = params['slug'] ?? '';\n this.getBlogItem(this.slug);\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n\n this.getPostTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getPostTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n get hasValidDemoLinks(): boolean {\n return (\n Array.isArray(this.demoLinks) && this.demoLinks.some(link => link?.title ?? link?.url)\n );\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === 'Blog Posts');\n this.cdr.markForCheck();\n });\n }\n\n private getBlogItem(slug: string) {\n this.resourceService.getPostBySlug(slug).subscribe(response => {\n let blogBody;\n if (response?.body) {\n blogBody = HelperService.sanitizeQuillBody(response.body, this.sanitizer);\n }\n const date = new Date(response?.when);\n const formatted = date.toISOString().split('T')[0];\n this.postComments = response.entity_comments;\n this.post = { ...response, body: blogBody, when: formatted };\n this.cdr.markForCheck();\n });\n }\n\n onComment() {\n const data = { ...this.commentForm.value };\n data.related_entity_id = this.post?.id;\n data.related_entity_type = 'Post';\n data.user_id = this.user?.id;\n this.resourceService.postComments(data).subscribe(() => {\n this.getBlogItem(this.slug);\n this.commentForm.reset();\n this.toastr.success(this.translation.translate('Resource.Posts.CommentAdded'));\n this.cdr.markForCheck();\n });\n }\n\n trackByComment(_index: number, item: { id: number }) {\n return item.id;\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n}\n","\n\n<section class=\"resource-body-section\">\n <div class=\"container\">\n <div class=\"ql-snow body-quill\"\n >\n <div class=\"ql-editor body post-body-text\"\n [innerHTML]=\"post?.body\">\n </div>\n </div>\n <section class=\"resource-offer-section\">\n\n <div class=\"row mt-5 mb-4 response-row\">\n <div class=\"col-12\">\n @if (userLoggedIn) {\n <form\n class=\"p-fluid mb-5\"\n [formGroup]=\"commentForm\"\n (ngSubmit)=\"onComment()\"\n >\n <div class=\"card shadow-sm no-border p-4\">\n <div class=\"field\">\n <label for=\"related-resources-comment\" class=\"font-bold text-lg mb-4 comment-label\">💬 LEAVE A COMMENT</label>\n <textarea\n id=\"related-resources-comment\"\n pInputTextarea\n formControlName=\"comment\"\n rows=\"6\"\n fluid\n placeholder=\"What's on your mind?\"\n\n aria-label=\"What's on your mind?\" ></textarea>\n @if (commentForm.get('comment')?.invalid && commentForm.get('comment')?.touched) {\n <small\n class=\"text-danger\"\n >Please enter comment</small\n >\n }\n </div>\n <div class=\"text-end mt-3\">\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"sign-btn sign-header-btn\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n } @else {\n <p class=\"text-center pt-3 pb-3 user-not-logged-in text-muted shadow-sm mb-5\">\n <a [routerLink]=\"['/login']\" class=\"text-primary fw-bold\">Log in</a> to leave a comment!\n </p>\n }\n </div>\n </div>\n\n @if (postComments.length > 0) {\n <div class=\"row mt-5 comment-row\">\n @for (comment of postComments; track trackByComment($index, comment)) {\n <div class=\"col-12\">\n <div class=\"card no-border shadow-sm p-3 mb-3\">\n <div class=\"d-flex align-items-start\">\n <img\n [src]=\"comment?.author?.avatar?.[0]?.url || 'assets/img/icons/male.png'\"\n alt=\"avatar\"\n class=\"rounded-circle me-3\"\n width=\"50\"\n height=\"50\"\n (error)=\"handleImageError($event, 'assets/img/icons/male.png')\"\n />\n <div class=\"flex-grow-1\">\n <div class=\"fw-bold text-dark\">\n {{ comment.user?.first_name || '' }} {{ comment.user?.last_name || '' }}\n </div>\n <div class=\"text-muted small mb-2\">{{ comment.created_at | date: 'dd MMM yyyy, h:mm a' }}</div>\n <div class=\"text-body\">\n {{ comment.comment }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n\n </section>\n </div>\n <hr class=\"resource-divider\" />\n </section>\n\n @if (hasValidDemoLinks) {\n <section class=\"resource-book-section\">\n <div class=\"container\">\n <p class=\"resource-contact\">\n Any questions, get in touch <a href=\"mailto:{{ company_email }}\">here</a>,\n <a [href]=\"linkedInUrl\" target=\"_blank\">connect on LinkedIn</a>, or book a meeting below:\n </p>\n </div>\n <pw-book-a-demo [isBlog]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-book-a-demo>\n <hr class=\"resource-divider\" />\n </section>\n }\n\n\n @if (blogPostTag?.tag_category_id) {\n <pw-resource-cards [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [isHeaderVisible]=\"true\" resourceLink=\"/resources/blogs\" [isRelated]=\"true\" [resourceTitle]=\"'Other resources you may be interested in:'\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-cards>\n }\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit\n} from '@angular/core';\nimport { DomSanitizer, Meta, Title } from '@angular/platform-browser';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { ADMIN_ROUTERS, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { DateFormatPipe } from '@posiwise/pipes';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Tooltip } from 'primeng/tooltip';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\n@Component({\n selector: 'pw-resource-post-details',\n templateUrl: './resource-post-details.component.html',\n styleUrls: ['./resource-post-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n Tooltip,\n RouterLink,\n LazyImgDirective,\n NoDataComponent,\n DateFormatPipe,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourcePostDetailsComponent extends AppBaseComponent implements OnInit {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly authService = inject(AuthService);\n private readonly titleService = inject(Title);\n private readonly meta = inject(Meta);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly cdr = inject(ChangeDetectorRef);\n\n post;\n masterSubscriptionId;\n slug;\n blogPermission: string;\n userLoggedIn: boolean;\n routers = ADMIN_ROUTERS;\n hasBlogAccess: boolean;\n user: User;\n subscriptionId: number;\n blogPostTag;\n postCategoryTags = [];\n isLoaded = false;\n\n private static readonly CATEGORY_LABEL_KEYS: Record<string, string> = {\n 'Blog Posts': 'Resource.Posts.Category.BlogPosts',\n 'Case Studies': 'Resource.Posts.Category.CaseStudies',\n Webinars: 'Resource.Posts.Category.Webinars',\n Videos: 'Resource.Posts.Category.Videos',\n Events: 'Resource.Posts.Category.Events',\n 'White Papers': 'Resource.Posts.Category.WhitePapers',\n 'Product Release Notes': 'Resource.Posts.Category.ProductReleaseNotes'\n };\n private static readonly DEFAULT_CATEGORY_LABEL_KEY = 'Resource.Posts.Category.Default';\n\n ngOnInit(): void {\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.route.params.subscribe(params => {\n this.slug = params['slug'] ?? '';\n this.getBlogItem(this.slug);\n this.cdr.markForCheck();\n });\n\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n\n if (res) {\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.hasBlogAccess = HelperService.checkBlogPermission(this.user);\n this.cdr.markForCheck();\n });\n }\n\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.subscriptionId || this.masterSubscriptionId)\n .subscribe(response => {\n this.postCategoryTags = response.tags ?? [];\n this.blogPostTag = this.postCategoryTags.find(tag => tag.name === 'Blog Posts');\n // Update SEO metadata again now that blogPostTag is available\n if (this.post) {\n this.setOpenGraphMetaTags();\n }\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n get postCategoryLabelKey(): string {\n const categoryIds = new Set(this.postCategoryTags.map(t => t.id));\n const match = this.post?.tags?.find(t => categoryIds.has(t.id));\n return (\n ResourcePostDetailsComponent.CATEGORY_LABEL_KEYS[match?.name] ??\n ResourcePostDetailsComponent.DEFAULT_CATEGORY_LABEL_KEY\n );\n }\n\n private getBlogItem(slug: string) {\n this.resourceService.getPostBySlug(slug).subscribe(response => {\n let blogBody;\n if (response?.body) {\n blogBody = HelperService.sanitizeQuillBody(response.body, this.sanitizer);\n }\n this.post = { ...response, body: blogBody };\n this.cdr.markForCheck();\n });\n }\n\n private setOpenGraphMetaTags() {\n if (this.post.title) {\n this.meta.updateTag({ property: 'og:title', content: this.post.title });\n this.meta.updateTag({ name: 'twitter:title', content: this.post.title });\n }\n\n if (this.post.blurb) {\n this.meta.updateTag({ property: 'og:description', content: this.post.blurb });\n this.meta.updateTag({ name: 'twitter:description', content: this.post.blurb });\n }\n\n let imageUrl = null;\n if (this.post?.picture?.url && !this.post.picture.url.includes('default-photo.jpg')) {\n imageUrl = this.post.picture.url;\n } else if (\n this.blogPostTag?.image?.url &&\n !this.blogPostTag.image.url.includes('no_image_uploaded_squared')\n ) {\n imageUrl = this.blogPostTag.image.url;\n }\n\n if (imageUrl) {\n this.meta.updateTag({ property: 'og:image', content: imageUrl });\n this.meta.updateTag({ name: 'twitter:image', content: imageUrl });\n }\n\n this.meta.updateTag({ property: 'og:type', content: 'article' });\n this.meta.updateTag({ property: 'og:url', content: window.location.href });\n this.meta.updateTag({ property: 'og:site_name', content: 'PosiWise' });\n\n // Twitter Card properties\n this.meta.updateTag({ name: 'twitter:card', content: 'summary_large_image' });\n this.meta.updateTag({ name: 'twitter:site', content: '@posiwise' });\n }\n\n getImageUrl(): string | null {\n if (this.post?.picture?.url && !this.post.picture.url.includes('default-photo.jpg')) {\n return this.post.picture.url;\n } else if (\n this.blogPostTag?.image?.url &&\n !this.blogPostTag.image.url.includes('no_image_uploaded_squared')\n ) {\n return this.blogPostTag.image.url;\n }\n return null;\n }\n}\n","<section class=\"resource-hero-section\">\n <div class=\"container d-flex flex-wrap\" [ngClass]=\"getImageUrl() ? 'container-top' : 'container-no-image'\">\n <div class=\"hero-left\">\n <p class=\"blog-label\">{{ postCategoryLabelKey | transloco }}</p>\n\n <h1 class=\"hero-title\">\n @if (post?.title) {\n <span [innerHTML]=\"post.title\"></span>\n } @else {\n &nbsp;\n }\n @if (userLoggedIn && hasBlogAccess) {\n <a\n class=\"ms-3 text-decoration-none\"\n pTooltip=\"Edit this post\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Edit this blog post\"\n [routerLink]=\"['/admin/resources/', post?.slug]\"\n target=\"_blank\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </a>\n }\n </h1>\n\n\n <div class=\"author-info\">\n <img [src]=\"post?.author?.avatar?.[0]?.url || 'assets/img/icons/male.png'\" alt=\"User Profile Logo\" class=\"author-img\" />\n <div class=\"author-meta\">\n <p>Article by {{ post?.author?.first_name }} {{ post?.author?.last_name }}</p>\n <p class=\"date\">{{post?.published_at | dateFormat}}</p>\n </div>\n </div>\n </div>\n\n @if (isLoaded) {\n <div class=\"hero-right\">\n @if (getImageUrl()) {\n <img\n [src]=\"getImageUrl()\"\n alt=\"Blog Post\"\n class=\"hero-image\"\n />\n } @else {\n <pw-no-data\n class=\"data-image\"\n [withImage]=\"true\"\n [message]=\"'Resource.Tag.NoImageMessage' | transloco\"\n [description]=\"'Resource.Tag.NoDataMessage' | transloco\"\n ></pw-no-data>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { RelatedResourcesComponent } from './related-resources/related-resources.component';\nimport { ResourcePostDetailsComponent } from './resource-post-details/resource-post-details.component';\n\n@Component({\n selector: 'app-resource-post',\n templateUrl: './resource-post.component.html',\n styleUrl: './resource-post.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ResourcePostDetailsComponent,\n RelatedResourcesComponent,\n Trial4ContactUsComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourcePostComponent extends AppBaseComponent implements OnInit {\n private readonly titleService = inject(Title);\n private readonly authService = inject(AuthService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n slug: string;\n user: User;\n userLoggedIn: boolean | undefined = undefined;\n\n ngOnInit(): void {\n this.route.params.subscribe(params => {\n this.slug = params['slug'] ?? 'Default';\n this.cdr.markForCheck();\n });\n\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.cdr.markForCheck();\n });\n }\n this.cdr.markForCheck();\n });\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n<pw-resource-post-details></pw-resource-post-details>\n<pw-related-resources></pw-related-resources>\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { RelatedResourcesComponent } from '../../components/resource-post/related-resources/related-resources.component';\nimport { ResourcePostComponent } from '../../components/resource-post/resource-post.component';\nimport { ResourcePostDetailsComponent } from '../../components/resource-post/resource-post-details/resource-post-details.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourcePostComponent,\n data: {\n title: 'Resources - Post',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [\n ResourceSharedModule,\n TooltipModule,\n RouterModule.forChild(routes),\n ResourcePostComponent,\n ResourcePostDetailsComponent,\n RelatedResourcesComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourcePostModule {}\n"],"mappings":"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"}
@@ -38,7 +38,7 @@ var ReleaseTopBannerComponent = class ReleaseTopBannerComponent extends BaseTopB
38
38
  selector: "pw-resource-release-notes-top-banner",
39
39
  usesInheritance: true,
40
40
  ngImport: i0,
41
- template: "<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Release Notes'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n We&rsquo;re obsessed with solving real problems for our customers.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/release-person.png'\"\n alt=\"Release notes banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n",
41
+ template: "<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Release Notes'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n We&rsquo;re obsessed with solving real problems for our customers.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/release-person.webp'\"\n alt=\"Release notes banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n",
42
42
  styles: [
43
43
  "@charset \"UTF-8\";.cta-btn{display:inline-flex;align-items:center;gap:.6rem;background:var(--text-color, currentcolor);color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;font-size:1.4rem;border:1px solid var(--text-color, currentcolor);box-shadow:none!important;transition:background .15s ease,color .15s ease,transform .15s ease}.cta-btn:hover{background-color:#fff!important;color:var(--text-color, currentcolor)!important;transform:translateY(-1px)}.cta-btn:focus-visible{outline:2px solid var(--text-color, currentcolor);outline-offset:3px}.cta-btn__icon{font-size:1.1rem;line-height:1}@media(width<=768px){.dyn-img{top:-3rem!important}}.text-extension{max-width:560px}.text-extension .intro{font-size:2rem;line-height:3rem;font-weight:400;color:var(--text-color, currentColor);margin-bottom:1rem}.text-extension .cta-buttons{margin-top:2rem!important}.text-extension .note{font-size:1.2rem;color:#000;margin-top:1rem;margin-left:3rem}.resource-banner{box-shadow:0 4px 32px -14px #40576d4d!important;position:relative;padding:5rem 0;color:#fff;background:linear-gradient(90deg,var(--first) 0%,#a8e1fb 100%);overflow:hidden;z-index:2}@media(width<=1200px){.resource-banner .container{padding:7rem 3rem 0rem!important}}.resource-banner:after{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:61%;background:#fff;clip-path:polygon(0 18%,100% 0%,100% 100%,0% 100%)}.resource-banner .container{position:relative;z-index:2}.resource-banner .text-content{max-width:500px;text-align:left;margin-bottom:75rem}.resource-banner .text-content h1{margin-bottom:1.5rem;line-height:1.2}.resource-banner .text-content .intro{font-size:1.2rem;margin:1rem 0;color:#000}.resource-banner .text-content .cta-btn{display:inline-block;background:#000;color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;font-size:1.4rem}.resource-banner .text-content .cta-buttons{margin-top:2rem}.resource-banner .text-content .note{margin-top:1rem;margin-left:5.6rem;font-size:.9rem;color:#555}.resource-banner .resource-header-text{max-width:500px;font-weight:500;color:#fff!important;font-size:4.5rem!important}.resource-banner .blue-text{font-weight:100}@media(width<=991px){.resource-banner .text-content{margin-top:1.5rem;margin-bottom:0;text-align:center;max-width:360px}.resource-banner .text-content h1{margin-bottom:6.5rem!important}.resource-banner .resource-header-text{font-size:2.5rem!important}.resource-banner .cta-buttons{margin-top:0rem!important;justify-content:center!important}.resource-banner .note{margin-left:8rem!important}.resource-banner .image-content{position:relative;margin-bottom:3rem;height:230px}.resource-banner .image-content .floating-box{position:absolute;top:25px;left:3rem;transform:translate(-50%) rotate(-10deg);background:#fff;padding:.75rem 1rem;border-radius:20px;box-shadow:0 8px 30px #00000026;text-align:center;z-index:3;display:inline-block;width:auto}.resource-banner .image-content .floating-box img{width:24px;margin-bottom:.4rem}.resource-banner .image-content .floating-box .label{font-size:.75rem;color:#333;margin:0;line-height:1.2}.resource-banner .image-content .floating-box .count{font-size:1.2rem;font-weight:700;color:#000;margin-top:.25rem}.resource-banner .image-content .screen-img{max-width:280px;position:absolute;bottom:0;left:3rem;z-index:2;transform:rotate(-1deg);box-shadow:0 8px 15px #0003}.resource-banner .image-content .person-img{max-width:170px;width:100%;position:relative;z-index:3;left:13rem;top:-11.35rem}.resource-banner .image-content .resource-laptop-img{max-width:300px;width:100%;position:relative;z-index:3;margin-top:3rem;left:2%;height:auto!important;top:4rem}}@media(width>=991px){.resource-banner .text-content{position:absolute;width:760px}}.white-content{background:#fff;color:#000}.white-content .intro{font-size:1.2rem;color:#000}.white-content .note{font-size:.85rem;margin-top:1rem;color:#555}@media(width>=991px){.section-outer{padding-top:7rem!important}}@media(width>=768px)and (width<=991px){.resource-math-img{left:36%!important;top:22rem!important}}@media(width>=991px)and (width<=1200px){.text-extension{max-width:760px;position:absolute;margin-bottom:23rem!important}.resource-divider{top:63.5rem;position:absolute!important}.resource-banner{padding-bottom:90px!important}}@media(width>=1200px){.text-extension{max-width:500px;position:absolute;margin-bottom:31rem!important}.resource-laptop-img{width:100%;max-width:800px!important;max-height:800px!important;height:auto}}@media(width>=1200px){.resource-divider{top:59.5rem;position:absolute!important}.cta-tab{margin-bottom:5rem!important}}@media(width>=1200px){.image-content{margin-top:0;display:flex;align-items:flex-end;gap:1.5rem;height:0}.image-content .floating-box{position:absolute;top:25px;transform:translate(-50%) rotate(-10deg);background:#fff;padding:1rem;border-radius:20px;box-shadow:0 8px 30px #00000026;text-align:center;width:170px;z-index:3}.image-content .floating-box img{width:30px;margin-bottom:.5rem}.image-content .floating-box .label{font-size:.85rem;color:#333;margin:0}.image-content .floating-box .count{font-size:1.5rem;font-weight:700;color:#000;margin:.25rem 0 0}.image-content .screen-img{width:100%;position:absolute;bottom:5rem;left:3rem;z-index:2;transform:rotate(-1deg);box-shadow:0 8px 15px #0003;max-width:400px;margin-bottom:4rem}.image-content .person-img{max-width:800px;width:100%;position:relative;z-index:3;min-width:420px;margin-bottom:0;bottom:7rem;left:4rem}.image-content .resource-laptop-img{top:4rem;left:2rem;position:relative}.image-content .resource-math-img{bottom:9rem;left:61rem;position:relative;height:312px;margin-right:1rem;min-width:450px!important}}@media(width<=786px){.text-extension{position:absolute;margin:3rem;margin-top:11rem!important}}@media(width>=786px)and (width<=991px){.text-extension{position:absolute;margin:3rem;margin-top:24rem!important}}@media(width>=704px)and (width<=768px){.resource-laptop-img{top:18rem!important;right:30%!important;left:auto!important}}@media(width>=786px)and (width<=991px){.resource-laptop-img{max-width:250px!important;top:18rem!important;right:30%!important;left:auto!important}}@media(width>=991px)and (width<=1200px){.resource-laptop-img{top:7rem;left:3%;position:relative;width:100%;max-width:600px!important;height:auto}}@media(width>=786px)and (width<=1200px){.image-content{margin-top:0;display:flex;align-items:flex-end;gap:1.5rem;height:0}.image-content .floating-box{position:absolute;top:25px;transform:translate(-50%) rotate(-10deg);background:#fff;padding:1rem;border-radius:20px;box-shadow:0 8px 30px #00000026;text-align:center;width:170px;z-index:3}.image-content .floating-box img{width:30px;margin-bottom:.5rem}.image-content .floating-box .label{font-size:.85rem;color:#333;margin:0}.image-content .floating-box .count{font-size:1.5rem;font-weight:700;color:#000;margin:.25rem 0 0}.image-content .screen-img{width:100%;position:absolute;bottom:5rem;left:3rem;z-index:2;transform:rotate(-1deg);box-shadow:0 8px 15px #0003;max-width:400px;margin-bottom:4rem}.image-content .person-img{max-width:800px;width:100%;position:relative;z-index:3;min-width:420px;margin-bottom:0;bottom:7rem;left:4rem}.image-content .resource-math-img{height:243px!important;min-width:350px;bottom:9rem;left:34rem;position:relative;width:350px!important}}@media(width<=991px){.resource-banner{padding-bottom:15rem}}@media(width<=768px){.resource-math-img{top:18rem}.cta-btn{justify-content:center}.resource-divider{margin-top:49rem!important}.intro{font-size:1.7rem!important}}@media(width>=768px)and (width<=991px){.cta-btn{justify-content:center}.resource-divider{margin-top:36rem!important}}@media(width>=991px){.resource-banner{padding-top:768px;padding-bottom:42px;overflow:hidden}.section-fadeout{height:40px;width:100%;background:linear-gradient(to bottom,#fff0,#f8f9fa)}.resource-heading{width:700px!important}::ng-deep .vault-section{max-width:1580px!important;padding-left:48px!important;padding-top:130px!important}}@media(width<=991px){.billing-section{flex-direction:column!important;gap:3rem}.billing-section .billing-section1,.billing-section .billing-section2{width:90%!important}.billing-section .billing-section1{margin-left:1.5rem;margin-top:4rem}}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}.outer-section-fadeout{top:62rem!important}}@media(max-width:991px){.resource-banner .container{display:flex;flex-direction:column;align-items:flex-start;min-height:auto}.resource-banner .text-content,.resource-banner .text-extension,.resource-banner .image-content{position:static!important;left:auto;top:auto;max-width:100%;margin:0!important}.resource-banner .text-content{margin-bottom:0!important}.text-extension{margin-top:1rem!important}.resource-banner .image-content{width:100%;height:auto;align-self:center;margin-top:auto!important}.resource-banner .resource-laptop-img{position:static!important;max-width:260px;width:100%;height:auto!important}.resource-banner{padding:2rem 0 0rem!important}}@media(max-width:575px){.resource-banner:after{height:45%}}\n",
44
44
  "@media(width<=768px){.dyn-img{top:6rem!important}}\n",
@@ -75,7 +75,7 @@ i0.ɵɵngDeclareClassMetadata({
75
75
  selector: "pw-resource-release-notes-top-banner",
76
76
  changeDetection: ChangeDetectionStrategy.OnPush,
77
77
  imports: [ResourceTopBannerEditComponent, LazyImgDirective],
78
- template: "<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Release Notes'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n We&rsquo;re obsessed with solving real problems for our customers.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/release-person.png'\"\n alt=\"Release notes banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n",
78
+ template: "<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Release Notes'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n We&rsquo;re obsessed with solving real problems for our customers.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/release-person.webp'\"\n alt=\"Release notes banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n",
79
79
  styles: [
80
80
  "@charset \"UTF-8\";.cta-btn{display:inline-flex;align-items:center;gap:.6rem;background:var(--text-color, currentcolor);color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;font-size:1.4rem;border:1px solid var(--text-color, currentcolor);box-shadow:none!important;transition:background .15s ease,color .15s ease,transform .15s ease}.cta-btn:hover{background-color:#fff!important;color:var(--text-color, currentcolor)!important;transform:translateY(-1px)}.cta-btn:focus-visible{outline:2px solid var(--text-color, currentcolor);outline-offset:3px}.cta-btn__icon{font-size:1.1rem;line-height:1}@media(width<=768px){.dyn-img{top:-3rem!important}}.text-extension{max-width:560px}.text-extension .intro{font-size:2rem;line-height:3rem;font-weight:400;color:var(--text-color, currentColor);margin-bottom:1rem}.text-extension .cta-buttons{margin-top:2rem!important}.text-extension .note{font-size:1.2rem;color:#000;margin-top:1rem;margin-left:3rem}.resource-banner{box-shadow:0 4px 32px -14px #40576d4d!important;position:relative;padding:5rem 0;color:#fff;background:linear-gradient(90deg,var(--first) 0%,#a8e1fb 100%);overflow:hidden;z-index:2}@media(width<=1200px){.resource-banner .container{padding:7rem 3rem 0rem!important}}.resource-banner:after{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:61%;background:#fff;clip-path:polygon(0 18%,100% 0%,100% 100%,0% 100%)}.resource-banner .container{position:relative;z-index:2}.resource-banner .text-content{max-width:500px;text-align:left;margin-bottom:75rem}.resource-banner .text-content h1{margin-bottom:1.5rem;line-height:1.2}.resource-banner .text-content .intro{font-size:1.2rem;margin:1rem 0;color:#000}.resource-banner .text-content .cta-btn{display:inline-block;background:#000;color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;font-size:1.4rem}.resource-banner .text-content .cta-buttons{margin-top:2rem}.resource-banner .text-content .note{margin-top:1rem;margin-left:5.6rem;font-size:.9rem;color:#555}.resource-banner .resource-header-text{max-width:500px;font-weight:500;color:#fff!important;font-size:4.5rem!important}.resource-banner .blue-text{font-weight:100}@media(width<=991px){.resource-banner .text-content{margin-top:1.5rem;margin-bottom:0;text-align:center;max-width:360px}.resource-banner .text-content h1{margin-bottom:6.5rem!important}.resource-banner .resource-header-text{font-size:2.5rem!important}.resource-banner .cta-buttons{margin-top:0rem!important;justify-content:center!important}.resource-banner .note{margin-left:8rem!important}.resource-banner .image-content{position:relative;margin-bottom:3rem;height:230px}.resource-banner .image-content .floating-box{position:absolute;top:25px;left:3rem;transform:translate(-50%) rotate(-10deg);background:#fff;padding:.75rem 1rem;border-radius:20px;box-shadow:0 8px 30px #00000026;text-align:center;z-index:3;display:inline-block;width:auto}.resource-banner .image-content .floating-box img{width:24px;margin-bottom:.4rem}.resource-banner .image-content .floating-box .label{font-size:.75rem;color:#333;margin:0;line-height:1.2}.resource-banner .image-content .floating-box .count{font-size:1.2rem;font-weight:700;color:#000;margin-top:.25rem}.resource-banner .image-content .screen-img{max-width:280px;position:absolute;bottom:0;left:3rem;z-index:2;transform:rotate(-1deg);box-shadow:0 8px 15px #0003}.resource-banner .image-content .person-img{max-width:170px;width:100%;position:relative;z-index:3;left:13rem;top:-11.35rem}.resource-banner .image-content .resource-laptop-img{max-width:300px;width:100%;position:relative;z-index:3;margin-top:3rem;left:2%;height:auto!important;top:4rem}}@media(width>=991px){.resource-banner .text-content{position:absolute;width:760px}}.white-content{background:#fff;color:#000}.white-content .intro{font-size:1.2rem;color:#000}.white-content .note{font-size:.85rem;margin-top:1rem;color:#555}@media(width>=991px){.section-outer{padding-top:7rem!important}}@media(width>=768px)and (width<=991px){.resource-math-img{left:36%!important;top:22rem!important}}@media(width>=991px)and (width<=1200px){.text-extension{max-width:760px;position:absolute;margin-bottom:23rem!important}.resource-divider{top:63.5rem;position:absolute!important}.resource-banner{padding-bottom:90px!important}}@media(width>=1200px){.text-extension{max-width:500px;position:absolute;margin-bottom:31rem!important}.resource-laptop-img{width:100%;max-width:800px!important;max-height:800px!important;height:auto}}@media(width>=1200px){.resource-divider{top:59.5rem;position:absolute!important}.cta-tab{margin-bottom:5rem!important}}@media(width>=1200px){.image-content{margin-top:0;display:flex;align-items:flex-end;gap:1.5rem;height:0}.image-content .floating-box{position:absolute;top:25px;transform:translate(-50%) rotate(-10deg);background:#fff;padding:1rem;border-radius:20px;box-shadow:0 8px 30px #00000026;text-align:center;width:170px;z-index:3}.image-content .floating-box img{width:30px;margin-bottom:.5rem}.image-content .floating-box .label{font-size:.85rem;color:#333;margin:0}.image-content .floating-box .count{font-size:1.5rem;font-weight:700;color:#000;margin:.25rem 0 0}.image-content .screen-img{width:100%;position:absolute;bottom:5rem;left:3rem;z-index:2;transform:rotate(-1deg);box-shadow:0 8px 15px #0003;max-width:400px;margin-bottom:4rem}.image-content .person-img{max-width:800px;width:100%;position:relative;z-index:3;min-width:420px;margin-bottom:0;bottom:7rem;left:4rem}.image-content .resource-laptop-img{top:4rem;left:2rem;position:relative}.image-content .resource-math-img{bottom:9rem;left:61rem;position:relative;height:312px;margin-right:1rem;min-width:450px!important}}@media(width<=786px){.text-extension{position:absolute;margin:3rem;margin-top:11rem!important}}@media(width>=786px)and (width<=991px){.text-extension{position:absolute;margin:3rem;margin-top:24rem!important}}@media(width>=704px)and (width<=768px){.resource-laptop-img{top:18rem!important;right:30%!important;left:auto!important}}@media(width>=786px)and (width<=991px){.resource-laptop-img{max-width:250px!important;top:18rem!important;right:30%!important;left:auto!important}}@media(width>=991px)and (width<=1200px){.resource-laptop-img{top:7rem;left:3%;position:relative;width:100%;max-width:600px!important;height:auto}}@media(width>=786px)and (width<=1200px){.image-content{margin-top:0;display:flex;align-items:flex-end;gap:1.5rem;height:0}.image-content .floating-box{position:absolute;top:25px;transform:translate(-50%) rotate(-10deg);background:#fff;padding:1rem;border-radius:20px;box-shadow:0 8px 30px #00000026;text-align:center;width:170px;z-index:3}.image-content .floating-box img{width:30px;margin-bottom:.5rem}.image-content .floating-box .label{font-size:.85rem;color:#333;margin:0}.image-content .floating-box .count{font-size:1.5rem;font-weight:700;color:#000;margin:.25rem 0 0}.image-content .screen-img{width:100%;position:absolute;bottom:5rem;left:3rem;z-index:2;transform:rotate(-1deg);box-shadow:0 8px 15px #0003;max-width:400px;margin-bottom:4rem}.image-content .person-img{max-width:800px;width:100%;position:relative;z-index:3;min-width:420px;margin-bottom:0;bottom:7rem;left:4rem}.image-content .resource-math-img{height:243px!important;min-width:350px;bottom:9rem;left:34rem;position:relative;width:350px!important}}@media(width<=991px){.resource-banner{padding-bottom:15rem}}@media(width<=768px){.resource-math-img{top:18rem}.cta-btn{justify-content:center}.resource-divider{margin-top:49rem!important}.intro{font-size:1.7rem!important}}@media(width>=768px)and (width<=991px){.cta-btn{justify-content:center}.resource-divider{margin-top:36rem!important}}@media(width>=991px){.resource-banner{padding-top:768px;padding-bottom:42px;overflow:hidden}.section-fadeout{height:40px;width:100%;background:linear-gradient(to bottom,#fff0,#f8f9fa)}.resource-heading{width:700px!important}::ng-deep .vault-section{max-width:1580px!important;padding-left:48px!important;padding-top:130px!important}}@media(width<=991px){.billing-section{flex-direction:column!important;gap:3rem}.billing-section .billing-section1,.billing-section .billing-section2{width:90%!important}.billing-section .billing-section1{margin-left:1.5rem;margin-top:4rem}}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}.outer-section-fadeout{top:62rem!important}}@media(max-width:991px){.resource-banner .container{display:flex;flex-direction:column;align-items:flex-start;min-height:auto}.resource-banner .text-content,.resource-banner .text-extension,.resource-banner .image-content{position:static!important;left:auto;top:auto;max-width:100%;margin:0!important}.resource-banner .text-content{margin-bottom:0!important}.text-extension{margin-top:1rem!important}.resource-banner .image-content{width:100%;height:auto;align-self:center;margin-top:auto!important}.resource-banner .resource-laptop-img{position:static!important;max-width:260px;width:100%;height:auto!important}.resource-banner{padding:2rem 0 0rem!important}}@media(max-width:575px){.resource-banner:after{height:45%}}\n",
81
81
  "@media(width<=768px){.dyn-img{top:6rem!important}}\n",
@@ -144,7 +144,7 @@ var ResourceReleaseNoteComponent = class ResourceReleaseNoteComponent extends Ap
144
144
  selector: "pw-resource-release-notes",
145
145
  usesInheritance: true,
146
146
  ngImport: i0,
147
- template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-resource-release-notes-top-banner></pw-resource-release-notes-top-banner>\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-note-card [isReleasePress]=\"true\" [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [releaseHeader]=\"true\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n",
147
+ template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n<pw-resource-release-notes-top-banner></pw-resource-release-notes-top-banner>\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-note-card [isReleasePress]=\"true\" [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [releaseHeader]=\"true\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n",
148
148
  dependencies: [
149
149
  {
150
150
  kind: "component",
@@ -209,7 +209,7 @@ i0.ɵɵngDeclareClassMetadata({
209
209
  ResourceNoteCardComponent,
210
210
  Trial4ContactUsComponent
211
211
  ],
212
- template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-resource-release-notes-top-banner></pw-resource-release-notes-top-banner>\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-note-card [isReleasePress]=\"true\" [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [releaseHeader]=\"true\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n"
212
+ template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n<pw-resource-release-notes-top-banner></pw-resource-release-notes-top-banner>\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-note-card [isReleasePress]=\"true\" [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [releaseHeader]=\"true\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n"
213
213
  }]
214
214
  }]
215
215
  });
@@ -279,4 +279,4 @@ i0.ɵɵngDeclareClassMetadata({
279
279
  });
280
280
  export { ResourceReleaseNotesModule };
281
281
 
282
- //# sourceMappingURL=posiwise-resource-module-resource-release-notes.module-Btxs8la7.mjs.map
282
+ //# sourceMappingURL=posiwise-resource-module-resource-release-notes.module-CLry1QNC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posiwise-resource-module-resource-release-notes.module-CLry1QNC.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-release-notes/resource-release-notes-top-banner/resource-release-notes-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-release-notes/resource-release-notes-top-banner/resource-release-notes-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-release-notes/resource-release-notes.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-release-notes/resource-release-notes.component.html","../../../../libs/resource-module/src/lib/public/modules/release-notes/resource-release-notes.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { LazyImgDirective } from '@posiwise/directives';\n\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\nimport { ResourceTopBannerEditComponent } from '../../resource-top-banner-edit/resource-top-banner-edit.component';\n\n@Component({\n selector: 'pw-resource-release-notes-top-banner',\n templateUrl: './resource-release-notes-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n './resource-release-notes-top-banner.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ResourceTopBannerEditComponent, LazyImgDirective]\n})\nexport class ReleaseTopBannerComponent extends BaseTopBannerComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n protected getSearchTerm(): string {\n return 'Release Notes';\n }\n}\n","<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Release Notes'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n We&rsquo;re obsessed with solving real problems for our customers.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/release-person.webp'\"\n alt=\"Release notes banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { ResourceNoteCardComponent } from '../reslease-note-card/release-note-card.component';\n\nimport { ReleaseTopBannerComponent } from './resource-release-notes-top-banner/resource-release-notes-top-banner.component';\n\n@Component({\n selector: 'pw-resource-release-notes',\n templateUrl: './resource-release-notes.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ReleaseTopBannerComponent,\n ResourceNoteCardComponent,\n Trial4ContactUsComponent\n ]\n})\nexport class ResourceReleaseNoteComponent extends AppBaseComponent implements OnInit {\n private readonly authService = inject(AuthService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n userLoggedIn: boolean;\n blogPostTag;\n user: User;\n isMasterSubscription;\n\n ngOnInit() {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.getPostTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getPostTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === 'Product Release Notes');\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n<pw-resource-release-notes-top-banner></pw-resource-release-notes-top-banner>\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-note-card [isReleasePress]=\"true\" [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [releaseHeader]=\"true\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceReleaseNoteComponent } from '../../components/resource-release-notes/resource-release-notes.component';\nimport { ReleaseTopBannerComponent } from '../../components/resource-release-notes/resource-release-notes-top-banner/resource-release-notes-top-banner.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceReleaseNoteComponent,\n data: {\n title: 'Resources - Release Notes',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [\n ResourceSharedModule,\n RouterModule.forChild(routes),\n ResourceReleaseNoteComponent,\n ReleaseTopBannerComponent\n ]\n})\nexport class ResourceReleaseNotesModule {}\n"],"mappings":"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"}