@posiwise/resource-module 0.0.192 → 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.
Files changed (54) hide show
  1. package/fesm2022/posiwise-resource-module-base-top-banner.component-DSirXfem.mjs +142 -0
  2. package/fesm2022/posiwise-resource-module-base-top-banner.component-DSirXfem.mjs.map +1 -0
  3. package/fesm2022/posiwise-resource-module-resource-blogs.module-DIh--y78.mjs +264 -0
  4. package/fesm2022/posiwise-resource-module-resource-blogs.module-DIh--y78.mjs.map +1 -0
  5. package/fesm2022/posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs +1928 -0
  6. package/fesm2022/posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs.map +1 -0
  7. package/fesm2022/posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs +246 -0
  8. package/fesm2022/posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs.map +1 -0
  9. package/fesm2022/posiwise-resource-module-resource-events.module-BwK6UfCq.mjs +460 -0
  10. package/fesm2022/posiwise-resource-module-resource-events.module-BwK6UfCq.mjs.map +1 -0
  11. package/fesm2022/posiwise-resource-module-resource-hub.module-BWvid8gs.mjs +443 -0
  12. package/fesm2022/posiwise-resource-module-resource-hub.module-BWvid8gs.mjs.map +1 -0
  13. package/fesm2022/posiwise-resource-module-resource-integrations.module-qudabfwX.mjs +604 -0
  14. package/fesm2022/posiwise-resource-module-resource-integrations.module-qudabfwX.mjs.map +1 -0
  15. package/fesm2022/posiwise-resource-module-resource-post.module-BJnApbtU.mjs +777 -0
  16. package/fesm2022/posiwise-resource-module-resource-post.module-BJnApbtU.mjs.map +1 -0
  17. package/fesm2022/posiwise-resource-module-resource-release-notes.module-TH1usNf-.mjs +294 -0
  18. package/fesm2022/posiwise-resource-module-resource-release-notes.module-TH1usNf-.mjs.map +1 -0
  19. package/fesm2022/posiwise-resource-module-resource-root.module-DP0EMP-_.mjs +769 -0
  20. package/fesm2022/posiwise-resource-module-resource-root.module-DP0EMP-_.mjs.map +1 -0
  21. package/fesm2022/posiwise-resource-module-resource-videos.module-DR7dQ_8r.mjs +258 -0
  22. package/fesm2022/posiwise-resource-module-resource-videos.module-DR7dQ_8r.mjs.map +1 -0
  23. package/fesm2022/posiwise-resource-module-resource-white-papers.module-C8J9-eqL.mjs +259 -0
  24. package/fesm2022/posiwise-resource-module-resource-white-papers.module-C8J9-eqL.mjs.map +1 -0
  25. package/fesm2022/posiwise-resource-module-resource.service-DjeMJX1O.mjs +88 -0
  26. package/fesm2022/posiwise-resource-module-resource.service-DjeMJX1O.mjs.map +1 -0
  27. package/fesm2022/posiwise-resource-module.mjs +1603 -2
  28. package/fesm2022/posiwise-resource-module.mjs.map +1 -1
  29. package/package.json +6 -5
  30. package/types/posiwise-resource-module.d.ts +794 -506
  31. package/fesm2022/posiwise-resource-module-base-top-banner.component-CIvGr9du.mjs +0 -116
  32. package/fesm2022/posiwise-resource-module-base-top-banner.component-CIvGr9du.mjs.map +0 -1
  33. package/fesm2022/posiwise-resource-module-posiwise-resource-module-QIX6Y1Ol.mjs +0 -1888
  34. package/fesm2022/posiwise-resource-module-posiwise-resource-module-QIX6Y1Ol.mjs.map +0 -1
  35. package/fesm2022/posiwise-resource-module-resource-blogs.module-DQhQ9YWu.mjs +0 -69
  36. package/fesm2022/posiwise-resource-module-resource-blogs.module-DQhQ9YWu.mjs.map +0 -1
  37. package/fesm2022/posiwise-resource-module-resource-case-studies.module-D7ALgcL_.mjs +0 -135
  38. package/fesm2022/posiwise-resource-module-resource-case-studies.module-D7ALgcL_.mjs.map +0 -1
  39. package/fesm2022/posiwise-resource-module-resource-events.module-UnO7wcUI.mjs +0 -241
  40. package/fesm2022/posiwise-resource-module-resource-events.module-UnO7wcUI.mjs.map +0 -1
  41. package/fesm2022/posiwise-resource-module-resource-hub.module-UBFt3bki.mjs +0 -244
  42. package/fesm2022/posiwise-resource-module-resource-hub.module-UBFt3bki.mjs.map +0 -1
  43. package/fesm2022/posiwise-resource-module-resource-integrations.module-D7idZK_y.mjs +0 -295
  44. package/fesm2022/posiwise-resource-module-resource-integrations.module-D7idZK_y.mjs.map +0 -1
  45. package/fesm2022/posiwise-resource-module-resource-post.module-CR9sCgeR.mjs +0 -334
  46. package/fesm2022/posiwise-resource-module-resource-post.module-CR9sCgeR.mjs.map +0 -1
  47. package/fesm2022/posiwise-resource-module-resource-release-notes.module-DxRiC1Q4.mjs +0 -110
  48. package/fesm2022/posiwise-resource-module-resource-release-notes.module-DxRiC1Q4.mjs.map +0 -1
  49. package/fesm2022/posiwise-resource-module-resource-root.module-PmW6b6c0.mjs +0 -398
  50. package/fesm2022/posiwise-resource-module-resource-root.module-PmW6b6c0.mjs.map +0 -1
  51. package/fesm2022/posiwise-resource-module-resource-videos.module-VJAmMFn-.mjs +0 -68
  52. package/fesm2022/posiwise-resource-module-resource-videos.module-VJAmMFn-.mjs.map +0 -1
  53. package/fesm2022/posiwise-resource-module-resource-white-papers.module-jsS-ik0o.mjs +0 -70
  54. package/fesm2022/posiwise-resource-module-resource-white-papers.module-jsS-ik0o.mjs.map +0 -1
@@ -0,0 +1,1928 @@
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-DjeMJX1O.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, EventEmitter, Input, NgModule, Output, ViewChild, ViewContainerRef } from "@angular/core";
4
+ import { HelperService } from "@posiwise/helper-service";
5
+ import * as i2 from "@posiwise/common-services";
6
+ import * as i4 from "@angular/router";
7
+ import { RouterModule } from "@angular/router";
8
+ import { Trial4SharedContactUsModule } from "@posiwise/resource-contact-us";
9
+ import * as i3 from "@angular/common";
10
+ import { CommonModule } from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ import { FormsModule, ReactiveFormsModule } from "@angular/forms";
13
+ import { CoreTranslocoModule } from "@posiwise/core-transloco";
14
+ import * as i8 from "@posiwise/directives";
15
+ import { DirectivesModule } from "@posiwise/directives";
16
+ import { PipesModule } from "@posiwise/pipes";
17
+ import * as i6 from "@posiwise/shared-components";
18
+ import { ResourceSharedComponentsModule } from "@posiwise/shared-components";
19
+ import * as i10 from "@jsverse/transloco";
20
+ import { TranslocoModule } from "@jsverse/transloco";
21
+ import { AppBaseComponent } from "@posiwise/app-base-component";
22
+ import { forkJoin } from "rxjs";
23
+ import { PaginatorModule } from "primeng/paginator";
24
+ import { DragDropModule } from "@angular/cdk/drag-drop";
25
+ import { NgxCaptchaModule } from "ngx-captcha";
26
+ import { SelectModule } from "primeng/select";
27
+ import * as i7 from "primeng/progressspinner";
28
+ import * as i1 from "@angular/platform-browser";
29
+ var Trial4ContactUsModule = class Trial4ContactUsModule {
30
+ static {
31
+ this.ɵfac = i0.ɵɵngDeclareFactory({
32
+ minVersion: "12.0.0",
33
+ version: "22.2.0",
34
+ ngImport: i0,
35
+ type: Trial4ContactUsModule,
36
+ deps: [],
37
+ target: i0.ɵɵFactoryTarget.NgModule
38
+ });
39
+ }
40
+ static {
41
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
42
+ minVersion: "14.0.0",
43
+ version: "22.2.0",
44
+ ngImport: i0,
45
+ type: Trial4ContactUsModule,
46
+ imports: [Trial4SharedContactUsModule],
47
+ exports: [Trial4SharedContactUsModule]
48
+ });
49
+ }
50
+ static {
51
+ this.ɵinj = i0.ɵɵngDeclareInjector({
52
+ minVersion: "12.0.0",
53
+ version: "22.2.0",
54
+ ngImport: i0,
55
+ type: Trial4ContactUsModule,
56
+ imports: [Trial4SharedContactUsModule, Trial4SharedContactUsModule]
57
+ });
58
+ }
59
+ };
60
+ i0.ɵɵngDeclareClassMetadata({
61
+ minVersion: "12.0.0",
62
+ version: "22.2.0",
63
+ ngImport: i0,
64
+ type: Trial4ContactUsModule,
65
+ decorators: [{
66
+ type: NgModule,
67
+ args: [{
68
+ imports: [Trial4SharedContactUsModule],
69
+ exports: [Trial4SharedContactUsModule]
70
+ }]
71
+ }]
72
+ });
73
+ var ResourceEditCardLazyComponent = class ResourceEditCardLazyComponent {
74
+ constructor(cdr) {
75
+ this.cdr = cdr;
76
+ this.canEdit = false;
77
+ this.updated = new EventEmitter();
78
+ this.componentRef = null;
79
+ this.loading = false;
80
+ }
81
+ async ngOnChanges(changes) {
82
+ if (this.canEdit && !this.componentRef && !this.loading) await this.loadEditCard();
83
+ else if (!this.canEdit && this.componentRef) {
84
+ this.container.clear();
85
+ this.componentRef = null;
86
+ } else if (this.componentRef && (changes["id"] || changes["resourceData"])) {
87
+ this.componentRef.instance.id = this.id;
88
+ this.componentRef.instance.resourceData = this.resourceData;
89
+ }
90
+ }
91
+ async loadEditCard() {
92
+ if (this.componentRef || this.loading) return;
93
+ this.loading = true;
94
+ try {
95
+ const ResourceEditCardComponent = (await import("./posiwise-resource-module.mjs").then((n) => n.t)).ResourceEditCardComponent;
96
+ if (!this.container) return;
97
+ this.container.clear();
98
+ this.componentRef = this.container.createComponent(ResourceEditCardComponent);
99
+ this.componentRef.instance.id = this.id;
100
+ this.componentRef.instance.resourceData = this.resourceData;
101
+ this.componentRef.instance.updated.subscribe(() => {
102
+ this.updated.emit();
103
+ this.cdr.markForCheck();
104
+ });
105
+ this.loading = false;
106
+ } catch (error) {
107
+ console.error("Failed to load ResourceEditCard:", error);
108
+ this.loading = false;
109
+ }
110
+ }
111
+ ngOnDestroy() {
112
+ this.componentRef?.destroy();
113
+ }
114
+ static {
115
+ this.ɵfac = i0.ɵɵngDeclareFactory({
116
+ minVersion: "12.0.0",
117
+ version: "22.2.0",
118
+ ngImport: i0,
119
+ type: ResourceEditCardLazyComponent,
120
+ deps: [{ token: i0.ChangeDetectorRef }],
121
+ target: i0.ɵɵFactoryTarget.Component
122
+ });
123
+ }
124
+ static {
125
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
126
+ minVersion: "14.0.0",
127
+ version: "22.2.0",
128
+ type: ResourceEditCardLazyComponent,
129
+ isStandalone: false,
130
+ selector: "pw-resource-edit-card-lazy",
131
+ inputs: {
132
+ id: "id",
133
+ resourceData: "resourceData",
134
+ canEdit: "canEdit"
135
+ },
136
+ outputs: { updated: "updated" },
137
+ viewQueries: [{
138
+ propertyName: "container",
139
+ first: true,
140
+ predicate: ["editCardContainer"],
141
+ descendants: true,
142
+ read: ViewContainerRef,
143
+ static: true
144
+ }],
145
+ usesOnChanges: true,
146
+ ngImport: i0,
147
+ template: `<ng-container #editCardContainer></ng-container>`,
148
+ isInline: true,
149
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
150
+ });
151
+ }
152
+ };
153
+ i0.ɵɵngDeclareClassMetadata({
154
+ minVersion: "12.0.0",
155
+ version: "22.2.0",
156
+ ngImport: i0,
157
+ type: ResourceEditCardLazyComponent,
158
+ decorators: [{
159
+ type: Component,
160
+ args: [{
161
+ selector: "pw-resource-edit-card-lazy",
162
+ template: `<ng-container #editCardContainer></ng-container>`,
163
+ changeDetection: ChangeDetectionStrategy.OnPush,
164
+ standalone: false
165
+ }]
166
+ }],
167
+ ctorParameters: () => [{ type: i0.ChangeDetectorRef }],
168
+ propDecorators: {
169
+ container: [{
170
+ type: ViewChild,
171
+ args: ["editCardContainer", {
172
+ read: ViewContainerRef,
173
+ static: true
174
+ }]
175
+ }],
176
+ id: [{ type: Input }],
177
+ resourceData: [{ type: Input }],
178
+ canEdit: [{ type: Input }],
179
+ updated: [{ type: Output }]
180
+ }
181
+ });
182
+ var ResourceNoteCardComponent = class ResourceNoteCardComponent extends AppBaseComponent {
183
+ constructor(injector, resourceService, tagService, cdr) {
184
+ super(injector);
185
+ this.resourceService = resourceService;
186
+ this.tagService = tagService;
187
+ this.cdr = cdr;
188
+ this.releaseHeader = false;
189
+ this.isReleasePress = false;
190
+ this.isResource = false;
191
+ this.postSlice = false;
192
+ this.canEditResourcesValue = false;
193
+ this.isLoaded = false;
194
+ this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
195
+ this.postTags = {};
196
+ this.releasePosts = {};
197
+ }
198
+ ngOnInit() {
199
+ if (this.userLoggedIn) this.localStorage.getItem$("product").subscribe((res) => {
200
+ const data = res ? JSON.parse(res) : null;
201
+ this.subscriptionId = data?.subscriptionId;
202
+ this.cdr.markForCheck();
203
+ });
204
+ this.getTags();
205
+ }
206
+ ngOnChanges(changes) {
207
+ if (changes["user"] || changes["userLoggedIn"]) {
208
+ if (this.userLoggedIn && this.user) this.updateCanEditResourcesValue();
209
+ }
210
+ }
211
+ getTags() {
212
+ this.isLoaded = false;
213
+ this.tagService.getAllTagCategories({ search: "Release Notes" }, this.getEffectiveSubscriptionId()).subscribe((response) => {
214
+ this.tagCategory = response?.tag_categories?.[0];
215
+ this.getPostTags();
216
+ this.cdr.markForCheck();
217
+ });
218
+ }
219
+ getPostTags() {
220
+ this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
221
+ this.postTags["product"] = this.findTag(response.tags, "Product Release Notes", this.tagCategory?.id);
222
+ this.postTags["press"] = this.findTag(response.tags, "Press Release Notes", this.tagCategory?.id);
223
+ if (this.postTags["product"]?.id) this.getProductReleasePosts(1, 100);
224
+ else {
225
+ this.isLoaded = true;
226
+ this.releasePosts["product"] = [];
227
+ }
228
+ if (this.postTags["press"]?.id) this.getPressReleasePosts(1, 100);
229
+ else {
230
+ this.isLoaded = true;
231
+ this.releasePosts["press"] = [];
232
+ }
233
+ this.cdr.markForCheck();
234
+ });
235
+ }
236
+ findTag(tags, name, categoryId) {
237
+ return tags.find((tag) => tag.name === name && tag.tag_category_id === categoryId);
238
+ }
239
+ hasPressReleases() {
240
+ return this.releasePosts["press"]?.length !== 0 && this.isLoaded;
241
+ }
242
+ hasProductReleases() {
243
+ return this.releasePosts["product"]?.length !== 0 && this.isLoaded;
244
+ }
245
+ getProductReleasePosts(page, pageSize) {
246
+ this.isLoaded = false;
247
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", "", this.postTags["product"]?.id).subscribe((response) => {
248
+ const sortedPosts = response.posts.filter((post) => post.showcase === true).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
249
+ this.releasePosts["product"] = this.getProcessedPosts(sortedPosts);
250
+ this.cdr.markForCheck();
251
+ }).add(() => {
252
+ this.isLoaded = true;
253
+ this.cdr.markForCheck();
254
+ });
255
+ }
256
+ getPressReleasePosts(page, pageSize) {
257
+ this.isLoaded = false;
258
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", "", this.postTags["press"]?.id).subscribe((response) => {
259
+ const sortedPosts = response?.posts.filter((post) => post.showcase === true).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
260
+ this.releasePosts["press"] = this.getProcessedPosts(sortedPosts);
261
+ this.cdr.markForCheck();
262
+ }).add(() => {
263
+ this.isLoaded = true;
264
+ this.cdr.markForCheck();
265
+ });
266
+ }
267
+ getProcessedPosts(posts, sliceCount = 3) {
268
+ const cloned = [...posts];
269
+ return this.postSlice ? cloned.reverse() : cloned.slice(0, sliceCount).reverse();
270
+ }
271
+ toggleEditTitle() {
272
+ this.isEditingTitle = true;
273
+ this.editedTitle = this.postTags["product"].title;
274
+ }
275
+ toggleEditPressTitle() {
276
+ this.isPressEditingTitle = true;
277
+ this.editedTitle = this.postTags["press"].title;
278
+ }
279
+ saveEditedTitle(type) {
280
+ HelperService.updateTagTitle(this.postTags[type], this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
281
+ this.postTags[type].title = this.editedTitle;
282
+ if (type === "product") this.isEditingTitle = false;
283
+ else this.isPressEditingTitle = false;
284
+ this.cdr.markForCheck();
285
+ });
286
+ }
287
+ getEffectiveSubscriptionId() {
288
+ return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
289
+ }
290
+ updateCanEditResourcesValue() {
291
+ this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
292
+ }
293
+ canEditResources() {
294
+ return this.canEditResourcesValue;
295
+ }
296
+ static {
297
+ this.ɵfac = i0.ɵɵngDeclareFactory({
298
+ minVersion: "12.0.0",
299
+ version: "22.2.0",
300
+ ngImport: i0,
301
+ type: ResourceNoteCardComponent,
302
+ deps: [
303
+ { token: i0.Injector },
304
+ { token: ResourceService },
305
+ { token: i2.TagService },
306
+ { token: i0.ChangeDetectorRef }
307
+ ],
308
+ target: i0.ɵɵFactoryTarget.Component
309
+ });
310
+ }
311
+ static {
312
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
313
+ minVersion: "17.0.0",
314
+ version: "22.2.0",
315
+ type: ResourceNoteCardComponent,
316
+ isStandalone: false,
317
+ selector: "pw-resource-note-card",
318
+ inputs: {
319
+ releaseHeader: "releaseHeader",
320
+ categoryId: "categoryId",
321
+ isReleasePress: "isReleasePress",
322
+ isResource: "isResource",
323
+ postSlice: "postSlice",
324
+ resourceTitle: "resourceTitle",
325
+ tag: "tag",
326
+ user: "user",
327
+ userLoggedIn: "userLoggedIn"
328
+ },
329
+ usesInheritance: true,
330
+ usesOnChanges: true,
331
+ ngImport: i0,
332
+ template: "@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",
333
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"],
334
+ dependencies: [
335
+ {
336
+ kind: "directive",
337
+ type: i3.NgClass,
338
+ selector: "[ngClass]",
339
+ inputs: ["class", "ngClass"]
340
+ },
341
+ {
342
+ kind: "directive",
343
+ type: i4.RouterLink,
344
+ selector: "[routerLink]",
345
+ inputs: [
346
+ "target",
347
+ "queryParams",
348
+ "fragment",
349
+ "queryParamsHandling",
350
+ "state",
351
+ "info",
352
+ "relativeTo",
353
+ "preserveFragment",
354
+ "skipLocationChange",
355
+ "replaceUrl",
356
+ "browserUrl",
357
+ "routerLink"
358
+ ]
359
+ },
360
+ {
361
+ kind: "directive",
362
+ type: i5.DefaultValueAccessor,
363
+ selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
364
+ },
365
+ {
366
+ kind: "directive",
367
+ type: i5.NgControlStatus,
368
+ selector: "[formControlName],[ngModel],[formControl]"
369
+ },
370
+ {
371
+ kind: "directive",
372
+ type: i5.NgModel,
373
+ selector: "[ngModel]:not([formControlName]):not([formControl])",
374
+ inputs: [
375
+ "name",
376
+ "disabled",
377
+ "ngModel",
378
+ "ngModelOptions"
379
+ ],
380
+ outputs: ["ngModelChange"],
381
+ exportAs: ["ngModel"]
382
+ },
383
+ {
384
+ kind: "component",
385
+ type: i6.NoDataComponent,
386
+ selector: "pw-no-data",
387
+ inputs: [
388
+ "message",
389
+ "description",
390
+ "withImage"
391
+ ]
392
+ },
393
+ {
394
+ kind: "component",
395
+ type: i7.ProgressSpinner,
396
+ selector: "p-progress-spinner, p-progressspinner",
397
+ inputs: [
398
+ "value",
399
+ "strokeWidth",
400
+ "animationDuration",
401
+ "min",
402
+ "max",
403
+ "ariaLabel",
404
+ "fill"
405
+ ]
406
+ },
407
+ {
408
+ kind: "directive",
409
+ type: i8.LazyImgDirective,
410
+ selector: "img"
411
+ },
412
+ {
413
+ kind: "component",
414
+ type: ResourceEditCardLazyComponent,
415
+ selector: "pw-resource-edit-card-lazy",
416
+ inputs: [
417
+ "id",
418
+ "resourceData",
419
+ "canEdit"
420
+ ],
421
+ outputs: ["updated"]
422
+ },
423
+ {
424
+ kind: "pipe",
425
+ type: i10.TranslocoPipe,
426
+ name: "transloco"
427
+ }
428
+ ],
429
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
430
+ });
431
+ }
432
+ };
433
+ i0.ɵɵngDeclareClassMetadata({
434
+ minVersion: "12.0.0",
435
+ version: "22.2.0",
436
+ ngImport: i0,
437
+ type: ResourceNoteCardComponent,
438
+ decorators: [{
439
+ type: Component,
440
+ args: [{
441
+ selector: "pw-resource-note-card",
442
+ changeDetection: ChangeDetectionStrategy.OnPush,
443
+ standalone: false,
444
+ template: "@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",
445
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"]
446
+ }]
447
+ }],
448
+ ctorParameters: () => [
449
+ { type: i0.Injector },
450
+ { type: ResourceService },
451
+ { type: i2.TagService },
452
+ { type: i0.ChangeDetectorRef }
453
+ ],
454
+ propDecorators: {
455
+ releaseHeader: [{ type: Input }],
456
+ categoryId: [{ type: Input }],
457
+ isReleasePress: [{ type: Input }],
458
+ isResource: [{ type: Input }],
459
+ postSlice: [{ type: Input }],
460
+ resourceTitle: [{ type: Input }],
461
+ tag: [{ type: Input }],
462
+ user: [{ type: Input }],
463
+ userLoggedIn: [{ type: Input }]
464
+ }
465
+ });
466
+ var CaseStudyCardComponent = class CaseStudyCardComponent extends AppBaseComponent {
467
+ constructor(injector, resourceService, tagService, cdr) {
468
+ super(injector);
469
+ this.resourceService = resourceService;
470
+ this.tagService = tagService;
471
+ this.cdr = cdr;
472
+ this.showCaseStudyHeader = false;
473
+ this.postSlice = false;
474
+ this.canEditResourcesValue = false;
475
+ this.isLoaded = false;
476
+ this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
477
+ this.companyName = this.appConfig.company.name;
478
+ this.posts = [];
479
+ this.isEditingTitle = false;
480
+ }
481
+ ngOnInit() {
482
+ if (this.userLoggedIn) this.localStorage.getItem$("product").subscribe((res) => {
483
+ const data = res ? JSON.parse(res) : null;
484
+ this.subscriptionId = data?.subscriptionId;
485
+ this.cdr.markForCheck();
486
+ });
487
+ this.getPosts(1, 10);
488
+ }
489
+ ngOnChanges(changes) {
490
+ if (changes["user"] || changes["userLoggedIn"]) {
491
+ if (this.userLoggedIn && this.user) this.updateCanEditResourcesValue();
492
+ }
493
+ }
494
+ getPosts(page, pageSize) {
495
+ this.isLoaded = false;
496
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId).subscribe((response) => {
497
+ const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
498
+ this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);
499
+ this.cdr.markForCheck();
500
+ }).add(() => {
501
+ this.isLoaded = true;
502
+ this.cdr.markForCheck();
503
+ });
504
+ }
505
+ toggleEditTitle() {
506
+ this.isEditingTitle = true;
507
+ this.editedTitle = this.resourceTitle;
508
+ }
509
+ saveEditedTitle() {
510
+ HelperService.updateTagTitle(this.tag, this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
511
+ this.resourceTitle = this.editedTitle;
512
+ this.isEditingTitle = false;
513
+ this.cdr.markForCheck();
514
+ });
515
+ }
516
+ getEffectiveSubscriptionId() {
517
+ return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
518
+ }
519
+ updateCanEditResourcesValue() {
520
+ this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
521
+ }
522
+ canEditResources() {
523
+ return this.canEditResourcesValue;
524
+ }
525
+ trackByPostId(index, post) {
526
+ return post.id;
527
+ }
528
+ static {
529
+ this.ɵfac = i0.ɵɵngDeclareFactory({
530
+ minVersion: "12.0.0",
531
+ version: "22.2.0",
532
+ ngImport: i0,
533
+ type: CaseStudyCardComponent,
534
+ deps: [
535
+ { token: i0.Injector },
536
+ { token: ResourceService },
537
+ { token: i2.TagService },
538
+ { token: i0.ChangeDetectorRef }
539
+ ],
540
+ target: i0.ɵɵFactoryTarget.Component
541
+ });
542
+ }
543
+ static {
544
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
545
+ minVersion: "17.0.0",
546
+ version: "22.2.0",
547
+ type: CaseStudyCardComponent,
548
+ isStandalone: false,
549
+ selector: "pw-case-studies-card",
550
+ inputs: {
551
+ showCaseStudyHeader: "showCaseStudyHeader",
552
+ categoryId: "categoryId",
553
+ postSlice: "postSlice",
554
+ tag: "tag",
555
+ resourceTitle: "resourceTitle",
556
+ user: "user",
557
+ userLoggedIn: "userLoggedIn"
558
+ },
559
+ usesInheritance: true,
560
+ usesOnChanges: true,
561
+ ngImport: i0,
562
+ template: "<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",
563
+ styles: [".resource-vault-section{background:#fff;text-align:center;padding:3rem 0}.section-outer,.container{padding:0 15px}.d-md-flex{display:flex}.justify-content-between{justify-content:space-between}.align-items-start{align-items:flex-start}.vault-heading{font-size:2rem;font-weight:700}.video-row{margin-top:3rem;gap:5.5rem!important}.row{display:flex;flex-wrap:wrap}.col-md-6,.col-lg-4{flex:0 0 auto;width:100%}@media(width>=768px){.col-md-6,.col-lg-4{width:50%}}@media(width>=992px){.col-md-6,.col-lg-4{width:33.3333%}}.mb-4{margin-bottom:1.5rem}.testimonial-box{display:flex;flex-direction:column;justify-content:space-between;background:#fff;color:#000;border-radius:20px;box-shadow:0 0 20px #0000001a;text-align:center;width:338px;height:auto;padding:2.5rem 1.5rem;font-size:1.1rem;min-height:421.4px!important}.testimonial-box .testimonial-section{font-size:1.5rem;line-height:2rem;font-weight:400;color:var(--text-color, black)}.testimonial-box .testimonial-section strong{display:block}.testimonial-box .company-logo{width:100%!important;height:auto!important;max-width:150px!important;object-fit:contain;align-self:center}.testimonial-box .avatar-container{margin-top:auto;position:relative;display:inline-block}.testimonial-box .avatar-container .testimonial-avatar{width:60%;aspect-ratio:1/1;height:auto;border-radius:50%;object-fit:fill}.testimonial-box .avatar-container .read-more-btn-overlay{position:absolute;text-decoration:none!important;bottom:0;left:50%;transform:translate(-50%);background-color:var(--text-color, black);color:#fff;width:240px;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-items:center;text-align:left;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.testimonial-box .avatar-container .read-more-btn-overlay:hover{background:#fff;color:var(--text-color, black)!important}.testimonial-box .avatar-container .read-more-btn-overlay .arrow{margin-bottom:.3rem}\n"],
564
+ dependencies: [
565
+ {
566
+ kind: "directive",
567
+ type: i3.NgClass,
568
+ selector: "[ngClass]",
569
+ inputs: ["class", "ngClass"]
570
+ },
571
+ {
572
+ kind: "directive",
573
+ type: i3.NgTemplateOutlet,
574
+ selector: "[ngTemplateOutlet]",
575
+ inputs: [
576
+ "ngTemplateOutletContext",
577
+ "ngTemplateOutlet",
578
+ "ngTemplateOutletInjector"
579
+ ]
580
+ },
581
+ {
582
+ kind: "directive",
583
+ type: i4.RouterLink,
584
+ selector: "[routerLink]",
585
+ inputs: [
586
+ "target",
587
+ "queryParams",
588
+ "fragment",
589
+ "queryParamsHandling",
590
+ "state",
591
+ "info",
592
+ "relativeTo",
593
+ "preserveFragment",
594
+ "skipLocationChange",
595
+ "replaceUrl",
596
+ "browserUrl",
597
+ "routerLink"
598
+ ]
599
+ },
600
+ {
601
+ kind: "directive",
602
+ type: i5.DefaultValueAccessor,
603
+ selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
604
+ },
605
+ {
606
+ kind: "directive",
607
+ type: i5.NgControlStatus,
608
+ selector: "[formControlName],[ngModel],[formControl]"
609
+ },
610
+ {
611
+ kind: "directive",
612
+ type: i5.NgModel,
613
+ selector: "[ngModel]:not([formControlName]):not([formControl])",
614
+ inputs: [
615
+ "name",
616
+ "disabled",
617
+ "ngModel",
618
+ "ngModelOptions"
619
+ ],
620
+ outputs: ["ngModelChange"],
621
+ exportAs: ["ngModel"]
622
+ },
623
+ {
624
+ kind: "component",
625
+ type: i6.NoDataComponent,
626
+ selector: "pw-no-data",
627
+ inputs: [
628
+ "message",
629
+ "description",
630
+ "withImage"
631
+ ]
632
+ },
633
+ {
634
+ kind: "component",
635
+ type: i7.ProgressSpinner,
636
+ selector: "p-progress-spinner, p-progressspinner",
637
+ inputs: [
638
+ "value",
639
+ "strokeWidth",
640
+ "animationDuration",
641
+ "min",
642
+ "max",
643
+ "ariaLabel",
644
+ "fill"
645
+ ]
646
+ },
647
+ {
648
+ kind: "directive",
649
+ type: i8.LazyImgDirective,
650
+ selector: "img"
651
+ },
652
+ {
653
+ kind: "component",
654
+ type: ResourceEditCardLazyComponent,
655
+ selector: "pw-resource-edit-card-lazy",
656
+ inputs: [
657
+ "id",
658
+ "resourceData",
659
+ "canEdit"
660
+ ],
661
+ outputs: ["updated"]
662
+ },
663
+ {
664
+ kind: "pipe",
665
+ type: i10.TranslocoPipe,
666
+ name: "transloco"
667
+ }
668
+ ],
669
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
670
+ });
671
+ }
672
+ };
673
+ i0.ɵɵngDeclareClassMetadata({
674
+ minVersion: "12.0.0",
675
+ version: "22.2.0",
676
+ ngImport: i0,
677
+ type: CaseStudyCardComponent,
678
+ decorators: [{
679
+ type: Component,
680
+ args: [{
681
+ selector: "pw-case-studies-card",
682
+ changeDetection: ChangeDetectionStrategy.OnPush,
683
+ standalone: false,
684
+ template: "<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",
685
+ styles: [".resource-vault-section{background:#fff;text-align:center;padding:3rem 0}.section-outer,.container{padding:0 15px}.d-md-flex{display:flex}.justify-content-between{justify-content:space-between}.align-items-start{align-items:flex-start}.vault-heading{font-size:2rem;font-weight:700}.video-row{margin-top:3rem;gap:5.5rem!important}.row{display:flex;flex-wrap:wrap}.col-md-6,.col-lg-4{flex:0 0 auto;width:100%}@media(width>=768px){.col-md-6,.col-lg-4{width:50%}}@media(width>=992px){.col-md-6,.col-lg-4{width:33.3333%}}.mb-4{margin-bottom:1.5rem}.testimonial-box{display:flex;flex-direction:column;justify-content:space-between;background:#fff;color:#000;border-radius:20px;box-shadow:0 0 20px #0000001a;text-align:center;width:338px;height:auto;padding:2.5rem 1.5rem;font-size:1.1rem;min-height:421.4px!important}.testimonial-box .testimonial-section{font-size:1.5rem;line-height:2rem;font-weight:400;color:var(--text-color, black)}.testimonial-box .testimonial-section strong{display:block}.testimonial-box .company-logo{width:100%!important;height:auto!important;max-width:150px!important;object-fit:contain;align-self:center}.testimonial-box .avatar-container{margin-top:auto;position:relative;display:inline-block}.testimonial-box .avatar-container .testimonial-avatar{width:60%;aspect-ratio:1/1;height:auto;border-radius:50%;object-fit:fill}.testimonial-box .avatar-container .read-more-btn-overlay{position:absolute;text-decoration:none!important;bottom:0;left:50%;transform:translate(-50%);background-color:var(--text-color, black);color:#fff;width:240px;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-items:center;text-align:left;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.testimonial-box .avatar-container .read-more-btn-overlay:hover{background:#fff;color:var(--text-color, black)!important}.testimonial-box .avatar-container .read-more-btn-overlay .arrow{margin-bottom:.3rem}\n"]
686
+ }]
687
+ }],
688
+ ctorParameters: () => [
689
+ { type: i0.Injector },
690
+ { type: ResourceService },
691
+ { type: i2.TagService },
692
+ { type: i0.ChangeDetectorRef }
693
+ ],
694
+ propDecorators: {
695
+ showCaseStudyHeader: [{ type: Input }],
696
+ categoryId: [{ type: Input }],
697
+ postSlice: [{ type: Input }],
698
+ tag: [{ type: Input }],
699
+ resourceTitle: [{ type: Input }],
700
+ user: [{ type: Input }],
701
+ userLoggedIn: [{ type: Input }]
702
+ }
703
+ });
704
+ var ResourceCardComponent = class ResourceCardComponent extends AppBaseComponent {
705
+ constructor(injector, resourceService, tagService, cdr) {
706
+ super(injector);
707
+ this.resourceService = resourceService;
708
+ this.tagService = tagService;
709
+ this.cdr = cdr;
710
+ this.isHeaderVisible = true;
711
+ this.isRelated = false;
712
+ this.postSlice = false;
713
+ this.isLoaded = false;
714
+ this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
715
+ this.posts = [];
716
+ this.canEditResourcesValue = false;
717
+ }
718
+ ngOnInit() {
719
+ if (this.userLoggedIn) this.localStorage.getItem$("product").subscribe((res) => {
720
+ const data = res ? JSON.parse(res) : null;
721
+ this.subscriptionId = data?.subscriptionId;
722
+ this.cdr.markForCheck();
723
+ });
724
+ this.getPosts(1, 10);
725
+ }
726
+ ngOnChanges(changes) {
727
+ if (changes["user"] || changes["userLoggedIn"]) {
728
+ if (this.userLoggedIn && this.user) this.updateCanEditResourcesValue();
729
+ }
730
+ }
731
+ getPosts(page, pageSize) {
732
+ this.isLoaded = false;
733
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId).subscribe((response) => {
734
+ const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
735
+ this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);
736
+ this.cdr.markForCheck();
737
+ }).add(() => {
738
+ this.isLoaded = true;
739
+ this.cdr.markForCheck();
740
+ });
741
+ }
742
+ toggleTagEditTitle() {
743
+ this.isEditingTitle = true;
744
+ this.editedTitle = this.resourceTitle;
745
+ }
746
+ saveEditedTitle() {
747
+ HelperService.updateTagTitle(this.tag, this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
748
+ this.resourceTitle = this.editedTitle;
749
+ this.isEditingTitle = false;
750
+ this.cdr.markForCheck();
751
+ });
752
+ }
753
+ getEffectiveSubscriptionId() {
754
+ return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
755
+ }
756
+ updateCanEditResourcesValue() {
757
+ this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
758
+ }
759
+ canEditResources() {
760
+ return this.canEditResourcesValue;
761
+ }
762
+ static {
763
+ this.ɵfac = i0.ɵɵngDeclareFactory({
764
+ minVersion: "12.0.0",
765
+ version: "22.2.0",
766
+ ngImport: i0,
767
+ type: ResourceCardComponent,
768
+ deps: [
769
+ { token: i0.Injector },
770
+ { token: ResourceService },
771
+ { token: i2.TagService },
772
+ { token: i0.ChangeDetectorRef }
773
+ ],
774
+ target: i0.ɵɵFactoryTarget.Component
775
+ });
776
+ }
777
+ static {
778
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
779
+ minVersion: "17.0.0",
780
+ version: "22.2.0",
781
+ type: ResourceCardComponent,
782
+ isStandalone: false,
783
+ selector: "pw-resource-cards",
784
+ inputs: {
785
+ categoryId: "categoryId",
786
+ isHeaderVisible: "isHeaderVisible",
787
+ isRelated: "isRelated",
788
+ resourceTitle: "resourceTitle",
789
+ postSlice: "postSlice",
790
+ header: "header",
791
+ tag: "tag",
792
+ resourceLink: "resourceLink",
793
+ user: "user",
794
+ userLoggedIn: "userLoggedIn"
795
+ },
796
+ usesInheritance: true,
797
+ usesOnChanges: true,
798
+ ngImport: i0,
799
+ template: "<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>",
800
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"],
801
+ dependencies: [
802
+ {
803
+ kind: "directive",
804
+ type: i3.NgClass,
805
+ selector: "[ngClass]",
806
+ inputs: ["class", "ngClass"]
807
+ },
808
+ {
809
+ kind: "directive",
810
+ type: i4.RouterLink,
811
+ selector: "[routerLink]",
812
+ inputs: [
813
+ "target",
814
+ "queryParams",
815
+ "fragment",
816
+ "queryParamsHandling",
817
+ "state",
818
+ "info",
819
+ "relativeTo",
820
+ "preserveFragment",
821
+ "skipLocationChange",
822
+ "replaceUrl",
823
+ "browserUrl",
824
+ "routerLink"
825
+ ]
826
+ },
827
+ {
828
+ kind: "directive",
829
+ type: i5.DefaultValueAccessor,
830
+ selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
831
+ },
832
+ {
833
+ kind: "directive",
834
+ type: i5.NgControlStatus,
835
+ selector: "[formControlName],[ngModel],[formControl]"
836
+ },
837
+ {
838
+ kind: "directive",
839
+ type: i5.NgModel,
840
+ selector: "[ngModel]:not([formControlName]):not([formControl])",
841
+ inputs: [
842
+ "name",
843
+ "disabled",
844
+ "ngModel",
845
+ "ngModelOptions"
846
+ ],
847
+ outputs: ["ngModelChange"],
848
+ exportAs: ["ngModel"]
849
+ },
850
+ {
851
+ kind: "component",
852
+ type: i6.NoDataComponent,
853
+ selector: "pw-no-data",
854
+ inputs: [
855
+ "message",
856
+ "description",
857
+ "withImage"
858
+ ]
859
+ },
860
+ {
861
+ kind: "component",
862
+ type: i7.ProgressSpinner,
863
+ selector: "p-progress-spinner, p-progressspinner",
864
+ inputs: [
865
+ "value",
866
+ "strokeWidth",
867
+ "animationDuration",
868
+ "min",
869
+ "max",
870
+ "ariaLabel",
871
+ "fill"
872
+ ]
873
+ },
874
+ {
875
+ kind: "directive",
876
+ type: i8.LazyImgDirective,
877
+ selector: "img"
878
+ },
879
+ {
880
+ kind: "component",
881
+ type: ResourceEditCardLazyComponent,
882
+ selector: "pw-resource-edit-card-lazy",
883
+ inputs: [
884
+ "id",
885
+ "resourceData",
886
+ "canEdit"
887
+ ],
888
+ outputs: ["updated"]
889
+ },
890
+ {
891
+ kind: "pipe",
892
+ type: i10.TranslocoPipe,
893
+ name: "transloco"
894
+ }
895
+ ],
896
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
897
+ });
898
+ }
899
+ };
900
+ i0.ɵɵngDeclareClassMetadata({
901
+ minVersion: "12.0.0",
902
+ version: "22.2.0",
903
+ ngImport: i0,
904
+ type: ResourceCardComponent,
905
+ decorators: [{
906
+ type: Component,
907
+ args: [{
908
+ selector: "pw-resource-cards",
909
+ changeDetection: ChangeDetectionStrategy.OnPush,
910
+ standalone: false,
911
+ template: "<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>",
912
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"]
913
+ }]
914
+ }],
915
+ ctorParameters: () => [
916
+ { type: i0.Injector },
917
+ { type: ResourceService },
918
+ { type: i2.TagService },
919
+ { type: i0.ChangeDetectorRef }
920
+ ],
921
+ propDecorators: {
922
+ categoryId: [{ type: Input }],
923
+ isHeaderVisible: [{ type: Input }],
924
+ isRelated: [{ type: Input }],
925
+ resourceTitle: [{ type: Input }],
926
+ postSlice: [{ type: Input }],
927
+ header: [{ type: Input }],
928
+ tag: [{ type: Input }],
929
+ resourceLink: [{ type: Input }],
930
+ user: [{ type: Input }],
931
+ userLoggedIn: [{ type: Input }]
932
+ }
933
+ });
934
+ var BaseResourceComponent = class BaseResourceComponent extends AppBaseComponent {
935
+ constructor(resourceService, tagService, authService, cdr, injector) {
936
+ super(injector);
937
+ this.resourceService = resourceService;
938
+ this.tagService = tagService;
939
+ this.authService = authService;
940
+ this.cdr = cdr;
941
+ this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
942
+ this.posts = [];
943
+ this.testimonialsPosts = [];
944
+ this.isLoaded = false;
945
+ this.canEditResourcesValue = false;
946
+ }
947
+ ngOnInit() {
948
+ this.getUserSubscriptionId().subscribe((response) => {
949
+ this.subscriptionId = response;
950
+ this.cdr.markForCheck();
951
+ });
952
+ this.authService.getToken$().subscribe((res) => {
953
+ this.userLoggedIn = !!res;
954
+ if (this.userLoggedIn) {
955
+ this.localStorage.getItem$("product").subscribe((res) => {
956
+ const data = res ? JSON.parse(res) : null;
957
+ this.subscriptionId = data?.subscriptionId;
958
+ this.cdr.markForCheck();
959
+ });
960
+ this.userService.getUserInfo().subscribe((data) => {
961
+ this.user = data;
962
+ this.updateCanEditResourcesValue();
963
+ this.initializeComponent();
964
+ this.cdr.markForCheck();
965
+ });
966
+ } else this.initializeComponent();
967
+ this.cdr.markForCheck();
968
+ });
969
+ }
970
+ initializeComponent() {
971
+ if (this.shouldUseTagCategories()) this.getTags();
972
+ else this.getPostTags();
973
+ if (this.shouldLoadTestimonials()) this.getTestimonialTags();
974
+ }
975
+ getTags() {
976
+ this.isLoaded = false;
977
+ forkJoin({
978
+ categories: this.tagService.getAllTagCategories({ search: this.getSearchTerm() }, this.getEffectiveSubscriptionId()),
979
+ tags: this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId())
980
+ }).subscribe(({ categories, tags }) => {
981
+ this.tagCategory = categories?.tag_categories?.[0];
982
+ this.blogPostTag = tags.tags.find((tag) => tag.tag_category_id === this.tagCategory?.id);
983
+ this.getPosts(1, 100);
984
+ this.cdr.markForCheck();
985
+ }).add(() => {
986
+ this.isLoaded = true;
987
+ this.cdr.markForCheck();
988
+ });
989
+ }
990
+ getPostTags() {
991
+ this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
992
+ this.blogPostTag = response.tags.find((tag) => tag.name === this.getResourceType());
993
+ this.getPosts(1, 100);
994
+ this.cdr.markForCheck();
995
+ }).add(() => {
996
+ this.isLoaded = true;
997
+ this.cdr.markForCheck();
998
+ });
999
+ }
1000
+ getTestimonialTags() {
1001
+ this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
1002
+ this.blogTestimonialsPostTag = response.tags.find((tag) => tag.name === "Testimonials");
1003
+ this.getTestimonialsPosts(1, 100);
1004
+ this.cdr.markForCheck();
1005
+ });
1006
+ }
1007
+ getPosts(page, pageSize) {
1008
+ this.fetchPosts(page, pageSize, this.blogPostTag?.tag_category_id, "posts");
1009
+ }
1010
+ getTestimonialsPosts(page, pageSize) {
1011
+ this.fetchPosts(page, pageSize, this.blogTestimonialsPostTag?.tag_category_id, "testimonialsPosts");
1012
+ }
1013
+ fetchPosts(page, pageSize, tagCategoryId, targetProperty) {
1014
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", tagCategoryId).subscribe((response) => {
1015
+ const filteredPosts = response.posts.filter((post) => post.tags?.some((tag) => tag.tag_category_id === tagCategoryId)).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime()).slice(0, 12);
1016
+ if (targetProperty === "posts") this.posts = filteredPosts;
1017
+ else this.testimonialsPosts = filteredPosts;
1018
+ this.cdr.markForCheck();
1019
+ });
1020
+ }
1021
+ getEffectiveSubscriptionId() {
1022
+ return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
1023
+ }
1024
+ getSearchTerm() {
1025
+ return this.getResourceType();
1026
+ }
1027
+ shouldUseTagCategories() {
1028
+ return false;
1029
+ }
1030
+ shouldLoadTestimonials() {
1031
+ return false;
1032
+ }
1033
+ updateCanEditResourcesValue() {
1034
+ if (this.userLoggedIn && this.user) this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
1035
+ else this.canEditResourcesValue = false;
1036
+ }
1037
+ canEditResources() {
1038
+ return this.canEditResourcesValue;
1039
+ }
1040
+ static {
1041
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1042
+ minVersion: "12.0.0",
1043
+ version: "22.2.0",
1044
+ ngImport: i0,
1045
+ type: BaseResourceComponent,
1046
+ deps: [
1047
+ { token: ResourceService },
1048
+ { token: i2.TagService },
1049
+ { token: i2.AuthService },
1050
+ { token: i0.ChangeDetectorRef },
1051
+ { token: i0.Injector }
1052
+ ],
1053
+ target: i0.ɵɵFactoryTarget.Component
1054
+ });
1055
+ }
1056
+ static {
1057
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
1058
+ minVersion: "14.0.0",
1059
+ version: "22.2.0",
1060
+ type: BaseResourceComponent,
1061
+ isStandalone: false,
1062
+ selector: "ng-component",
1063
+ usesInheritance: true,
1064
+ ngImport: i0,
1065
+ template: "",
1066
+ isInline: true,
1067
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1068
+ });
1069
+ }
1070
+ };
1071
+ i0.ɵɵngDeclareClassMetadata({
1072
+ minVersion: "12.0.0",
1073
+ version: "22.2.0",
1074
+ ngImport: i0,
1075
+ type: BaseResourceComponent,
1076
+ decorators: [{
1077
+ type: Component,
1078
+ args: [{
1079
+ template: "",
1080
+ changeDetection: ChangeDetectionStrategy.OnPush,
1081
+ standalone: false
1082
+ }]
1083
+ }],
1084
+ ctorParameters: () => [
1085
+ { type: ResourceService },
1086
+ { type: i2.TagService },
1087
+ { type: i2.AuthService },
1088
+ { type: i0.ChangeDetectorRef },
1089
+ { type: i0.Injector }
1090
+ ]
1091
+ });
1092
+ var ResourceVaultComponent = class ResourceVaultComponent extends BaseResourceComponent {
1093
+ constructor(resourceService, tagService, authService, cdr, injector) {
1094
+ super(resourceService, tagService, authService, cdr, injector);
1095
+ this.showVaultSection = false;
1096
+ this.postSlice = false;
1097
+ this.isLoadedChange = new EventEmitter();
1098
+ this.isEditingTitle = false;
1099
+ }
1100
+ ngOnInit() {
1101
+ super.ngOnInit();
1102
+ this.getPosts(1, 10);
1103
+ }
1104
+ getResourceType() {
1105
+ return "Vault";
1106
+ }
1107
+ getPosts(page, pageSize) {
1108
+ this.isLoaded = false;
1109
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId).subscribe((response) => {
1110
+ const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
1111
+ this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);
1112
+ this.cdr.markForCheck();
1113
+ }).add(() => {
1114
+ this.isLoaded = true;
1115
+ this.isLoadedChange.emit(this.isLoaded);
1116
+ this.cdr.markForCheck();
1117
+ });
1118
+ }
1119
+ toggleEditTitle() {
1120
+ this.isEditingTitle = true;
1121
+ this.editedTitle = this.resourceTitle;
1122
+ }
1123
+ saveEditedTitle() {
1124
+ HelperService.updateTagTitle(this.tag, this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
1125
+ this.resourceTitle = this.editedTitle;
1126
+ this.isEditingTitle = false;
1127
+ this.cdr.markForCheck();
1128
+ });
1129
+ }
1130
+ static {
1131
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1132
+ minVersion: "12.0.0",
1133
+ version: "22.2.0",
1134
+ ngImport: i0,
1135
+ type: ResourceVaultComponent,
1136
+ deps: [
1137
+ { token: ResourceService },
1138
+ { token: i2.TagService },
1139
+ { token: i2.AuthService },
1140
+ { token: i0.ChangeDetectorRef },
1141
+ { token: i0.Injector }
1142
+ ],
1143
+ target: i0.ɵɵFactoryTarget.Component
1144
+ });
1145
+ }
1146
+ static {
1147
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
1148
+ minVersion: "17.0.0",
1149
+ version: "22.2.0",
1150
+ type: ResourceVaultComponent,
1151
+ isStandalone: false,
1152
+ selector: "pw-resource--vault",
1153
+ inputs: {
1154
+ showVaultSection: "showVaultSection",
1155
+ postSlice: "postSlice",
1156
+ categoryId: "categoryId",
1157
+ resourceTitle: "resourceTitle",
1158
+ tag: "tag"
1159
+ },
1160
+ outputs: { isLoadedChange: "isLoadedChange" },
1161
+ usesInheritance: true,
1162
+ ngImport: i0,
1163
+ template: "<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 &amp; 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",
1164
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"],
1165
+ dependencies: [
1166
+ {
1167
+ kind: "directive",
1168
+ type: i3.NgClass,
1169
+ selector: "[ngClass]",
1170
+ inputs: ["class", "ngClass"]
1171
+ },
1172
+ {
1173
+ kind: "directive",
1174
+ type: i4.RouterLink,
1175
+ selector: "[routerLink]",
1176
+ inputs: [
1177
+ "target",
1178
+ "queryParams",
1179
+ "fragment",
1180
+ "queryParamsHandling",
1181
+ "state",
1182
+ "info",
1183
+ "relativeTo",
1184
+ "preserveFragment",
1185
+ "skipLocationChange",
1186
+ "replaceUrl",
1187
+ "browserUrl",
1188
+ "routerLink"
1189
+ ]
1190
+ },
1191
+ {
1192
+ kind: "directive",
1193
+ type: i5.DefaultValueAccessor,
1194
+ selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
1195
+ },
1196
+ {
1197
+ kind: "directive",
1198
+ type: i5.NgControlStatus,
1199
+ selector: "[formControlName],[ngModel],[formControl]"
1200
+ },
1201
+ {
1202
+ kind: "directive",
1203
+ type: i5.NgModel,
1204
+ selector: "[ngModel]:not([formControlName]):not([formControl])",
1205
+ inputs: [
1206
+ "name",
1207
+ "disabled",
1208
+ "ngModel",
1209
+ "ngModelOptions"
1210
+ ],
1211
+ outputs: ["ngModelChange"],
1212
+ exportAs: ["ngModel"]
1213
+ },
1214
+ {
1215
+ kind: "component",
1216
+ type: i6.NoDataComponent,
1217
+ selector: "pw-no-data",
1218
+ inputs: [
1219
+ "message",
1220
+ "description",
1221
+ "withImage"
1222
+ ]
1223
+ },
1224
+ {
1225
+ kind: "component",
1226
+ type: i7.ProgressSpinner,
1227
+ selector: "p-progress-spinner, p-progressspinner",
1228
+ inputs: [
1229
+ "value",
1230
+ "strokeWidth",
1231
+ "animationDuration",
1232
+ "min",
1233
+ "max",
1234
+ "ariaLabel",
1235
+ "fill"
1236
+ ]
1237
+ },
1238
+ {
1239
+ kind: "directive",
1240
+ type: i8.LazyImgDirective,
1241
+ selector: "img"
1242
+ },
1243
+ {
1244
+ kind: "component",
1245
+ type: ResourceEditCardLazyComponent,
1246
+ selector: "pw-resource-edit-card-lazy",
1247
+ inputs: [
1248
+ "id",
1249
+ "resourceData",
1250
+ "canEdit"
1251
+ ],
1252
+ outputs: ["updated"]
1253
+ },
1254
+ {
1255
+ kind: "pipe",
1256
+ type: i10.TranslocoPipe,
1257
+ name: "transloco"
1258
+ }
1259
+ ],
1260
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1261
+ });
1262
+ }
1263
+ };
1264
+ i0.ɵɵngDeclareClassMetadata({
1265
+ minVersion: "12.0.0",
1266
+ version: "22.2.0",
1267
+ ngImport: i0,
1268
+ type: ResourceVaultComponent,
1269
+ decorators: [{
1270
+ type: Component,
1271
+ args: [{
1272
+ selector: "pw-resource--vault",
1273
+ changeDetection: ChangeDetectionStrategy.OnPush,
1274
+ standalone: false,
1275
+ template: "<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 &amp; 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",
1276
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"]
1277
+ }]
1278
+ }],
1279
+ ctorParameters: () => [
1280
+ { type: ResourceService },
1281
+ { type: i2.TagService },
1282
+ { type: i2.AuthService },
1283
+ { type: i0.ChangeDetectorRef },
1284
+ { type: i0.Injector }
1285
+ ],
1286
+ propDecorators: {
1287
+ showVaultSection: [{ type: Input }],
1288
+ postSlice: [{ type: Input }],
1289
+ categoryId: [{ type: Input }],
1290
+ resourceTitle: [{ type: Input }],
1291
+ tag: [{ type: Input }],
1292
+ isLoadedChange: [{ type: Output }]
1293
+ }
1294
+ });
1295
+ var ResourceVideoCardComponent = class ResourceVideoCardComponent extends AppBaseComponent {
1296
+ constructor(sanitizer, resourceService, tagService, cdr, injector) {
1297
+ super(injector);
1298
+ this.sanitizer = sanitizer;
1299
+ this.resourceService = resourceService;
1300
+ this.tagService = tagService;
1301
+ this.cdr = cdr;
1302
+ this.showVideoSection = false;
1303
+ this.postSlice = false;
1304
+ this.canEditResourcesValue = false;
1305
+ this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
1306
+ this.posts = [];
1307
+ this.isLoaded = false;
1308
+ this.videoStates = {};
1309
+ this.isEditingTitle = false;
1310
+ }
1311
+ ngOnInit() {
1312
+ if (this.userLoggedIn) this.localStorage.getItem$("product").subscribe((res) => {
1313
+ const data = res ? JSON.parse(res) : null;
1314
+ this.subscriptionId = data?.subscriptionId;
1315
+ this.cdr.markForCheck();
1316
+ });
1317
+ this.getPosts(1, 10);
1318
+ }
1319
+ ngOnChanges(changes) {
1320
+ if (changes["user"] || changes["userLoggedIn"]) {
1321
+ if (this.userLoggedIn && this.user) this.updateCanEditResourcesValue();
1322
+ }
1323
+ }
1324
+ loadVideo(post) {
1325
+ if (!post.external_url) return;
1326
+ const slug = post.slug;
1327
+ let externalUrl = post.external_url;
1328
+ externalUrl += externalUrl.includes("?") ? "&autoplay=1" : "?autoplay=1";
1329
+ this.videoStates[slug].url = this.sanitizer.bypassSecurityTrustResourceUrl(externalUrl);
1330
+ }
1331
+ getPosts(page, pageSize) {
1332
+ this.isLoaded = false;
1333
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId).subscribe((response) => {
1334
+ const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
1335
+ this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);
1336
+ this.posts.forEach((post) => {
1337
+ if (post.external_url) this.videoStates[post.slug] = {
1338
+ loaded: true,
1339
+ url: this.sanitizer.bypassSecurityTrustResourceUrl(post.external_url)
1340
+ };
1341
+ });
1342
+ this.cdr.markForCheck();
1343
+ }).add(() => {
1344
+ this.isLoaded = true;
1345
+ this.cdr.markForCheck();
1346
+ });
1347
+ }
1348
+ toggleTagEditTitle() {
1349
+ this.isEditingTitle = true;
1350
+ this.editedTitle = this.resourceTitle;
1351
+ }
1352
+ saveEditedTitle() {
1353
+ HelperService.updateTagTitle(this.tag, this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
1354
+ this.resourceTitle = this.editedTitle;
1355
+ this.isEditingTitle = false;
1356
+ this.cdr.markForCheck();
1357
+ });
1358
+ }
1359
+ getEffectiveSubscriptionId() {
1360
+ return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
1361
+ }
1362
+ updateCanEditResourcesValue() {
1363
+ this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
1364
+ }
1365
+ canEditResources() {
1366
+ return this.canEditResourcesValue;
1367
+ }
1368
+ trackByPostId(index, post) {
1369
+ return post.id;
1370
+ }
1371
+ static {
1372
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1373
+ minVersion: "12.0.0",
1374
+ version: "22.2.0",
1375
+ ngImport: i0,
1376
+ type: ResourceVideoCardComponent,
1377
+ deps: [
1378
+ { token: i1.DomSanitizer },
1379
+ { token: ResourceService },
1380
+ { token: i2.TagService },
1381
+ { token: i0.ChangeDetectorRef },
1382
+ { token: i0.Injector }
1383
+ ],
1384
+ target: i0.ɵɵFactoryTarget.Component
1385
+ });
1386
+ }
1387
+ static {
1388
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
1389
+ minVersion: "17.0.0",
1390
+ version: "22.2.0",
1391
+ type: ResourceVideoCardComponent,
1392
+ isStandalone: false,
1393
+ selector: "pw-resource-video-card",
1394
+ inputs: {
1395
+ showVideoSection: "showVideoSection",
1396
+ categoryId: "categoryId",
1397
+ tag: "tag",
1398
+ postSlice: "postSlice",
1399
+ resourceTitle: "resourceTitle",
1400
+ user: "user",
1401
+ userLoggedIn: "userLoggedIn"
1402
+ },
1403
+ usesInheritance: true,
1404
+ usesOnChanges: true,
1405
+ ngImport: i0,
1406
+ template: "<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",
1407
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"],
1408
+ dependencies: [
1409
+ {
1410
+ kind: "directive",
1411
+ type: i3.NgClass,
1412
+ selector: "[ngClass]",
1413
+ inputs: ["class", "ngClass"]
1414
+ },
1415
+ {
1416
+ kind: "directive",
1417
+ type: i4.RouterLink,
1418
+ selector: "[routerLink]",
1419
+ inputs: [
1420
+ "target",
1421
+ "queryParams",
1422
+ "fragment",
1423
+ "queryParamsHandling",
1424
+ "state",
1425
+ "info",
1426
+ "relativeTo",
1427
+ "preserveFragment",
1428
+ "skipLocationChange",
1429
+ "replaceUrl",
1430
+ "browserUrl",
1431
+ "routerLink"
1432
+ ]
1433
+ },
1434
+ {
1435
+ kind: "directive",
1436
+ type: i5.DefaultValueAccessor,
1437
+ selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
1438
+ },
1439
+ {
1440
+ kind: "directive",
1441
+ type: i5.NgControlStatus,
1442
+ selector: "[formControlName],[ngModel],[formControl]"
1443
+ },
1444
+ {
1445
+ kind: "directive",
1446
+ type: i5.NgModel,
1447
+ selector: "[ngModel]:not([formControlName]):not([formControl])",
1448
+ inputs: [
1449
+ "name",
1450
+ "disabled",
1451
+ "ngModel",
1452
+ "ngModelOptions"
1453
+ ],
1454
+ outputs: ["ngModelChange"],
1455
+ exportAs: ["ngModel"]
1456
+ },
1457
+ {
1458
+ kind: "component",
1459
+ type: i6.NoDataComponent,
1460
+ selector: "pw-no-data",
1461
+ inputs: [
1462
+ "message",
1463
+ "description",
1464
+ "withImage"
1465
+ ]
1466
+ },
1467
+ {
1468
+ kind: "component",
1469
+ type: i7.ProgressSpinner,
1470
+ selector: "p-progress-spinner, p-progressspinner",
1471
+ inputs: [
1472
+ "value",
1473
+ "strokeWidth",
1474
+ "animationDuration",
1475
+ "min",
1476
+ "max",
1477
+ "ariaLabel",
1478
+ "fill"
1479
+ ]
1480
+ },
1481
+ {
1482
+ kind: "directive",
1483
+ type: i8.LazyImgDirective,
1484
+ selector: "img"
1485
+ },
1486
+ {
1487
+ kind: "component",
1488
+ type: ResourceEditCardLazyComponent,
1489
+ selector: "pw-resource-edit-card-lazy",
1490
+ inputs: [
1491
+ "id",
1492
+ "resourceData",
1493
+ "canEdit"
1494
+ ],
1495
+ outputs: ["updated"]
1496
+ },
1497
+ {
1498
+ kind: "pipe",
1499
+ type: i10.TranslocoPipe,
1500
+ name: "transloco"
1501
+ }
1502
+ ],
1503
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1504
+ });
1505
+ }
1506
+ };
1507
+ i0.ɵɵngDeclareClassMetadata({
1508
+ minVersion: "12.0.0",
1509
+ version: "22.2.0",
1510
+ ngImport: i0,
1511
+ type: ResourceVideoCardComponent,
1512
+ decorators: [{
1513
+ type: Component,
1514
+ args: [{
1515
+ selector: "pw-resource-video-card",
1516
+ changeDetection: ChangeDetectionStrategy.OnPush,
1517
+ standalone: false,
1518
+ template: "<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",
1519
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"]
1520
+ }]
1521
+ }],
1522
+ ctorParameters: () => [
1523
+ { type: i1.DomSanitizer },
1524
+ { type: ResourceService },
1525
+ { type: i2.TagService },
1526
+ { type: i0.ChangeDetectorRef },
1527
+ { type: i0.Injector }
1528
+ ],
1529
+ propDecorators: {
1530
+ showVideoSection: [{ type: Input }],
1531
+ categoryId: [{ type: Input }],
1532
+ tag: [{ type: Input }],
1533
+ postSlice: [{ type: Input }],
1534
+ resourceTitle: [{ type: Input }],
1535
+ user: [{ type: Input }],
1536
+ userLoggedIn: [{ type: Input }]
1537
+ }
1538
+ });
1539
+ var UpcomingEventCardComponent = class UpcomingEventCardComponent extends AppBaseComponent {
1540
+ constructor(resourceService, tagService, cdr, injector) {
1541
+ super(injector);
1542
+ this.resourceService = resourceService;
1543
+ this.tagService = tagService;
1544
+ this.cdr = cdr;
1545
+ this.showEventContent = false;
1546
+ this.postSlice = false;
1547
+ this.canEditResourcesValue = false;
1548
+ this.now = Date.now();
1549
+ this.isEditingTitle = false;
1550
+ this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
1551
+ this.posts = [];
1552
+ this.isLoaded = false;
1553
+ }
1554
+ ngOnInit() {
1555
+ if (this.userLoggedIn) {
1556
+ this.localStorage.getItem$("product").subscribe((res) => {
1557
+ const data = res ? JSON.parse(res) : null;
1558
+ this.subscriptionId = data?.subscriptionId;
1559
+ this.cdr.markForCheck();
1560
+ });
1561
+ this.getPostTags();
1562
+ } else this.getPostTags();
1563
+ }
1564
+ ngOnChanges(changes) {
1565
+ if (changes["user"] || changes["userLoggedIn"]) {
1566
+ if (this.userLoggedIn && this.user) this.updateCanEditResourcesValue();
1567
+ }
1568
+ }
1569
+ getPostTags() {
1570
+ this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
1571
+ this.blogPostTag = response.tags.find((tag) => tag.name === "Events");
1572
+ if (this.blogPostTag?.tag_category_id) {
1573
+ if (this.postSlice) this.getPosts(1, 100);
1574
+ else this.getAllPosts(1, 100);
1575
+ } else {
1576
+ this.isLoaded = true;
1577
+ this.cdr.markForCheck();
1578
+ }
1579
+ this.cdr.markForCheck();
1580
+ });
1581
+ }
1582
+ getPosts(page, pageSize) {
1583
+ this.isLoaded = false;
1584
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId ?? this.blogPostTag?.tag_category_id).subscribe((response) => {
1585
+ const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true && new Date(post?.when).getTime() > this.now).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
1586
+ this.posts = sortedPosts;
1587
+ this.cdr.markForCheck();
1588
+ }).add(() => {
1589
+ this.isLoaded = true;
1590
+ this.cdr.markForCheck();
1591
+ });
1592
+ }
1593
+ isUpcoming(post) {
1594
+ return new Date(post?.when).getTime() > this.now;
1595
+ }
1596
+ getAllPosts(page, pageSize) {
1597
+ this.isLoaded = false;
1598
+ this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId ?? this.blogPostTag?.tag_category_id).subscribe((response) => {
1599
+ const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());
1600
+ this.posts = [...sortedPosts].slice(0, 3).reverse();
1601
+ this.cdr.markForCheck();
1602
+ }).add(() => {
1603
+ this.isLoaded = true;
1604
+ this.cdr.markForCheck();
1605
+ });
1606
+ }
1607
+ toggleEditTitle() {
1608
+ this.isEditingTitle = true;
1609
+ this.editedTitle = this.resourceTitle;
1610
+ }
1611
+ saveEditedTitle() {
1612
+ HelperService.updateTagTitle(this.tag, this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
1613
+ this.resourceTitle = this.editedTitle;
1614
+ this.isEditingTitle = false;
1615
+ this.cdr.markForCheck();
1616
+ });
1617
+ }
1618
+ getEffectiveSubscriptionId() {
1619
+ return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
1620
+ }
1621
+ updateCanEditResourcesValue() {
1622
+ this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
1623
+ }
1624
+ canEditResources() {
1625
+ return this.canEditResourcesValue;
1626
+ }
1627
+ trackByPostId(index, post) {
1628
+ return post.id;
1629
+ }
1630
+ static {
1631
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1632
+ minVersion: "12.0.0",
1633
+ version: "22.2.0",
1634
+ ngImport: i0,
1635
+ type: UpcomingEventCardComponent,
1636
+ deps: [
1637
+ { token: ResourceService },
1638
+ { token: i2.TagService },
1639
+ { token: i0.ChangeDetectorRef },
1640
+ { token: i0.Injector }
1641
+ ],
1642
+ target: i0.ɵɵFactoryTarget.Component
1643
+ });
1644
+ }
1645
+ static {
1646
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
1647
+ minVersion: "17.0.0",
1648
+ version: "22.2.0",
1649
+ type: UpcomingEventCardComponent,
1650
+ isStandalone: false,
1651
+ selector: "pw-upcoming-event-card",
1652
+ inputs: {
1653
+ showEventContent: "showEventContent",
1654
+ categoryId: "categoryId",
1655
+ tag: "tag",
1656
+ postSlice: "postSlice",
1657
+ resourceTitle: "resourceTitle",
1658
+ user: "user",
1659
+ userLoggedIn: "userLoggedIn"
1660
+ },
1661
+ usesInheritance: true,
1662
+ usesOnChanges: true,
1663
+ ngImport: i0,
1664
+ template: "<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 &amp; 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",
1665
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"],
1666
+ dependencies: [
1667
+ {
1668
+ kind: "directive",
1669
+ type: i3.NgClass,
1670
+ selector: "[ngClass]",
1671
+ inputs: ["class", "ngClass"]
1672
+ },
1673
+ {
1674
+ kind: "directive",
1675
+ type: i4.RouterLink,
1676
+ selector: "[routerLink]",
1677
+ inputs: [
1678
+ "target",
1679
+ "queryParams",
1680
+ "fragment",
1681
+ "queryParamsHandling",
1682
+ "state",
1683
+ "info",
1684
+ "relativeTo",
1685
+ "preserveFragment",
1686
+ "skipLocationChange",
1687
+ "replaceUrl",
1688
+ "browserUrl",
1689
+ "routerLink"
1690
+ ]
1691
+ },
1692
+ {
1693
+ kind: "directive",
1694
+ type: i5.DefaultValueAccessor,
1695
+ selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
1696
+ },
1697
+ {
1698
+ kind: "directive",
1699
+ type: i5.NgControlStatus,
1700
+ selector: "[formControlName],[ngModel],[formControl]"
1701
+ },
1702
+ {
1703
+ kind: "directive",
1704
+ type: i5.NgModel,
1705
+ selector: "[ngModel]:not([formControlName]):not([formControl])",
1706
+ inputs: [
1707
+ "name",
1708
+ "disabled",
1709
+ "ngModel",
1710
+ "ngModelOptions"
1711
+ ],
1712
+ outputs: ["ngModelChange"],
1713
+ exportAs: ["ngModel"]
1714
+ },
1715
+ {
1716
+ kind: "component",
1717
+ type: i6.NoDataComponent,
1718
+ selector: "pw-no-data",
1719
+ inputs: [
1720
+ "message",
1721
+ "description",
1722
+ "withImage"
1723
+ ]
1724
+ },
1725
+ {
1726
+ kind: "component",
1727
+ type: i7.ProgressSpinner,
1728
+ selector: "p-progress-spinner, p-progressspinner",
1729
+ inputs: [
1730
+ "value",
1731
+ "strokeWidth",
1732
+ "animationDuration",
1733
+ "min",
1734
+ "max",
1735
+ "ariaLabel",
1736
+ "fill"
1737
+ ]
1738
+ },
1739
+ {
1740
+ kind: "directive",
1741
+ type: i8.LazyImgDirective,
1742
+ selector: "img"
1743
+ },
1744
+ {
1745
+ kind: "component",
1746
+ type: ResourceEditCardLazyComponent,
1747
+ selector: "pw-resource-edit-card-lazy",
1748
+ inputs: [
1749
+ "id",
1750
+ "resourceData",
1751
+ "canEdit"
1752
+ ],
1753
+ outputs: ["updated"]
1754
+ },
1755
+ {
1756
+ kind: "pipe",
1757
+ type: i10.TranslocoPipe,
1758
+ name: "transloco"
1759
+ }
1760
+ ],
1761
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1762
+ });
1763
+ }
1764
+ };
1765
+ i0.ɵɵngDeclareClassMetadata({
1766
+ minVersion: "12.0.0",
1767
+ version: "22.2.0",
1768
+ ngImport: i0,
1769
+ type: UpcomingEventCardComponent,
1770
+ decorators: [{
1771
+ type: Component,
1772
+ args: [{
1773
+ selector: "pw-upcoming-event-card",
1774
+ changeDetection: ChangeDetectionStrategy.OnPush,
1775
+ standalone: false,
1776
+ template: "<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 &amp; 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",
1777
+ styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media(width<=1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media(width>=991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media(width>=768px)and (width<=1200px){.container{padding:0 6rem!important}}@media(width<=768px){.video-row{gap:3rem!important}}@media(max-width:768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media(width<=1200px){.container{padding:7rem 3rem 1rem!important}}\n"]
1778
+ }]
1779
+ }],
1780
+ ctorParameters: () => [
1781
+ { type: ResourceService },
1782
+ { type: i2.TagService },
1783
+ { type: i0.ChangeDetectorRef },
1784
+ { type: i0.Injector }
1785
+ ],
1786
+ propDecorators: {
1787
+ showEventContent: [{ type: Input }],
1788
+ categoryId: [{ type: Input }],
1789
+ tag: [{ type: Input }],
1790
+ postSlice: [{ type: Input }],
1791
+ resourceTitle: [{ type: Input }],
1792
+ user: [{ type: Input }],
1793
+ userLoggedIn: [{ type: Input }]
1794
+ }
1795
+ });
1796
+ var ResourceCardsModule = class ResourceCardsModule {
1797
+ static {
1798
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1799
+ minVersion: "12.0.0",
1800
+ version: "22.2.0",
1801
+ ngImport: i0,
1802
+ type: ResourceCardsModule,
1803
+ deps: [],
1804
+ target: i0.ɵɵFactoryTarget.NgModule
1805
+ });
1806
+ }
1807
+ static {
1808
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
1809
+ minVersion: "14.0.0",
1810
+ version: "22.2.0",
1811
+ ngImport: i0,
1812
+ type: ResourceCardsModule,
1813
+ declarations: [
1814
+ ResourceVideoCardComponent,
1815
+ UpcomingEventCardComponent,
1816
+ ResourceCardComponent,
1817
+ CaseStudyCardComponent,
1818
+ ResourceNoteCardComponent,
1819
+ ResourceVaultComponent,
1820
+ ResourceEditCardLazyComponent
1821
+ ],
1822
+ imports: [
1823
+ CommonModule,
1824
+ RouterModule,
1825
+ FormsModule,
1826
+ ReactiveFormsModule,
1827
+ PipesModule,
1828
+ PaginatorModule,
1829
+ SelectModule,
1830
+ ResourceSharedComponentsModule,
1831
+ CoreTranslocoModule,
1832
+ TranslocoModule,
1833
+ DirectivesModule,
1834
+ DragDropModule,
1835
+ NgxCaptchaModule,
1836
+ Trial4ContactUsModule
1837
+ ],
1838
+ exports: [
1839
+ ResourceVideoCardComponent,
1840
+ UpcomingEventCardComponent,
1841
+ ResourceCardComponent,
1842
+ CaseStudyCardComponent,
1843
+ ResourceNoteCardComponent,
1844
+ ResourceVaultComponent,
1845
+ Trial4ContactUsModule,
1846
+ ResourceEditCardLazyComponent,
1847
+ PaginatorModule
1848
+ ]
1849
+ });
1850
+ }
1851
+ static {
1852
+ this.ɵinj = i0.ɵɵngDeclareInjector({
1853
+ minVersion: "12.0.0",
1854
+ version: "22.2.0",
1855
+ ngImport: i0,
1856
+ type: ResourceCardsModule,
1857
+ imports: [
1858
+ CommonModule,
1859
+ RouterModule,
1860
+ FormsModule,
1861
+ ReactiveFormsModule,
1862
+ PipesModule,
1863
+ PaginatorModule,
1864
+ SelectModule,
1865
+ ResourceSharedComponentsModule,
1866
+ CoreTranslocoModule,
1867
+ TranslocoModule,
1868
+ DirectivesModule,
1869
+ DragDropModule,
1870
+ NgxCaptchaModule,
1871
+ Trial4ContactUsModule,
1872
+ Trial4ContactUsModule,
1873
+ PaginatorModule
1874
+ ]
1875
+ });
1876
+ }
1877
+ };
1878
+ i0.ɵɵngDeclareClassMetadata({
1879
+ minVersion: "12.0.0",
1880
+ version: "22.2.0",
1881
+ ngImport: i0,
1882
+ type: ResourceCardsModule,
1883
+ decorators: [{
1884
+ type: NgModule,
1885
+ args: [{
1886
+ declarations: [
1887
+ ResourceVideoCardComponent,
1888
+ UpcomingEventCardComponent,
1889
+ ResourceCardComponent,
1890
+ CaseStudyCardComponent,
1891
+ ResourceNoteCardComponent,
1892
+ ResourceVaultComponent,
1893
+ ResourceEditCardLazyComponent
1894
+ ],
1895
+ imports: [
1896
+ CommonModule,
1897
+ RouterModule,
1898
+ FormsModule,
1899
+ ReactiveFormsModule,
1900
+ PipesModule,
1901
+ PaginatorModule,
1902
+ SelectModule,
1903
+ ResourceSharedComponentsModule,
1904
+ CoreTranslocoModule,
1905
+ TranslocoModule,
1906
+ DirectivesModule,
1907
+ DragDropModule,
1908
+ NgxCaptchaModule,
1909
+ Trial4ContactUsModule
1910
+ ],
1911
+ exports: [
1912
+ ResourceVideoCardComponent,
1913
+ UpcomingEventCardComponent,
1914
+ ResourceCardComponent,
1915
+ CaseStudyCardComponent,
1916
+ ResourceNoteCardComponent,
1917
+ ResourceVaultComponent,
1918
+ Trial4ContactUsModule,
1919
+ ResourceEditCardLazyComponent,
1920
+ PaginatorModule
1921
+ ],
1922
+ schemas: [CUSTOM_ELEMENTS_SCHEMA]
1923
+ }]
1924
+ }]
1925
+ });
1926
+ export { BaseResourceComponent as a, ResourceNoteCardComponent as c, ResourceVaultComponent as i, ResourceEditCardLazyComponent as l, UpcomingEventCardComponent as n, ResourceCardComponent as o, ResourceVideoCardComponent as r, CaseStudyCardComponent as s, ResourceCardsModule as t, Trial4ContactUsModule as u };
1927
+
1928
+ //# sourceMappingURL=posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs.map