{"version":3,"names":["prestoPlaylistCss","PrestoPlaylistStyle0","PrestoPlaylist","rewatch","this","handlePlay","next","handleNext","handleCurrentPlay","value","previousValue","addOverlay","currentPlyr","elements","container","getRootNode","host","style","currentPlaylistItem","config","styles","undefined","provider","muted","_a","embed","unMute","play","overlay","document","createElement","nextItemTitle","getNextItemTitle","isLastItem","nextItemString","listTextSingular","transitionDuration","_b","closest","append","componentWillLoad","items","handleItemClick","item","show","el","height","offsetHeight","width","offsetWidth","getNextItem","handlePause","pause","nextItem","i","length","id","_c","_d","lastIndex","title","render","listTextS","listTextP","listTextPlural","h","src","Object","assign","slot","video_id","_e","_f","class","_g","playerClass","key","_h","_j","onPlayerReady","e","detail","onPlayedMedia","playing","onPausedMedia","onEndedMedia","name","heading","map","onClick","active","onTriggerPause","onTriggerPlay","duration"],"sources":["src/components/core/features/presto-playlist/presto-playlist.scss?tag=presto-playlist&encapsulation=shadow","src/components/core/features/presto-playlist/presto-playlist.tsx"],"sourcesContent":[":host {\n  display: block;\n  overflow: hidden;\n}\npresto-player {\n  opacity: 0;\n  visibility: hidden;\n  transition: 0.35s opacity, 0.35s visibility;\n\n  &.ready {\n    opacity: 1;\n    visibility: visible;\n  }\n}\n","import { Component, h, Prop, State, Watch, Listen, Element } from '@stencil/core';\n\nimport { PlaylistItem } from '../../../../interfaces';\n\n@Component({\n  tag: 'presto-playlist',\n  styleUrl: 'presto-playlist.scss',\n  shadow: true,\n})\nexport class PrestoPlaylist {\n  @Element() el: HTMLElement;\n\n  /** Overlay component */\n  private overlay: any;\n\n  /** Array of videos from the Playlist */\n  @Prop() items: Array<PlaylistItem>;\n\n  /** Title for the Playlist */\n  @Prop() heading: string;\n\n  /** Count prefix string for the Playlist - Singular */\n  @Prop() listTextSingular: string;\n\n  /** Count prefix string for the Playlist - Plural */\n  @Prop() listTextPlural: string;\n\n  /** Transition duration for next video. */\n  @Prop() transitionDuration: number = 5;\n\n  /** Stores current video that is shown in the preview. */\n  @State() currentPlaylistItem: PlaylistItem;\n\n  /** Stores current video Plyr object that is shown in the preview. */\n  @State() currentPlyr: any;\n\n  /** Is a video playing. */\n  @State() playing: boolean = false;\n\n  /**\n   * Listening to the Rewatch Video button click event.\n   */\n  @Listen('rewatch')\n  rewatch() {\n    this.handlePlay();\n  }\n\n  /**\n   * Listening to the Next Video button click event.\n   */\n  @Listen('next')\n  next() {\n    this.handleNext();\n  }\n\n  /**\n   * Plays the video, adds overlay and Presto Video styles as soon as a new object is assigned.\n   * @param value Current value\n   * @param previousValue Previous value\n   */\n  @Watch('currentPlyr')\n  handleCurrentPlay(value, previousValue) {\n    if (!value) return;\n\n    // add the overlay.\n    this.addOverlay();\n\n    // add styles from the current video config.\n    this.currentPlyr.elements.container.getRootNode().host.style = this.currentPlaylistItem.config.styles;\n\n    // if we have a previous value, then we need to autoplay the video since we are switching.\n    if (previousValue !== undefined) {\n      // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n      if (this.currentPlyr.provider === 'youtube' && !this.currentPlyr.muted && this.currentPlyr?.embed) {\n        this.currentPlyr.embed.unMute();\n      }\n\n      this.currentPlyr.play();\n    }\n  }\n\n  /**\n   * Adds overlay to the player which will regulate the Next video button.\n   */\n  addOverlay() {\n    // create overlay\n    this.overlay = document.createElement('presto-playlist-overlay');\n    // assign properties.\n    this.overlay.nextItemTitle = this.getNextItemTitle();\n    this.overlay.isLastItem = this.isLastItem();\n    this.overlay.nextItemString = this?.listTextSingular || 'Video';\n    this.overlay.transitionDuration = this.transitionDuration;\n    // append\n    this.currentPlyr.elements?.container?.closest('.presto-player__wrapper').append(this.overlay);\n  }\n\n  /**\n   * Lifecycle: Component will load.\n   */\n  componentWillLoad() {\n    // Select the first video as a current video to be shown in the playlist.\n    this.currentPlaylistItem = this?.items?.[0] || null;\n  }\n\n  /**\n   * Handles the click on the playlist item.\n   * @param item PlaylistItem\n   */\n  handleItemClick(item: PlaylistItem) {\n    if (this.overlay) {\n      this.overlay.show = false;\n    }\n    this.el.style.height = this.el.offsetHeight + 'px';\n    this.el.style.width = this.el.offsetWidth + 'px';\n    this.currentPlaylistItem = item;\n  }\n\n  /**\n   * Assign the next item in the playlist as a current item.\n   */\n  handleNext() {\n    this.overlay.show = false;\n    this.currentPlaylistItem = this.getNextItem() || this.currentPlaylistItem;\n  }\n\n  /**\n   * Play the current video.\n   */\n  handlePlay() {\n    if (this.overlay) {\n      this.overlay.show = false;\n    }\n    this.currentPlyr.play();\n  }\n\n  /**\n   * Pause the current video.\n   */\n  handlePause() {\n    this.overlay.show = false;\n    this.currentPlyr.pause();\n  }\n\n  /**\n   * Get the next item in the playlist.\n   * @returns PlaylistItem Next item in the playlist.\n   */\n  getNextItem() {\n    if (this.isLastItem()) return this.items[0];\n\n    let nextItem: PlaylistItem;\n    for (let i = 0; i < this.items?.length; i++) {\n      if (this.items[i]?.id === this.currentPlaylistItem?.id && this.items?.length !== i + 1) {\n        nextItem = this.items[i + 1];\n        break;\n      }\n    }\n    return nextItem;\n  }\n\n  /**\n   * Checks if the current item is the last item in the playlist.\n   * @returns boolean True if the current item is the last item in the playlist.\n   */\n  isLastItem() {\n    const lastIndex = this.items?.length - 1;\n    return this.items[lastIndex]?.id === this.currentPlaylistItem?.id;\n  }\n\n  /**\n   * Get the title of the next item in the playlist.\n   * @returns string Title of the next item in the playlist.\n   */\n  getNextItemTitle() {\n    const nextItem = this.getNextItem();\n    if (undefined !== nextItem) {\n      return nextItem?.title || nextItem?.config?.title;\n    }\n    return '';\n  }\n\n  /**\n   * Rendering the component.\n   * @returns Web Component\n   */\n  render() {\n    if (!this.items?.length) return '';\n\n    const listTextS = this.listTextSingular ? this.listTextSingular : 'Video';\n    const listTextP = this.listTextPlural ? this.listTextPlural : 'Videos';\n\n    return (\n      <presto-playlist-ui>\n        {!!this.currentPlaylistItem.config?.src ? (\n          <presto-player\n            slot=\"preview\"\n            src={this.currentPlaylistItem.config?.src}\n            {...this.currentPlaylistItem.config}\n            video_id={this.currentPlaylistItem.config?.id}\n            id={`presto-player-${this.currentPlaylistItem.config?.id}`}\n            media-title={this.currentPlaylistItem.config?.title}\n            class={this.currentPlaylistItem.config?.playerClass}\n            key={this.currentPlaylistItem.config?.id}\n            provider={this.currentPlaylistItem.config?.provider}\n            onPlayerReady={e => {\n              this.currentPlyr = e.detail;\n              this.el.style.height = null;\n              this.el.style.width = null;\n            }}\n            onPlayedMedia={() => (this.playing = true)}\n            onPausedMedia={() => (this.playing = false)}\n            onEndedMedia={() => (this.overlay.show = true)}\n          />\n        ) : (\n          <slot name=\"unauthorized\" slot=\"preview\" />\n        )}\n\n        <div slot=\"title\">{this.heading || 'Playlist'}</div>\n\n        <div slot=\"count\">\n          {this.items.length} {this.items.length > 1 ? listTextP : listTextS}\n        </div>\n\n        {this.items.map(item => {\n          return (\n            <presto-playlist-item\n              slot=\"list\"\n              onClick={() => this.handleItemClick(item)}\n              active={this.currentPlaylistItem?.id === item?.id}\n              playing={this.currentPlaylistItem?.id === item?.id && this.playing}\n              class={this.currentPlaylistItem?.id === item?.id ? 'active' : ''}\n              key={item?.id}\n              onTriggerPause={() => this.handlePause()}\n              onTriggerPlay={() => this.handlePlay()}\n            >\n              <span slot=\"item-title\">\n                <span>{item?.title || item?.config?.title}</span>\n              </span>\n              <span slot=\"item-duration\">\n                <span>{item?.duration}</span>\n              </span>\n            </presto-playlist-item>\n          );\n        })}\n      </presto-playlist-ui>\n    );\n  }\n}\n"],"mappings":"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"}