{"version":3,"file":"pv-frontend-pv-shared-components-card.mjs","sources":["../../../projects/pv-shared-components/card/card.types.ts","../../../projects/pv-shared-components/card/card.component.ts","../../../projects/pv-shared-components/card/card.component.html","../../../projects/pv-shared-components/card/card.module.ts","../../../projects/pv-shared-components/card/pv-frontend-pv-shared-components-card.ts"],"sourcesContent":["import { SafeUrl } from '@angular/platform-browser';\nimport { AvatarStyleOverride } from '@pv-frontend/pv-shared-components/avatar';\nimport {\n  CardBannerStyleOverride,\n  OverlayTagPosition,\n} from '@pv-frontend/pv-shared-components/card-banner';\nimport { CardRibbonStyleOverride } from '@pv-frontend/pv-shared-components/card-ribbon';\nimport { OverrideStyleConfig } from '@pv-frontend/pv-shared-components/common/types';\nimport { CountdownStylesOverrideConfig } from '@pv-frontend/pv-shared-components/countdown';\nimport { ValueOf } from '@pv-frontend/pv-shared-services/common';\n\nexport type CardType = 'v1' | 'v2' | 'v3' | 'offer';\n\nexport const FOOTER_ICON_POSITION = { START: 'start', END: 'end' } as const;\n\nexport type FooterIconPosition = ValueOf<typeof FOOTER_ICON_POSITION>;\n\nexport interface CardStyleOverrideConfig {\n  cardContainer?: OverrideStyleConfig;\n  avatar?: AvatarStyleOverride;\n  image?: OverrideStyleConfig;\n  cardContent?: OverrideStyleConfig;\n  title?: OverrideStyleConfig;\n  subTitle?: OverrideStyleConfig;\n  information?: {\n    container?: OverrideStyleConfig;\n    baseText?: OverrideStyleConfig;\n    primaryText?: OverrideStyleConfig;\n    attentionText?: OverrideStyleConfig;\n    strikeThroughText?: OverrideStyleConfig;\n  };\n  buttonContainer?: OverrideStyleConfig;\n  actionButton?: OverrideStyleConfig;\n  footer?: OverrideStyleConfig;\n  divider?: OverrideStyleConfig;\n  points?: {\n    icon?: OverrideStyleConfig;\n    label?: OverrideStyleConfig;\n    container?: OverrideStyleConfig;\n  };\n  availabilityTime?: {\n    container?: OverrideStyleConfig;\n    expiredLabel?: OverrideStyleConfig;\n    expiredValue?: OverrideStyleConfig;\n    countdownStyle?: CountdownStylesOverrideConfig;\n  };\n}\n\nexport interface CardInformation {\n  baseText?: string;\n  primaryText?: string;\n  attentionText?: string;\n  strikeThroughText?: string;\n}\n\nexport interface CardRibbonInput {\n  label?: string;\n  style?: CardRibbonStyleOverride;\n  image?: string | SafeUrl;\n  iconName?: string;\n}\n\nexport interface CardBannerInput {\n  position?: OverlayTagPosition;\n  style?: CardBannerStyleOverride;\n  label?: string;\n  image?: string | SafeUrl;\n}\n\nexport interface CardFooterIconInput {\n  position?: FooterIconPosition;\n  style?: OverrideStyleConfig;\n  iconName?: string;\n  iconUrl?: string;\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { AvatarStyleOverride } from '@pv-frontend/pv-shared-components/avatar';\nimport { ButtonVariant } from '@pv-frontend/pv-shared-components/button';\n\nimport {\n  CardStyleOverrideConfig,\n  CardType,\n  CardInformation,\n  CardRibbonInput,\n  CardBannerInput,\n  CardFooterIconInput,\n  FOOTER_ICON_POSITION,\n} from './card.types';\n\n@Component({\n  selector: 'pv-card',\n  templateUrl: './card.component.html',\n  styleUrls: ['./card.component.scss'],\n})\nexport class CardComponent implements OnChanges {\n  @Input() public style?: CardStyleOverrideConfig;\n  @Input() public styleClass: string = '';\n\n  @Input() public cardType: CardType = 'v1';\n  @Input() public title: string = '';\n  @Input() public subTitle: string = '';\n  @Input() public offerImage?: string = '';\n  @Input() public defaultImage: string =\n    'https://images.poshvine.com/default-thumbnail-image.avif';\n  @Input() public logo?: string = '';\n  /**\n   * For logo, we need to show label as well\n   */\n  @Input() public logoLabel: string = '';\n  /**\n   * This is mainly around pricing, AR and helping what to show in footer area\n   */\n  @Input() public information: CardInformation = {};\n  @Input() public cardRibbon: CardRibbonInput | null = null;\n  @Input() public cardBanner: CardBannerInput | null = null;\n\n  /**\n   * The object you can pass to the card component.\n   *\n   * This object will be passed back on the click events in case it is needed for consumption.\n   *\n   * This can be leveraged for analytics use cases.\n   */\n  @Input() public metaInformation?: unknown | null | undefined = null;\n  @Input() public actionButtonLabel: string = '';\n  @Input() public footerText?: string = '';\n\n  @Output() public cardClickHandler = new EventEmitter<unknown>();\n  @Output() public actionButtonClickHandler = new EventEmitter<unknown>();\n\n  @Input()\n  public analyticsEnabledForCard: boolean = false;\n\n  @Input()\n  public labelForAnalyticsCard: string = '';\n\n  @Input()\n  public analyticsEnabledForCardButton: boolean = false;\n\n  @Input()\n  public labelForAnalyticsCardButton: string = '';\n\n  /**\n   * Some offers/GC/subs might be claimable via points itself\n   * This can be kettocoins or similar for other issuers\n   */\n  @Input()\n  public pointsNeededToGetBenefit?: number;\n\n  @Input()\n  public logoForPoints?: string = '';\n\n  /**\n   * Used only for v1 variant\n   */\n  @Input()\n  public footerIcon?: CardFooterIconInput;\n\n  /**\n   * Used for showing 'live in' and 'ends in'\n   * Pass startTime & endTime if props has date with time else pass startDate & endDate\n   */\n  @Input() public set startTime(startTime: string | undefined) {\n    if (startTime) {\n      this.benefitStartTime = new Date(startTime);\n    }\n  }\n\n  @Input() public set endTime(endTime: string | undefined) {\n    if (endTime) {\n      this.benefitEndTime = new Date(endTime);\n    }\n  }\n\n  @Input() public set startDate(startDate: string | undefined) {\n    if (startDate) {\n      this.benefitStartTime = new Date(startDate);\n      this.benefitStartTime.setHours(0, 0, 0, 0);\n    }\n  }\n\n  @Input() public set endDate(endDate: string | undefined) {\n    if (endDate) {\n      this.benefitEndTime = new Date(endDate);\n      this.benefitEndTime.setHours(23, 59, 59, 999);\n    }\n  }\n\n  @Input() public showSuffix?: boolean = false;\n  @Input() public showAvailabilityTime?: boolean = false;\n\n  @Input() public expiredDateFormat?: string = 'dd/MM/yyyy';\n\n  @Input() public isLoading: boolean = false;\n  @Input() public buttonVariant: ButtonVariant = 'link';\n\n  @Input() public eagerLoadImage: boolean = false;\n\n  @Input() public hideAvatar?: boolean = false;\n\n  /**\n   * Used only for v3 variant\n   */\n  public v3VariantAvatarStyleOverride: AvatarStyleOverride = {\n    label: {\n      fontWeight: 'bold',\n      marginTop: '1.5rem',\n    },\n  };\n\n  public isLive: boolean = false;\n  public availabilityValue?: number;\n  public isExpired: boolean = false;\n  public FOOTER_ICON_POSITION = FOOTER_ICON_POSITION;\n  private _benefitStartTime: Date = new Date();\n  private _benefitEndTime: Date = new Date();\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (this.showAvailabilityTime) {\n      if (changes['startDate']?.currentValue) {\n        this.benefitStartTime = new Date(changes['startDate'].currentValue);\n        this.benefitStartTime.setHours(0, 0, 0, 0);\n      } else if (changes['startTime']?.currentValue) {\n        this.benefitStartTime = new Date(changes['startTime'].currentValue);\n      }\n\n      if (changes['endDate']?.currentValue) {\n        this.benefitEndTime = new Date(changes['endDate'].currentValue);\n        this.benefitEndTime.setHours(23, 59, 59, 999);\n      } else if (changes['endTime']?.currentValue) {\n        this.benefitEndTime = new Date(changes['endTime'].currentValue);\n      }\n\n      console.log(this.benefitEndTime, this.benefitStartTime);\n      this.checkOfferAvailability();\n    }\n  }\n\n  public get benefitStartTime(): Date {\n    return this._benefitStartTime;\n  }\n\n  private set benefitStartTime(value: Date) {\n    this._benefitStartTime = value;\n  }\n\n  public get benefitEndTime(): Date {\n    return this._benefitEndTime;\n  }\n\n  private set benefitEndTime(value: Date) {\n    this._benefitEndTime = value;\n  }\n\n  private calculateAvailabilityTime(): void {\n    const currentTime = new Date();\n\n    const fromTime = this.isLive\n      ? currentTime.getTime()\n      : this.benefitStartTime.getTime();\n    const millisecondsDifference = Math.abs(\n      fromTime - this.benefitEndTime.getTime()\n    );\n\n    this.availabilityValue = Math.floor(millisecondsDifference / 1000);\n  }\n\n  private checkOfferAvailability(): void {\n    const currentTime = new Date();\n    const hasStarted = currentTime >= this.benefitStartTime;\n    this.isExpired = this.benefitEndTime < currentTime;\n    this.isLive = hasStarted && !this.isExpired;\n    if (!this.isExpired) this.calculateAvailabilityTime();\n  }\n\n  public handleCardClick(event: Event): void {\n    event.stopPropagation();\n    event.preventDefault();\n    this.cardClickHandler.emit(this.metaInformation);\n  }\n\n  public handleActionButtonClick(): void {\n    this.actionButtonClickHandler.emit(this.metaInformation);\n  }\n}\n","<div\n  class=\"border-1 pv-card w-full h-full bg-white surface-border cursor-pointer flex flex-column\"\n  [class.pv-card-v3]=\"this.cardType === 'v3'\"\n  (click)=\"handleCardClick($event)\"\n  [style]=\"this.style?.cardContainer\"\n  [pvClickTrack]=\"this.analyticsEnabledForCard\"\n  [pvTrackLabel]=\"this.labelForAnalyticsCard\">\n  <div class=\"relative\">\n    <!-- Show ribbon if present -->\n    <pv-card-ribbon\n      *ngIf=\"this.cardRibbon\"\n      [style]=\"this.cardRibbon.style\"\n      [label]=\"this.cardRibbon.label\"\n      [iconName]=\"this.cardRibbon.iconName\"\n      [image]=\"this.cardRibbon.image\"></pv-card-ribbon>\n\n    <!-- Show card banner if present -->\n    <pv-card-banner\n      *ngIf=\"this.cardBanner\"\n      [label]=\"this.cardBanner.label\"\n      [image]=\"this.cardBanner.image\"\n      [position]=\"this.cardBanner.position\"\n      [style]=\"this.cardBanner.style\"></pv-card-banner>\n\n    <ng-template [ngTemplateOutlet]=\"cardHeader\"></ng-template>\n  </div>\n\n  <ng-template #cardHeader>\n    <div\n      class=\"pv-card-header flex justify-content-center align-items-center\"\n      [class.pt-5]=\"cardType === 'v2' || cardType === 'v3'\">\n      <img\n        class=\"pv-card-header-image offer-image h-full w-full max-h-8rem md:max-h-12rem\"\n        [src]=\"this.offerImage\"\n        *ngIf=\"this.offerImage && ['v1', 'offer'].includes(this.cardType)\"\n        [style]=\"this.style?.image\"\n        [loading]=\"eagerLoadImage ? 'eager' : 'lazy'\"\n        [alt]=\"this.title\"\n        [pvFallbackImage]=\"defaultImage\" />\n      <ng-container\n        *ngIf=\"\n          (this.cardType === 'v2' || this.cardType === 'v3') && !!this.logo\n        \">\n        <pv-avatar\n          [imageSrc]=\"this.logo\"\n          size=\"large\"\n          [style]=\"\n            this.cardType === 'v3'\n              ? this.v3VariantAvatarStyleOverride\n              : this.style?.avatar\n          \"\n          [label]=\"this.logoLabel\"></pv-avatar>\n      </ng-container>\n    </div>\n  </ng-template>\n\n  <div\n    class=\"pv-card-content h-full card-{{ this.cardType }}-content\"\n    [style]=\"this.style?.cardContent\">\n    <section class=\"pv-card-body\">\n      <div\n        class=\"pv-card-title text-sm brand-gray-500-high-contrast\"\n        *ngIf=\"this.title\"\n        [class.pv-card-offer-title]=\"this.cardType === 'offer'\"\n        [class.text-center]=\"this.cardType === 'v3' || this.cardType === 'v2'\"\n        [style]=\"this.style?.title\"\n        [style.grid-template-columns]=\"!this.hideAvatar ? '2fr 1fr' : '1fr'\"\n      >\n        <span class=\"pv-line-clamp-1\">{{ this.title }}</span>\n        <ng-container *ngIf=\"this.cardType === 'offer' && !this.hideAvatar\">\n          <pv-avatar\n            [style]=\"this.style?.avatar\"\n            [imageSrc]=\"this.logo\"\n            size=\"normal\"\n            [label]=\"this.logoLabel\"></pv-avatar>\n        </ng-container>\n      </div>\n\n      <!-- Show the points needed to redeem offers is points are passed upon (even zero is valid) -->\n      <div\n        class=\"points-container surface-border-normal pv-border-solid flex align-items-center gap-1 border-round-3xl py-1 px-2 w-max surface-background-level3-low-contrast\"\n        *ngIf=\"\n          this.pointsNeededToGetBenefit !== null &&\n          this.pointsNeededToGetBenefit !== undefined\n        \"\n        [style]=\"this.style?.points?.container\">\n        <pv-svg-icon\n          *ngIf=\"this.logoForPoints\"\n          [name]=\"this.logoForPoints\"\n          [style]=\"\n            this.style?.points?.icon ??\n            { height: '1rem', width: '1rem', display: 'flex' }\n          \" />\n        <span\n          class=\"text-base surface-text-normal-low-contrast font-bold\"\n          [style]=\"this.style?.points?.label\">\n          {{ this.pointsNeededToGetBenefit }}\n        </span>\n      </div>\n\n      <pv-divider\n        [style]=\"this.style?.divider\"\n        *ngIf=\"this.cardType === 'offer'\"\n        class=\"surface-border-normal align-self-center\"></pv-divider>\n      <div\n        class=\"pv-card-subtitle pt-2 text-sm\"\n        [class.text-center]=\"this.cardType === 'v2' || this.cardType === 'v3'\"\n        [class.font-bold]=\"this.cardType !== 'offer'\"\n        [class.surface-text-subdued-low-contrast]=\"this.cardType === 'offer'\"\n        [class.pb-3]=\"this.cardType === 'offer'\"\n        *ngIf=\"this.subTitle\"\n        [style]=\"this.style?.subTitle\">\n        <span class=\"pv-line-clamp-2\">\n          {{ this.subTitle }}\n        </span>\n      </div>\n\n      <ng-container *ngIf=\"showAvailabilityTime\">\n        <div\n          class=\"pt-2 text-sm flex\"\n          [style]=\"style?.availabilityTime?.container\"\n          *ngIf=\"isExpired; else expiringCountdown\">\n          <span [style]=\"this.style?.availabilityTime?.expiredLabel\">\n            Expired on\n          </span>\n          <span\n            class=\"text-primary ml-1 font-bold\"\n            [style]=\"this.style?.availabilityTime?.expiredValue\">\n            {{ this.benefitEndTime | date : expiredDateFormat }}\n          </span>\n        </div>\n        <ng-template #expiringCountdown>\n          <pv-countdown\n            [date]=\"this.isLive ? this.benefitEndTime : this.benefitStartTime\"\n            [showSuffix]=\"!!showSuffix\"\n            [style]=\"this.style?.availabilityTime?.countdownStyle\"\n            [textBefore]=\"this.isLive ? 'Ends in' : 'Live at'\"></pv-countdown>\n        </ng-template>\n      </ng-container>\n    </section>\n\n    <pv-divider\n      [style]=\"this.style?.divider\"\n      *ngIf=\"this.cardType === 'v1'\"\n      class=\"surface-border-normal align-self-center\"></pv-divider>\n    <div\n      class=\"pv-class-information flex justify-content-center align-items-center mb-2 gap-1\"\n      *ngIf=\"this.cardType === 'v1'\"\n      [ngClass]=\"\n        this.footerIcon?.position === FOOTER_ICON_POSITION.END\n          ? 'flex-row-reverse'\n          : 'flex-row'\n      \"\n      [style]=\"this.style?.information?.container\">\n      <pv-svg-icon\n        *ngIf=\"this.footerIcon?.iconName ?? this.footerIcon?.iconUrl\"\n        [name]=\"this.footerIcon?.iconName\"\n        [srcUrl]=\"this.footerIcon?.iconUrl\"\n        styleClass=\"flex w-1rem h-1rem\"\n        [style]=\"this.footerIcon?.style\" />\n      <div class=\"flex align-items-center justify-content-center gap-1\">\n        <span\n          class=\"pv-card-info-base-text surface-text-subtle-low-contrast text-xs sm:text-sm md:text-sm\"\n          [style]=\"this.style?.information?.baseText\"\n          *ngIf=\"this.information?.baseText\">\n          {{ this.information.baseText }}\n        </span>\n        <span\n          class=\"pv-card-info-primary-text text-xs sm:text-sm md:text-sm text-primary font-bold\"\n          [style]=\"this.style?.information?.primaryText\"\n          *ngIf=\"this.information?.primaryText\">\n          {{ this.information.primaryText }}\n        </span>\n        <span\n          class=\"pv-card-info-attention-text text-base feedback-text-positive font-bold\"\n          [style]=\"this.style?.information?.attentionText\"\n          *ngIf=\"this.information?.attentionText\">\n          {{ this.information.attentionText }}\n        </span>\n        <span\n          class=\"pv-card-info-strikethrough-text surface-text-subdued-low-contrast text-xs sm:text-sm md:text-sm pv-strikethrough\"\n          [style]=\"this.style?.information?.strikeThroughText\"\n          *ngIf=\"this.information?.strikeThroughText\">\n          {{ this.information.strikeThroughText }}\n        </span>\n      </div>\n    </div>\n\n    <div\n      class=\"pv-card-action-button flex align-items-end justify-content-center mb-2\"\n      [style]=\"this.style?.buttonContainer\"\n      *ngIf=\"cardType === 'v2' || this.cardType === 'offer'\">\n      <pv-button\n        [style]=\"this.style?.actionButton\"\n        [variant]=\"buttonVariant\"\n        size=\"small\"\n        [isLoading]=\"isLoading\"\n        [label]=\"this.actionButtonLabel\"\n        (clickEvent)=\"handleActionButtonClick()\"\n        [analyticsEnabledForButton]=\"this.analyticsEnabledForCardButton\"\n        [labelForAnalytics]=\"this.labelForAnalyticsCardButton\"></pv-button>\n    </div>\n  </div>\n\n  <!-- TODO: Support bold text in footer, will do this when we start integrating, need more clarity on BE response first -->\n  <div\n    class=\"pv-card-footer-v3 mt-2 flex justify-content-center align-items-center text-sm\"\n    *ngIf=\"cardType === 'v3'\"\n    [style]=\"this.style?.footer\">\n    <span *ngIf=\"this.footerText\">{{ this.footerText }}</span>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { PvAvatarModule } from '@pv-frontend/pv-shared-components/avatar';\nimport { PvButtonModule } from '@pv-frontend/pv-shared-components/button';\nimport { PvCardBannerModule } from '@pv-frontend/pv-shared-components/card-banner';\nimport { PvCardRibbonModule } from '@pv-frontend/pv-shared-components/card-ribbon';\nimport { PvCountdownModule } from '@pv-frontend/pv-shared-components/countdown';\nimport { PvDividerModule } from '@pv-frontend/pv-shared-components/divider';\nimport { SvgIconModule } from '@pv-frontend/pv-shared-components/svg-icon';\nimport { FallbackImageModule } from '@pv-frontend/pv-shared-directives/image-fallback';\nimport { ClickTrackingModule } from '@pv-frontend/pv-shared-directives/tracking';\n\nimport { CardComponent } from './card.component';\n\n@NgModule({\n  declarations: [CardComponent],\n  imports: [\n    CommonModule,\n    PvAvatarModule,\n    PvButtonModule,\n    PvDividerModule,\n    PvCardRibbonModule,\n    PvCardBannerModule,\n    ClickTrackingModule,\n    SvgIconModule,\n    PvCountdownModule,\n    FallbackImageModule,\n  ],\n  exports: [CardComponent],\n})\nexport class PvCardModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}