{"version":3,"sources":["lite-youtube.ts"],"names":["LiteYTEmbed","HTMLElement","constructor","super","this","isIframeLoaded","setupDom","observedAttributes","connectedCallback","addEventListener","warmConnections","once","addIframe","videoId","encodeURIComponent","getAttribute","id","setAttribute","playlistId","videoTitle","title","videoPlay","name","videoStartAt","autoLoad","hasAttribute","autoPause","noCookie","posterQuality","posterLoading","params","opts","shadowDom","attachShadow","mode","let","nonce","window","liteYouTubeNonce","innerHTML","domRefFrame","querySelector","domRefImg","fallback","webp","jpeg","domRefPlayButton","setupComponent","initImagePlaceholder","isYouTubeShort","initIntersectionObserver","attributeChangedCallback","oldVal","newVal","classList","contains","remove","shadowRoot","isIntersectionObserver","autoplay","wantsNoCookie","embedTarget","iframeHTML","insertAdjacentHTML","add","attemptShortAutoPlay","dispatchEvent","CustomEvent","detail","bubbles","cancelable","posterUrlWebp","posterUrlJpeg","loading","srcset","src","IntersectionObserver","entries","observer","forEach","entry","isIntersecting","unobserve","root","rootMargin","threshold","observe","e","o","intersectionRatio","contentWindow","postMessage","setTimeout","matchMedia","matches","addPrefetch","kind","url","linkElem","document","createElement","rel","href","crossOrigin","head","append","context","isPreconnected","liteYouTubeIsPreconnected","customElements","define"],"mappings":"MAgBaA,oBAAoBC,YAY/BC,cACEC,MAAK,EAHCC,KAAAC,eAAiB,CAAA,EAIvBD,KAAKE,SAAQ,CACf,CAEAC,gCACE,MAAO,CAAC,UAAW,aAAc,YAAa,aAChD,CAEAC,oBACEJ,KAAKK,iBACH,cACA,IAAMT,YAAYU,gBAAgBN,IAAI,EACtC,CACEO,KAAM,CAAA,C,CACP,EAGHP,KAAKK,iBAAiB,QAAS,IAAML,KAAKQ,UAAS,CAAE,CACvD,CAEAC,cACE,OAAOC,mBAAmBV,KAAKW,aAAa,SAAS,GAAK,EAAE,CAC9D,CAEAF,YAAYG,GACVZ,KAAKa,aAAa,UAAWD,CAAE,CACjC,CAEAE,iBACE,OAAOJ,mBAAmBV,KAAKW,aAAa,YAAY,GAAK,EAAE,CACjE,CAEAG,eAAeF,GACbZ,KAAKa,aAAa,aAAcD,CAAE,CACpC,CAEAG,iBACE,OAAOf,KAAKW,aAAa,YAAY,GAAK,OAC5C,CAEAI,eAAeC,GACbhB,KAAKa,aAAa,aAAcG,CAAK,CACvC,CAEAC,gBACE,OAAOjB,KAAKW,aAAa,WAAW,GAAK,MAC3C,CAEAM,cAAcC,GACZlB,KAAKa,aAAa,YAAaK,CAAI,CACrC,CAEAC,mBACE,OAAOnB,KAAKW,aAAa,cAAc,GAAK,GAC9C,CAEAS,eACE,OAAOpB,KAAKqB,aAAa,UAAU,CACrC,CAEAC,gBACE,OAAOtB,KAAKqB,aAAa,WAAW,CACtC,CAEAE,eACE,OAAOvB,KAAKqB,aAAa,UAAU,CACrC,CAEAG,oBACE,OAAOxB,KAAKW,aAAa,eAAe,GAAK,WAC/C,CAEAc,oBACE,OACGzB,KAAKW,aAAa,eAAe,GAClC,MAEJ,CAEAe,aACE,eAAgB1B,KAAKmB,gBAAgBnB,KAAKW,aAAa,QAAQ,CACjE,CAEAe,WAAWC,GACT3B,KAAKa,aAAa,SAAUc,CAAI,CAClC,CAKQzB,WACN,IAAM0B,EAAY5B,KAAK6B,aAAa,CAAEC,KAAM,MAAM,CAAE,EACpDC,IAAIC,EAAQ,GACRC,OAAOC,mBACTF,YAAkBC,OAAOC,qBAE3BN,EAAUO;eACCH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8FXhC,KAAKoC,YAAcR,EAAUS,cAA8B,QAAQ,EACnErC,KAAKsC,UAAY,CACfC,SAAUX,EAAUS,cAAc,sBAAsB,EACxDG,KAAMZ,EAAUS,cAAc,kBAAkB,EAChDI,KAAMb,EAAUS,cAAc,kBAAkB,C,EAElDrC,KAAK0C,iBAAmBd,EAAUS,cAAc,aAAa,CAC/D,CAKQM,iBACN3C,KAAK4C,qBAAoB,EAEzB5C,KAAK0C,iBAAiB7B,aACpB,aACGb,KAAKiB,UAAR,KAAsBjB,KAAKe,UAAY,EAEzCf,KAAKa,aAAa,QAAYb,KAAKiB,UAAR,KAAsBjB,KAAKe,UAAY,GAE9Df,KAAKoB,UAAYpB,KAAK6C,eAAc,GAAM7C,KAAKsB,YACjDtB,KAAK8C,yBAAwB,CAEjC,CAQAC,yBACE7B,EACA8B,EACAC,GAEID,IAAWC,IACbjD,KAAK2C,eAAc,EAGf3C,KAAKoC,YAAYc,UAAUC,SAAS,WAAW,KACjDnD,KAAKoC,YAAYc,UAAUE,OAAO,WAAW,EAC7CpD,KAAKqD,WAAWhB,cAAc,QAAQ,EAAGe,OAAM,EAC/CpD,KAAKC,eAAiB,CAAA,EAG5B,CAMQO,UAAU8C,EAAyB,CAAA,GACzC,GAAI,CAACtD,KAAKC,eAAgB,CAExB8B,IAAIwB,EAAWD,EAAyB,EAAI,EACtCE,EAAgBxD,KAAKuB,SAAW,YAAc,GACpDQ,IAAI0B,EAEFA,EADEzD,KAAKc,sCACkCd,KAAKc,cAE7Bd,KAAKS,QAAR,IAKZT,KAAKsB,YACPtB,KAAK0B,OAAS,iBAIZ1B,KAAK6C,eAAc,IACrB7C,KAAK0B,OAAS,6EAA6E1B,KAAKS,QAChG8C,EAAW,GAGPG;gDACoC1D,KAAKe;;4BAEzByC,eAA2BC,aAAuBF,KAAYvD,KAAK0B;YAEzF1B,KAAKoC,YAAYuB,mBAAmB,YAAaD,CAAU,EAC3D1D,KAAKoC,YAAYc,UAAUU,IAAI,WAAW,EAC1C5D,KAAKC,eAAiB,CAAA,EACtBD,KAAK6D,qBAAoB,EACzB7D,KAAK8D,cACH,IAAIC,YAAY,0BAA2B,CACzCC,OAAQ,CACNvD,QAAST,KAAKS,O,EAEhBwD,QAAS,CAAA,EACTC,WAAY,CAAA,C,CACb,CAAC,CAEN,CACF,CAKQtB,uBACN,IAAMuB,iCAA+CnE,KAAKS,WAAWT,KAAKwB,qBACpE4C,4BAA0CpE,KAAKS,WAAWT,KAAKwB,oBACrExB,KAAKsC,UAAUC,SAAS8B,QAAUrE,KAAKyB,cACvCzB,KAAKsC,UAAUE,KAAK8B,OAASH,EAC7BnE,KAAKsC,UAAUG,KAAK6B,OAASF,EAC7BpE,KAAKsC,UAAUC,SAASgC,IAAMH,EAC9BpE,KAAKsC,UAAUC,SAAS1B,aACtB,aACGb,KAAKiB,UAAR,KAAsBjB,KAAKe,UAAY,EAEzCf,KAAKsC,WAAWC,UAAU1B,aACxB,MACGb,KAAKiB,UAAR,KAAsBjB,KAAKe,UAAY,CAE3C,CAKQ+B,2BAOW,IAAI0B,qBAAqB,CAACC,EAASC,KAClDD,EAAQE,QAAQC,IACVA,EAAMC,gBAAkB,CAAC7E,KAAKC,iBAChCL,YAAYU,gBAAgBN,IAAI,EAChCA,KAAKQ,UAAU,CAAA,CAAI,EACnBkE,EAASI,UAAU9E,IAAI,EAE3B,CAAC,CACH,EAdgB,CACd+E,KAAM,KACNC,WAAY,MACZC,UAAW,C,CAWH,EAEDC,QAAQlF,IAAI,EAIjBA,KAAKsB,WACa,IAAIkD,qBACtB,CAACW,EAAGC,KACFD,EAAER,QAAQC,IACwB,IAA5BA,EAAMS,mBACRrF,KAAKqD,WACFhB,cAAc,QAAQ,GACrBiD,eAAeC,YACf,oDACA,GAAG,CAGX,CAAC,CACH,EACA,CAAEN,UAAW,CAAC,CAAE,EAENC,QAAQlF,IAAI,CAE5B,CAaQ6D,uBACF7D,KAAK6C,eAAc,GACrB2C,WAAW,KACTxF,KAAKqD,WACFhB,cAAc,QAAQ,GACrBiD,eAAeC,YACf,mDACA,GAAG,CAGT,EAAG,GAAI,CAEX,CAOQ1C,iBACN,MACiC,KAA/B7C,KAAKW,aAAa,OAAO,GACzBsB,OAAOwD,WAAW,mBAAmB,EAAEC,OAE3C,CAQQC,mBAAmBC,EAAcC,GACvC,IAAMC,EAAWC,SAASC,cAAc,MAAM,EAC9CF,EAASG,IAAML,EACfE,EAASI,KAAOL,EAChBC,EAASK,YAAc,OACvBJ,SAASK,KAAKC,OAAOP,CAAQ,CAC/B,CAYQxF,uBAAuBgG,GACzB1G,YAAY2G,gBAAkBtE,OAAOuE,4BAGzC5G,YAAY+F,YAAY,aAAc,sBAAsB,EAG5D/F,YAAY+F,YAAY,aAAc,qBAAqB,EAEtDW,EAAQ/E,SAgBX3B,YAAY+F,YAAY,aAAc,kCAAkC,GAbxE/F,YAAY+F,YAAY,aAAc,yBAAyB,EAG/D/F,YAAY+F,YAAY,aAAc,wBAAwB,EAI9D/F,YAAY+F,YACV,aACA,qCAAqC,EAEvC/F,YAAY+F,YAAY,aAAc,gCAAgC,GAKxE/F,YAAY2G,eAAiB,CAAA,EAG7BtE,OAAOuE,0BAA4B,CAAA,EACrC,C,CAlce5G,YAAA2G,eAAiB,CAAA,EAqclCE,eAAeC,OAAO,eAAgB9G,WAAW,SA9cpCA,WA8cqC","file":"lite-youtube.min.js","sourcesContent":["/**\n *\n * The shadowDom / Intersection Observer version of Paul's concept:\n * https://github.com/paulirish/lite-youtube-embed\n *\n * A lightweight YouTube embed. Still should feel the same to the user, just\n * MUCH faster to initialize and paint.\n *\n * Thx to these as the inspiration\n * https://storage.googleapis.com/amp-vs-non-amp/youtube-lazy.html\n * https://autoplay-youtube-player.glitch.me/\n *\n * Once built it, I also found these (👍👍):\n * https://github.com/ampproject/amphtml/blob/master/extensions/amp-youtube\n * https://github.com/Daugilas/lazyYT https://github.com/vb/lazyframe\n */\nexport class LiteYTEmbed extends HTMLElement {\n shadowRoot!: ShadowRoot;\n private domRefFrame!: HTMLDivElement;\n private domRefImg!: {\n fallback: HTMLImageElement;\n webp: HTMLSourceElement;\n jpeg: HTMLSourceElement;\n };\n private domRefPlayButton!: HTMLButtonElement;\n private static isPreconnected = false;\n private isIframeLoaded = false;\n\n constructor() {\n super();\n this.setupDom();\n }\n\n static get observedAttributes(): string[] {\n return ['videoid', 'playlistid', 'videoplay', 'videotitle'];\n }\n\n connectedCallback(): void {\n this.addEventListener(\n 'pointerover',\n () => LiteYTEmbed.warmConnections(this),\n {\n once: true,\n },\n );\n\n this.addEventListener('click', () => this.addIframe());\n }\n\n get videoId(): string {\n return encodeURIComponent(this.getAttribute('videoid') || '');\n }\n\n set videoId(id: string) {\n this.setAttribute('videoid', id);\n }\n\n get playlistId(): string {\n return encodeURIComponent(this.getAttribute('playlistid') || '');\n }\n\n set playlistId(id: string) {\n this.setAttribute('playlistid', id);\n }\n\n get videoTitle(): string {\n return this.getAttribute('videotitle') || 'Video';\n }\n\n set videoTitle(title: string) {\n this.setAttribute('videotitle', title);\n }\n\n get videoPlay(): string {\n return this.getAttribute('videoplay') || 'Play';\n }\n\n set videoPlay(name: string) {\n this.setAttribute('videoplay', name);\n }\n\n get videoStartAt(): string {\n return this.getAttribute('videoStartAt') || '0';\n }\n\n get autoLoad(): boolean {\n return this.hasAttribute('autoload');\n }\n\n get autoPause(): boolean {\n return this.hasAttribute('autopause');\n }\n\n get noCookie(): boolean {\n return this.hasAttribute('nocookie');\n }\n\n get posterQuality(): string {\n return this.getAttribute('posterquality') || 'hqdefault';\n }\n\n get posterLoading(): HTMLImageElement['loading'] {\n return (\n (this.getAttribute('posterloading') as HTMLImageElement['loading']) ||\n 'lazy'\n );\n }\n\n get params(): string {\n return `start=${this.videoStartAt}&${this.getAttribute('params')}`;\n }\n\n set params(opts: string) {\n this.setAttribute('params', opts);\n }\n\n /**\n * Define our shadowDOM for the component\n */\n private setupDom(): void {\n const shadowDom = this.attachShadow({ mode: 'open' });\n let nonce = '';\n if (window.liteYouTubeNonce) {\n nonce = `nonce=\"${window.liteYouTubeNonce}\"`;\n }\n shadowDom.innerHTML = `\n \n