@posiwise/resource-module 0.0.195 → 0.0.197

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/fesm2022/{posiwise-resource-module-base-top-banner.component-DSirXfem.mjs → posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs} +2 -2
  2. package/fesm2022/{posiwise-resource-module-base-top-banner.component-DSirXfem.mjs.map → posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs.map} +1 -1
  3. package/fesm2022/{posiwise-resource-module-resource-blogs.module-DIh--y78.mjs → posiwise-resource-module-resource-blogs.module-C6KzoRWc.mjs} +8 -8
  4. package/fesm2022/{posiwise-resource-module-resource-blogs.module-DIh--y78.mjs.map → posiwise-resource-module-resource-blogs.module-C6KzoRWc.mjs.map} +1 -1
  5. package/fesm2022/{posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs → posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs} +463 -138
  6. package/fesm2022/posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs.map +1 -0
  7. package/fesm2022/{posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs → posiwise-resource-module-resource-case-studies.module-BDIf5gLH.mjs} +3 -3
  8. package/fesm2022/{posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs.map → posiwise-resource-module-resource-case-studies.module-BDIf5gLH.mjs.map} +1 -1
  9. package/fesm2022/{posiwise-resource-module-resource-events.module-BwK6UfCq.mjs → posiwise-resource-module-resource-events.module-B7xJNXXA.mjs} +10 -202
  10. package/fesm2022/posiwise-resource-module-resource-events.module-B7xJNXXA.mjs.map +1 -0
  11. package/fesm2022/{posiwise-resource-module-resource-hub.module-BWvid8gs.mjs → posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs} +7 -7
  12. package/fesm2022/posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs.map +1 -0
  13. package/fesm2022/{posiwise-resource-module-resource-integrations.module-qudabfwX.mjs → posiwise-resource-module-resource-integrations.module-Bto11niw.mjs} +6 -6
  14. package/fesm2022/{posiwise-resource-module-resource-integrations.module-qudabfwX.mjs.map → posiwise-resource-module-resource-integrations.module-Bto11niw.mjs.map} +1 -1
  15. package/fesm2022/{posiwise-resource-module-resource-post.module-BJnApbtU.mjs → posiwise-resource-module-resource-post.module-DijUa5vO.mjs} +5 -5
  16. package/fesm2022/{posiwise-resource-module-resource-post.module-BJnApbtU.mjs.map → posiwise-resource-module-resource-post.module-DijUa5vO.mjs.map} +1 -1
  17. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-TH1usNf-.mjs → posiwise-resource-module-resource-release-notes.module-Dc5O2huO.mjs} +6 -6
  18. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-TH1usNf-.mjs.map → posiwise-resource-module-resource-release-notes.module-Dc5O2huO.mjs.map} +1 -1
  19. package/fesm2022/{posiwise-resource-module-resource-root.module-DP0EMP-_.mjs → posiwise-resource-module-resource-root.module-3WYuuuw6.mjs} +2 -2
  20. package/fesm2022/{posiwise-resource-module-resource-root.module-DP0EMP-_.mjs.map → posiwise-resource-module-resource-root.module-3WYuuuw6.mjs.map} +1 -1
  21. package/fesm2022/{posiwise-resource-module-resource-videos.module-DR7dQ_8r.mjs → posiwise-resource-module-resource-videos.module-BTPdGGSf.mjs} +6 -6
  22. package/fesm2022/{posiwise-resource-module-resource-videos.module-DR7dQ_8r.mjs.map → posiwise-resource-module-resource-videos.module-BTPdGGSf.mjs.map} +1 -1
  23. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-C8J9-eqL.mjs → posiwise-resource-module-resource-white-papers.module-Bonf8OHM.mjs} +6 -6
  24. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-C8J9-eqL.mjs.map → posiwise-resource-module-resource-white-papers.module-Bonf8OHM.mjs.map} +1 -1
  25. package/fesm2022/{posiwise-resource-module-resource.service-DjeMJX1O.mjs → posiwise-resource-module-resource.service-B09CoD3d.mjs} +3 -2
  26. package/fesm2022/posiwise-resource-module-resource.service-B09CoD3d.mjs.map +1 -0
  27. package/fesm2022/posiwise-resource-module.mjs +14 -14
  28. package/fesm2022/posiwise-resource-module.mjs.map +1 -1
  29. package/package.json +1 -1
  30. package/types/posiwise-resource-module.d.ts +172 -31
  31. package/fesm2022/posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs.map +0 -1
  32. package/fesm2022/posiwise-resource-module-resource-events.module-BwK6UfCq.mjs.map +0 -1
  33. package/fesm2022/posiwise-resource-module-resource-hub.module-BWvid8gs.mjs.map +0 -1
  34. package/fesm2022/posiwise-resource-module-resource.service-DjeMJX1O.mjs.map +0 -1
@@ -4,26 +4,27 @@ import * as i1$1 from "@angular/router";
4
4
  import * as i1 from "@posiwise/resource-contact-us";
5
5
  import { AppBaseComponent } from "@posiwise/app-base-component";
6
6
  import { Paging, Resource, ResourcePost, User } from "@posiwise/common-utilities";
7
- import * as i10$1 from "@angular/forms";
7
+ import * as i11$2 from "@angular/forms";
8
8
  import { FormBuilder, FormGroup } from "@angular/forms";
9
9
  import { AuthService, MainApiHttpService, TagService } from "@posiwise/common-services";
10
10
  import { CustomUploaderComponent } from "@posiwise/utils";
11
11
  import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
12
- import * as i8 from "@angular/common";
13
- import * as i11$2 from "@posiwise/pipes";
14
- import * as i14$1 from "@posiwise/shared-components";
15
- import * as i15 from "@posiwise/core-transloco";
16
- import * as i16$1 from "@jsverse/transloco";
17
- import * as i17 from "@posiwise/directives";
12
+ import * as i9 from "@angular/common";
13
+ import * as i12$1 from "@posiwise/pipes";
14
+ import * as i15 from "@posiwise/shared-components";
15
+ import * as i16$1 from "@posiwise/core-transloco";
16
+ import * as i17 from "@jsverse/transloco";
17
+ import * as i18 from "@posiwise/directives";
18
18
  import * as i11$1 from "primeng/inputtext";
19
19
  import * as i12 from "primeng/iconfield";
20
20
  import * as i13 from "primeng/inputicon";
21
21
  import * as i14 from "primeng/textarea";
22
22
  import { DomSanitizer, SafeResourceUrl } from "@angular/platform-browser";
23
- import * as i12$1 from "primeng/paginator";
24
- import * as i13$1 from "primeng/select";
25
- import * as i18 from "@angular/cdk/drag-drop";
26
- import * as i19 from "ngx-captcha";
23
+ import { Observable } from "rxjs";
24
+ import * as i13$1 from "primeng/paginator";
25
+ import * as i14$1 from "primeng/select";
26
+ import * as i19 from "@angular/cdk/drag-drop";
27
+ import * as i20 from "ngx-captcha";
27
28
  import * as i16 from "@posiwise/alpha-module";
28
29
  import * as i4 from "primeng/datepicker";
29
30
  import * as i5 from "primeng/autocomplete";
@@ -176,7 +177,7 @@ export declare class ResourceService {
176
177
  private readonly resource;
177
178
  private readonly comments;
178
179
  constructor(api: MainApiHttpService);
179
- getPublicPosts(master_subscription_id: any, page: number, pageSize: number, search: string, tagCategoryIds?: string, tagIds?: string): import("rxjs").Observable<any>;
180
+ getPublicPosts(master_subscription_id: any, page: number, pageSize: number, search: string, tagCategoryIds?: string, tagIds?: string, extraParams?: Record<string, string | number>): import("rxjs").Observable<any>;
180
181
  getAdminPosts(subscriptionId: any, paging?: Paging): import("rxjs").Observable<any>;
181
182
  addPost(post: any): import("rxjs").Observable<any>;
182
183
  getPostBySlug(slug: string): import("rxjs").Observable<any>;
@@ -189,6 +190,59 @@ export declare class ResourceService {
189
190
  static ɵfac: i0.ɵɵFactoryDeclaration<ResourceService, never>;
190
191
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
191
192
  }
193
+ /** One page of `/posts/get_all`; `object_count` is the total after filtering. */
194
+ interface ResourcePostsPage<T> {
195
+ posts?: T[];
196
+ object_count?: number;
197
+ }
198
+ /** Sort sent to `/posts/get_all` so that pages line up with the order the cards are shown. */
199
+ declare const NEWEST_PUBLISHED_FIRST: {
200
+ order_by: string;
201
+ order_direction: string;
202
+ };
203
+ /** A post as `/posts/get_all` returns it: the shared `Resource` plus the listing fields. */
204
+ type PublicPost = Resource & {
205
+ showcase?: boolean;
206
+ when?: string;
207
+ };
208
+ /** What to list: the subscription plus a tag category or specific tags. */
209
+ interface PublicPostsQuery {
210
+ subscriptionId: number;
211
+ tagCategoryIds?: string;
212
+ tagIds?: string;
213
+ }
214
+ /** Posts fetched per request on every resources page. */
215
+ declare const RESOURCE_PAGE_SIZE = 15;
216
+ /**
217
+ * Pages through a resources list. Each load keeps fetching until it has added
218
+ * `pageSize` posts that pass `keep` (or the server runs out), so a filter that
219
+ * hides most of a page — showcase only, upcoming events only — never stalls it.
220
+ */
221
+ declare class ResourcePager<T> {
222
+ private readonly fetchPage;
223
+ private readonly onChange;
224
+ private readonly keep;
225
+ readonly pageSize: number;
226
+ items: T[];
227
+ isLoaded: boolean;
228
+ isLoadingMore: boolean;
229
+ private page;
230
+ private fetched;
231
+ private total;
232
+ private generation;
233
+ constructor(fetchPage: (page: number, pageSize: number) => Observable<ResourcePostsPage<T>>, onChange: () => void, keep?: (post: T) => boolean, pageSize?: number);
234
+ /** A pager over the public `/posts` list, newest-published first. */
235
+ static forPublicPosts(service: ResourceService, query: () => PublicPostsQuery, onChange: () => void, keep: (post: PublicPost) => boolean, pageSize?: number): ResourcePager<PublicPost>;
236
+ get hasMore(): boolean;
237
+ /** Clears the list and loads the first posts. */
238
+ reset(): void;
239
+ /** Appends the next posts; ignored while a load is in flight or nothing is left. */
240
+ loadMore(): void;
241
+ /** Calls `loadMore` when the viewport is near the bottom of the page (browser only). */
242
+ loadMoreIfNearBottom(): void;
243
+ private fetchNext;
244
+ private finish;
245
+ }
192
246
  declare namespace resource_video_cards_component_d_exports {
193
247
  export { ResourceVideoCardComponent };
194
248
  }
@@ -207,8 +261,11 @@ export declare class ResourceVideoCardComponent extends AppBaseComponent impleme
207
261
  userLoggedIn: boolean;
208
262
  subscriptionId: number;
209
263
  masterSubscriptionId: any;
210
- posts: Resource[];
211
- isLoaded: boolean;
264
+ /** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */
265
+ pager: ResourcePager<PublicPost>;
266
+ get posts(): Resource[];
267
+ get isLoaded(): boolean;
268
+ get isLoadingMore(): boolean;
212
269
  videoStates: {
213
270
  [slug: string]: {
214
271
  loaded: boolean;
@@ -222,7 +279,10 @@ export declare class ResourceVideoCardComponent extends AppBaseComponent impleme
222
279
  ngOnInit(): void;
223
280
  ngOnChanges(changes: SimpleChanges): void;
224
281
  loadVideo(post: any): void;
225
- getPosts(page: number, pageSize: number): void;
282
+ loadPosts(): void;
283
+ onWindowScroll(): void;
284
+ /** Gives every loaded video post an embed URL, keeping any it already has. */
285
+ private syncVideoStates;
226
286
  toggleTagEditTitle(): void;
227
287
  saveEditedTitle(): void;
228
288
  /** Helper method to get effective subscription ID */
@@ -284,13 +344,18 @@ export declare class UpcomingEventCardComponent extends AppBaseComponent impleme
284
344
  masterSubscriptionId: any;
285
345
  posts: Resource[];
286
346
  isLoaded: boolean;
347
+ isLoadingMore: boolean;
348
+ pager: ResourcePager<PublicPost>;
287
349
  blogPostTag: any;
288
350
  isMasterSubscription: any;
289
351
  constructor(resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef, injector: Injector);
290
352
  ngOnInit(): void;
291
353
  ngOnChanges(changes: SimpleChanges): void;
292
354
  private getPostTags;
293
- getPosts(page: number, pageSize: number): void;
355
+ /** Reloads in the current mode: paged full list, or the 3-card landing preview. */
356
+ refresh(): void;
357
+ loadUpcoming(): void;
358
+ private syncFromPager;
294
359
  isUpcoming(post: any): boolean;
295
360
  getAllPosts(page: number, pageSize: number): void;
296
361
  toggleEditTitle(): void;
@@ -332,6 +397,62 @@ export declare class UpcomingEventCardComponent extends AppBaseComponent impleme
332
397
  };
333
398
  }, {}, never, never, false, never>;
334
399
  }
400
+ declare namespace replay_event_cards_component_d_exports {
401
+ export { ReplayEventCardComponent };
402
+ }
403
+ declare class ReplayEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {
404
+ private readonly resourceService;
405
+ private readonly tagService;
406
+ private readonly cdr;
407
+ showEventContent: boolean;
408
+ categoryId: string;
409
+ resourceTitle: string;
410
+ user: User;
411
+ canEditResourcesValue: boolean;
412
+ userLoggedIn: boolean;
413
+ subscriptionId: any;
414
+ masterSubscriptionId: any;
415
+ posts: Resource[];
416
+ isLoaded: boolean;
417
+ isLoadingMore: boolean;
418
+ pager: ResourcePager<PublicPost>;
419
+ blogPostTag: any;
420
+ isMasterSubscription: any;
421
+ constructor(resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef, injector: Injector);
422
+ ngOnInit(): void;
423
+ ngOnChanges(changes: SimpleChanges): void;
424
+ private getPostTags;
425
+ /** Pages through this list 15 visible posts at a time ("Load more"). */
426
+ loadReplays(): void;
427
+ private syncFromPager;
428
+ /** Helper method to get effective subscription ID */
429
+ private getEffectiveSubscriptionId;
430
+ private updateCanEditResourcesValue;
431
+ canEditResources(): boolean;
432
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReplayEventCardComponent, never>;
433
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReplayEventCardComponent, "pw-replay-event-card", never, {
434
+ "showEventContent": {
435
+ "alias": "showEventContent";
436
+ "required": false;
437
+ };
438
+ "categoryId": {
439
+ "alias": "categoryId";
440
+ "required": false;
441
+ };
442
+ "resourceTitle": {
443
+ "alias": "resourceTitle";
444
+ "required": false;
445
+ };
446
+ "user": {
447
+ "alias": "user";
448
+ "required": false;
449
+ };
450
+ "userLoggedIn": {
451
+ "alias": "userLoggedIn";
452
+ "required": false;
453
+ };
454
+ }, {}, never, never, false, never>;
455
+ }
335
456
  declare namespace resource_cards_component_d_exports {
336
457
  export { ResourceCardComponent };
337
458
  }
@@ -349,10 +470,10 @@ export declare class ResourceCardComponent extends AppBaseComponent implements O
349
470
  resourceLink: any;
350
471
  user: User;
351
472
  userLoggedIn: boolean;
352
- isLoaded: boolean;
473
+ /** Full list (`postSlice`) pages on scroll; the related strip shows 3. */
474
+ pager: ResourcePager<PublicPost>;
353
475
  subscriptionId: any;
354
476
  masterSubscriptionId: any;
355
- posts: Resource[];
356
477
  isEditingTitle: boolean;
357
478
  editedTitle: string;
358
479
  isMasterSubscription: any;
@@ -360,7 +481,12 @@ export declare class ResourceCardComponent extends AppBaseComponent implements O
360
481
  constructor(injector: Injector, resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef);
361
482
  ngOnInit(): void;
362
483
  ngOnChanges(changes: SimpleChanges): void;
363
- getPosts(page: number, pageSize: number): void;
484
+ get posts(): Resource[];
485
+ get isLoaded(): boolean;
486
+ get isLoadingMore(): boolean;
487
+ get hasMorePosts(): boolean;
488
+ loadPosts(): void;
489
+ onWindowScroll(): void;
364
490
  toggleTagEditTitle(): void;
365
491
  saveEditedTitle(): void;
366
492
  /** Helper method to get effective subscription ID */
@@ -426,18 +552,22 @@ export declare class CaseStudyCardComponent extends AppBaseComponent implements
426
552
  user: User;
427
553
  canEditResourcesValue: boolean;
428
554
  userLoggedIn: boolean;
429
- isLoaded: boolean;
555
+ /** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */
556
+ pager: ResourcePager<PublicPost>;
557
+ get posts(): Resource[];
558
+ get isLoaded(): boolean;
559
+ get isLoadingMore(): boolean;
430
560
  subscriptionId: any;
431
561
  masterSubscriptionId: any;
432
562
  companyName: any;
433
- posts: Resource[];
434
563
  isMasterSubscription: any;
435
564
  isEditingTitle: boolean;
436
565
  editedTitle: string;
437
566
  constructor(injector: Injector, resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef);
438
567
  ngOnInit(): void;
439
568
  ngOnChanges(changes: SimpleChanges): void;
440
- getPosts(page: number, pageSize: number): void;
569
+ loadPosts(): void;
570
+ onWindowScroll(): void;
441
571
  toggleEditTitle(): void;
442
572
  saveEditedTitle(): void;
443
573
  /** Helper method to get effective subscription ID */
@@ -506,6 +636,12 @@ export declare class ResourceNoteCardComponent extends AppBaseComponent implemen
506
636
  releasePosts: {
507
637
  [key: string]: Resource[];
508
638
  };
639
+ pagers: {
640
+ [key: string]: ResourcePager<PublicPost>;
641
+ };
642
+ isLoadingMore: {
643
+ [key: string]: boolean;
644
+ };
509
645
  tagCategory: any;
510
646
  isEditingTitle: boolean;
511
647
  isPressEditingTitle: boolean;
@@ -517,11 +653,10 @@ export declare class ResourceNoteCardComponent extends AppBaseComponent implemen
517
653
  private getTags;
518
654
  private getPostTags;
519
655
  private findTag;
520
- hasPressReleases(): boolean;
521
- hasProductReleases(): boolean;
522
- getProductReleasePosts(page: number, pageSize: number): void;
523
- getPressReleasePosts(page: number, pageSize: number): void;
524
- private getProcessedPosts;
656
+ hasReleases(type: string): boolean;
657
+ /** Full page: newest first, 15 at a time ("Load more"). Landing: the 3 newest. */
658
+ loadReleases(type: string): void;
659
+ private syncFromPager;
525
660
  toggleEditTitle(): void;
526
661
  toggleEditPressTitle(): void;
527
662
  saveEditedTitle(type: any): void;
@@ -617,12 +752,18 @@ export declare class ResourceVaultComponent extends BaseResourceComponent implem
617
752
  resourceTitle: any;
618
753
  tag: any;
619
754
  isLoadedChange: EventEmitter<boolean>;
755
+ /** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */
756
+ pager: ResourcePager<PublicPost>;
757
+ isLoadingMore: boolean;
758
+ private announcedPager;
620
759
  isEditingTitle: boolean;
621
760
  editedTitle: string;
622
761
  constructor(resourceService: ResourceService, tagService: TagService, authService: AuthService, cdr: ChangeDetectorRef, injector: Injector);
623
762
  ngOnInit(): void;
624
763
  protected getResourceType(): string;
625
- protected getPosts(page: number, pageSize: number): void;
764
+ protected getPosts(): void;
765
+ onWindowScroll(): void;
766
+ private syncFromPager;
626
767
  toggleEditTitle(): void;
627
768
  saveEditedTitle(): void;
628
769
  static ɵfac: i0.ɵɵFactoryDeclaration<ResourceVaultComponent, never>;
@@ -699,12 +840,12 @@ declare namespace resource_cards_module_d_exports {
699
840
  */
700
841
  export declare class ResourceCardsModule {
701
842
  static ɵfac: i0.ɵɵFactoryDeclaration<ResourceCardsModule, never>;
702
- static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceCardsModule, [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof ResourceEditCardLazyComponent], [typeof i8.CommonModule, typeof i1$1.RouterModule, typeof i10$1.FormsModule, typeof i10$1.ReactiveFormsModule, typeof i11$2.PipesModule, typeof i12$1.PaginatorModule, typeof i13$1.SelectModule, typeof i14$1.ResourceSharedComponentsModule, typeof i15.CoreTranslocoModule, typeof i16$1.TranslocoModule, typeof i17.DirectivesModule, typeof i18.DragDropModule, typeof i19.NgxCaptchaModule, typeof Trial4ContactUsModule], [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof Trial4ContactUsModule, typeof ResourceEditCardLazyComponent, typeof i12$1.PaginatorModule]>;
843
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceCardsModule, [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ReplayEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof ResourceEditCardLazyComponent], [typeof i9.CommonModule, typeof i1$1.RouterModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i12$1.PipesModule, typeof i13$1.PaginatorModule, typeof i14$1.SelectModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i19.DragDropModule, typeof i20.NgxCaptchaModule, typeof Trial4ContactUsModule], [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof Trial4ContactUsModule, typeof ResourceEditCardLazyComponent, typeof i13$1.PaginatorModule]>;
703
844
  static ɵinj: i0.ɵɵInjectorDeclaration<ResourceCardsModule>;
704
845
  }
705
846
  export declare class ResourceSharedModule {
706
847
  static ɵfac: i0.ɵɵFactoryDeclaration<ResourceSharedModule, never>;
707
- static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceSharedModule, [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent], [typeof i8.CommonModule, typeof i1$1.RouterModule, typeof i10$1.FormsModule, typeof i10$1.ReactiveFormsModule, typeof i11$2.PipesModule, typeof i14$1.ResourceSharedComponentsModule, typeof i15.CoreTranslocoModule, typeof i16$1.TranslocoModule, typeof i17.DirectivesModule, typeof i11$1.InputTextModule, typeof i12.IconFieldModule, typeof i13.InputIconModule, typeof i14.TextareaModule, typeof ResourceCardsModule, typeof i16.HubSpotMeetingsSharedModule], [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent, typeof ResourceCardsModule, typeof i16.HubSpotMeetingsSharedModule, typeof i8.CommonModule, typeof i1$1.RouterModule, typeof i10$1.FormsModule, typeof i10$1.ReactiveFormsModule, typeof i11$2.PipesModule, typeof i14$1.ResourceSharedComponentsModule, typeof i15.CoreTranslocoModule, typeof i16$1.TranslocoModule, typeof i17.DirectivesModule, typeof i11$1.InputTextModule, typeof i12.IconFieldModule, typeof i13.InputIconModule, typeof i14.TextareaModule]>;
848
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceSharedModule, [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent], [typeof i9.CommonModule, typeof i1$1.RouterModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i12$1.PipesModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i11$1.InputTextModule, typeof i12.IconFieldModule, typeof i13.InputIconModule, typeof i14.TextareaModule, typeof ResourceCardsModule, typeof i16.HubSpotMeetingsSharedModule], [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent, typeof ResourceCardsModule, typeof i16.HubSpotMeetingsSharedModule, typeof i9.CommonModule, typeof i1$1.RouterModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i12$1.PipesModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i11$1.InputTextModule, typeof i12.IconFieldModule, typeof i13.InputIconModule, typeof i14.TextareaModule]>;
708
849
  static ɵinj: i0.ɵɵInjectorDeclaration<ResourceSharedModule>;
709
850
  }
710
851
  declare namespace resource_edit_card_component_d_exports {
@@ -774,7 +915,7 @@ export declare class ResourceEditCardComponent extends AppBaseComponent implemen
774
915
  */
775
916
  export declare class ResourceEditModule {
776
917
  static ɵfac: i0.ɵɵFactoryDeclaration<ResourceEditModule, never>;
777
- static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceEditModule, [typeof ResourceEditCardComponent], [typeof i8.CommonModule, typeof i10$1.FormsModule, typeof i10$1.ReactiveFormsModule, typeof i4.DatePickerModule, typeof i5.AutoCompleteModule, typeof i14$1.ResourceSharedComponentsModule, typeof i15.CoreTranslocoModule, typeof i16$1.TranslocoModule, typeof i17.DirectivesModule, typeof i10.QuillModule, typeof i11.UiSwitchModule], [typeof ResourceEditCardComponent]>;
918
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceEditModule, [typeof ResourceEditCardComponent], [typeof i9.CommonModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i4.DatePickerModule, typeof i5.AutoCompleteModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i10.QuillModule, typeof i11.UiSwitchModule], [typeof ResourceEditCardComponent]>;
778
919
  static ɵinj: i0.ɵɵInjectorDeclaration<ResourceEditModule>;
779
920
  }
780
921
  export interface ResourceModalContext {
@@ -1 +0,0 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs","names":["i1.ResourceService","i9.ResourceEditCardLazyComponent","i1.ResourceService","i9.ResourceEditCardLazyComponent","i1.ResourceService","i9.ResourceEditCardLazyComponent","i1.ResourceService","i1.ResourceService","i9.ResourceEditCardLazyComponent","i2.ResourceService","i3","i4","i5","i6","i7","i8","i9","i10.ResourceEditCardLazyComponent","i11","i1.ResourceService","i9.ResourceEditCardLazyComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-contact-us/resource-contact-us.module.ts","../../../../libs/resource-module/src/lib/public/components/resource-edit-card-lazy/resource-edit-card-lazy.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.html","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.html","../../../../libs/resource-module/src/lib/public/components/base/base-resource.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.html","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.html","../../../../libs/resource-module/src/lib/public/shared/resource-cards.module.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { Trial4SharedContactUsModule } from '@posiwise/resource-contact-us';\n\n@NgModule({\n imports: [Trial4SharedContactUsModule],\n exports: [Trial4SharedContactUsModule]\n})\nexport class Trial4ContactUsModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n type SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\n/**\n * Lazy-loading wrapper for ResourceEditCard\n */\n@Component({\n selector: 'pw-resource-edit-card-lazy',\n template: `<ng-container #editCardContainer></ng-container>`,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceEditCardLazyComponent implements OnChanges, OnDestroy {\n @ViewChild('editCardContainer', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n @Input() id!: number;\n @Input() resourceData;\n @Input() canEdit = false;\n @Output() updated = new EventEmitter<void>();\n\n private componentRef = null;\n private loading = false;\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n async ngOnChanges(changes: SimpleChanges) {\n if (this.canEdit && !this.componentRef && !this.loading) {\n await this.loadEditCard();\n } else if (!this.canEdit && this.componentRef) {\n this.container.clear();\n this.componentRef = null;\n } else if (this.componentRef && (changes['id'] || changes['resourceData'])) {\n // Update existing component inputs\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n }\n }\n\n private async loadEditCard() {\n if (this.componentRef || this.loading) return; // Prevent double loading\n\n this.loading = true; // Set BEFORE async operation\n\n try {\n // Dynamically import ResourceEditCard component (145 KB)\n const module = await import('../resource-edit-card/resource-edit-card.component');\n const ResourceEditCardComponent = module.ResourceEditCardComponent;\n\n // Ensure container exists and is clear\n if (!this.container) return;\n this.container.clear();\n\n // Create component dynamically (only once)\n this.componentRef = this.container.createComponent(ResourceEditCardComponent);\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n this.componentRef.instance.updated.subscribe(() => {\n this.updated.emit();\n this.cdr.markForCheck();\n });\n this.loading = false;\n } catch (error) {\n console.error('Failed to load ResourceEditCard:', error);\n this.loading = false;\n }\n }\n\n ngOnDestroy() {\n this.componentRef?.destroy();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-note-card',\n templateUrl: './release-note-card.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceNoteCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() releaseHeader = false;\n @Input() categoryId!: string;\n @Input() isReleasePress = false;\n @Input() isResource = false;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() tag;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n postTags: { [key: string]: { id: string; title: string } } = {};\n releasePosts: { [key: string]: Resource[] } = {};\n\n tagCategory;\n isEditingTitle: boolean;\n isPressEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getTags();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Release Notes' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[0];\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.postTags['product'] = this.findTag(\n response.tags,\n 'Product Release Notes',\n this.tagCategory?.id\n );\n this.postTags['press'] = this.findTag(\n response.tags,\n 'Press Release Notes',\n this.tagCategory?.id\n );\n\n if (this.postTags['product']?.id) {\n this.getProductReleasePosts(1, 100);\n } else {\n this.isLoaded = true;\n this.releasePosts['product'] = [];\n }\n\n if (this.postTags['press']?.id) {\n this.getPressReleasePosts(1, 100);\n } else {\n this.isLoaded = true;\n this.releasePosts['press'] = [];\n }\n this.cdr.markForCheck();\n });\n }\n\n private findTag(tags, name: string, categoryId: number) {\n return tags.find(tag => tag.name === name && tag.tag_category_id === categoryId);\n }\n\n hasPressReleases(): boolean {\n return this.releasePosts['press']?.length !== 0 && this.isLoaded;\n }\n hasProductReleases(): boolean {\n return this.releasePosts['product']?.length !== 0 && this.isLoaded;\n }\n\n getProductReleasePosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n '',\n this.postTags['product']?.id\n )\n .subscribe(response => {\n const sortedPosts = response.posts\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.releasePosts['product'] = this.getProcessedPosts(sortedPosts);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n getPressReleasePosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n '',\n this.postTags['press']?.id\n )\n .subscribe(response => {\n const sortedPosts = response?.posts\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.releasePosts['press'] = this.getProcessedPosts(sortedPosts);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n private getProcessedPosts(posts: Resource[], sliceCount = 3): Resource[] {\n const cloned = [...posts];\n return this.postSlice ? cloned.reverse() : cloned.slice(0, sliceCount).reverse();\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.postTags['product'].title;\n }\n\n toggleEditPressTitle() {\n this.isPressEditingTitle = true;\n this.editedTitle = this.postTags['press'].title;\n }\n\n saveEditedTitle(type) {\n HelperService.updateTagTitle(\n this.postTags[type],\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.postTags[type].title = this.editedTitle;\n if (type === 'product') {\n this.isEditingTitle = false;\n } else {\n this.isPressEditingTitle = false;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","@if (hasProductReleases()) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (postTags['product']?.title) {\n <span [innerHTML]=\"postTags['product']?.title\"></span>\n } @else {\n Product Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('product')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['product']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasProductReleases()) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['product']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getProductReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url?.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Product Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Product Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n}\n@if (isReleasePress && hasPressReleases()) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isPressEditingTitle }\">\n @if (!isPressEditingTitle) {\n @if (postTags['press']?.title) {\n <span [innerHTML]=\"postTags['press']?.title\"></span>\n } @else {\n Press Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditPressTitle()\" (keydown.enter)=\"toggleEditPressTitle()\" (keydown.space)=\"toggleEditPressTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isPressEditingTitle }\" id=\"input_editedTitle_1600\" name=\"input_editedTitle_1600\"\n aria-label=\"Input Edited Title 1600\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('press')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isPressEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['press']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasPressReleases()) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['press']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPressReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Press Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Press Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-case-studies-card',\n templateUrl: './case-studies-cards.component.html',\n styleUrls: ['./case-studies-cards.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class CaseStudyCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showCaseStudyHeader = false;\n @Input() categoryId!: string;\n @Input() postSlice = false;\n @Input() tag;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n companyName = this.appConfig.company.name;\n\n posts: Resource[] = [];\n isMasterSubscription;\n\n isEditingTitle = false;\n editedTitle: string;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\" id=\"case-studies\">\n <div class=\"container\">\n @if (showCaseStudyHeader) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n <a class=\"view-all\" routerLink=\"/resources/case-studies\">VIEW ALL ></a>\n </div>\n } @else {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n </div>\n }\n\n\n <ng-template #caseStudyHeaderTemplate>\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span>\n <span [innerHTML]=\"resourceTitle\"></span>\n </span>\n } @else {\n Case Studies\n }\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\"\n (click)=\"toggleEditTitle()\"\n (keydown.enter)=\"toggleEditTitle()\"\n (keydown.space)=\"toggleEditTitle()\"\n title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n\n </h2>\n </ng-template>\n\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"testimonial-box\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <div>\n @if (!post.rectangular_picture.url.includes('default-photo.jpg') ) {\n <img [src]=\"post.rectangular_picture.url\"\n alt=\"IT Partners Logo\"\n class=\"company-logo mb-3\"\n width=\"320\"\n height=\"180\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n <p class=\"mb-4 mt-3 testimonial-section\">\n <span [innerHTML]=\"post.title\"></span>\n </p>\n </div>\n <!-- BOTTOM AVATAR -->\n <div class=\"avatar-container mt-5\">\n @if (post.picture.url && !post.picture.url.includes('default-photo.jpg')) {\n <img [src]=\"post.picture.url\"\n alt=\"User Avatar\"\n class=\"testimonial-avatar\"\n width=\"96\"\n height=\"96\"\n loading=\"lazy\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"read-more-btn-overlay\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"read-more-btn-overlay\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../../resource.service';\n\n@Component({\n selector: 'pw-resource-cards',\n templateUrl: './resource-cards.component.html',\n styleUrls: ['../../../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() categoryId!: string;\n @Input() isHeaderVisible = true;\n @Input() isRelated = false;\n @Input() resourceTitle!: string;\n @Input() postSlice = false;\n @Input() header;\n @Input() tag;\n @Input() resourceLink;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n @if (isHeaderVisible) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Our team's articles\n }\n @if (!isRelated && canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9056\" name=\"input_editedTitle_9056\"\n aria-label=\"Input Edited Title 9056\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" [routerLink]=\"resourceLink\">VIEW ALL ></a>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title \"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\"\n /></a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [href]=\"post.external_url\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>","import { ChangeDetectionStrategy,\n ChangeDetectorRef, Component, Injector, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n template: '',\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport abstract class BaseResourceComponent extends AppBaseComponent implements OnInit {\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n testimonialsPosts: Resource[] = [];\n userLoggedIn: boolean;\n blogPostTag;\n tagCategory;\n blogTestimonialsPostTag;\n isLoaded = false;\n user: User;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n constructor(\n protected readonly resourceService: ResourceService,\n protected readonly tagService: TagService,\n private readonly authService: AuthService,\n protected readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.updateCanEditResourcesValue();\n this.initializeComponent();\n this.cdr.markForCheck();\n });\n } else {\n this.initializeComponent();\n }\n this.cdr.markForCheck();\n });\n }\n\n protected initializeComponent() {\n if (this.shouldUseTagCategories()) {\n this.getTags();\n } else {\n this.getPostTags();\n }\n\n if (this.shouldLoadTestimonials()) {\n this.getTestimonialTags();\n }\n }\n\n protected getTags() {\n this.isLoaded = false;\n forkJoin({\n categories: this.tagService.getAllTagCategories(\n { search: this.getSearchTerm() },\n this.getEffectiveSubscriptionId()\n ),\n tags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(({ categories, tags }) => {\n this.tagCategory = categories?.tag_categories?.[0];\n this.blogPostTag = tags.tags.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === this.getResourceType());\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getTestimonialTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogTestimonialsPostTag = response.tags.find(\n tag => tag.name === 'Testimonials'\n );\n this.getTestimonialsPosts(1, 100);\n this.cdr.markForCheck();\n });\n }\n\n protected getPosts(page: number, pageSize: number) {\n this.fetchPosts(page, pageSize, this.blogPostTag?.tag_category_id, 'posts');\n }\n\n getTestimonialsPosts(page: number, pageSize: number) {\n this.fetchPosts(\n page,\n pageSize,\n this.blogTestimonialsPostTag?.tag_category_id,\n 'testimonialsPosts'\n );\n }\n\n /** Shared method to fetch posts with common filtering, sorting, and slicing logic */\n private fetchPosts(\n page: number,\n pageSize: number,\n tagCategoryId,\n targetProperty: 'posts' | 'testimonialsPosts'\n ) {\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', tagCategoryId)\n .subscribe(response => {\n const filteredPosts = response.posts\n .filter(post => post.tags?.some(tag => tag.tag_category_id === tagCategoryId))\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n )\n .slice(0, 12);\n\n if (targetProperty === 'posts') {\n this.posts = filteredPosts;\n } else {\n this.testimonialsPosts = filteredPosts;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n protected getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n // Abstract methods that each component must implement\n protected abstract getResourceType(): string;\n\n // Optional methods that can be overridden\n protected getSearchTerm(): string {\n return this.getResourceType();\n }\n\n protected shouldUseTagCategories(): boolean {\n return false;\n }\n\n protected shouldLoadTestimonials(): boolean {\n return false;\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\n@Component({\n selector: 'pw-resource--vault',\n templateUrl: './resource-vault.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceVaultComponent extends BaseResourceComponent implements OnInit {\n @Input() showVaultSection = false;\n @Input() postSlice = false;\n @Input() categoryId;\n @Input() resourceTitle;\n @Input() tag;\n @Output() isLoadedChange = new EventEmitter<boolean>();\n\n isEditingTitle = false;\n editedTitle: string;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, cdr, injector);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.getPosts(1, 10);\n }\n\n protected getResourceType(): string {\n return 'Vault';\n }\n\n protected override getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.isLoadedChange.emit(this.isLoaded);\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVaultSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap mb-5\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Whitepapers &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","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-resource-video-card',\n templateUrl: './resource-video-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class ResourceVideoCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showVideoSection = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n\n videoStates: { [slug: string]: { loaded: boolean; url: SafeResourceUrl } } = {};\n\n isEditingTitle = false;\n editedTitle: string;\n isMasterSubscription;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n loadVideo(post): void {\n if (!post.external_url) return;\n\n const slug = post.slug;\n let externalUrl = post.external_url;\n\n // Append autoplay only when clicked\n externalUrl += externalUrl.includes('?') ? '&autoplay=1' : '?autoplay=1';\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.videoStates[slug].url = this.sanitizer.bypassSecurityTrustResourceUrl(externalUrl); //NOSONAR\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.posts.forEach(post => {\n if (post.external_url) {\n this.videoStates[post.slug] = {\n loaded: true,\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n url: this.sanitizer.bypassSecurityTrustResourceUrl(post.external_url) //NOSONAR\n };\n }\n });\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVideoSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n On-Demand Videos\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/videos\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"resource-blog-card\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 10)\">\n </pw-resource-edit-card-lazy>\n <p [innerHTML]=\"post.title\" class=\"mb-5\"></p>\n <a [href]=\" post.external_url\" target=\"_blank\">\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid mb-3\"\n [alt]=\"post.title\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n </a>\n <a class=\"resource-btn mt-3\" [href]=\" post.external_url\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Watch now' }}</span>\n <span class=\"arrow\">→</span>\n </a>\n </div>\n }\n </div>\n }\n </div>\n\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-upcoming-event-card',\n templateUrl: './upcoming-event-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class UpcomingEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showEventContent = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n canEditResourcesValue = false;\n\n now = Date.now();\n subscriptionId;\n\n isEditingTitle = false;\n editedTitle: string;\n\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n blogPostTag;\n isMasterSubscription;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.getPostTags();\n } else {\n this.getPostTags();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === 'Events');\n if (this.blogPostTag?.tag_category_id) {\n if (this.postSlice) {\n this.getPosts(1, 100);\n } else {\n this.getAllPosts(1, 100);\n }\n } else {\n this.isLoaded = true;\n this.cdr.markForCheck();\n }\n this.cdr.markForCheck();\n });\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(\n post => post.showcase === true && new Date(post?.when).getTime() > this.now\n )\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = sortedPosts;\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n isUpcoming(post): boolean {\n return new Date(post?.when).getTime() > this.now;\n }\n\n getAllPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());\n\n this.posts = [...sortedPosts].slice(0, 3).reverse();\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showEventContent) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Events &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","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { ResourceSharedComponentsModule } from '@posiwise/shared-components';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SelectModule } from 'primeng/select';\n\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { ResourceNoteCardComponent } from '../components/reslease-note-card/release-note-card.component';\nimport { CaseStudyCardComponent } from '../components/resource-case-studies/case-studies-cards/case-studies-cards.component';\nimport { Trial4ContactUsModule } from '../components/resource-contact-us/resource-contact-us.module';\nimport { ResourceEditCardLazyComponent } from '../components/resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceCardComponent } from '../components/resource-post/related-resources/resource-cards/resource-cards.component';\nimport { ResourceVaultComponent } from '../components/resource-vault/resource-vault.component';\nimport { ResourceVideoCardComponent } from '../components/resource-videos/resource-video-cards/resource-video-cards.component';\nimport { UpcomingEventCardComponent } from '../components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component';\n\n/**\n * Module containing resource card components (lightweight version)\n * ResourceEditCard is lazy-loaded on demand to save 145 KB\n * Trial4ContactUs moved to separate module for better tree-shaking\n * Used by both ResourceRootModule and ResourceSharedModule\n */\n@NgModule({\n declarations: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n ResourceEditCardLazyComponent\n ],\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PipesModule,\n PaginatorModule,\n SelectModule,\n ResourceSharedComponentsModule,\n CoreTranslocoModule,\n TranslocoModule,\n DirectivesModule,\n DragDropModule,\n NgxCaptchaModule,\n Trial4ContactUsModule // ✅ Import standalone module\n ],\n exports: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n Trial4ContactUsModule, // ✅ Re-export for backward compatibility\n ResourceEditCardLazyComponent,\n PaginatorModule // Export PaginatorModule so ResourceCompanyCardComponent can use p-paginator\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceCardsModule {}\n"],"mappings":"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AAA,MAAA;GAAmB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAnB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,cAAA;IArCxB;IACA;IACA;IACA;IACA;IACA;IACA;GAA6B;GAAA,SAAA;IAG7B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAGA;GAAA,SAAA;IAAA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;;CAIK;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,SAAA;IA5BxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IASA;IAEA;;;;;AAIK,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAvC/B,MAAA;EAAS,MAAA,CAAA;GACN,cAAc;IACV;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS,CAAC,sBAAsB;EACnC,CAAA"}