@posiwise/resource-module 0.0.193 → 0.0.194
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.
- package/fesm2022/posiwise-resource-module-base-top-banner.component-DSirXfem.mjs +142 -0
- package/fesm2022/posiwise-resource-module-base-top-banner.component-DSirXfem.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-blogs.module-DIh--y78.mjs +264 -0
- package/fesm2022/posiwise-resource-module-resource-blogs.module-DIh--y78.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs +1928 -0
- package/fesm2022/posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs +246 -0
- package/fesm2022/posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-events.module-BwK6UfCq.mjs +460 -0
- package/fesm2022/posiwise-resource-module-resource-events.module-BwK6UfCq.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-hub.module-BWvid8gs.mjs +443 -0
- package/fesm2022/posiwise-resource-module-resource-hub.module-BWvid8gs.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-integrations.module-qudabfwX.mjs +604 -0
- package/fesm2022/posiwise-resource-module-resource-integrations.module-qudabfwX.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-post.module-BJnApbtU.mjs +777 -0
- package/fesm2022/posiwise-resource-module-resource-post.module-BJnApbtU.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-release-notes.module-TH1usNf-.mjs +294 -0
- package/fesm2022/posiwise-resource-module-resource-release-notes.module-TH1usNf-.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-root.module-DP0EMP-_.mjs +769 -0
- package/fesm2022/posiwise-resource-module-resource-root.module-DP0EMP-_.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-videos.module-DR7dQ_8r.mjs +258 -0
- package/fesm2022/posiwise-resource-module-resource-videos.module-DR7dQ_8r.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource-white-papers.module-C8J9-eqL.mjs +259 -0
- package/fesm2022/posiwise-resource-module-resource-white-papers.module-C8J9-eqL.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module-resource.service-DjeMJX1O.mjs +88 -0
- package/fesm2022/posiwise-resource-module-resource.service-DjeMJX1O.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module.mjs +1603 -2
- package/fesm2022/posiwise-resource-module.mjs.map +1 -1
- package/package.json +6 -5
- package/types/posiwise-resource-module.d.ts +794 -506
- package/fesm2022/posiwise-resource-module-base-top-banner.component-CD5atqs7.mjs +0 -116
- package/fesm2022/posiwise-resource-module-base-top-banner.component-CD5atqs7.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-posiwise-resource-module-C-e2dNwR.mjs +0 -1888
- package/fesm2022/posiwise-resource-module-posiwise-resource-module-C-e2dNwR.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-blogs.module-BBFWP2C7.mjs +0 -69
- package/fesm2022/posiwise-resource-module-resource-blogs.module-BBFWP2C7.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-case-studies.module-ByTD2_48.mjs +0 -135
- package/fesm2022/posiwise-resource-module-resource-case-studies.module-ByTD2_48.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-events.module-DDRHt23j.mjs +0 -241
- package/fesm2022/posiwise-resource-module-resource-events.module-DDRHt23j.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-hub.module-BfsDOG9Y.mjs +0 -244
- package/fesm2022/posiwise-resource-module-resource-hub.module-BfsDOG9Y.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-integrations.module-HnP4CCtr.mjs +0 -295
- package/fesm2022/posiwise-resource-module-resource-integrations.module-HnP4CCtr.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-post.module-D1Y2bs-g.mjs +0 -334
- package/fesm2022/posiwise-resource-module-resource-post.module-D1Y2bs-g.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-release-notes.module-DXwH6xe3.mjs +0 -110
- package/fesm2022/posiwise-resource-module-resource-release-notes.module-DXwH6xe3.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-root.module-CFCC4-Ht.mjs +0 -398
- package/fesm2022/posiwise-resource-module-resource-root.module-CFCC4-Ht.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-videos.module-cV-K0XzH.mjs +0 -68
- package/fesm2022/posiwise-resource-module-resource-videos.module-cV-K0XzH.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-white-papers.module-C9piJ56m.mjs +0 -70
- package/fesm2022/posiwise-resource-module-resource-white-papers.module-C9piJ56m.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-contact-us/resource-contact-us.module.ts","../../../../libs/resource-module/src/lib/public/components/resource-edit-card-lazy/resource-edit-card-lazy.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.html","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.html","../../../../libs/resource-module/src/lib/public/components/base/base-resource.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.html","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.html","../../../../libs/resource-module/src/lib/public/shared/resource-cards.module.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { Trial4SharedContactUsModule } from '@posiwise/resource-contact-us';\n\n@NgModule({\n imports: [Trial4SharedContactUsModule],\n exports: [Trial4SharedContactUsModule]\n})\nexport class Trial4ContactUsModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n type SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\n/**\n * Lazy-loading wrapper for ResourceEditCard\n */\n@Component({\n selector: 'pw-resource-edit-card-lazy',\n template: `<ng-container #editCardContainer></ng-container>`,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceEditCardLazyComponent implements OnChanges, OnDestroy {\n @ViewChild('editCardContainer', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n @Input() id!: number;\n @Input() resourceData;\n @Input() canEdit = false;\n @Output() updated = new EventEmitter<void>();\n\n private componentRef = null;\n private loading = false;\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n async ngOnChanges(changes: SimpleChanges) {\n if (this.canEdit && !this.componentRef && !this.loading) {\n await this.loadEditCard();\n } else if (!this.canEdit && this.componentRef) {\n this.container.clear();\n this.componentRef = null;\n } else if (this.componentRef && (changes['id'] || changes['resourceData'])) {\n // Update existing component inputs\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n }\n }\n\n private async loadEditCard() {\n if (this.componentRef || this.loading) return; // Prevent double loading\n\n this.loading = true; // Set BEFORE async operation\n\n try {\n // Dynamically import ResourceEditCard component (145 KB)\n const module = await import('../resource-edit-card/resource-edit-card.component');\n const ResourceEditCardComponent = module.ResourceEditCardComponent;\n\n // Ensure container exists and is clear\n if (!this.container) return;\n this.container.clear();\n\n // Create component dynamically (only once)\n this.componentRef = this.container.createComponent(ResourceEditCardComponent);\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n this.componentRef.instance.updated.subscribe(() => {\n this.updated.emit();\n this.cdr.markForCheck();\n });\n this.loading = false;\n } catch (error) {\n console.error('Failed to load ResourceEditCard:', error);\n this.loading = false;\n }\n }\n\n ngOnDestroy() {\n this.componentRef?.destroy();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-note-card',\n templateUrl: './release-note-card.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceNoteCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() releaseHeader = false;\n @Input() categoryId!: string;\n @Input() isReleasePress = false;\n @Input() isResource = false;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() tag;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n postTags: { [key: string]: { id: string; title: string } } = {};\n releasePosts: { [key: string]: Resource[] } = {};\n\n tagCategory;\n isEditingTitle: boolean;\n isPressEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\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 }\n this.getTags();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Release Notes' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[0];\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.postTags['product'] = this.findTag(\n response.tags,\n 'Product Release Notes',\n this.tagCategory?.id\n );\n this.postTags['press'] = this.findTag(\n response.tags,\n 'Press Release Notes',\n this.tagCategory?.id\n );\n\n if (this.postTags['product']?.id) {\n this.getProductReleasePosts(1, 100);\n } else {\n this.isLoaded = true;\n this.releasePosts['product'] = [];\n }\n\n if (this.postTags['press']?.id) {\n this.getPressReleasePosts(1, 100);\n } else {\n this.isLoaded = true;\n this.releasePosts['press'] = [];\n }\n this.cdr.markForCheck();\n });\n }\n\n private findTag(tags, name: string, categoryId: number) {\n return tags.find(tag => tag.name === name && tag.tag_category_id === categoryId);\n }\n\n hasPressReleases(): boolean {\n return this.releasePosts['press']?.length !== 0 && this.isLoaded;\n }\n hasProductReleases(): boolean {\n return this.releasePosts['product']?.length !== 0 && this.isLoaded;\n }\n\n getProductReleasePosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n '',\n this.postTags['product']?.id\n )\n .subscribe(response => {\n const sortedPosts = response.posts\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.releasePosts['product'] = this.getProcessedPosts(sortedPosts);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n getPressReleasePosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n '',\n this.postTags['press']?.id\n )\n .subscribe(response => {\n const sortedPosts = response?.posts\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.releasePosts['press'] = this.getProcessedPosts(sortedPosts);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n private getProcessedPosts(posts: Resource[], sliceCount = 3): Resource[] {\n const cloned = [...posts];\n return this.postSlice ? cloned.reverse() : cloned.slice(0, sliceCount).reverse();\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.postTags['product'].title;\n }\n\n toggleEditPressTitle() {\n this.isPressEditingTitle = true;\n this.editedTitle = this.postTags['press'].title;\n }\n\n saveEditedTitle(type) {\n HelperService.updateTagTitle(\n this.postTags[type],\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.postTags[type].title = this.editedTitle;\n if (type === 'product') {\n this.isEditingTitle = false;\n } else {\n this.isPressEditingTitle = false;\n }\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","@if (hasProductReleases()) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (postTags['product']?.title) {\n <span [innerHTML]=\"postTags['product']?.title\"></span>\n } @else {\n Product Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('product')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['product']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasProductReleases()) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['product']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getProductReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url?.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Product Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Product Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n}\n@if (isReleasePress && hasPressReleases()) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isPressEditingTitle }\">\n @if (!isPressEditingTitle) {\n @if (postTags['press']?.title) {\n <span [innerHTML]=\"postTags['press']?.title\"></span>\n } @else {\n Press Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditPressTitle()\" (keydown.enter)=\"toggleEditPressTitle()\" (keydown.space)=\"toggleEditPressTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isPressEditingTitle }\" id=\"input_editedTitle_1600\" name=\"input_editedTitle_1600\"\n aria-label=\"Input Edited Title 1600\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('press')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isPressEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['press']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasPressReleases()) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['press']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPressReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Press Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Press Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-case-studies-card',\n templateUrl: './case-studies-cards.component.html',\n styleUrls: ['./case-studies-cards.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class CaseStudyCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showCaseStudyHeader = false;\n @Input() categoryId!: string;\n @Input() postSlice = false;\n @Input() tag;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n companyName = this.appConfig.company.name;\n\n posts: Resource[] = [];\n isMasterSubscription;\n\n isEditingTitle = false;\n editedTitle: string;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\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 }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\" id=\"case-studies\">\n <div class=\"container\">\n @if (showCaseStudyHeader) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n <a class=\"view-all\" routerLink=\"/resources/case-studies\">VIEW ALL ></a>\n </div>\n } @else {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n </div>\n }\n\n\n <ng-template #caseStudyHeaderTemplate>\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span>\n <span [innerHTML]=\"resourceTitle\"></span>\n </span>\n } @else {\n Case Studies\n }\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\"\n (click)=\"toggleEditTitle()\"\n (keydown.enter)=\"toggleEditTitle()\"\n (keydown.space)=\"toggleEditTitle()\"\n title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n\n </h2>\n </ng-template>\n\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"testimonial-box\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <div>\n @if (!post.rectangular_picture.url.includes('default-photo.jpg') ) {\n <img [src]=\"post.rectangular_picture.url\"\n alt=\"IT Partners Logo\"\n class=\"company-logo mb-3\"\n width=\"320\"\n height=\"180\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n <p class=\"mb-4 mt-3 testimonial-section\">\n <span [innerHTML]=\"post.title\"></span>\n </p>\n </div>\n <!-- BOTTOM AVATAR -->\n <div class=\"avatar-container mt-5\">\n @if (post.picture.url && !post.picture.url.includes('default-photo.jpg')) {\n <img [src]=\"post.picture.url\"\n alt=\"User Avatar\"\n class=\"testimonial-avatar\"\n width=\"96\"\n height=\"96\"\n loading=\"lazy\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"read-more-btn-overlay\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"read-more-btn-overlay\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../../resource.service';\n\n@Component({\n selector: 'pw-resource-cards',\n templateUrl: './resource-cards.component.html',\n styleUrls: ['../../../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() categoryId!: string;\n @Input() isHeaderVisible = true;\n @Input() isRelated = false;\n @Input() resourceTitle!: string;\n @Input() postSlice = false;\n @Input() header;\n @Input() tag;\n @Input() resourceLink;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\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 }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n @if (isHeaderVisible) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Our team's articles\n }\n @if (!isRelated && canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9056\" name=\"input_editedTitle_9056\"\n aria-label=\"Input Edited Title 9056\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" [routerLink]=\"resourceLink\">VIEW ALL ></a>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title \"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\"\n /></a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [href]=\"post.external_url\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>","import { ChangeDetectionStrategy,\n ChangeDetectorRef, Component, Injector, OnInit } 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';\n\nimport { forkJoin } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n template: '',\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport abstract class BaseResourceComponent extends AppBaseComponent implements OnInit {\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n testimonialsPosts: Resource[] = [];\n userLoggedIn: boolean;\n blogPostTag;\n tagCategory;\n blogTestimonialsPostTag;\n isLoaded = false;\n user: User;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n constructor(\n protected readonly resourceService: ResourceService,\n protected readonly tagService: TagService,\n private readonly authService: AuthService,\n protected readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\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.updateCanEditResourcesValue();\n this.initializeComponent();\n this.cdr.markForCheck();\n });\n } else {\n this.initializeComponent();\n }\n this.cdr.markForCheck();\n });\n }\n\n protected initializeComponent() {\n if (this.shouldUseTagCategories()) {\n this.getTags();\n } else {\n this.getPostTags();\n }\n\n if (this.shouldLoadTestimonials()) {\n this.getTestimonialTags();\n }\n }\n\n protected getTags() {\n this.isLoaded = false;\n forkJoin({\n categories: this.tagService.getAllTagCategories(\n { search: this.getSearchTerm() },\n this.getEffectiveSubscriptionId()\n ),\n tags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(({ categories, tags }) => {\n this.tagCategory = categories?.tag_categories?.[0];\n this.blogPostTag = tags.tags.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === this.getResourceType());\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getTestimonialTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogTestimonialsPostTag = response.tags.find(\n tag => tag.name === 'Testimonials'\n );\n this.getTestimonialsPosts(1, 100);\n this.cdr.markForCheck();\n });\n }\n\n protected getPosts(page: number, pageSize: number) {\n this.fetchPosts(page, pageSize, this.blogPostTag?.tag_category_id, 'posts');\n }\n\n getTestimonialsPosts(page: number, pageSize: number) {\n this.fetchPosts(\n page,\n pageSize,\n this.blogTestimonialsPostTag?.tag_category_id,\n 'testimonialsPosts'\n );\n }\n\n /** Shared method to fetch posts with common filtering, sorting, and slicing logic */\n private fetchPosts(\n page: number,\n pageSize: number,\n tagCategoryId,\n targetProperty: 'posts' | 'testimonialsPosts'\n ) {\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', tagCategoryId)\n .subscribe(response => {\n const filteredPosts = response.posts\n .filter(post => post.tags?.some(tag => tag.tag_category_id === tagCategoryId))\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n )\n .slice(0, 12);\n\n if (targetProperty === 'posts') {\n this.posts = filteredPosts;\n } else {\n this.testimonialsPosts = filteredPosts;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n protected getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n // Abstract methods that each component must implement\n protected abstract getResourceType(): string;\n\n // Optional methods that can be overridden\n protected getSearchTerm(): string {\n return this.getResourceType();\n }\n\n protected shouldUseTagCategories(): boolean {\n return false;\n }\n\n protected shouldLoadTestimonials(): boolean {\n return false;\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\n@Component({\n selector: 'pw-resource--vault',\n templateUrl: './resource-vault.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceVaultComponent extends BaseResourceComponent implements OnInit {\n @Input() showVaultSection = false;\n @Input() postSlice = false;\n @Input() categoryId;\n @Input() resourceTitle;\n @Input() tag;\n @Output() isLoadedChange = new EventEmitter<boolean>();\n\n isEditingTitle = false;\n editedTitle: string;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, cdr, injector);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.getPosts(1, 10);\n }\n\n protected getResourceType(): string {\n return 'Vault';\n }\n\n protected override getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.isLoadedChange.emit(this.isLoaded);\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVaultSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap mb-5\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Whitepapers & Tools\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/white-papers\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"d-flex mt-2 flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post) {\n <div class=\"resource-blog-card text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"mb-4\" [innerHTML]=\"post.title\"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n loading=\"lazy\"\n />\n </a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-resource-video-card',\n templateUrl: './resource-video-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class ResourceVideoCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showVideoSection = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n\n videoStates: { [slug: string]: { loaded: boolean; url: SafeResourceUrl } } = {};\n\n isEditingTitle = false;\n editedTitle: string;\n isMasterSubscription;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\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 }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n loadVideo(post): void {\n if (!post.external_url) return;\n\n const slug = post.slug;\n let externalUrl = post.external_url;\n\n // Append autoplay only when clicked\n externalUrl += externalUrl.includes('?') ? '&autoplay=1' : '?autoplay=1';\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.videoStates[slug].url = this.sanitizer.bypassSecurityTrustResourceUrl(externalUrl); //NOSONAR\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.posts.forEach(post => {\n if (post.external_url) {\n this.videoStates[post.slug] = {\n loaded: true,\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n url: this.sanitizer.bypassSecurityTrustResourceUrl(post.external_url) //NOSONAR\n };\n }\n });\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVideoSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n On-Demand Videos\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/videos\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"resource-blog-card\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 10)\">\n </pw-resource-edit-card-lazy>\n <p [innerHTML]=\"post.title\" class=\"mb-5\"></p>\n <a [href]=\" post.external_url\" target=\"_blank\">\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid mb-3\"\n [alt]=\"post.title\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n </a>\n <a class=\"resource-btn mt-3\" [href]=\" post.external_url\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Watch now' }}</span>\n <span class=\"arrow\">→</span>\n </a>\n </div>\n }\n </div>\n }\n </div>\n\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-upcoming-event-card',\n templateUrl: './upcoming-event-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class UpcomingEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showEventContent = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n canEditResourcesValue = false;\n\n now = Date.now();\n subscriptionId;\n\n isEditingTitle = false;\n editedTitle: string;\n\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n blogPostTag;\n isMasterSubscription;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\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.getPostTags();\n } else {\n this.getPostTags();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\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 === 'Events');\n if (this.blogPostTag?.tag_category_id) {\n if (this.postSlice) {\n this.getPosts(1, 100);\n } else {\n this.getAllPosts(1, 100);\n }\n } else {\n this.isLoaded = true;\n this.cdr.markForCheck();\n }\n this.cdr.markForCheck();\n });\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(\n post => post.showcase === true && new Date(post?.when).getTime() > this.now\n )\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = sortedPosts;\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n isUpcoming(post): boolean {\n return new Date(post?.when).getTime() > this.now;\n }\n\n getAllPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());\n\n this.posts = [...sortedPosts].slice(0, 3).reverse();\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showEventContent) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Events & Webinars\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_7936\" name=\"input_editedTitle_7936\"\n aria-label=\"Input Edited Title 7936\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/events\">VIEW ALL ></a>\n </div>\n }\n @if (!showEventContent) {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Upcoming Events\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_7936\" name=\"input_editedTitle_7936\"\n aria-label=\"Input Edited Title 7936\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post)) {\n <div class=\"resource-blog-card d text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getAllPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n @if (postSlice) {\n <h5 class=\"badge-title fw-bold\">UPCOMING:</h5>\n } @else {\n <h5 class=\"badge-title fw-bold\">\n {{ isUpcoming(post) ? 'UPCOMING:' : 'REPLAY:' }}\n </h5>\n }\n\n <p class=\"event-title mb-4\" [innerHtml]=\"post?.title\"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n loading=\"lazy\"\n />\n </a>\n\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n\n\n@if (!showEventContent) {\n<section class=\"bg-white\">\n <pw-replay-event-card [resourceTitle]=\"resourceTitle\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-replay-event-card>\n</section>\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { ResourceSharedComponentsModule } from '@posiwise/shared-components';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SelectModule } from 'primeng/select';\n\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { ResourceNoteCardComponent } from '../components/reslease-note-card/release-note-card.component';\nimport { CaseStudyCardComponent } from '../components/resource-case-studies/case-studies-cards/case-studies-cards.component';\nimport { Trial4ContactUsModule } from '../components/resource-contact-us/resource-contact-us.module';\nimport { ResourceEditCardLazyComponent } from '../components/resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceCardComponent } from '../components/resource-post/related-resources/resource-cards/resource-cards.component';\nimport { ResourceVaultComponent } from '../components/resource-vault/resource-vault.component';\nimport { ResourceVideoCardComponent } from '../components/resource-videos/resource-video-cards/resource-video-cards.component';\nimport { UpcomingEventCardComponent } from '../components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component';\n\n/**\n * Module containing resource card components (lightweight version)\n * ResourceEditCard is lazy-loaded on demand to save 145 KB\n * Trial4ContactUs moved to separate module for better tree-shaking\n * Used by both ResourceRootModule and ResourceSharedModule\n */\n@NgModule({\n declarations: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n ResourceEditCardLazyComponent\n ],\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PipesModule,\n PaginatorModule,\n SelectModule,\n ResourceSharedComponentsModule,\n CoreTranslocoModule,\n TranslocoModule,\n DirectivesModule,\n DragDropModule,\n NgxCaptchaModule,\n Trial4ContactUsModule // ✅ Import standalone module\n ],\n exports: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n Trial4ContactUsModule, // ✅ Re-export for backward compatibility\n ResourceEditCardLazyComponent,\n PaginatorModule // Export PaginatorModule so ResourceCompanyCardComponent can use p-paginator\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceCardsModule {}\n"],"mappings":"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A;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAnB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,cAAA;IArCxB;IACA;IACA;IACA;IACA;IACA;IACA;GAA6B;GAAA,SAAA;IAG7B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAGA;GAAA,SAAA;IAAA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;;CAIK;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,SAAA;IA5BxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IASA;IAEA;;;;;AAIK,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAvC/B,MAAA;EAAS,MAAA,CAAA;GACN,cAAc;IACV;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS,CAAC,sBAAsB;EACnC,CAAA"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { t as ResourceService } from "./posiwise-resource-module-resource.service-DjeMJX1O.mjs";
|
|
2
|
+
import { a as BaseResourceComponent, s as CaseStudyCardComponent } from "./posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs";
|
|
3
|
+
import { ResourceSharedModule, ResourceTopBannerEditComponent, TestimonialCardListComponent } from "./posiwise-resource-module.mjs";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import { ChangeDetectionStrategy, Component, NgModule } from "@angular/core";
|
|
6
|
+
import * as i2 from "@posiwise/common-services";
|
|
7
|
+
import * as i1 from "@angular/router";
|
|
8
|
+
import { RouterModule } from "@angular/router";
|
|
9
|
+
import * as i6 from "@posiwise/resource-contact-us";
|
|
10
|
+
import * as i7 from "@posiwise/directives";
|
|
11
|
+
import * as i8 from "@posiwise/utils";
|
|
12
|
+
import * as i3 from "@angular/platform-browser";
|
|
13
|
+
var ResourceCaseStudiesComponent = class ResourceCaseStudiesComponent extends BaseResourceComponent {
|
|
14
|
+
constructor(resourceService, tagService, authService, cdr, titleService, injector) {
|
|
15
|
+
super(resourceService, tagService, authService, cdr, injector);
|
|
16
|
+
this.titleService = titleService;
|
|
17
|
+
this.contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;
|
|
18
|
+
}
|
|
19
|
+
getResourceType() {
|
|
20
|
+
return "Case Studies";
|
|
21
|
+
}
|
|
22
|
+
getSearchTerm() {
|
|
23
|
+
return "Case Studies";
|
|
24
|
+
}
|
|
25
|
+
shouldUseTagCategories() {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
shouldLoadTestimonials() {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
getPostTags() {
|
|
32
|
+
this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
|
|
33
|
+
if (this.shouldUseTagCategories()) this.blogPostTag = response.tags.find((tag) => tag.tag_category_id === this.tagCategory?.id);
|
|
34
|
+
else this.blogPostTag = response.tags.find((tag) => tag.name === this.getResourceType());
|
|
35
|
+
this.updateSEOMetadata();
|
|
36
|
+
this.getPosts(1, 100);
|
|
37
|
+
this.cdr.markForCheck();
|
|
38
|
+
}).add(() => {
|
|
39
|
+
this.isLoaded = true;
|
|
40
|
+
this.cdr.markForCheck();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
updateSEOMetadata() {
|
|
44
|
+
if (this.blogPostTag) {
|
|
45
|
+
if (this.blogPostTag.meta_title) this.titleService.setTitle(this.blogPostTag.meta_title);
|
|
46
|
+
if (this.blogPostTag.meta_description) this.updateMetaDescription(this.blogPostTag.meta_description);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
updateMetaDescription(description) {
|
|
50
|
+
let metaDescription = document.querySelector("meta[name=\"description\"]");
|
|
51
|
+
if (!metaDescription) {
|
|
52
|
+
metaDescription = document.createElement("meta");
|
|
53
|
+
metaDescription.setAttribute("name", "description");
|
|
54
|
+
document.head.appendChild(metaDescription);
|
|
55
|
+
}
|
|
56
|
+
metaDescription.setAttribute("content", description);
|
|
57
|
+
}
|
|
58
|
+
shouldShowTestimonials() {
|
|
59
|
+
if (this.testimonialsPosts && this.testimonialsPosts.length > 0) return true;
|
|
60
|
+
if (!this.userLoggedIn || !this.user) return false;
|
|
61
|
+
if (this.permissionService.isSuperAdmin()) return true;
|
|
62
|
+
const userMasterSubscription = this.user?.subscriptions?.find((sub) => sub.products?.some((p) => p.is_master_product));
|
|
63
|
+
const masterProduct = userMasterSubscription?.products?.find((p) => p.is_master_product);
|
|
64
|
+
const masterProductWithSlug = masterProduct ? {
|
|
65
|
+
...masterProduct,
|
|
66
|
+
subscription_slug: userMasterSubscription?.slug
|
|
67
|
+
} : null;
|
|
68
|
+
if (masterProductWithSlug && this.permissionService.isUserSubscriptionSuperAdmin(masterProductWithSlug)) return true;
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
static {
|
|
72
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
73
|
+
minVersion: "12.0.0",
|
|
74
|
+
version: "22.2.0",
|
|
75
|
+
ngImport: i0,
|
|
76
|
+
type: ResourceCaseStudiesComponent,
|
|
77
|
+
deps: [
|
|
78
|
+
{ token: ResourceService },
|
|
79
|
+
{ token: i2.TagService },
|
|
80
|
+
{ token: i2.AuthService },
|
|
81
|
+
{ token: i0.ChangeDetectorRef },
|
|
82
|
+
{ token: i3.Title },
|
|
83
|
+
{ token: i0.Injector }
|
|
84
|
+
],
|
|
85
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
static {
|
|
89
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
90
|
+
minVersion: "17.0.0",
|
|
91
|
+
version: "22.2.0",
|
|
92
|
+
type: ResourceCaseStudiesComponent,
|
|
93
|
+
isStandalone: false,
|
|
94
|
+
selector: "pw-resource-case-studies",
|
|
95
|
+
usesInheritance: true,
|
|
96
|
+
ngImport: i0,
|
|
97
|
+
template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\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 <!-- Left Content -->\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 || 'Case Studies'\"></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\">Real solutions — real results.</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\">Speak to sales <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <!-- Right Content -->\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\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/case-studies-man.png'\"\n alt=\"Case studies banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n@if (shouldShowTestimonials()) {\n <pw-testimonial-card [posts]=\"testimonialsPosts\" [postHeader]=\"'Testimonials'\" [canEdit]=\"canEditResourcesValue\" (editPost)=\"getTestimonialsPosts(1, 100)\" id=\"reviews\"></pw-testimonial-card>\n}\n@if (blogPostTag?.tag_category_id) {\n <pw-case-studies-card [tag]=\"blogPostTag\" id=\"case-studies\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-case-studies-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n",
|
|
98
|
+
styles: ["@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"],
|
|
99
|
+
dependencies: [
|
|
100
|
+
{
|
|
101
|
+
kind: "component",
|
|
102
|
+
type: ResourceTopBannerEditComponent,
|
|
103
|
+
selector: "pw-resource-top-banner-edit",
|
|
104
|
+
inputs: [
|
|
105
|
+
"blogPostTag",
|
|
106
|
+
"user",
|
|
107
|
+
"userLoggedIn"
|
|
108
|
+
],
|
|
109
|
+
outputs: ["getUpdatedTag"]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
kind: "component",
|
|
113
|
+
type: CaseStudyCardComponent,
|
|
114
|
+
selector: "pw-case-studies-card",
|
|
115
|
+
inputs: [
|
|
116
|
+
"showCaseStudyHeader",
|
|
117
|
+
"categoryId",
|
|
118
|
+
"postSlice",
|
|
119
|
+
"tag",
|
|
120
|
+
"resourceTitle",
|
|
121
|
+
"user",
|
|
122
|
+
"userLoggedIn"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
kind: "component",
|
|
127
|
+
type: i6.Trial4ContactUsComponent,
|
|
128
|
+
selector: "pw-trial-4-contact-us",
|
|
129
|
+
inputs: [
|
|
130
|
+
"subscriptionId",
|
|
131
|
+
"sourceId",
|
|
132
|
+
"masterSubscriptionId",
|
|
133
|
+
"experimentName",
|
|
134
|
+
"microserviceName",
|
|
135
|
+
"shardName",
|
|
136
|
+
"user",
|
|
137
|
+
"userLoggedIn"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
kind: "directive",
|
|
142
|
+
type: i7.LazyImgDirective,
|
|
143
|
+
selector: "img"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
kind: "component",
|
|
147
|
+
type: i8.ResourceHeaderComponent,
|
|
148
|
+
selector: "pw-resource-header",
|
|
149
|
+
inputs: ["user", "userLoggedIn"]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
kind: "component",
|
|
153
|
+
type: TestimonialCardListComponent,
|
|
154
|
+
selector: "pw-testimonial-card",
|
|
155
|
+
inputs: [
|
|
156
|
+
"posts",
|
|
157
|
+
"postHeader",
|
|
158
|
+
"canEdit"
|
|
159
|
+
],
|
|
160
|
+
outputs: ["editPost"]
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
168
|
+
minVersion: "12.0.0",
|
|
169
|
+
version: "22.2.0",
|
|
170
|
+
ngImport: i0,
|
|
171
|
+
type: ResourceCaseStudiesComponent,
|
|
172
|
+
decorators: [{
|
|
173
|
+
type: Component,
|
|
174
|
+
args: [{
|
|
175
|
+
selector: "pw-resource-case-studies",
|
|
176
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
177
|
+
standalone: false,
|
|
178
|
+
template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\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 <!-- Left Content -->\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 || 'Case Studies'\"></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\">Real solutions — real results.</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\">Speak to sales <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <!-- Right Content -->\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\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/case-studies-man.png'\"\n alt=\"Case studies banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n@if (shouldShowTestimonials()) {\n <pw-testimonial-card [posts]=\"testimonialsPosts\" [postHeader]=\"'Testimonials'\" [canEdit]=\"canEditResourcesValue\" (editPost)=\"getTestimonialsPosts(1, 100)\" id=\"reviews\"></pw-testimonial-card>\n}\n@if (blogPostTag?.tag_category_id) {\n <pw-case-studies-card [tag]=\"blogPostTag\" id=\"case-studies\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-case-studies-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n",
|
|
179
|
+
styles: ["@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"]
|
|
180
|
+
}]
|
|
181
|
+
}],
|
|
182
|
+
ctorParameters: () => [
|
|
183
|
+
{ type: ResourceService },
|
|
184
|
+
{ type: i2.TagService },
|
|
185
|
+
{ type: i2.AuthService },
|
|
186
|
+
{ type: i0.ChangeDetectorRef },
|
|
187
|
+
{ type: i3.Title },
|
|
188
|
+
{ type: i0.Injector }
|
|
189
|
+
]
|
|
190
|
+
});
|
|
191
|
+
const routes = [{
|
|
192
|
+
path: "",
|
|
193
|
+
component: ResourceCaseStudiesComponent,
|
|
194
|
+
data: {
|
|
195
|
+
title: "Resources - Case Studies",
|
|
196
|
+
permission: "Pages.Blog",
|
|
197
|
+
preload: false
|
|
198
|
+
}
|
|
199
|
+
}];
|
|
200
|
+
var ResourceCaseStudiesModule = class ResourceCaseStudiesModule {
|
|
201
|
+
static {
|
|
202
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
203
|
+
minVersion: "12.0.0",
|
|
204
|
+
version: "22.2.0",
|
|
205
|
+
ngImport: i0,
|
|
206
|
+
type: ResourceCaseStudiesModule,
|
|
207
|
+
deps: [],
|
|
208
|
+
target: i0.ɵɵFactoryTarget.NgModule
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
static {
|
|
212
|
+
this.ɵmod = i0.ɵɵngDeclareNgModule({
|
|
213
|
+
minVersion: "14.0.0",
|
|
214
|
+
version: "22.2.0",
|
|
215
|
+
ngImport: i0,
|
|
216
|
+
type: ResourceCaseStudiesModule,
|
|
217
|
+
declarations: [ResourceCaseStudiesComponent, TestimonialCardListComponent],
|
|
218
|
+
imports: [ResourceSharedModule, i1.RouterModule]
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
static {
|
|
222
|
+
this.ɵinj = i0.ɵɵngDeclareInjector({
|
|
223
|
+
minVersion: "12.0.0",
|
|
224
|
+
version: "22.2.0",
|
|
225
|
+
ngImport: i0,
|
|
226
|
+
type: ResourceCaseStudiesModule,
|
|
227
|
+
imports: [ResourceSharedModule, RouterModule.forChild(routes)]
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
232
|
+
minVersion: "12.0.0",
|
|
233
|
+
version: "22.2.0",
|
|
234
|
+
ngImport: i0,
|
|
235
|
+
type: ResourceCaseStudiesModule,
|
|
236
|
+
decorators: [{
|
|
237
|
+
type: NgModule,
|
|
238
|
+
args: [{
|
|
239
|
+
declarations: [ResourceCaseStudiesComponent, TestimonialCardListComponent],
|
|
240
|
+
imports: [ResourceSharedModule, RouterModule.forChild(routes)]
|
|
241
|
+
}]
|
|
242
|
+
}]
|
|
243
|
+
});
|
|
244
|
+
export { ResourceCaseStudiesModule };
|
|
245
|
+
|
|
246
|
+
//# sourceMappingURL=posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-case-studies/resource-case-studies.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/resource-case-studies.component.html","../../../../libs/resource-module/src/lib/public/modules/case-studies/resource-case-studies.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\n\nimport { ResourceService } from '../../../resource.service';\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\n@Component({\n selector: 'pw-resource-case-studies',\n templateUrl: './resource-case-studies.component.html',\n styleUrls: ['./resource-case-studies.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceCaseStudiesComponent extends BaseResourceComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n cdr: ChangeDetectorRef,\n private readonly titleService: Title,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, cdr, injector);\n }\n\n protected getResourceType(): string {\n return 'Case Studies';\n }\n\n protected override getSearchTerm(): string {\n return 'Case Studies';\n }\n\n protected override shouldUseTagCategories(): boolean {\n return true;\n }\n\n protected override shouldLoadTestimonials(): boolean {\n return true;\n }\n\n protected override getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n if (this.shouldUseTagCategories()) {\n this.blogPostTag = response.tags.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n } else {\n this.blogPostTag = response.tags.find(\n tag => tag.name === this.getResourceType()\n );\n }\n this.updateSEOMetadata();\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n private updateSEOMetadata() {\n if (this.blogPostTag) {\n // Update page title if meta_title is available\n if (this.blogPostTag.meta_title) {\n this.titleService.setTitle(this.blogPostTag.meta_title);\n }\n\n if (this.blogPostTag.meta_description) {\n this.updateMetaDescription(this.blogPostTag.meta_description);\n }\n }\n }\n\n private updateMetaDescription(description: string) {\n let metaDescription = document.querySelector('meta[name=\"description\"]');\n if (!metaDescription) {\n metaDescription = document.createElement('meta');\n metaDescription.setAttribute('name', 'description');\n document.head.appendChild(metaDescription);\n }\n metaDescription.setAttribute('content', description);\n }\n shouldShowTestimonials(): boolean {\n // Show if there are testimonials\n if (this.testimonialsPosts && this.testimonialsPosts.length > 0) {\n return true;\n }\n\n // Show if user is not logged in (no admin checks needed)\n if (!this.userLoggedIn || !this.user) {\n return false;\n }\n\n // Show if user is SUPER ADMIN\n if (this.permissionService.isSuperAdmin()) {\n return true;\n }\n\n // Show if user is MASTER SUBSCRIPTION ADMIN\n const userMasterSubscription = this.user?.subscriptions?.find(sub =>\n sub.products?.some(p => p.is_master_product)\n );\n const masterProduct = userMasterSubscription?.products?.find(p => p.is_master_product);\n const masterProductWithSlug = masterProduct\n ? {\n ...masterProduct,\n subscription_slug: userMasterSubscription?.slug\n }\n : null;\n\n if (\n masterProductWithSlug &&\n this.permissionService.isUserSubscriptionSuperAdmin(masterProductWithSlug)\n ) {\n return true;\n }\n\n return false;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\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 <!-- Left Content -->\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 || 'Case Studies'\"></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\">Real solutions — real results.</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\">Speak to sales <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n <!-- Right Content -->\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\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/case-studies-man.png'\"\n alt=\"Case studies banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n@if (shouldShowTestimonials()) {\n <pw-testimonial-card [posts]=\"testimonialsPosts\" [postHeader]=\"'Testimonials'\" [canEdit]=\"canEditResourcesValue\" (editPost)=\"getTestimonialsPosts(1, 100)\" id=\"reviews\"></pw-testimonial-card>\n}\n@if (blogPostTag?.tag_category_id) {\n <pw-case-studies-card [tag]=\"blogPostTag\" id=\"case-studies\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-case-studies-card>\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 { ResourceCaseStudiesComponent } from '../../components/resource-case-studies/resource-case-studies.component';\nimport { TestimonialCardListComponent } from '../../components/testimonial-card/testimonial-card.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceCaseStudiesComponent,\n data: {\n title: 'Resources - Case Studies',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [\n ResourceCaseStudiesComponent,\n TestimonialCardListComponent // Only used in case studies\n ],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceCaseStudiesModule {}\n"],"mappings":";;;;;;;;;;;;AAgBA,IAAa,+BAAb,MAAa,qCAAqC,sBAAqB;CAGnE,YACI,iBACA,YACA,aACA,KACiB,cACjB,UAAkB;EAElB,MAAM,iBAAiB,YAAY,aAAa,KAAK,QAAQ;EAH5C,KAAA,eAAA;EAPrB,KAAA,eAAe,KAAK,WAAW,cAAc,YAAY;CAWzD;CAEU,kBAAe;EACrB,OAAO;CACX;CAEmB,gBAAa;EAC5B,OAAO;CACX;CAEmB,yBAAsB;EACrC,OAAO;CACX;CAEmB,yBAAsB;EACrC,OAAO;CACX;CAEmB,cAAW;EAC1B,KAAK,WACA,cAAc,mBAAmB,CAAA,GAAI,KAAK,2BAA0B,CAAE,CAAC,CACvE,WAAU,aAAW;GAClB,IAAI,KAAK,uBAAsB,GAC3B,KAAK,cAAc,SAAS,KAAK,MAC7B,QAAO,IAAI,oBAAoB,KAAK,aAAa,EAAE;QAGvD,KAAK,cAAc,SAAS,KAAK,MAC7B,QAAO,IAAI,SAAS,KAAK,gBAAe,CAAE;GAGlD,KAAK,kBAAiB;GACtB,KAAK,SAAS,GAAG,GAAG;GACpB,KAAK,IAAI,aAAY;EACzB,CAAC,CAAC,CACD,UAAS;GACN,KAAK,WAAW;GAChB,KAAK,IAAI,aAAY;EACzB,CAAC;CACT;CAEQ,oBAAiB;EACrB,IAAI,KAAK,aAAa;GAElB,IAAI,KAAK,YAAY,YACjB,KAAK,aAAa,SAAS,KAAK,YAAY,UAAU;GAG1D,IAAI,KAAK,YAAY,kBACjB,KAAK,sBAAsB,KAAK,YAAY,gBAAgB;EAEpE;CACJ;CAEQ,sBAAsB,aAAmB;EAC7C,IAAI,kBAAkB,SAAS,cAAc,4BAA0B;EACvE,IAAI,CAAC,iBAAiB;GAClB,kBAAkB,SAAS,cAAc,MAAM;GAC/C,gBAAgB,aAAa,QAAQ,aAAa;GAClD,SAAS,KAAK,YAAY,eAAe;EAC7C;EACA,gBAAgB,aAAa,WAAW,WAAW;CACvD;CACA,yBAAsB;EAElB,IAAI,KAAK,qBAAqB,KAAK,kBAAkB,SAAS,GAC1D,OAAO;EAIX,IAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,MAC5B,OAAO;EAIX,IAAI,KAAK,kBAAkB,aAAY,GACnC,OAAO;EAIX,MAAM,yBAAyB,KAAK,MAAM,eAAe,MAAK,QAC1D,IAAI,UAAU,MAAK,MAAK,EAAE,iBAAiB,CAAC;EAEhD,MAAM,gBAAgB,wBAAwB,UAAU,MAAK,MAAK,EAAE,iBAAiB;EACrF,MAAM,wBAAwB,gBACxB;GACI,GAAG;GACH,mBAAmB,wBAAwB;EAC9C,IACD;EAEN,IACI,yBACA,KAAK,kBAAkB,6BAA6B,qBAAqB,GAEzE,OAAO;EAGX,OAAO;CACX;CA/GS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA4B,MAAA;IAAA,EAAA,OAAA,gBAAA;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,YAAA;IAAA,EAAA,OAAA,GAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,MAAA;IAAA,EAAA,OAAA,GAAA,SAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA5B;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAA4B,cAAA;GAAA,UAAA;GAAA,iBAAA;GAAA,UAAA;GAAA,UChBzC;GA+DA,QAAA,CAAA,65RAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA,CAAA,QAAA,cAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,UAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AD/Ca,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA4B,YAAA,CAAA;EARxC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAA0B,iBAInB,wBAAwB;GAAM,YACnC;GAAK,UAAA;GAAA,QAAA,CAAA,65RAAA;EAAA,CAAA;;;;;;;;;;;AEPrB,MAAM,SAAiB,CACnB;CACI,MAAM;CACN,WAAW;CACX,MAAM;EACF,OAAO;EACP,YAAY;EACZ,SAAS;CACZ;AACJ,CACJ;AASD,IAAa,4BAAb,MAAa,0BAAyB;CAAzB;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAyB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAzB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAyB,cAAA,CAL9B,8BACA,4BAEM;GAAA,SAAA,CAAA,sBAAoB,GAAA,YAAA;EAAA,CAAA;CAAA;CAErB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAyB,SAAA,CAFxB,sBAAsB,aAAa,SAAS,MAAM,CAAC;EAAA,CAAA;CAAA;;AAEpD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EAPrC,MAAA;EAAS,MAAA,CAAA;GACN,cAAc,CACV,8BACA,4BACH;GACD,SAAS,CAAC,sBAAsB,aAAa,SAAS,MAAM,CAAC;EAChE,CAAA"}
|