@wistia/wistia-player 0.7.19 → 0.7.21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"wistia-player.js","mappings":"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CX;AACA;AACA,gCAAgC;AAChC,mCAAmC;AACnC;AACA;AACA,mBAAmB,UAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAiB;AACjB,yBAAe;AACf,SAAS,UAAW;AACpB,eAAe,UAAiB;AAChC,aAAa,UAAe;AAC5B,WAAW,UAAa;AACxB;;;;;;;;;;;;;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkE;AAClB;AAEzC,MAAM,KAAK,GAAG,CAAC;AACf,MAAM,OAAO,GAAG,CAAC;AACjB,MAAM,MAAM,GAAG,CAAC;AAChB,MAAM,IAAI,GAAG,CAAC;AACd,MAAM,KAAK,GAAG,CAAC;AACf,MAAM,UAAU,GAAG;EACxB,KAAK;EACL,OAAO;EACP,MAAM;EACN,IAAI;EACJ,KAAK;EACL,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,OAAO;EAChB,MAAM,EAAE,MAAM;EACd,IAAI,EAAE,IAAI;EACV,KAAK,EAAE;AACT,CAAC;AAED,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC;AAEpB,MAAM,MAAM,GAAG,UAAU,GAAG,EAAE;EACnC,MAAM,IAAI,GAAG,IAAI;EAEjB,IAAI,GAAG,IAAI,IAAI,EAAE;IACf,GAAG,GAAG,CAAC,CAAC;EACV;EAEA,MAAM,SAAS,GAAG,YAAY;IAC5B,IAAI,CAAC,GAAG,GAAG,GAAG;IACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;MAC3B,IAAI,CAAC,KAAK,CAAC,CAAC;IACd;EACF,CAAC;EAED,IAAI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ACrB,WAAW,GAAG;AACd,WAAW,OAAO;AAClB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,QAAQ,UAAU;AAC7B,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,kBAAkB;AAClB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA,+CAA+C,mBAAmB;AAClE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,WAAW;AACX;AACA,cAAc,QAAQ;AACtB,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,WAAW;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ,IAAI,QAAQ;AACjC;AACA;AACA;AACA,aAAa,QAAQ,IAAI,QAAQ;AACjC;AACA;AACA;AACA,WAAW,QAAQ,gBAAgB,IAAI,gBAAgB;AACvD;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,UAAU;AACvB;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA,YAAY,QAAQ,IAAI,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,GAAG;AAChB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACx7DA,IAAI,QAAQ;AACZ,IAAI;EACF,QAAQ,GAAG,IAAI,CAAC,CAAC;EACjB,IACE,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAC1B,OAAO,QAAQ,CAAC,IAAI,KAAK,WAAW,IACpC,OAAO,MAAM,KAAK,WAAW,EAC7B;IACA;IACA;IACA,QAAQ,GAAG,MAAM;EACnB;AACF,CAAC,CAAC,OAAO,GAAG,EAAE;EACZ,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IACrC,QAAQ,GAAG,UAAU,CAAC,CAAC;EACzB,CAAC,MAAM;IACL;IACA,QAAQ,GAAG,MAAM;EACnB;AACF;AAEO,MAAM,IAAI,GAAG,QAAQ,C;;;;;;;;;;;ACrBrB,MAAM,yBAAyB,GAAG,oDAAoD;AACtF,MAAM,eAAe,GAAG,0CAA0C;AAClE,MAAM,uBAAuB,GAAG,kDAAkD;AAClF,MAAM,oBAAoB,GAAG,yDAAyD,C;;;;;;;;ACH7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,qBAAM,gBAAgB,qBAAM,IAAI,qBAAM,sBAAsB,qBAAM;;AAE1F;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,KAA0B;;AAE5C;AACA,gCAAgC,QAAa;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB;AACA,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,QAAQ,UAAU;AAC7B,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA,wBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ,UAAU;AAC7B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,GAAG;AAChB;AACA;AACA;AACA,oBAAoB,QAAQ,IAAI,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,kBAAkB;AAClB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;ACntDA;AACA;;AAEO,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,KAAK;EACvC,IAAI,MAAM,CAAC,MAAM,EAAE;IACjB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;EACrC;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1B;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;EAChC,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;IAClB,kBAAkB,IAAI,EAAE,CAAC,GAAG;MAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACnB;EACF;EACA,OAAO,IA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","sources":["webpack://@wistia/wistia-player/../../src/utilities/script-utils.js","webpack://@wistia/wistia-player/../../src/utilities/performance.ts","webpack://@wistia/wistia-player/../../src/utilities/judy.js","webpack://@wistia/wistia-player/../../src/utilities/wistiaQueue.ts","webpack://@wistia/wistia-player/../../src/utilities/metrics.js","webpack://@wistia/wistia-player/../../src/utilities/obj.js","webpack://@wistia/wistia-player/../../src/appHostname.js","webpack://@wistia/wistia-player/../../src/utilities/mediaDataError.ts","webpack://@wistia/wistia-player/../../src/utilities/color-utils.ts","webpack://@wistia/wistia-player/../../src/utilities/simpleMetrics.js","webpack://@wistia/wistia-player/../../src/utilities/seqid.js","webpack://@wistia/wistia-player/../../src/utilities/runScript.js","webpack://@wistia/wistia-player/../../src/utilities/duration.ts","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/constants.ts","webpack://@wistia/wistia-player/../../node_modules/preact/compat/dist/compat.module.js","webpack://@wistia/wistia-player/../../src/utilities/core.js","webpack://@wistia/wistia-player/../../src/utilities/media_data.js","webpack://@wistia/wistia-player/../../src/utilities/svg_boilerplate.ts","webpack://@wistia/wistia-player/../../src/utilities/injectJsonLd.js","webpack://@wistia/wistia-player/../../src/utilities/unescape-html.js","webpack://@wistia/wistia-player/../../src/utilities/sentryUtils.ts","webpack://@wistia/wistia-player/../../src/utilities/url.js","webpack://@wistia/wistia-player/../../src/utilities/eventShepherd.ts","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/hooks/usePlayerData.tsx","webpack://@wistia/wistia-player/../../src/utilities/eventConstants.ts","webpack://@wistia/wistia-player/../../src/utilities/namespacedLocalStorage.js","webpack://@wistia/wistia-player/../../src/utilities/fetchMediaData.ts","webpack://@wistia/wistia-player/../../src/utilities/roundedPlayerDefaults.ts","webpack://@wistia/wistia-player/../../src/embeds/shared/ProgressiveThumbnail.jsx","webpack://@wistia/wistia-player/../../src/utilities/embedOptionStore.ts","webpack://@wistia/wistia-player/../../src/utilities/remote-data-cache.ts","webpack://@wistia/wistia-player/../../src/utilities/keyMoments.ts","webpack://@wistia/wistia-player/../../src/utilities/legacyLocalstorage.js","webpack://@wistia/wistia-player/../../src/utilities/timeout-utils.js","webpack://@wistia/wistia-player/../../node_modules/preact/hooks/dist/hooks.module.js","webpack://@wistia/wistia-player/../../src/utilities/extractEmailFromParams.ts","webpack://@wistia/wistia-player/../../src/utilities/media-data-transforms.js","webpack://@wistia/wistia-player/../../src/utilities/wistiaData.js","webpack://@wistia/wistia-player/../../src/utilities/globalBindAndTrigger.js","webpack://@wistia/wistia-player/../../src/utilities/fit-control.js","webpack://@wistia/wistia-player/../../src/utilities/gradients.ts","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/getPreferredLanguageIndex.ts","webpack://@wistia/wistia-player/../../src/utilities/image.js","webpack://@wistia/wistia-player/../../src/embeds/media/players/vulcanV2Player/shared/ui_components/BigPlayButtonLoadingAnim.tsx","webpack://@wistia/wistia-player/../../src/embeds/shared/translations.js","webpack://@wistia/wistia-player/../../src/utilities/trackingConsentApi.js","webpack://@wistia/wistia-player/../../src/utilities/camelCaseToKebabCase.ts","webpack://@wistia/wistia-player/../../src/utilities/wistiaLocalStorage.js","webpack://@wistia/wistia-player/../../node_modules/preact/dist/preact.module.js","webpack://@wistia/wistia-player/../../src/utilities/inferPageUrl.ts","webpack://@wistia/wistia-player/../../src/utilities/color.js","webpack://@wistia/wistia-player/../../src/wistia_namespace.ts","webpack://@wistia/wistia-player/../../src/utilities/getApiHandles.ts","webpack://@wistia/wistia-player/../../src/embeds/shared/Thumbnail.jsx","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/getInitialMediaData.ts","webpack://@wistia/wistia-player/../../src/utilities/hosts.js","webpack://@wistia/wistia-player/../../src/utilities/script-tags.js","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/PlayerDataHandler.ts","webpack://@wistia/wistia-player/../../node_modules/iso8601-duration/lib/index.js","webpack://@wistia/wistia-player/../../src/utilities/wlog.js","webpack://@wistia/wistia-player/../../src/embeds/media/players/vulcanV2Player/shared/ui_components/BigPlayButton.tsx","webpack://@wistia/wistia-player/../../src/utilities/dynamicImport.ts","webpack://@wistia/wistia-player/../../src/utilities/assets.js","webpack://@wistia/wistia-player/../../src/utilities/shouldEnableMux.ts","webpack://@wistia/wistia-player/../../src/utilities/iso8601Helper.ts","webpack://@wistia/wistia-player/../../src/utilities/detect.js","webpack://@wistia/wistia-player/../../src/utilities/coinFlip.ts","webpack://@wistia/wistia-player/../../src/types/gradient.ts","webpack://@wistia/wistia-player/../../src/utilities/viewerPreferences.js","webpack://@wistia/wistia-player/../../src/utilities/elem.js","webpack://@wistia/wistia-player/../../src/embeds/media/players/vulcanV2Player/shared/ui_components/svgs/BigPlayButtonSVG.tsx","webpack://@wistia/wistia-player/../../node_modules/lodash.merge/index.js","webpack://@wistia/wistia-player/../../src/utilities/root.js","webpack://@wistia/wistia-player/../../src/utilities/interFontFamily.js","webpack://@wistia/wistia-player/../../node_modules/lodash.clonedeep/index.js","webpack://@wistia/wistia-player/../../src/utilities/assign.js","webpack://@wistia/wistia-player/../../src/utilities/bindify.js","webpack://@wistia/wistia-player/../../src/utilities/normalizeChapters.ts","webpack://@wistia/wistia-player/../../src/utilities/wbindable.js","webpack://@wistia/wistia-player/../../src/utilities/wistiaOptions.ts","webpack://@wistia/wistia-player/../../src/utilities/pageLoaded.js","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/components/PreloadThumbnail.tsx","webpack://@wistia/wistia-player/../../node_modules/@wistia/type-guards/dist/index.mjs","webpack://@wistia/wistia-player/webpack/bootstrap","webpack://@wistia/wistia-player/webpack/runtime/compat get default export","webpack://@wistia/wistia-player/webpack/runtime/define property getters","webpack://@wistia/wistia-player/webpack/runtime/global","webpack://@wistia/wistia-player/webpack/runtime/hasOwnProperty shorthand","webpack://@wistia/wistia-player/webpack/runtime/make namespace object","webpack://@wistia/wistia-player/webpack/runtime/node module decorator","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/WistiaPlayer.tsx"],"sourcesContent":["import { wlog } from 'utilities/wlog.js';\nimport { isObject } from 'utilities/obj.js';\nimport { runScript as runScriptWithPromise } from 'utilities/runScript.js';\n\nexport const findScriptInDomBySrc = (targetSrc, options = {}) => {\n const scriptTags = document.getElementsByTagName('script');\n for (let i = 0; i < scriptTags.length; i++) {\n const s = scriptTags[i];\n let src = s.getAttribute('src') || '';\n\n if (options.ignoreQueryParams) {\n let matches = src.split('?');\n let urlWithoutParams = matches[0];\n src = urlWithoutParams;\n }\n\n if (!options.scriptRegex && options.ignoreProtocol) {\n src = src.replace(/^https?:/, '');\n targetSrc = targetSrc.replace(/^https?:/, '');\n }\n\n if (options.scriptRegex && options.scriptRegex.test(src)) {\n return s;\n }\n if (options.testStartsWith && src.indexOf(targetSrc) === 0) {\n return s;\n }\n if (src === targetSrc) {\n return s;\n }\n }\n return null;\n};\n\nexport const removeScriptsBySrc = (targetSrc, options = {}) => {\n let s;\n while ((s = findScriptInDomBySrc(targetSrc, options))) {\n if (s) {\n s.onload = s.onreadystatechange = s.onerror = null;\n if (s.parentNode && typeof s.parentNode.removeChild) {\n try {\n s.parentNode.removeChild(s);\n } catch (e) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n }\n }\n }\n};\n\n// fire and forget.\n// run a script and immediately remove it from the DOM.\nexport const runScript = (src, timeout = 8000, options = {}) => {\n if (timeout == null) {\n timeout = 8000;\n }\n if (options == null) {\n options = {};\n }\n let s;\n let alreadyExists;\n\n return new Promise((resolve) => {\n if (options.once === true && (s = findScriptInDomBySrc(src))) {\n alreadyExists = true;\n }\n\n if (options.once && alreadyExists) {\n if (!s.readyState || /loaded|complete/.test(s.readyState)) {\n setTimeout(() => {\n resolve();\n }, 1);\n }\n } else {\n runScriptWithPromise(src, timeout)\n .then(resolve)\n .catch((msg) => {\n resolve(msg);\n setTimeout(() => {\n console.error(msg);\n }, 1);\n });\n }\n });\n};\n\nexport const runScripts = (...args) => {\n // support either an array of scripts or a single script as a string\n let scripts;\n if (args[0] instanceof Array) {\n scripts = args[0];\n } else {\n scripts = args;\n }\n\n scripts = scriptInputsToHash(scripts);\n\n const asyncScripts = [];\n const syncScripts = [];\n const scriptPromises = [];\n\n scripts.forEach((s) => {\n const script = { ...s };\n const p = new Promise((resolve) => {\n script.resolve = resolve;\n });\n\n script.promise = p;\n\n scriptPromises.push(script.promise);\n\n if (s.async) {\n asyncScripts.push(script);\n } else {\n syncScripts.push(script);\n }\n });\n\n syncScripts.reduce((prev, script) => {\n if (script.fn) {\n try {\n script.fn();\n } catch (e) {\n wlog.error(e);\n } finally {\n script.resolve();\n }\n } else if (script.src) {\n runScript(script.src, null, script).then(script.resolve);\n }\n\n return prev.then(script.promise);\n }, Promise.resolve());\n\n setTimeout(() => {\n asyncScripts.forEach((script) => {\n if (script.fn) {\n try {\n script.fn();\n } catch (e) {\n wlog.error(e);\n } finally {\n script.resolve();\n }\n } else if (script.src) {\n runScript(script.src, null, script).then(script.resolve);\n }\n });\n }, 1);\n\n return Promise.all(scriptPromises);\n};\n\nexport const scriptInputsToHash = (scripts) => {\n const result = [];\n for (let i = 0; i < scripts.length; i++) {\n let script = scripts[i];\n if (typeof script === 'string') {\n result.push({ src: script, async: false });\n } else if (isObject(script)) {\n result.push(script);\n } else {\n result.push({ fn: script, async: false });\n }\n }\n return result;\n};\n","export const hasPerformanceMeasureSupport = (): boolean => {\n const { performance } = window;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return Boolean(performance) && Boolean(performance.measure);\n};\n","import { cast, clone, except, getDeep, indexOf, merge } from 'utilities/obj.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { count } from 'utilities/metrics.js';\nimport { setOrGet as wlocalstorage } from 'utilities/legacyLocalstorage.js';\nimport { root } from 'utilities/root.js';\nimport { wlog as wlogRaw } from 'utilities/wlog.js';\nimport {\n filter,\n READY,\n readyPublicMp4s,\n readyPublicM3u8s,\n readyPublicMp3s,\n nonfailedPublicOver400,\n readyPublicOver400,\n} from './assets.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst wlog = wlogRaw.getPrefixedFunctions('judy');\n\nconst AUTO = 'auto';\nconst CAROUSEL_HARD_WALL = 'carouselHardWall';\nconst EXTERNAL = 'external';\nconst HLS_VIDEO = 'hlsVideo';\nconst HTML5 = 'html5';\nconst MANUAL_QUALITY_VIDEO = 'manualQualityVideo';\nconst NATIVE_HLS_VIDEO = 'nativeHlsVideo';\nconst NOT_PLAYABLE = 'notplayable';\nconst PASSWORD_PROTECTED = 'passwordprotected';\nconst SIMPLE_HTML5 = 'simplehtml5';\nconst VULCAN_V2 = 'vulcan-v2';\nconst SPHERICAL_VIDEO = 'sphericalVideo';\nconst PLAYERS = [VULCAN_V2, HTML5, SIMPLE_HTML5, EXTERNAL, NOT_PLAYABLE, PASSWORD_PROTECTED];\n\nexport const HLS_ENGINE_PATH = 'engines/hls_video.js';\nexport const NATIVE_HLS_ENGINE_PATH = 'engines/native_hls_video.js';\nexport const SIMPLE_AUDIO_ENGINE_PATH = 'engines/simple_audio.js';\nexport const MANUAL_QUALITY_ENGINE_PATH = 'engines/manual_quality_video.js';\nexport const SPHERICAL_VIDEO_ENGINE_PATH = 'engines/spherical_video.js';\n\nexport const PLUGIN_CONFIGS = {\n notPlayableVideo: {\n on: true,\n initBeforeHasData: true,\n async: false,\n loadWeight: -1,\n },\n vulcanV2Player: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n hlsVideo: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: 0,\n },\n nativeHlsVideo: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: 0,\n },\n passwordProtectedVideo: {\n on: true,\n initBeforeHasData: true,\n async: false,\n loadWeight: -1,\n },\n externalPlayer: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n html5Player: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n playlist: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n};\n\nexport const bestPlayer = (context, mediaData, embedOptions) => {\n const { detect, logger } = context;\n\n const isSpherical = isSphericalVideo({ mediaData, options: embedOptions }, detect);\n\n if (detect.oldandroid) {\n logger.info('external on old android');\n return EXTERNAL;\n }\n if (canUsePlayer(context, VULCAN_V2, mediaData)) {\n logger.info('default, ret', VULCAN_V2);\n return VULCAN_V2;\n }\n if (mediaData.mediaType === 'Audio' || mediaData.mediaType === 'LiveStream') {\n // audio and lives are only supported with vulcan_v2\n return VULCAN_V2;\n }\n if (canUsePlayer(context, HTML5, mediaData)) {\n logger.info('default, ret', HTML5);\n return HTML5;\n }\n logger.info('nothing left, use', EXTERNAL);\n // Everything supports external, but nobody likes it. It's just an image\n // and a link to an mp4 file.\n return EXTERNAL;\n};\n\nexport const bestUsableEngine = (context, mediaData, options = {}) => {\n const { detect, logger } = context;\n logger.info('bestUsableEngineClass');\n const allowHls = shouldServeHls(context, mediaData, options);\n\n const isSpherical = isSphericalVideo(\n {\n mediaData,\n options,\n },\n detect,\n );\n\n if (options.engine) {\n return options.engine;\n }\n\n if (isSpherical) {\n logger.info(SPHERICAL_VIDEO);\n return SPHERICAL_VIDEO_ENGINE_PATH;\n }\n\n if (mediaData.mediaType === 'Audio') {\n return SIMPLE_AUDIO_ENGINE_PATH;\n }\n\n // If managedMediaSource is false or restricted by same origin (often iframes), we need to use the native hls video engine\n // Otherwise, we can use the hls.js in Safari\n const isApple = detect.safari || detect.ios.version > 0;\n const allowsSameOrigin = window.origin !== 'null';\n const restrictedBySameOrigin = isApple && !allowsSameOrigin;\n if (\n allowHls &&\n detect.nativeHls &&\n (detect.managedMediaSource === false || restrictedBySameOrigin)\n ) {\n logger.info(NATIVE_HLS_VIDEO);\n return NATIVE_HLS_ENGINE_PATH;\n }\n\n if (allowHls) {\n logger.info(HLS_VIDEO);\n return HLS_ENGINE_PATH;\n }\n\n logger.info(MANUAL_QUALITY_VIDEO);\n return MANUAL_QUALITY_ENGINE_PATH;\n};\n\n// Given a media data blob and options--and assuming all engine scripts have\n// been loaded--return the engine class that we should initialize.\nexport const bestUsableEngineClass = (context, mediaData, options = {}) => {\n const { detect, logger } = context;\n logger.info('bestUsableEngineClass');\n const allowHls = shouldServeHls(context, mediaData, options);\n\n const engines = Wistia.engines || {};\n\n if (mediaData.mediaType === 'Audio') {\n return engines.SimpleAudio;\n }\n\n if (allowHls && detect.nativeHls && engines.NativeHlsVideo) {\n logger.info(NATIVE_HLS_VIDEO);\n return engines.NativeHlsVideo;\n }\n\n if (allowHls && engines.HlsVideo) {\n logger.info(HLS_VIDEO);\n return engines.HlsVideo;\n }\n\n logger.info(MANUAL_QUALITY_VIDEO);\n return engines.ManualQualityVideo;\n};\n\nexport const buildContext = (overrides = {}) => {\n const pageUrl = contextUrl(overrides);\n return { ...getDefaultContext(), ...overrides, pageUrl };\n};\n\nexport const canPlayInline = (context) => {\n const { detect } = context;\n return detect.android || detect.ios.version >= 10;\n};\n\nexport const canUsePlayer = (context, player, mediaData) => {\n return isSupportedPlayer(context, player) && hasAssetsForPlayer(context, player, mediaData);\n};\n\nexport const choosePlayer = (context, mediaData, embedOptions) => {\n const { detect } = context;\n const { logger } = context;\n let { playerForce } = embedOptions;\n\n logger.info('choosePlayer input', mediaData.hashedId);\n\n // This can be falsey if there is no specific player preference. Users may\n // also pass in \"auto\" to be explicit, which means there should be no\n // preference.\n let playerPreference = determinePlayerPreferenceFromInput(context, mediaData, embedOptions);\n\n // Loudly error but don't die if given invalid input.\n if (playerForce && !isValidPlayer(context, playerForce)) {\n logger.error(`Invalid playerForce option: \"${playerForce}\", ignoring`);\n playerForce = null;\n }\n if (playerPreference && playerPreference !== AUTO && !isValidPlayer(context, playerPreference)) {\n logger.error(`Invalid playerPreference option: \"${playerPreference}\", ignoring`);\n playerPreference = AUTO;\n }\n\n logger.info('playerPreference is', playerPreference);\n\n if (playerForce) {\n // This is really only used when testing.\n logger.info('\"playerForce\" used, return', playerForce);\n return playerForce;\n }\n // A carousel can contain a password-protected media which should be unlocked\n // when the carousel is unlocked, so this check should always\n // come before the check to see if a media is password-protected\n if (mediaData.carouselHardWall) {\n logger.info('return', CAROUSEL_HARD_WALL);\n return CAROUSEL_HARD_WALL;\n }\n if (isPasswordProtected(context, embedOptions)) {\n // the video is marked as being password protected. it's expected that the\n // password protected player, upon a successful password entry, changes an\n // option and is replaced such that isPasswordProtected() returns false.\n logger.info('return', PASSWORD_PROTECTED);\n return PASSWORD_PROTECTED;\n }\n if (isNotPlayable(context, mediaData, embedOptions)) {\n // 1. We can generate embed codes before a video can actually be played. If we\n // can't field any kind of player, we want to embed NOT_PLAYABLE instead,\n // which shows upload and encoding progress, then re-embeds as a \"real\"\n // player once it reaches 100%.\n // 2. DRM-lite customers must include their `authorization` credentials as embedOptions. If we know\n // a media is \"protected\", but there are no authorization credentials for the embed, we can build\n // directly into the NotPlayablePlayer state.\n // 3. DRM-lite customers that either do not have HLS enabled or cannot use HLS\n // will reach a NOT_PLAYABLE state.\n logger.info('return', NOT_PLAYABLE);\n return NOT_PLAYABLE;\n }\n\n // DRM-lite medias are marked as \"protected\". And those medias must be played back using our\n // VULCAN_V2 player.\n if (mediaData.protected) {\n return VULCAN_V2;\n }\n\n if (playerPreference !== AUTO && canUsePlayer(context, playerPreference, mediaData)) {\n const isSpherical = isSphericalVideo({ mediaData, options: embedOptions }, detect);\n if (playerPreference !== VULCAN_V2 && isSpherical) {\n logger.info(\"this player doesn't support spherical, return\", VULCAN_V2);\n return VULCAN_V2;\n }\n // Hooray! The customer has chosen a preference that we can actually use.\n // Let's use it.\n logger.info('\"playerPreference\" used, return', playerPreference);\n return playerPreference;\n }\n // Okay, we are not being compelled to use any particular player. Choose\n // the best one that we can support.\n logger.info('choosing player with no preference');\n return bestPlayer(context, mediaData, embedOptions);\n};\n\n// return the url to use for building up the Judy context.\nconst contextUrl = (opts = {}) => {\n if (opts.pageUrl) {\n return opts.pageUrl;\n }\n\n if (Object(window.FreshUrl).originalUrl) {\n return window.FreshUrl.originalUrl;\n }\n\n if (window.top === window.self) {\n return location.href || '';\n }\n\n return document.referrer || '';\n};\n\nexport const determinePlayerPreferenceFromInput = (context, mediaData, embedOptions) => {\n // platformPreference is a legacy option. It used to have difference\n // semantics as playerPreference, but let's treat it the same now.\n const playerPreference = embedOptions.playerPreference || embedOptions.platformPreference;\n\n if (playerPreference && playerPreference !== AUTO) {\n if (playerPreference === HTML5) {\n if (isMobile(context)) {\n return HTML5;\n }\n return VULCAN_V2;\n }\n if (playerPreference === SIMPLE_HTML5) {\n // Because \"html5\" is an overloaded term on desktop, we add this other one\n // so we can more easily test the simple/mobile html5 player.\n return HTML5;\n }\n return playerPreference;\n }\n // no preference was specified\n return AUTO;\n};\n\n// the browser can support hlsjs or native HLS\nexport const doesBrowserSupportHlsTools = (detect) => {\n const hasPromise = Boolean(window.Promise);\n\n return (detect.mediaSource || detect.nativeHls) && hasPromise;\n};\n\n// Given a media data blob and options, return _all_ engines and sub-engines\n// that will need to be loaded. This is how we determine which scripts to load.\nexport const enginesToLoad = (context, mediaData, options = {}) => {\n const { detect, logger } = context;\n let engineNames = [];\n\n logger.info('enginesToLoad');\n\n const allowHls = shouldServeHls(context, mediaData, options);\n if (allowHls && detect.nativeHls) {\n logger.info(NATIVE_HLS_VIDEO);\n engineNames.push(NATIVE_HLS_VIDEO);\n } else if (allowHls) {\n logger.info(HLS_VIDEO);\n engineNames.push(HLS_VIDEO);\n } else {\n logger.info(MANUAL_QUALITY_VIDEO);\n engineNames.push(MANUAL_QUALITY_VIDEO);\n }\n\n const isSpherical = isSphericalVideo({ mediaData, options }, detect);\n\n if (isSpherical) {\n engineNames.push(SPHERICAL_VIDEO);\n logger.info(SPHERICAL_VIDEO);\n }\n\n // Make sure engine names are unique in this array.\n const tmpHash = {};\n engineNames.forEach((engineName) => {\n tmpHash[engineName] = true;\n });\n const result = [];\n for (let engineName in tmpHash) {\n result.push(engineName);\n }\n\n return result;\n};\n\nlet cachedDefaultContext;\nexport const getDefaultContext = () => {\n if (cachedDefaultContext) {\n return cachedDefaultContext;\n }\n\n cachedDefaultContext = {\n detect: clone(cachedDetect()),\n inIframe: top !== self,\n location: window.location,\n logger: wlog,\n pageUrl: location.href,\n silenceGlobalWarnings: root.wistiaSilenceGlobalWarnings,\n userAgent: navigator.userAgent,\n };\n\n return cachedDefaultContext;\n};\n\nconst getPluginConfig = (context, pluginName) => {\n const result = {};\n result[pluginName] = PLUGIN_CONFIGS[pluginName];\n return result;\n};\n\nconst canUseInstantHls = (context, mediaData, embedOptions = {}) => {\n return (\n embedOptions.instantHls !== false &&\n mediaData.instantHlsAssetsReady &&\n shouldServeHls(context, mediaData, embedOptions)\n );\n};\n\nconst canUseOriginalFilePlayback = (context, mediaData, embedOptions = {}) => {\n return (\n mediaData.originalIsEligibleForDirectPlayback &&\n shouldServeHls(context, mediaData, embedOptions)\n );\n};\n\nexport const hasAssetsForPlayer = (context, player, mediaData) => {\n if (!isValidPlayer(context, player)) {\n return false;\n }\n\n if (player === NOT_PLAYABLE || player === PASSWORD_PROTECTED || player === CAROUSEL_HARD_WALL) {\n // No special asset requirements for these.\n return true;\n }\n\n const { assets } = mediaData;\n\n if (player === VULCAN_V2) {\n return (\n canUseInstantHls(context, mediaData) ||\n canUseOriginalFilePlayback(context, mediaData) ||\n hasReadyVideoAssets(assets) ||\n hasReadyAudioAssets(assets)\n );\n }\n if (player === HTML5) {\n return readyPublicMp4s(assets).length > 0;\n }\n if (player === EXTERNAL) {\n return readyPublicMp4s(assets).length > 0;\n }\n throw new Error(`Unhandled player type '${player}'`);\n};\n\nconst hasReadyVideoAssets = (assets) => {\n return readyPublicMp4s(assets).length > 0 || readyPublicM3u8s(assets).length > 0;\n};\n\nconst hasReadyAudioAssets = (assets) => {\n return readyPublicMp3s(assets).length > 0;\n};\n\nexport const hasEnoughReadyMp4Assets = (assets) => {\n const mp4Assets = filter(assets, {\n container: 'mp4',\n metadata: (m) => {\n return m && m.max_bitrate;\n },\n public: true,\n sortBy: 'width desc',\n status: READY,\n type: /\\b(?!captioned_video)\\S+/, // no burned in captions\n });\n\n // ensure that we have at least one asset at or above 400 width. This prevents\n // using HLS from using too low quality an asset, say in the scenario where\n // the other assets are still being processed.\n const hasAssetWithBitRateAndSize = Boolean(mp4Assets[0] && mp4Assets[0].width >= 400);\n return hasAssetWithBitRateAndSize;\n};\n\nexport const hasSupportedHlsAssets = (mediaData, options = {}) => {\n if (options.instantHls !== false && mediaData.instantHlsAssetsReady) {\n return true;\n }\n if (mediaData.originalIsEligibleForDirectPlayback) {\n return true;\n }\n const hasAssets = hasEnoughReadyMp4Assets(mediaData.assets);\n if (!hasAssets) {\n count('player/originV2/media-has-no-metadata', 1, { hashedId: mediaData.hashedId });\n }\n return hasAssets;\n};\n\nconst hlsOverrideValue = ({ pageUrl }, embedOptions) => {\n const paramVal = hlsQueryParamValue(pageUrl);\n if (paramVal != null) {\n return paramVal;\n }\n\n const localStorageVal = wlocalstorage('forceHls');\n if (localStorageVal != null) {\n return localStorageVal;\n }\n\n return embedOptions.hls;\n};\n\nconst hlsQueryParamValue = (pageUrl) => {\n const match = pageUrl && pageUrl.match && pageUrl.match(/[&?]whls=([^&]+)/);\n const val = match && match[1];\n if (val != null) {\n return cast(val);\n }\n return null;\n};\n\n// Chromecast doesn't work with hlsjs because it only understands a src\n// that can be referenced externally. And playsinline=false or\n// nativeMode=true is our signal to use something close to a native player.\nexport const isBrowserInNativeAndroid = (detect, embedOptions) => {\n return detect.android && (embedOptions.playsinline === false || embedOptions.nativeMode === true);\n};\n\n// chrome 49 and earlier (the last supported version on Win XP/Vista) does\n// not support MSE well enough for hls.js.\nexport const isBrowserOldChrome = (detect) => {\n return detect.chrome && parseInt(detect.chrome.version, 10) < 50;\n};\n\nexport const isHlsEnabled = (context, mediaData, embedOptions) => {\n // always prefer the hls override value if it is present, regardless of the\n // hls_enabled value\n const overrideValue = hlsOverrideValue(context, embedOptions);\n if (overrideValue === true || overrideValue === false) {\n return overrideValue;\n }\n\n if (mediaData.hls_enabled === false) {\n return false;\n }\n return true;\n};\n\nexport const isMobile = ({ detect }) => {\n return detect.iphone || detect.ipad || detect.android;\n};\n\nexport const isNotPlayable = (context, mediaData, embedOptions = {}) => {\n const { assets } = mediaData;\n\n if (\n !mediaData.protected &&\n (canUseInstantHls(context, mediaData, embedOptions) ||\n canUseOriginalFilePlayback(context, mediaData, embedOptions))\n ) {\n return false;\n }\n\n const assetsArentReady =\n mediaData.type === 'Audio'\n ? readyPublicMp3s(assets).length == 0\n : readyPublicMp4s(assets).length == 0;\n\n // LiveStreams won't have ready assets, but that does not mean we're in an\n // unplayable position.\n if (mediaData.mediaType === 'LiveStream') {\n return false;\n }\n\n // DRM-lite authorization check!\n // For DRM-lite, customers must include their `authorization` credentials as embedOptions. If we know\n // a media is \"protected\", but there are no authorization credentials for the embed, we can build\n // directly into the NotPlayablePlayer state.\n if (mediaData.protected && !embedOptions.authorization?.jwt) {\n embedOptions.notPlayableOptions = {\n fadeIn: false,\n message: 'This video is set to private.',\n shouldRefresh: false,\n };\n\n return true;\n }\n\n const allowHls = shouldServeHls(context, mediaData, embedOptions);\n if (mediaData.protected && allowHls === false) {\n embedOptions.notPlayableOptions = {\n fadeIn: false,\n message: 'This video is not playable.',\n shouldRefresh: false,\n };\n\n return true;\n }\n\n return (\n assets.length === 0 ||\n (assets.length === 1 && assets[0].type === 'original') ||\n assetsArentReady ||\n (nonfailedPublicOver400(assets).length > 0 && readyPublicOver400(assets).length === 0)\n );\n};\n\nexport const isPasswordProtected = (context, embedOptions) => {\n const pluginOpts = getDeep(embedOptions, 'plugin.passwordProtectedVideo');\n return pluginOpts != null && pluginOpts.on !== false;\n};\n\nconst isSphericalVideo = (mediaInfo = {}) => {\n if (mediaInfo.options.overrideSpherical) {\n return false;\n }\n\n const mediaDataSpherical = String(mediaInfo.mediaData?.spherical);\n const optsSpherical = String(mediaInfo.opts?.spherical);\n\n return mediaDataSpherical === 'true' || optsSpherical === 'true';\n};\n\nexport const isSupportedPlayer = (context, player) => {\n if (!isValidPlayer(context, player)) {\n return false;\n }\n return indexOf(supportedPlayers(context), player) >= 0;\n};\n\nexport const isValidPlayer = (context, player) => {\n return indexOf(PLAYERS, player) >= 0;\n};\n\nexport const logWarnings = (context) => {\n const { detect, userAgent, logger, silenceGlobalWarnings } = context;\n\n if (silenceGlobalWarnings) {\n // Customers can set window.wistiaSilenceGlobalWarnings = true, and that\n // will be included in the default judy context.\n return;\n }\n\n const isHeadless = /phantomjs/i.test(userAgent);\n if (xhrHasBeenTamperedWith()) {\n if (!isHeadless) {\n logger.error(\n 'The XMLHttpRequest constructor has been tampered with. Because this affects CORS/Range XHR requests, HLS playback has been disabled. To enable HLS playback and other important features, please remove code that changes the definition of window.XMLHttpRequest.',\n );\n }\n }\n\n if (urlHasBeenTamperedWith()) {\n if (detect.mediaSource && !isHeadless) {\n logger.error(\n 'window.URL.createObjectURL has been tampered with. Because this affects use of Media Source Extensions, HLS playback has been disabled. window.URL is a browser API that should not be clobbered. Its current value is:',\n window.URL,\n );\n }\n }\n};\n\nexport const playerPlugins = (context, player, mediaData, embedOptions) => {\n const { logger } = context;\n const plugins = {};\n\n logger.info('playerPlugins input', player, mediaData.hashedId, mediaData, embedOptions);\n\n if (player === NOT_PLAYABLE) {\n merge(plugins, getPluginConfig(context, 'notPlayableVideo'));\n } else if (player === PASSWORD_PROTECTED) {\n merge(plugins, getPluginConfig(context, 'passwordProtectedVideo'));\n } else if (player === HTML5) {\n merge(plugins, getPluginConfig(context, 'html5Player'));\n } else if (player === EXTERNAL) {\n merge(plugins, getPluginConfig(context, 'externalPlayer'));\n } else if (player === VULCAN_V2) {\n merge(plugins, getPluginConfig(context, 'vulcanV2Player'));\n }\n\n const pluginNames = [];\n for (let k in plugins) {\n pluginNames.push(k);\n }\n logger.info('playerPlugins output', ...pluginNames, plugins);\n\n return plugins;\n};\n\nexport const report = (context, mediaData, embedOptions) => {\n return {\n bestPlayer: bestPlayer(context, mediaData, embedOptions),\n playerPreferenceFromInput: determinePlayerPreferenceFromInput(context, mediaData, embedOptions),\n supportedPlayers: supportedPlayers(context),\n usablePlayers: usablePlayers(context, mediaData.assets),\n };\n};\n\nexport const shouldServeHls = (context, mediaData, embedOptions) => {\n // start by forcing HLS when the type is livestream, but later\n // refactor things such that NotPlayablePlayer is used if we can't handle\n // live\n if (mediaData.type === 'LiveStream') {\n return true;\n }\n const { detect } = context;\n return (\n doesBrowserSupportHlsTools(detect) &&\n !isBrowserOldChrome(detect) &&\n !isBrowserInNativeAndroid(detect, embedOptions) &&\n // the account has hls enabled or explicitly trying to force\n isHlsEnabled(context, mediaData, embedOptions) &&\n // the media actually has desktop assets compatable with the delivery system\n hasSupportedHlsAssets(mediaData) &&\n // Some sites completely replace the XMLHttpRequest constructor with one\n // that doesn't work with hls.js. If we detect that, don't use HLS\n // (...unless we explicitly say to try it.)\n ((!xhrHasBeenTamperedWith(context) && !urlHasBeenTamperedWith(context)) ||\n hlsOverrideValue(context, embedOptions))\n );\n};\n\nexport const supportedPlayers = (context) => {\n const { detect } = context;\n const result = [NOT_PLAYABLE, PASSWORD_PROTECTED, EXTERNAL, CAROUSEL_HARD_WALL];\n\n if (detect.vulcanV2Support) {\n result.push(VULCAN_V2);\n }\n\n if (detect.video.h264) {\n result.push(HTML5);\n }\n\n return result;\n};\n\nexport const usablePlayers = (context, mediaData) => {\n const result = [];\n const candidates = supportedPlayers(context);\n for (let i = 0; i < candidates.length; i++) {\n let player = candidates[i];\n if (canUsePlayer(context, player, mediaData)) {\n result.push(player);\n }\n }\n return result;\n};\n\n// `URL` is a built-in type, but a lot sites accidentally clobber it like\n// `URL = location.href`. hls.js uses it though.\nexport const urlHasBeenTamperedWith = () => {\n return typeof (window.URL && window.URL.createObjectURL) !== 'function';\n};\n\n// `XMLHttpRequest.prototype.constructor.toString()` should be of this form if it's untampered with\nconst XMLHTTPREQUEST_CONSTRUCTOR_RE =\n /\\s*function\\s+XMLHttpRequest\\(\\)\\s*{\\s*\\[native code\\]\\s*}\\s*/m;\n// Oddly, safari 9.x seems to display this in the [object ...] form.\nconst XMLHTTPREQUEST_CONSTRUCTOR_IN_SAFARI_9_RE = /\\[object XMLHttpRequestConstructor\\]/m;\n\nexport const xhrHasBeenTamperedWith = () => {\n if (XMLHttpRequest && XMLHttpRequest.prototype && XMLHttpRequest.prototype.constructor) {\n const constructorString = XMLHttpRequest.prototype.constructor.toString();\n return !(\n XMLHTTPREQUEST_CONSTRUCTOR_RE.test(constructorString) ||\n XMLHTTPREQUEST_CONSTRUCTOR_IN_SAFARI_9_RE.test(constructorString)\n );\n }\n return true;\n};\n","import { Wistia } from '../wistia_namespace.ts';\nimport type { WistiaGlobal } from '../types/player-api-types.ts';\n\nconst QUEUE_INTERVAL = 500;\n\nlet wistiaQueue = null as unknown as NodeJS.Timeout | null;\n\n/**\n * Periodically checks the Wistia queue and executes the functions in it\n * @returns {void}\n */\nexport const maybeStartWistiaQueue = (): void => {\n if (wistiaQueue) {\n return;\n }\n\n wistiaQueue = setInterval(() => {\n // Bail if window is gone (e.g., jsdom torn down between vitest tests\n // while the interval is still alive in Node). Without this, the timer\n // fires \"ReferenceError: window is not defined\" and breaks the test run.\n if (typeof window === 'undefined') {\n return;\n }\n const queue = window._wq;\n if (!queue || queue.length === 0) {\n return;\n }\n\n queue.slice(0).forEach((item) => {\n if (typeof item === 'function') {\n item(Wistia as unknown as WistiaGlobal);\n queue.splice(queue.indexOf(item), 1);\n } else if (!Wistia.flushInitQueue) {\n queue.splice(queue.indexOf(item), 1);\n // eslint-disable-next-line no-console\n console.warn(\n `<wistia-player> elements must be configured via window.wistiaOptions instead of window._wq. Config not applied`,\n item,\n );\n }\n });\n }, QUEUE_INTERVAL);\n};\n\n/**\n * Stops the Wistia queue\n * @returns {void}\n */\nexport const stopWistiaQueue = (): void => {\n if (wistiaQueue) {\n clearInterval(wistiaQueue);\n wistiaQueue = null;\n }\n};\n","import { doTimeout } from 'utilities/timeout-utils.js';\nimport { wlog } from 'utilities/wlog.js';\nimport { merge } from 'utilities/obj.js';\nimport { pageLoaded } from 'utilities/elem.js';\nimport { proto as urlProto } from 'utilities/url.js';\nimport { metricsHost } from 'utilities/hosts.js';\nimport { isVisitorTrackingEnabled } from 'utilities/trackingConsentApi.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst W = Wistia;\n\nif (Wistia._metricsCache == null) {\n Wistia._metricsCache = {};\n}\n\nconst METRICS_CACHE = Wistia._metricsCache;\n\nexport const send = (type, key, val, extraData = {}) => {\n try {\n if (METRICS_CACHE.toMput == null) {\n METRICS_CACHE.toMput = [];\n }\n if (METRICS_CACHE.requestId == null) {\n METRICS_CACHE.requestId = 0;\n }\n\n const messageObj = merge(\n {\n type,\n key,\n value: val != null ? val : null,\n request_id: METRICS_CACHE.requestId,\n },\n extraData,\n );\n\n const serialized = JSON.stringify(messageObj);\n wlog.debug('send metrics', serialized);\n METRICS_CACHE.toMput.push(serialized);\n\n doTimeout(\n 'metrics.debounce',\n () => {\n pageLoaded(() => {\n msend.apply(this, METRICS_CACHE.toMput);\n METRICS_CACHE.toMput = [];\n METRICS_CACHE.requestId += 1;\n });\n },\n 500,\n );\n } catch (e) {\n wlog.error(e);\n }\n};\n\nexport const msend = (...messages) => {\n if (!isVisitorTrackingEnabled()) {\n return;\n }\n const url = `${urlProto()}//${metricsHost()}/mput?topic=metrics`;\n return fetch(url, {\n method: 'POST',\n mode: 'cors',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: messages.join('\\n'),\n })\n .then((response) => {\n if (!response.ok) {\n // If fetch returns a response with an HTTP error code,\n // print an error in the console\n console.error(response);\n }\n })\n .catch((reason) => {\n // If fetch fails (such as when this URL is blocked by an ad blocking extension),\n // print an error in the console\n console.error(reason);\n });\n};\n\nexport const count = (key, val = 1, extraData = {}) => {\n return send('count', key, val, extraData);\n};\n\nexport const sample = (key, val, extraData) => {\n return send('sample', key, val, extraData);\n};\n","import { assign } from 'utilities/assign.js';\n\n// Old trick to clone arrays, i.e. `aps.call(array)`.\nconst aps = Array.prototype.slice;\n\nconst merge = (obj1, ...objs) => {\n if (objs.length === 0) {\n return obj1;\n }\n for (let i = 0; i < objs.length; i++) {\n mergeOne(obj1, objs[i]);\n }\n return obj1;\n};\n\n// Recursively merge the leaf values of obj2 into obj1. obj1 is modified\n// in-place. Accepts objects or arrays. Always returns obj1.\n//\n// By default, we do not transform any merged values.\n//\n// We also use a non-ideal legacy strategy when merging null/undefined\n// values from obj2: they will _delete_ corresponding keys in obj1. The more\n// correct solution seems like it would be to _never_ delete from obj1, or\n// at least to only delete `undefined` values, but maybe not null. We _may_\n// be able to just make this change, but let's do one thing at a time.\nconst mergeOne = (\n obj1,\n obj2,\n transformerFn = identityFunc,\n shouldDeleteFn = legacyShouldDeleteFromMerge,\n) => {\n if (isArray(obj2)) {\n if (!isArray(obj1)) {\n obj1 = [];\n }\n for (let i = 0; i < obj2.length; i++) {\n let v = obj2[i];\n // note that setting an index of an array will naturally increase the\n // length of the array. Array#push() is not necessary.\n if (obj1[i] == null && v != null) {\n if (isArray(v)) {\n obj1[i] = [];\n } else if (isObject(v)) {\n obj1[i] = {};\n }\n }\n const result = mergeOne(obj1[i], v, transformerFn);\n if (shouldDeleteFn(obj2, i, result)) {\n delete obj1[i];\n } else {\n obj1[i] = result;\n }\n }\n return transformerFn(obj1);\n }\n if (isObject(obj2)) {\n for (let k in obj2) {\n if (Object.hasOwn(obj2, k) && (Object.hasOwn(obj1, k) || obj1[k] == null)) {\n let v = obj2[k];\n if (isArray(v)) {\n if (!isArray(obj1[k])) {\n obj1[k] = [];\n }\n mergeOne(obj1[k], v, transformerFn);\n obj1[k] = transformerFn(obj1[k]);\n } else if (isObject(v)) {\n if (!isObject(obj1[k])) {\n obj1[k] = {};\n }\n mergeOne(obj1[k], v, transformerFn);\n obj1[k] = transformerFn(obj1[k]);\n } else if (obj1 == null) {\n obj1 = {};\n if (!shouldDeleteFn(obj2, k, v)) {\n obj1[k] = transformerFn(v);\n }\n } else if (shouldDeleteFn(obj2, k, v)) {\n delete obj1[k];\n } else {\n obj1[k] = transformerFn(v);\n }\n }\n }\n return transformerFn(obj1);\n }\n // obj2 is not an object that can be cloned. Since we may recurse down\n // to this level, we should just return obj2, since it will overwrite\n // obj1.\n return transformerFn(obj2);\n};\n\nconst identityFunc = (v) => {\n return v;\n};\n\n// When merging, delete key from obj1 if the value from obj2 is null or\n// undefined.\nconst legacyShouldDeleteFromMerge = (obj, k, v) => {\n return v == null;\n};\n\nconst clone = (obj, transformerFn) => {\n if (isArray(obj)) {\n return mergeOne([], obj, transformerFn);\n }\n return mergeOne({}, obj, transformerFn);\n};\n\nconst getDeep = (obj, parts, create) => {\n if (typeof parts === 'string') {\n parts = parts.split('.');\n } else {\n parts = aps.call(parts);\n }\n\n let lastObj = obj;\n let lastP;\n while (obj != null && parts.length) {\n let p = parts.shift();\n if ((obj[p] === undefined || (!isObject(obj[p]) && !isArray(obj[p]))) && create) {\n if (p === 0) {\n obj = lastObj[lastP] = [];\n obj[p] = {};\n } else {\n obj[p] = {};\n }\n }\n lastObj = obj;\n lastP = p;\n\n // Only descend into properties that the object directly owns. getDeep({}, '__proto__')\n // See for security vulnerability reproduction.\n // https://github.com/wistia/player-modern/issues/1800\n if (Object.hasOwn(obj, p)) {\n obj = obj[p];\n } else {\n obj = undefined;\n }\n }\n\n return obj;\n};\n\nconst setDeep = (obj, parts, value) => {\n return setAndMaybeDeleteUndefined(obj, parts, value, true);\n};\n\nconst setAndPreserveUndefined = (obj, parts, value) => {\n return setAndMaybeDeleteUndefined(obj, parts, value, false);\n};\n\nconst setAndMaybeDeleteUndefined = (obj, parts, value, shouldDeleteUndefined = true) => {\n if (typeof parts === 'string') {\n parts = parts.split('.');\n } else {\n parts = aps.call(parts);\n }\n const prop = parts.pop();\n obj = getDeep(obj, parts, true);\n if (obj != null && (isObject(obj) || isArray(obj)) && prop != null) {\n if (!shouldDeleteUndefined || value != null) {\n obj[prop] = value;\n } else {\n delete obj[prop];\n }\n } else {\n // nothing to set or delete\n return undefined;\n }\n};\n\nconst unsetDeep = (obj, parts) => {\n return setDeep(obj, parts);\n};\n\nconst exists = (obj, name) => {\n return getDeep(obj, name) !== undefined;\n};\n\nconst cast = (maybeStr) => {\n if (maybeStr == null) {\n return maybeStr;\n }\n\n if (isObject(maybeStr) || isArray(maybeStr)) {\n return castDeep(maybeStr);\n }\n\n return castStr(`${maybeStr}`, maybeStr);\n};\n\nconst castStr = (str, defaultRet = str) => {\n if (/^-?[1-9]\\d*?$/.test(str)) {\n return parseInt(str, 10);\n }\n if (str === '0' || str === '-0') {\n return 0;\n }\n if (/^-?\\d*\\.\\d+$/.test(str)) {\n return parseFloat(str);\n }\n if (/^true$/i.test(str)) {\n return true;\n }\n if (/^false$/i.test(str)) {\n return false;\n }\n return defaultRet;\n};\n\n// Given an object or array, iterates over each leaf and casts the value.\nconst castDeep = (obj) => {\n const castTransformer = (val) => {\n if (typeof val === 'string') {\n return castStr(val);\n }\n return val;\n };\n const dontDeleteAnything = () => false;\n return mergeOne(obj, obj, castTransformer, dontDeleteAnything);\n};\n\nconst only = (hash, keys) => {\n const result = {};\n const keyHash = {};\n for (let i = 0; i < keys.length; i++) {\n keyHash[keys[i]] = true;\n }\n for (let k in hash) {\n if (keyHash[k]) {\n result[k] = hash[k];\n }\n }\n return result;\n};\n\nconst except = (hash, keys) => {\n const result = {};\n const keyHash = {};\n for (let i = 0; i < keys.length; i++) {\n keyHash[keys[i]] = true;\n }\n for (let k in hash) {\n if (!keyHash[k]) {\n result[k] = hash[k];\n }\n }\n return result;\n};\n\n// Advanced sorting and filtering so we can be expressive and concise when\n// choosing assets.\n//\n// Defined at the class level so it's easier to test sorting and filtering.\nconst select = (arr, keyPairs) => {\n const result = [];\n\n const isFn = typeof keyPairs === 'function';\n const filterFn = isFn ? keyPairs : null;\n\n for (let i = 0; i < arr.length; i++) {\n let elem = arr[i];\n if (isFn) {\n // Filter by function. This gives the most freedom.\n if (filterFn(elem)) {\n result.push(elem);\n }\n } else {\n // Select the asset if all keyPairs of the object match. Common.\n let matching = true;\n for (let k in keyPairs) {\n let v = keyPairs[k];\n if (v instanceof Array) {\n // Range check.\n if (!elem[k] || elem[k] < v[0] || elem[k] > v[1]) {\n matching = false;\n break;\n }\n } else if (v instanceof RegExp) {\n // Regular Expression check.\n if (!v.test(elem[k])) {\n matching = false;\n break;\n }\n } else if (v instanceof MultipleValues) {\n let anyMatch = false;\n for (let j = 0; j < v.values.length; j++) {\n let value = v.values[j];\n if (elem[k] === value) {\n anyMatch = true;\n break;\n }\n }\n if (!anyMatch) {\n matching = false;\n break;\n }\n } else if (typeof v === 'function') {\n if (elem[k] == null || !v(elem[k])) {\n matching = false;\n break;\n }\n } else if (elem[k] !== v) {\n // Exact match.\n matching = false;\n break;\n }\n }\n if (matching) {\n result.push(elem);\n }\n }\n }\n\n return result;\n};\n\n// This is just a way to box multiple values in a semantic way, to help us\n// differentiate between AND/OR/Range type situations.\nconst MultipleValues = function (values) {\n const self = this;\n\n const construct = function () {\n self.values = values;\n };\n\n construct();\n\n return self;\n};\n\nconst values = (...values) => {\n return new MultipleValues(values);\n};\n\nconst sort = (arr, keys) => {\n const isFn = typeof keys === 'function';\n const filterFn = isFn ? keys : null;\n const result = aps.call(arr);\n\n // Sort results with this option.\n if (isFn) {\n // Sort via sort functions. This gives the most freedom.\n result.sort(filterFn);\n } else {\n // Convenience for sorting by one or many properties. Can either pass an\n // array or a comma separated list.\n result.sort((a, b) => {\n let sortBys;\n if (keys instanceof Array) {\n sortBys = clone(keys);\n } else {\n sortBys = keys.split(/\\s*,\\s*/);\n }\n let ret = 0;\n while (ret === 0 && sortBys.length > 0) {\n let pieces = sortBys.shift().split(/\\s+/);\n let sortBy = pieces[0];\n let dir = pieces[1];\n dir = dir === 'desc' ? -1 : 1;\n if (a[sortBy] < b[sortBy]) {\n ret = -1 * dir;\n break;\n } else if (a[sortBy] === b[sortBy]) {\n ret = 0;\n } else {\n ret = 1 * dir;\n break;\n }\n }\n return ret;\n });\n }\n return result;\n};\n\nconst filter = (arr, callback, thisArg) => {\n const ctx = thisArg === undefined ? this : thisArg;\n const result = [];\n for (let i = 0; i < arr.length; i++) {\n if (callback.call(ctx, arr[i], i, arr)) {\n result.push(arr[i]);\n }\n }\n return result;\n};\n\n// returns true if obj is a basic Array, []\n// duck type push as optimization; most checks are not arrays and will not\n// have push set. this way we avoid the implicit toString() on the\n// constructor.\nconst ARR_REGEXP = /^\\s*function Array()/;\nconst isArray = (obj) => {\n return obj != null && obj.push && ARR_REGEXP.test(obj.constructor);\n};\n\n// returns true if obj is a basic Object, {}\nconst OBJ_REGEXP = /^\\s*function Object()/;\nconst isObject = (obj) => {\n return obj != null && typeof obj === 'object' && OBJ_REGEXP.test(obj.constructor);\n};\n\nconst isFunction = (obj) => {\n return obj != null && typeof obj === 'function';\n};\n\nconst REGEXP_REGEXP = /^\\s*function RegExp()/;\nconst isRegExp = (obj) => {\n return obj != null && REGEXP_REGEXP.test(obj.constructor);\n};\n\n// returns true if obj is one of javascript's basic types\nconst BASIC_TYPE_REGEXP = /^string|number|boolean|function$/i;\nconst isBasicType = (obj) => {\n return obj != null && (BASIC_TYPE_REGEXP.test(typeof obj) || isRegExp(obj));\n};\n\nconst isEmpty = (obj) => {\n if (obj == null) {\n return true;\n }\n if (isArray(obj) && !obj.length) {\n return true;\n }\n if (isObject(obj)) {\n if (Object.keys(obj).length) {\n return false;\n }\n return true;\n }\n return false;\n};\n\n// returns true if obj1 is a subset of obj2\nconst isSubsetDeep = (obj1, obj2) => {\n if (obj1 === obj2) {\n return true;\n }\n if ((obj1 != null && obj2 == null) || (obj1 == null && obj2 != null)) {\n return false;\n }\n let result = true;\n eachLeaf(obj1, (obj1LeafVal, path) => {\n let obj2LeafVal = getDeep(obj2, path);\n if (obj1LeafVal !== obj2LeafVal) {\n result = false;\n }\n });\n return result;\n};\n\n// true if each object is a subset of the other\nconst equalsDeep = (obj1, obj2) => {\n return isSubsetDeep(obj1, obj2) && isSubsetDeep(obj2, obj1);\n};\n\n//\n// This is the meat and potatoes for iterating over\n// javascript object/array structures.\n//\n// Call fn(node, path, parent, key) for each node in an object.\n//\n// We include the parent + key so that the callback can modify the leaf\n// value in-place. We pass the path to the root node (the keys from root to\n// leaf) so that we can serialize objects.\nconst eachDeep = (obj, fn, path, parent, key) => {\n if (path == null) {\n path = [];\n }\n if (isBasicType(obj)) {\n fn(obj, path, parent, key);\n } else if (isObject(obj) || isArray(obj)) {\n fn(obj, path, parent, key);\n for (let key in obj) {\n if (Object.hasOwn(obj, key)) {\n const newPath = aps.call(path);\n newPath.push(key);\n eachDeep(obj[key], fn, newPath, obj, key);\n }\n }\n } else {\n fn(obj, path, parent, key);\n }\n};\n\n// call fn(node, path, parent, key) for each leaf node in an object\nconst eachLeaf = (obj, fn) => {\n eachDeep(obj, (obj, path, parent, key) => {\n if (!isArray(obj) && !isObject(obj)) {\n fn(obj, path, parent, key);\n }\n });\n};\n\nconst pick = (obj, keys) => {\n const result = {};\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (obj[key] !== undefined) {\n result[key] = obj[key];\n }\n }\n return result;\n};\n\nconst indexOf = (arr, target) => {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === target) {\n return i;\n }\n }\n return -1;\n};\n\nconst keys = (obj) => {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const result = [];\n for (let k in obj) {\n if (Object.hasOwn(obj, k)) {\n result.push(k);\n }\n }\n return result;\n};\n\nexport {\n merge,\n mergeOne,\n identityFunc,\n legacyShouldDeleteFromMerge,\n clone,\n getDeep,\n setDeep,\n setAndPreserveUndefined,\n unsetDeep,\n exists,\n assign,\n cast,\n castDeep,\n only,\n except,\n select,\n filter,\n values,\n sort,\n isArray,\n isObject,\n isFunction,\n isRegExp,\n isBasicType,\n isEmpty,\n isSubsetDeep,\n equalsDeep,\n eachDeep,\n eachLeaf,\n pick,\n indexOf,\n keys,\n};\n","// Regex to match cloud dev box hostnames: [subdomain]-cde-[devbox].[region].wistia.io\nexport const REGEX_CLOUD_DEV_BOX = /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.wistia\\.io/i;\n// Regex to match openclaw containerized dev box hostnames: [subdomain]-cde-[devbox].[region].claw.wistia.io\nexport const REGEX_OPENCLAW_DEV_BOX =\n /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.claw\\.wistia\\.io/i;\nexport const REGEX_WIZARD_DEV_BOX = /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.wiz\\.wistia\\.io/i;\nexport const REGEX_CDB_STAGING_DEV_BOX =\n /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.cdb-staging\\.wistia\\.io/i;\nexport const REGEX_DEV_METAL_TUNNEL =\n /([a-z0-9-]+)-txl-([a-z0-9-]+)\\.([a-z0-9-]+)\\.mtl\\.wistia\\.io/i;\n\nexport const HOST_MODE_META_NAME = 'wistia-host-mode';\nexport const HOST_MODE_PRODUCTION = 'production';\n\nexport const isProductionHostMode = () => {\n if (typeof document === 'undefined' || typeof document.querySelector !== 'function') {\n return false;\n }\n try {\n const meta = document.querySelector(`meta[name=\"${HOST_MODE_META_NAME}\"]`);\n const content = meta?.getAttribute('content');\n return typeof content === 'string' && content.trim().toLowerCase() === HOST_MODE_PRODUCTION;\n } catch {\n return false;\n }\n};\n\nexport const appHostname = (subdomain = 'app') => {\n const hostname = process.env.BASE_HOSTNAME || process.env.HOSTNAME;\n const subdomainSuffixHostname = getSubdomainSuffixHostname(subdomain);\n if (subdomainSuffixHostname) {\n return subdomainSuffixHostname;\n }\n\n return `${subdomain}.${hostname}`;\n};\n\nexport const getSubdomainSuffixHostname = (subdomain = 'app') => {\n if (isProductionHostMode()) {\n return null;\n }\n\n // Check if we're running in a cloud dev environment by parsing the current hostname\n if (typeof window !== 'undefined' && window.location) {\n const currentHost = window.location.hostname;\n\n // If we're already on a cloud dev box, extract the devbox and region\n const cdbStagingDevBoxMatches = REGEX_CDB_STAGING_DEV_BOX.exec(currentHost);\n if (cdbStagingDevBoxMatches) {\n return `${subdomain}-cde-${cdbStagingDevBoxMatches[2]}.${cdbStagingDevBoxMatches[3]}.cdb-staging.wistia.io`;\n }\n const cloudDevBoxMatches = REGEX_CLOUD_DEV_BOX.exec(currentHost);\n if (cloudDevBoxMatches) {\n // Return the new hostname with the same devbox and region\n return `${subdomain}-cde-${cloudDevBoxMatches[2]}.${cloudDevBoxMatches[3]}.wistia.io`;\n }\n const openclawDevBoxMatches = REGEX_OPENCLAW_DEV_BOX.exec(currentHost);\n if (openclawDevBoxMatches) {\n return `${subdomain}-cde-${openclawDevBoxMatches[2]}.${openclawDevBoxMatches[3]}.claw.wistia.io`;\n }\n const wizardDevBoxMatches = REGEX_WIZARD_DEV_BOX.exec(currentHost);\n if (wizardDevBoxMatches) {\n return `${subdomain}-cde-${wizardDevBoxMatches[2]}.${wizardDevBoxMatches[3]}.wiz.wistia.io`;\n }\n const metalTunnelMatches = REGEX_DEV_METAL_TUNNEL.exec(currentHost);\n if (metalTunnelMatches) {\n // Return the new hostname with the same tunnel subdomain suffix and region\n return `${subdomain}-txl-${metalTunnelMatches[2]}.${metalTunnelMatches[3]}.mtl.wistia.io`;\n }\n }\n return null;\n};\n","import { isNil } from '@wistia/type-guards';\nimport { MediaDataServerResponse } from '../types/player-api-types.ts';\n\nexport const isMediaDataError = (mediaData: MediaDataServerResponse): boolean => {\n if (!Object.hasOwn(mediaData, 'error') || isNil(mediaData.error)) {\n return false;\n }\n\n if (mediaData.error === 'true' || mediaData.error === true) {\n return true;\n }\n\n return false;\n};\n","/* eslint-disable @typescript-eslint/no-magic-numbers */\nimport { isNil, isNonEmptyString } from '@wistia/type-guards';\nimport { Color } from './color.js';\nimport { reportError } from './sentryUtils.ts';\n\nexport const DEFAULT_PLAYER_COLOR = '#2949E5';\n\nexport const colorContrastRatiosByShape = {\n nonText: 3, // 3:1 - https://www.w3.org/TR/WCAG21/#non-text-contrast\n largeText: 3, // 3:1 - https://www.w3.org/TR/WCAG21/#contrast-minimum\n paragraphText: 4.5, // 4.5:1 - https://www.w3.org/TR/WCAG21/#contrast-minimum\n smallText: 5.5, // We're making this up, but it should be more than the paragraph text\n // This one is made up, but we want to offer _some_ visual contrast between the background color and its non-text hit areas with properly contrasting contents.\n // However, the contrast here is for visual interest, not for accessibility (since the contents have proper contrast).\n // In these cases, we'll use a lower contrast ratio than the normal nonText value.\n backgroundColorWhereNonTextHitAreaContentsHaveProperContrast: 2, // https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html#intent\n};\n\nexport const rgbToHsl = (\n color: Color | number[] | string,\n): { hue: number; lightness: number; saturation: number } => {\n let colorArray = color;\n if (color instanceof Color) {\n if (isNil(color.r) || isNil(color.g) || isNil(color.b)) {\n throw new Error('Color does not contain required RGB values');\n }\n colorArray = [color.r, color.g, color.b];\n } else if (typeof color === 'string') {\n const colorInstance = new Color(color);\n if (isNil(colorInstance.r) || isNil(colorInstance.g) || isNil(colorInstance.b)) {\n throw new Error('Color does not contain required RGB values');\n }\n colorArray = [colorInstance.r, colorInstance.g, colorInstance.b];\n }\n const red = colorArray[0] / 255;\n const green = colorArray[1] / 255;\n const blue = colorArray[2] / 255;\n const max = Math.max(red, green, blue);\n const min = Math.min(red, green, blue);\n let hue = 0;\n let saturation = 0;\n const lightness = (max + min) / 2;\n\n if (max === min) {\n hue = 0;\n saturation = 0;\n }\n\n const delta = max - min;\n if (delta === 0) {\n return {\n hue,\n saturation,\n lightness: red * 100,\n };\n }\n if (lightness > 0.5) {\n saturation = delta / (2 - max - min);\n } else {\n saturation = delta / (max + min);\n }\n\n if (max === red) {\n hue = (green - blue) / delta + (green < blue ? 6 : 0);\n } else if (max === green) {\n hue = (blue - red) / delta + 2;\n } else {\n hue = (red - green) / delta + 4;\n }\n hue /= 6;\n\n return { hue: hue * 360, saturation: saturation * 100, lightness: lightness * 100 };\n};\n\nexport const getContrast = (foreground: Color | string, background: Color | string): number => {\n // WCAG contrast ratio\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n const foregroundColor = new Color(foreground);\n const backgroundColor = new Color(background);\n const l1 = foregroundColor.getRelativeLuminance();\n const l2 = backgroundColor.getRelativeLuminance();\n const contrastRatio = l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n return Number.parseFloat(contrastRatio.toFixed(3));\n};\n\nexport const adjustColorForProperContrast = (\n foreground: Color | string,\n background: Color | string,\n shape: keyof typeof colorContrastRatiosByShape = 'paragraphText',\n): string => {\n const foregroundColor = new Color(foreground);\n const backgroundColor = new Color(background);\n\n // This shouldn't be a valid scenario, but since the Color class isn't converted to TS yet\n // the r, g, and b properties could theoretically be optional\n if (isNil(foregroundColor.r) || isNil(foregroundColor.g) || isNil(foregroundColor.b)) {\n throw new Error('Color does not contain required RGB values');\n }\n\n const initialContrastRatio = getContrast(\n foregroundColor.toHexWithHash(),\n backgroundColor.toHexWithHash(),\n );\n if (foregroundColor.hasAccessibleContrast(backgroundColor, shape)) {\n return foregroundColor.toHexWithHash();\n }\n\n const { lightness: foregroundColorLightness } = rgbToHsl([\n foregroundColor.r,\n foregroundColor.g,\n foregroundColor.b,\n ]);\n\n const slightlyLighterForegroundColor = new Color(foregroundColor).lighten(1);\n const slightlyDarkerForegroundColor = new Color(foregroundColor).darken(1);\n\n // Does lightening the foreground color slightly increase the contrast ratio?\n let shouldForegroundColorBeLighter =\n foregroundColorLightness < 15 ||\n slightlyLighterForegroundColor.getContrastRatio(backgroundColor) >\n slightlyDarkerForegroundColor.getContrastRatio(backgroundColor);\n\n // If the foreground color is already very light and the initial contrast ratio was 1:1,\n // lightening the foreground color technically would have increased the contrast ratio, but\n // we know it can never be lightened enough to provide sufficient contrast,\n // so we'll set shouldForegroundColorBeLighter to false.\n if (foregroundColorLightness > 75 && initialContrastRatio === 1) {\n shouldForegroundColorBeLighter = false;\n }\n\n let adjustedForegroundColor = new Color(foregroundColor);\n let i = 0;\n while (!adjustedForegroundColor.hasAccessibleContrast(backgroundColor, shape)) {\n i += 1;\n // This is a safety mechanism to prevent getting stuck in an infinite loop.\n // If anyone exceeds 1,000 attempts to find a contrasting color, just return the best option we have\n // and log the colors where we couldn't generate sufficient contrast.\n if (i > 1000) {\n reportError('other', new Error(`Exceeded ${i} attempts to find contrasting color`), {\n key: 'adjust-color-for-proper-contrast',\n foregroundColor: foregroundColor.toHexWithHash(),\n backgroundColor: backgroundColor.toHexWithHash(),\n });\n return adjustedForegroundColor.toHexWithHash();\n }\n const adjustedForegroundColorLuminance = adjustedForegroundColor.getRelativeLuminance();\n // If the adjusted foreground color is white or black and the required contrast ratio is more than 3:1,\n // we should just return the adjusted foreground color.\n // Otherwise, if the adjusted foreground color is white or black,\n // reset the adjusted foreground color to the original foreground color and try looking\n // in the opposite direction for a properly contrasting color.\n if (\n i > 1 &&\n (adjustedForegroundColorLuminance === 1 || adjustedForegroundColorLuminance === 0)\n ) {\n if (colorContrastRatiosByShape[shape] > 3) {\n return getContrast('#fff', backgroundColor.toHexWithHash()) >\n getContrast('#000', backgroundColor.toHexWithHash())\n ? '#fff'\n : '#000';\n }\n shouldForegroundColorBeLighter = !shouldForegroundColorBeLighter;\n adjustedForegroundColor = new Color(foregroundColor);\n }\n\n if (shouldForegroundColorBeLighter) {\n adjustedForegroundColor.lighten(1);\n } else {\n adjustedForegroundColor.darken(1);\n }\n }\n return adjustedForegroundColor.toHexWithHash();\n};\n\n/**\n * Takes an array of values, either strings or Color objects, then\n * - inserts black and white values in case we need these for our contrast-fetching functions using palettes\n * - filters any duplicate values\n * - sorts the palette from darkest to lightest color value by its relative luminance\n *\n * @param colors - an array of Color objects or strings representing hex values\n * @returns Color[]\n */\nexport const generateColorPalette = (colors: Color[] | string[]): Color[] => {\n const formattedColors = colors.map((color) => new Color(color));\n // Make sure we have black and white colors available in case they're needed for sufficient contrast\n const uniqueColors = [new Color('#ffffff'), new Color('#000000'), ...formattedColors].reduce<\n Color[]\n >((acc, currentColor) => {\n if (acc.find((colorObj) => colorObj.toHex() === currentColor.toHex())) {\n return acc;\n }\n acc.push(currentColor);\n return acc;\n }, []);\n\n return uniqueColors.sort(\n (colorOne, colorTwo) => colorOne.getRelativeLuminance() - colorTwo.getRelativeLuminance(),\n );\n};\n\n/**\n * Given a set of colors, a background color, and any colors from the set that we want to exclude from consideration,\n * this utility returns an appropriate foreground color based on the contrast ratio required for the shape param.\n *\n * For example, this method could be used to determine that we should use white text against a black background and vice versa.\n *\n * @param colors - an array of Color objects or strings representing hex values\n * @param backgroundColor - a Color object or hex string\n * @param [colorsToExclude] - optional, an array of Color objects or strings representing hex values\n * @param [shape] - optional, used to determine the appropriate contrast ratio used in calculating the foreground color\n * @returns\n */\nexport const getBestColorForShape = (\n colors: Color[] | string[],\n backgroundColor: Color | string,\n colorsToExclude: Color[] | string[] = [],\n shape: keyof typeof colorContrastRatiosByShape = 'paragraphText',\n): string => {\n const colorPalette = generateColorPalette(colors);\n\n const backgroundColorObj = new Color(backgroundColor);\n\n // Always exclude the background color in addition to the colorsToExclude\n let formattedExcludedColors = colorsToExclude.map((color: Color | string) => new Color(color));\n formattedExcludedColors.push(new Color(backgroundColor));\n\n // If one of the excluded colors is black or white, don't exclude it.\n // We always need black and white as potential text color options.\n formattedExcludedColors = formattedExcludedColors.filter(\n (color) => color.toHex() !== '000000' && color.toHex() !== 'FFFFFF',\n );\n\n const stringifiedExcludedColors = formattedExcludedColors.map((formattedColor) =>\n formattedColor.toHex(),\n );\n\n const availableColors = colorPalette.filter((color) => {\n return !stringifiedExcludedColors.includes(color.toHex());\n });\n\n // If the background color is light, sort the available colors from lightest to darkest\n if (!backgroundColorObj.isDark(true)) {\n availableColors.reverse();\n }\n\n const textColor = availableColors.find((color) => {\n return color.getContrastRatio(backgroundColor) >= colorContrastRatiosByShape[shape];\n });\n\n if (!textColor) {\n return backgroundColorObj.isDark(true) ? '#ffffff' : '#000000';\n }\n\n return textColor.toHexWithHash();\n};\n\nexport const getHexWithoutHash = (hex?: string): string => {\n if (!isNonEmptyString(hex)) {\n return '';\n }\n\n if (hex.startsWith('#')) {\n return hex.substring(1);\n }\n\n return hex;\n};\n\nexport const getVideoPlayerIconColor = (\n _playerColor: Color | string,\n shouldUseAccessibleIconColor: boolean,\n isGradientEnabled: boolean,\n): string => {\n const playerColor = new Color(_playerColor);\n const { searchParams } = new URL(window.location.toString());\n const hasQueryParamOverride = Boolean(searchParams.get('useAccessiblePlayerIconColor') ?? false);\n\n if (isGradientEnabled || (!hasQueryParamOverride && !shouldUseAccessibleIconColor)) {\n return '#ffffff';\n }\n\n if (new Color('#fff').getContrastRatio(playerColor) >= colorContrastRatiosByShape.paragraphText) {\n return '#ffffff';\n }\n\n return adjustColorForProperContrast(_playerColor, _playerColor, 'paragraphText');\n};\n\nexport const getAudioPlayerIconColor = (\n _playerColor: Color | string,\n shouldUseAccessibleIconColor: boolean,\n isGradientEnabled: boolean,\n): string => {\n const playerColor = new Color(_playerColor);\n const { searchParams } = new URL(window.location.toString());\n const hasQueryParamOverride = Boolean(searchParams.get('useAccessiblePlayerIconColor') ?? false);\n\n if (isGradientEnabled || (!hasQueryParamOverride && !shouldUseAccessibleIconColor)) {\n return '#ffffff';\n }\n\n if (new Color('#fff').getContrastRatio(playerColor) >= colorContrastRatiosByShape.paragraphText) {\n return '#ffffff';\n }\n\n return adjustColorForProperContrast(_playerColor, _playerColor, 'paragraphText');\n};\n\nconst SHADE = 0.8;\n\nexport const getBackgroundColorFromPlayerColor = (color: string = DEFAULT_PLAYER_COLOR): string => {\n return new Color(color).shade(SHADE).toHexWithHash();\n};\n\nexport const isDarkColor = (color: string | Color): boolean => {\n return new Color(color).getRelativeLuminance() < 0.15;\n};\n\nexport const isVeryDarkColor = (color: string | Color): boolean => {\n return new Color(color).getRelativeLuminance() < 0.05;\n};\n\nexport const isLightColor = (color: string | Color): boolean => {\n return new Color(color).getRelativeLuminance() >= 0.8;\n};\n\nexport const isMidToneColor = (color: string | Color): boolean => {\n const relativeLuminance = new Color(color).getRelativeLuminance();\n return relativeLuminance > 0.13 && relativeLuminance < 0.75;\n};\n","import { assign } from 'utilities/assign.js';\nimport { pageLoaded } from 'utilities/pageLoaded.js';\nimport { isVisitorTrackingEnabled } from 'utilities/trackingConsentApi.js';\nimport { metricsHost } from './hosts.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nif (Wistia._simpleMetricsCache == null) {\n Wistia._simpleMetricsCache = {};\n}\n\nif (Wistia._simpleMetricsDebounceInterval == null) {\n Wistia._simpleMetricsDebounceInterval = 500;\n}\n\nconst METRICS_CACHE = Wistia._simpleMetricsCache;\n\nexport const countMetric = (key, val = 1, extraData = {}) => {\n return sendMetric('count', key, val, extraData);\n};\n\nexport const sendMetrics = (...messages) => {\n if (!isVisitorTrackingEnabled()) {\n return;\n }\n const url = `https://${metricsHost()}/mput?topic=metrics`;\n return fetch(url, {\n method: 'POST',\n mode: 'cors',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: messages.join('\\n'),\n })\n .then((response) => {\n if (!response.ok) {\n // If fetch returns a response with an HTTP error code,\n // print an error in the console\n console.error(response);\n }\n })\n .catch((reason) => {\n // If fetch fails (such as when this URL is blocked by an ad blocking extension),\n // print an error in the console\n console.error(reason);\n });\n};\n\nexport const sampleMetric = (key, val, extraData) => {\n return sendMetric('sample', key, val, extraData);\n};\n\nconst getCircularReplacer = () => {\n // form a closure and use this\n // weakset to monitor object reference.\n const seen = new WeakSet();\n\n // return the replacer function\n return (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n };\n};\n\nexport const sendMetric = (type, key, val, extraData = {}) => {\n if (!isVisitorTrackingEnabled()) {\n return;\n }\n try {\n if (METRICS_CACHE.toMput == null) {\n METRICS_CACHE.toMput = [];\n }\n\n const messageObj = assign(\n {\n type,\n key,\n value: val != null ? val : null,\n },\n extraData,\n );\n\n const serialized = JSON.stringify(messageObj, getCircularReplacer());\n METRICS_CACHE.toMput.push(serialized);\n\n clearTimeout(Wistia._msendTimeout);\n Wistia._msendTimeout = setTimeout(() => {\n pageLoaded(() => {\n sendMetrics.apply(this, METRICS_CACHE.toMput);\n METRICS_CACHE.toMput = [];\n });\n }, Wistia._simpleMetricsDebounceInterval);\n } catch (e) {\n console.error(e.message);\n console.error(e.stack);\n }\n};\n\n// only used in testing to clear the cache\nexport const _clearMetricsCache = () => {\n METRICS_CACHE.toMput = [];\n};\n","import { Wistia } from '../wistia_namespace.ts';\n\nexport const seqId = (prefix = 'wistia_', suffix = '') => {\n const currentVal = Wistia._sequenceVal || 1;\n const result = `${prefix}${currentVal}${suffix}`;\n Wistia._sequenceVal = currentVal + 1;\n return result;\n};\n","import { TAGGED_VERSION } from './hosts.js';\n// fire and forget.\n// run a script and immediately remove it from the DOM.\nexport const runScript = (src, timeout) => {\n const taggedVersion = TAGGED_VERSION;\n return new Promise((resolve, reject) => {\n if (timeout == null) {\n timeout = 8000;\n }\n let s;\n\n s = document.createElement('script');\n s.src = src;\n s.async = true;\n s.type = 'text/javascript';\n\n if (\n /https?:\\/\\/fast\\.wistia\\./.test(s.src) &&\n taggedVersion !== '' &&\n taggedVersion.length > 0\n ) {\n s.src = `${s.src}@${taggedVersion}`;\n }\n\n let cleanupTimeoutId = null;\n let done = false;\n\n const cleanUp = () => {\n s.onerror = s.onreadystatechange = s.onload = null;\n clearTimeout(cleanupTimeoutId);\n clearTimeout(loadingTimeout);\n cleanupTimeoutId = setTimeout(() => {\n if (s && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }, 500);\n };\n\n const onSuccess = () => {\n const state = s.readyState;\n if (!done && (!state || /loaded|complete/.test(state))) {\n done = true;\n // We call success on next tick to separate script evaluation time from\n // callback execution time. This helps reduce thread-blocking since\n // script-eval and initialization tend to be expensive.\n setTimeout(() => {\n resolve();\n cleanUp();\n }, 1);\n }\n };\n\n const onTimeout = () => {\n done = true;\n cleanUp();\n reject(new Error('timeout'));\n };\n\n const onError = (e) => {\n done = true;\n cleanUp();\n reject(e);\n };\n\n const loadingTimeout = setTimeout(onTimeout, timeout);\n s.onerror = onError;\n s.onreadystatechange = onSuccess;\n s.onload = onSuccess;\n\n (document.body || document.head).appendChild(s);\n });\n};\n","import { toSeconds, parse } from 'iso8601-duration';\nimport { isNil, isNumber } from '@wistia/type-guards';\n\ntype DurationData = {\n hours: number;\n minutes: number;\n seconds: number;\n};\n\nconst SECONDS_IN_HOUR = 3600;\nconst MINUTES_IN_HOUR = 60;\nconst SECONDS_IN_MINUTE = 60;\nconst SECONDS_CUTTOFF = 45;\n\nconst padNumber = (num: number, length = 0): string => {\n let result = `${num}`;\n while (result.length < length) {\n result = `0${result}`;\n }\n return result;\n};\n\nexport const secondsConverter = (total: number, format: string): DurationData => {\n let hours = 0;\n let minutes = 0;\n let seconds = 0;\n\n let remainingDuration = total;\n\n const useHours = format.includes('h');\n const useMinutes = format.includes('m');\n\n if (useHours && remainingDuration > 0) {\n hours += Math.floor(remainingDuration / SECONDS_IN_HOUR);\n remainingDuration %= SECONDS_IN_HOUR;\n }\n\n if (useMinutes && remainingDuration > 0) {\n minutes += Math.floor(remainingDuration / MINUTES_IN_HOUR);\n remainingDuration %= MINUTES_IN_HOUR;\n }\n\n seconds = Math.round(remainingDuration);\n\n if (useHours && minutes === MINUTES_IN_HOUR) {\n hours += 1;\n minutes = 0;\n }\n\n if (useMinutes && seconds === SECONDS_IN_MINUTE) {\n minutes += 1;\n seconds = 0;\n }\n\n return {\n hours,\n minutes,\n seconds,\n };\n};\n\n// flexibleDuration is a duration format that uses as\n// few digits as possible to express that duration\nexport const flexibleDuration = (total: number): string => {\n const { hours, minutes, seconds } = secondsConverter(total, 'hms');\n\n if (hours === 0) {\n return `${minutes}:${padNumber(seconds, 2)}`;\n }\n return `${hours}:${padNumber(minutes, 2)}:${padNumber(seconds, 2)}`;\n};\n\nexport const formattedDurationToSeconds = (dur: string): number | string => {\n if (isNil(dur) || isNumber(dur)) {\n return dur;\n }\n\n try {\n const parsed = parse(dur.toUpperCase());\n return toSeconds(parsed);\n } catch {\n /* empty, we want to swallow and continue */\n }\n\n // We allow for non-standard IS0 6801 Duration strings, eg. 1H30M,\n // the parsing lib can do that if prefixed with the correct ISO Duration prefixes\n try {\n const parsed = parse(`PT${dur.toUpperCase()}`);\n return toSeconds(parsed);\n } catch {\n /* empty, we want to swallow and continue */\n }\n\n return dur;\n};\n\nexport const accessibilityDuration = (duration: number): string => {\n const { hours, minutes, seconds } = secondsConverter(duration, 'hms');\n const zeroHours = hours === 0;\n const zeroMinutes = minutes === 0;\n if (zeroHours && zeroMinutes) {\n return `${seconds} second${seconds === 1 ? '' : 's'}`;\n }\n\n const hoursText = zeroHours ? '' : `${hours} hour${hours === 1 ? '' : 's'}`;\n const minText = zeroMinutes ? '' : `${minutes} minute${hours === 1 ? '' : 's'}`;\n\n return `${hoursText} ${minText}`.trim();\n};\n\nexport const humanReadableDuration = (duration: number): string => {\n const { hours, minutes, seconds } = secondsConverter(duration, 'hms');\n const zeroHours = hours === 0;\n const zeroMinutes = minutes === 0;\n if (zeroHours && zeroMinutes) return `${seconds} Sec`;\n\n const hoursText = zeroHours ? '' : `${hours} Hr`;\n const minText = zeroMinutes ? '' : `${minutes} Min`;\n return `${hoursText} ${minText}`.trim();\n};\n\nexport const getSecondsRemaining = (start: Date, end: Date): number => {\n const remaining = end.getTime() - start.getTime();\n return remaining / 1000;\n};\n\nexport const secondsToMilliseconds = (seconds: number): number => seconds * 1000;\n\nexport const formatDuration = (totalSeconds: number): string => {\n const { hours, minutes } = secondsConverter(totalSeconds, 'hms');\n\n if (totalSeconds < SECONDS_CUTTOFF) {\n return `${Math.round(totalSeconds)} SEC`;\n }\n\n if (hours) {\n return `${hours} HR ${minutes} MIN`;\n }\n\n return `${Math.round(totalSeconds / SECONDS_IN_MINUTE)} MIN`;\n};\n","export const CONTROL_BAR_HEIGHT = 34;\n\n// Default height for an audio <wistia-player> when the author hasn't set an\n// explicit height. Audio has no intrinsic media height (the <audio> element is\n// 0px and the UI is absolutely positioned), so without this the host collapses\n// to a bare control bar — most visibly after a video→audio replaceWith. Matches\n// FULL_SIZED_PLAYER_MIN_HEIGHT in players/vulcanV2Player/audio/constants.js so\n// the audio UI renders its full-sized layout. Author CSS (e.g. the inline\n// `height` the standard embed codes set) still overrides this.\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nexport const AUDIO_DEFAULT_HEIGHT = 218;\n\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nexport const DEFAULT_ASPECT = 16 / 9;\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,Fragment as StrictMode,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,R(u)&&o({t:u})},[n,e,t]),h(function(){return R(u)&&o({t:u}),n(function(){R(u)&&o({t:u})})},[n]),e}function R(n){try{return!((t=n.__)===(e=n.u())&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}var t,e}function x(n){n()}function w(n){return n}function k(){return[!1,x]}var I=s;function M(n,t){this.props=n,this.context=t}function N(n,e){function r(n){var t=this.props.ref;return t!=n.ref&&t&&(\"function\"==typeof t?t(null):t.current=null),e?!e(this.props,n)||t!=n.ref:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.__f=u.prototype.isReactComponent=!0,u.type=n,u}(M.prototype=new n).isPureReactComponent=!0,M.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=n,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var F=function(n,t){return null==n?null:r(r(n).map(t))},L={map:F,forEach:F,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},O=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);O(n,t,e,r)};var U=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){var t=n.__&&n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u,o=null;function i(i){if(e||(e=n()).then(function(n){n&&(o=n.default||n),u=!0},function(n){r=n,u=!0}),r)throw r;if(!u)throw e;return o?t(o,i):null}return i.displayName=\"Lazy\",i.__f=!0,i}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&(t.__z=!0),t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),U&&U(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||r.__z||(o=!0,e.__R=null,u?u(c):c())};e.__R=i;var l=e.__P;e.__P=null;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.__P=l,t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},namespaceURI:r.namespaceURI,insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent=!0,[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;e.event=function(n){return en&&(n=en(n)),n.persist=function(){},n.isPropagationStopped=function(){return this.cancelBubble},n.isDefaultPrevented=function(){return this.defaultPrevented},n.nativeEvent=n};var rn,un={configurable:!0,get:function(){return this.class}},on=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1==e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&(u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value}))),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",un)):t.className&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,on&&on(n)};var ln=e.__r;e.__r=function(n){ln&&ln(n),rn=n.__c};var cn=e.diffed;e.diffed=function(n){cn&&cn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),rn=null};var fn={ReactCurrentDispatcher:{current:{readContext:function(n){return rn.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},an=\"18.3.1\";function sn(n){return t.bind(null,n)}function hn(n){return!!n&&n.$$typeof===q}function vn(n){return hn(n)&&n.type===u}function dn(n){return!!n&&\"string\"==typeof n.displayName&&0==n.displayName.indexOf(\"Memo(\")}function mn(n){return hn(n)?f.apply(null,arguments):n}function pn(n){return!!n.__k&&(o(null,n),!0)}function yn(n){return n&&(n.base||1===n.nodeType&&n)||null}var _n=function(n,t){return n(t)},bn=function(n,t){var r=e.debounceRendering;e.debounceRendering=function(n){return n()};var u=n(t);return e.debounceRendering=r,u},Sn=hn,gn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:x,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:L,render:nn,hydrate:tn,unmountComponentAtNode:pn,createPortal:$,createElement:t,createContext:l,createFactory:sn,cloneElement:mn,createRef:c,Fragment:u,isValidElement:hn,isElement:Sn,isFragment:vn,isMemo:dn,findDOMNode:yn,Component:n,PureComponent:M,memo:N,forwardRef:D,flushSync:bn,unstable_batchedUpdates:_n,StrictMode:u,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:fn};export{L as Children,M as PureComponent,P as Suspense,B as SuspenseList,fn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,mn as cloneElement,sn as createFactory,$ as createPortal,gn as default,yn as findDOMNode,bn as flushSync,D as forwardRef,tn as hydrate,Sn as isElement,vn as isFragment,dn as isMemo,hn as isValidElement,z as lazy,N as memo,nn as render,x as startTransition,pn as unmountComponentAtNode,_n as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,an as version};\n//# sourceMappingURL=compat.module.js.map\n","import { poll } from 'utilities/poll.js';\nimport { throttle } from 'utilities/throttle.js';\nimport { unescapeHtml } from 'utilities/unescape-html.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport { poll, throttle, unescapeHtml };\n\n// replace spaces in text with &nbsp; this prevents the line from wrapping.\n// specifically, it allows menu items in the vulcan ui to push their parent div\n// open as wide as the text.\nexport const unbreakifyText = (text = '') => {\n return text.replace(' ', '&nbsp;');\n};\n\nexport const stripHtml = (htmlStr) => {\n const tmp = document.createElement('div');\n tmp.innerHTML = htmlStr;\n return tmp.textContent || tmp.innerText || '';\n};\n\nexport const camelCase = (snakeStr) => {\n return snakeStr.replace(/[_-]([a-z])/g, (g) => {\n return g.charAt(1).toUpperCase();\n });\n};\n\nexport const snakeCase = (camelStr) => {\n return camelStr.replace(/[A-Z]/g, (g) => {\n return `_${g.toLowerCase()}`;\n });\n};\n\n// Not safe IE8 and below.\nexport const shallowCamelizeKeys = (o) => {\n return Object.keys(o).reduce((memo, key) => {\n memo[camelCase(key)] = o[key];\n return memo;\n }, {});\n};\n\n// Not safe IE8 and below.\nexport const shallowSnakeKeys = (o) => {\n return Object.keys(o).reduce((memo, key) => {\n memo[snakeCase(key)] = o[key];\n return memo;\n }, {});\n};\n\n// the implementations of base64Decode and base64Encode here are adapted from\n// https://stackoverflow.com/a/30106551/529530, and designed to safely handle\n// multibyte characters\n\nexport const base64Decode = (input) => {\n return decodeURIComponent(\n atob(input)\n .split('')\n .map((c) => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join(''),\n );\n};\n\nexport const base64Encode = (input) => {\n return btoa(\n encodeURIComponent(input).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(`0x${p1}`);\n }),\n );\n};\n\nexport const notSetOrTrue = (val) => {\n return val == null || val === true;\n};\n\n// prevent scrolling outside a container\n// topMargin and bottomMargin are optional and can be used to provide a cushion to adjust to determine\n// if you are at the top. We have seen some weird behavior with some uses where the scrollTop maxes out\n// at scrollHeight - offsetHeight - 1. Possible subpixel rendering issue???\nexport const preventOuterMouseWheel = (e, container, topMargin = 0, bottomMargin = 0) => {\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const hitTop = (extra = 0) => {\n return scrollTop + extra - topMargin <= 0;\n };\n const hitBottom = (extra = 0) => {\n return scrollTop + extra + bottomMargin >= scrollHeight - offsetHeight;\n };\n\n const delta = e.deltaY || -e.wheelDelta;\n const dir = delta > 0 ? 'down' : 'up';\n const isModernBrowser = !!e.deltaY;\n if (isModernBrowser) {\n if ((dir === 'up' && hitTop()) || (dir === 'down' && hitBottom())) {\n e.preventDefault();\n }\n } else {\n // IE scrolls 47.5 pixels each scroll but reports 120\n const extra = (47.5 * delta) / 120;\n if (dir === 'up' && hitTop(extra)) {\n e.preventDefault();\n // Manually set scroll to avoid scrolling parent in IE 11\n container.scrollTop = 0;\n } else if (dir === 'down' && hitBottom(extra)) {\n e.preventDefault();\n container.scrollTop = scrollHeight - offsetHeight;\n }\n }\n};\n\n// parent.frames.length should tell us how many iframes exist on the parent\n// page. However, if the user has overwritten the accessor with something\n// that's not safe for CORS (i.e. they changed it at all), then\n// parent.frames.length throws an exception and screws up the embedding\n// process. This function just gives a safe way of getting the value, or\n// defaulting to something unknown.\nexport const parentFramesLength = function () {\n try {\n return parent.frames.length;\n } catch (e) {\n Wistia.warn(e);\n return 1;\n }\n};\n","import { Wistia } from 'wistia_namespace.ts';\nimport { root } from 'utilities/root.js';\nimport { merge } from 'utilities/obj.js';\nimport { removeScriptsBySrc } from 'utilities/script-utils.js';\nimport {\n cacheMediaData,\n uncacheMediaData,\n getMediaDataFromCache,\n} from 'utilities/remote-data-cache.ts';\nimport {\n eV1Protocol,\n cdnFastWistiaComHost,\n cdnFastWistiaNetHost,\n mediaDataHost,\n} from 'utilities/hosts.js';\nimport { mediaDataTransforms } from 'utilities/media-data-transforms.js';\n\nexport const transformResponse = (mediaData, options) => {\n const mediaWithOpts = { ...mediaData };\n const transformOpts = merge({}, mediaWithOpts.media?.embedOptions, options);\n\n if (mediaWithOpts.error) {\n return mediaWithOpts;\n }\n\n delete mediaWithOpts.media.unnamed_assets;\n mediaDataTransforms(mediaWithOpts.media, transformOpts);\n return mediaWithOpts.media;\n};\n\nexport const mediaDataUrl = (hashedId, options = {}) => {\n const host = mediaDataHost(options);\n return `${eV1Protocol()}//${host}/embed/medias/${hashedId}.json`;\n};\n\nexport const mediaDataScriptRegExp = (hashedId) => {\n const protocolMatch = location.protocol === 'https:' ? 'https' : 'https?';\n return new RegExp(\n `^(${protocolMatch}:)?//((${cdnFastWistiaComHost().replace(\n '.',\n '\\\\.',\n )})|(${cdnFastWistiaNetHost().replace('.', '\\\\.')}))/embed/medias/${hashedId}\\\\.jsonp\\\\??`,\n );\n};\n\nexport const cacheMedia = (hashedId, data) => {\n return cacheMediaData(hashedId, data);\n};\n\nexport const uncacheMedia = (hashedId) => {\n uncacheMediaData(hashedId);\n Wistia.uncacheCaptions?.(hashedId);\n removeSpeedDemonScriptAndData(hashedId);\n};\n\nconst removeSpeedDemonScriptAndData = (hashedId) => {\n window[`wistiajsonp-/embed/medias/${hashedId}.json`] = null;\n removeScriptsBySrc(mediaDataUrl(hashedId), {\n scriptRegex: mediaDataScriptRegExp(hashedId),\n });\n};\n\nexport const mediaFromCache = (hashedId) => {\n return dataFromCache(hashedId);\n};\n\nconst dataFromCache = (hashedId) => {\n const resultFromFetchCache = getMediaDataFromCache(hashedId);\n if (resultFromFetchCache) {\n return resultFromFetchCache;\n }\n\n const speedDemonData = root[`wistiajsonp-/embed/medias/${hashedId}.json`];\n if (speedDemonData != null && speedDemonData.media) {\n return speedDemonData.media;\n }\n\n return null;\n};\n","import type { CSSProperties, SVGAttributes } from 'preact';\n\ntype Props = {\n ariaHidden?: boolean;\n fillColor?: string;\n height: number;\n styleOverride?: CSSProperties;\n width: number;\n};\nexport const standardSvgAttrs = ({\n width = 40,\n height = 34,\n styleOverride = {},\n ariaHidden = false,\n fillColor = '#ffffff',\n}: Props): Pick<\n SVGAttributes,\n 'aria-hidden' | 'enable-background' | 'style' | 'viewBox' | 'x' | 'y'\n> => {\n return {\n x: '0px',\n y: '0px',\n viewBox: `0 0 ${width} ${height}`,\n 'enable-background': `new 0 0 ${width} ${height}`,\n 'aria-hidden': `${ariaHidden}`,\n style: {\n fill: fillColor,\n height: '100%',\n left: 0,\n strokeWidth: 0,\n top: 0,\n width: '100%',\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...styleOverride,\n },\n };\n};\n","import {\n clipsFromChapters,\n shouldAddKeyMoments,\n shouldAddClipsFromChapters,\n seekToAction,\n} from 'utilities/keyMoments.ts';\nimport { cast, clone } from 'utilities/obj.js';\nimport { cdnFastWistiaNetHost } from 'utilities/hosts.js';\nimport {\n stillUrl,\n findClosestAssetByQuality,\n readyPublicMp3s,\n readyPublicMp4s,\n} from 'utilities/assets.js';\nimport { Url } from 'utilities/url.js';\nimport { secondsToIso8601Duration } from './iso8601Helper.ts';\nimport { normalizeChapters } from './normalizeChapters.ts';\n\nconst generateAudioJsonLd = (mediaData, options = {}) => {\n const { videoWidth, videoHeight } = options;\n let { embedOptions } = options;\n\n if (!embedOptions) {\n embedOptions = cast(clone(mediaData.embedOptions));\n }\n\n const obj = {\n '@context': 'http://schema.org/',\n '@id': `https://${cdnFastWistiaNetHost()}/embed/iframe/${mediaData.hashedId}`,\n '@type': 'AudioObject',\n duration: `PT${secondsToIso8601Duration(mediaData.duration)}`,\n name: mediaData.name,\n thumbnailUrl: stillUrl(mediaData.assets, {\n ext: 'jpg',\n protocol: 'https:',\n videoWidth,\n videoHeight,\n embedHost: embedOptions?.embedHost,\n }),\n contentUrl: generateContentUrl(mediaData),\n embedUrl: generateEmbedUrl(mediaData, embedOptions),\n uploadDate: new Date(mediaData.createdAt * 1000).toISOString(),\n description: mediaData.seoDescription,\n };\n\n // multilingual captions should come as array of transcript objects.\n if (mediaData.captions && mediaData.captions[0]) {\n obj.transcript = mediaData.captions[0].text;\n }\n\n return obj;\n};\n\nconst generateEmbedUrl = (mediaData, embedOptions) => {\n const baseUrl = `https://${cdnFastWistiaNetHost()}/embed/iframe/${mediaData.hashedId}`;\n // if we're doing SeekToAction for Google KeyMoments AND video thumbnail\n // is enabled, we need to attach a query param so that it is disabled when\n // Google tries to crawl it\n if (\n shouldAddKeyMoments(mediaData, embedOptions) &&\n !shouldAddClipsFromChapters(embedOptions) &&\n mediaData.embedOptions.plugin?.videoThumbnail\n ) {\n return `${baseUrl}?wseektoaction=true`;\n }\n return baseUrl;\n};\n\n// Google has been struggling with Key Moments using our normal iframe pages as the embedUrl\n// and have asked us to use a contentUrl with a direct m3u8 asset instead.\nconst generateContentUrl = (mediaData) => {\n const { assets } = mediaData;\n if (mediaData.mediaType === 'Audio') {\n return readyPublicMp3s(assets)[0]?.url;\n }\n\n const availableMp4s = readyPublicMp4s(assets);\n if (availableMp4s.length === 0) {\n return;\n }\n\n const highestQuality = findClosestAssetByQuality(availableMp4s, 1080);\n if (!highestQuality) {\n return;\n }\n const url = new Url(highestQuality.url);\n\n url.ext('m3u8');\n return url.absolute();\n};\n\nconst generateVideoJsonLd = (mediaData, options = {}) => {\n const { videoWidth, videoHeight } = options;\n let { embedOptions } = options;\n\n if (!embedOptions) {\n embedOptions = cast(clone(mediaData.embedOptions)) ?? {};\n }\n\n const obj = {\n '@context': 'http://schema.org/',\n '@id': `https://${cdnFastWistiaNetHost()}/embed/iframe/${mediaData.hashedId}`,\n '@type': 'VideoObject',\n duration: `PT${secondsToIso8601Duration(mediaData.duration)}`,\n name: mediaData.name,\n thumbnailUrl: stillUrl(mediaData.assets, {\n ext: 'jpg',\n protocol: 'https:',\n videoWidth,\n videoHeight,\n embedHost: embedOptions?.embedHost,\n }),\n embedUrl: generateEmbedUrl(mediaData, embedOptions),\n uploadDate: new Date(mediaData.createdAt * 1000).toISOString(),\n description: mediaData.seoDescription,\n };\n\n // LiveStream Medias should not get content urls as we might not have any video assets available\n if (mediaData.mediaType === 'Video') {\n obj.contentUrl = generateContentUrl(mediaData);\n }\n\n // multilingual captions should come as array of transcript objects. Like\n // Scar in Lion King, we should Be Prepared!\n if (mediaData.captions && mediaData.captions[0]) {\n obj.transcript = mediaData.captions[0].text;\n }\n\n if (shouldAddKeyMoments(mediaData, embedOptions)) {\n // keyMoments come in two flavors.\n // A. If we have chapters, then we will manually define the key moments via the \"Clip\" schema property\n // B. If we don't, we will use the \"SeekToAction\" property that lets google parse via `wtime`\n if (shouldAddClipsFromChapters(embedOptions)) {\n const chapters = normalizeChapters(embedOptions);\n const chapterList = chapters.chapterList;\n obj.hasPart = clipsFromChapters(chapterList, location.href, mediaData.duration);\n } else {\n obj.potentialAction = seekToAction();\n }\n }\n\n return obj;\n};\n\nexport const injectJsonLd = (id, mediaData, options = {}) => {\n let jsonLdObj;\n\n if (mediaData.mediaType === 'Audio') {\n jsonLdObj = generateAudioJsonLd(mediaData, options);\n } else {\n jsonLdObj = generateVideoJsonLd(mediaData, options);\n }\n\n const stringified = JSON.stringify(jsonLdObj);\n const jsonLd = document.createElement('script');\n jsonLd.className = 'w-json-ld';\n jsonLd.type = 'application/ld+json';\n jsonLd.innerHTML = stringified;\n jsonLd._wistia = true;\n jsonLd.setAttribute('id', id);\n removeInjectedJsonLd(id);\n\n const existingScripts = document.querySelectorAll('script.w-json-ld');\n const existingScript = existingScripts[existingScripts.length - 1];\n if (existingScript) {\n // insert JSON-LD after last JSON-LD script we injected.\n existingScript.parentNode.insertBefore(jsonLd, existingScript.nextSibling);\n } else {\n // prepend JSON-LD to head if we don't see any others yet\n document.head.insertBefore(jsonLd, document.head.childNodes[0]);\n }\n};\n\nexport const removeInjectedJsonLd = (id) => {\n if (!id) {\n return;\n }\n\n const el = document.getElementById(id);\n if (!el) {\n return;\n }\n\n el.remove();\n};\n","const unescapedCache = {};\n\nexport const unescapeHtml = (encodedHtmlStr, options = {}) => {\n if (!encodedHtmlStr) {\n return '';\n }\n\n if (options.cache) {\n const cachedVal = unescapedCache[encodedHtmlStr];\n if (unescapedCache[encodedHtmlStr]) {\n return cachedVal;\n }\n }\n\n const e = document.createElement('div');\n e.innerHTML = encodedHtmlStr.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;');\n let result;\n if (e.childNodes.length > 0) {\n result = e.childNodes[0].nodeValue;\n } else {\n result = '';\n }\n\n if (options.cache) {\n unescapedCache[encodedHtmlStr] = result;\n }\n\n return result;\n};\n","import { isNil, isNonEmptyRecord, isNonEmptyString } from '@wistia/type-guards';\nimport { isVisitorTrackingEnabled } from './trackingConsentApi.js';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { appHostname } from '../appHostname.js';\nimport { CURRENT_SHA, TAGGED_VERSION } from './hosts.js';\nimport { countMetric } from './simpleMetrics.js';\n\nexport type SentryProductType =\n | 'carousel'\n | 'channel'\n | 'dynamicImport'\n | 'form'\n | 'globalListener'\n | 'hlsPlayback'\n | 'mediaPlayback'\n | 'other'\n | 'player'\n | 'playlist'\n | 'relatedMedia'\n | 'transcript';\n\nconst getSampleRatesByProductType = (productType: SentryProductType) => {\n // These errors don't seem terribly useful for us, and it's not clear they are actionable.\n // Let's set a low sample rate for them.\n if (productType === 'mediaPlayback') {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n return 0.001;\n }\n\n if (productType === 'hlsPlayback') {\n // HLS fatals were previously lumped into the heavily-sampled mediaPlayback\n // bucket, so we saw far fewer than expected. I expect we'll have a lot of these,\n // so lets sample them heavily but not quite as much as `mediaPlayback`\n //\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n return 0.01;\n }\n\n return 1;\n};\n\nconst IS_DEV_ENV = process.env.NODE_ENV === 'development';\nconst IS_TEST_ENV = process.env.NODE_ENV === 'test';\n\n// Prevents multiple Sentry script tags from being appended while loading\nlet isSentryLoading = false;\n\n// Buffer for errors reported before Sentry is initialized\nconst errorsCapturedBeforeSentryClientInit: {\n details?: Record<string, string>;\n error: Error;\n product: SentryProductType;\n}[] = [];\nconst MAX_PENDING_ERRORS = 50;\n\nconst configureSentry = () => {\n if (\n isNil(window.Sentry) ||\n isNil(window.Sentry.BrowserClient) ||\n isNil(window.Sentry.makeFetchTransport) ||\n isNil(window.Sentry.defaultStackParser) ||\n isNil(window.Sentry.Scope)\n ) {\n return;\n }\n\n /**\n * Since the webpages our code is embedded in might have their own Sentry instances defined,\n * we cannot use Sentry.init();\n *\n * Instead, we can follow the example provided by Sentry (https://docs.sentry.io/platforms/javascript/best-practices/shared-environments/)\n * and create our own client that we use to report errors. This will prevent any Wistia exceptions\n * from being logged in customer Sentry instances, and it should also help prevent our Sentry instance\n * from picking up exceptions in customer code.\n */\n const client = new window.Sentry.BrowserClient({\n dsn: 'https://a3591ba5e949a37083cc6f5a4191e903@o4505518331658240.ingest.us.sentry.io/4505794284290048',\n transport: window.Sentry.makeFetchTransport,\n stackParser: window.Sentry.defaultStackParser,\n integrations: [window.Sentry.httpContextIntegration()], // Allow httpContextIntegration so we can collect URL, browser, and OS version information. No PII is included here.\n release: isNonEmptyString(TAGGED_VERSION) ? TAGGED_VERSION : CURRENT_SHA,\n });\n const scope = new window.Sentry.Scope();\n scope.setClient(client);\n scope.setTags({\n pillar: 'publish',\n });\n\n Wistia._sentryScope = scope;\n client.init(); // initializing has to be done after setting the client on the scope\n\n Wistia.isSentryInitialized = true;\n\n if (errorsCapturedBeforeSentryClientInit.length > 0) {\n countMetric('player/buffered-sentry-errors', errorsCapturedBeforeSentryClientInit.length);\n }\n // Flush any errors that were buffered before Sentry was ready\n errorsCapturedBeforeSentryClientInit.forEach((pending) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n reportError(pending.product, pending.error, { ...pending.details, isBuffered: 'true' });\n });\n // Empty the array after we process all the entries.\n errorsCapturedBeforeSentryClientInit.length = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n listenForGlobalErrors();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n listenForGlobalUnhandledRejections();\n};\n\nexport const initializeSentry = (): void => {\n if (isVisitorTrackingEnabled() !== true) {\n return;\n }\n\n if (!window.Sentry && !Wistia.isSentryInitialized && !isSentryLoading) {\n isSentryLoading = true;\n const sentryLoader = document.createElement('script');\n /**\n * Using the Sentry loader script means Sentry will init a second time after\n * our own call to init inside configureSentry(). The second init will include\n * all the default Sentry integrations, which we do not want.\n *\n * Instead of using the loader script, we can load the bundle directly\n * and configure the client when the script loads. This allows us to maintain\n * our own Sentry client without worrying about it colliding with customer instances of Sentry.\n *\n */\n sentryLoader.src = 'https://browser.sentry-cdn.com/9.6.1/bundle.min.js';\n sentryLoader.crossOrigin = 'anonymous';\n sentryLoader.integrity =\n 'sha384-kbRmCeIl7Uxr+vT9YhSAdguCdd4L5QPRj7jzQTanorUVVlw/Y5X9vtzVyOEHLfpH';\n sentryLoader.onload = () => configureSentry();\n document.head.appendChild(sentryLoader);\n }\n};\n\ntype ReportErrorDetails = Record<string, string> & {\n url?: never; // Don't ever let calling sites overwrite the `url` tag set\n};\n\nexport const reportError = (\n product: SentryProductType,\n error: Error,\n details?: ReportErrorDetails,\n): void => {\n try {\n if (isVisitorTrackingEnabled() !== true) {\n return;\n }\n\n if (!Wistia.isSentryInitialized) {\n initializeSentry();\n if (errorsCapturedBeforeSentryClientInit.length < MAX_PENDING_ERRORS) {\n errorsCapturedBeforeSentryClientInit.push({ details, error, product });\n }\n return;\n }\n\n const sampleRate = getSampleRatesByProductType(product);\n\n if (IS_DEV_ENV) {\n console.error(error); // eslint-disable-line no-console\n return;\n }\n if (IS_TEST_ENV) {\n // Do nothing\n return;\n }\n\n let shouldSendToSentry = false;\n\n const cryptoObj = isNil(window.crypto) ? window.msCrypto : window.crypto;\n if (cryptoObj !== undefined) {\n const cryptoRandom = cryptoObj.getRandomValues(new Uint32Array(1));\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n shouldSendToSentry = cryptoRandom[0] / (0xffffffff + 1) < sampleRate;\n } else {\n const mathRandom = Math.random();\n shouldSendToSentry = mathRandom < sampleRate;\n }\n\n if (!shouldSendToSentry) {\n // If we shouldn't send to Sentry, just print to the console\n console.error(error); // eslint-disable-line no-console\n // trackingConsentApi is not yet converted to TS\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n } else if (isVisitorTrackingEnabled()) {\n // The Sentry docs indicate that we can pass context in a few different ways (https://docs.sentry.io/platforms/javascript/enriching-events/context/#passing-context-directly)\n // Those examples do not actually seem to work.\n // Instead, we will clear out the scope each time we report a new exception and manually re-create it.\n Wistia._sentryScope.clear();\n Wistia._sentryScope.setTag('pillar', 'publish');\n Wistia._sentryScope.setTag('product', product);\n if (isNonEmptyRecord(details)) {\n Wistia._sentryScope.setTags(details);\n }\n Wistia._sentryScope.setTag('url', window.location.href);\n Wistia._sentryScope.captureException(error);\n }\n } catch (err) {\n // We don't want any problems with our error logging to break other things,\n // so we'll just print this to the console.\n console.error(err); // eslint-disable-line no-console\n }\n};\n\nconst globalErrorHandler = (event: ErrorEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const eventError = event.error;\n if (!(eventError instanceof Error)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const eventErrorSource: string = event.error?.source ?? '';\n const fastHostName = appHostname('fast');\n // Filter out any global errors that didn't originate from Wistia code\n if (eventErrorSource.includes(fastHostName)) {\n reportError('globalListener', eventError);\n }\n};\n\nconst globalUnhandledRejectionHandler = (event: PromiseRejectionEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const eventReason = event.reason;\n if (!(eventReason instanceof Error)) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const eventReasonStack: string = event.reason?.stack ?? '';\n // Filter out any unhandled rejections that didn't originate from Wistia code\n if (eventReasonStack.includes(appHostname('fast'))) {\n reportError('globalListener', eventReason);\n }\n};\n\nexport const listenForGlobalErrors = (): void => {\n if (!Wistia._isListeningForGlobalErrors) {\n window.addEventListener('error', globalErrorHandler);\n Wistia._isListeningForGlobalErrors = true;\n }\n};\n\nexport const listenForGlobalUnhandledRejections = (): void => {\n if (!Wistia._isListeningForGlobalUnhandledRejections) {\n window.addEventListener('unhandledrejection', globalUnhandledRejectionHandler);\n Wistia._isListeningForGlobalUnhandledRejections = true;\n }\n};\n","import { cast, clone, getDeep, isArray, setAndPreserveUndefined, eachLeaf } from 'utilities/obj.js';\nimport { wlog } from 'utilities/wlog.js';\n\nexport const proto = (url = location.href) => {\n if (/^http:\\/\\//.test(url)) {\n return 'http:';\n }\n\n return 'https:';\n};\n\n// decompose the raw query params into a JSON object\n// root[level1][level2][level3] to deep set\n// param[a]=1&param[a]=2 to create an array\nexport const queryParamsToObject = (raw) => {\n // get each key/val pair separated by &\n const result = {};\n if (!raw) {\n return result;\n }\n\n const parts = raw.split('&');\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n\n // break up key/vals\n let pair = part.split('=');\n let key = pair[0];\n let val = pair[1];\n try {\n key = debrack(decodeURIComponent(key)) || '';\n } catch (e) {\n // log on a timeout so that wlog has a chance to set its level from page\n // url.\n setTimeout(() => {\n wlog.notice(e);\n }, 50);\n key = '';\n }\n\n // deep cast each piece of the key (e.g. \"foo.1\" yields [\"foo\", 1])\n cast(key);\n\n // if the key already exists in params\n const existing = getDeep(result, key);\n if (existing != null) {\n // make this value an array of same-name params\n if (isArray(existing)) {\n existing.push(urlComponentToObject(val));\n } else {\n const arr = [existing];\n arr.push(urlComponentToObject(val));\n setAndPreserveUndefined(result, key, arr);\n }\n } else {\n // otherwise save key/val\n setAndPreserveUndefined(result, key, urlComponentToObject(val));\n }\n }\n\n // return the json object\n return result;\n};\n\n// Any val that starts with json:slashslash should have its data\n// parsed as JSON.\nexport const urlComponentToObject = (val) => {\n if (val == null) {\n return val;\n }\n\n let result;\n try {\n result = decodeURIComponent(val);\n } catch (e) {\n // log on a timeout so that wlog has a chance to set its level from page\n // url.\n setTimeout(() => {\n wlog.notice(e);\n }, 50);\n result = val;\n }\n return result;\n};\n\nexport const objectToQueryParams = (obj) => {\n const result = [];\n eachLeaf(obj, (leafVal, path) => {\n if (leafVal != null) {\n result.push(`${encodeURIComponent(brack(path))}=${encodeURIComponent(leafVal)}`);\n } else {\n result.push(encodeURIComponent(brack(path)));\n }\n });\n return result.join('&');\n};\n\nexport const splitPath = (str) => {\n const result = [];\n if (str == null) {\n return result;\n }\n const parts = str.split(/\\/+/);\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n if (part != null && part !== '') {\n result.push(part);\n }\n }\n return result;\n};\n\n// `path` can be a string or an array of strings.\nexport const joinPath = (path) => {\n if (typeof path === 'string') {\n path = path.split('/');\n }\n if (path == null) {\n return '';\n }\n return `/${path.join('/')}`;\n};\n\n// convert array [abc, def, ghi] to bracketed format \"abc[def][ghi]\"\nexport const brack = (path) => {\n let result = path[0];\n for (let i = 1; i < path.length; i++) {\n result += `[${path[i]}]`;\n }\n return result;\n};\n\n// convert \"abc[def][ghi][jkl]\" to array [abc, def, ghi, jkl]\nexport const debrack = (str) => {\n return str.match(/([\\w\\-_]+)/g);\n};\n\n/// /\n// An object to represent an URL, and to make it easy to\n// get/set various properties and parameters of the URL.\n/// /\nconst URL_CONSTRUCTOR_KEYS = ['protocol', 'host', 'port', 'params', 'path'];\nexport const Url = function (url) {\n const self = this;\n\n // if an url is supplied, parse. if it's an object, explicitly\n // set options. otherwise, just assume we're building an url\n // from scratch.\n const construct = function () {\n self.params = {};\n self.path = [];\n self.host = '';\n self.rawPath = '';\n if (typeof url === 'object') {\n self.fromOptions(url);\n } else if (url) {\n self.fromRaw(url);\n }\n };\n\n construct();\n};\n\nconst uproto = Url.prototype;\n\nuproto.fromOptions = function (options) {\n for (let i = 0; i < URL_CONSTRUCTOR_KEYS.length; i++) {\n let opt = URL_CONSTRUCTOR_KEYS[i];\n if (options[opt] != null) {\n this[opt] = options[opt];\n }\n }\n return this;\n};\n\n// parse the url and save the info\nuproto.fromRaw = function (raw) {\n this.rawUrl = raw;\n\n let match;\n\n // protocol\n match = raw.match(/^((?:https?:)|(?:file:)|(?:ftp:))?\\/\\//);\n if (match) {\n this.protocol = match[1] || undefined;\n }\n\n // host\n match = raw.match(/\\/\\/([^:?#/]*)/);\n if (match) {\n this.host = match[1] || undefined;\n }\n\n // path\n match = raw.match(/\\/\\/.*?(\\/[^?#$]+)/) || raw.match(/(^\\/[^/][^?#$]+)/);\n if (match) {\n this.setPath(match[1]);\n }\n\n // port\n match = raw.match(/:(\\d+)/);\n if (match) {\n this.port = parseInt(match[1], 10);\n }\n\n // url parameters\n match = raw.match(/\\?([^#]+)/);\n if (match) {\n this.rawParams = match[1];\n this.params = queryParamsToObject(this.rawParams);\n }\n\n // anchor\n match = raw.match(/#(.*)$/);\n if (match) {\n this.anchor = match[1];\n }\n\n return this;\n};\n\nuproto.clone = function () {\n return new Url({\n protocol: this.protocol,\n host: this.host,\n port: this.port,\n path: clone(this.path),\n params: clone(this.params),\n anchor: this.anchor,\n });\n};\n\nuproto.ext = function (ext) {\n if (ext != null) {\n const current = this.ext();\n const i = this.path.length - 1;\n const regexp = new RegExp(`\\\\.${current}`, 'g');\n if (current) {\n this.path[i] = `${this.path[i].replace(regexp, '')}`;\n }\n return (this.path[i] = `${this.path[i]}.${ext}`);\n }\n const match = this.path[this.path.length - 1].match(/\\.(.*)$/);\n return (match != null && match[1]) || null;\n};\n\n// accept loc for testing purposes\nuproto.isRelative = function (loc = window.location) {\n const proto = this.protocol;\n const host = this.host;\n return (\n (proto == null || proto === '' || proto === loc.protocol) && (!host || host === loc.hostname)\n );\n};\n\nuproto.toString = function () {\n if (this.isRelative()) {\n return this.relative();\n }\n return this.absolute();\n};\n\n// print this url object as a simple string\n// choose sane defaults if parts aren't specified\nuproto.absolute = function () {\n let protocolPart = '';\n if (this.protocol != null) {\n protocolPart = this.protocol;\n }\n let portPart = '';\n if (this.port != null) {\n portPart = `:${this.port}`;\n }\n return `${protocolPart}//${this.host || location.host}${portPart}${this.relative()}`;\n};\n\nuproto.relative = function () {\n let pathPart = '';\n if (this.path.length > 0) {\n pathPart = joinPath(this.path);\n if (this._hasTrailingSlash) {\n pathPart += '/';\n }\n }\n let paramPart = `?${objectToQueryParams(this.params)}`;\n if (paramPart.length === 1) {\n paramPart = '';\n }\n return `${pathPart}${paramPart}${this.relativeAnchor()}`;\n};\n\nuproto.authority = function () {\n const portPart = this.port != null ? `:${this.port}` : '';\n return `${this.host}${portPart}`;\n};\n\nuproto.relativeProtocol = function () {\n let portPart = '';\n if (this.port != null) {\n portPart = `:${this.port}`;\n }\n return `//${this.host}${portPart}${this.relative()}`;\n};\n\nuproto.relativeAnchor = function () {\n let anchorPart = '';\n if (this.anchor != null) {\n anchorPart = `#${this.anchor}`;\n }\n return `${anchorPart}`;\n};\n\nuproto.setPath = function (rawPath) {\n this.rawPath = rawPath;\n this._hasTrailingSlash = /\\/$/.test(this.rawPath);\n this.path = splitPath(this.rawPath);\n};\n\n// create some aliases in Url to create/parse URLs\nUrl.create = (options) => {\n return new Url(options);\n};\n\nexport const createUrl = Url.create;\nUrl.parse = (str) => {\n return new Url(str);\n};\nexport const parseUrl = Url.parse;\n","import { MUTE_CHANGE_EVENT } from './eventConstants.ts';\nimport type { MUTE_CHANGE_EVENT_TYPE } from '../types/events.ts';\n\ntype EventCallback = (detail?: unknown) => void;\n\ntype StoredCallbacks = {\n eventListenerCallback: EventCallback;\n givenCallback: unknown;\n};\n\n// some legacy events are converted to a different name when they are added to the event listener\nexport const convertedEventNames: Record<string, string> = {\n mutechange: MUTE_CHANGE_EVENT,\n};\n\n// some legacy events have a different detail structure than the new ones\n// this is a mapping of the old detail structure to the new one\nconst callbackDetailsConversions: Record<string, ((detail: unknown) => unknown) | undefined> = {\n mutechange: (detail: MUTE_CHANGE_EVENT_TYPE['detail']) => {\n return detail.isMuted;\n },\n};\n\nexport class EventShepherd {\n private readonly convertedEventsMap: Record<string, StoredCallbacks[] | undefined> = {};\n\n public addListener(eventName: string, element: HTMLElement, callback: EventCallback): void {\n // if the event name is not in the convertedEventNames map, use the event name as is\n // this accounts for legacy events that do not have kebab-case names\n const normalizedEventName = convertedEventNames[eventName] ?? eventName;\n\n // if the event name is not in the convertedEventsMap, initialize an empty array\n this.convertedEventsMap[normalizedEventName] ??= [];\n\n const eventListenerCallback = (customEvent: CustomEvent) => {\n // if the callbackDetailsConversions map has a conversion function for the event name, use it.\n // for example, the mute-change event has a detail of { isMuted: boolean }, but the legacy event just passes a boolean\n if (callbackDetailsConversions[eventName]) {\n const convertedDetail = callbackDetailsConversions[eventName](customEvent.detail);\n callback(convertedDetail);\n } else {\n callback();\n }\n };\n\n // we have to store the callback and the event listener callback separately because:\n // 1. to properly remove the event listener, we need to have a reference to the event listener callback\n // 2. we need to match against the given callback to remove the correct listener\n this.convertedEventsMap[normalizedEventName].push({\n givenCallback: callback,\n eventListenerCallback,\n });\n\n // add the event listener to the element\n element.addEventListener(normalizedEventName, eventListenerCallback);\n }\n\n public removeAllListeners(element: HTMLElement): void {\n Object.keys(this.convertedEventsMap).forEach((eventName) => {\n this.convertedEventsMap[eventName]?.forEach((storedCallbacks: StoredCallbacks) => {\n element.removeEventListener(eventName, storedCallbacks.eventListenerCallback);\n });\n\n this.convertedEventsMap[eventName] = [];\n });\n }\n\n public removeListener(eventName: string, element: HTMLElement, callback?: EventCallback): void {\n const normalizedEventName = convertedEventNames[eventName] ?? eventName;\n const indexesToRemove: number[] = [];\n if (callback) {\n element.removeEventListener(normalizedEventName, callback);\n\n if (this.convertedEventsMap[normalizedEventName]) {\n this.convertedEventsMap[normalizedEventName].forEach((storedCallbacks, index) => {\n if (storedCallbacks.givenCallback === callback) {\n indexesToRemove.push(index);\n element.removeEventListener(normalizedEventName, storedCallbacks.eventListenerCallback);\n }\n });\n\n // remove the bindings entirely\n indexesToRemove.forEach((index: number) => {\n if (this.convertedEventsMap[normalizedEventName]) {\n this.convertedEventsMap[normalizedEventName].splice(index, 1);\n }\n });\n }\n } else {\n this.convertedEventsMap[normalizedEventName] = [];\n }\n }\n}\n","import { ComponentChildren, createContext, h, JSX } from 'preact';\nimport { useContext } from 'preact/hooks';\nimport type { MediaData } from '../../../types/player-api-types.ts';\nimport type { EmbedOptions } from '../../../types/EmbedOptions.ts';\n\ntype PlayerDataContextType = {\n embedOptions: EmbedOptions;\n mediaData: MediaData;\n};\n\nconst PlayerDataContext = createContext<PlayerDataContextType | null>(null);\n\nexport const PlayerDataProvider = ({\n children,\n embedOptions,\n mediaData,\n}: {\n children: ComponentChildren;\n embedOptions: EmbedOptions;\n mediaData: MediaData;\n}): JSX.Element | null => {\n return (\n <PlayerDataContext.Provider\n value={{\n embedOptions,\n mediaData,\n }}\n >\n {children}\n </PlayerDataContext.Provider>\n );\n};\n\nexport const usePlayerData = (): PlayerDataContextType => {\n const context = useContext(PlayerDataContext);\n if (context == null) {\n throw new Error('usePlayerData must be used within a PlayerDataProvider');\n }\n return context;\n};\n","export const AFTER_REPLACE_EVENT = 'after-replace';\n\nexport const API_READY_EVENT = 'api-ready';\n\nexport const BEFORE_REPLACE_EVENT = 'before-replace';\n\nexport const BETWEENTIMES_EVENT_EV1 = 'betweentimes';\n\nexport const CROSSTIME_EVENT_EV1 = 'crosstime';\n\nexport const EMBED_OPTIONS_CHANGED_EVENT = 'embed-options-changed';\n\nexport const IMPL_CREATED_EVENT = 'impl-created';\n\nexport const INIT_EMBED_EVENT = 'initembed';\n\nexport const INPUT_CONTEXT_CHANGE_EVENT = 'input-context-change';\n\nexport const INTERNAL_API_ON_FIND_EVENT = 'internal-api-on-find';\n\nexport const LOADED_MEDIA_DATA_EVENT = 'loaded-media-data';\n\nexport const MUTE_CHANGE_EVENT = 'mute-change';\n\nexport const PLAYER_COLOR_CHANGE_EVENT = 'playercolorchange';\n\nexport const TIME_UPDATE_EVENT = 'time-update';\n","import { Wistia } from '../wistia_namespace.ts';\n\n/*\n * This module is designed as a simpler version of our old localStorage\n * utility. To reduce potential bundle size, it doesn't make use of Obj\n * utilities or wlog, and doesn't return early based on browser detection.\n *\n * To avoid multiple tab bugs, it does not try to do any kind of commit\n * debouncing. Every call to `set` involves JSON.serialize() and every call to\n * `get` involves JSON.parse(). Therefore, if you are performing many\n * operations, you should cache an intermediate value. The\n * updateLocalStorage function is also provided for doing many updates\n * with a single parse and serialize call.\n *\n * If you are working with localStorage on something that requires lots of\n * updates, you should use a separate namespace. That way there is less to\n * deserialize and serialize on each read and write.\n */\n\nconst throwAsync = (e) => {\n setTimeout(() => {\n throw e;\n }, 0);\n};\n\nconst OBJ_PROP = '_namespacedLocalStorage';\n\nconst localStorageWorks = (ns = 'wistia-test-localstorage') => {\n try {\n // Check the global on every call — don't rely solely on the cached result.\n // In test environments (Vitest with jsdom), a previous test can warm the\n // cache to `true` and then have the global torn down between files, leaving\n // pending timers/intervals to dereference a missing `localStorage` and\n // crash with a ReferenceError.\n //\n // This access must live inside the try/catch: simply *reading* the global\n // can throw, not just be undefined. In a sandboxed iframe without\n // `allow-same-origin`, the `localStorage` getter throws a SecurityError —\n // and `typeof` does NOT suppress it (it only suppresses ReferenceError for\n // truly undeclared identifiers, and `localStorage` is a declared property\n // on `window`). We must never recommend adding `allow-same-origin` to fix\n // this, so the code has to tolerate the throw.\n if (typeof localStorage === 'undefined') {\n return false;\n }\n if (Wistia._localStorageWorks != null) {\n return Wistia._localStorageWorks;\n }\n // no-ops that test get, set, and remove. These may throw an exception\n // in Private Browsing mode on iOS and Safari.\n const currentVal = localStorage.getItem(ns);\n localStorage.removeItem(ns);\n localStorage.setItem(ns, currentVal);\n localStorage.removeItem(ns);\n Wistia._localStorageWorks = true;\n } catch (e) {\n Wistia._localStorageWorks = false;\n }\n return Wistia._localStorageWorks;\n};\n\n// Gets our memory store, which we use in parallel with localStorage in case\n// localStorage is disabled. In some browsers and situations, disabled\n// localStorage will throw exceptions.\nconst getMemory = () => {\n if (Wistia[OBJ_PROP] == null) {\n Wistia[OBJ_PROP] = {};\n }\n return Wistia[OBJ_PROP];\n};\n\nexport const getLocalStorage = (ns) => {\n if (!localStorageWorks()) {\n return getMemory()[ns] || {};\n }\n\n if (localStorage[ns]) {\n try {\n if (localStorage[ns] === 'null') {\n // \"null\" is valid JSON, and JSON.parse(\"null\") will return null, which\n // isn't usable for our purposes at all.\n return {};\n }\n return JSON.parse(localStorage[ns]);\n } catch (e) {\n throwAsync(e);\n }\n }\n return {};\n};\n\nexport const removeLocalStorage = (ns) => {\n if (!localStorageWorks()) {\n getMemory()[ns] = {};\n return;\n }\n\n try {\n localStorage.removeItem(ns);\n } catch (e) {\n throwAsync(e);\n }\n};\n\nexport const setLocalStorage = (ns, obj) => {\n if (!localStorageWorks()) {\n if (obj != null && typeof obj === 'object') {\n getMemory()[ns] = obj;\n }\n return obj;\n }\n\n try {\n // We set Wistia._localStorage for compatibility with the old localStorage util,\n // which would otherwise overwrite any changes we make. :0\n getMemory()[ns] = obj;\n\n localStorage[ns] = JSON.stringify(obj);\n } catch (e) {\n throwAsync(e);\n\n // TODO: We might want some strategy of dealing with QuotaExceededError\n // exceptions. Ideally we'd be really smart about pruning, but our other\n // options are (a) just don't update localStorage (that's what we're\n // doing now), or (b) clobber our localStorage to see if that helps.\n }\n return obj;\n};\n\nexport const updateLocalStorage = (ns, fn) => {\n const obj = getLocalStorage(ns);\n\n // fn() may throw an exception. we catch and report because we don't want\n // an exception after modifying in-place localStorage to get our local store\n // out of sync.\n try {\n fn(obj);\n } catch (e) {\n throwAsync(e);\n }\n return setLocalStorage(ns, obj);\n};\n","import { isNotNil } from '@wistia/type-guards';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { mediaDataHost } from './hosts.js';\nimport { mediaDataTransforms } from './media-data-transforms.js';\nimport { cacheMediaData, getMediaDataFromCache } from './remote-data-cache.ts';\nimport type {\n MediaDataServerResponse,\n MediaDataServerErrorResponse,\n MediaData,\n Localization,\n} from '../types/player-api-types.ts';\nimport { isMediaDataError } from './mediaDataError.ts';\nimport type { PluginConfigs } from '../types/plugins.ts';\nimport { getPreferredAvailableLanguageIndex } from '../embeds/wistiaPlayer/utilities/getPreferredLanguageIndex.ts';\nimport { getViewerPreferences } from './viewerPreferences.js';\n\nexport type FetchMediaDataOptions = {\n bypassOriginShield?: boolean;\n channelId?: number | null;\n channelPassword?: string | null;\n defaultMediaLanguage?: string;\n deferFetchingToCarousel?: boolean;\n embedHost?: string;\n overrideMediaLanguage?: string;\n password?: string | null;\n plugin?: PluginConfigs;\n skipCache?: boolean;\n};\n\nconst fetchUnlocalizedMediaData = async (\n hashedId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n const cacheKey = hashedId;\n\n const mediaDataFromCache = getMediaDataFromCache(cacheKey);\n if (mediaDataFromCache && options.skipCache !== true) {\n return Promise.resolve(mediaDataFromCache);\n }\n\n if (isNotNil(Wistia._mediaDataPromises[cacheKey]) && options.skipCache !== true) {\n return Wistia._mediaDataPromises[cacheKey];\n }\n\n const host = mediaDataHost(options) as string;\n const url = new window.URL(`https://${host}/embed/medias/${hashedId}.json`);\n\n if (isNotNil(options.channelId)) {\n url.searchParams.set('channelId', options.channelId.toString());\n }\n\n const channelPasswordParam =\n options.channelPassword ?? options.plugin?.passwordProtectedChannel?.password;\n if (isNotNil(channelPasswordParam)) {\n url.searchParams.set('channelPassword', channelPasswordParam);\n }\n\n if (isNotNil(options.password)) {\n url.searchParams.set('password', options.password);\n }\n\n if (options.deferFetchingToCarousel) {\n url.searchParams.set('defer_fetching_to_carousel', 'true');\n }\n\n // See: https://www.fastly.com/documentation/guides/concepts/edge-state/cache/purging/#shielding\n if (options.bypassOriginShield) {\n url.searchParams.set('bos', '1');\n }\n\n const promise = fetch(url.href)\n .then((resp) => resp.json() as MediaDataServerResponse)\n .then((response: MediaDataServerResponse): MediaData | MediaDataServerErrorResponse => {\n if (isMediaDataError(response)) {\n return response;\n }\n const { media: mediaData } = response as { media: MediaData };\n\n mediaDataTransforms(mediaData, options);\n cacheMediaData(mediaData.hashedId ?? '', mediaData);\n\n return mediaData;\n })\n .finally(() => {\n Reflect.deleteProperty(Wistia._mediaDataPromises, cacheKey);\n });\n\n Wistia._mediaDataPromises[cacheKey] = promise;\n\n return promise;\n};\n\nexport const fetchMediaData = async (\n hashedId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n const mediaDataOrError = await fetchUnlocalizedMediaData(hashedId, options);\n if (isMediaDataError(mediaDataOrError)) {\n return mediaDataOrError as MediaDataServerErrorResponse;\n }\n\n const mediaData = mediaDataOrError as MediaData;\n\n if (mediaData.localizations == null || mediaData.localizations.length === 0) {\n return mediaData;\n }\n\n const typedViewerPreferences = getViewerPreferences() as Record<string, unknown>;\n const localizationViewerPreferences = typedViewerPreferences.localization as\n | Partial<Localization>\n | undefined;\n\n // The order is meaningful here. Languages earlier in the array take priority\n // over those later in the array.\n const preferredLanguages: string[] = [];\n if (options.overrideMediaLanguage != null) {\n preferredLanguages.push(options.overrideMediaLanguage);\n }\n if (localizationViewerPreferences?.bcp47LanguageTag != null) {\n preferredLanguages.push(localizationViewerPreferences.bcp47LanguageTag);\n }\n if (options.defaultMediaLanguage != null) {\n preferredLanguages.push(options.defaultMediaLanguage);\n }\n\n // Remove duplicates, keeping the first occurrence\n const uniquePreferredLanguages = preferredLanguages.filter(\n (lang, index) => preferredLanguages.indexOf(lang) === index,\n );\n\n // First look for exact bcp-47 language code matches\n let preferredLanguageIndex = getPreferredAvailableLanguageIndex(\n mediaData.localizations.map((loc) => loc.bcp47LanguageTag),\n uniquePreferredLanguages,\n );\n\n // If none found, look for exact wistiaLanguageCode matches\n if (preferredLanguageIndex === -1) {\n preferredLanguageIndex = getPreferredAvailableLanguageIndex(\n mediaData.localizations.map((loc) => loc.wistiaLanguageCode),\n uniquePreferredLanguages,\n );\n }\n\n // If still no match, default to the browser language preferences\n if (preferredLanguageIndex === -1) {\n preferredLanguageIndex = getPreferredAvailableLanguageIndex(\n mediaData.localizations.map((loc) => loc.bcp47LanguageTag),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n [...(navigator.languages ?? ['en'])],\n );\n }\n\n if (preferredLanguageIndex >= 0) {\n const preferredLocalization = mediaData.localizations[preferredLanguageIndex];\n\n if (mediaData.hashedId === preferredLocalization.hashedId) {\n return mediaData;\n }\n\n // For alternate audio, always load the source media (not the alternate audio's hashedId)\n // The audio track switching is handled by HLS, not by loading a different media\n if (preferredLocalization.localizationIntent === 'alternate_audio') {\n return mediaData;\n }\n\n return fetchUnlocalizedMediaData(preferredLocalization.hashedId, {\n ...options,\n });\n }\n\n return mediaData;\n};\n","import type { EmbedOptions } from '../types/EmbedOptions.ts';\n\nconst BIG_PLAY_BUTTON_RADIUS_RATIO = 0.75;\nexport const CONTROL_BAR_DISTANCE_RATIO = 0.75;\n\nconst FLOATING_CONTROL_BAR_RADIUS = 18;\nconst FLOATING_CONTROL_BAR_DISTANCE = 6;\n\n/*\n\nRounded Player\n\nThese four methods determine the defaults for rounding the player.\n\n- {roundedPlayer} - if it is the _only_ option, it is used as the base upon which all the other border radiuses are derived.\n- {playerBorderRadius} - Determines the border radius of the thumbnail and outer parts of the player.\n- {bigPlayButtonBorderRadius} - Border radius of the big play button.\n- {controlBarBorderRadius} - Border radius of the control bar.\n- {controlBarDistance} - Distance the control bar is from the edges of the player - also how far control bar dialogs are from the control bar.\n- {floatingControlBar} - Boolean that can used to just create a floating control bar with border radius - no configuration.\n\n*/\n\n/**\n * Takes rounded player embed options and returns the calculated player border radius.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultPlayerBorderRadius = ({\n playerBorderRadius,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (roundedPlayer !== undefined) {\n return roundedPlayer;\n }\n if (playerBorderRadius !== undefined) {\n return playerBorderRadius;\n }\n return 0;\n};\n\n/**\n * Takes rounded player embed options and returns the calculated big play button border radius.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultBigPlayButtonBorderRadius = ({\n bigPlayButtonBorderRadius,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (bigPlayButtonBorderRadius !== undefined) {\n return bigPlayButtonBorderRadius;\n }\n if (roundedPlayer !== undefined) {\n return roundedPlayer * BIG_PLAY_BUTTON_RADIUS_RATIO;\n }\n\n return 0;\n};\n\n/**\n * Takes rounded player embed options and returns the calculated control bar border radius.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultControlBarBorderRadius = ({\n controlBarBorderRadius,\n floatingControlBar,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (controlBarBorderRadius !== undefined) {\n return controlBarBorderRadius;\n }\n if (roundedPlayer !== undefined) {\n return roundedPlayer * CONTROL_BAR_DISTANCE_RATIO;\n }\n if (floatingControlBar === true) {\n return FLOATING_CONTROL_BAR_RADIUS;\n }\n\n return 0;\n};\n\n/**\n * Takes rounded player embed options and returns the calculated control bar distance.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultControlBarDistance = ({\n controlBarBorderRadius,\n floatingControlBar,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (roundedPlayer !== undefined) {\n return roundedPlayer / 4;\n }\n if (controlBarBorderRadius !== undefined) {\n return controlBarBorderRadius / 2;\n }\n if (floatingControlBar === true) {\n return FLOATING_CONTROL_BAR_DISTANCE;\n }\n\n return 0;\n};\n","import { assign } from 'utilities/obj.js';\nimport { h, render, Component } from 'preact';\nimport { eV1Protocol, eV1Host } from 'utilities/hosts.js';\nimport { Thumbnail } from './Thumbnail.jsx';\n\nexport class ProgressiveThumbnail extends Component {\n constructor(props) {\n super(props);\n this.state = {\n normalThumbOpacity: props.isVisible ? 1 : 0,\n };\n this.onDisplay = props.onDisplay;\n }\n\n componentWillReceiveProps(nextProps) {\n if (!this.onDisplay && nextProps.onDisplay) {\n this.onDisplay = nextProps.onDisplay;\n }\n }\n\n render() {\n if (this.props.isVisible) {\n this._hasRenderedVisible = true;\n }\n\n const sharedProps = {\n ariaHidden: this.props.ariaHidden,\n backgroundColor: this.props.backgroundColor,\n fitStrategy: this.props.fitStrategy,\n isVisible: this.props.isVisible,\n stillSnap: this.props.stillSnap,\n stretchLimit: this.props.stretchLimit,\n videoHeight: this.props.videoHeight,\n videoWidth: this.props.videoWidth,\n thumbnailAltText: this.props.thumbnailAltText,\n playerBorderRadius: this.props.playerBorderRadius,\n };\n const swatchProps = assign({}, sharedProps, {\n ariaHidden: true,\n images: [\n {\n url: `${eV1Protocol()}//${eV1Host()}/embed/medias/${this.props.hashedId}/swatch`,\n },\n ],\n });\n const normalThumbProps = assign({}, sharedProps, {\n onDisplay: this.onDisplayNormalThumb,\n images: this.props.images,\n });\n return (\n <div ref={this.props.elemRef}>\n {this.props.swatchEnabled && this._hasRenderedVisible ? (\n <Thumbnail {...swatchProps} wrapperStyle={this.swatchWrapperStyle()} />\n ) : null}\n {this._hasRenderedVisible ? (\n <Thumbnail {...normalThumbProps} wrapperStyle={this.normalThumbWrapperStyle()} />\n ) : null}\n </div>\n );\n }\n\n componentDidMount() {\n this._fadeTimer = setTimeout(this.afterTwoSeconds, 2000);\n }\n\n componentWillUnmount() {\n clearTimeout(this._fadeTimer);\n }\n\n normalThumbWrapperStyle() {\n const transition =\n this.props.swatchEnabled && this.props.uiHasRendered && this.state.normalThumbOpacity === 1\n ? 'opacity 3s'\n : '';\n return {\n height: '100%',\n left: 0,\n opacity: this.state.normalThumbOpacity,\n position: this.props.fitStrategy === 'naturalHeight' ? 'relative' : 'absolute',\n top: 0,\n transition,\n width: '100%',\n };\n }\n\n swatchWrapperStyle() {\n return {\n filter: 'blur(5px)',\n height: '100%',\n left: 0,\n position: this.props.fitStrategy === 'naturalHeight' ? 'relative' : 'absolute',\n top: 0,\n width: '100%',\n };\n }\n\n afterTwoSeconds = () => {\n // If we've waited 2 seconds for the thumbnail to load but it still hasn't\n // finished, then we guessed wrong about what the initial opacity should\n // be. Set it back to 0 so we do a slow fade when it's done loading.\n if (!this._displayed && this.state.normalThumbOpacity === 1) {\n this.setState({ normalThumbOpacity: 0 });\n }\n };\n\n onDisplayNormalThumb = () => {\n this.setState({ normalThumbOpacity: 1 });\n\n this._displayed = true;\n if (this.onDisplay) {\n this.onDisplay();\n }\n };\n}\n","import type { PublicApi } from '../types/player-api-types.ts';\nimport { cast, clone, isObject } from './obj.js';\nimport { wData, wRemoveData } from './wistiaData.js';\nimport { getOneApiHandle } from './getApiHandles.ts';\n\nexport const OPTION_PREFIX = 'wistia_embed_options_';\nexport const GLOBAL_ID_KEY = '__global__';\n\n/**\n * Get the embed options for a given key or embed id\n * @param {string} id - The key or embed id\n * @param {Function} [matcherFn=getOneApiHandle] - Custom matcher function\n * @returns {object}\n */\nexport const getEmbedOptionStore = (id: string, matcherFn = getOneApiHandle): object => {\n // If options exist for the provided id, just return them\n if (wData([OPTION_PREFIX, id]) !== undefined) {\n return wData([OPTION_PREFIX, id]) as object;\n }\n\n // Otherwise, lets check this key's api handle\n const apiHandleFromKey = matcherFn(id) as PublicApi | 'removed' | null;\n if (apiHandleFromKey === null || apiHandleFromKey === 'removed') {\n return {};\n }\n // And compare it against all the other stored api handles\n if (wData(OPTION_PREFIX) !== undefined) {\n // If the api handles match, return the options for that key\n const matchedKey = Object.keys(wData(OPTION_PREFIX) as object).find(\n (key) => matcherFn(key) === apiHandleFromKey,\n );\n if (wData([OPTION_PREFIX, matchedKey]) !== undefined) {\n return wData([OPTION_PREFIX, matchedKey]) as object;\n }\n }\n return {};\n};\n\n/**\n * Set the embed options for a given key or embed id\n * @param {string} id - The key or embed id\n * @param {object} options - The options to set\n * @returns {object}\n */\nexport const setEmbedOptionStore = (id: string, options: object | null): object => {\n if (options !== null) {\n return wData([OPTION_PREFIX, id], cast(clone(options))) as object;\n }\n return {};\n};\n\n/**\n * Remove the embed options for a given key or embed id\n * @param {string} id - The key or embed id\n * @param {object} options - The options to set\n * @returns {void}\n */\nexport const removeEmbedOptionStore = (id: string): void => {\n wRemoveData([OPTION_PREFIX, id]);\n};\n\n/**\n * Legacy behavior replacement for Wistia.options - Get or set embed options based\n * on the parameters provided\n * @param {string | object} id - The id of the embed or an object of options\n * @param {object} options - The options to set\n * @returns {object}\n */\nexport const getOrSetEmbedOptionStore = (id?: object | string, options?: object | null): object => {\n let optionsKey = id;\n let embedOptions = options;\n\n // Redundant \"typeof\" check is needed to make typescript happy\n if (isObject(optionsKey) && typeof optionsKey === 'object') {\n embedOptions = optionsKey;\n optionsKey = GLOBAL_ID_KEY;\n }\n\n // Set options\n if (embedOptions !== undefined && embedOptions !== null) {\n return wData([OPTION_PREFIX, optionsKey], cast(clone(embedOptions))) as object;\n }\n\n // Get options\n if (optionsKey !== undefined) {\n // If options exist for the provided id, just return them\n if (wData([OPTION_PREFIX, id]) !== undefined) {\n return wData([OPTION_PREFIX, id]) as object;\n }\n\n // Otherwise, lets check this key's api handle\n const apiHandleFromKey = getOneApiHandle(optionsKey as string) as PublicApi | 'removed' | null;\n if (apiHandleFromKey === null || apiHandleFromKey === 'removed') {\n return {};\n }\n // And compare it against all the other stored api handles\n if (wData(OPTION_PREFIX) !== undefined) {\n // If the api handles match, return the options for that key\n const matchedKey = Object.keys(wData(OPTION_PREFIX) as object).find(\n (key) => getOneApiHandle(key) === apiHandleFromKey,\n );\n if (wData([OPTION_PREFIX, matchedKey]) !== undefined) {\n return wData([OPTION_PREFIX, matchedKey]) as object;\n }\n }\n return {};\n }\n return wData(OPTION_PREFIX) as object;\n};\n","import { isNil } from '@wistia/type-guards';\nimport { CarouselData } from '../types/carousel.ts';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { MediaData } from '../types/player-api-types.ts';\nimport { wlog } from './wlog.js';\nimport { LiveStreamEventData } from '../types/live-stream-event.ts';\n\nexport const getMediaDataFromCache = (hashedId: string): MediaData | null | undefined => {\n const mediaData = Wistia._remoteData.get(`media_${hashedId}`);\n if (isNil(mediaData)) return null;\n\n // It's possible that we're caching a server error response as MediaData.\n // If we find one of those places, log an error.\n if (Object.hasOwn(mediaData, 'error')) {\n wlog.error(\n `Received cached error response instead of MediaData when retrieving cached mediaData for ${hashedId}`,\n );\n }\n\n return mediaData as MediaData;\n};\n\nexport const cacheMediaData = (hashedId: string, data: MediaData): void => {\n Wistia._remoteData.set(`media_${hashedId}`, data);\n};\n\nexport const uncacheMediaData = (hashedId: string): void => {\n Wistia._remoteData.delete(`media_${hashedId}`);\n Reflect.deleteProperty(Wistia._mediaDataPromises, hashedId);\n};\n\nexport const cacheLiveStreamEventData = (hashedId: string, data: LiveStreamEventData): void => {\n Wistia._remoteData.set(`live_stream_event_${hashedId}`, data);\n};\n\nexport const uncacheLiveStreamEventData = (hashedId: string): void => {\n Wistia._remoteData.delete(`live_stream_event_${hashedId}`);\n};\n\nexport const getLiveStreamEventDataFromCache = (\n hashedId: string,\n): LiveStreamEventData | null | undefined => {\n const liveStreamEventData = Wistia._remoteData.get(`live_stream_event_${hashedId}`);\n if (isNil(liveStreamEventData)) return null;\n\n // It's possible that we're caching a server error response as LiveStreamEventData.\n // If we find one of those places, log an error.\n if (Object.hasOwn(liveStreamEventData, 'error')) {\n wlog.error(\n `Received cached error response instead of LiveStreamEventData when retrieving cached liveStreamEventData for ${hashedId}`,\n );\n uncacheLiveStreamEventData(hashedId);\n }\n\n return liveStreamEventData as LiveStreamEventData;\n};\n\nexport const getCarouselDataFromCache = (hashedId: string): CarouselData | null | undefined => {\n const carouselData = Wistia._remoteData.get(`carousel_${hashedId}`);\n if (isNil(carouselData)) return null;\n\n return carouselData as CarouselData;\n};\n\nexport const cacheCarouselData = (hashedId: string, data: CarouselData): void => {\n Wistia._remoteData.set(`carousel_${hashedId}`, data);\n};\n\nexport const uncacheCarouselData = (hashedId: string): void => {\n Wistia._remoteData.delete(`carousel_${hashedId}`);\n};\n","import { isNotNil } from '@wistia/type-guards';\nimport { normalizeChapters } from './normalizeChapters.ts';\nimport { Chapter, ChaptersPluginConfig } from '../types/plugins.ts';\nimport type { MediaData } from '../types/player-api-types.ts';\nimport type { EmbedOptions } from '../types/EmbedOptions.ts';\n\n// Google got mad that the default chapter title is (of course) not very\n// descriptive, and wanted us to make sure it's never used for Key Moments.\nconst DEFAULT_CHAPTER_TITLE = 'Chapter Title';\nconst MINIMUM_DURATION = 30;\n\nexport const shouldAddClipsFromChapters = (embedOptions: EmbedOptions): boolean => {\n const chapters = normalizeChapters(embedOptions);\n if (!chapters) {\n return false;\n }\n\n const { chapterList } = chapters;\n\n // the `on` property must be explicitly false to disable\n return (\n chapters.on !== false &&\n chapters.on !== 'false' &&\n Array.isArray(chapterList) &&\n chapterList.length > 0\n );\n};\n\n// keyMoments should only be limited by a few factors:\n// 1. a turnstile/form is blocking content\n// 2. it's password protected\n// 3. the video is really short\n// 4. only available for VOD, not Live\n// Then, there are two different _types_ of key moments. If we have chapters\n// we will use the Clips format to specifically tell google the timestamps we think\n// are important. Otherwise, we will use the SeekToAction field along with the wtime\n// param to allow Google to search through the video for key moments\nexport const shouldAddKeyMoments = (mediaData: MediaData, embedOptions: EmbedOptions): boolean => {\n if (embedOptions.keyMoments === false) {\n return false;\n }\n\n const { duration, type } = mediaData;\n const {\n passwordProtectedVideo,\n 'requireEmail-v1': turnstilePlugin,\n form,\n } = embedOptions.plugin ?? {};\n const isLiveStream = type === 'LiveStream';\n\n const passwordEnabled =\n passwordProtectedVideo?.on === true || passwordProtectedVideo?.on === 'true';\n\n const turnstileBlocksContent =\n turnstilePlugin &&\n turnstilePlugin.on !== false &&\n turnstilePlugin.time !== 'end' &&\n !turnstilePlugin.persistentTurnstile;\n\n const formBlocksContent =\n form?.on !== false && form?.time !== 'end' && form?.displayMode === 'pause';\n\n return (\n !passwordEnabled &&\n !turnstileBlocksContent &&\n !formBlocksContent &&\n !isLiveStream &&\n typeof duration === 'number' &&\n duration >= MINIMUM_DURATION\n );\n};\n\nconst sortedFilteredChapters = (\n chapterList: ChaptersPluginConfig['chapterList'],\n): ChaptersPluginConfig['chapterList'] => {\n const chapterExistsAtTime = {};\n\n return [...chapterList]\n .sort((firstChapter: Chapter, secondChapter) => firstChapter.time - secondChapter.time)\n .filter(({ time, title, deleted }) => {\n if (Boolean(chapterExistsAtTime[time]) || deleted || title === DEFAULT_CHAPTER_TITLE) {\n return false;\n }\n chapterExistsAtTime[time] = true;\n return true;\n });\n};\n\ntype Clips = {\n '@type': string;\n endOffset: number;\n name: string;\n startOffset: number;\n url: string;\n}[];\n\nexport const clipsFromChapters = (\n chapterList: ChaptersPluginConfig['chapterList'],\n baseUrl: string,\n mediaDuration: number,\n): Clips => {\n if (!Array.isArray(chapterList) || chapterList.length === 0) {\n return [];\n }\n\n const clips = sortedFilteredChapters(chapterList).map((chapter, index, chapters) => {\n const { time, title } = chapter;\n const url = new window.URL(baseUrl);\n const floorTime = Math.floor(time);\n const nextChapter = chapters[index + 1];\n const endOffsetTime = isNotNil(nextChapter) ? nextChapter.time : mediaDuration;\n\n // wtime does not support decimals\n url.searchParams.set('wtime', `${floorTime}s`);\n\n // https://schema.org/Clip\n return {\n '@type': 'Clip',\n endOffset: Math.floor(endOffsetTime),\n name: title,\n startOffset: floorTime,\n url: url.toString(),\n };\n });\n\n return clips;\n};\n\ntype SeekToAction = {\n '@type': string;\n 'startOffset-input': string;\n target: string;\n};\n// https://developers.google.com/search/docs/advanced/structured-data/video#seek\nexport const seekToAction = (): SeekToAction => {\n const url = new window.URL(window.location.href);\n // if wtime is already on the url as query param, it will be overwritten here. This is only for the JSON+LD though.\n url.searchParams.set('wtime', '{seek_to_second_number}');\n\n return {\n '@type': 'SeekToAction',\n target: url.toString().replace('%7Bseek_to_second_number%7D', '{seek_to_second_number}'), // we need to replace the encoded uri with the direct string\n 'startOffset-input': 'required name=seek_to_second_number',\n };\n};\n","import {\n getWistiaLocalStorage,\n removeWistiaLocalStorage,\n updateWistiaLocalStorage,\n} from 'utilities/wistiaLocalStorage.js';\nimport { getDeep, setDeep, unsetDeep } from 'utilities/obj.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\n/*\n * DEPRECATED: Use utilities/wistiaLocalStorage.js directly instead.\n *\n * This module has two failings.\n *\n * First, it must include utilities/obj for its deep setting and getting\n * functionality, which is a core part of its API. However, this convenience\n * does not merit the size of its inclusion; if we want to do deep setting and\n * getting, we can just compose with Obj.setDeep and Obj.getDeep at the import site.\n *\n * Second, in order to avoid lots of JSON.parse calls, it keeps a cache that\n * should mirror the contents of localStorage. However, because localStorage\n * data is shared across tabs with the same domain--and because we are never\n * syncing the actual localStorage values here--changes in multiple open tabs\n * will overwrite each other, causing general strangeness.\n */\n\nif (!Wistia._localStorage) {\n Wistia._localStorage = getWistiaLocalStorage();\n}\n\nexport const uncache = () => {\n Wistia._localStorage = {};\n};\n\nexport const setOrGet = (key, val, unset = false) => {\n if (val != null) {\n const fn = unset ? unsetDeep : setDeep;\n Wistia._localStorage = updateWistiaLocalStorage((ls) => fn(ls, key, val));\n return val;\n }\n if (key != null) {\n return getDeep(Wistia._localStorage, key);\n }\n return Wistia._localStorage;\n};\n\nexport const removeLocalStorage = (key) => {\n return setOrGet(key, 'nada', true);\n};\n\nexport const dumpLocalStorage = removeWistiaLocalStorage;\n","import { isArray, isEmpty } from 'utilities/obj.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst W = Wistia;\n\nif (Wistia._timeouts == null) {\n Wistia._timeouts = {};\n}\n\n// Improved timeouts!\n// allows us to\n// 1. auto-debounce if an identical key is replaced\n// 2. associate timeouts with a specific context, but access them globally\n// 3. Clear all timeouts in a specific context\n// 4. Do nextTick by not specifying the time argument\n// e.g. Wistia.timeout(\"video1234\", function() { ... });\n//\n// In our implementation, we treat the first dot-delimited value in the key\n// as a namespace. This is an optimization since most of our videos prefix\n// their timeouts with a uuid. By keeping them in a namespace, it means\n// clearTimeouts doesn't need to iterate through _all_ timeouts globally,\n// which makes doTimeout itself faster (since it calls clearTimeouts internally).\n//\n// Returns the timeoutId.\nexport const doTimeout = (key, fn, time = 1) => {\n if (isArray(key)) {\n key = key.join('.');\n }\n const namespace = timeoutNamespace(key);\n clearTimeouts(key, namespace);\n if (fn) {\n let timeouts = Wistia._timeouts[namespace];\n if (timeouts == null) {\n timeouts = Wistia._timeouts[namespace] = {};\n }\n let timeoutId = setTimeout(() => {\n delete timeouts[key];\n fn();\n }, time);\n timeouts[key] = timeoutId;\n return timeoutId;\n }\n return Wistia._timeouts[namespace][key];\n};\n\n// This will clear timeouts matching the key. Key is dot-delimited list\n// like:\n//\n// mynamespace.more_specific.\n// mynamespace.anothernamespace.more_specific\n//\n// We allow passing in namespace as an optimization for doTimeout.\nexport const clearTimeouts = (key, namespace = null) => {\n if (isArray(key)) {\n key = key.join('.');\n }\n namespace = namespace || timeoutNamespace(key);\n\n // If there's no namespacing on the input key, then we should treat the\n // input as both a namespace _and_ a key. This handles the namespace case.\n // We handle the key case with our normal logic.\n let timeouts;\n if (namespace === '__global__') {\n timeouts = Wistia._timeouts[key];\n if (timeouts) {\n for (let k in timeouts) {\n let v = timeouts[k];\n clearTimeout(v);\n delete timeouts[k];\n }\n }\n }\n\n timeouts = Wistia._timeouts[namespace];\n if (timeouts) {\n for (let k in timeouts) {\n let v = timeouts[k];\n if (\n k.indexOf &&\n k.indexOf(key) === 0 &&\n (k.length === key.length || k.charAt(key.length) === '.')\n ) {\n clearTimeout(v);\n delete timeouts[k];\n }\n }\n }\n\n // Cleaning out namespaces is not particularly efficient, and isn't\n // particularly helpful, so let's only do it once every 5 seconds.\n if (!Wistia.blockSweepTimeouts) {\n Wistia.blockSweepTimeouts = true;\n setTimeout(sweepTimeouts, 0);\n setTimeout(() => {\n Wistia.blockSweepTimeouts = false;\n }, 5000);\n }\n};\n\n// Clear out any namespaces that are no longer active\nconst sweepTimeouts = () => {\n for (let namespace in Wistia._timeouts) {\n let timeouts = Wistia._timeouts[namespace];\n if (isEmpty(timeouts)) {\n delete Wistia._timeouts[namespace];\n }\n }\n};\n\nconst timeoutNamespace = (key) => {\n const dotIndex = key.indexOf('.');\n if (dotIndex > 0) {\n return key.substring(0, dotIndex);\n }\n return '__global__';\n};\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.some(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import { base64Decode } from './core.js';\nimport { wlog } from './wlog.js';\n\n/**\n * Extracts the email from the pageUrl and returns it if found\n * @param {string} pageUrl the url of the page\n * @returns {string | null} the email if found, null otherwise\n */\nexport const extractEmailFromParams = (pageUrl: string): string | null => {\n const wemail = /wemail=([^&#]+)/.exec(pageUrl) ?? null;\n\n if (wemail) {\n // wemail may arrive URL-encoded (e.g. jane%40example.com) when the embedding\n // page constructs the URL with encodeURIComponent or similar. Decode here so\n // downstream ETL pipeline sees a well-formed address.\n try {\n return decodeURIComponent(wemail[1]);\n } catch {\n // Malformed percent-encoding — fall back to the raw capture rather\n // than crashing the player's init path.\n return wemail[1];\n }\n }\n\n const wkey = /wkey=([^&#]+)/.exec(pageUrl) ?? null;\n\n if (wkey) {\n const base64Email = wkey[1];\n try {\n const decodedEmail = base64Decode(base64Email);\n return decodedEmail;\n } catch (error) {\n wlog.info('Failed to decode email from wkey', error);\n }\n }\n\n return null;\n};\n","import { assign } from 'utilities/obj.js';\nimport { Url } from 'utilities/url.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { isNotNil } from '@wistia/type-guards';\nimport { readyPublicOver400 } from './assets.js';\n\nconst detect = cachedDetect();\n\nconst convertStillImageToWebp = (media) => {\n if (media.assets && detect.webp) {\n media.assets = media.assets.map((asset) => {\n // there was a flow with the uploader + notPlayablePlayer where we have assets\n // but they're not ready and don't have urls, so just double check for that here\n if (asset.type === 'still_image' && Object(asset).url) {\n const url = new Url(asset.url);\n url.ext('webp');\n asset.url = url.absolute();\n }\n\n return asset;\n });\n }\n};\n\nconst maybeCloneOriginalAsMp4 = (media, options = {}) => {\n if (options.allowOriginalAsMp4 !== true) {\n // only transform if the embed options ask for it\n return;\n }\n\n const original = media.assets.filter((a) => a.type === 'original')[0];\n\n if (readyPublicOver400(media.assets).length > 0) {\n // we have a derivative we can show instead\n return;\n }\n\n media.assets = [\n ...media.assets,\n assign({}, original, {\n display_name: `${original.display_name} copy`,\n container: 'mp4',\n codec: 'h264',\n type: 'mp4_video',\n }),\n ];\n};\n\nconst maybeAddChannelIdToEmbedOptions = (media, options = {}) => {\n if (isNotNil(options.channelId) && media.embedOptions) {\n media.embedOptions.channelId = options.channelId;\n }\n};\n\nconst maybeAddChannelPasswordToEmbedOptions = (media, options = {}) => {\n if (isNotNil(options.channelPassword) && media.embedOptions) {\n media.embedOptions.channelPassword = options.channelPassword;\n }\n};\n\nconst mergeFormCustomizations = (formCustomizations, embedOptions) => {\n if (!formCustomizations || !embedOptions) return;\n\n if (!embedOptions.plugin) embedOptions.plugin = {};\n if (!embedOptions.plugin.form) embedOptions.plugin.form = {};\n\n const form = embedOptions.plugin.form;\n if (formCustomizations.form_button_text)\n form.formButtonText = formCustomizations.form_button_text;\n if (formCustomizations.form_lower_text) form.formLowerText = formCustomizations.form_lower_text;\n if (formCustomizations.title) form.title = formCustomizations.title;\n};\n\n// The API returns form customization fields (like button text, lower text, and title)\n// in a separate `formCustomizations` object rather than inside `embedOptions`. We merge\n// them into `embedOptions.plugin.form` here so the form plugin can consume them\n// through the same path it uses for all other configuration.\nconst mergeFormCustomizationsIntoEmbedOptions = (media) => {\n mergeFormCustomizations(media.formCustomizations, media.embedOptions);\n\n if (Array.isArray(media.translatedMediaData)) {\n for (const entry of media.translatedMediaData) {\n mergeFormCustomizations(entry.formCustomizations, entry.embedOptions);\n }\n }\n};\n\nexport const mediaDataTransforms = (media, options = {}) => {\n maybeCloneOriginalAsMp4(media, options);\n convertStillImageToWebp(media);\n maybeAddChannelIdToEmbedOptions(media, options);\n maybeAddChannelPasswordToEmbedOptions(media, options);\n mergeFormCustomizationsIntoEmbedOptions(media);\n return media;\n};\n","import { isArray, getDeep, setDeep, unsetDeep } from 'utilities/obj.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\n// A simple key/value store implementation\n// stored on the Wistia namespace\n//\n// To set:\n//\n// wData(\"key.path\", \"val\")\n// wData([\"key\", \"path\"], \"val\")\n//\n// To get\n//\n// wData(\"key.path\")\n// wData([\"key\", \"path\"])\n\nexport const wData = (key, val) => {\n if (!isArray(key)) {\n key = key.split('.');\n }\n if (val != null) {\n setDeep(Wistia, ['_data'].concat(key), val);\n }\n return getDeep(Wistia, ['_data'].concat(key));\n};\n\nexport const wRemoveData = (key) => {\n if (!isArray(key)) {\n key = key.split('.');\n }\n return unsetDeep(Wistia, ['_data'].concat(key));\n};\n","import { makeWbindable } from 'utilities/wbindable.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nmakeWbindable(Wistia);\n\nexport const globalBind = Wistia.bind.bind(Wistia);\nexport const globalOn = Wistia.on.bind(Wistia);\nexport const globalOff = Wistia.off.bind(Wistia);\nexport const globalRebind = Wistia.rebind.bind(Wistia);\nexport const globalTrigger = Wistia.trigger.bind(Wistia);\nexport const globalUnbind = Wistia.unbind.bind(Wistia);\n","import { elemStyle } from 'utilities/elem.js';\nimport { doTimeout } from 'utilities/timeout-utils.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { cast, merge } from 'utilities/obj.js';\n\nconst detect = cachedDetect();\n\nexport const scalingOptionsFromVideo = (video, options) => {\n return merge(\n {\n videoWidth: video.videoWidth(),\n videoHeight: video.videoHeight(),\n isInFullscreen: video.inFullscreen(),\n controlScaling: video.controlScaling(),\n },\n options,\n );\n};\n\nexport const controlDimensions = (options = {}, baseWidth = 40, baseHeight = 34) => {\n options = merge(\n {\n videoWidth: 640,\n videoHeight: 360,\n isInFullscreen: false,\n baseWidth: baseWidth != null ? baseWidth : 40,\n baseHeight: baseHeight != null ? baseHeight : 34,\n },\n options,\n );\n const multiplier = controlMultiplier(options);\n return { width: multiplier * options.baseWidth, height: multiplier * options.baseHeight };\n};\n\nexport const bigPlayButtonDimensions = (options, baseWidth, baseHeight) => {\n return controlDimensions(options, baseWidth, baseHeight);\n};\n\n// abstracted so this can easily be changed if we wanted.\nexport const fontSizeMultiplier = (options) => {\n return controlMultiplier(options);\n};\n\nexport const allowBigControls = (options = {}) => {\n const screenHeight = options.screenHeight || window.screen.height;\n const screenWidth = options.screenWidth || window.screen.width;\n return (\n options.controlScaling != 'auto' ||\n detect.iphone ||\n detect.android ||\n screenWidth < screenHeight\n );\n};\n\nexport const maxMultiplierForVideo = (options) => {\n if (options.controlScaling != 'auto') {\n return options.controlScaling;\n }\n\n if (allowBigControls(options)) {\n // the device dimensions are oriented vertically; this is probably a phone\n // or tablet, or just a monitor that would be fine with huge controls.\n return 3.5;\n }\n return 1.4;\n};\n\nexport const minMultiplierForVideo = (options) => {\n if (options.controlScaling != 'auto') {\n return options.controlScaling;\n }\n\n if (allowBigControls(options)) {\n // the controls are unusable if we scale down too much for on phones and\n // tablets.\n return 1;\n }\n return 0.75;\n};\n\nexport const getZoomMultiplier = (options) => {\n if (!options.isInFullscreen) {\n return 1;\n }\n\n const result = Math.max(1, window.innerWidth / Math.max(screen.width, screen.height));\n return result;\n};\n\nexport const getDeviceMultiplier = (options) => {\n if (allowBigControls(options)) {\n return 1.4;\n }\n return 1;\n};\n\nexport const controlMultiplierForVideo = (video, options) => {\n return controlMultiplier(scalingOptionsFromVideo(video, options));\n};\n\nexport const controlMultiplier = (options) => {\n if (options.controlScaling != 'auto') {\n return options.controlScaling;\n }\n\n const { videoWidth, videoHeight } = options;\n const zoomMultiplier = getZoomMultiplier(options);\n const largestDimension = Math.max(videoWidth, videoHeight);\n if (largestDimension > 960) {\n const percentOverThreshold = largestDimension / 960;\n const scaleFactor = percentOverThreshold * getDeviceMultiplier(options);\n return Math.min(maxMultiplierForVideo(options) * zoomMultiplier, scaleFactor * zoomMultiplier);\n }\n if (largestDimension < 640) {\n const percentUnderThreshold = largestDimension / 640;\n const scaleFactor = percentUnderThreshold * getDeviceMultiplier(options);\n return Math.max(minMultiplierForVideo(options) * zoomMultiplier, scaleFactor * zoomMultiplier);\n }\n return 1 * getDeviceMultiplier(options);\n};\n\n// abstracted so this can easily be changed if we wanted.\nexport const menuMultiplier = (options) => {\n return Math.max(0.75, controlMultiplier(options));\n};\n\nexport const fitControl = (options) => {\n const { controlId, video, controlElem } = options;\n options = merge(\n {\n videoWidth: video.videoWidth(),\n videoHeight: video.videoHeight(),\n controlScaling: video.controlScaling(),\n isInFullscreen: video.inFullscreen(),\n },\n options,\n );\n const { width, height } = controlDimensions(options);\n elemStyle(controlElem, {\n height: `${height}px`,\n width: `${width}px`,\n });\n tapIcon(`${video.uuid}.${controlId}`, controlElem);\n return { width, height };\n};\n\n// Often the svg size changes don't visually change the vertical position of\n// the icon. \"tapping\" it by forcing it to reevaluate the stack is one way to\n// fix that.\nexport const tapIcon = (timeoutPrefix, controlElem) => {\n const svgs = controlElem.getElementsByTagName('svg');\n for (let i = 0; i < svgs.length; i++) {\n ((svg) => {\n doTimeout(\n `${timeoutPrefix}.tap_icon`,\n () => {\n elemStyle(svg, { position: 'relative' });\n doTimeout(\n '#{timeoutPrefix}.tap_icon',\n () => {\n elemStyle(svg, { position: '' });\n },\n 30,\n );\n },\n 30,\n );\n })(svgs[i]);\n }\n};\n\nexport const parseMetaViewport = () => {\n const metaTag = document.querySelector('meta[name=viewport]');\n const content = metaTag && metaTag.getAttribute('content');\n const result = {};\n if (content) {\n const pairs = content.split(/[\\s,]+/);\n pairs.forEach((pair) => {\n const keyAndVal = pair.split('=');\n if (keyAndVal.length === 2) {\n result[keyAndVal[0]] = cast(keyAndVal[1]);\n }\n });\n }\n return result;\n};\n\nconst normalScaleWidthRange = (media) => {\n const onMobile = detect.iphone || detect.ipad || detect.android;\n\n if (!onMobile) {\n return [640, 960];\n }\n\n if (media?.isAudio()) {\n return [500, 960];\n }\n\n const viewport = parseMetaViewport();\n\n let screenWidth;\n if (viewport.width) {\n // Initial render being controled by <meta name='viewport' content='...'/>\n if (typeof viewport.width === 'number') {\n screenWidth = 0 + viewport.width;\n } else {\n screenWidth = screen.width || window.innerWidth;\n }\n\n // This doesn't capture any scaling the user does after the initial\n // render, but the page designer would expect the video to render at the\n // scale they set.\n const scale = Math.max(\n viewport['minimum-scale'] || 0,\n Math.min(viewport['maximum-scale'] || 10, viewport['initial-scale'] || 1),\n );\n if (scale < 1) {\n screenWidth /= scale;\n }\n } else {\n // Initial render will use the width of the document to determine its\n // size, then zoom out to show the whole page.\n screenWidth = window.innerWidth;\n }\n\n return [screenWidth, (screenWidth * 2) / 3];\n};\n\nconst normalScaleHeightRange = (media) => {\n const onMobile = detect.iphone || detect.ipad || detect.android;\n\n if (!onMobile) {\n return [340, 860];\n }\n\n if (media?.isAudio()) {\n return [500, 960];\n }\n\n const viewport = parseMetaViewport();\n\n let screenHeight;\n if (viewport.height) {\n // Initial render being controled by <meta name='viewport' content='...'/>\n if (typeof viewport.height === 'number') {\n screenHeight = 0 + viewport.height;\n } else {\n screenHeight = screen.height || window.innerHeight;\n }\n\n // This doesn't capture any scaling the user does after the initial\n // render, but the page designer would expect the video to render at the\n // scale they set.\n const scale = Math.max(\n viewport['minimum-scale'] || 0,\n Math.min(viewport['maximum-scale'] || 10, viewport['initial-scale'] || 1),\n );\n if (scale < 1) {\n screenHeight /= scale;\n }\n } else {\n // Initial render will use the width of the document to determine its\n // size, then zoom out to show the whole page.\n screenHeight = window.innerWidth;\n }\n\n return [screenHeight, (screenHeight * 2) / 1.3];\n};\n\nexport const controlMultiplierBasedOnVideo = (video, normalRange) => {\n const vidWidth = video.videoWidth();\n const vidHeight = video.videoHeight();\n const aspect = vidWidth / vidHeight;\n\n // vertical orientation\n if (aspect < 1) {\n const [lowerCutoff, upperCutoff] = normalScaleHeightRange(video);\n\n if (vidHeight <= lowerCutoff) {\n return vidHeight / lowerCutoff;\n }\n if (vidHeight > upperCutoff) {\n return vidHeight / upperCutoff;\n }\n }\n // horizontal orientation\n else {\n const [lowerCutoff, upperCutoff] = normalRange || normalScaleWidthRange(video);\n\n if (vidWidth <= lowerCutoff) {\n return vidWidth / lowerCutoff;\n }\n if (vidWidth > upperCutoff) {\n return vidWidth / upperCutoff;\n }\n }\n\n // default when the video is within normal range\n return 1;\n};\n\n// A more general version of controlMultiplierBasedOnVideo that doesn't require\n// a video object.\nexport const controlMultiplierEstimatedByWidth = (width, normalRange) => {\n const [lowerCutoff, upperCutoff] = normalRange || normalScaleWidthRange();\n if (width <= lowerCutoff) {\n return width / lowerCutoff;\n }\n if (width > upperCutoff) {\n return width / upperCutoff;\n }\n return 1;\n};\n","import { isNil } from '@wistia/type-guards';\nimport { Gradient, GradientMaybeWithColorsAsNumbers, isGradient } from '../types/gradient.ts';\nimport { DEFAULT_PLAYER_COLOR } from './color-utils.ts';\nimport { addHashToHex, Color } from './color.js';\nimport { cast, clone } from './obj.js';\n\nconst DEFAULT_ALPHA = 0.9;\nconst GRADIENT_COLOR_INDEX = 0;\nconst GRADIENT_PERCENTAGE_INDEX = 1;\n\nexport const DEFAULT_GRADIENT: Gradient = {\n colors: [\n [DEFAULT_PLAYER_COLOR, 0],\n ['#6A84FF', 1],\n ],\n on: true,\n};\n\nexport const hexToRGBA = (hex: string, alpha = DEFAULT_ALPHA): string => {\n const color = new Color(hex);\n\n // the \"as Color\" here is because the implicit types are not quite right... because we're passing a value to the\n // alpha function and using it as a setter it returns the new color as a Color object, not a number or undefined\n // (which happens if you're using the function as a getter)\n const colorWithAlpha = color.alpha(alpha) as Color;\n\n return colorWithAlpha.toRgba();\n};\n\nconst decimalToPercentage = (decimal: number): number => decimal * 100;\n\nexport const getCssGradient = (gradient: Gradient, alpha = DEFAULT_ALPHA): string | null => {\n if (gradient.colors.length === 0) {\n return null;\n }\n\n const areAllColorsValid = gradient.colors.every((gradientColor): boolean =>\n Boolean(\n gradientColor[GRADIENT_COLOR_INDEX] &&\n gradientColor[GRADIENT_PERCENTAGE_INDEX] >= 0 &&\n gradientColor[GRADIENT_PERCENTAGE_INDEX] <= 1,\n ),\n );\n\n if (!areAllColorsValid) {\n return null;\n }\n\n return `linear-gradient(90deg, ${gradient.colors.map((gradientColor) => `${hexToRGBA(gradientColor[0], alpha)} ${decimalToPercentage(gradientColor[1])}%`).join(', ')})`;\n};\n\nexport const getGradientColor = (gradient: Gradient, index = 0): string | null => {\n if (!isGradient(gradient)) {\n return null;\n }\n\n return gradient.colors[index][GRADIENT_COLOR_INDEX];\n};\n\nexport const cleanGradient = (gradient: unknown): Gradient => {\n const casted = cast(clone(gradient)) as GradientMaybeWithColorsAsNumbers;\n\n const result: Gradient = {\n colors: casted.colors.map(([color, percentage]) => [color.toString(), percentage]),\n on: casted.on,\n };\n\n return result;\n};\n\nexport const getPlayerColorOrFirstGradientStop = (\n playerColor?: string,\n gradient?: Gradient,\n): string => {\n if (!isGradient(gradient) || !gradient.on) {\n return playerColor ?? DEFAULT_PLAYER_COLOR;\n }\n\n const firstGradientColorStop = getGradientColor(gradient);\n\n // This should not be possible because we verified that the gradient passes isGradient above.\n // However, since getGradietnColor's return type is string | null,\n // we need to add this logic to appease TS.\n if (isNil(firstGradientColorStop)) {\n return playerColor ?? DEFAULT_PLAYER_COLOR;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return addHashToHex(firstGradientColorStop) ?? DEFAULT_PLAYER_COLOR;\n};\n","const getAlpha2Code = (iso6392Code: string) => {\n return iso6392Code.split('-')[0];\n};\n\nconst getStack = () => {\n const err = new Error();\n return err.stack?.split('\\n').slice(2).join('\\n');\n};\n\n/**\n * Finds the index of the preferred language from a list of available languages.\n *\n * This function helps select the best matching language based on user preferences and browser settings.\n * It's designed to work with arrays of ISO 639-2 language codes, optionally with region codes (e.g. 'en' or 'en-US'),\n * but can also be used for matching alpha3 ietf language tags, e.g. \"eng\".\n *\n * @param availableLanguages - Array of language codes that are available to choose from\n * @param preferredLanguages - Array of language codes to try matching\n * @returns The index of the best matching language in the availableLanguages array, or -1 if no languages are available\n *\n * @example\n * const captions = [\n * { language: 'en', text: 'Hello' },\n * { language: 'es', text: 'Hola' }\n * ];\n * const index = getPreferredAvailableLanguageIndex(\n * captions.map(c => c.language),\n * ['es']\n * );\n * const preferredCaption = captions[index];\n */\nexport const getPreferredAvailableLanguageIndex = (\n availableLanguages: string[],\n preferredLanguages: string[],\n): number => {\n // Many of the call sites are not typescript, so are susceptible to pass in\n // non-string values. We don't want to break in that scenario, but we do want\n // to log the issue so we can fix it.\n if ((availableLanguages as unknown[]).some((lang) => typeof lang !== 'string')) {\n // eslint-disable-next-line no-console\n console.error('availableLanguages has non-string values', availableLanguages, getStack());\n // eslint-disable-next-line no-param-reassign\n availableLanguages = availableLanguages.filter((lang) => typeof lang === 'string');\n }\n if ((preferredLanguages as unknown[]).some((lang) => typeof lang !== 'string')) {\n // eslint-disable-next-line no-console\n console.error('preferredLanguages has non-string values', preferredLanguages, getStack());\n // eslint-disable-next-line no-param-reassign\n preferredLanguages = preferredLanguages.filter((lang) => typeof lang === 'string');\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const preferredLanguage of preferredLanguages) {\n // Try exact matches first\n if (availableLanguages.includes(preferredLanguage)) {\n return availableLanguages.indexOf(preferredLanguage);\n }\n\n // Try region matches\n const preferredAlpha2 = getAlpha2Code(preferredLanguage);\n const hasRegionMatch = availableLanguages.some(\n (lang) => getAlpha2Code(lang) === preferredAlpha2,\n );\n\n if (hasRegionMatch) {\n return availableLanguages.findIndex((lang) => getAlpha2Code(lang) === preferredAlpha2);\n }\n }\n\n return -1;\n};\n","import { eV1HostWithPort } from 'utilities/hosts.js';\nimport { root } from 'utilities/root.js';\n\nexport const bestImage = (images, opts = {}) => {\n const _sortedImages = sortedImages(images);\n\n if (_sortedImages.length === 0) {\n // If the still failed to process, we might find ourselves going down\n // this path.\n return blankImage(opts.videoWith, opts.videoHeight);\n }\n\n // When this first loads it's possible that @img will have a width of -1\n // until fit() fully takes hold. This could probably be fixed a better\n // way, but this code is here to ensure that we don't return a bogus\n // bestImage() if that's the case.\n const currentWidth = opts.videoWidth;\n\n // For sharper screens, let's load up larger images so the thumbnail\n // looks hella sharp\n const desiredWidth = (root.devicePixelRatio || 1) * currentWidth;\n\n if (desiredWidth <= _sortedImages[0].width) {\n return _sortedImages[0];\n }\n\n for (let i = 0; i < _sortedImages.length; i++) {\n const image = _sortedImages[i];\n if (image.width >= desiredWidth) {\n return image;\n }\n }\n\n return _sortedImages[_sortedImages.length - 1];\n};\n\nexport const blankImage = (videoWidth, videoHeight) => {\n return {\n height: videoHeight,\n url: `https://${eV1HostWithPort()}/assets/images/blank.gif`,\n width: videoWidth,\n };\n};\n\nexport const sortedImages = (images) => {\n return images.map((image) => {\n image.aspect = image.width / image.height;\n return image;\n });\n};\n","import { h, JSX } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { addInlineCss } from '../../../../../../utilities/elem.js';\n\nexport const BigPlayButtonLoadingAnim = (): JSX.Element => {\n const svgEl = useRef(null);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n addInlineCss(\n svgEl.current,\n `\n @keyframes w-loading-pulse {\n from {\n stroke-dashoffset: 55;\n }\n to {\n stroke-dashoffset: -175;\n }\n }\n .w-big-play-button-loading-anim {\n stroke-dasharray: 50 260;\n stroke-dashoffset: 55;\n animation: w-loading-pulse 1.2s infinite cubic-bezier(0.65, 0, 0, 1);\n }\n `,\n );\n\n setIsAnimating(true);\n }, []);\n\n return (\n <line\n ref={svgEl}\n class=\"w-big-play-button-loading-anim\"\n x1=\"0\"\n y1=\"78\"\n x2=\"125\"\n y2=\"78\"\n style={{\n stroke: 'currentcolor',\n strokeWidth: 4,\n strokeLinecap: 'round',\n opacity: isAnimating ? 1 : 0,\n }}\n />\n );\n};\n","import { merge, clone } from 'utilities/obj.js';\nimport { dynamicImport } from 'utilities/dynamicImport.ts';\nimport { Wistia } from '../../wistia_namespace.ts';\n\nconst languages = (Wistia.languages = Wistia.languages || {});\nconst translations = (Wistia.translations = Wistia.translations || {});\n\n// set translationPromises if doesn't exist\nif (!Wistia._translationPromises) {\n Wistia._translationPromises = {};\n}\n\nexport const supportedLanguages = [\n 'ar',\n 'de',\n 'es',\n 'en-US',\n 'fr',\n 'it',\n 'ja',\n 'ko',\n 'pt',\n 'ru',\n 'zh-CN',\n];\n\nconst ietfLanguageTagToCode = {\n ara: 'ar',\n ger: 'de',\n spa: 'es',\n eng: 'en-US',\n fre: 'fr',\n ita: 'it',\n jpn: 'ja',\n kor: 'ko',\n por: 'pt',\n rus: 'ru',\n chi: 'zh-CN',\n};\n\nconst normalizeLanguageCode = (code) => {\n if (code == null) {\n // whoops, passed no code, don't fail.\n return 'en-US';\n }\n\n // eng -> en-US, etc.\n code = ietfLanguageTagToCode[code] || code;\n\n // en-UK -> en, es-419 -> es, etc.\n if (!supportedLanguages.includes(code)) {\n const match = matchingLanguages(() => [code])[0];\n if (match) {\n code = match;\n }\n }\n\n // we have a translation for en-US, but not en\n if (code === 'en' || /^en-/.test(code)) {\n code = 'en-US';\n }\n\n // we have a translation for zh-CN, but not zh\n if (code === 'zh' || /^zh-/.test(code)) {\n code = 'zh-CN';\n }\n\n return code;\n};\n\nconst defineLanguage = (code, text, translations) => {\n languages[code] = { code, text: decodeEntities(text) };\n if (translations) {\n defineTranslations(code, translations);\n }\n};\n\nexport const getLanguage = (code) => {\n return languages[normalizeLanguageCode(code)];\n};\n\nexport const isSupportedPlayerLanguage = (code) => {\n return supportedLanguages.includes(normalizeLanguageCode(code));\n};\n\nexport const defineTranslations = (code, keyValPairs) => {\n if (languages[code] == null) {\n throw new Error(`Must define a language with code ${code} before defining its translations.`);\n }\n\n const translation = translations[code];\n if (translation) {\n merge(translation, keyValPairs);\n } else {\n translations[code] = clone(keyValPairs);\n }\n};\n\nconst withFallbackText = (text) => {\n if (text == null) {\n return '?';\n }\n return text;\n};\n\nlet dummyTextArea;\nconst cachedDecodings = (Wistia.cachedDecodings = Wistia.cachedDecodings || {});\nconst decodeEntities = (text) => {\n if (!dummyTextArea) {\n // Create this lazily to avoid race conditions while document is rendering.\n dummyTextArea = document.createElement('textarea');\n }\n if (cachedDecodings[text] != null) {\n // If we've decoded this before, use that value; DOM operations aren't\n // fast.\n return cachedDecodings[text];\n }\n dummyTextArea.innerHTML = text;\n cachedDecodings[text] = dummyTextArea.value;\n return dummyTextArea.value;\n};\n\nexport const getTranslation = (code, key) => {\n code = normalizeLanguageCode(code);\n\n let text;\n if (translations[code] && translations[code][key]) {\n text = translations[code][key];\n } else {\n text = translations['en-US'][key];\n }\n return decodeEntities(withFallbackText(text));\n};\n\n/**\n * Gets translations for the specified language code and keys\n * @param {string} code - The language code to get translations for\n * @param {string[]} [keys=[]] - Array of translation keys to retrieve\n * @returns {Record<string, string>} Object containing the translations with keys as properties\n */\nexport const getTranslations = (code, keys = []) => {\n const translations = {};\n keys.forEach((key) => {\n translations[key] = getTranslation(code, key);\n });\n return translations;\n};\n\nexport const getLanguagePreference = () => {\n if (navigator.languages || navigator.language) {\n Wistia.languagePreference = navigator.languages || [navigator.language];\n } else {\n // in old browsers that don't support navigator.language(s), like IE 9/10,\n // just go with English.\n Wistia.languagePreference = ['en-US'];\n }\n\n return Wistia.languagePreference;\n};\n\nlet defaultPromise = Promise.resolve({\n code: 'en-US',\n translations: translations['en-US'],\n});\n\nexport const loadAndDefineTranslation = (code) => {\n code = normalizeLanguageCode(code);\n\n if (!supportedLanguages.includes(code)) {\n // we don't support this language; just use en-US\n return defaultPromise;\n }\n\n if (Wistia._translationPromises[code]) {\n return Wistia._translationPromises[code];\n }\n\n if (code === 'en-US') {\n return defaultPromise;\n }\n\n const result = new Promise((resolve, reject) => {\n dynamicImport([`assets/external/translations/${code}.js`])\n .then((moduleClass) => {\n const { languageCode, languageLabel, translations } = moduleClass;\n defineLanguage(languageCode, languageLabel, translations);\n resolve({\n code,\n translations: translations[code],\n });\n })\n .catch(reject);\n });\n\n Wistia._translationPromises[code] = result;\n return result;\n};\n\nexport const matchingLanguages = (languagePrefs = getLanguagePreference) => {\n return languagePrefs().reduce((matches, langCode) => {\n const isFullMatch = supportedLanguages.indexOf(langCode) !== -1;\n\n // strip the region off a language, e.g. `es-ES` -> `es`\n const partialLangCode = langCode.split('-')[0];\n\n // take a partial match if the language hits, just not the region, e.g. `es-ES` -> `es`\n const isPartialMatch = supportedLanguages.indexOf(partialLangCode) !== -1;\n\n if (isFullMatch) {\n matches.push(langCode);\n } else if (isPartialMatch) {\n matches.push(partialLangCode);\n }\n\n return matches;\n }, []);\n};\n\nexport const getDefaultTranslation = () => {\n let matchingLanguage = matchingLanguages()[0];\n\n // if there is not match, or if it is 'en', go to our\n // default of 'en-US'\n if (!matchingLanguage || matchingLanguage === 'en') {\n matchingLanguage = 'en-US';\n }\n\n if (translations[matchingLanguage]) {\n return Promise.resolve({\n code: matchingLanguage,\n translations: translations[matchingLanguage],\n });\n }\n\n return loadAndDefineTranslation(matchingLanguage);\n};\n\n// Most translations are defined where they are used, however these translations are\n// rather generic and used in multiple places. They are defined here so we don't\n// duplicate multiple translation keys.\ndefineLanguage('en-US', 'English');\ndefineTranslations('en-US', {\n BACKGROUND_FOCUS_MORE_OPTIONS_HINT: 'Press O for more options',\n\n ELLIPSIS_LESS: 'Show fewer buttons',\n ELLIPSIS_MORE: 'Show more buttons',\n\n PAUSE: 'Pause',\n PLAY: 'Play',\n PLAY_BUTTON_LIVE_NOT_STARTED: 'Livestream has not started',\n PLAY_BUTTON_TITLE_WHEN_NOT_PLAYING: 'Play Video',\n PLAY_BUTTON_TITLE_WHEN_PLAYING: 'Pause Video',\n\n REWATCH: 'Rewatch',\n\n SKIP: 'Skip',\n});\n","import { globalTrigger } from 'utilities/globalBindAndTrigger.js';\nimport { getWistiaLocalStorage, updateWistiaLocalStorage } from 'utilities/wistiaLocalStorage.js';\nimport { getAllApiHandles } from 'utilities/getApiHandles.ts';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport const migrateLegacyVisitorTracking = () => {\n const legacyIsEnabled = getWistiaLocalStorage().visitorTrackingEnabled;\n if (legacyIsEnabled != null) {\n // Migrate old structure to new structure\n //\n // old:\n // localStorage\n // visitorTrackingEnabled: boolean\n //\n // new:\n // localStorage\n // visitorTracking: {\n // isEnabled: boolean,\n // updatedAt: timestamp,\n // }\n //\n updateWistiaLocalStorage((ls) => delete ls.visitorTrackingEnabled);\n Wistia._visitorTracking = {};\n Wistia._visitorTracking[Wistia._visitorTrackingDomain] = {\n isEnabled: legacyIsEnabled,\n updatedAt: Date.now(),\n };\n updateWistiaLocalStorage((ls) => (ls.visitorTracking = Wistia._visitorTracking));\n }\n};\n\nif (!Wistia._visitorTrackingDomain) {\n Wistia._visitorTrackingDomain = location.hostname || '';\n}\n\n// Initialize from localStorage, or with an empty hash if not set.\nif (!Wistia._visitorTracking) {\n migrateLegacyVisitorTracking();\n Wistia._visitorTracking = getWistiaLocalStorage().visitorTracking || {};\n}\n\nexport const consent = (val) => {\n if (val == null) {\n return isVisitorTrackingEnabled();\n }\n return setVisitorTrackingEnabled(val);\n};\nWistia.consent = consent;\n\nexport const setVisitorTrackingEnabled = (val, domain = Wistia._visitorTrackingDomain) => {\n if (val === 'default') {\n delete Wistia._visitorTracking[domain];\n } else {\n Wistia._visitorTracking[domain] = {\n isEnabled: `${val}` === 'true',\n updatedAt: Date.now(),\n };\n }\n updateWistiaLocalStorage((obj) => (obj.visitorTracking = Wistia._visitorTracking));\n globalTrigger('visitortrackingchange', val);\n\n const allWistiaPlayers = [...document.getElementsByTagName('wistia-player')];\n allWistiaPlayers.forEach((player) => {\n player.dispatchEvent(\n new CustomEvent('visitor-tracking-change', { detail: { isTrackingEnabled: val } }),\n );\n });\n};\n\nconst isCurrentDomainOrAnyParentDomainsEnabled = () => {\n if (Wistia._visitorTrackingDomain) {\n const domainParts = Wistia._visitorTrackingDomain.split('.');\n while (domainParts.length > 0) {\n const entry = Wistia._visitorTracking[domainParts.join('.')];\n const enabledVal = entry && entry.isEnabled;\n if (enabledVal != null) {\n return enabledVal;\n }\n domainParts.shift();\n }\n }\n\n // returns undefined instead of false as a result so that we can have\n // different behavior if it has not been set.\n};\n\nexport const isVisitorTrackingEnabled = () => {\n if (typeof Wistia._visitorTracking === 'boolean') {\n // Legacy. We previously persisted this data as a boolean\n return Wistia._visitorTracking;\n }\n\n if (Wistia._visitorTracking) {\n // _visitorTracking has been set. Let's check the value for the current\n // domain. And if that's set, we return.\n const isEnabledVal = isCurrentDomainOrAnyParentDomainsEnabled();\n if (isEnabledVal != null) {\n return Boolean(isEnabledVal);\n }\n }\n\n const apis = getAllApiHandles();\n\n if (Wistia.channel && Wistia.channel.all) {\n try {\n apis.push(...Wistia.channel.all());\n } catch (e) {\n // If Wistia.api.all() is called before Wistia._data is setup, this will throw\n // an exception. That's okay--it just means there are effectively no\n // channel embeds yet.\n }\n }\n\n // By default, if any videos have privacy mode enabled, then we disable\n // visitor tracking for all videos on the page. In practice, we would only\n // see this occur if videos from multiple accounts--with different privacy\n // mode settings--appear on the same page.\n const isPrivacyModeEnabled =\n apis.some((api) => {\n const data = api._mediaData || api._galleryData || {};\n return data.privacyMode === true;\n }) || hasRegisteredPrivacyModeSource();\n\n return !isPrivacyModeEnabled;\n};\n\n// Embeds that aren't API handles or channels -- form embeds, and any future\n// non-player surface -- register their account's privacy mode here.\n//\n// Without this, the scan above only sees media handles, so a page with a form\n// embed and no video reports privacy mode as OFF no matter what the account is\n// set to, and consent() returns true for a privacy-mode account.\nexport const registerPrivacyModeSource = (key, privacyMode) => {\n Wistia._privacyModeSources ??= {};\n Wistia._privacyModeSources[key] = privacyMode === true;\n};\n\nexport const unregisterPrivacyModeSource = (key) => {\n if (Wistia._privacyModeSources) {\n delete Wistia._privacyModeSources[key];\n }\n};\n\nconst hasRegisteredPrivacyModeSource = () =>\n Object.values(Wistia._privacyModeSources || {}).some(Boolean);\n","export const camelCaseToKebabCase = (camelCaseString: string): string => {\n return camelCaseString.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (letter: string, idx?: number) => {\n return (idx !== undefined ? '-' : '') + letter.toLowerCase();\n });\n};\n\nexport const kebabCaseToCamelCase = (kebabCaseString: string): string => {\n return kebabCaseString.replace(/-./g, (word) => word[1].toUpperCase());\n};\n","import {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n updateLocalStorage,\n} from 'utilities/namespacedLocalStorage.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\n// This localStorage utility can be used in situations where we don't need to\n// do very frequent updates or reads. If frequent updates or reads are\n// expected, you should use namespacedLocalStorage.js with its own namespace,\n// since the entire namespace is deserialized and serialized on read and write\n// respectively.\n\nconst WISTIA_NAMESPACE = 'wistia';\n\nexport const getWistiaLocalStorage = () => {\n return getLocalStorage(WISTIA_NAMESPACE);\n};\n\nexport const removeWistiaLocalStorage = () => {\n Wistia._localStorage = removeLocalStorage(WISTIA_NAMESPACE);\n return Wistia._localStorage;\n};\n\nexport const setWistiaLocalStorage = (obj) => {\n Wistia._localStorage = setLocalStorage(WISTIA_NAMESPACE, obj);\n return Wistia._localStorage;\n};\n\nexport const updateWistiaLocalStorage = (fn) => {\n Wistia._localStorage = updateLocalStorage(WISTIA_NAMESPACE, fn);\n return Wistia._localStorage;\n};\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p,v,y,d={},w=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function m(n,l){for(var u in l)n[u]=l[u];return n}function b(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function k(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return x(l,e,i,r,null)}function x(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function M(){return{current:null}}function S(n){return n.children}function C(n,l){this.props=n,this.context=l}function $(n,l){if(null==l)return n.__?$(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?$(n):null}function I(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=m({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),q(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?$(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,D(i,o,r),u.__e=u.__=null,o.__e!=t&&P(o)}}function P(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),P(n)}function A(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!H.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(H)}function H(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,I(n)}finally{i.length=H.__r=0}}function L(n,l,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,g,m=t&&t.__k||w,b=l.length;for(f=T(u,l,m,f,b),a=0;a<b;a++)null!=(p=u.__k[a])&&(h=-1!=p.__i&&m[p.__i]||d,p.__i=a,_=q(n,p,h,i,r,o,e,f,c,s),v=p.__e,p.ref&&h.ref!=p.ref&&(h.ref&&J(h.ref,null,p),s.push(p.ref,p.__c||v,p)),null==y&&null!=v&&(y=v),(g=!!(4&p.__u))||h.__k===p.__k?(f=j(p,f,n,g),g&&h.__e&&(h.__e=null)):\"function\"==typeof p.type&&void 0!==_?f=_:v&&(f=v.nextSibling),p.__u&=-7);return u.__e=y,f}function T(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=x(null,o,null,null,null):g(o)?o=n.__k[r]=x(S,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=O(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=$(e)),K(e,e));return t}function j(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=j(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=$(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function F(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(g(n)?n.some(function(n){F(n,l)}):l.push(n)),l}function O(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function z(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||_.test(l)?u:u+\"px\"}function N(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||z(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||z(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(a,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u[s]=t[s]:(u[s]=h,n.addEventListener(l,r?v:p,r)):n.removeEventListener(l,r?v:p,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function V(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u[c])u[c]=h++;else if(u[c]<t[s])return;return t(l.event?l.event(u):u)}}}function q(n,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,d,_,k,x,M,$,I,P,A,H,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(k=u.props,x=T.prototype&&T.prototype.render,M=(a=T.contextType)&&i[a.__c],$=a?M?M.props.value:a.__:i,t.__c?_=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(k,$):(u.__c=h=new C(k,$),h.constructor=T,h.render=Q),M&&M.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=m({},h.__s)),m(h.__s,T.getDerivedStateFromProps(k,h.__s))),v=h.props,y=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(x&&null==T.getDerivedStateFromProps&&k!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(k,$),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(k,h.__s,$)){u.__v!=t.__v&&(h.props=k,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),w.push.apply(h.__h,h._sb),h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(k,h.__s,$),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,d)})}if(h.context=$,h.props=k,h.__P=n,h.__e=!1,I=l.__r,P=0,x)h.state=h.__s,h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),w.push.apply(h.__h,h._sb),h._sb=[];else do{h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++P<25);h.state=h.__s,null!=h.getChildContext&&(i=m(m({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(d=h.getSnapshotBeforeUpdate(v,y)),A=null!=a&&a.type===S&&null==a.key?E(a.props.children):a,f=L(n,g(A)?A:[A],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),_&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(H=o.length;H--;)b(o[H]);B(u)}else u.__e=t.__e,u.__k=t.__k,n.then||B(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=G(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function B(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(B))}function D(n,u,t){for(var i=0;i<t.length;i++)J(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function E(n){return\"object\"!=typeof n||null==n||n.__b>0?n:g(n)?n.map(E):m({},n)}function G(u,t,i,r,o,e,f,c,s){var a,h,p,v,y,w,_,m=i.props||d,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((y=e[a])&&\"setAttribute\"in y==!!x&&(x?y.localName==x:3==y.nodeType)){u=y,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)m===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(m={},a=0;a<u.attributes.length;a++)m[(y=u.attributes[a]).name]=y.value;for(a in m)y=m[a],\"dangerouslySetInnerHTML\"==a?p=y:\"children\"==a||a in k||\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k||N(u,a,null,y,o);for(a in k)y=k[a],\"children\"==a?v=y:\"dangerouslySetInnerHTML\"==a?h=y:\"value\"==a?w=y:\"checked\"==a?_=y:c&&\"function\"!=typeof y||m[a]===y||N(u,a,y,m[a],o);if(h)c||p&&(h.__html==p.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(p&&(u.innerHTML=\"\"),L(\"template\"==t.type?u.content:u,g(v)?v:[v],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&$(i,0),c,s),null!=e)for(a=e.length;a--;)b(e[a]);c||(a=\"value\",\"progress\"==x&&null==w?u.removeAttribute(\"value\"):null!=w&&(w!==u[a]||\"progress\"==x&&!w||\"option\"==x&&w!=m[a])&&N(u,a,w,m[a],o),a=\"checked\",null!=_&&_!=u[a]&&N(u,a,_,m[a],o))}return u}function J(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function K(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||J(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&K(i[r],u,t||\"function\"!=typeof n.type);t||b(n.__e),n.__c=n.__=n.__e=void 0}function Q(n,l,u){return this.constructor(n,u)}function R(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],q(t,u=(!r&&i||t).__k=k(S,null,[u]),o||d,d,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),D(e,u,f)}function U(n,l){R(n,l,U)}function W(l,u,t){var i,r,o,e,f=m({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),x(l.type,f,i||l.key,r||l.ref,null)}function X(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,A(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+y++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=w.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},C.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=m({},this.state),\"function\"==typeof n&&(n=n(m({},u),this.props)),n&&m(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),A(this))},C.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),A(this))},C.prototype.render=S,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},H.__r=0,f=Math.random().toString(8),c=\"__d\"+f,s=\"__a\"+f,a=/(PointerCapture)$|Capture$/i,h=0,p=V(!1),v=V(!0),y=0;export{C as Component,S as Fragment,W as cloneElement,X as createContext,k as createElement,M as createRef,k as h,U as hydrate,t as isValidElement,l as options,R as render,F as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","/**\n * Infer the url of the page best we can\n * @returns {string} the url of the page\n */\nexport const inferPageUrl = (): string => {\n if (window.FreshUrl?.originalUrl != null) {\n return window.FreshUrl.originalUrl;\n }\n if (window.top === window.self) {\n return window.location.href || '';\n }\n return document.referrer || '';\n};\n","// Logic adapted from this Javascript Color class:\n// https://github.com/moagrius/Color/blob/master/Color.js\n//\n// HSL to RGB logic (broken in Color class) taken from:\n// http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n\nimport { isNil } from '@wistia/type-guards';\nimport { colorContrastRatiosByShape, getContrast, rgbToHsl } from './color-utils.ts';\n\n// LRGB color blending taken from chroma-js:\n// https://github.com/gka/chroma.js/blob/main/src/interpolator/lrgb.js\n\n// ## Regular expressions ##\nconst rHex = /^#?([0-9a-f]{3,4}|[0-9a-f]{6,8})$/i;\nconst rRgb =\n /^rgba?\\((\\d{1,3}(?:\\.\\d+)?%?),\\s*(\\d{1,3}(?:\\.\\d+)?%?),\\s*(\\d{1,3}(?:\\.\\d+)?%?)(?:,\\s*([01]?\\.?\\d*))?\\)$/;\nconst rPercent = /^\\d+(\\.\\d+)*%$/;\nconst hexBit = /([0-9a-f])/gi;\n\nconst p2v = (p) => {\n if (rPercent.test(p)) {\n return parseFloat(p) * 2.55;\n }\n return p;\n};\n\nconst hue2rgb = (a, b, c) => {\n if (c < 0) {\n c += 1;\n }\n if (c > 1) {\n c -= 1;\n }\n if (c < 1 / 6) {\n return a + (b - a) * 6 * c;\n }\n if (c < 1 / 2) {\n return b;\n }\n if (c < 2 / 3) {\n return a + (b - a) * (2 / 3 - c) * 6;\n }\n return a;\n};\n\nexport class Color {\n // ## Constructor ##\n //\n // Construct our own color representation either from an\n // existing color, or a color string.\n constructor(input) {\n if (input instanceof Color) {\n this.r = input.r;\n this.g = input.g;\n this.b = input.b;\n this.a = input.a;\n } else if (input) {\n this.parse(input);\n } else {\n this.r = this.g = this.b = 0;\n this.a = 1;\n }\n }\n\n // ## Parse ##\n //\n // Accept #RRGGBB, #RRGGBBAA, rgba(R,G,B), or rgba(R,G,B,A) formats\n // as well as [r, g, b, a].\n // The rgb formats also allows percents.\n // Falls back to #2949E5 if parsing fails.\n parse(input) {\n let parsed = false;\n\n if (Array.isArray(input)) {\n this.r = input[0];\n this.g = input[1];\n this.b = input[2];\n this.a = input[3] ?? 1;\n parsed = true;\n } else {\n // Sanitize: remove spaces and other whitespace characters\n const sanitized = String(input).replace(/\\s+/g, '');\n\n if (rHex.test(sanitized)) {\n let stripped = sanitized.replace(/^#/, '');\n if (stripped.length === 3 || stripped.length === 4) {\n stripped = stripped.replace(hexBit, '$1$1');\n }\n this.r = parseInt(stripped.substr(0, 2), 16);\n this.g = parseInt(stripped.substr(2, 2), 16);\n this.b = parseInt(stripped.substr(4, 2), 16);\n if (stripped.length === 8) {\n this.a = parseInt(stripped.substr(6, 2), 16) / 255;\n } else {\n this.a = 1;\n }\n parsed = true;\n } else if (rRgb.test(sanitized)) {\n const parts = sanitized.match(rRgb);\n this.r = parseFloat(p2v(parts[1]));\n this.g = parseFloat(p2v(parts[2]));\n this.b = parseFloat(p2v(parts[3]));\n if (parts[4]) {\n this.a = parseFloat(parts[4]);\n } else {\n this.a = 1;\n }\n parsed = true;\n }\n }\n\n // Validate parsed values and fall back to safe default (#2949E5) if invalid\n if (\n !parsed ||\n isNaN(this.r) ||\n isNaN(this.g) ||\n isNaN(this.b) ||\n isNaN(this.a) ||\n this.r < 0 ||\n this.g < 0 ||\n this.b < 0 ||\n this.a < 0\n ) {\n this.r = 41;\n this.g = 73;\n this.b = 229;\n this.a = 1;\n console.error(\n `An invalid color was provided, ${input.toString()}, using default color instead.`,\n );\n }\n\n return this;\n }\n\n clone() {\n return new Color(this);\n }\n\n // Compute internal HSL values based on internal RGB values.\n _hslFromRgb() {\n const { hue, saturation, lightness } = rgbToHsl([this.r, this.g, this.b]);\n\n this._h = hue;\n this._s = saturation;\n this._l = lightness;\n\n return this;\n }\n\n // Compute internal RGB values based on internal HSL values.\n _rgbFromHsl() {\n const h = this._h / 360;\n const s = this._s / 100;\n const l = this._l / 100;\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n this.r = hue2rgb(p, q, h + 1 / 3) * 255;\n this.g = hue2rgb(p, q, h) * 255;\n this.b = hue2rgb(p, q, h - 1 / 3) * 255;\n\n return this;\n }\n\n // Do math to blend a channel with a different value. Alpha is\n // the strength of the blend.\n blendChannel(channel, value, alpha, shouldUseLrgb) {\n if (shouldUseLrgb) {\n this[channel] = Math.sqrt(this[channel] ** 2 * (1 - alpha) + value ** 2 * alpha);\n return this;\n }\n this[channel] = alpha * value + (1 - alpha) * this[channel];\n return this;\n }\n\n // Blend this color with another color by blending each RGB\n // channel individually.\n blend(color, alpha, shouldUseLrgb) {\n color = new Color(color);\n this.blendChannel('r', color.r, alpha, shouldUseLrgb);\n this.blendChannel('g', color.g, alpha, shouldUseLrgb);\n this.blendChannel('b', color.b, alpha, shouldUseLrgb);\n return this;\n }\n\n // background color can be a string or a Color\n getContrastRatio(backgroundColor) {\n return Number.parseFloat(\n getContrast(this.toHexWithHash(), new Color(backgroundColor).toHexWithHash()).toFixed(3),\n );\n }\n\n // background color can be a string or a Color\n // shape will be a key of colorContrastRatiosByShape\n hasAccessibleContrast(backgroundColor, shape) {\n return this.getContrastRatio(backgroundColor) >= colorContrastRatiosByShape[shape];\n }\n\n hue() {\n this._hslFromRgb();\n return this._h;\n }\n\n // Increase a channel by a fixed value, but within the [0,255] range.\n lightenChannel(channel, steps) {\n this[channel] += steps;\n if (this[channel] < 0) {\n this[channel] = 0;\n } else if (this[channel] > 255) {\n this[channel] = 255;\n }\n return this;\n }\n\n // Lighten this color by increasing each channel by a fixed value.\n lighten(steps) {\n if (this.looksLikePercent(steps)) {\n this.lightness(this.lightness() + parseFloat(steps));\n } else {\n this.lightenChannel('r', steps);\n this.lightenChannel('g', steps);\n this.lightenChannel('b', steps);\n }\n return this;\n }\n\n darken(steps) {\n if (typeof steps === 'string') {\n return this.lighten(`-${steps}`);\n }\n return this.lighten(-steps);\n }\n\n looksLikePercent(str) {\n return /^-?\\d+(\\.\\d+)?%$/.test(str);\n }\n\n // Set the lightness of this color by modifying the L value in\n // HSL, then recomputing the RGB.\n //\n // No args gets the current lightness.\n lightness(l) {\n this._hslFromRgb();\n if (l != null) {\n this._l = Math.max(0, Math.min(100, l));\n this._rgbFromHsl();\n return this;\n }\n return this._l;\n }\n\n // Set the saturation of this color by modifying the S value in\n // HSL, then recomputing the RGB.\n //\n // No args gets the current saturation.\n saturation(s) {\n this._hslFromRgb();\n if (s != null) {\n this._s = Math.max(0, Math.min(100, s));\n this._rgbFromHsl();\n return this;\n }\n return this._s;\n }\n\n setHue(hueValue) {\n this._hslFromRgb();\n if (hueValue != null) {\n this._h = Math.max(0, Math.min(360, hueValue));\n this._rgbFromHsl();\n return this;\n }\n }\n\n shade(percentage, shouldUseLrgb) {\n return this.blend('#000000', percentage, shouldUseLrgb);\n }\n\n // Gray level accounts for the strength of each individual channel.\n // This is more visually accurate than just averaging all the channels.\n grayLevel() {\n return (0.299 * this.r + 0.587 * this.g + 0.114 * this.b) / 255;\n }\n\n tint(percentage, shouldUseLrgb) {\n return this.blend('#ffffff', percentage, shouldUseLrgb);\n }\n\n // The white level is basically paleness, and is determined by the\n // minimum of all the RGB channels.\n whiteLevel() {\n return Math.min(Math.min(this.r, this.g), this.b);\n }\n\n getRelativeLuminance() {\n // For reference on calculating relative luminance: https://www.w3.org/WAI/GL/wiki/Relative_luminance\n const adjustChannel = (givenVal) => {\n const val = givenVal * 0.003921569; // 1 / 255 = 0.003921569; avoiding division\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return ((val + 0.055) / 1.055) ** 2.4;\n };\n\n const rAdjusted = adjustChannel(this.r);\n const gAdjusted = adjustChannel(this.g);\n const bAdjusted = adjustChannel(this.b);\n return Math.min(0.2126 * rAdjusted + 0.7152 * gAdjusted + 0.0722 * bAdjusted, 1);\n }\n\n isDark(shouldUseRL) {\n if (shouldUseRL) {\n return this.getRelativeLuminance() < 0.15;\n }\n return this.grayLevel() <= 0.4;\n }\n\n isLight(shouldUseRL) {\n if (shouldUseRL) {\n return this.getRelativeLuminance() >= 0.8;\n }\n return this.grayLevel() > 0.4;\n }\n\n isGrayscale() {\n return this.r === this.g && this.g === this.b;\n }\n\n distanceFrom(color) {\n return Math.sqrt((this.r - color.r) ** 2 + (this.g - color.g) ** 2 + (this.b - color.b) ** 2);\n }\n\n channelDominance() {\n return ['r', 'g', 'b'].sort((a, b) => this[b] - this[a]);\n }\n\n alpha(a) {\n if (a != null) {\n this.a = a;\n return this;\n }\n return this.a;\n }\n\n red(r) {\n if (r != null) {\n this.r = r;\n return this;\n }\n return this.r;\n }\n\n green(g) {\n if (g != null) {\n this.g = g;\n return this;\n }\n return this.g;\n }\n\n blue(b) {\n if (b != null) {\n this.b = b;\n return this;\n }\n return this.b;\n }\n\n toHex() {\n let r = Math.round(this.r).toString(16);\n let g = Math.round(this.g).toString(16);\n let b = Math.round(this.b).toString(16);\n if (r.length === 1) {\n r = `0${r}`;\n }\n if (g.length === 1) {\n g = `0${g}`;\n }\n if (b.length === 1) {\n b = `0${b}`;\n }\n return `${r}${g}${b}`;\n }\n\n toHexWithAlpha() {\n let a = Math.round(this.a * 255).toString(16);\n if (a.length === 1) {\n a = `0${a}`;\n }\n return `${a}${this.toHex()}`;\n }\n\n toHexWithHash() {\n return `#${this.toHex()}`;\n }\n\n toRgb() {\n return `rgb(${Math.round(this.r)},${Math.round(this.g)},${Math.round(this.b)})`;\n }\n\n toRgba() {\n return `rgba(${Math.round(this.r)},${Math.round(this.g)},${Math.round(this.b)},${this.a})`;\n }\n\n toRgbaOrHex() {\n return this.toRgba();\n }\n\n toPercent() {\n return `rgba(${(this.r / 255) * 100}%,${(this.g / 255) * 100}%,${(this.b / 255) * 100}%,${\n this.a\n })`;\n }\n\n // IE8 and below don't support RGBA, but we can use this gradient hack to\n // do the same thing. The catch is that it functions as a background image\n // instead of a color, and therefore overrides other background images in IE.\n //\n // This should go after a `filter` CSS property.\n toIeGradient() {\n return `progid:DXImageTransform.Microsoft.gradient(startColorStr='#${this.toHexWithAlpha()}', endColorStr='#${this.toHexWithAlpha()}')`;\n }\n\n toString() {\n return this.toPercent();\n }\n}\n\n// @param {string} hex\n// @return {string}\nexport const addHashToHex = (hex) => {\n if (isNil(hex)) {\n return;\n }\n\n // A valid hex color might be composed of all numbers\n // so we need to ensure that the hex is actually a string\n // before we try to examine its contents.\n const hexGuaranteedToBeString = String(hex);\n\n // return if already has hash\n if (hexGuaranteedToBeString.charAt(0) === '#') {\n return hexGuaranteedToBeString;\n }\n\n return `#${hexGuaranteedToBeString}`;\n};\n\nexport const colorWithAlpha = (color, alpha) => {\n return new Color(color).alpha(alpha).toRgba();\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable no-console */\nimport * as preact from 'preact';\nimport * as hooks from 'preact/hooks';\nimport * as compat from 'preact/compat';\nimport { root } from './utilities/root.js';\nimport { WistiaGlobal } from './types/player-api-types.ts';\n\nroot.Wistia ??= {};\n\n// Set up Preact on the namespace for async entry points to use\n// Embeds often asynchronously load additional or conditional Preact components, and if they are hook based, they should all use the same instance of Preact.\n// This is because Preact tracks hook state using internal module-level variables. And if they are not shared, they will often not work correctly if trying to use\n// them in one tree. https://github.com/wistia/player-modern/pull/5297\nroot.Wistia.Preact ??= { ...preact, hooks, compat };\n\nroot.Wistia._destructors ??= {};\n\nroot.Wistia._initializers ??= {};\n\nroot.Wistia._remoteData ??= new Map();\n\nroot.Wistia.api ??= () => {\n console.error('Accessed Wistia.api() before it was initialized');\n return null;\n};\n\n// this will be overwritten in _async.coffee\nroot.Wistia.defineControl ??= () => {\n console.error('Accessed Wistia.defineControl() before it was initialized');\n return null;\n};\n\nroot.Wistia.EventShepherdManager ??= {};\n\nroot.Wistia.mixin ??= <T>(klass: T, obj: Partial<Record<keyof T, unknown>> = {}) => {\n Object.keys(obj).forEach((key) => {\n if (Object.hasOwn(obj, key)) {\n // eslint-disable-next-line no-param-reassign\n klass[key] = obj[key] as unknown as T[keyof T];\n }\n });\n};\n\nroot.Wistia.playlistMethods ??= new Map();\n\n// will be overwritten in _public_api.coffee\nroot.Wistia.PublicApi ??= null;\n\n// will be overwritten in _remote_data.js\nroot.Wistia.uncacheMedia ??= () => {\n console.error('Accessed Wistia.uncacheMedia() before it was initialized');\n return null;\n};\n\n// will be overwritten in _visitor_key.js\nroot.Wistia.VisitorKey ??= null;\n\n// will be overwritten in _visitor_key.js\nroot.Wistia.visitorKey ??= null;\n\n// will be overwritten in WistiaPlayer.tsx\nroot.Wistia.wistia ??= undefined;\n\nroot.Wistia._liveStreamEventDataPromises ??= {};\n\nroot.Wistia._mediaDataPromises ??= {};\n\nroot.Wistia._liveStreamPollingPromises ??= {};\n\nroot.Wistia.first ??= () => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return root.Wistia.api() ?? document.querySelector('wistia-player');\n // 👆 prefer the E-v1 api first, so for translated embeds, it'll use the TranslationApi, otherwise use the first wistia-player on the page\n};\n\nexport const Wistia = root.Wistia as WistiaGlobal;\n","import type { PublicApi, WistiaContainerHTMLElement } from '../types/player-api-types.ts';\nimport { getAllApiEmbedElements } from './getEmbedElements.ts';\nimport { wlog } from './wlog.js';\nimport { wData } from './wistiaData.js';\nimport { ensureString } from './hashedId.ts';\n\nexport type MatcherFunction = (\n video?: MatcherFunction | PublicApi | WistiaContainerHTMLElement | 'removed' | null,\n) => void;\n\n/**\n * Initialized embeds are API embeds that have a wistiaApi property set on the\n * container. container.wistiaApi is set on legacy embeds in _public_api.js\n * @returns {PublicApi[]}\n */\nexport const getAllInitializedEmbedApiHandles = (): (PublicApi | 'removed' | undefined)[] => {\n if (wData('video') === undefined) {\n return [];\n }\n return Object.values(wData('video') as PublicApi[]);\n};\n\n/**\n * Get all initialized instances of the iframe api\n * @returns {PublicApi[]}\n */\nexport const getAllIframeApiHandles = (): (PublicApi | 'removed' | undefined)[] => {\n if (wData('iframe_api') === undefined) {\n return [];\n }\n return Object.values(wData('iframe_api') as PublicApi[]);\n};\n\n/**\n * Get all initialized instances of the API, inclusive of both\n * iframe API and regular embed public API\n * @returns {PublicApi[]}\n */\nexport const getAllApiHandles = (): (PublicApi | 'removed' | undefined)[] => {\n return getAllInitializedEmbedApiHandles().concat(getAllIframeApiHandles());\n};\n\n/**\n * Get a single API handle by matcher\n * @param {Function | HTMLElement | number | string | undefined} matcher - The matcher\n * @returns {PublicApi | null}\n */\nexport const getOneApiHandle = (\n matcher?: HTMLElement | MatcherFunction | number | string,\n // fn?: MatcherFunction | undefined, // TODO: Handle the case where functions are provided\n): MatcherFunction | PublicApi | WistiaContainerHTMLElement | 'removed' | null => {\n // If no matcher is provided, return the first api handle\n if (matcher === undefined) {\n return getAllApiHandles()[0] ?? null;\n }\n\n /* TODO: Handle the case where functions are provided to completely replicate\n * the original behavior of the `Wistia.api` function from _async.coffee\n * This will also require us to port over the Wistia.api.onFind function\n *\n // If a callback is provided, return the first api handle that matches\n if (fn !== undefined) {\n return onFindApiHandle(matcher, fn);\n }\n\n // If the matcher provided is a function, return the first api handle that matches\n if (typeof matcher === 'function') {\n return onFindApiHandle(matcher);\n }\n *\n * END TODO\n */\n\n // TODO: Consider using the strategy pattern here to isolate the logic for these cases a little more!\n let container: WistiaContainerHTMLElement | null = null;\n if (typeof matcher === 'string') {\n const query = matcher;\n\n // Find by DOM ID\n // Prefer unique-id attribute over id attribute\n container =\n document.querySelector(`[unique-id='${query}']`) ??\n (document.getElementById(query) as WistiaContainerHTMLElement | null);\n\n // Or find by fuzzy match on hashed ID or container\n if (container === null) {\n const apiHandles = getAllApiHandles();\n const matchedHandle = apiHandles.find((handle: PublicApi) => {\n // note: eslint flagged the logical OR below but it's intentional and necessary\n // see: https://github.com/wistia/player-modern/pull/2964#discussion_r1274876654\n\n if (handle.hashedId()?.startsWith(query) || handle.container?.id.startsWith(query)) {\n return handle;\n }\n\n // not all public api handles will have this method\n if ('mediaLanguages' in handle && 'languageToLocalization' in handle) {\n const queryMatchesLocalization = handle.mediaLanguages().some((language) => {\n const localization = handle.languageToLocalization(language);\n return localization != null && ensureString(localization.hashedId).startsWith(query);\n });\n\n if (queryMatchesLocalization) {\n return handle;\n }\n\n const queryMatchesSourceMediaId = ensureString(\n handle._mediaData?.sourceHashedId,\n ).startsWith(query);\n\n if (queryMatchesSourceMediaId) {\n return handle;\n }\n }\n\n return null;\n });\n if (matchedHandle !== 'removed') {\n container = (matchedHandle?.container as WistiaContainerHTMLElement | null) ?? null;\n }\n }\n } else if (typeof matcher === 'number') {\n let index = matcher;\n const apiHandles = getAllApiHandles();\n // Allow negative indices to get from the end\n if (index < 0) {\n index = apiHandles.length + index;\n }\n\n const apiHandle = apiHandles[index];\n if (apiHandle !== undefined && apiHandle !== 'removed') {\n container = apiHandle.container ?? null;\n }\n } else if (matcher instanceof HTMLElement) {\n container = matcher as WistiaContainerHTMLElement;\n } else {\n wlog.error('Unrecognized matcher', matcher);\n }\n\n // If our container is a wistia-player web component, it handles its own API\n // and we can just return it.\n if (container?.tagName === 'WISTIA-PLAYER') {\n // TODO: We need to call the PublicApi methods for now, but once WistiaPlayer\n // is more built out we should be able to just send that over directly\n return container.deprecatedApiDoNotUse as unknown as PublicApi;\n }\n\n // If the container has an API handle that isn't 'removed', return it\n // More on 'removed': https://github.com/wistia/player-modern/pull/1280\n if (container?.wistiaApi !== undefined && container.wistiaApi !== 'removed') {\n return container.wistiaApi as unknown as PublicApi;\n }\n return null;\n};\n\n/**\n * Get a single API handle by ONLY hashed id, not by container id\n * @param {number | string | undefined} hashedId\n * @returns {PublicApi | null}\n */\nexport const getOneApiHandleFromHashedId = (\n hashedId: string,\n): MatcherFunction | PublicApi | WistiaContainerHTMLElement | 'removed' | null => {\n let container: WistiaContainerHTMLElement | null = null;\n const query = hashedId;\n\n // Find by fuzzy match on hashed ID\n const apiHandles = getAllApiHandles();\n const matchedHandle = apiHandles.find((handle: PublicApi) => {\n if (handle.hashedId()?.startsWith(query)) {\n return handle;\n }\n return null;\n });\n\n if (matchedHandle !== 'removed') {\n container = (matchedHandle?.container as WistiaContainerHTMLElement | null) ?? null;\n }\n\n // If our container is a wistia-player web component, it handles its own API\n // and we can just return it.\n if (container?.tagName === 'WISTIA-PLAYER') {\n // TODO: We need to call the PublicApi methods for now, but once WistiaPlayer\n // is more built out we should be able to just send that over directly\n return container.deprecatedApiDoNotUse as unknown as PublicApi;\n }\n\n // If the container has an API handle that isn't 'removed', return it\n // More on 'removed': https://github.com/wistia/player-modern/pull/1280\n if (container?.wistiaApi !== undefined && container.wistiaApi !== 'removed') {\n return container.wistiaApi as unknown as PublicApi;\n }\n return null;\n};\n\n/**\n * Get all (non-iframe) API handles in the order they appear in the DOM\n * @returns {PublicApi[]}\n */\nexport const getAllApiHandlesByDomOrder = (): (PublicApi | 'removed' | undefined)[] => {\n // Legacy embeds have a wistia_embed_initialized class added to the container\n // when their public api is initialized and set (container.wistiaApi)\n const legacyHandles = Array.from(\n getAllApiEmbedElements('wistia_embed_initialized') as unknown as WistiaContainerHTMLElement[],\n ).reduce((accumulator: PublicApi[], legacyContainer: WistiaContainerHTMLElement) => {\n // Make sure the api has been initialized, set, and is not marked as 'removed'\n if (\n legacyContainer.wistiaApi !== undefined &&\n legacyContainer.wistiaApi !== 'removed' &&\n legacyContainer.wistiaApi !== null\n ) {\n accumulator.push(legacyContainer.wistiaApi);\n }\n return accumulator;\n }, []);\n\n const wistiaPlayerHandles = Array.from(document.querySelectorAll('wistia-player')).reduce(\n (accumulator: PublicApi[], container: WistiaContainerHTMLElement) => {\n if (\n container.deprecatedApiDoNotUse !== undefined &&\n container.deprecatedApiDoNotUse !== 'removed' &&\n container.deprecatedApiDoNotUse !== null\n ) {\n accumulator.push(container.deprecatedApiDoNotUse);\n }\n return accumulator;\n },\n [],\n );\n\n return [...legacyHandles, ...wistiaPlayerHandles];\n};\n","import { bestImage, blankImage, sortedImages } from 'utilities/image.js';\nimport { Component, h, render } from 'preact';\nimport { assign } from 'utilities/obj.js';\nimport { elemInDom } from 'utilities/elem.js';\nimport { defineTranslations, getTranslation } from './translations.js';\n\ndefineTranslations('en-US', {\n THUMBNAIL_VIDEO_THUMBNAIL: 'Video Thumbnail',\n});\n\nexport class Thumbnail extends Component {\n constructor(props) {\n super(props);\n this.initialState = this.state = {\n isLoaded: false,\n isDisplaying: false,\n };\n\n this.onDisplay = this.props.onDisplay;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.images !== this.props.images) {\n // clear the cache if we're changing which images to operate on.\n this._sortedImages = null;\n this.setState({ isLoaded: false, isDisplaying: false });\n }\n\n if (!this.onDisplay && nextProps.onDisplay) {\n this.onDisplay = nextProps.onDisplay;\n }\n }\n\n render() {\n const altText =\n this.props.thumbnailAltText !== undefined\n ? this.props.thumbnailAltText\n : this.translate('VIDEO_THUMBNAIL');\n return (\n <div style={this.wrapperStyle()} class=\"w-css-reset\">\n <img\n class=\"w-css-reset\"\n srcset={this.props.images.length > 1 ? this.srcSet() : null}\n src={this.bestSrc()}\n style={this.imgStyle()}\n alt={altText}\n ref={(e) => (this.imgElem = e)}\n aria-hidden={this.props.ariaHidden ? 'true' : null}\n />\n </div>\n );\n }\n\n translate(key) {\n return getTranslation(this.props.playerLanguage, `THUMBNAIL_${key}`);\n }\n\n componentDidMount() {\n this.setStateBasedOnImgStatus();\n this.maybeCallOnDisplay(this.initialState);\n }\n\n componentDidUpdate(prevProps, prevState) {\n this.setStateBasedOnImgStatus();\n this.maybeCallOnDisplay(prevState);\n }\n\n maybeCallOnDisplay() {\n if (this.onDisplay && this.state.isDisplaying && !this.calledOnDisplay) {\n // There may be components outside the thumbnail that depend on this.\n // For example, we might not want to show controls until the thumbnail\n // is displayed.\n this.calledOnDisplay = true;\n this.onDisplay();\n }\n }\n\n setStateBasedOnImgStatus() {\n const state = this.state;\n\n const imgElem = this.imgElem;\n if (state.isLoaded) {\n return;\n }\n\n if (!imgElem.onload) {\n imgElem.onload = () => {\n if (elemInDom(imgElem)) {\n this.setState({ isLoaded: true, isDisplaying: true });\n }\n };\n }\n\n if (imgElem.complete) {\n this.setState({ isLoaded: true, isDisplaying: true });\n }\n }\n\n wrapperStyle() {\n const shouldShow = this.state.isDisplaying && this.props.isVisible;\n return assign({}, this.props.wrapperStyle, {\n display: this.state.isLoaded && !shouldShow ? 'none' : 'block',\n });\n }\n\n baseStyle() {\n const fitStrategy = this.props.fitStrategy;\n if (fitStrategy === 'cover') {\n return this.coverStyle();\n }\n if (fitStrategy === 'contain') {\n return this.containStyle();\n }\n if (fitStrategy === 'fill') {\n return this.fillStyle();\n }\n if (fitStrategy === 'naturalHeight') {\n return this.naturalHeightStyle();\n }\n return this.containStyle();\n }\n\n imgStyle() {\n const shouldShow = this.state.isDisplaying && this.props.isVisible;\n return assign(this.baseStyle(), {\n // We use position/clip to hide/show the thumbnail until it has loaded\n // because the img may not try to load if it's not visible. But after\n // it's loaded, we use display: none/block to defeat over-aggressive css\n // that might do something like position: static !important.\n clip: shouldShow ? 'auto' : 'rect(0,0,0,0)',\n display: this.state.isLoaded && !shouldShow ? 'none' : 'block',\n borderRadius: `${this.props.playerBorderRadius}px`,\n });\n }\n\n containStyle() {\n return {\n backgroundColor: this.props.backgroundColor || '#000',\n height: '100%',\n objectFit: 'contain',\n position: 'absolute',\n width: '100%',\n top: 0,\n left: 0,\n };\n }\n\n coverStyle() {\n // IE11 does not support objectFit. Screw em.\n return {\n height: '100%',\n objectFit: 'cover',\n position: 'absolute',\n width: '100%',\n };\n }\n\n fillStyle() {\n // Though object-fit will be ignored, this will work in IE1 because the\n // default is to stretch the image.\n return {\n height: '100%',\n objectFit: 'fill',\n position: 'absolute',\n width: '100%',\n };\n }\n\n naturalHeightStyle() {\n return {\n width: '100%',\n position: 'relative',\n };\n }\n\n bestSrc() {\n return bestImage(this.props.images, {\n videoWidth: this.props.videoWidth,\n videoHeight: this.props.videoHeight,\n }).url;\n }\n\n srcSet() {\n let sortedImages = this.sortedImages();\n\n if (sortedImages.length === 0) {\n sortedImages = [blankImage(this.props.videoWidth, this.props.videoHeight)];\n }\n\n return sortedImages\n .map((image) => {\n return `${image.url} ${image.width}w`;\n })\n .join(', ');\n }\n\n sortedImages() {\n if (this._sortedImages) {\n return this._sortedImages;\n }\n\n this._sortedImages = sortedImages(this.props.images);\n\n return this._sortedImages;\n }\n\n stretchLimit() {\n const stretchLimit = this.props.stretchLimit;\n if (stretchLimit != null) {\n return stretchLimit;\n }\n return 10;\n }\n}\n","import { Wistia } from '../../../wistia_namespace.ts';\nimport { findScriptInDomBySrc } from '../../../utilities/script-utils.js';\nimport { mediaDataScriptRegExp, mediaDataUrl } from '../../../utilities/media_data.js';\nimport { eV1Protocol, mediaDataHost } from '../../../utilities/hosts.js';\nimport { mediaDataTransforms } from '../../../utilities/media-data-transforms.js';\nimport { cacheMediaData, getMediaDataFromCache } from '../../../utilities/remote-data-cache.ts';\nimport { isMediaDataError } from '../../../utilities/mediaDataError.ts';\nimport { clone } from '../../../utilities/obj.js';\nimport { fetchMediaData } from '../../../utilities/fetchMediaData.ts';\nimport type {\n MediaData,\n MediaDataServerResponse,\n MediaDataServerErrorResponse,\n} from '../../../types/player-api-types.ts';\nimport type { FetchMediaDataOptions } from '../../../utilities/fetchMediaData.ts';\n\n// This file is designed to efficiently retrieve media data from multiple potential sources.\n// The goal is to obtain the media data as quickly as possible.\n// Our legacy embed scripts use JSONP and our new scripts use a JS module.\n// It includes functions to check for the presence of these JSONP and JavaScript embed scripts in the DOM,\n// which can provide the necessary media data.\n// If they aren't there or don't load fast enough, we use server data.\n\nconst INTERVAL_TIME = 15;\nconst JS_LOAD_TIMEOUT = 30000; // 30 seconds\nconst SERVER_FETCH_FALLBACK_TIMEOUT = 15000; // 15 seconds\n\nconst doesJsonpExist = (mediaId: string, options: FetchMediaDataOptions = {}): boolean => {\n const url = mediaDataUrl(mediaId, options);\n // the mediaDataUrl above 👆 ends with `json` and we're specifically looking for jsonp here\n // also, really old embed codes may have added query params to the end of the url, which we want to exclude\n const matchUrl = url.replace(/\\.json(?!p)/, '.jsonp').replace(/&$/, '');\n\n const isJsonpScriptInDom = findScriptInDomBySrc(matchUrl, {\n ignoreProtocol: true,\n scriptRegex: mediaDataScriptRegExp(mediaId),\n });\n\n return Boolean(isJsonpScriptInDom);\n};\n\nconst jsScriptUrl = (mediaId: string, options: FetchMediaDataOptions = {}): string => {\n const host = mediaDataHost(options) as string;\n return `${eV1Protocol()}//${host}/embed/${mediaId}.js`;\n};\n\nconst doesJsMediaDataScriptExist = (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): boolean => {\n const url = jsScriptUrl(mediaId, options);\n const isJsScriptInDom = findScriptInDomBySrc(url, {\n ignoreProtocol: true,\n });\n\n return Boolean(isJsScriptInDom);\n};\n\nconst pollForJsonp = async (\n mediaId: string,\n options: FetchMediaDataOptions,\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n return new Promise((resolve, reject) => {\n const pollState = { isSettled: false, intervalId: -1, timeoutId: -1 };\n\n const cleanup = () => {\n pollState.isSettled = true;\n clearInterval(pollState.intervalId);\n clearTimeout(pollState.timeoutId);\n };\n\n // try looking once before the interval. This is especially useful for tests\n // since using vi.useFakeTimers() doesn't work with this function\n const checkForJsonp = () => {\n const jsonp = window[`wistiajsonp-/embed/medias/${mediaId}.jsonp`] as\n | MediaDataServerResponse\n | undefined;\n\n if (jsonp) {\n if (jsonp.media) {\n cleanup();\n\n // Any data from speed demon scripts we know won't be localized, so we can\n // cache it.\n cacheMediaData(mediaId, jsonp.media);\n\n // Still call fetchMediaData in case we need to get the localized version.\n fetchMediaData(mediaId, options)\n .then(resolve)\n .catch(() => {\n reject(new Error('Failed to fetch media data via jsonp'));\n });\n return;\n }\n\n if (isMediaDataError(jsonp)) {\n cleanup();\n resolve(jsonp);\n }\n }\n };\n\n checkForJsonp();\n\n if (pollState.isSettled) return;\n\n pollState.intervalId = window.setInterval(checkForJsonp, INTERVAL_TIME);\n\n pollState.timeoutId = window.setTimeout(() => {\n cleanup();\n reject(new Error('Timeout loading jsonp media data'));\n }, JS_LOAD_TIMEOUT);\n });\n};\n\nconst getJsScript = async (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n const url = jsScriptUrl(mediaId, options);\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error('Timeout loading js media data'));\n }, JS_LOAD_TIMEOUT);\n void import(/* webpackIgnore: true */ url)\n .then((module: { mediaData: MediaDataServerResponse }) => {\n const { mediaData } = module;\n\n // Any data from speed demon scripts we know won't be localized, so we can\n // cache it.\n cacheMediaData(mediaId, mediaData as MediaData);\n })\n .then(async () => fetchMediaData(mediaId, options))\n .then(resolve)\n .catch((err: unknown) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n};\n\nconst fetchMediaDataDelayed = (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): [Promise<MediaData | MediaDataServerErrorResponse>, { current: number }] => {\n const timeoutRef = { current: -1 };\n const promise = new Promise<MediaData | MediaDataServerErrorResponse>((resolve, reject) => {\n timeoutRef.current = window.setTimeout(() => {\n void fetchMediaData(mediaId, options)\n .then(resolve)\n .catch((err: unknown) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n }, SERVER_FETCH_FALLBACK_TIMEOUT);\n });\n return [promise, timeoutRef];\n};\n\nexport const getInitialMediaData = async (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n // If the media data is already in the cache, no need to wait for everything\n // else. Also, if we've cached from an external source like password\n // protected video, this lets us respect that value.\n const mediaDataFromCache = getMediaDataFromCache(mediaId);\n if (mediaDataFromCache != null && options.skipCache !== true) {\n return fetchMediaData(mediaId, options);\n }\n\n const inlineMediaData = Wistia._inlineMediaData?.[mediaId];\n if (inlineMediaData != null) {\n // Any data from inline media data we know won't be localized, so we can\n // cache it.\n const clonedInlineMediaData = clone(inlineMediaData) as MediaData;\n mediaDataTransforms(clonedInlineMediaData, options);\n cacheMediaData(mediaId, clonedInlineMediaData);\n // Still call fetchMediaData in case we need to get the localized version.\n return fetchMediaData(mediaId, options);\n }\n\n const speedDemonPromises: Promise<MediaData | MediaDataServerErrorResponse>[] = [];\n\n if (doesJsonpExist(mediaId, options)) {\n speedDemonPromises.push(pollForJsonp(mediaId, options));\n }\n\n if (doesJsMediaDataScriptExist(mediaId, options)) {\n speedDemonPromises.push(getJsScript(mediaId, options));\n }\n\n // eslint-disable-next-line @typescript-eslint/init-declarations\n let mediaData: MediaData | MediaDataServerErrorResponse | undefined;\n\n if (speedDemonPromises.length === 0) {\n // If we get the json from the server, it'll do its own caching and mediaDataTransforms,\n // so we don't want to do that here. Doing so here could assign the mediaData to the\n // wrong mediaId (if it's localized) in the cache or double transform the data.\n mediaData = await fetchMediaData(mediaId, options);\n } else {\n const [delayedMediaDataPromise, delayedFetchTimeoutRef] = fetchMediaDataDelayed(\n mediaId,\n options,\n );\n mediaData = await Promise.any([...speedDemonPromises, delayedMediaDataPromise]);\n clearTimeout(delayedFetchTimeoutRef.current);\n }\n\n return mediaData;\n};\n","import { root } from 'utilities/root.js';\nimport { Url, proto as urlProto } from 'utilities/url.js';\nimport { appHostname, getSubdomainSuffixHostname } from '../appHostname.js';\n\nconst APP_WISTIA_COM = appHostname('app');\nconst CDN_FAST_PROTECTED_WISTIA_COM = appHostname('fast-protected');\nconst CDN_FAST_WISTIA_COM = appHostname('fast');\nconst CDN_FAST_WISTIA_CANARY = process.env.FAST_HOSTNAME_CANARY;\n\nexport const EMBED_HOST = process.env.EMBED_HOST;\n\nexport const PROD_FAST_HOSTNAME_NET = 'fast.wistia.net';\nexport const PROD_FAST_HOSTNAME_COM = 'fast.wistia.com';\n\nexport const PROD_EMBED_HOST = 'embed.wistia.com';\nexport const PROD_SSL_EMBED_HOST = 'embed-ssl.wistia.com';\n\nexport const PROD_FASTLY_SSL_HOST = 'embed-fastly.wistia.com';\n\nexport const SSL_EMBED_HOST = process.env.SSL_EMBED_HOST;\n\nexport const TAGGED_VERSION = process.env.TAGGED_VERSION || '';\n\nexport const CURRENT_SHA = process.env.CURRENT_SHA || '';\n\nconst DEFAULT_PROTOCOL = (() => {\n if (typeof window !== 'undefined' && root === window && root.location) {\n return root.location.protocol;\n }\n return 'https:';\n})();\n\nconst sslOrNonSsl = (protocol, sslHost, nonSslHost) => {\n return protocol === 'https:' ? sslHost : nonSslHost;\n};\n\nexport const deliveryHost = (protocol = DEFAULT_PROTOCOL) => {\n return sslOrNonSsl(protocol, SSL_EMBED_HOST, EMBED_HOST);\n};\n\nexport const appHost = () => {\n return APP_WISTIA_COM;\n};\n/**\n * Checks if we're running in a cloud dev environment or exposing a public endpoint\n * via a dev metal tunnel and returns the appropriate fast hostname\n * @returns {string|null} The fast hostname for cloud dev environment, or null if not in cloud dev\n */\nexport const getDevFastHostname = () => {\n const fastDevHostname = getSubdomainSuffixHostname('fast');\n if (fastDevHostname) {\n return fastDevHostname;\n }\n return null;\n};\n\n/**\n * @param {string} embedHost\n * @returns {string}\n */\nexport const cdnFastWistiaComHost = (embedHost = undefined) => {\n if (embedHost) {\n return embedHost;\n }\n\n const devFastHostname = getDevFastHostname();\n if (devFastHostname) {\n return devFastHostname;\n }\n\n return CDN_FAST_WISTIA_COM;\n};\n\nexport const cdnFastProtectedWistiaComHost = (assetHost) => {\n if (assetHost) {\n return assetHost;\n }\n return CDN_FAST_PROTECTED_WISTIA_COM;\n};\n\nexport const cdnFastWistiaNetHost = () => {\n const devFastHostname = getDevFastHostname();\n if (devFastHostname) {\n return devFastHostname;\n }\n\n const hostName = process.env.BASE_HOSTNAME || process.env.FAST_HOSTNAME_NET;\n return `fast.${hostName}`;\n};\n\nexport const cdnFastWistiaCanaryHost = () => {\n return CDN_FAST_WISTIA_CANARY;\n};\n// We run this immediately because we'll be guaranteed that E-v1 is in the DOM\n// when this is executing--unless we're loading a legacy thing like\n// playlist-v1.js or embed-shepherd_v1.js. We can use the result to determine\n// what host we should load other dynamic assets on.\nexport const eV1Url = (() => {\n const scripts = document.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const s = scripts[i];\n if (s.src) {\n const url = new Url(s.src);\n\n // Check that this is definitely our script.\n const pathIsEv1 = /\\/assets\\/external\\/E-v1?\\.js$/.test(url.rawPath);\n const hasKnownHost =\n url.host === cdnFastWistiaComHost() ||\n url.host === cdnFastWistiaNetHost() ||\n url.host === cdnFastWistiaCanaryHost();\n\n // Check that the script's protocol is sensible for the page we're on.\n const usesHttpsIfRequired = location.protocol === 'https:' && url.protocol === 'https:';\n const isProtocolRelative = url.protocol === '' || url.protocol == null;\n const protoIsSane =\n usesHttpsIfRequired || isProtocolRelative || location.protocol === 'http:';\n\n // It's possible there are multiple versions of the script and one failed\n // to load. Let's use the domain that succeeded.\n const scriptHasLoaded = !s.readyState || /loaded|complete/.test(s.readyState);\n\n if (pathIsEv1 && hasKnownHost && protoIsSane && scriptHasLoaded) {\n return url;\n }\n }\n }\n\n // If we can't find an instance of E-v1 matching\n return new Url(`${urlProto()}//${cdnFastWistiaNetHost()}/E-v1.js`);\n})();\n\n/**\n * @returns { string } string of the host\n */\nexport const eV1Host = () => {\n return eV1Url.host;\n};\n\n/**\n * @returns { string } string of the host with port\n */\nexport const eV1HostWithPort = () => {\n if (eV1Url.port) {\n return `${eV1Host()}:${eV1Url.port}`;\n }\n\n return eV1Host();\n};\n\n/**\n * @returns { string } string of the protocol\n */\nexport const eV1Protocol = () => {\n return eV1Url.protocol;\n};\n\nexport const mediaDataHost = (options = {}) => {\n // If embedHost is specified, just use that.\n if (options.embedHost) {\n return forceValidFastWistiaHost(options.embedHost);\n }\n\n // Try to match whatever host E-v1 is set to by default.\n return eV1HostWithPort();\n};\n\nexport const metricsHost = () => {\n const hostname = process.env.BASE_HOSTNAME ? process.env.BASE_HOSTNAME : process.env.METRICS_HOST;\n\n return `pipedream.${hostname}`;\n};\n\nconst VALID_PRODUCTION_HOSTS = ['wistia.net', 'wistia.com'];\n\n// We have some non-production hosts in here to allow connecting to the player via ngrok - which\n// is used for testing Live in VMA.\nexport const VALID_FASTLY_HOSTS = [\n ...VALID_PRODUCTION_HOSTS,\n 'wistia.mx', // ngrok hosts\n 'wistia.dev',\n 'wistia.tech',\n 'wistia.am',\n 'wistia.se',\n 'wistia.io', // development\n 'wistia.st', // staging\n];\n\nconst VALID_FASTLY_HOSTS_R = new RegExp(\n `(${VALID_FASTLY_HOSTS.map((h) => `\\\\.${h.replace('.', '\\\\.')}`).join('|')})$`,\n);\n\nexport const forceValidFastWistiaHost = (host) => {\n if (host && VALID_FASTLY_HOSTS_R.test(host)) {\n return host;\n }\n\n return eV1HostWithPort();\n};\n\n/**\n * Checks to see if the window location is a page that's hosted by wistia,\n * e.g., https://app.wistia.com, http://player.wistia.io, https://customer-name.wistia.com\n *\n * If so, return false.\n *\n * @returns boolean\n */\nexport const isEmbedOnACustomerPage = () => {\n return window.location.href.match(/^http(s)?:\\/\\/(\\S)*.wistia.(io|test|st|com)/gi) === null;\n};\n","import { runScripts } from 'utilities/script-utils.js';\n\nexport const getScriptTags = (htmlStr) => {\n return htmlStr.match(/<script.*?src[^>]*>\\s*<\\/script>|<script.*?>[\\s\\S]+?<\\/script>/gi) || [];\n};\n\nexport const scriptTagsToRunScriptsInput = (scriptTags) => {\n if (!scriptTags) {\n return [];\n }\n if (!(scriptTags instanceof Array)) {\n scriptTags = getScriptTags(scriptTags);\n }\n const hashes = [];\n for (let i = 0; i < scriptTags.length; i++) {\n let scriptTag = scriptTags[i];\n let hash = {};\n let matches = scriptTag.match(/<script.*?>/i);\n if (matches) {\n matches = matches[0].match(/src=\"([^\"]+)\"/i);\n if (matches) {\n hash.src = matches[1];\n hash.async = /async/i.test(scriptTag.replace(hash.src, ''));\n }\n }\n if (!matches) {\n matches = scriptTag.match(/<script>([\\s\\S]+?)<\\/script>/i);\n if (matches) {\n let src = matches[1];\n hash.fn = function () {\n // eslint-disable-next-line no-eval\n return eval(src);\n };\n }\n }\n hashes.push(hash);\n }\n return hashes;\n};\n\nexport const execScriptTags = (scriptTags, callback) => {\n if (!scriptTags) {\n return null;\n }\n const hashes = scriptTagsToRunScriptsInput(scriptTags);\n return runScripts(hashes).then(callback);\n};\n\nexport const removeScriptTags = (htmlStr) => {\n return htmlStr.replace(/<script.*?src[^>]*>\\s*<\\/script>|<script>[\\s\\S]+?<\\/script>/g, '');\n};\n","import merge from 'lodash.merge';\nimport cloneDeep from 'lodash.clonedeep';\nimport { cast } from '../../../utilities/obj.js';\nimport type { MediaData } from '../../../types/player-api-types.ts';\nimport type { EmbedOptions } from '../../../types/EmbedOptions.ts';\n\ninterface SourceEmbedOptions {\n domOptions?: EmbedOptions;\n iframeOptions?: EmbedOptions;\n mediaDataOptions?: EmbedOptions;\n wistiaWindowOptions?: EmbedOptions;\n}\n\nexport class PlayerDataHandler {\n // Embed options set after initialization which override the embed options\n // gathered from the source data\n #embedOptionOverrides: EmbedOptions = {};\n\n // Merged embed options gathered from source data\n #embedOptions: EmbedOptions = {};\n\n // Merged media data gathered from source data\n #mediaData: MediaData = {};\n\n // Source data which is used to create the final embed options\n readonly #sourceEmbedOptions: SourceEmbedOptions = {\n domOptions: {} as EmbedOptions,\n iframeOptions: {} as EmbedOptions,\n mediaDataOptions: {} as EmbedOptions,\n wistiaWindowOptions: {} as EmbedOptions,\n };\n\n // Source data which is used to create the final media data\n #sourceMediaData: MediaData = {};\n\n /**\n * Returns the final embed options which are a merge of all the source data and the overrides\n * @returns {EmbedOptions}\n * @readonly\n */\n public get embedOptions(): EmbedOptions {\n return this.#embedOptions;\n }\n\n /**\n * Returns the final media data which is a merge of all the source data\n * @returns {MediaData}\n * @readonly\n */\n public get mediaData(): MediaData {\n // Our embed options can be overridden after our initial source data fetches\n // Make sure the embed options within the media data are up to date\n this.#mediaData.embedOptions = this.#embedOptions;\n return this.#mediaData;\n }\n\n /**\n * Sets the source data for the embed options set on the <wistia-player> DOM element\n * @param {EmbedOptions} data\n * @returns {void}\n */\n public setDomEmbedOptionSource(data: EmbedOptions): void {\n this.#sourceEmbedOptions.domOptions = data;\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Sets the source data for the embed options from an iframe's url search params\n * @returns {void}\n */\n public setIframeEmbedOptionSource(data: EmbedOptions): void {\n this.#sourceEmbedOptions.iframeOptions = data;\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Sets the source data for the media data\n * @param {MediaData} data\n * @returns {void}\n */\n public setMediaDataSource(data: MediaData): void {\n this.#sourceMediaData = data;\n this.#mediaData = cast(cloneDeep(this.#sourceMediaData)) as MediaData;\n // Sometimes the hashedId has no alpha characters, so cast() will convert it to a number.\n // Our api expects hashedId to be a string, so we need to convert it back.\n if (this.#mediaData.hashedId !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#mediaData.hashedId = this.#mediaData.hashedId.toString();\n }\n\n this.#sourceEmbedOptions.mediaDataOptions = cloneDeep(this.#mediaData.embedOptions) ?? {};\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Sets the source data for the embed options set on the window via wistiaOptions\n * @param {EmbedOptions} data\n * @returns {void}\n */\n public setWistiaWindowEmbedOptionSource(data: EmbedOptions): void {\n this.#sourceEmbedOptions.wistiaWindowOptions = data;\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Updates the embed option overrides which will be merged with the source embed option data\n * This merge can happen more frequently than our finite source data sets, which is why it's separate.\n * That way we don't have to re-merge the source data every time we update the overrides.\n * @param {EmbedOptions} data\n * @returns {void}\n */\n public updateEmbedOptionOverrides(data: EmbedOptions): void {\n this.#embedOptionOverrides = merge(this.#embedOptionOverrides, data);\n this.#embedOptions = merge(this.#embedOptions, this.#embedOptionOverrides);\n }\n\n /**\n * Merge the source embed options together to create a single source of truth of embed options\n * @private\n * @returns {void}\n */\n #updatePlayerEmbedOptions(): void {\n const { mediaDataOptions, wistiaWindowOptions, domOptions, iframeOptions } =\n this.#sourceEmbedOptions;\n\n // Merge the embed options together to create a single source of truth of embed options\n this.#embedOptions = cast(\n merge(\n {},\n mediaDataOptions ?? {},\n wistiaWindowOptions ?? {},\n domOptions ?? {},\n iframeOptions ?? {},\n this.#embedOptionOverrides,\n ),\n ) as EmbedOptions;\n\n // Make sure the embed options within the media data are up to date\n this.#mediaData.embedOptions = this.#embedOptions;\n }\n}\n","\"use strict\";\n/**\n * @description A module for parsing ISO8601 durations\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toSeconds = exports.end = exports.parse = exports.pattern = void 0;\n/**\n * The pattern used for parsing ISO8601 duration (PnYnMnWnDTnHnMnS).\n */\n// PnYnMnWnDTnHnMnS\nvar numbers = \"\\\\d+\";\nvar fractionalNumbers = \"\".concat(numbers, \"(?:[\\\\.,]\").concat(numbers, \")?\");\nvar datePattern = \"(\".concat(numbers, \"Y)?(\").concat(numbers, \"M)?(\").concat(numbers, \"W)?(\").concat(numbers, \"D)?\");\nvar timePattern = \"T(\".concat(fractionalNumbers, \"H)?(\").concat(fractionalNumbers, \"M)?(\").concat(fractionalNumbers, \"S)?\");\nvar iso8601 = \"P(?:\".concat(datePattern, \"(?:\").concat(timePattern, \")?)\");\nvar objMap = [\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n];\nvar defaultDuration = Object.freeze({\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n});\n/**\n * The ISO8601 regex for matching / testing durations\n */\nexports.pattern = new RegExp(iso8601);\n/** Parse PnYnMnDTnHnMnS format to object */\nvar parse = function (durationString) {\n var matches = durationString.replace(/,/g, \".\").match(exports.pattern);\n if (!matches) {\n throw new RangeError(\"invalid duration: \".concat(durationString));\n }\n // Slice away first entry in match-array (the input string)\n var slicedMatches = matches.slice(1);\n if (slicedMatches.filter(function (v) { return v != null; }).length === 0) {\n throw new RangeError(\"invalid duration: \".concat(durationString));\n }\n // Check only one fraction is used\n if (slicedMatches.filter(function (v) { return /\\./.test(v || \"\"); }).length > 1) {\n throw new RangeError(\"only the smallest unit can be fractional\");\n }\n return slicedMatches.reduce(function (prev, next, idx) {\n prev[objMap[idx]] = parseFloat(next || \"0\") || 0;\n return prev;\n }, {});\n};\nexports.parse = parse;\n/** Convert ISO8601 duration object to an end Date. */\nvar end = function (durationInput, startDate) {\n if (startDate === void 0) { startDate = new Date(); }\n var duration = Object.assign({}, defaultDuration, durationInput);\n // Create two equal timestamps, add duration to 'then' and return time difference\n var timestamp = startDate.getTime();\n var then = new Date(timestamp);\n then.setFullYear(then.getFullYear() + duration.years);\n then.setMonth(then.getMonth() + duration.months);\n then.setDate(then.getDate() + duration.days);\n // set time as milliseconds to get fractions working for minutes/hours\n var hoursInMs = duration.hours * 3600 * 1000;\n var minutesInMs = duration.minutes * 60 * 1000;\n then.setMilliseconds(then.getMilliseconds() + duration.seconds * 1000 + hoursInMs + minutesInMs);\n // Special case weeks\n then.setDate(then.getDate() + duration.weeks * 7);\n return then;\n};\nexports.end = end;\n/** Convert ISO8601 duration object to seconds */\nvar toSeconds = function (durationInput, startDate) {\n if (startDate === void 0) { startDate = new Date(); }\n var duration = Object.assign({}, defaultDuration, durationInput);\n var timestamp = startDate.getTime();\n var now = new Date(timestamp);\n var then = (0, exports.end)(duration, now);\n // Account for timezone offset between start and end date\n var tzStart = startDate.getTimezoneOffset();\n var tzEnd = then.getTimezoneOffset();\n var tzOffsetSeconds = (tzStart - tzEnd) * 60;\n var seconds = (then.getTime() - now.getTime()) / 1000;\n return seconds + tzOffsetSeconds;\n};\nexports.toSeconds = toSeconds;\nexports.default = {\n end: exports.end,\n toSeconds: exports.toSeconds,\n pattern: exports.pattern,\n parse: exports.parse,\n};\n","/* eslint no-console: \"off\" */\n/* oxlint-disable no-console */\n/*\n * wlog\n *\n * wlog seeks to give us flexibility and power.\n *\n * Basic usage:\n *\n * import {Logger} from 'utilities/wlog.js';\n * const logger = new Logger();\n *\n * logger.error(exception); // this will print the message and stack nicely\n * logger.error('an error');\n * logger.info('informational');\n * logger.warn('a warning');\n * logger.debug('really high volume stuff');\n *\n * You can change the level:\n *\n * logger.setLevel(LOG_LEVELS.INFO);\n *\n * You can change grep (include matching) and grepv (exclude matching):\n *\n * logger.setGrep('include only lines matching this text');\n * logger.setGrepv('exclude any lines matching this text');\n *\n * If you want loggers to share context--for example, all logs for the player\n * should send to the same first1000LogLines and last1000LogLines caches.\n *\n * Wistia.wlog = Wistia.wlog || {};\n * const logger = new Logger(Wistia.wlog);\n *\n * A more advanced case would be to return the context in a function. This is\n * helpful if your logger is initialized/configured in one point, but used in\n * others that don't need to know about that configuration. In fact, this is\n * how the `wlog` constant is setup at the bottom of this file.\n *\n * We often want to have a global logger, but prefix certain portions of it.\n *\n * const myLogger = logger.getPrefixedFunctions('my prefix');\n * myLogger.info('aha'); // outputs \"my prefix aha\"\n *\n * A prefix can be a string or an array of strings. It can also be a function\n * that returns a string or an array of strings.\n *\n * In the above example, `myLogger` is a simple Object with defined logging\n * functions and fixed `this` context:\n *\n * {\n * error: (...messages) => { ... },\n * warn: (...messages) => { ... },\n * info: (...messages) => { ... },\n * etc...\n * }\n *\n * So it can also be used as a mix-in for other objects, e.g.\n *\n * import {Logger} from 'utilities/wlog.js';\n * class MyThing {\n * constructor () {\n * this.logger = new Logger().getPrefixedFunctions(this.logPrefix);\n * for (let k in this.logger) {\n * this[k] = this.logger[k];\n * }\n * this.info('my mixed-in logger is setup!');\n * }\n *\n * logPrefix = () => {\n * return [this.id, this.variable];\n * }\n * }\n */\nimport { globalTrigger } from 'utilities/globalBindAndTrigger.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport const ERROR = 0;\nexport const WARNING = 1;\nexport const NOTICE = 2;\nexport const INFO = 3;\nexport const DEBUG = 4;\nexport const LOG_LEVELS = {\n ERROR,\n WARNING,\n NOTICE,\n INFO,\n DEBUG,\n error: ERROR,\n warning: WARNING,\n notice: NOTICE,\n info: INFO,\n debug: DEBUG,\n};\n\nconst NOOP = function () {};\n\nexport const Logger = function (ctx) {\n const self = this;\n\n if (ctx == null) {\n ctx = {};\n }\n\n const construct = function () {\n self.ctx = ctx;\n if (!self.ctx.initializedAt) {\n self.reset();\n }\n };\n\n self.error = (...messages) => {\n return self.log(ERROR, messages);\n };\n self.warn = (...messages) => {\n return self.log(WARNING, messages);\n };\n self.notice = (...messages) => {\n return self.log(WARNING, messages);\n };\n self.info = (...messages) => {\n return self.log(INFO, messages);\n };\n self.debug = (...messages) => {\n return self.log(DEBUG, messages);\n };\n\n construct();\n\n return self;\n};\n\nconst lproto = Logger.prototype;\n\nlproto.reset = function () {\n this.ctx.level = ERROR;\n this.ctx.grep = null;\n this.ctx.grepv = null;\n this.ctx.first1000LogLines = [];\n this.ctx.last1000LogLines = [];\n this.ctx.initializedAt = new Date().getTime();\n};\n\nlproto.setLevel = function (level) {\n const logFunc = this.logFunc(INFO);\n if (LOG_LEVELS[level] != null) {\n this.ctx.level = LOG_LEVELS[level];\n logFunc(`Log level set to \"${level}\" (${LOG_LEVELS[level]})`);\n } else {\n logFunc(`Unknown log level \"${level}\"`);\n }\n};\n\nlproto.setGrep = function (grep) {\n this.ctx.grep = grep;\n};\n\nlproto.setGrepv = function (grepv) {\n this.ctx.grepv = grepv;\n};\n\nlproto.first1000LogLines = function () {\n return this.ctx.first1000LogLines;\n};\n\nlproto.last1000LogLines = function () {\n return this.ctx.last1000LogLines;\n};\n\nlproto.matchedGrep = function (messages) {\n let matched = false;\n if (this.ctx.grep || this.ctx.grepv) {\n let messageStrings = [];\n for (let i = 0; i < messages.length; i++) {\n try {\n let message = messages[i];\n messageStrings.push(message.toString && message.toString());\n } catch (e) {\n messageStrings.push('');\n }\n }\n let fullLine = messageStrings.join(' ');\n let matchesGrep = !this.ctx.grep || fullLine.match(this.ctx.grep);\n let matchesGrepv = !this.ctx.grepv || !fullLine.match(this.ctx.grepv);\n matched = matchesGrep && matchesGrepv;\n } else {\n matched = true;\n }\n return matched;\n};\n\nlproto.now = function () {\n // IE9 has window.performance, but not performance.now\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now().toFixed(3);\n }\n if (Date.now) {\n return Date.now() - this.ctx.initializedAt;\n }\n return new Date().getTime() - this.ctx.initializedAt;\n};\n\nlproto.messagesToLogLine = function (level, time, messages) {\n let logLine = [level, time];\n logLine = logLine.concat(messages);\n let cappedLine;\n try {\n cappedLine = logLine.join(' ') || '';\n if (cappedLine.length > 200) {\n cappedLine = cappedLine.slice(0, 200);\n }\n } catch (e1) {\n cappedLine = 'could not serialize';\n }\n return cappedLine;\n};\n\nlproto.persistLine = function (logLine) {\n if (this.ctx.first1000LogLines.length < 1000) {\n this.ctx.first1000LogLines.push(logLine);\n } else {\n if (this.ctx.last1000LogLines.length >= 1000) {\n this.ctx.last1000LogLines.shift();\n }\n this.ctx.last1000LogLines.push(logLine);\n }\n};\n\nlproto.log = function (level, messages) {\n const withinLevel = level <= this.ctx.level;\n const notDebug = level < DEBUG;\n const matched = (withinLevel || notDebug) && this.matchedGrep(messages);\n\n if (level === ERROR) {\n globalTrigger('problem', {\n type: 'error-logged',\n data: { messages },\n });\n }\n\n let now;\n if (matched && (withinLevel || notDebug)) {\n // This is initialized conditionally as a micro-optimization. We call\n // this function _a lot_, and new Date().getTime() (used on older\n // browsers) is expensive.\n now = this.now();\n }\n\n // Don't store \"debug\" lines, but keep the first and last 1000 lines so we\n // can send it with problem reports.\n if (notDebug && matched) {\n const logLine = this.messagesToLogLine(level, now, messages);\n this.persistLine(logLine);\n }\n\n // Output that log to the console! Minus info that is distracting like the\n // timestamp and log level.\n if (withinLevel && matched) {\n const logFunc = this.logFunc(level);\n let e;\n if (messages.length === 1 && (e = messages[0]) instanceof Error) {\n logFunc(e.message);\n if (e.stack) {\n logFunc(e.stack);\n }\n } else {\n logFunc(...messages);\n }\n }\n};\n\nconst logError = function (...messages) {\n console.error.apply(console, messages);\n};\n\nconst logWarn = function (...messages) {\n console.warn.apply(console, messages);\n};\n\nconst logInfo = function (...messages) {\n console.info.apply(console, messages);\n};\n\nconst logDebug = function (...messages) {\n console.debug.apply(console, messages);\n};\n\nconst logLog = function (messages) {\n console.log.apply(console, messages);\n};\n\nlproto.logFunc = function (level) {\n if (level == null) {\n level = this.level;\n }\n\n if (!console) {\n return NOOP;\n }\n\n let func;\n if (level === ERROR) {\n func = logError;\n } else if (level === WARNING) {\n func = logWarn;\n } else if (level === INFO) {\n func = logInfo;\n } else if (level === DEBUG) {\n func = logDebug;\n }\n\n if (!func) {\n func = logLog;\n }\n\n if (typeof func !== 'function') {\n // This should pretty much never happen, but if it does, we could only\n // tell by checking the value of logger.noConsoleLog.\n this.noConsoleLog = true;\n func = NOOP;\n }\n\n return func;\n};\n\nlproto.maybePrefix = function (prefix, messages) {\n if (prefix) {\n // prefix can be a fixed value, or a function that returns a value.\n if (typeof prefix === 'function') {\n try {\n prefix = prefix();\n } catch (e) {\n prefix = `prefix err \"${e.message}\"`;\n }\n }\n\n if (prefix instanceof Array) {\n return prefix.concat(messages);\n }\n return [prefix].concat(messages);\n }\n return messages;\n};\n\n// Return a hash of functions so we can easily setup prefixes and mix in the\n// results.\nlproto.getPrefixedFunctions = function (prefix) {\n return {\n log: (...messages) => {\n return this.log(ERROR, this.maybePrefix(prefix, messages));\n },\n error: (...messages) => {\n return this.log(ERROR, this.maybePrefix(prefix, messages));\n },\n warn: (...messages) => {\n return this.log(WARNING, this.maybePrefix(prefix, messages));\n },\n notice: (...messages) => {\n return this.log(WARNING, this.maybePrefix(prefix, messages));\n },\n info: (...messages) => {\n return this.log(INFO, this.maybePrefix(prefix, messages));\n },\n debug: (...messages) => {\n return this.log(DEBUG, this.maybePrefix(prefix, messages));\n },\n };\n};\n\n// This should work in either the browser or node.\nif (Wistia && Wistia.wlogCtx == null) {\n Wistia.wlogCtx = {};\n}\nexport const wlog = new Logger(Wistia.wlogCtx);\n","import { h, JSX, Ref } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { BigPlayButtonSVG } from './svgs/BigPlayButtonSVG.tsx';\nimport { getTranslation } from '../../../../../shared/translations.js';\nimport { Color } from '../../../../../../utilities/color.js';\nimport { unescapeHtml } from '../../../../../../utilities/core.js';\nimport { cachedDetect } from '../../../../../../utilities/detect.js';\nimport { flexibleDuration } from '../../../../../../utilities/duration.ts';\nimport { interNumbersSemiBold } from '../../../../../../utilities/interFontFamily.js';\nimport {\n adjustColorForProperContrast,\n getVideoPlayerIconColor,\n} from '../../../../../../utilities/color-utils.ts';\n\nconst detect = cachedDetect() as { edge: boolean };\n\nexport const BASE_BUTTON_WIDTH = 125;\nexport const BASE_BUTTON_HEIGHT = 80;\n\nconst BASE_FONT_SIZE = 18;\nconst BASE_LINE_HEIGHT = 30;\n\nconst ALPHA_MIX_BLEND_MODE = 0.7;\nconst ALPHA_NO_MIX_BLEND_MODE = 0.85;\n\ninterface BigPlayButtonProps {\n backgroundGradientCss?: string | null;\n baseHeight?: number;\n baseWidth?: number;\n borderRadius: number;\n buttonTabIndex: number;\n color?: string;\n controlBarDistance?: number;\n duration: number;\n elemRef?: Ref<HTMLDivElement>;\n hasContrastIcons: boolean;\n isLiveMedia: boolean;\n isLoading?: boolean;\n isOpaque?: boolean;\n isVisible: boolean;\n leftNudgeFraction?: number;\n noMixBlendMode?: boolean;\n onClick?: () => void;\n playerLanguage: {\n code: string;\n };\n scale: number;\n showBpbTime: boolean;\n topNudgeFraction?: number;\n videoName: string;\n videoWidth: number;\n}\n\nexport const BigPlayButton = ({\n backgroundGradientCss,\n baseHeight = BASE_BUTTON_HEIGHT,\n baseWidth = BASE_BUTTON_WIDTH,\n borderRadius,\n buttonTabIndex,\n color,\n controlBarDistance = 0,\n duration,\n elemRef,\n hasContrastIcons,\n isLiveMedia,\n isLoading = false,\n isOpaque = false,\n isVisible,\n leftNudgeFraction = 0,\n noMixBlendMode = false,\n onClick,\n playerLanguage,\n scale,\n showBpbTime,\n topNudgeFraction = 0,\n videoName,\n videoWidth,\n}: BigPlayButtonProps): JSX.Element => {\n const [isFocused, setIsFocused] = useState(false);\n\n const scaledWidth = baseWidth * scale;\n const scaledHeight = baseHeight * scale;\n\n const translate = (key) => getTranslation(playerLanguage.code, `PLAY_BUTTON_${key}`) as string;\n const unescapedVideoName = unescapeHtml(videoName) as string;\n const ariaLabel = `${translate('TITLE_WHEN_NOT_PLAYING')}: ${unescapedVideoName}`;\n\n const wrapperStyle = {\n borderRadius: `${borderRadius}px`,\n display: isVisible ? 'block' : 'none',\n left: `calc(50% + ${(leftNudgeFraction || 0) * 100}%)`,\n marginLeft: `-${scaledWidth / 2}px`,\n marginTop: `-${scaledHeight / 2}px`,\n overflow: 'hidden',\n position: 'absolute',\n top: `calc(50% + ${(topNudgeFraction || 0) * 100}% - ${controlBarDistance}px)`,\n boxShadow: isOpaque ? '0 3px 5px rgba(0,0,0,0.3)' : undefined,\n };\n\n const shouldMixBlendMode = !detect.edge && !noMixBlendMode;\n\n const blendColor = new Color(color ?? '#000').alpha(1) as Color;\n const blendStyle = {\n background: blendColor.toRgba(),\n display: shouldMixBlendMode ? 'block' : 'none',\n left: 0,\n height: `${scaledHeight}px`,\n mixBlendMode: 'darken',\n position: 'absolute',\n top: 0,\n width: `${scaledWidth}px`,\n };\n\n const shouldUseGradient = backgroundGradientCss != null;\n const playerColorObj = new Color(color ?? '#000000');\n let hoverButtonColor = adjustColorForProperContrast(playerColorObj, playerColorObj, 'nonText');\n const overlayColor = isFocused ? hoverButtonColor : playerColorObj;\n const overlayAlphaValue = shouldMixBlendMode ? ALPHA_MIX_BLEND_MODE : ALPHA_NO_MIX_BLEND_MODE;\n const overlayColorObj = new Color(overlayColor);\n const playerIconColor = getVideoPlayerIconColor(\n playerColorObj,\n hasContrastIcons,\n shouldUseGradient,\n );\n\n let hoverIconColor = adjustColorForProperContrast(\n playerIconColor,\n hoverButtonColor,\n // Technically the nonText shape will suffice for contrast, but we should use the paragraphText shape to make sure this color is the same as the playbar button icon color on hover\n 'paragraphText',\n );\n\n overlayColorObj.alpha(isOpaque ? 1 : overlayAlphaValue);\n\n const gradientStyles = shouldUseGradient\n ? {\n background: backgroundGradientCss,\n backgroundSize: `${videoWidth}px 100%`,\n backgroundPositionX: 'center',\n }\n : {};\n\n if (shouldUseGradient) {\n hoverIconColor = '#ffffff';\n hoverButtonColor = 'rgba(0,0,0,0.4)';\n }\n\n const overlayStyle = {\n backgroundColor: overlayColorObj.toRgba(),\n ...gradientStyles,\n height: `${scaledHeight}px`,\n left: 0,\n position: 'absolute',\n top: 0,\n transition: 'background-color 150ms',\n width: `${scaledWidth}px`,\n };\n\n const buttonStyle = {\n backgroundColor: 'transparent',\n border: 0,\n color: isFocused ? hoverIconColor : playerIconColor,\n cursor: 'pointer',\n height: `${scaledHeight}px`,\n boxShadow: 'none',\n width: `${scaledWidth}px`,\n };\n\n const shouldDisplayDuration = showBpbTime && !isLiveMedia;\n const timeStyle = {\n background: 'rgba(0,0,0,.4)',\n color: '#fff',\n fontFamily: interNumbersSemiBold,\n fontSize: `${BASE_FONT_SIZE * scale}px`,\n lineHeight: `${BASE_LINE_HEIGHT * scale}px`,\n pointerEvents: 'none',\n textAlign: 'center',\n };\n\n const handleIsFocused = () => {\n setIsFocused(true);\n };\n\n const handleNotFocused = () => {\n setIsFocused(false);\n };\n\n return (\n <div class=\"w-bpb-wrapper w-css-reset w-css-reset-tree\" ref={elemRef} style={wrapperStyle}>\n <button\n class=\"w-big-play-button w-css-reset-button-important w-vulcan-v2-button\"\n style={buttonStyle}\n onMouseEnter={handleIsFocused}\n onMouseLeave={handleNotFocused}\n onFocusIn={handleIsFocused}\n onFocusOut={handleNotFocused}\n onClick={onClick}\n aria-label={ariaLabel}\n tabIndex={buttonTabIndex}\n type=\"button\"\n >\n <div style={blendStyle} />\n <div style={overlayStyle} />\n <BigPlayButtonSVG\n width={baseWidth}\n height={baseHeight}\n scale={scale}\n isLoading={isLoading}\n overrideFillColor={isFocused ? hoverIconColor : playerIconColor}\n />\n </button>\n {shouldDisplayDuration ? (\n <div class=\"w-bpb-time\" style={timeStyle}>\n {flexibleDuration(duration)}\n </div>\n ) : null}\n </div>\n );\n};\n","import { eV1Protocol, eV1HostWithPort, TAGGED_VERSION, CURRENT_SHA } from './hosts.js';\nimport { reportError } from './sentryUtils.ts';\nimport { countMetric } from './simpleMetrics.js';\n\nconst MAX_RETRIES = 3;\n\nconst importWithRetry = async (\n baseUrl: string,\n retries = MAX_RETRIES,\n delay = 200,\n attempt = 0,\n): Promise<unknown> => {\n // Append a cache-busting query parameter to avoid Safari's caching of failed imports\n const url =\n attempt === 0 ? baseUrl : `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}retry=${attempt}`;\n try {\n const result: unknown = await import(/* webpackIgnore: true */ url);\n if (attempt > 0) {\n countMetric('dynamic-import/retry-success', 1, { attempt: String(attempt), url: baseUrl });\n }\n return result;\n } catch (error) {\n if (retries <= 0) throw error;\n await new Promise<void>((resolve) => {\n setTimeout(resolve, delay);\n });\n return importWithRetry(baseUrl, retries - 1, delay, attempt + 1);\n }\n};\n\nexport type DynamicImportOptions = {\n host?: string;\n mediaData?: boolean;\n};\nexport const dynamicImport = async (\n filePath: string,\n options: DynamicImportOptions = {},\n): Promise<unknown> => {\n const host: string =\n Object.hasOwn(options, 'host') && options.host != null ? options.host : eV1HostWithPort();\n\n const taggedVersion: string = TAGGED_VERSION;\n\n const currentSha: string = CURRENT_SHA;\n\n const getVersionSuffix = (): string => {\n if (taggedVersion !== '' && taggedVersion.length > 0 && options.mediaData !== true) {\n return `@${taggedVersion}`;\n }\n // If there is no tagged version, we can fall back to the current SHA.\n // This mechanism keeps a cached script from fetching a newer, mismatched version of an imported bundle.\n if (currentSha !== '' && currentSha.length > 0 && options.mediaData !== true) {\n return `@${currentSha}`;\n }\n return '';\n };\n\n const url = `${eV1Protocol()}//${host}/${filePath}${getVersionSuffix()}`;\n\n try {\n return await importWithRetry(url);\n } catch (error) {\n const reportedError = error instanceof Error ? error : new Error(String(error));\n reportError('dynamicImport', reportedError, {\n importUrl: url,\n });\n countMetric('dynamic-import/failure-after-retry', 1, { attempt: String(MAX_RETRIES), url });\n throw error;\n }\n};\n","import { clone, merge, select, except, only, sort } from 'utilities/obj.js';\nimport { Url } from 'utilities/url.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport * as Hosts from 'utilities/hosts.js';\nimport { wlog } from 'utilities/wlog.js';\nimport { appHostname } from '../appHostname.js';\n\nconst aps = Array.prototype.slice;\n\nexport const FAILED = -1;\nexport const QUEUED = 0;\nexport const PROCESSING = 1;\nexport const READY = 2;\n\n// Advanced sorting and filtering so we can be expressive and concise when\n// choosing assets.\nconst FILTER_KEYS = ['select', 'sortFn', 'sortBy', 'unique'];\nexport const filter = (assets, options = {}) => {\n // there was an issues in the uploader + notPlayablePlayer flow where we\n // occasionally asked to filter assets when we didn't have any. If we\n // don't have assets just gtfo\n if (!assets) {\n return [];\n }\n // We started out passing the whole mediaData object here, but we only\n // operate on assets, and that's more convenient for filtering result sets\n // multiple times. This if continues to allow mediaData to be passed in.\n if (assets.assets) {\n assets = assets.assets;\n }\n\n // If qualityMin/qualityMax are specified, filtered the assets with those\n // before doing anything else. That's because those aren't set directly on\n // the assets; rather, it is a computed value for each asset.\n if (options.qualityMin != null || options.qualityMax != null) {\n assets = withinQualityRange(assets, options.qualityMin, options.qualityMax);\n options = except(options, ['qualityMin', 'qualityMax']);\n }\n\n const filterOptions = only(options, FILTER_KEYS);\n const selectFn = filterOptions.select || except(options, FILTER_KEYS);\n\n if (selectFn) {\n filterOptions.select = selectFn;\n }\n\n let result = filterOptions.select ? select(assets, filterOptions.select) : clone(assets);\n\n if (filterOptions.sortFn || filterOptions.sortBy) {\n result = sort(result, filterOptions.sortFn || filterOptions.sortBy);\n }\n\n // If \"unique\" is given, it means we only want the first asset with that\n // property. We can leverage sortBy and select to meaningfully order the\n // assets, essentially letting us choose which one is unique.\n if (filterOptions.unique) {\n const uniqHash = {};\n for (let i = 0; i < result.length; i++) {\n let asset = result[i];\n let bucket = asset[`${filterOptions.unique}`] || '__undefined__';\n if (!uniqHash[bucket]) {\n uniqHash[bucket] = asset;\n }\n }\n result = [];\n for (let k in uniqHash) {\n result.push(uniqHash[k]);\n }\n }\n\n return result;\n};\n\nexport const one = (assets, options) => {\n return filter(assets, options)[0] || null;\n};\n\nexport const readyPublicMp3s = (assets) => {\n return filter(assets, {\n ext: 'mp3',\n status: READY,\n public: true,\n });\n};\n\nexport const readyPublicMp4s = (assets) => {\n return filter(assets, {\n container: 'mp4',\n status: READY,\n public: true,\n });\n};\n\nexport const readyPublicM3u8s = (assets) => {\n return filter(assets, {\n container: 'm3u8',\n status: READY,\n public: true,\n });\n};\n\nexport const filterOver400 = (assets) => {\n const result = [];\n for (let i = 0; i < assets.length; i++) {\n let a = assets[i];\n let vbitrateInRange =\n a.opt_vbitrate != null && a.opt_vbitrate >= 500 && a.opt_vbitrate <= 100000;\n let widthInRange = a.width != null && a.width > 400;\n if (vbitrateInRange || widthInRange) {\n result.push(a);\n }\n }\n return result;\n};\n\nexport const readyPublicOver400 = (assets) => {\n return filterOver400(\n filter(assets, {\n container: /mp4/,\n public: true,\n status: READY,\n }),\n );\n};\n\nexport const nonfailedPublicOver400 = (assets) => {\n return filterOver400(\n filter(assets, {\n container: /mp4/,\n public: true,\n status: (s) => {\n return s !== FAILED;\n },\n }),\n );\n};\n\nexport const withinQualityRange = (assets, qualityMin = 100, qualityMax = 10000) => {\n return filter(assets, {\n select: (asset) => {\n // quality is based on width * height, and given back in a format like\n // 720, 1080, 3840, etc.\n const quality = numericSizeSnapped(asset.width, asset.height);\n return qualityMin <= quality && quality <= qualityMax;\n },\n });\n};\n\nexport const numericSizeSnapped = (width, height) => {\n if (height > width) {\n // let's mathematically rotate vertical videos when determining their\n // snapped size.\n const tmpWidth = width;\n width = height;\n height = tmpWidth;\n }\n\n const aspectRatio = width / height;\n\n // If given a square video, expand the width so we'll name it as if\n // it's 16:9 with the given height.\n if (aspectRatio < 1.05) {\n width = height * (16 / 9);\n }\n\n if (width >= 3740) {\n return 2160;\n }\n if (width >= 3100) {\n return 1800;\n }\n if (width >= 2460) {\n return 1440;\n }\n if (width >= 1820) {\n return 1080;\n }\n if (width >= 1180) {\n return 720;\n }\n if (width >= 860) {\n return 540;\n }\n if (width >= 540) {\n return 360;\n }\n\n return height;\n};\n\n// Expect that assets are a subset of assets that we are allowed to select.\n// This function does not have any special logic to filter only selectable\n// assets.\nexport const findClosestAssetByQuality = (assets, quality) => {\n let height;\n if (quality === '4k') {\n height = 2160;\n } else {\n // '360p' yields 360, '1080i' yields 1080, etc.\n height = parseInt(quality, 10);\n }\n\n const exactMatch = withinQualityRange(assets, height, height)[0];\n if (exactMatch) {\n return exactMatch;\n }\n\n const surroundingAssets = nearestOutsideRange(assets, height, height);\n if (surroundingAssets.length === 1) {\n return surroundingAssets[0];\n }\n const aspect = videoAspect(assets);\n const width = Math.round(aspect * height);\n const [lowerAsset, upperAsset] = surroundingAssets;\n const lowerDiff = Math.abs(lowerAsset.width - width);\n const upperDiff = Math.abs(upperAsset.width - width);\n if (lowerDiff < upperDiff) {\n return lowerAsset;\n }\n return upperAsset;\n};\n\nexport const still = (assets) => {\n let stillAsset = one(assets, {\n type: /^still_image$/,\n sortBy: 'created_at desc',\n });\n\n // If no still is associated, check for channel artwork\n if (!stillAsset) {\n stillAsset = channelArtworkStill(assets);\n }\n\n // If no still or channel art is associated, generate from the first video asset\n // we can find.\n if (!stillAsset) {\n stillAsset = one(assets, { container: /mp4/, sortBy: 'width desc' });\n }\n\n return stillAsset;\n};\n\nexport const channelArtworkStill = (assets) => {\n return one(assets, {\n type: /^channel_still_image$/,\n sortBy: 'created_at desc',\n });\n};\n\nexport const thumbnailAssets = (assets, options) => {\n if (options.stillUrl) {\n return [{ height: null, url: options.stillUrl, width: null }];\n }\n\n const stillAsset = still(assets);\n if (options.instantHlsStillAsset != null && (!stillAsset || /mp4/.test(stillAsset.container))) {\n return [options.instantHlsStillAsset];\n }\n\n if (options.originalFileStillAsset != null && (!stillAsset || /mp4/.test(stillAsset.container))) {\n return [options.originalFileStillAsset];\n }\n\n if (!stillAsset) {\n return [];\n }\n\n const stillAspect = stillAsset.width / stillAsset.height;\n return [320, 640, 960, 1280, 1920, 3840].map((width) => {\n const height = Math.round(width / stillAspect);\n const url = stillUrl(assets, { videoWidth: width, videoHeight: height, playButton: false });\n return { height, url, width };\n });\n};\n\nconst FAST_HOSTNAME = appHostname('fast');\nexport const stillUrl = (assets, options = {}) => {\n const stillAsset = still(assets);\n\n // @TODO should this throw an error instead?\n if (!stillAsset) return;\n\n if (stillAsset.status !== READY) {\n // occasionally we might get a stillAsset that isn't ready, but its\n // channel art is for an audio! fallback to that first!\n const channelArtwork = channelArtworkStill();\n if (channelArtwork && channelArtwork.status === READY) {\n return channelArtwork.url;\n }\n\n return `//${FAST_HOSTNAME}/assets/images/blank.gif`;\n }\n\n options = merge(\n {\n aspect: stillAsset.width / stillAsset.height || 1, // default to square if we can't determine the aspect\n stillUrl: stillAsset.url,\n playButton: false,\n playerColor: options.playerColor || '636155',\n videoWidth: stillAsset.width || 640,\n videoHeight: stillAsset.height || 360,\n stillSnap: true,\n },\n options,\n );\n\n let stillWidth = options.videoWidth;\n let stillHeight = options.videoHeight;\n const result = new Url(options.stillUrl);\n\n if (options.retina) {\n result.params.image_play_button_size = '2x';\n stillWidth *= 2;\n stillHeight *= 2;\n }\n\n // By default, we snap to a pre-generated still size\n if (options.stillSnap) {\n stillWidth = getStillWidth({\n videoWidth: stillWidth,\n stillAssetWidth: stillAsset.width || 640, // there have been times where we fail to have proper width returned\n });\n\n stillHeight = Math.round(stillWidth / options.aspect);\n }\n\n // Don't do anything special if this is not a Wistia hosted image.\n if (!isBakeryUrl(options.stillUrl)) {\n return options.stillUrl;\n }\n\n if (options.protocol === 'https:') {\n result.protocol = 'https:';\n // Under normal circumstances, the host for assets should depend on the\n // environment – but if you're using the embedHost option to use non-prod\n // code with prod embeds, we force using a prod host.\n result.host =\n options.embedHost === Hosts.PROD_FAST_HOSTNAME_COM ||\n options.embedHost === Hosts.PROD_FAST_HOSTNAME_NET\n ? Hosts.PROD_SSL_EMBED_HOST\n : Hosts.SSL_EMBED_HOST;\n }\n\n result.params.image_crop_resized = `${stillWidth}x${stillHeight}`;\n\n if (options.playButton == null || options.playButton) {\n result.params.image_play_button_rounded = 1;\n result.params.image_play_button_color = `${`${options.playerColor}`.replace(/^#+/, '')}e0`;\n }\n\n if (options.ext) {\n result.ext(options.ext);\n }\n\n // if the extension has not been transformed, default to a jpg\n if (result.ext() === 'bin') {\n result.ext('jpg');\n }\n\n return result.absolute();\n};\n\n// We only make three sizes of a thumbnail for a given video: 1280, 960, and\n// 640 wide. We have logic on the server that matches this as well. The idea\n// is that since we only use these three, we can generate them beforehand so\n// they're always ready and automatic for the people.\nexport const getStillWidth = (options) => {\n const potentialStillWidths = [640, 960, 1280, 1920, 3840];\n\n // We also have a still that's the exact width of the one they uploaded\n // or generated (so long as it is less than 3840px across)\n if (options.stillAssetWidth < 3840) {\n potentialStillWidths.push(options.stillAssetWidth);\n }\n\n // We don't create thumbnails that are larger than the stillAssetWidth,\n // so eliminate anything that's larger than that, because it's wasteful to\n // scale up an image past it's original size!\n const availableStillWidths = [];\n for (let i = 0; i < potentialStillWidths.length; i++) {\n let width = potentialStillWidths[i];\n if (width <= options.stillAssetWidth) {\n availableStillWidths.push(width);\n }\n }\n\n // sort the widths in place.\n availableStillWidths.sort((a, b) => {\n return a - b;\n });\n\n // Use the still that's equal to or slightly larger than the size of the\n // video embed.\n for (let i = 0; i < availableStillWidths.length; i++) {\n let width = availableStillWidths[i];\n if (options.videoWidth <= width) {\n return width;\n }\n }\n\n // Can't find one that fits? Let's use the biggest available width.\n return Math.max(...availableStillWidths);\n};\n\nexport const BAKERY_HOSTS = [\n Hosts.EMBED_HOST,\n Hosts.SSL_EMBED_HOST,\n appHostname('embed'),\n appHostname('prime'),\n appHostname('mixergy-cdn'),\n appHostname('embed-fastly'), // XXX: akamai test\n Hosts.PROD_EMBED_HOST,\n Hosts.PROD_SSL_EMBED_HOST,\n Hosts.PROD_FASTLY_SSL_HOST,\n];\n\n// Check if a given url is like embed.wistia.com, embed-ssl.wistia.com,\n// prime.wistia.com, etc.\nexport const isBakeryUrl = (rawUrl) => {\n if (rawUrl == null) {\n return false;\n }\n const url = new Url(rawUrl);\n if (!url.host) {\n return false;\n }\n return BAKERY_HOSTS.join(',').indexOf(url.host) >= 0;\n};\n\nexport const onePublicReadyWithContainer = (assets, type, options) => {\n options = merge(\n {\n container: type,\n public: true,\n status: READY,\n },\n options,\n );\n\n return one(assets, options);\n};\n\nexport const hasAnyReadyHdrAssets = (assets) => {\n return assets.some(\n (asset) =>\n asset.type === 'hdr_video' &&\n asset.status === READY &&\n asset.public &&\n asset.container === 'mp4',\n );\n};\n\nexport const mp4 = (assets, options) => {\n return onePublicReadyWithContainer(assets, 'mp4', options);\n};\n\nexport const webm = (assets, options) => {\n return onePublicReadyWithContainer(assets, 'webm', options);\n};\n\nexport const m3u8 = (assets, options) => {\n return onePublicReadyWithContainer(assets, 'm3u8', options);\n};\n\nexport const original = (assets) => {\n return one(assets, { type: 'original' });\n};\n\n// If we support webm, prefer webm (since VP9 codec is better), otherwise\n// use mp4 (h264)\nexport const playable = (assets, options, detect = cachedDetect()) => {\n if (detect.video.webm) {\n return webm(assets, options) || mp4(assets, options);\n }\n return mp4(assets, options);\n};\n\nexport const videoAspect = (assets) => {\n const asset = mp4(assets) || m3u8(assets) || webm(assets) || original(assets);\n if (asset && asset.height) {\n return asset.width / asset.height;\n }\n // no assets available; use default aspect 1.6667\n return 640 / 360;\n};\n\nexport const originalAspect = (assets) => {\n const derivativeAspect = videoAspect(assets);\n const asset = original(assets);\n if (asset && asset.width && asset.height) {\n const candidateAspect = asset.width / asset.height;\n if (\n (candidateAspect > 1 && derivativeAspect < 1) ||\n (candidateAspect < 1 && derivativeAspect > 1)\n ) {\n // the original is rotated relative to its derivatives\n return 1 / candidateAspect;\n }\n return candidateAspect;\n }\n return derivativeAspect;\n};\n\nexport const iphone = (assets, options) => {\n const aspect = videoAspect(assets);\n if (aspect > 1) {\n options = merge({ width: 640 }, options);\n return mp4(assets, options) || smallestNormalMp4(assets, options);\n }\n const opt1 = merge({ width: 320 }, options);\n const opt2 = merge({ width: 640 }, options);\n return mp4(assets, opt1) || mp4(assets, opt2) || smallestNormalMp4(assets, options);\n};\n\nexport const smallestNormalMp4 = (assets, options) => {\n options = merge({ sortBy: 'width asc', width: [640, 1920] }, options);\n return mp4(assets, options);\n};\n\nexport const urlWithCorrectHost = (assetUrl, proto = Hosts.eV1Protocol()) => {\n const parsedUrl = new Url(assetUrl);\n if (isBakeryUrl(assetUrl)) {\n if (proto === 'https:') {\n parsedUrl.host = Hosts.deliveryHost(location.protocol);\n parsedUrl.protocol = 'https:';\n } else {\n parsedUrl.host = Hosts.deliveryHost(location.protocol);\n parsedUrl.protocol = 'http:';\n }\n }\n return parsedUrl.absolute();\n};\n\n// It is possible for our customers to give us quality ranges that are\n// impossible to solve for a given video. In these cases, we want to instead\n// use the assets that are closest to satisfying their constraints. For\n// example, if they specify 4k and we only go up to 1080p, it'll use 1080p.\n// Or if they specify a range _between_ two, say 800p to 900p, it'll use the\n// two surrounding values: 720p and 1080p.\nexport const nearestOutsideRange = (assets, lower, upper) => {\n if (assets.length === 0) {\n return [];\n }\n\n const sortedAssets = aps.call(assets).sort((a, b) => {\n return numericSizeSnapped(a.width, a.height) - numericSizeSnapped(b.width, b.height);\n });\n\n let lowerAsset;\n let upperAsset;\n for (let i = 0; i < sortedAssets.length; i++) {\n let asset = sortedAssets[i];\n let assetSize = numericSizeSnapped(asset.width, asset.height);\n if (assetSize < lower) {\n lowerAsset = asset;\n }\n if (assetSize >= upper) {\n upperAsset = asset;\n break;\n }\n }\n\n // get rid of nulls\n const result = [];\n if (lowerAsset) {\n result.push(lowerAsset);\n }\n if (upperAsset) {\n result.push(upperAsset);\n }\n\n // If somehow we didn't end up with any assets, don't fail completely, but\n // let us know.\n if (result.length === 0) {\n wlog.error('nearestOutsideRange: no nearby assets found, using first in list', sortedAssets[0]);\n result.push(sortedAssets[0]);\n }\n\n return result;\n};\n\n// This operates on the array in-place\nexport const moveToFront = (assets, toFront) => {\n if (!toFront) {\n return assets;\n }\n\n let index = -1;\n for (let i = 0; i < assets.length; i++) {\n let asset = assets[i];\n if (asset.url === toFront.url) {\n index = i;\n break;\n }\n }\n\n // If it's -1, it wasn't found. If it's 0, it's already in front.\n if (index > 0) {\n assets.splice(index, 1);\n assets.unshift(toFront);\n }\n\n return assets;\n};\n","import { PublicApi } from '../types/player-api-types.ts';\n\nexport const MUX_PERCENTAGE_TO_ENABLE = 0.1;\n\n/**\n * Whether the current environment provides the `console` methods that mux-embed\n * relies on at module-evaluation time.\n *\n * mux-embed sets up its logger via `console.trace`/`console.info`/`console.debug`\n * as soon as the module is imported (`var q = kt(\"[mux]\")`). In restricted\n * WebKit environments such as Apple Mail's email preview, those methods are\n * undefined, so simply importing wistia-mux.js throws an error\n * @returns {boolean} True if the console methods mux-embed needs are available.\n */\nconst isMuxEnvironmentSupported = (): boolean =>\n typeof console !== 'undefined' &&\n // eslint-disable-next-line no-console\n typeof console.trace === 'function' &&\n // eslint-disable-next-line no-console\n typeof console.info === 'function' &&\n // eslint-disable-next-line no-console\n typeof console.debug === 'function';\n\n/**\n * Determines if Mux should be enabled for an embed based on various conditions.\n * @param {PublicApi} video The embed mux should be enabled for.\n * @param {boolean} didWinCoinFlip Whether or not the embed won the coin flip which determines if Mux should be enabled.\n * @returns {boolean} True if Mux should be enabled, false otherwise.\n */\nexport const shouldEnableMux = (video: PublicApi, didWinCoinFlip: boolean): boolean => {\n const isMuxEnabledInEnvironment = isMuxEnvironmentSupported();\n const isMuxEnabledOnWindow = window.wistiaDisableMux !== true;\n const isMuxEnabledFromOpts = video._opts?.mux !== false;\n const isMuxEnabledFromStandardEmbed = video.iframe == null;\n const isMuxEnabledFromCoinFlip = didWinCoinFlip;\n const isMuxEnabledFromLiveStream = video._mediaData?.type === 'LiveStream';\n\n // Mux should be enabled if all of the following are true:\n // 1. The environment provides the console methods mux-embed needs\n // 3. Mux is not disabled from the embed options\n // 4. Mux is not disabled from the video being an iframe embed\n // 5. Mux is not disabled from the coin flip OR the video is a live stream\n // (Live streams should always have Mux enabled, regardless of the coin flip result)\n return (\n isMuxEnabledInEnvironment &&\n isMuxEnabledOnWindow &&\n isMuxEnabledFromOpts &&\n isMuxEnabledFromStandardEmbed &&\n (isMuxEnabledFromCoinFlip || isMuxEnabledFromLiveStream)\n );\n};\n","import { secondsConverter } from './duration.ts';\n\nconst SECONDS_IN_MINUTE = 60;\n\nexport const secondsToIso8601Duration = (totalSeconds: number): string => {\n const { hours, minutes, seconds } = secondsConverter(totalSeconds, 'hms');\n\n let result = '';\n\n if (hours) {\n result += `${hours}H`;\n }\n\n if (minutes || (totalSeconds > SECONDS_IN_MINUTE && seconds !== 0)) {\n result += `${minutes}M`;\n }\n\n if (seconds || totalSeconds === 0) {\n result += `${seconds}S`;\n }\n\n return result;\n};\n","import { root } from 'utilities/root.js';\nimport { hasPerformanceMeasureSupport } from './performance.ts';\n\nconst na = navigator.userAgent;\n\nlet _playerDetectCache = null;\n\n// ua regexes taken from http://code.jquery.com/jquery-1.6.4.js\nconst rwebkit = /(webkit)[ /]([^\\s]+)/i;\nconst ropera = /OPR\\/([^\\s]+)/i;\nconst redge = /(edge)\\/(\\d+(?:\\.\\d+)?)/i;\nconst rmozilla = /(mozilla)(?:.*? rv:([^\\s)]+))?/i;\n\n// special platform regexes\nconst randroid = /(android) ([^;]+)/i;\nconst riphone = /(iphone)/i;\nconst rwinphone = /(Windows Phone OS (\\d+(?:\\.\\d+)?))/;\nconst rios = /OS (\\d+)_(\\d+)/i;\nconst rfirefox = /(firefox)/i;\nconst rgearvr = /Mobile VR/i;\n\n// Apple keeps their Safari version the same as their iOS version\n// (with the exception being that they occasionally release the new safari\n// slightly before the new iOS is available)\nconst riosVersion = /Version\\/([^\\s]+)/i;\n\nconst browser = () => {\n return (browserMatch()[1] || 'webkit').toLowerCase();\n};\n\nconst browserVersion = () => {\n return browserMatch()[2];\n};\n\nconst browserMatch = () => {\n let match;\n\n match = na.match(redge);\n if (match) {\n return match;\n }\n\n match = na.match(rwebkit);\n if (match) {\n return match;\n }\n\n match = na.match(ropera);\n if (match) {\n return match;\n }\n\n if (match) {\n if (document.documentMode != null) {\n match[2] = document.documentMode;\n }\n return match;\n }\n\n match = na.match(rmozilla);\n if (match) {\n return match;\n }\n\n return [];\n};\n\n// return false if not android, version info if android\nconst android = () => {\n const matches = na.match(randroid);\n if (matches == null) {\n return false;\n }\n return { version: matches[2] };\n};\n\nconst oldandroid = () => {\n return android() && parseFloat(android().version) < 4.1;\n};\n\nconst iphone = () => {\n return riphone.test(na);\n};\n\nconst touchScreen = () => {\n return iosVersion() > 0 || android() || ipad();\n};\n\nconst HDRCodecSupport = () => {\n return {\n hevc: window.MediaSource?.isTypeSupported?.('video/mp4; codecs=\"hvc1.2.4.L153.B0\"') ?? false, // // HEVC Main10\n av1:\n window.MediaSource?.isTypeSupported?.('video/mp4; codecs=\"av01.0.08M.10.0.110.09.16.09\"') ??\n false, // AV1 10-bit Main, PQ (HDR10)\n vp92:\n window.MediaSource?.isTypeSupported?.('video/mp4; codecs=\"vp09.02.10.10.01.09.16.09\"') ??\n false, // // VP9 Profile 2 (10-bit)\n };\n};\n\nconst HDRSupported = () => {\n if (window.matchMedia?.('(dynamic-range: high)').matches) {\n return true; // modern Safari, Chrome\n }\n\n // Unfortunately, many screens that support HDR may still report a colorDepth of 24. But if screen only reports\n // 24 and doesn't support `matchMedia` there is no way to tell if the screen supports HDR or not.\n if (screen.colorDepth && screen.colorDepth >= 30) {\n return true; // legacy hint or Firefox fallback\n }\n\n return false;\n};\n\nconst hoverIsNatural = () => {\n // The (hover: hover) query matches when two conditions are met:\n //\n // 1. hover is supported\n // 2. hover is easy to access for the user based on their primary input device\n //\n // So for example, when the user’s primary input is touch, this returns false\n // even though hover interactions are technically supported.\n //\n // If matchMedia is unsupported or the hover query is unsupported, we fall\n // back on returning the heuristic check for iOS or Android. If it is true,\n // we assume hover is not natural. This can produce false negatives and false\n // positives, but most agents support the hover query.\n //\n // This is an alternative to using touchScreen() when deciding whether to\n // attach enter/leave mouse event handlers based on hover capability.\n\n try {\n const mediaQueryList = matchMedia('(hover:hover)');\n\n if (mediaQueryList.media !== 'not all') {\n return mediaQueryList.matches;\n }\n } catch (err) {\n // feature detection: swallow errors.\n }\n\n return !touchScreen();\n};\n\nconst retina = () => {\n return root.devicePixelRatio != null && root.devicePixelRatio > 1;\n};\n\nconst ipad = () => {\n return (\n /Macintosh/i.test(navigator.userAgent) &&\n navigator.maxTouchPoints &&\n navigator.maxTouchPoints > 1\n );\n};\n\nconst safari = () => {\n return rwebkit.test(na) && !/chrome/i.test(na) && !ipad() && !iphone();\n};\n\nconst chrome = () => {\n if (/Chrome/.test(na) && /Google Inc/.test(navigator.vendor)) {\n return { version: chromeVersion() };\n }\n return false;\n};\n\nconst silkVersion = () => {\n const match = na.match(/\\bSilk\\/([^\\s]+)/);\n return match && match[1];\n};\n\nconst chromeVersion = () => {\n const match = na.match(/\\bChrome\\/([^\\s]+)/);\n return match && match[1];\n};\n\nconst opera = () => {\n return ropera.test(na);\n};\n\nconst iosVersion = () => {\n const iosMatch = na.match(rios);\n const versionMatch = na.match(riosVersion);\n\n if (iosMatch != null) {\n return parseFloat(`${iosMatch[1]}.${iosMatch[2]}`);\n }\n if (versionMatch != null && versionMatch[1] && ipad()) {\n // to get the version of an ipad that is reporting as a Mac in its\n // user agent, we can rely on the Version part of the ua to be\n // fairly certain\n return parseFloat(versionMatch[1]);\n }\n return 0;\n};\n\nconst windowsPhone = () => {\n return rwinphone.test(na);\n};\n\nconst edge = () => {\n return redge.test(na);\n};\n\nconst firefox = () => {\n return rfirefox.test(na);\n};\n\nconst gearvr = () => {\n return rgearvr.test(na);\n};\n\nconst windows = () => {\n return /win/i.test(navigator.platform);\n};\n\nconst mac = () => {\n return /mac/i.test(navigator.platform);\n};\n\n// modified slightly from http://www.modernizr.com/downloads/modernizr-2.0.6.js\nconst html5Video = () => {\n const elem = document.createElement('video');\n let result = false;\n\n // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n try {\n if (elem.canPlayType) {\n result = {};\n // Workaround required for IE9, which doesn't report video support without audio codec specified.\n // bug 599718 @ msft connect\n const h264 = 'video/mp4; codecs=\"avc1.42E01E';\n result.h264 = !!elem.canPlayType(`${h264}\"`) || !!elem.canPlayType(`${h264}, mp4a.40.2\"`);\n result.webm = !!elem.canPlayType('video/webm; codecs=\"vp9, vorbis\"');\n result.nativeHls = !!elem.canPlayType('application/vnd.apple.mpegURL');\n }\n } catch (e) {\n result = {\n ogg: false,\n h264: false,\n webm: false,\n nativeHls: false,\n };\n }\n return result;\n};\n\nconst mediaSource = () => {\n const h264 = 'video/mp4; codecs=\"avc1.42E01E';\n return root.MediaSource && root.MediaSource.isTypeSupported(`${h264}, mp4a.40.2\"`);\n};\n\nconst nativeHls = () => {\n return (iphone() || ipad() || safari()) && html5Video().nativeHls;\n};\n\nconst localStorage = () => {\n try {\n return 'localStorage' in root && root.localStorage != null;\n } catch (e) {\n return false;\n }\n};\n\nconst fullscreenEnabled = () => {\n return (\n document.fullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.msFullscreenEnabled\n );\n};\n\nconst managedMediaSource = () => {\n return (\n 'ManagedMediaSource' in window &&\n typeof window.ManagedMediaSource?.isTypeSupported === 'function'\n );\n};\n\nconst browserPrefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\nconst mutationObserver = () => {\n for (let i = 0; i < browserPrefixes.length; i++) {\n let prefix = browserPrefixes[i];\n let prop = `${prefix}MutationObserver`;\n if (root[prop]) {\n return prop;\n }\n }\n return null;\n};\n\nconst vulcanV2Support = () => {\n const modernBrowser = /webkit|mozilla|edge/.test(browser());\n\n if (iphone() || ipad() || android()) {\n return true;\n }\n\n return Boolean(modernBrowser && html5Video().h264 && Object.defineProperties);\n};\n\nlet isPassiveSupported;\nconst passiveSupported = () => {\n if (isPassiveSupported != null) {\n return isPassiveSupported;\n }\n try {\n const options = Object.defineProperty({}, 'passive', {\n /* eslint-disable-next-line getter-return */\n get() {\n isPassiveSupported = true;\n },\n });\n\n window.addEventListener('test', null, options);\n } catch (err) {\n isPassiveSupported = false;\n }\n return isPassiveSupported;\n};\n\nexport const callingPlayRequiresEventContext = () => {\n return iosVersion() > 0 || android() || safari();\n};\n\n// https://caniuse.com/#search=webp\n// use user-agent for browser and version webp detection\n// we're opting for this over a feature detection mechanism so that our detection\n// can be as fast and synchronous as possible. Doing an async feature detection\n// occasionally resulted in false negatives.\nexport const webp = () => {\n const chromeBrowser = chrome();\n const firefoxBrowser = firefox();\n const edgeBrowser = edge();\n const operaBrowser = opera();\n\n const isChromeDesktopSupported = chromeBrowser && browserVersion() >= 32;\n const isChromeAndroidSupported = chromeBrowser && browserVersion() >= 75 && android();\n const isFirefoxDesktopSupported = firefoxBrowser && browserVersion() >= 65;\n const isFirefoxAndroidSupported = firefoxBrowser && browserVersion() >= 67 && android();\n const isEdgeSupported = edgeBrowser && browserVersion() >= 18;\n const isOperaSupported = operaBrowser && browserVersion() >= 19;\n\n return (\n isChromeDesktopSupported ||\n isChromeAndroidSupported ||\n isFirefoxDesktopSupported ||\n isFirefoxAndroidSupported ||\n isEdgeSupported ||\n isOperaSupported\n );\n};\n\nexport const cachedDetect = () => {\n if (_playerDetectCache) {\n // Allow this to be cached globally so it's not executed once every time\n // it's imported.\n return _playerDetectCache;\n }\n\n _playerDetectCache = uncachedDetect();\n return _playerDetectCache;\n};\n\nexport const uncachedDetect = () => {\n const result = {\n browser: {\n version: browserVersion(),\n },\n edge: edge(),\n firefox: firefox(),\n gearvr: gearvr(),\n hdr: HDRSupported(),\n hdrCodecs: HDRCodecSupport(),\n android: android(),\n oldandroid: oldandroid(),\n iphone: iphone(),\n ipad: ipad(),\n safari: safari(),\n chrome: chrome(),\n winphone: { version: windowsPhone()[2] },\n ios: { version: iosVersion() },\n windows: windows(),\n mac: mac(),\n retina: retina(),\n hoverIsNatural: hoverIsNatural(),\n touchScreen: touchScreen(),\n video: html5Video(),\n managedMediaSource: managedMediaSource(),\n mediaSource: mediaSource(),\n nativeHls: nativeHls(),\n localstorage: localStorage(),\n fullscreenEnabled: fullscreenEnabled(),\n vulcanV2Support: vulcanV2Support(),\n mutationObserver: mutationObserver(),\n callingPlayRequiresEventContext: callingPlayRequiresEventContext(),\n passiveSupported: passiveSupported(),\n webp: webp(),\n performanceMeasure: hasPerformanceMeasureSupport(),\n };\n\n result.browser[browser()] = true;\n\n return result;\n};\n\nexport const clearDetectCache = () => {\n _playerDetectCache = null;\n};\n\n// Starting a migration away from cachedDetect in the wistia-player web component\n// Based on https://github.com/wistia/player-modern/blob/main/docs/ifaq.md#whats-the-deal-with-cacheddetect-and-why-do-we-also-assign-the-result-of-it\nexport const detectIsMobile = () => {\n const isAndroid = android();\n const isIPad = ipad();\n const isIPhone = iphone();\n\n return isAndroid || isIPad || isIPhone;\n};\n","const MAX_RANDOM_VALUE = 0xffffffff;\n\n/**\n * Simulates a coin flip with a given percentage to win\n * @param percentToWinCoinFlip - Number between 0 and 1 representing the percentage to win the coin flip\n * @returns boolean - True if the coin flip was won, false otherwise\n */\nexport const didWinCoinFlip = (percentToWinCoinFlip: number): boolean => {\n const cryptoObj = window.crypto;\n if (typeof cryptoObj !== 'undefined') {\n const cryptoRandom = cryptoObj.getRandomValues(new Uint32Array(1));\n return cryptoRandom[0] / (MAX_RANDOM_VALUE + 1) < percentToWinCoinFlip;\n }\n\n const mathRandom = Math.random();\n return mathRandom >= percentToWinCoinFlip;\n};\n","export type GradientColor = [string, number]; // [color, percentage]\n\nexport type Gradient = {\n colors: GradientColor[];\n on: boolean;\n};\n\n// Gradients can get into this state if the hex code for the color is a numeric\n// string and it gets casted to a number.\nexport type GradientMaybeWithColorsAsNumbers = {\n colors: [number | string, number][];\n on: boolean;\n};\n\nexport const isGradient = (value: unknown): value is Gradient => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const { colors, on } = value as Gradient;\n\n if (!on) {\n return true;\n }\n\n if (!Array.isArray(colors) || typeof on !== 'boolean') {\n return false;\n }\n\n if (colors.length === 0) {\n return false;\n }\n\n return colors.every((color) => {\n return typeof color[0] === 'string' && typeof color[1] === 'number';\n });\n};\n","import {\n getLocalStorage,\n removeLocalStorage,\n updateLocalStorage,\n} from 'utilities/namespacedLocalStorage.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport const deleteViewerPreferences = () => {\n removeLocalStorage(getLocalStorageKey());\n};\n\nconst getLocalStorageKey = () => {\n return 'wistia-viewer-preferences';\n};\n\nexport const getViewerPreferences = () => {\n // if viewer preferences are disabled, return an empty object\n if (Wistia._viewerPreferencesEnabled === false) {\n return {};\n }\n\n return getLocalStorage(getLocalStorageKey());\n};\n\nexport const getViewerPreference = (preference) => {\n const preferences = getViewerPreferences();\n\n if (!preferences) {\n return null;\n }\n\n return preferences[preference];\n};\n\nexport const setViewerPreference = (preference, value) => {\n // delete the plugin property. fix for captions setting plugin.captions-v1 - which caused a bug\n // as when captions was getting enabled. This can be removed after a couple\n // of weeks or so\n updateLocalStorage(getLocalStorageKey(), (obj) => {\n if (obj.plugin) {\n delete obj.plugin;\n }\n\n obj[preference] = value;\n });\n};\n","import { isObject, isArray, merge } from 'utilities/obj.js';\nimport { isDocReady, onDocReady } from 'utilities/docReady.js';\nimport { pageLoaded } from 'utilities/pageLoaded.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { wlog } from 'utilities/wlog.js';\nimport { elemOffset, elemZoom, isBoxModel } from 'utilities/elemOffset.js';\nimport { execScriptTags, getScriptTags, removeScriptTags } from 'utilities/script-tags.js';\nimport { seqId } from 'utilities/seqid.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst W = Wistia;\nconst detect = cachedDetect();\n\nexport { isDocReady, onDocReady };\nexport { pageLoaded };\nexport { execScriptTags, getScriptTags, removeScriptTags };\nexport { elemOffset, elemZoom, isBoxModel };\n\nexport const elemHtml = (elem, content) => {\n const cssTags = getCssTags(content);\n const scriptTags = getScriptTags(content);\n content = removeCssTags(content);\n content = removeScriptTags(content);\n\n elem.innerHTML = content;\n execCssTags(cssTags, elem);\n\n // these script tags will be removed in short order as part of the script\n // loader\n return execScriptTags(scriptTags);\n};\n\nexport const getCssTags = (htmlStr) => {\n return htmlStr.match(/<link.*?rel=['\"]stylesheet['\"][^>]*>|<style>[\\s\\S]+?<\\/style>/gi) || [];\n};\n\nexport const execCssTags = (cssTags, parentElem) => {\n if (!cssTags) {\n return null;\n }\n\n if (!isArray(cssTags)) {\n cssTags = getCssTags(cssTags);\n }\n const inserted = [];\n for (let i = 0; i < cssTags.length; i++) {\n let cssTag = cssTags[i];\n if (/<link.*?rel=['\"]stylesheet['\"][^>]*>/.test(cssTag)) {\n const matches = cssTag.match(/href=['\"](.*?)['\"]/i);\n if (matches) {\n let link = document.createElement('link');\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('href', matches[1]);\n link.className = 'wistia_injected_style';\n (parentElem || document.body || document.head).appendChild(link);\n inserted.push(link);\n }\n } else if (/<style>[\\s\\S]+?<\\/style>/gi.test(cssTag)) {\n const matches = cssTag.match(/<style>([\\s\\S]+?)<\\/style>/i);\n if (matches) {\n let style = addInlineCss(parentElem || document.body || document.head, matches[1]);\n inserted.push(style);\n }\n }\n }\n return inserted;\n};\n\nexport const removeCssTags = (htmlStr) => {\n return htmlStr.replace(/<link.*?rel=['\"]stylesheet['\"][^>]*>|<style>[\\s\\S]+?<\\/style>/gi, '');\n};\n\nexport const addInlineCss = (domTarget, css) => {\n const target = domTarget || document.body || document.head;\n\n const styleElem = document.createElement('style');\n styleElem.id = seqId('wistia_', '_style');\n styleElem.setAttribute('type', 'text/css');\n styleElem.className = 'wistia_injected_style';\n target.appendChild(styleElem, target.nextSibling);\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css;\n } else {\n styleElem.appendChild(document.createTextNode(css));\n }\n return styleElem;\n};\n\nexport const elemFromObject = (obj) => {\n if (isArray(obj)) {\n let result = [];\n for (let i = 0; i < obj.length; i++) {\n result.push(elemFromObject(obj[i]));\n }\n return result;\n }\n\n const tagName = obj.tagName || 'div';\n let childNodes = obj.childNodes || [];\n if (!isArray(childNodes)) {\n childNodes = [childNodes];\n }\n\n const elem = document.createElement(tagName);\n\n for (let key in obj) {\n if (Object.hasOwn(obj, key)) {\n let val = obj[key];\n if (key !== 'childNodes' && key !== 'tagName' && key !== 'ref') {\n let dashedKey = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n if (key === 'style') {\n if (isObject(val)) {\n for (let p in val) {\n elem.style[p] = val[p];\n }\n } else {\n // setAttribute('style', ...) only works in IE8+, so parse inline\n // styles if it's passed in as a string.\n let styles = val.split(';');\n for (let i = 0; i < styles.length; i++) {\n let pair = styles[i].split(/\\s*:\\s*/);\n let p = pair[0];\n let v = pair[1];\n if (p && v) {\n elem.style[p] = v;\n }\n }\n }\n } else if (key === 'events') {\n for (let evt in val) {\n let callback = val[evt];\n elemBind(elem, evt, callback);\n }\n } else if (key === 'className' || key === 'class') {\n elem.className = val;\n } else if (key === 'innerHTML') {\n elem.innerHTML = val;\n } else if (key === 'innerText') {\n elem.innerText = val;\n } else if (val != null && typeof val.toString === 'function') {\n elem.setAttribute(dashedKey, val.toString());\n }\n }\n }\n }\n\n for (let i = 0; i < childNodes.length; i++) {\n let childObj = childNodes[i];\n if (isObject(childObj)) {\n let child = elemFromObject(childObj);\n elemAppend(elem, child);\n } else {\n let child = document.createTextNode(childObj.toString());\n elemAppend(elem, child);\n }\n }\n\n if (typeof obj.ref === 'function') {\n obj.ref(elem);\n }\n\n return elem;\n};\n\nexport const elemToObject = (elem) => {\n if (isArray(elem)) {\n let result = [];\n for (let i = 0; i < elem.length; i++) {\n result.push(elemToObject(elem[i]));\n }\n }\n\n const result = {};\n result.tagName = elem.tagName.toLowerCase();\n\n const elemKeys = Object.keys(elem);\n for (let i = 0; i < elemKeys.length; i++) {\n let attr = elemKeys[i];\n if (\n attr !== 'tagName' &&\n attr !== 'childNodes' &&\n attr !== 'nodeType' &&\n attr !== 'nodeValue'\n ) {\n if (attr === 'style') {\n result.style = {};\n let styleKeys = Object.keys(elem.style);\n for (let j = 0; j < styleKeys.length; j++) {\n let prop = styleKeys[j];\n const val = elem.style[prop];\n if (val && !/^\\d/.test(prop) && prop !== 'length') {\n result.style[prop] = val;\n }\n }\n } else {\n const value = elem.getAttribute(attr);\n if (value != null) {\n result[attr] = value;\n }\n }\n }\n }\n\n let children = [];\n for (let i = 0; i < elem.childNodes.length; i++) {\n let child = elem.childNodes[i];\n if (child.nodeType === 1) {\n children.push(elemToObject(child));\n } else if (child.nodeType === 3) {\n children.push(child.nodeValue);\n }\n }\n if (children.length > 0) {\n result.childNodes = children;\n }\n return result;\n};\n\nexport const elemClone = (elem) => {\n const obj = elemToObject(elem);\n return elemFromObject(obj);\n};\n\nexport const elemAppend = (par, elem) => {\n if (isArray(elem)) {\n for (let i = 0; i < elem.length; i++) {\n elemAppend(par, elem[i]);\n }\n return;\n }\n\n if (par.tagName.includes('-')) {\n par.shadowRoot.appendChild(elem, { wistiaGridCaller: true });\n } else {\n par.appendChild(elem, { wistiaGridCaller: true });\n }\n};\n\nexport const elemPrepend = (par, elem) => {\n if (isArray(elem)) {\n for (let i = 0; i < elem.length; i++) {\n elemPrepend(par, elem[i]);\n }\n return;\n }\n\n if (par.childNodes.length === 0) {\n return elemAppend(par, elem);\n }\n return par.insertBefore(elem, par.childNodes[0]);\n};\n\nexport const elemBefore = (sibling, elem) => {\n if (isArray(elem)) {\n elem = elem.reverse();\n for (let i = 0; i < elem.length; i++) {\n elemBefore(sibling, elem[i]);\n }\n return;\n }\n\n return sibling.parentNode.insertBefore(elem, sibling);\n};\n\nexport const elemAfter = (sibling, elem) => {\n if (isArray(elem)) {\n elem = elem.reverse();\n for (let i = 0; i < elem.length; i++) {\n elemAfter(sibling, elem[i]);\n }\n return;\n }\n\n return sibling.parentNode.insertBefore(elem, sibling.nextSibling);\n};\n\nexport const elemRemove = (elem) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n for (let i = 0; i < elem.length; i++) {\n elemRemove(elem[i]);\n }\n return;\n }\n\n let par;\n if (elem != null && (elem.nodeType === 1 || elem.nodeType === 3) && (par = elem.parentNode)) {\n par.removeChild(elem);\n elem = null;\n }\n};\n\nexport const elemRemoveClass = (elem, klass) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n for (let i = 0; i < elem.length; i++) {\n elemRemoveClass(elem[i], klass);\n }\n return;\n }\n\n if (!elemHasClass(elem, klass)) {\n return;\n }\n\n let className = elem.getAttribute('class');\n if (className) {\n const regexp = new RegExp(`\\\\b${klass}\\\\b`, 'g');\n const newClassString = normalizeClassName(className.replace(regexp, ''));\n elem.setAttribute('class', newClassString);\n }\n};\n\nexport const elemAddClass = (elem, klass) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n for (let i = 0; i < elem.length; i++) {\n elemAddClass(elem[i], klass);\n }\n return;\n }\n\n if (elemHasClass(elem, klass)) {\n return;\n }\n\n let className = elem.getAttribute('class');\n let newClassString;\n if (className) {\n elemRemoveClass(elem, klass);\n newClassString = normalizeClassName(`${className} ${klass}`);\n } else {\n newClassString = klass;\n }\n\n elem.setAttribute('class', newClassString);\n};\n\n// Longer than ` ${elem.className} `.indexOf(` ${klass} `) >= 0, but doesn't\n// cause JIT code deoptimization in Chrome.\nexport const elemHasClass = (elem, klass) => {\n let className =\n elem != null && typeof elem.getAttribute === 'function' && elem.getAttribute('class');\n if (!className && elem && typeof elem.className === 'string') {\n className = elem.className;\n }\n\n if (!className) {\n return false;\n }\n\n let returnValue = false;\n\n eachIndexOf(className, klass, (index) => {\n let classBeginningFound = index === 0 || className.charAt(index - 1) === ' ';\n let endsWidthClass = index + klass.length === className.length;\n let classInMiddle = className.charAt(index + klass.length) === ' ';\n\n if (classBeginningFound && (endsWidthClass || classInMiddle)) {\n returnValue = true;\n return BREAK_IDENTIFIER;\n }\n });\n\n return returnValue;\n};\n\nconst BREAK_IDENTIFIER = {};\nconst eachIndexOf = (str, needle, fn) => {\n let i = -1;\n\n while ((i = str.indexOf(needle, i + 1)) != -1) {\n if (fn(i) === BREAK_IDENTIFIER) {\n break;\n }\n }\n};\n\nexport const elemClasses = (elem) => {\n if (elem && typeof elem.className !== 'string') {\n // Sometimes, className doesn't return a string. Who knew?!\n // https://wistia.zendesk.com/agent/tickets/196879\n return [''];\n }\n return ((elem && elem.className) || '').split(/\\s+/);\n};\n\nconst normalizeClassName = (className) => {\n return className.replace(/^\\s+/g, '').replace(/\\s+$/g, '').replace(/\\s+/g, ' ');\n};\n\nexport const elemStyle = (elem, ...args) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n let result = [];\n for (let i = 0; i < elem.length; i++) {\n let node = elem[i];\n if (node.nodeType === 1) {\n result.push(elemStyle(node, ...args));\n }\n }\n return result;\n }\n if (args.length === 2) {\n let prop = args[0];\n let val = args[1];\n elem.style[prop] = val;\n } else if (args.length === 1) {\n if (typeof args[0] === 'string') {\n let prop = args[0];\n try {\n if (elem.currentStyle) {\n return elem.currentStyle[prop];\n }\n if (window.getComputedStyle) {\n return window.getComputedStyle(elem, null).getPropertyValue(prop);\n }\n return null;\n } catch (e) {\n wlog.notice(e);\n }\n } else {\n let props = propsWithVendorPrefixes(args[0]);\n for (let prop in props) {\n let val = props[prop];\n elem.style[prop] = val;\n }\n }\n } else {\n wlog('Unexpected args', elem, ...args);\n }\n};\n\nconst VENDORED_PROPERTIES = {\n borderImage: true,\n mixBlendMode: true,\n transform: true,\n transition: true,\n transitionDuration: true,\n};\n\nconst VENDOR_PREFIXES = ['webkit', 'moz', 'o', 'ms'];\n\nexport const propsWithVendorPrefixes = (props) => {\n if (detect.chrome) {\n return props;\n }\n\n const result = {};\n for (let prop in props) {\n let val = props[prop];\n result[prop] = val;\n if (VENDORED_PROPERTIES[prop]) {\n let prefixes = VENDOR_PREFIXES;\n for (let i = 0; i < prefixes.length; i++) {\n let prefix = prefixes[i];\n let prefixedProp = prefix + prop.charAt(0).toUpperCase() + prop.slice(1);\n if (!prop[prefixedProp]) {\n result[prefixedProp] = val;\n }\n }\n }\n }\n return result;\n};\n\nexport const getComputedStyle = (elem, prop) => {\n if (!window.getComputedStyle) {\n return null;\n }\n const computed = window.getComputedStyle(elem, null);\n if (computed == null) {\n return null;\n }\n if (prop != null) {\n return computed[prop];\n }\n return computed;\n};\n\nexport const elemWidth = (elem) => {\n if (elem === window) {\n if (window.innerWidth) {\n return window.innerWidth;\n }\n if (document.documentElement) {\n return document.documentElement.offsetWidth;\n }\n return document.body.offsetWidth;\n }\n if (elem === document) {\n const body = document.body;\n const html = document.documentElement;\n return Math.max(\n body.scrollWidth,\n body.offsetWidth,\n html.clientWidth,\n html.scrollWidth,\n html.offsetWidth,\n );\n }\n let val;\n if ((val = getComputedStyle(elem, 'width')) && val != null) {\n return parseFloat(val);\n }\n if (elem.currentStyle) {\n return elem.offsetWidth;\n }\n return -1;\n};\n\nexport const elemHeight = (elem) => {\n if (elem === window) {\n if (window.innerHeight) {\n return window.innerHeight;\n }\n if (document.documentElement) {\n return document.documentElement.offsetHeight;\n }\n return document.body.offsetHeight;\n }\n if (elem === document) {\n const body = document.body;\n const html = document.documentElement;\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight,\n );\n }\n let val;\n if ((val = getComputedStyle(elem, 'height')) && val != null) {\n return parseFloat(val);\n }\n if (elem.currentStyle) {\n return elem.offsetHeight;\n }\n return -1;\n};\n\nexport const elemContainsOffset = (elem, left, top) => {\n let offset = elemOffset(elem);\n offset.right = offset.left + elemWidth(elem);\n offset.bottom = offset.top + elemHeight(elem);\n return offset.left <= left && left < offset.right && offset.top <= top && top < offset.bottom;\n};\n\nexport const elemScrollOffset = (elem) => {\n let curLeft = 0;\n let curTop = 0;\n if (elem.parentNode) {\n while (elem && elem.offsetParent) {\n curTop += elem.scrollTop;\n curLeft += elem.scrollLeft;\n elem = elem.parentNode;\n }\n }\n return {\n left: curLeft,\n top: curTop,\n };\n};\n\nexport const elemIsHidden = (elem) => {\n while (elem && elem.nodeType === 1) {\n if (elemStyle(elem, 'display') === 'none') {\n return true;\n }\n elem = elem.parentNode;\n }\n\n return false;\n};\n\n// Like elemIsHidden but complete: also treats visibility hidden/collapse as\n// hidden, reads computed styles rather than inline ones, and follows the walk\n// out of shadow roots into the host so an element inside a hidden web\n// component reports hidden.\nexport const elemIsHiddenByStyle = (elem) => {\n const view = elem.ownerDocument.defaultView;\n if (!view) {\n return false;\n }\n let node = elem;\n while (node) {\n const { display, visibility } = view.getComputedStyle(node);\n if (display === 'none' || visibility === 'hidden' || visibility === 'collapse') {\n return true;\n }\n const root = node.getRootNode();\n node = node.parentElement || (root instanceof ShadowRoot ? root.host : null);\n }\n return false;\n};\n\nexport const elemInDom = (elem) => {\n while (elem) {\n if (elem === document) {\n return true;\n }\n const parent = elem.parentNode;\n if (parent != null) {\n elem = parent;\n } else if (typeof elem.getRootNode === 'function') {\n elem = elem.getRootNode()?.host;\n } else {\n return false;\n }\n }\n return false;\n};\n\n// Returns the truly focused element, descending through any number of nested\n// shadow roots. document.activeElement only reports the active element within\n// its own tree scope; when focus lives inside a (possibly nested) shadow DOM —\n// e.g. a <wistia-player> nested inside another web component — it reports the\n// outermost host. Walking activeElement through each shadowRoot gives us the\n// real leaf element so containment checks work regardless of nesting depth.\nexport const getDeepActiveElement = (root = document) => {\n let active = root.activeElement;\n while (active?.shadowRoot?.activeElement) {\n active = active.shadowRoot.activeElement;\n }\n return active;\n};\n\nexport const elemIsDescendantOf = (elem, target) => {\n let ancestors = elemAncestors(elem);\n for (let i = 0; i < ancestors.length; i++) {\n if (ancestors[i] === target) {\n return true;\n }\n }\n return false;\n};\n\nexport const elemAncestorWithClass = (elem, klass) => {\n let ancestors = elemAncestors(elem);\n for (let i = 0; i < ancestors.length; i++) {\n if (elemHasClass(ancestors[i], klass)) {\n return ancestors[i];\n }\n }\n return null;\n};\n\nexport const elemAncestorHasClass = (elem, klass) => {\n const ancestor = elemAncestorWithClass(elem, klass);\n return !!ancestor;\n};\n\nexport const elemAncestors = (elem) => {\n let current = elem;\n const result = [];\n while ((current = current.parentNode)) {\n result.push(current);\n }\n return result;\n};\n\nexport const elemIsInside = (elem, ancestor) => {\n return elem === ancestor || elemIsDescendantOf(elem, ancestor);\n};\n\nconst getTransitionProp = (props, time, easing) => {\n const result = [];\n for (let prop in props) {\n result.push(`${prop} ${time}ms ${easing}`);\n }\n return result.join(',');\n};\n\nexport const elemAnimate = (elem, props = {}, options = {}) => {\n options = merge({ time: 400, easing: 'ease' }, options);\n\n const transitions = getTransitionProp(props, options.time, options.easing);\n elemStyle(elem, { transition: transitions });\n\n safeRequestAnimationFrame(() => {\n elemStyle(elem, props);\n setTimeout(() => {\n elemStyle(elem, { transition: '' });\n if (typeof options.callback === 'function') {\n options.callback();\n }\n }, options.time);\n });\n};\n\nexport const elemBind = (elem, event, fn, useCapture = false) => {\n const eventShim = (e, ...args) => {\n e = e || window.event;\n\n // Normalize pageX, pagey\n if (!e.pageX && !e.pageY && (e.clientX || e.clientY)) {\n e.pageX = e.clientX + docScrollLeft();\n e.pageY = e.clientY + docScrollTop();\n }\n\n // Normalize preventDefault\n if (!e.preventDefault) {\n e.preventDefault = function () {\n e.returnValue = false;\n };\n }\n\n // Normalize stopPropagation\n if (!e.stopPropagation) {\n e.stopPropagation = function () {\n e.cancelBubble = true;\n };\n }\n\n // Normalize `which`\n if (e.which == null) {\n e.which = e.charCode != null ? e.charCode : e.keyCode;\n }\n if (e.which == null && e.button != null) {\n if (e.button & 1) {\n e.which = 1; // left\n } else if (e.button & 2) {\n e.which = 3; // right\n } else if (e.button & 4) {\n e.which = 2; // middle\n } else {\n e.which = 0; // no button pressed\n }\n }\n\n // Normalize `target`\n if (e.target) {\n // perfect\n } else if (e.srcElement) {\n e.target = e.srcElement;\n }\n if (e.target && e.target.nodeType === 3) {\n e.target = e.target.parentNode;\n }\n\n // Actually call the function\n const result = fn.apply(e.target, [e].concat(args));\n\n // Sweet anonymous unbinding logic\n if (result === elemUnbind) {\n elemUnbind(elem, event, fn);\n }\n\n return result;\n };\n\n Wistia._elemBind = Wistia._elemBind || {};\n const key = elemBindKey(elem, event, fn);\n Wistia._elemBind[key] = eventShim;\n\n // Set the elem/event property so we can unbind all for the elem\n eventShim.elem = elem;\n eventShim.event = event;\n\n elem.addEventListener(event, eventShim, useCapture);\n return function () {\n elemUnbind(elem, event, fn, useCapture);\n };\n};\n\nexport const elemUnbind = (elem, event, fn, useCapture = false) => {\n if (!(elem != null && elem._wistiaElemId != null && fn != null && fn._wistiaBindId)) {\n return;\n }\n const key = elemBindKey(elem, event, fn);\n const eventShim = Wistia._elemBind[key];\n if (eventShim) {\n elem.removeEventListener(event, eventShim, useCapture);\n eventShim.elem = null;\n eventShim.event = null;\n }\n return delete Wistia._elemBind[key];\n};\n\nexport const elemUnbindAll = (elem) => {\n for (let key in Wistia._elemBind) {\n let eventShim = Wistia._elemBind[key];\n if (eventShim && elem === eventShim.elem) {\n let event = eventShim.event;\n eventShim.elem.removeEventListener(event, eventShim, false);\n eventShim.elem = null;\n eventShim.event = null;\n delete Wistia._elemBind[key];\n }\n }\n};\n\nexport const elemUnbindAllInside = (container) => {\n let count = 0;\n for (let key in Wistia._elemBind) {\n let eventShim = Wistia._elemBind[key];\n if (eventShim && elemIsInside(eventShim.elem, container)) {\n let event = eventShim.event;\n eventShim.elem.removeEventListener(event, eventShim, false);\n eventShim.elem = null;\n eventShim.event = null;\n delete Wistia._elemBind[key];\n count += 1;\n }\n }\n\n return count;\n};\n\nexport const elemBindKey = (elem, event, fn) => {\n elem._wistiaElemId = elem._wistiaElemId || seqId('wistia_elem_');\n fn._wistiaBindId = fn._wistiaBindId || seqId('wistia_bind_');\n return `${elem._wistiaElemId}.${event}.${fn._wistiaBindId}`;\n};\n\nexport const elemRebind = (elem, event, fn) => {\n if (fn) {\n elemUnbind(elem, event, fn);\n return elemBind(elem, event, fn);\n }\n};\n\nexport const elemBindOnce = (elem, event, fn) => {\n const wrap = function (...args) {\n fn.apply(this, args);\n return elemUnbind;\n };\n return elemBind(elem, event, wrap);\n};\n\nexport const elemTrigger = (elem, event, ...customArguments) => {\n if (elem.dispatchEvent) {\n const eventObj = document.createEvent('Events');\n eventObj.initEvent(event, true, false);\n if (event === 'click' || event === 'doubleclick') {\n eventObj.which = 1;\n } else if (event === 'rightclick') {\n eventObj.which = 2;\n }\n eventObj.customArguments = customArguments;\n return elem.dispatchEvent(eventObj);\n }\n if (elem.fireEvent) {\n const eventObj = { customArguments };\n return elem.fireEvent(`on${event}`, eventObj);\n }\n wlog.error('neither dispatchEvent nor fireEvent is defined for', elem, event);\n};\n\nexport const fullscreenElement = () => {\n return document.fullscreenElement || document.webkitFullscreenElement;\n};\n\nexport const elemRequestFullscreen = (elem) => {\n try {\n if (elem.requestFullscreen && document.fullscreenEnabled) {\n return elem.requestFullscreen().catch((error) => {\n wlog.notice('requestFullscreen failed', error);\n return Promise.reject(error);\n });\n }\n\n if (elem.webkitEnterFullscreen) {\n if (elem.readyState !== undefined && elem.readyState < HTMLMediaElement.HAVE_METADATA) {\n const errorMessage = 'webkitEnterFullscreen requires at least HAVE_METADATA readyState';\n wlog.notice(errorMessage);\n return Promise.reject(new Error(errorMessage));\n }\n // WebKit throws InvalidStateError if fullscreen isn't currently\n // possible (no video track, fullscreen restrictions, expired user\n // gesture), even when metadata has loaded. webkitSupportsFullscreen\n // reflects that exact internal check. It's undefined on non-video\n // elements, so only an explicit false blocks the call.\n if (elem.webkitSupportsFullscreen === false) {\n const errorMessage = 'webkitEnterFullscreen is not currently supported for this element';\n wlog.notice(errorMessage);\n return Promise.reject(new Error(errorMessage));\n }\n elem.webkitEnterFullscreen();\n return Promise.resolve();\n }\n } catch (error) {\n wlog.notice('requestFullscreen failed', error);\n return Promise.reject(error);\n }\n\n wlog.notice('no requestFullscreen functionality detected');\n return Promise.resolve();\n};\n\nexport const elemCancelFullscreen = (elem) => {\n if (document.exitFullscreen) {\n return document.exitFullscreen();\n }\n if (elem && elem.webkitExitFullscreen) {\n return new Promise((resolve) => {\n elem.webkitExitFullscreen();\n resolve();\n });\n }\n wlog.notice('no cancelFullscreen functionality detected');\n return Promise.resolve();\n};\n\nexport const elemStripEventAttributes = (elem) => {\n const attributes = (elem && elem.attributes) || [];\n try {\n for (let i = 0; i < attributes.length; i++) {\n let attr = attributes[i];\n if (/^on.+/i.test(attr.name)) {\n elem[attr.name] = null;\n elem.removeAttribute(attr.name);\n }\n }\n } catch (e) {\n wlog.error(e);\n }\n\n if (elem.childNodes) {\n for (let i = 0; i < elem.childNodes.length; i++) {\n let child = elem.childNodes[i];\n if (child.nodeType === 1) {\n elemStripEventAttributes(child);\n }\n }\n }\n};\n\nexport const elemMutationObserver = (fn) => {\n const klass = detect.mutationObserver;\n if (klass) {\n return new window[klass](fn);\n }\n return null;\n};\n\nexport const docScrollTop = (t) => {\n let docBody = document.body;\n let docElem = document.documentElement;\n if (t != null) {\n if (docBody) {\n docBody.scrollTop = t;\n }\n if (docElem) {\n docElem.scrollTop = t;\n }\n } else {\n return (docElem && docElem.scrollTop) || (docBody && docBody.scrollTop) || 0;\n }\n};\n\nexport const docScrollLeft = (t) => {\n let docBody = document.body;\n let docElem = document.documentElement;\n if (t != null) {\n if (docBody) {\n docBody.scrollLeft = t;\n }\n if (docElem) {\n docElem.scrollLeft = t;\n }\n } else {\n return (docElem && docElem.scrollLeft) || (docBody && docBody.scrollLeft) || 0;\n }\n};\n\nexport const safeRequestAnimationFrame = (fn) => {\n const requestAnimFrame =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n ((callback) => setTimeout(callback, 1000 / 60));\n return requestAnimFrame(fn);\n};\n\nconst FORM_CONTROL_ROLES = /^(radio|checkbox|switch|option|menuitemradio|menuitemcheckbox)$/i;\n\nexport const formInputIsFocused = () => {\n let activeElement = document.activeElement;\n if (document.activeElement.tagName === 'WISTIA-PLAYER') {\n activeElement = document.activeElement.shadowRoot.activeElement;\n }\n\n if (activeElement.tagName === 'WISTIA-FORM-EMBED') {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return (\n /^textarea|input|select$/i.test(activeElement.tagName) ||\n FORM_CONTROL_ROLES.test(activeElement.getAttribute('role') || '') ||\n activeElement.isContentEditable\n );\n};\n\nexport const currentEventSource = () => {\n return inUserEventContext() ? 'user-event' : 'non-user-event';\n};\n\nexport const inUserEventContext = () => {\n return !!activeDOMEvent;\n};\n\nexport const getLastActiveEventAt = () => {\n return lastActiveEventAt;\n};\n\nlet activeDOMEvent;\nlet lastActiveEventAt = -1;\nconst userEventsThatShowIntent = [\n 'auxclick',\n 'click',\n 'contextmenu',\n 'dblclick',\n 'focus',\n 'keydown',\n 'keypress',\n 'keyup',\n 'mousedown',\n 'mouseup',\n 'reset',\n 'submit',\n 'touchend',\n 'touchstart',\n];\nuserEventsThatShowIntent.forEach((type) => {\n const onEvent = (e) => {\n activeDOMEvent = e;\n lastActiveEventAt = Date.now();\n setTimeout(() => {\n if (activeDOMEvent === e) {\n // if some other event has triggered synchronously, let's not clobber it;\n // the last one to fire will set this to null.\n activeDOMEvent = undefined;\n }\n }, 0);\n };\n\n // We use capture = true because event.stopPropagation() would cause us to\n // miss this.\n elemBind(\n document,\n type,\n onEvent,\n detect.passiveSupported ? { capture: true, passive: true } : true,\n );\n});\n","import { h, JSX, type SVGAttributes } from 'preact';\nimport { BigPlayButtonLoadingAnim } from '../BigPlayButtonLoadingAnim.tsx';\nimport { standardSvgAttrs } from '../../../../../../../utilities/svg_boilerplate.ts';\n\ninterface BigPlayButtonSVGProps {\n height: number;\n isLoading?: boolean;\n overrideFillColor?: string;\n scale: number;\n width: number;\n}\n\nconst ICON_WIDTH = 37;\nconst ICON_HEIGHT = 36;\n\nconst LOADING_ALPHA = 0.5;\n\nexport const BigPlayButtonSVG = ({\n width,\n height,\n scale,\n isLoading = false,\n overrideFillColor,\n}: BigPlayButtonSVGProps): JSX.Element => {\n const scaledHeight = height * scale;\n const svgAttrs = standardSvgAttrs({\n width,\n height,\n styleOverride: {\n position: 'absolute',\n height: `${scaledHeight}px`,\n color: overrideFillColor,\n },\n ariaHidden: true,\n }) as SVGAttributes<SVGSVGElement>;\n\n // Center the icon within the width and height of the button\n const iconXOffset = -(ICON_WIDTH / 2) + width / 2;\n const iconYOffset = -(ICON_HEIGHT / 2) + height / 2;\n\n return (\n <svg {...svgAttrs} aria-hidden=\"true\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentcolor\"\n opacity={isLoading ? LOADING_ALPHA : 1}\n transform={`translate(${iconXOffset}, ${iconYOffset})`}\n d=\"M12.138 2.173C10.812 1.254 9 2.203 9 3.817v28.366c0 1.613 1.812 2.563 3.138 1.644l20.487-14.183a2 2 0 0 0 0-3.288L12.138 2.173Z\"\n />\n {isLoading && <BigPlayButtonLoadingAnim />}\n </svg>\n );\n};\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n","let rootTest;\ntry {\n rootTest = self; // dom or web worker\n if (\n rootTest.self !== rootTest &&\n typeof rootTest.self !== 'undefined' &&\n typeof window !== 'undefined'\n ) {\n // Accidentally assigning `self` is a thing that websites do. But most of\n // these accidental assigns won't have a self property pointing at themselves.\n rootTest = window;\n }\n} catch (err) {\n if (typeof globalThis !== 'undefined') {\n rootTest = globalThis; // es native in the future\n } else {\n // oh god, what's even happening\n rootTest = window;\n }\n}\n\nexport const root = rootTest;\n","export const interBoldItalicFontFamily = 'WistiaPlayerInterBoldItalic, Helvetica, Sans-Serif';\nexport const interFontFamily = 'WistiaPlayerInter, Helvetica, Sans-Serif';\nexport const interSemiBoldFontFamily = 'WistiaPlayerInterSemiBold, Helvetica, Sans-Serif';\nexport const interNumbersSemiBold = 'WistiaPlayerInterNumbersSemiBold, Helvetica, Sans-Serif';\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n","// You wouldn't believe it, but IE11 does not support Object.assign(), so this\n// is our non-polyfill replacement.\n\nexport const assign = (obj1, ...objs) => {\n if (Object.assign) {\n return Object.assign(obj1, ...objs);\n }\n for (let i = 0; i < objs.length; i++) {\n assignOne(obj1, objs[i]);\n }\n return obj1;\n};\n\nconst assignOne = (obj1, obj2) => {\n for (let k in obj2) {\n if (Object.hasOwn(obj2, k)) {\n obj1[k] = obj2[k];\n }\n }\n return obj1;\n};\n","import { Wistia } from '../wistia_namespace.ts';\n\nconst aps = Array.prototype.slice;\n\nexport const bind = function (event, fn) {\n const self = this;\n if (!self._bindings) {\n self._bindings = {};\n }\n if (!self._bindings[event]) {\n self._bindings[event] = [];\n }\n self._bindings[event].push(fn);\n return function () {\n self.unbind(event, fn);\n };\n};\n\nexport const unbind = function (event, fn) {\n if (!this._bindings) {\n return this;\n }\n if (!this._bindings[event]) {\n return this;\n }\n const bindings = [];\n for (let i = 0; i < this._bindings[event].length; i++) {\n let boundFn = this._bindings[event][i];\n if (boundFn !== fn) {\n bindings.push(boundFn);\n }\n }\n this._bindings[event] = bindings;\n};\n\nexport const rebind = function (event, fn) {\n this.unbind(event, fn);\n this.bind(event, fn);\n return { event, fn };\n};\n\nexport const trigger = function (event, ...args) {\n if (this._bindings && this._bindings.all != null) {\n triggerImpl.apply(this, ['all', event].concat(args));\n }\n return triggerImpl.apply(this, [event].concat(args));\n};\n\nconst triggerImpl = function (event) {\n if (!this._bindings) {\n return this;\n }\n if (!this._bindings[event]) {\n return this;\n }\n const args = aps.call(arguments, 1);\n let unbinds;\n // memoize necessary to loop over all bindings if one of the bindings\n // unbinds a following binding\n const bindings = [...this._bindings[event]];\n for (let i = 0; i < bindings.length; i++) {\n let fn = bindings[i];\n try {\n let ret = fn.apply(this, args);\n // special return value will unbind when triggered\n if (ret === this.unbind) {\n if (unbinds == null) {\n unbinds = [];\n }\n unbinds.push({ event, fn });\n }\n } catch (e) {\n if (this._throwTriggerErrors) {\n throw e;\n } else if (Wistia.error) {\n Wistia.error(e);\n }\n }\n }\n\n if (unbinds) {\n for (let i = 0; i < unbinds.length; i++) {\n let unbind = unbinds[i];\n this.unbind(unbind.event, unbind.fn);\n }\n }\n\n return this;\n};\n\nexport const once = function (event, fn) {\n const wrappedFn = function () {\n fn.apply(this, aps.call(arguments, 0));\n return unbind;\n };\n return bind(event, wrappedFn);\n};\n\nexport const initNamespace = function (ctx, namespace) {\n if (ctx._namedBindings == null) {\n ctx._namedBindings = {};\n }\n\n if (ctx._namedBindings[namespace] == null) {\n ctx._namedBindings[namespace] = {};\n }\n};\n\nconst getNamedBinding = function (ctx, namespace, fnKey) {\n initNamespace(ctx, namespace);\n return ctx._namedBindings[namespace][fnKey];\n};\n\nconst setNamedBinding = function (ctx, namespace, fnKey, event, fn) {\n initNamespace(ctx, namespace);\n ctx._namedBindings[namespace][fnKey] = { event, fn };\n};\n\nexport const bindNamed = function (namespace, fnKey, event, fn) {\n this.unbindNamed(namespace, fnKey);\n setNamedBinding(this, namespace, fnKey, event, fn);\n this.bind(event, fn);\n return function () {\n this.unbindNamed(namespace, fnKey);\n };\n};\n\nexport const unbindNamed = function (namespace, fnKey) {\n initNamespace(this, namespace);\n const entry = getNamedBinding(this, namespace, fnKey);\n if (entry) {\n const { event, fn } = entry;\n this.unbind(event, fn);\n }\n const namedBindings = this._namedBindings;\n delete namedBindings[namespace][fnKey];\n if (isEmpty(namedBindings[namespace])) {\n delete namedBindings[namespace];\n }\n return this;\n};\n\nexport const unbindAllInNamespace = function (namespace) {\n const bindings = this._namedBindings && this._namedBindings[namespace];\n if (bindings == null) {\n return this;\n }\n for (let fnKey in bindings) {\n if (Object.hasOwn(bindings, fnKey)) {\n this.unbindNamed(namespace, fnKey);\n }\n }\n};\n\nconst isEmpty = function (obj) {\n for (let k in obj) {\n if (Object.hasOwn(obj, k)) {\n return false;\n }\n }\n return true;\n};\n\nexport const bindify = function (prototype) {\n prototype.bind = bind;\n prototype.unbind = unbind;\n prototype.on = bind;\n prototype.off = unbind;\n prototype.rebind = rebind;\n prototype.trigger = trigger;\n prototype.bindNamed = bindNamed;\n prototype.unbindNamed = unbindNamed;\n prototype.unbindAllInNamespace = unbindAllInNamespace;\n return prototype;\n};\n\n// If you don't want to mix in state with an existing object, you can use this\n// as a proxy, for example:\n//\n// var bindings = new Bindings();\n// bindings.bind('hello', function(name) {\n// console.log('hi', name);\n// return bindings.unbind;\n// });\n// bindings.trigger('hello', 'Max');\nexport const Bindings = function () {};\nbindify(Bindings.prototype);\n","// chapters has two ways of being defined in embed options.\n// The current way is as an object inside `embedOptions.plugin`\n// The old way was as root embed options like `chaptersOn` and `chapterList`.\n// This function normalizes the old root embed option format to an object\n// like the current model\n\nimport { isNotNil } from '@wistia/type-guards';\nimport type { EmbedOptions } from '../types/EmbedOptions.ts';\nimport type { ChaptersPluginConfig } from '../types/plugins.ts';\n\nexport const normalizeChapters = (embedOptions: EmbedOptions): ChaptersPluginConfig | undefined => {\n const { plugin, chaptersOn, chapterList } = embedOptions;\n\n if (plugin?.chapters) {\n return plugin.chapters;\n }\n\n const areChaptersOn = chaptersOn === true || chaptersOn === 'true';\n\n if (isNotNil(chapterList) || areChaptersOn) {\n const hasChapters = isNotNil(chapterList) && chapterList.length > 0;\n const list = hasChapters ? chapterList : [];\n\n return {\n on: chaptersOn,\n chapterList: list,\n };\n }\n\n return undefined;\n};\n","import * as bindify from 'utilities/bindify.js';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { convertedEventNames, EventShepherd } from './eventShepherd.ts';\n\n// This is an adaptation on top of bindify that is intended to provide both\n// legacy functionality (returning `this` instead of an \"unbind\" function) and\n// and functionality for \"crosstime\" and \"betweentimes\", which are\n// \"composite\" bindings that do not have normal event signatures, as they take additional arguments.\n//\n// If you're setting up on/off/trigger for any new things, you should use\n// bindify directly instead.\n\nif (!Wistia.bindable) {\n if (!Wistia.EventShepherdManager) {\n Wistia.EventShepherdManager = {};\n }\n\n Wistia.bindable = {\n bind(event, callback) {\n if (event === 'crosstime' && this.crossTime) {\n this.crossTime.addBinding(arguments[1], arguments[2]);\n return this;\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n this.betweenTimes.addBinding(arguments[1], arguments[2], arguments[3]);\n return this;\n }\n\n const embedElement = this.embedElement || this.container;\n\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n if (Wistia.EventShepherdManager[id] === undefined) {\n Wistia.EventShepherdManager[id] = new EventShepherd();\n }\n Wistia.EventShepherdManager[id].addListener(event, embedElement, callback);\n return this;\n }\n\n if (callback) {\n bindify.bind.call(this, event, callback);\n return this;\n }\n\n if (Wistia.warn) {\n Wistia.warn(this.constructor.name, 'bind', 'falsey value passed in as callback:', callback);\n }\n },\n\n // unbind the matching callback and event for this video\n unbind(event, callback) {\n if (event === 'crosstime' && this.crossTime) {\n if (!callback) {\n this.crossTime.removeAllBindings();\n } else {\n this.crossTime.removeBinding(arguments[1], arguments[2]);\n }\n\n return this;\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n if (!callback) {\n this.betweenTimes.removeAllBindings();\n } else {\n this.betweenTimes.removeBinding(arguments[1], arguments[2], arguments[3]);\n }\n return this;\n }\n\n const embedElement = this.embedElement || this.container;\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n // return early if the EventShepherd for the hashedId is not defined\n if (Wistia.EventShepherdManager[id] === undefined) {\n return this;\n }\n Wistia.EventShepherdManager[id].removeListener(event, embedElement, callback);\n return this;\n }\n\n if (callback) {\n bindify.unbind.call(this, event, callback);\n } else if (this._bindings) {\n // no callback passed in, so clear all callbacks for this event\n this._bindings[event] = [];\n }\n\n // null/delete the event keys if they have no events\n if (this._bindings && this._bindings[event] && !this._bindings[event].length) {\n this._bindings[event] = null;\n delete this._bindings[event];\n }\n\n return this;\n },\n\n on(event, fn) {\n if (event === 'crosstime' && this.crossTime) {\n this.crossTime.addBinding(arguments[1], arguments[2]);\n\n return () => {\n this.crossTime.removeBinding(arguments[1], arguments[2]);\n };\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n this.betweenTimes.addBinding(arguments[1], arguments[2], arguments[3]);\n\n return () => {\n this.betweenTimes.removeBinding(arguments[1], arguments[2], arguments[3]);\n };\n }\n\n const embedElement = this.embedElement || this.container;\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n if (Wistia.EventShepherdManager[id] === undefined) {\n Wistia.EventShepherdManager[id] = new EventShepherd(embedElement);\n }\n\n Wistia.EventShepherdManager[id].addListener(event, embedElement, fn);\n\n return () => {\n Wistia.EventShepherdManager[id].removeListener(event, embedElement, fn);\n };\n }\n\n return bindify.bind.call(this, event, fn);\n },\n\n off(event, fn) {\n if (event === 'crosstime' && this.crossTime) {\n return this.crossTime.removeBinding(arguments[1], arguments[2]);\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n return this.betweenTimes.removeBinding(arguments[1], arguments[2], arguments[3]);\n }\n\n const embedElement = this.embedElement || this.container;\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n // return early if the EventShepherd for the hashedId is not defined\n if (Wistia.EventShepherdManager[id] === undefined) {\n return () => {};\n }\n return Wistia.EventShepherdManager[id].removeListener(event, embedElement, fn);\n }\n\n return bindify.unbind.call(this, event, fn);\n },\n\n rebind(event, callback) {\n this.unbind(event, callback);\n this.bind(event, callback);\n return this;\n },\n\n // fire an event trigger on the video. for play/pause/ended callbacks.\n trigger(event, ...args) {\n bindify.trigger.call(this, event, ...args);\n return this;\n },\n\n bindNamed() {\n return bindify.bindNamed.apply(this, arguments);\n },\n\n unbindNamed() {\n return bindify.unbindNamed.apply(this, arguments);\n },\n\n unbindAllInNamespace() {\n return bindify.unbindAllInNamespace.apply(this, arguments);\n },\n };\n}\n\nexport const makeWbindable = function (obj) {\n for (let k in Wistia.bindable) {\n const v = Wistia.bindable[k];\n if (!obj[k]) {\n obj[k] = v;\n }\n }\n};\n\nconst identifierFromEmbedElement = function (embedElement) {\n if (embedElement?.mediaId) {\n return embedElement.mediaId;\n }\n\n if (embedElement?.id) {\n return embedElement.id;\n }\n};\n","import merge from 'lodash.merge';\nimport type { EmbedOptions } from '../types/EmbedOptions.ts';\n\nexport const getWistiaOptions = (mediaId: string): EmbedOptions => {\n if (!window.wistiaOptions) {\n return {};\n }\n\n const globalOptions: EmbedOptions = window.wistiaOptions._all ?? {};\n\n const mediaOptions: EmbedOptions = window.wistiaOptions[mediaId] ?? {};\n\n return merge(globalOptions, mediaOptions);\n};\n","export const pageLoaded = (fn, timeout = 4000, doc = document, win = window) => {\n if (/loaded|complete/.test(doc.readyState)) {\n setTimeout(fn, 0);\n } else {\n const unbind = () => {\n win.removeEventListener('load', onPageLoad, false);\n };\n\n const onPageLoad = () => {\n clearTimeout(onLoadTimeout);\n unbind();\n fn();\n };\n\n win.addEventListener('load', onPageLoad, false);\n\n const onLoadTimeout = setTimeout(() => {\n unbind();\n fn();\n }, timeout);\n }\n};\n","import { h, JSX } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport type { PlayerLanguage, Players } from '../../../types/player-api-types.ts';\nimport { usePlayerData } from '../hooks/usePlayerData.tsx';\nimport { CONTROL_BAR_HEIGHT, DEFAULT_ASPECT } from '../utilities/constants.ts';\nimport { BigPlayButton } from '../../media/players/vulcanV2Player/shared/ui_components/BigPlayButton.tsx';\nimport { ProgressiveThumbnail } from '../../shared/ProgressiveThumbnail.jsx';\nimport { getLanguage } from '../../shared/translations.js';\nimport { thumbnailAssets as getThumbnailAssets } from '../../../utilities/assets.js';\nimport { controlMultiplierEstimatedByWidth } from '../../../utilities/fit-control.js';\nimport {\n getDefaultBigPlayButtonBorderRadius,\n getDefaultControlBarDistance,\n getDefaultPlayerBorderRadius,\n} from '../../../utilities/roundedPlayerDefaults.ts';\nimport { getCssGradient, getGradientColor } from '../../../utilities/gradients.ts';\nimport { isGradient } from '../../../types/gradient.ts';\nimport { getVideoPlayerIconColor } from '../../../utilities/color-utils.ts';\n\nconst MAX_SCALE = 1.3;\nconst MIN_SCALE = 0.3;\nconst DEFAULT_LOWER_CUTOFF_WIDTH = 640;\nconst DEFAULT_UPPER_CUTOFF_WIDTH = 960;\n\ninterface PreloadThumbnailProps {\n isPlayPending: boolean;\n mediaId: string;\n playerType: Players;\n playerWidth: number;\n}\n\nexport const PreloadThumbnail = ({\n isPlayPending,\n mediaId,\n playerType,\n playerWidth,\n}: PreloadThumbnailProps): JSX.Element => {\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (isPlayPending) {\n setIsLoading(true);\n }\n }, [isPlayPending]);\n\n const { embedOptions, mediaData } = usePlayerData();\n const {\n aspect,\n bigPlayButton,\n bpbTime,\n bigPlayButtonBorderRadius,\n contrastIcons,\n controlBarBorderRadius,\n controlsVisibleOnLoad,\n floatingControlBar,\n noMixBlendMode,\n opaqueControls,\n playButton,\n playerBorderRadius,\n playerColor,\n playerColorGradient,\n playerLanguage,\n roundedPlayer,\n thumbnailAltText,\n transparentLetterbox,\n } = embedOptions;\n const { aspectRatio, assets, duration, mediaType, name } = mediaData;\n const height = playerWidth / (aspect ?? aspectRatio ?? DEFAULT_ASPECT);\n\n const scale = Math.min(\n MAX_SCALE,\n Math.max(\n MIN_SCALE,\n controlMultiplierEstimatedByWidth(playerWidth, [\n DEFAULT_LOWER_CUTOFF_WIDTH,\n DEFAULT_UPPER_CUTOFF_WIDTH,\n ]),\n ),\n );\n\n const calculatedControlsVisibleOnLoad = controlsVisibleOnLoad && playerType === 'vulcan-v2';\n\n const defaultControlBarDistance = getDefaultControlBarDistance({\n controlBarBorderRadius,\n floatingControlBar,\n roundedPlayer,\n });\n const calculatedControlBarDistance = calculatedControlsVisibleOnLoad\n ? (CONTROL_BAR_HEIGHT / 2 + defaultControlBarDistance) * scale\n : defaultControlBarDistance * scale;\n\n const calculatedBigPlayButtonBorderRadius =\n getDefaultBigPlayButtonBorderRadius({\n bigPlayButtonBorderRadius,\n roundedPlayer,\n }) * scale;\n\n const calculatedPlayerBorderRadius =\n getDefaultPlayerBorderRadius({\n playerBorderRadius,\n roundedPlayer,\n }) * scale;\n\n const backgroundColor =\n transparentLetterbox === true || calculatedPlayerBorderRadius > 0 ? 'transparent' : undefined;\n\n const thumbnailAssets = getThumbnailAssets(assets, {});\n\n const calculatedPlayerLanguage =\n (getLanguage(playerLanguage) as PlayerLanguage | undefined) ??\n (getLanguage('en-US') as PlayerLanguage);\n\n const shouldShowBigPlayButton = bigPlayButton !== false && playButton !== false;\n const shouldShowBpbTime = bpbTime === true || bpbTime === 'true';\n\n const backgroundGradientCss = playerColorGradient?.on\n ? getCssGradient(playerColorGradient)\n : undefined;\n\n // if the gradient is enabled and valid, use the first color in the gradient as the player color,\n // otherwise, just use the player color like normal\n const playerColorOrGradientColor =\n playerColorGradient?.on && isGradient(playerColorGradient)\n ? (getGradientColor(playerColorGradient) ?? playerColor)\n : playerColor;\n\n const handleClick = () => {\n setIsLoading(true);\n };\n\n return (\n // Provide the icon color for the BigPlayButton\n <div\n style={{\n '--wistia-player-icon-color': getVideoPlayerIconColor(\n playerColor ?? '#636155',\n contrastIcons ?? false,\n playerColorGradient?.on === true,\n ),\n }}\n >\n <div\n class=\"w-css-reset\"\n style={{\n cursor: 'pointer',\n width: '100%',\n height: `${height}px`,\n }}\n onClick={handleClick}\n tabIndex={shouldShowBigPlayButton ? -1 : 0}\n >\n <ProgressiveThumbnail\n backgroundColor={backgroundColor}\n images={thumbnailAssets}\n isVisible={true}\n hashedId={mediaId}\n playerBorderRadius={calculatedPlayerBorderRadius}\n swatchEnabled={false}\n uiHasRendered={false}\n thumbnailAltText={thumbnailAltText ?? ''}\n height={`${height}px`}\n />\n </div>\n {shouldShowBigPlayButton && (\n <BigPlayButton\n borderRadius={calculatedBigPlayButtonBorderRadius}\n buttonTabIndex={0}\n color={playerColorOrGradientColor}\n controlBarDistance={calculatedControlBarDistance}\n duration={duration ?? 0}\n hasContrastIcons={contrastIcons ?? false}\n isLiveMedia={mediaType === 'LiveStream'}\n isLoading={isLoading}\n isOpaque={opaqueControls}\n isVisible={true}\n noMixBlendMode={noMixBlendMode}\n onClick={handleClick}\n playerLanguage={calculatedPlayerLanguage}\n scale={scale}\n showBpbTime={shouldShowBpbTime}\n videoName={name ?? ''}\n videoWidth={playerWidth}\n backgroundGradientCss={backgroundGradientCss}\n ></BigPlayButton>\n )}\n </div>\n );\n};\n","\n/*\n * @license @wistia/type-guards v0.9.3\n *\n * Copyright (c) 2023-2025, Wistia, Inc. and its affiliates.\n *\n * This source code is unlicensed, all rights reserved.\n */\n\n\n// index.ts\nvar FALSY_VALUES = [false, 0, -0, 0n, \"\", null, void 0, Number.NaN];\nvar isNull = (value) => value === null;\nvar isNotNull = (value) => !isNull(value);\nvar isUndefined = (value) => value === void 0;\nvar isNotUndefined = (value) => !isUndefined(value);\nvar isNil = (value) => isNull(value) || isUndefined(value);\nvar isNotNil = (value) => !isNil(value);\nvar isString = (value) => typeof value === \"string\";\nvar isNotString = (value) => !isString(value);\nvar isEmptyString = (value) => isString(value) && value === \"\";\nvar isNonEmptyString = (value) => isString(value) && !isEmptyString(value);\nvar isNumber = (value) => typeof value === \"number\";\nvar isNotNumber = (value) => !isNumber(value);\nvar isNaN = (value) => Number.isNaN(value);\nvar isInteger = (value) => Number.isInteger(value);\nvar isRecord = (value) => isNotNil(value) && typeof value === \"object\" && !(value instanceof Array);\nvar isNotRecord = (value) => !isRecord(value);\nvar isEmptyRecord = (value) => isRecord(value) && Object.keys(value).length === 0;\nvar isNonEmptyRecord = (value) => isRecord(value) && Object.keys(value).length > 0;\nvar isArray = (value) => isNotNil(value) && typeof value === \"object\" && value instanceof Array;\nvar isNotArray = (value) => !isArray(value);\nvar isEmptyArray = (value) => isArray(value) && value.length === 0;\nvar isNonEmptyArray = (value) => isArray(value) && value.length > 0;\nvar isFunction = (value) => isNotNil(value) && typeof value === \"function\";\nvar isNotFunction = (value) => !isFunction(value);\nvar isBoolean = (value) => isNotNil(value) && typeof value === \"boolean\";\nvar isNotBoolean = (value) => !isBoolean(value);\nvar isVoid = (value) => value === void 0;\nvar isNotVoid = (value) => !isVoid(value);\nvar isError = (value) => {\n return isNotNil(value) && value instanceof Error;\n};\nvar isFalsy = (value) => (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n FALSY_VALUES.includes(value) || Number.isNaN(value)\n);\nvar isTruthy = (value) => (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n !FALSY_VALUES.includes(value) && !Number.isNaN(value)\n);\nvar hasKey = (value, key) => isNonEmptyRecord(value) && key in value;\nexport {\n hasKey,\n isArray,\n isBoolean,\n isEmptyArray,\n isEmptyRecord,\n isEmptyString,\n isError,\n isFalsy,\n isFunction,\n isInteger,\n isNaN,\n isNil,\n isNonEmptyArray,\n isNonEmptyRecord,\n isNonEmptyString,\n isNotArray,\n isNotBoolean,\n isNotFunction,\n isNotNil,\n isNotNull,\n isNotNumber,\n isNotRecord,\n isNotString,\n isNotUndefined,\n isNotVoid,\n isNull,\n isNumber,\n isRecord,\n isString,\n isTruthy,\n isUndefined,\n isVoid\n};\n//# sourceMappingURL=index.mjs.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","import { Fragment, h, render } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { isEmptyString, isNil, isNonEmptyString } from '@wistia/type-guards';\nimport { getGradientColor } from '../../utilities/gradients.ts';\nimport { Wistia } from '../../wistia_namespace.ts';\nimport type { Authorization, FullscreenState } from './types.ts';\nimport type { EmailChangeEventData } from '../../types/custom-event-data.js';\nimport type {\n IMPL_CREATED_EVENT_TYPE,\n LOADED_MEDIA_DATA_EVENT_TYPE,\n WistiaPlayerEvents,\n} from '../../types/events.ts';\nimport type {\n AllowedQualities,\n EventListenerMap,\n Impl,\n JudyContext,\n LanguageSimplified,\n Localization,\n LoggerType,\n MediaData,\n MediaDataServerErrorResponse,\n Mux,\n OverlayOptions,\n Players,\n PlayerState,\n PopoverAnimation,\n PopoverContentSettings,\n PublicApi,\n PublicApiOptions,\n ReplaceWithMediaOptions,\n WistiaLocalStorage,\n} from '../../types/player-api-types.ts';\nimport type { FetchMediaDataOptions } from '../../utilities/fetchMediaData.ts';\nimport type { EmbedOptions } from '../../types/EmbedOptions.ts';\nimport type { PluginConfigs, PluginInstances } from '../../types/plugins.ts';\nimport { PreloadThumbnail } from './components/PreloadThumbnail.tsx';\nimport { PlayerDataProvider } from './hooks/usePlayerData.tsx';\nimport { AUDIO_DEFAULT_HEIGHT, DEFAULT_ASPECT } from './utilities/constants.ts';\nimport { PlayerDataHandler } from './utilities/PlayerDataHandler.ts';\nimport { appHostname } from '../../appHostname.js';\nimport { thumbnailAssets as getThumbnailAssets } from '../../utilities/assets.js';\nimport { didWinCoinFlip } from '../../utilities/coinFlip.ts';\nimport { detectIsMobile } from '../../utilities/detect.js';\nimport { dynamicImport } from '../../utilities/dynamicImport.ts';\nimport { removeEmbedOptionStore, setEmbedOptionStore } from '../../utilities/embedOptionStore.ts';\nimport { elemWidth } from '../../utilities/elem.js';\nimport {\n AFTER_REPLACE_EVENT,\n API_READY_EVENT,\n BEFORE_REPLACE_EVENT,\n IMPL_CREATED_EVENT,\n INPUT_CONTEXT_CHANGE_EVENT,\n INTERNAL_API_ON_FIND_EVENT,\n LOADED_MEDIA_DATA_EVENT,\n MUTE_CHANGE_EVENT,\n} from '../../utilities/eventConstants.ts';\nimport { extractEmailFromParams } from '../../utilities/extractEmailFromParams.ts';\nimport { cdnFastWistiaComHost, eV1Protocol, eV1HostWithPort } from '../../utilities/hosts.js';\nimport { inferPageUrl } from '../../utilities/inferPageUrl.ts';\nimport { buildContext, choosePlayer } from '../../utilities/judy.js';\nimport { getDefaultPlayerBorderRadius } from '../../utilities/roundedPlayerDefaults.ts';\nimport { runScript } from '../../utilities/runScript.js';\nimport { seqId } from '../../utilities/seqid.js';\nimport { MUX_PERCENTAGE_TO_ENABLE, shouldEnableMux } from '../../utilities/shouldEnableMux.ts';\nimport { countMetric } from '../../utilities/simpleMetrics.js';\nimport { isVisitorTrackingEnabled } from '../../utilities/trackingConsentApi.js';\nimport { proto } from '../../utilities/url.js';\nimport {\n getWistiaLocalStorage,\n updateWistiaLocalStorage,\n} from '../../utilities/wistiaLocalStorage.js';\nimport { getWistiaOptions } from '../../utilities/wistiaOptions.ts';\nimport { maybeStartWistiaQueue } from '../../utilities/wistiaQueue.ts';\nimport { wlog } from '../../utilities/wlog.js';\nimport { injectJsonLd, removeInjectedJsonLd } from '../../utilities/injectJsonLd.js';\nimport { getInitialMediaData } from './utilities/getInitialMediaData.ts';\nimport { isMediaDataError } from '../../utilities/mediaDataError.ts';\nimport { uncacheMediaData } from '../../utilities/remote-data-cache.ts';\nimport {\n camelCaseToKebabCase,\n kebabCaseToCamelCase,\n} from '../../utilities/camelCaseToKebabCase.ts';\nimport { ControlInstances } from '../../types/controls.ts';\nimport { Gradient, isGradient } from '../../types/gradient.ts';\n\n// The component will not run without these attributes.\nconst requiredAttributes = ['media-id'];\n\n// Optional attributes surfaced in documentation to our customers.\nconst optionalPublicAttributes = [\n 'aspect',\n 'audio-description-control',\n 'autoplay',\n 'big-play-button',\n 'branding',\n 'contrast-icons',\n 'controls-visible-on-load',\n 'copy-link-and-thumbnail',\n 'current-time',\n 'do-not-track',\n 'email',\n 'end-video-behavior',\n 'fit-strategy',\n 'fullscreen-control',\n 'language',\n 'muted',\n 'opaque-controls',\n 'playback-rate-control',\n 'play-bar-control',\n 'player-color',\n 'playlist-links',\n 'playlist-loop',\n 'play-pause-control',\n 'play-pause-notifier',\n 'play-suspended-off-screen',\n 'popover-animate-thumbnail',\n 'popover-animation',\n 'popover-border-color',\n 'popover-border-radius',\n 'popover-border-width',\n 'popover-box-shadow',\n 'popover-caption',\n 'popover-caption-container',\n 'popover-content',\n 'popover-disable-autoplay',\n 'popover-overlay-color',\n 'popover-overlay-opacity',\n 'popover-prevent-scroll',\n 'popover-show-on-load',\n 'poster',\n 'preload',\n 'quality-control',\n 'quality-max',\n 'quality-min',\n 'resumable',\n 'rounded-player',\n 'rounded-playlist',\n 'rotate-to-fullscreen',\n 'seo',\n 'settings-control',\n 'silent-autoplay',\n 'transparent-letterbox',\n 'video-quality',\n 'volume',\n 'volume-control',\n 'wistia-popover',\n];\n\n// Optional attributes used by Wistia developers.\nconst optionalPrivateAttributes = [\n 'big-play-button-border-radius',\n 'control-bar-border-radius',\n 'embed-host',\n 'hls',\n 'page-url',\n 'player-border-radius',\n 'player-force',\n 'stats-url',\n 'swatch',\n 'unique-id',\n 'use-web-component',\n];\n\nconst defaultEmbedOptions = {\n audioDescriptionControl: false,\n autoplay: false,\n bigPlayButton: true,\n bigPlayButtonBorderRadius: undefined,\n contrastIcons: false,\n controlBarBorderRadius: undefined,\n controlsVisibleOnLoad: true,\n copyLinkAndThumbnail: true,\n currentTime: 0,\n doNotTrack: false,\n endVideoBehavior: 'default',\n fitStrategy: 'contain',\n fullscreenControl: true,\n hls: true,\n opaqueControls: false,\n playBarControl: true,\n playerBorderRadius: undefined,\n playerColor: '636155',\n playPauseControl: true,\n playPauseNotifier: true,\n playbackRateControl: true,\n playlistLinks: '',\n playlistLoop: false,\n playSuspendedOffScreen: 'auto',\n popoverAnimateThumbnail: false,\n popoverAnimation: 'slide',\n popoverBorderColor: 'ffffff',\n popoverBorderRadius: 0,\n popoverBorderWidth: 0,\n popoverBoxShadow: true,\n popoverCaption: '',\n popoverCaptionContainer: '',\n popoverContent: undefined,\n popoverDisableAutoplay: false,\n popoverOverlayColor: '000000',\n popoverOverlayOpacity: 0.5,\n popoverPreventScroll: false,\n popoverShowOnLoad: false,\n poster: '',\n qualityControl: true,\n qualityMax: undefined,\n qualityMin: undefined,\n resumable: 'auto',\n rotateToFullscreen: false,\n roundedPlayer: undefined,\n seo: true,\n settingsControl: true,\n silentAutoplay: false,\n state: 'beforeplay' as PlayerState,\n statsUrl: null,\n transparentLetterbox: false,\n volume: 1,\n volumeControl: true,\n wistiaPopover: false,\n};\n\n/**\n * Returns the swatch url for a given mediaId\n * @param {string} mediaId\n * @param {string} embedHost\n * @returns {string}\n */\nconst getSwatchUrl = (mediaId, embedHost = '') => {\n const fastHost = cdnFastWistiaComHost(embedHost);\n return `https://${fastHost}/embed/medias/${mediaId}/swatch`;\n};\n\nconst PRELOAD_CLICK_OPTIONS: AddEventListenerOptions = { once: true };\n\nexport class WistiaPlayer extends HTMLElement {\n public plugin: PluginInstances | null;\n\n // can be null when doing document.createElement and referencing an attribute/property\n // before being injected into the dom\n #_api: PublicApi | null;\n\n #_eventListeners: EventListenerMap = {};\n\n // private internal fullscreen state of the video. Stored as a property on the web component\n // for easy transfer to another web component during replace if necessary.\n #_fullscreenState: FullscreenState = {\n heightBeforeFullscreen: undefined,\n inFullscreen: false,\n nativeFullscreen: false,\n widthBeforeFullscreen: undefined,\n };\n\n #_impl: Impl | undefined;\n\n readonly #_internals: ElementInternals | undefined;\n\n #_jsonLdId: string;\n\n #_judyContext: JudyContext | null = null;\n\n #_logger: LoggerType;\n\n // private value used during the replace flow to pass along the old engine.\n #_oldEngine: object | null | undefined;\n\n readonly #_playerData: PlayerDataHandler;\n\n #_playerType: Players;\n\n readonly #_removeEventListeners: (() => void)[] = [];\n\n #cachedRemapTime:\n | ((fromLanguage: string, toLanguage: string, fromTime: number) => number)\n | undefined = undefined;\n\n #hasElementConnectedToDOM = false;\n\n #paddingTop = '0px';\n\n #playPending = false;\n\n #preactRoot: HTMLDivElement | null = null;\n\n #preloadThumbnailRoot: HTMLDivElement | null = null;\n\n readonly #publicApiScript: Promise<void> = runScript(\n `${proto()}//${appHostname('fast')}/assets/external/publicApi.js`,\n ) as Promise<void>;\n\n #resizeObserver: ResizeObserver | null = null;\n\n /**\n * Represents one embedded Wistia media player.\n * @constructor\n */\n public constructor() {\n super();\n if ('attachInternals' in HTMLElement.prototype && 'states' in ElementInternals.prototype) {\n this.#_internals = this.attachInternals();\n this.#_internals.states.add('--initializing');\n }\n\n this.attachShadow({ mode: 'open' });\n\n this.dispatchEvent(new CustomEvent('load-start'));\n\n this.paddingTop = getComputedStyle(this).paddingTop;\n\n // Set up a prefixed logger\n this.#_logger = (wlog as unknown as LoggerType).getPrefixedFunctions(\n 'WistiaPlayer',\n ) as LoggerType;\n\n this.#_playerData = new PlayerDataHandler();\n\n // Wistia global setup if this is the first time we've seen a Wistia player\n Wistia.wistia ??= Date.now();\n }\n\n // --------------------------------------------------\n // Public properties\n // --------------------------------------------------\n\n /**\n * Return an array of the attributes that we want to observe for changes.\n * If one of these attributes changes, the attributeChangedCallback will be called.\n * @returns {string[]}\n */\n public static get observedAttributes(): string[] {\n return [...requiredAttributes, ...optionalPublicAttributes, ...optionalPrivateAttributes];\n }\n\n /**\n * @returns {FullscreenState} private fullscreenState of the video.\n */\n public get _fullscreenState(): FullscreenState {\n return this.#_fullscreenState;\n }\n\n /**\n * @param {FullscreenState} state private fullscreenState of the video.\n */\n public set _fullscreenState(state: FullscreenState) {\n this.#_fullscreenState = state;\n }\n\n /**\n * @deprecated The method should not be used\n * @returns {object | null |undefined } private - old engine being transferred.\n */\n public get _oldEngine(): object | null | undefined {\n return this.#_oldEngine;\n }\n\n /**\n * @deprecated The method should not be used\n * @param {object | null | undefined} engine private old engine to be transferred of the video.\n */\n public set _oldEngine(engine: object | null | undefined) {\n this.#_oldEngine = engine;\n }\n\n /**\n * Returns the aspect ratio (width / height) of the originally uploaded video or given aspect ratio.\n * @returns {number}\n */\n public get aspect(): number {\n const fallbackAspect =\n !Number.isNaN(this.offsetWidth / this.offsetHeight) &&\n Number.isFinite(this.offsetWidth / this.offsetHeight)\n ? this.offsetWidth / this.offsetHeight\n : DEFAULT_ASPECT;\n\n return (\n this.#_impl?.aspect() ??\n this.embedOptions.aspect ??\n (this.#getValueFromAttribute('aspect') as number | null) ??\n fallbackAspect\n );\n }\n\n /**\n * Sets the aspect ratio (width / height) of the video.\n * @param {number} newAspect\n * @returns {void}\n */\n public set aspect(newAspect: number) {\n this.#setSyncedEmbedOption('aspect', newAspect);\n\n // By re-setting width to the same value, we trigger the aspect ratio to be recalculated.\n this.#_impl?.width(elemWidth(this) as number, { constrain: true });\n }\n\n /**\n * Returns whether the Audio Description control in the control bar is enabled.\n * @returns {boolean}\n */\n public get audioDescriptionControl(): boolean {\n return this.#getSyncedEmbedOption('audioDescriptionControl') as boolean;\n }\n\n /**\n * Enable or disable the Audio Description control in the control bar. Note: Even if set to `true`, this control will\n * only appear if the video has an Audio Description track.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set audioDescriptionControl(shouldDisplay: boolean) {\n this.#_impl?.audioDescriptionControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('audioDescriptionControl', shouldDisplay);\n }\n\n /**\n * sets the authorization property to be used for authorized asset delivery\n * @param {Authorization}\n * @returns {void}\n */\n public set authorization(auth: Authorization) {\n this.#setSyncedEmbedOption('authorization', auth);\n }\n\n /**\n * Returns if the player should attempt to autoplay as soon as it's ready.\n * @returns {boolean}\n */\n public get autoplay(): boolean {\n return this.#getSyncedEmbedOption('autoplay') as boolean;\n }\n\n /**\n * Sets the attribute to enable/disable autoplay.\n * @param {boolean} shouldSetAutoplay\n * @returns {void}\n */\n public set autoplay(shouldSetAutoplay: boolean) {\n // This method is called a second time when the attribute value (string | null)\n // is set on the element. Checking for typeof boolean here prevents us from\n // saving that second value to the api.\n if (typeof shouldSetAutoplay !== 'boolean') {\n return;\n }\n this.#setSyncedEmbedOption('autoplay', shouldSetAutoplay);\n\n // Sync the element's autoplay attribute with this property\n // This matches the behavior of the native <video> element\n if (shouldSetAutoplay) {\n this.setAttribute('autoplay', '');\n } else {\n this.removeAttribute('autoplay');\n }\n }\n\n /**\n * Returns if the big play button control will appear in the center of the video before play.\n * @returns {boolean}\n */\n public get bigPlayButton(): boolean {\n return this.#getSyncedEmbedOption('bigPlayButton') as boolean;\n }\n\n /**\n * Sets if the big play button control will appear in the center of the video before play.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set bigPlayButton(shouldDisplay: boolean) {\n this.#_impl?.bigPlayButtonEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('bigPlayButton', shouldDisplay);\n }\n\n /**\n * Returns the border radius of the big play button.\n * @returns {number}\n */\n public get bigPlayButtonBorderRadius(): number {\n return this.#getSyncedEmbedOption('bigPlayButtonBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the big play button.\n * @param {number} radius\n * @returns {void}\n */\n public set bigPlayButtonBorderRadius(radius: number) {\n this.#_impl?.setBigPlayButtonBorderRadius(radius);\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('bigPlayButtonBorderRadius', Number(radius));\n }\n\n public get branding(): boolean {\n return this.#getSyncedEmbedOption('branding') as boolean;\n }\n\n /**\n * This can only be used to enable the wistia logo for players\n * that might not otherwise require it. We don't want to introduce\n * the ability to easily hide the wistia logo for players where it's required.\n */\n public set branding(value: unknown) {\n if (value === 'true' || value === true) {\n this.#setSyncedEmbedOption('branding', true);\n }\n }\n\n /**\n * Returns a new static normalized TimeRanges object that represents the ranges of the media resource,\n * if any, that the user agent has buffered at the moment the buffered property is accessed.\n * @returns {TimeRanges}\n */\n public get buffered(): TimeRanges {\n return this.#_impl?.getStandardBuffered() ?? ({} as TimeRanges);\n }\n\n public get captionsEnabled(): boolean {\n return this.#_api?.captionsEnabled() ?? false;\n }\n\n public set captionsEnabled(enabled: boolean) {\n this.#_api?.captionsEnabled(enabled);\n }\n\n // the public api has a different syntax for setting the captionsLanguage and getting it\n public get captionsLanguage(): LanguageSimplified {\n return this.#_api?.captionsLanguage() ?? this.#defaultLocalization();\n }\n\n public set captionsLanguageCode(languageCode: string) {\n this.#_api?.captionsLanguageCode(languageCode);\n }\n\n public get captionsLanguageCode(): string {\n return this.#_api?.captionsLanguageCode() ?? this.#defaultLocalization().wistiaLanguageCode;\n }\n\n public get captionsLanguages(): LanguageSimplified[] {\n return this.#_api?.captionsLanguages() ?? [this.#defaultLocalization()];\n }\n\n /**\n * Returns the status of the contrastIcons embed option, which determines\n * if the the player controls should use icons with accessible contrast or default to white.\n *\n * @returns {boolean}\n */\n public get contrastIcons(): boolean {\n return this.#getSyncedEmbedOption('contrastIcons') as boolean;\n }\n\n /**\n * When true the player will use icons with accessible contrast or default to white.\n * @param {boolean} contrastIcons\n * @returns {void}\n */\n public set contrastIcons(contrastIcons: unknown) {\n const valueAsBoolean = Boolean(contrastIcons);\n this.#_impl?.contrastIcons(valueAsBoolean);\n this.#setSyncedEmbedOption('contrastIcons', valueAsBoolean);\n }\n\n /**\n * Returns the border radius of the control bar.\n * @returns {number}\n */\n public get controlBarBorderRadius(): number {\n return this.#getSyncedEmbedOption('controlBarBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the control bar.\n * @param {number} radius\n * @returns {void}\n */\n public set controlBarBorderRadius(radius: number) {\n this.#_impl?.setControlBarBorderRadius(radius);\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('controlBarBorderRadius', Number(radius));\n }\n\n /**\n * Getter. Returns all defined controls.\n * @returns {ControlInstances} returns object of defined controls. Please note this may return an\n * empty object if not controls have yet been defined.\n */\n public get controls(): ControlInstances {\n if (this.#_impl) {\n // We don't want customers modifying this object (adding/deleting what is already here).\n // But they may need to interact/modify the existing ones, so we only use `seal`.\n return Object.seal({ ...this.#_impl.controls });\n }\n return {};\n }\n\n /**\n * Returns whether or not to hide the controls on load.\n * @returns {boolean}\n */\n public get controlsVisibleOnLoad(): boolean {\n return this.#getSyncedEmbedOption('controlsVisibleOnLoad') as boolean;\n }\n\n /**\n * Sets whether or not to hide the controls on load.\n * @param {boolean} shouldHide\n * @returns {void}\n */\n public set controlsVisibleOnLoad(shouldHide: boolean) {\n this.#_impl?.renderUI();\n this.#setSyncedEmbedOption('controlsVisibleOnLoad', shouldHide);\n }\n\n /**\n * Returns whether or the copy link and thumbnail option from the context menu\n * is available.\n * @returns {boolean}\n */\n public get copyLinkAndThumbnail(): boolean {\n return this.#getSyncedEmbedOption('copyLinkAndThumbnail') as boolean;\n }\n\n /**\n * Enable or disable the copy link and thumbnail option from the context menu.\n * @param {boolean} enabled\n * @returns {void}\n */\n public set copyLinkAndThumbnail(enabled: boolean) {\n const prevVal = this.copyLinkAndThumbnail;\n this.#setSyncedEmbedOption('copyLinkAndThumbnail', enabled);\n\n if (prevVal !== enabled) {\n this.dispatchEvent(\n new CustomEvent('copy-link-and-thumbnail-change', {\n detail: { copyLinkAndThumbnail: enabled },\n }),\n );\n }\n }\n\n /**\n * Returns the current time of the video as a decimal in seconds.\n * @returns {number}\n */\n public get currentTime(): number {\n return (this.#_impl?.time() as number | null) ?? this.embedOptions.currentTime ?? 0;\n }\n\n /**\n * Sets the current time of the video as a decimal in seconds.\n * @param {number} newTime\n * @returns {void}\n */\n public set currentTime(newTime: number) {\n void this.#_impl?.time(newTime);\n this.#setSyncedEmbedOption('currentTime', newTime);\n }\n\n /**\n * @returns {object} helpful object for debugging\n */\n public get debug(): object {\n return {\n impl: this.#_impl,\n engine: this.#_impl?.engine,\n };\n }\n\n /**\n * Returns the public api instance.\n * @deprecated this is a deprecated method and should not be used.\n * @returns {PublicApi | null}\n */\n public get deprecatedApiDoNotUse(): PublicApi | null {\n return this.#_api;\n }\n\n /**\n * Returns the description of the video, as used in the JSON-LD schema\n * @returns {string}\n */\n public get description(): string {\n return (\n this.#_playerData.mediaData.seoDescription ?? this.#_api?._mediaData?.seoDescription ?? ''\n );\n }\n\n /**\n * Returns the status of the do not track embed option that controls whether the player\n * sends tracking pings.\n * @returns {boolean}\n */\n public get doNotTrack(): boolean {\n return this.#getSyncedEmbedOption('doNotTrack') as boolean;\n }\n\n /**\n * When present the player will not send tracking events for stats.\n * Note that this must be set at the time of embed to have any impact.\n * @param {boolean} dontTrack\n * @returns {void}\n */\n public set doNotTrack(dontTrack: boolean) {\n this.#setSyncedEmbedOption('doNotTrack', dontTrack);\n }\n\n /**\n * Returns the duration of the video in seconds.\n * @returns {number}\n */\n public get duration(): number {\n return this.#_impl?.duration() ?? 0;\n }\n\n /**\n * Returns the email associated with this viewing session.\n * If no email is associated, it will return undefined.\n * NOTE: This attribute will impact the entire page and is not scoped to the player.\n * @returns {string | undefined}\n */\n // the public api doesn't allow for unsetting an email, so we don't wan to allow the setter\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get email(): string | undefined {\n return (\n extractEmailFromParams(this.#pageUrl) ??\n ((getWistiaLocalStorage() as WistiaLocalStorage)[this.#pageUrl]?.trackEmail as\n | string\n | undefined) ??\n this.embedOptions.email ??\n undefined\n );\n }\n\n /**\n * Associates the view of this media with the given email value.\n * This email will appear in stats for the video.\n * NOTE: This attribute will impact the entire page and is not scoped to the player.\n * @param {string} newEmail\n * @returns {void}\n */\n public set email(newEmail: string) {\n if (this.email === newEmail) {\n return;\n }\n this.#updateEmail(newEmail);\n this.#setSyncedEmbedOption('email', newEmail);\n }\n\n /**\n * Returns the overridding embed host for the player.\n * Internal use only.\n * @returns {string | null | undefined}\n */\n // we don't want to allow for unsetting this option\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get embedHost(): string | null | undefined {\n return this.#getSyncedEmbedOption('embedHost') as string | null | undefined;\n }\n\n /**\n * Sets the overridding embed host for the player.\n * Internal use only.\n * @param {string} newEmbedHost\n * @returns {void}\n */\n public set embedHost(newEmbedHost: string) {\n this.#setSyncedEmbedOption('embedHost', newEmbedHost);\n }\n\n /**\n * Returns all the embed options being set on the WistiaPlayer from attributes and mediaData json\n * @returns {EmbedOptions }\n */\n public get embedOptions(): EmbedOptions {\n return this.#_playerData.embedOptions;\n }\n\n /**\n * Returns whether the video has ended playback.\n * @returns {boolean}\n */\n public get ended(): boolean {\n return this.#_impl?.state() === 'ended';\n }\n\n /**\n * Returns the current end video behavior value\n * @returns {'default' | 'loop' | 'reset'}\n */\n public get endVideoBehavior(): NonNullable<EmbedOptions['endVideoBehavior']> {\n return this.#getSyncedEmbedOption('endVideoBehavior') as NonNullable<\n EmbedOptions['endVideoBehavior']\n >;\n }\n\n /**\n * Sets the behavior for what the video should do when it ends.\n * @param {'default' | 'loop' | 'reset'} behavior\n * @returns {void}\n */\n public set endVideoBehavior(behavior: NonNullable<EmbedOptions['endVideoBehavior']>) {\n // loop is a slightly odd option, as it's set as an attribute directly on the\n // underlying <video /> element. So we must do more than just change the _impl._attrs\n // for it to be updated.\n if (behavior === 'loop') {\n this.#_impl?.addLoopBehavior();\n } else {\n this.#_impl?.removeLoopBehavior();\n }\n\n this.#setSyncedEmbedOption('endVideoBehavior', behavior);\n }\n\n /**\n * Returns the embed's event key if it exists.\n * @returns {string | undefined}\n */\n public get eventKey(): string | undefined {\n return this.#_impl?.eventKey();\n }\n\n /**\n * Returns how the video should be sized within its container.\n * @returns {'contain' | 'cover' | 'fill'}\n */\n public get fitStrategy(): NonNullable<EmbedOptions['fitStrategy']> {\n return this.#getSyncedEmbedOption('fitStrategy') as NonNullable<EmbedOptions['fitStrategy']>;\n }\n\n /**\n * Sets how the video should be sized within its container.\n * @param {'contain' | 'cover' | 'fill'} strategy\n * @returns {void}\n */\n public set fitStrategy(strategy: NonNullable<EmbedOptions['fitStrategy']>) {\n this.#setSyncedEmbedOption('fitStrategy', strategy);\n }\n\n /**\n * Returns if the fullscreen button control will appear in the control bar.\n * @returns {boolean}\n */\n public get fullscreenControl(): boolean {\n return this.#getSyncedEmbedOption('fullscreenControl') as boolean;\n }\n\n /**\n * Sets if the fullscreen button control is enabled in the control bar.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set fullscreenControl(shouldDisplay: boolean) {\n this.#_impl?.fullscreenControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('fullscreenControl', shouldDisplay);\n }\n\n /**\n * Returns if the video should use HLS playback.\n * Internal only.\n * @returns {boolean}\n */\n public get hls(): boolean {\n return this.#getSyncedEmbedOption('hls') as boolean;\n }\n\n /**\n * Sets if the video should use HLS playback.\n * Internal only.\n * @param {boolean} shouldUseHls\n * @returns {void}\n */\n public set hls(shouldUseHls: boolean) {\n this.#setSyncedEmbedOption('hls', shouldUseHls);\n }\n\n /**\n * Returns whether the video is currently in fullscreen\n * @returns {boolean}\n */\n public get inFullscreen(): boolean {\n return this.#_impl?.inFullscreen() ?? false;\n }\n\n public get inputContext(): string | undefined {\n return this.#_impl?.getInputContext();\n }\n\n /**\n * Returns whether instantHLS is enabled for the video.\n * @returns {boolean}\n */\n public get instantHls(): boolean {\n return this.#_impl?.isInstantHls() ?? false;\n }\n\n // the publicApi returns a language object, but you are not allowed to pass that object as a type when setting the language\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get language(): LanguageSimplified | undefined {\n return this.#_api?.language() ?? this.#defaultLocalization();\n }\n\n public set language(language: string | undefined) {\n this.#_api?.language(language);\n }\n\n public get languages(): LanguageSimplified[] {\n return this.#_api?.languages() ?? [this.#defaultLocalization()];\n }\n\n /**\n * Returns all the mediaData set on the WistiaPlayer\n * @returns {MediaData }\n */\n public get mediaData(): MediaData {\n return this.#_playerData.mediaData;\n }\n\n /**\n * Returns the hashed id of the media.\n * @returns {string}\n */\n public get mediaId(): string {\n return this.getAttribute('media-id') ?? '';\n }\n\n /**\n * Replaces the content of the current video with the video identified by the given mediaId.\n * @param {string} newMediaId\n * @returns {void}\n */\n public set mediaId(newMediaId: string) {\n const prevMediaId = this.mediaId;\n\n if (prevMediaId === newMediaId) {\n return;\n }\n\n this.#_logger.info('set mediaId', newMediaId);\n\n // Sync the element's media-id attribute with this property\n // This is the most important and only required attribute on the element\n // and won't change frequently, so it shouldn't cost too much to keep in sync\n this.setAttribute('media-id', newMediaId);\n }\n\n /**\n * Returns the language of the media stream.\n * @returns {Localization | undefined}\n */\n public get mediaLanguage(): LanguageSimplified {\n return this.#_api?.mediaLanguage() ?? this.#defaultLocalization();\n }\n\n /**\n * Changes the language of the media stream/content.\n * @param {string} language\n * @returns {void}\n */\n public set mediaLanguageCode(languageCode: string) {\n this.#_api?.mediaLanguageCode(languageCode);\n }\n\n public get mediaLanguageCode(): string {\n return this.#_api?.mediaLanguageCode() ?? this.#defaultLocalization().wistiaLanguageCode;\n }\n\n /**\n * Returns the languages of the media.\n * @returns {Localization[]}\n */\n public get mediaLanguages(): LanguageSimplified[] {\n return this.#_api?.mediaLanguages() ?? [this.#defaultLocalization()];\n }\n\n /**\n * Returns if player is currently muted\n * @returns {boolean}\n */\n public get muted(): boolean {\n return this.#_impl?.isMuted() ?? this.embedOptions.muted ?? false;\n }\n\n /**\n * Change player muted state\n * @param {boolean} shouldMute\n */\n public set muted(shouldMute: boolean) {\n if (this.#_impl) {\n if (shouldMute) {\n void this.#_impl.mute();\n } else {\n void this.#_impl.unmute();\n }\n }\n\n this.#setSyncedEmbedOption('muted', shouldMute);\n }\n\n /**\n * Returns the name of the media as it is in the Wistia application.\n * Returns undefined until media data is loaded.\n * @returns {string | undefined}\n */\n public get name(): string | undefined {\n return this.#_playerData.mediaData.name ?? this.#_api?._mediaData?.name ?? undefined;\n }\n\n /**\n * Returns the status of the opaqueControls embed option, which determines\n * if the playbar and big play button are opaque ore semi-transparent\n *\n * @returns {boolean}\n */\n public get opaqueControls(): boolean {\n return this.#getSyncedEmbedOption('opaqueControls') as boolean;\n }\n\n /**\n * When true the player will use a fully opaque big play button and playbar\n * @param {boolean} opaqueControls\n * @returns {void}\n */\n public set opaqueControls(opaqueControls: unknown) {\n const valueAsBoolean = Boolean(opaqueControls);\n this.#_impl?.opaqueControls(valueAsBoolean);\n this.#setSyncedEmbedOption('opaqueControls', valueAsBoolean);\n }\n\n public get paddingTop(): string {\n return this.#paddingTop;\n }\n\n public set paddingTop(paddingTop: string) {\n this.#paddingTop = paddingTop;\n }\n\n /**\n * Returns a boolean that indicates whether the video is paused.\n * @returns {boolean}\n */\n public get paused(): boolean {\n return this.#_impl?.state() === 'paused';\n }\n\n /**\n * Returns the percent of the video that has been watched as a decimal between 0 and 1.\n * @returns {number}\n */\n public get percentWatched(): number {\n return this.#_impl?.percentWatched() ?? 0;\n }\n\n /**\n * Returns the playback rate of the video.\n * @returns {number}\n */\n public get playbackRate(): number {\n return this.#_impl?.playbackRate() ?? this.embedOptions.playbackRate ?? 1;\n }\n\n /**\n * Set the playback rate of the video.\n * @param {number} rate\n * @returns {void}\n */\n public set playbackRate(rate: number) {\n this.#_impl?.playbackRate(rate);\n this.#setSyncedEmbedOption('playbackRate', rate);\n }\n\n /**\n * If set to true, the playback rate control will appear in the setting control.\n * @returns {boolean}\n */\n public get playbackRateControl(): boolean {\n return this.#getSyncedEmbedOption('playbackRateControl') as boolean;\n }\n\n /**\n * enable or disable the playback rate control in the settings control.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playbackRateControl(shouldDisplay: boolean) {\n this.#_impl?.playbackRateControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playbackRateControl', shouldDisplay);\n }\n\n /**\n * Returns if the playbar - which includes the playhead, current time, and scrubbing functionality - will be available.\n * @returns {boolean}\n */\n public get playBarControl(): boolean {\n return this.#getSyncedEmbedOption('playBarControl') as boolean;\n }\n\n /**\n * Sets if the playbar - which includes the playhead, current time, and scrubbing functionality - will be available.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playBarControl(shouldDisplay: boolean) {\n this.#_impl?.playbarControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playBarControl', shouldDisplay);\n }\n\n /**\n * Returns the border radius of the player.\n * @returns {number}\n */\n public get playerBorderRadius(): number {\n return this.#getSyncedEmbedOption('playerBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the player.\n * @param {number} radius\n * @returns {void}\n */\n public set playerBorderRadius(radius: number) {\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#_impl?.setPlayerBorderRadius(Number(radius));\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('playerBorderRadius', Number(radius));\n }\n\n /**\n * Returns the base color of the player.\n * @returns {string}\n */\n public get playerColor(): string {\n if (this.playerColorGradient?.on) {\n return (\n getGradientColor(this.playerColorGradient) ??\n (this.#getSyncedEmbedOption('playerColor') as string)\n );\n }\n return this.#getSyncedEmbedOption('playerColor') as string;\n }\n\n /**\n * Changes the base color of the player.\n * Expects a hexadecimal rgb string like \"ff0000\" (red), \"000000\" (black), \"ffffff\" (white), or \"0000ff\" (blue).\n * @param {string} newColor\n * @returns {void}\n */\n public set playerColor(newColor: string) {\n this.#_impl?.playerColor(newColor);\n this.#setSyncedEmbedOption('playerColor', newColor);\n }\n\n /**\n * Returns the player color gradient object.\n * @returns {Gradient}\n */\n public get playerColorGradient(): Gradient | undefined {\n const value = this.#getSyncedEmbedOption('playerColorGradient');\n if (isGradient(value)) {\n return value;\n }\n return undefined;\n }\n\n /**\n * Sets the player color gradient object.\n * @param {Gradient} gradient\n * @returns {void}\n */\n public set playerColorGradient(gradient: unknown) {\n if (!isGradient(gradient)) {\n throw new Error('playerColorGradient must be a valid gradient object');\n }\n\n this.#_impl?.playerColorGradient(gradient);\n this.#setSyncedEmbedOption('playerColorGradient', gradient);\n }\n\n /**\n * Returns the overridding player.\n * Internal use only.\n * @returns {Players | undefined}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get playerForce(): Players | undefined {\n return (this.getAttribute('player-force') as Players | null) ?? undefined;\n }\n\n /**\n * Sets the overridding player.\n * Internal use only.\n * @param {string} newPlayer\n * @returns {void}\n */\n public set playerForce(newPlayer: Players) {\n this.#_logger.info('set playerForce', newPlayer);\n this.setAttribute('player-force', newPlayer);\n }\n\n /**\n * Returns the strategy for associating specially crafted links on a page with a video, turning them into a playlist.\n * auto: For each video on the page, look for links after the video, until we come to another Wistia video.\n * manual: Given each link element, look at its 'container' option to determine which video it should connect to.\n * \"container\": For all embed links in a container whose id matches this given string, connect them to this specific video.\n * @returns {'auto' | 'manual' | string}\n */\n public get playlistLinks(): string {\n return this.#getSyncedEmbedOption('playlistLinks') as string;\n }\n\n /**\n * Sets the strategy for associating specially crafted links on a page with a video, turning them into a playlist.\n * @param {'auto' | 'manual' | string} newStrategy\n * @returns {void}\n */\n public set playlistLinks(newStrategy: string) {\n this.#setSyncedEmbedOption('playlistLinks', newStrategy);\n }\n\n /**\n * When present or set to true and this video has a playlist, it will loop back to\n * the first video and replay it once the last video has finished.\n * @returns {boolean}\n */\n public get playlistLoop(): boolean {\n return this.#getSyncedEmbedOption('playlistLoop') as boolean;\n }\n\n /**\n * When present or set to true and this video has a playlist, it will loop back to\n * the first video and replay it once the last video has finished.\n * @param {boolean} shouldLoop\n * @returns {void}\n */\n public set playlistLoop(shouldLoop: boolean) {\n this.#setSyncedEmbedOption('playlistLoop', shouldLoop);\n }\n\n /**\n * If set to true, the small play button control will be available.\n * @returns {boolean}\n */\n public get playPauseControl(): boolean {\n return this.#getSyncedEmbedOption('playPauseControl') as boolean;\n }\n\n /**\n * If set to true, the small play button control will be available.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playPauseControl(shouldDisplay: boolean) {\n this.#_impl?.playPauseControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playPauseControl', shouldDisplay);\n }\n\n /**\n * By default, pausing a video will display a brief animation of the pause symbol\n * and resuming the video will display an animation of the play symbol.\n * Setting this embed option to false will remove those animations.\n * @returns {boolean}\n */\n public get playPauseNotifier(): boolean {\n return this.#getSyncedEmbedOption('playPauseNotifier') as boolean;\n }\n\n /**\n * By default, pausing a video will display a brief animation of the pause symbol\n * and resuming the video will display an animation of the play symbol.\n * Setting this embed option to false will remove those animations.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playPauseNotifier(shouldDisplay: boolean) {\n this.#_impl?.playPauseNotifierEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playPauseNotifier', shouldDisplay);\n }\n\n /**\n * Controls whether playback is suspended (paused) while the video is scrolled out of the\n * viewport, resuming when it re-enters. This mirrors the legacy player's `playSuspendedOffScreen`\n * embed option.\n * 'auto': off-screen suspend follows the muted state — it is active whenever the video is muted\n * (the default, and what makes silent autoplay pause off-screen automatically).\n * true: always suspend playback while off-screen.\n * false: never suspend playback while off-screen.\n * @returns {boolean | 'auto'}\n */\n public get playSuspendedOffScreen(): boolean | 'auto' {\n return this.#getSyncedEmbedOption('playSuspendedOffScreen') as boolean | 'auto';\n }\n\n /**\n * Controls whether playback is suspended (paused) while the video is scrolled out of the\n * viewport, resuming when it re-enters. This mirrors the legacy player's `playSuspendedOffScreen`\n * embed option.\n * @param {boolean | 'auto'} value\n * @returns {void}\n */\n public set playSuspendedOffScreen(value: boolean | 'auto') {\n this.#setSyncedEmbedOption('playSuspendedOffScreen', value);\n }\n\n /**\n * Getter. Returns all defined plugins.\n * @returns {PluginInstances} returns object of defined plugins. Please note this may return an\n * empty object if not plugins have yet been defined.\n */\n public get plugins(): PluginInstances {\n if (this.#_impl) {\n // We don't want customers modifying this object (adding/deleting what is already here).\n // But they may need to interact/modify the existing ones, so we only use `seal`.\n return Object.seal({ ...this.#_impl.plugin });\n }\n return {};\n }\n\n /**\n * Returns if the play button will expand to cover the thumbnail on hover,\n * while also displaying the duration of the video.\n * @returns {boolean}\n */\n public get popoverAnimateThumbnail(): boolean {\n return this.#getSyncedEmbedOption('popoverAnimateThumbnail') as boolean;\n }\n\n /**\n * Sets if the play button will expand to cover the thumbnail on hover,\n * while also displaying the duration of the video.\n * @param {boolean} shouldAnimate\n * @returns {void}\n */\n public set popoverAnimateThumbnail(shouldAnimate: boolean) {\n this.#setSyncedEmbedOption('popoverAnimateThumbnail', shouldAnimate);\n }\n\n /**\n * Returns the current state of the video.\n * @returns {PopoverAnimation}\n */\n public get popoverAnimation(): PopoverAnimation {\n return this.#getSyncedEmbedOption('popoverAnimation') as PopoverAnimation;\n }\n\n /**\n * Sets if the play button will expand to cover the thumbnail on hover,\n * while also displaying the duration of the video.\n * @param {PopoverAnimation} newAnimation\n * @returns {void}\n */\n public set popoverAnimation(newAnimation: PopoverAnimation) {\n this.#setSyncedEmbedOption('popoverAnimation', newAnimation);\n }\n\n /**\n * Returns the border color of the popover.\n * @returns {string}\n */\n public get popoverBorderColor(): string {\n return this.#getSyncedEmbedOption('popoverBorderColor') as string;\n }\n\n /**\n * Sets the border color of the popover.\n * @param {string} newColor\n * @returns {void}\n */\n public set popoverBorderColor(newColor: string) {\n this.#setSyncedEmbedOption('popoverBorderColor', newColor);\n }\n\n /**\n * Returns the border radius of the popover.\n * @returns {number}\n */\n public get popoverBorderRadius(): number {\n return this.#getSyncedEmbedOption('popoverBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the popover.\n * @param {number} newRadius\n * @returns {void}\n */\n public set popoverBorderRadius(newRadius: number) {\n this.#setSyncedEmbedOption('popoverBorderRadius', newRadius);\n }\n\n /**\n * Returns the border width of the popover.\n * @returns {number}\n */\n public get popoverBorderWidth(): number {\n return this.#getSyncedEmbedOption('popoverBorderWidth') as number;\n }\n\n /**\n * Sets the border width of the popover.\n * @param {number} newWidth\n * @returns {void}\n */\n public set popoverBorderWidth(newWidth: number) {\n this.#setSyncedEmbedOption('popoverBorderWidth', newWidth);\n }\n\n /**\n * Returns if the popover should be displayed with a box shadow.\n * @returns {boolean}\n */\n public get popoverBoxShadow(): boolean {\n return this.#getSyncedEmbedOption('popoverBoxShadow') as boolean;\n }\n\n /**\n * Sets if the popover should be displayed with a box shadow.\n * @param {boolean} shouldDisplayBoxShadow\n * @returns {void}\n */\n public set popoverBoxShadow(shouldDisplayBoxShadow: boolean) {\n this.#setSyncedEmbedOption('popoverBoxShadow', shouldDisplayBoxShadow);\n }\n\n /**\n * Returns text set to be displayed directly below the popover.\n * @returns {string}\n */\n public get popoverCaption(): string {\n return this.#getSyncedEmbedOption('popoverCaption') as string;\n }\n\n /**\n * Sets text set to be displayed directly below the popover.\n * @param {string} newCaption\n * @returns {void}\n */\n public set popoverCaption(newCaption: string) {\n this.#setSyncedEmbedOption('popoverCaption', newCaption);\n }\n\n /**\n * Returns the id of the dom element which will be moved beneath the popover.\n * @returns {string}\n */\n public get popoverCaptionContainer(): string {\n return this.#getSyncedEmbedOption('popoverCaptionContainer') as string;\n }\n\n /**\n * Sets the id of the dom element which will be moved beneath the popover.\n * @param {string} newCaptionContainer\n * @returns {void}\n */\n public set popoverCaptionContainer(newCaptionContainer: string) {\n this.#setSyncedEmbedOption('popoverCaptionContainer', newCaptionContainer);\n }\n\n /**\n * Returns how the popover content will render.\n * @returns {PopoverContentSettings | string | undefined}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get popoverContent(): PopoverContentSettings | undefined {\n return this.#getSyncedEmbedOption('popoverContent') as unknown as\n | PopoverContentSettings\n | undefined;\n }\n\n /**\n * Sets how the popover content will render.\n * @param {PopoverContentSettings} newContentType\n * @returns {void}\n */\n public set popoverContent(newContentType: PopoverContentSettings) {\n this.#setSyncedEmbedOption('popoverContent', newContentType);\n }\n\n /**\n * Returns if embed should override the behavior for the autoplay option in Customize for\n * a popover specifically, so that launching the popover doesn't also play the video.\n * @returns {boolean}\n */\n public get popoverDisableAutoplay(): boolean {\n return this.#getSyncedEmbedOption('popoverDisableAutoplay') as boolean;\n }\n\n /**\n * Sets if embed should override the behavior for the autoplay option in Customize for\n * a popover specifically, so that launching the popover doesn't also play the video.\n * @param {boolean} shouldDisable\n * @returns {void}\n */\n public set popoverDisableAutoplay(shouldDisable: boolean) {\n this.#setSyncedEmbedOption('popoverDisableAutoplay', shouldDisable);\n }\n\n /**\n * Returns the overlay's background color in RGB hexadecimal.\n * @returns {string}\n */\n public get popoverOverlayColor(): string {\n return this.#getSyncedEmbedOption('popoverOverlayColor') as string;\n }\n\n /**\n * Sets the overlay's background color in RGB hexadecimal.\n * @param {string} newColor\n * @returns {void}\n */\n public set popoverOverlayColor(newColor: string) {\n this.#setSyncedEmbedOption('popoverOverlayColor', newColor);\n }\n\n /**\n * Returns the overlay's opacity. Expects a decimal value between 0 and 1.\n * @returns {number}\n */\n public get popoverOverlayOpacity(): number {\n return this.#getSyncedEmbedOption('popoverOverlayOpacity') as number;\n }\n\n /**\n * Sets the overlay's opacity. Expects a decimal value between 0 and 1.\n * @param {number} newOpacity\n * @returns {void}\n */\n public set popoverOverlayOpacity(newOpacity: number) {\n this.#setSyncedEmbedOption('popoverOverlayOpacity', newOpacity);\n }\n\n /**\n * Returns if scrolling should be prevented when the popover is open.\n * @returns {boolean}\n */\n public get popoverPreventScroll(): boolean {\n return this.#getSyncedEmbedOption('popoverPreventScroll') as boolean;\n }\n\n /**\n * Sets if scrolling should be prevented when the popover is open.\n * @param {boolean} shouldPreventScroll\n * @returns {void}\n */\n public set popoverPreventScroll(shouldPreventScroll: boolean) {\n this.#setSyncedEmbedOption('popoverPreventScroll', shouldPreventScroll);\n }\n\n /**\n * Returns if popover should immediately open as if it was clicked.\n * @returns {boolean}\n */\n public get popoverShowOnLoad(): boolean {\n return this.#getSyncedEmbedOption('popoverShowOnLoad') as boolean;\n }\n\n /**\n * Sets if popover should immediately open as if it was clicked.\n * @param {boolean} shouldShow\n * @returns {void}\n */\n public set popoverShowOnLoad(shouldShow: boolean) {\n this.#setSyncedEmbedOption('popoverShowOnLoad', shouldShow);\n }\n\n /**\n * Overrides the thumbnail image that appears before the video plays.\n * Expects an absolute URL to an image.\n * @returns {string}\n */\n public get poster(): string {\n return this.#getSyncedEmbedOption('poster') as string;\n }\n\n /**\n * Overrides the thumbnail image that appears before the video plays.\n * Expects an absolute URL to an image.\n * @param {string} newUrl\n * @returns {void}\n */\n public set poster(newUrl: string) {\n // This method is called a second time when the attribute value\n // is set on the element. Checking for the same value here prevents\n // us from running that second redundant set.\n const prevVal = this.poster;\n if (prevVal === newUrl) {\n return;\n }\n\n const prevUrl = this.poster;\n this.#setSyncedEmbedOption('poster', newUrl);\n\n // Sync the element's autoplay attribute with this property\n // This matches the behavior of the native <video> element\n this.setAttribute('poster', newUrl);\n\n if (prevUrl !== newUrl) {\n this.dispatchEvent(new CustomEvent('thumbnailchange'));\n }\n }\n\n /**\n * Returns the preload setting for the player.\n * @returns {string | undefined}\n * undefined is allowed as a return type because there may be situations\n * where the player and/or engine has not loaded and we don't know what\n * preload setting will be used\n */\n public get preload(): NonNullable<EmbedOptions['preload']> {\n return this.#_impl?.preloadValue() ?? this.embedOptions.preload ?? 'metadata';\n }\n\n /**\n * sets the preload value for the player. Note that changing this option\n * after player initialization has no impact.\n * @param {'auto'| 'metadata' | 'none'} preloadValue\n * @returns {void}\n */\n public set preload(preloadValue: NonNullable<EmbedOptions['preload']>) {\n // This method is called a second time when the attribute value\n // is set on the element. Checking for the same value here prevents\n // us from running that second redundant set.\n const prevVal = this.preload;\n if (prevVal === preloadValue) {\n return;\n }\n this.#setSyncedEmbedOption('preload', preloadValue);\n\n // Sync the element's autoplay attribute with this property\n // This matches the behavior of the native <video> element\n this.setAttribute('preload', preloadValue);\n }\n\n /**\n * If set to true, the quality control will appear in the setting control.\n * @returns {boolean}\n */\n public get qualityControl(): boolean {\n return this.#getSyncedEmbedOption('qualityControl') as boolean;\n }\n\n /**\n * enable or disable the quality control in the settings control.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set qualityControl(shouldDisplay: boolean) {\n this.#_impl?.qualityControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('qualityControl', shouldDisplay);\n }\n\n /**\n * Return the max quality allowed for the 'Auto' asset in HLS playback\n * @returns {number | undefined}\n */\n public get qualityMax(): AllowedQualities {\n return this.#getSyncedEmbedOption('qualityMax') as AllowedQualities;\n }\n\n /**\n * Set the max quality to be used for \"Auto\" in the HLS stream.\n * @param {number} quality\n * @returns {void}\n */\n public set qualityMax(quality: AllowedQualities) {\n this.#_impl?.qualityMax(quality);\n this.#setSyncedEmbedOption('qualityMax', quality);\n }\n\n /**\n * Return the min quality allowed for the 'Auto' asset in HLS playback\n * @returns {number}\n */\n public get qualityMin(): AllowedQualities {\n return this.#getSyncedEmbedOption('qualityMin') as AllowedQualities;\n }\n\n /**\n * Set the min quality to be used for \"Auto\" in the HLS stream.\n * @param {number} quality\n * @returns {void}\n */\n public set qualityMin(quality: AllowedQualities) {\n this.#_impl?.qualityMin(quality);\n this.#setSyncedEmbedOption('qualityMin', quality);\n }\n\n /**\n * Returns the readyState of the inner video HTML element.\n * @returns {number}\n */\n public get readyState(): number {\n return this.#_impl?.getReadyState() ?? 0;\n }\n\n /**\n * Returns the current resumable status of the video.\n * @returns {'auto' | boolean}\n */\n public get resumable(): NonNullable<EmbedOptions['resumable']> {\n return (this.#getSyncedEmbedOption('resumable') ?? 'auto') as NonNullable<\n EmbedOptions['resumable']\n >;\n }\n\n /**\n * set the resumable state of the video to 'auto' | true | false.\n * note that this can be changed 'beforeplay', however changing the\n * value after play will have no effect\n * @param {'auto' | boolean} resumableState\n * @returns {void}\n */\n public set resumable(resumableState: NonNullable<EmbedOptions['resumable']>) {\n this.#_impl?.setResumable(resumableState);\n this.#setSyncedEmbedOption('resumable', resumableState);\n }\n\n /**\n * Returns whether the player enters fullscreen when a touch device is rotated\n * to landscape while the video is playing (and exits on rotate back to\n * portrait). Opt-in; off by default.\n * @returns {boolean}\n */\n public get rotateToFullscreen(): boolean {\n return this.#getSyncedEmbedOption('rotateToFullscreen') as boolean;\n }\n\n /**\n * Sets whether the player enters fullscreen when a touch device is rotated to\n * landscape while the video is playing. This is an embedder-set config, not a\n * viewer-facing control. Set it before play; changing it after the player has\n * initialized has no effect on the already-bound orientation listener.\n * @param {boolean} shouldRotateToFullscreen\n * @returns {void}\n */\n public set rotateToFullscreen(shouldRotateToFullscreen: unknown) {\n const attrAsBoolean = shouldRotateToFullscreen === 'true' || shouldRotateToFullscreen === true;\n this.#_impl?.rotateToFullscreen(attrAsBoolean);\n this.#setSyncedEmbedOption('rotateToFullscreen', attrAsBoolean);\n }\n\n /**\n * Returns a value which controls all rounded corners of the player.\n * @returns {number}\n */\n public get roundedPlayer(): number {\n return this.#getSyncedEmbedOption('roundedPlayer') as number;\n }\n\n /**\n * Returns the value which controls all rounded corners of the player.\n * @param {number} radius\n * @returns {void}\n */\n public set roundedPlayer(radius: number) {\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#_impl?.setRoundedPlayer(Number(radius));\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('roundedPlayer', Number(radius));\n }\n\n /**\n * Returns the number of unique seconds that have been watched for the video.\n * This does not include seconds that have been skipped by seeking.\n * @returns {number}\n */\n public get secondsWatched(): number {\n return this.#_impl?.secondsWatched() ?? 0;\n }\n\n /**\n * Returns an array where each index represents the number of times the viewer has watched each second of the video.\n * @returns {number[]}\n */\n public get secondsWatchedVector(): number[] {\n return this.#_impl?.secondsWatchedVector() ?? [];\n }\n\n /**\n * Returns whether JSON+LD seo data will be injected.\n * @returns {boolean}\n */\n public get seo(): boolean {\n return this.#getSyncedEmbedOption('seo') as boolean;\n }\n\n /**\n * Set whether JSON+LD seo data will be injected.\n * Note that changing this value after embed has no impact as JSON+LD needs\n * to be injected as soon as possible.\n * @param {boolean} val\n * @returns {void}\n */\n public set seo(val: boolean) {\n this.#setSyncedEmbedOption('seo', val);\n }\n\n /**\n * If set to true, the settings control will appear in the control bar.\n * @returns {boolean}\n */\n public get settingsControl(): boolean {\n return this.#getSyncedEmbedOption('settingsControl') as boolean;\n }\n\n /**\n * enable or disable the settings control in the control bar.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set settingsControl(shouldDisplay: boolean) {\n this.#_impl?.settingsControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('settingsControl', shouldDisplay);\n }\n\n /**\n * This option allows videos to autoplay in a muted state in contexts where normal autoplay\n * is blocked or not supported (e.g. iOS, Safari 11+, Chrome 66+).\n * allow: The video will default to normal autoplay, with silent autoplay as a fallback if needed.\n * false: The video will not autoplay silently.\n * true: The video will default to autoplaying silently.\n * @returns {boolean | 'allow'}\n */\n public get silentAutoplay(): boolean | 'allow' {\n return this.#getSyncedEmbedOption('silentAutoplay') as boolean | 'allow';\n }\n\n /**\n * This option allows videos to autoplay in a muted state in contexts where normal autoplay\n * is blocked or not supported (e.g. iOS, Safari 11+, Chrome 66+).\n * @param {boolean | 'allow'} silentAutoplayValue\n * @returns {void}\n */\n public set silentAutoplay(silentAutoplayValue: boolean | 'allow') {\n this.#setSyncedEmbedOption('silentAutoplay', silentAutoplayValue);\n }\n\n public get sourceLanguage(): Localization | undefined {\n return (\n this.#_playerData.mediaData.localizations?.find((loc) => loc.isOriginal) ??\n this.#_playerData.mediaData.localizations?.[0]\n );\n }\n\n /**\n * Returns the source media id for the player. If a player has different localized versions,\n * each will have a different mediaId, but the same sourceMediaId.\n * @returns {string}\n */\n public get sourceMediaId(): string {\n return this.mediaData.sourceHashedId ?? this.mediaId;\n }\n\n /**\n * Returns the current state of the video.\n * @returns {PlayerState}\n */\n public get state(): PlayerState {\n return this.#_api?.state() ?? defaultEmbedOptions.state;\n }\n\n /**\n * Returns the stats url for the player.\n * @returns {string | null}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get statsUrl(): EmbedOptions['statsUrl'] {\n return this.#getSyncedEmbedOption('statsUrl') as EmbedOptions['statsUrl'];\n }\n\n /**\n * Sets the stats url for the player.\n * @param {string} url\n * @returns {void}\n */\n public set statsUrl(url: NonNullable<EmbedOptions['statsUrl']>) {\n this.#setSyncedEmbedOption('statsUrl', url);\n }\n\n /**\n * Returns if a swatch should be shown before the player renders.\n * Internal use only.\n * @returns {boolean | undefined}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get swatch(): boolean | undefined {\n return this.#getSyncedEmbedOption('swatch') as boolean | undefined;\n }\n\n /**\n * Sets if a swatch should be shown before the player renders.\n * Internal use only.\n * @param {boolean} shouldShowSwatch\n * @returns {void}\n */\n public set swatch(shouldShowSwatch: boolean) {\n this.#setSyncedEmbedOption('swatch', shouldShowSwatch);\n }\n\n /**\n * If present, the background behind the video player will be transparent\n * allowing the page color to show through instead of black.\n * @returns {boolean}\n */\n public get transparentLetterbox(): boolean {\n return this.#getSyncedEmbedOption('transparentLetterbox') as boolean;\n }\n\n /**\n * Sets the letterbox to be transparent or not.\n * @param {boolean} shouldSetTransparentLetterbox\n * @returns {void}\n */\n public set transparentLetterbox(shouldSetTransparentLetterbox: boolean) {\n this.#setSyncedEmbedOption('transparentLetterbox', shouldSetTransparentLetterbox);\n }\n\n /**\n * Returns the unique id of this embed\n * Expected format is `wistia-mediaId-index`\n * @returns {string}\n */\n public get uniqueId(): string {\n return this.getAttribute('unique-id') ?? '';\n }\n\n /**\n * Sets the unique id of this embed.\n * Expected format is `wistia-mediaId-index`\n * @returns {string}\n */\n public set uniqueId(id: string) {\n this.setAttribute('unique-id', id);\n }\n\n /**\n * Returns if this custom element was created from a legacy translated embed.\n * Internal use only.\n * @returns {boolean}\n */\n public get useWebComponent(): boolean {\n return this.getAttribute('use-web-component') === 'true';\n }\n\n /**\n * Set if this custom element was created from a legacy translated embed.\n * Internal use only.\n * @param {boolean} val\n * @returns {void}\n */\n public set useWebComponent(val: boolean) {\n if (val) {\n this.setAttribute('use-web-component', String(val));\n } else {\n this.removeAttribute('use-web-component');\n }\n }\n\n /**\n * Returns the current video quality.\n * @returns {number | 'auto'}\n */\n public get videoQuality(): number | 'auto' {\n return this.#_impl?.getVideoQuality() ?? this.embedOptions.videoQuality ?? 'auto';\n }\n\n /**\n * Sets the video quality.\n * @param {number | 'auto'} quality\n * @returns {void}\n */\n public set videoQuality(quality: number | 'auto') {\n this.#_impl?.setVideoQuality(quality);\n this.#setSyncedEmbedOption('videoQuality', quality);\n }\n\n /**\n * Returns the visitor_key of the viewer of this player.\n * @returns {string | null | undefined}\n */\n public get visitorKey(): string | null | undefined {\n return Wistia.visitorKey?.value();\n }\n\n /**\n * Returns the current volume set on the player\n * @returns {number}\n */\n public get volume(): number {\n return this.#getSyncedEmbedOption('volume') as number;\n }\n\n /**\n * Set the current volume set on the player\n * @param {number} level - a Number from 0 - 1\n * @returns {void}\n */\n public set volume(level: number) {\n this.#_impl?.volume(level);\n this.#setSyncedEmbedOption('volume', level);\n }\n\n /**\n * If set to true, the volume control will appear in the control bar.\n * Note that on mobile, we never show a volume control, as the device\n * volume is used.\n * @returns {boolean}\n */\n public get volumeControl(): boolean {\n return this.#getSyncedEmbedOption('volumeControl') as boolean;\n }\n\n /**\n * enable or disable the volume control in the control bar.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set volumeControl(shouldDisplay: boolean) {\n this.#_impl?.volumeControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('volumeControl', shouldDisplay);\n }\n\n /**\n * Returns if the player embed is a popover.\n * @returns {boolean}\n */\n public get wistiaPopover(): boolean {\n return this.#getSyncedEmbedOption('wistiaPopover') as boolean;\n }\n\n /**\n * Sets if the player embed is a popover.\n * @param {boolean} shouldBePopover\n * @returns {void}\n */\n public set wistiaPopover(shouldBePopover: boolean) {\n this.#setSyncedEmbedOption('wistiaPopover', shouldBePopover);\n }\n\n get #pageUrl(): string {\n return this.getAttribute('page-url') ?? inferPageUrl();\n }\n\n // --------------------------------------------------\n // Public api methods\n // --------------------------------------------------\n\n /**\n * Adds an event listener to the player.\n * @param {string} eventName - The name of the event to listen for.\n * @param {EventListenerOrEventListenerObject} listener - The function to call when the event occurs.\n * @param {AddEventListenerOptions | boolean} options - Additional options for the event listener.\n */\n public addEventListener(\n eventName: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions | boolean,\n ): void {\n if (!Array.isArray(this.#_eventListeners[eventName])) {\n this.#_eventListeners[eventName] = [];\n }\n this.#_eventListeners[eventName].push({ listener, options });\n\n super.addEventListener(eventName, listener, options);\n }\n\n /**\n * Attempt to enter fullscreen mode.\n * @returns {Promise<void>}\n */\n public async cancelFullscreen(): Promise<void> {\n return this.#_impl?.cancelFullscreen().then(() => {\n this._fullscreenState.heightBeforeFullscreen = undefined;\n this._fullscreenState.widthBeforeFullscreen = undefined;\n });\n }\n\n /**\n * Creates an overlay with the specified name and options.\n * @param {string} name - The name of the overlay.\n * @param {OverlayOptions} options - The options for the overlay.\n * @returns A promise that resolves when the overlay is created successfully, or rejects with an error if the overlay cannot be defined at this time.\n */\n public async createOverlay(name: string, options: OverlayOptions): Promise<void> {\n if (this.#_impl?.defineOverlay) {\n return this.#_impl.defineOverlay(name, options);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be defined at this time`));\n }\n\n /**\n * Defines a plugin on the player.\n * @param {T extends keyof PluginConfigs} name name of the plugin to define\n * @param {PluginConfigs[T]} options object of plugin options related to the specific plugin\n * @returns {Promise<PluginInstances<T>>} returns a Promise that resolves with the defined plugin\n */\n public async definePlugin<T extends keyof PluginConfigs>(\n name: T,\n options: PluginConfigs[T],\n ): Promise<PluginInstances[T]> {\n const addPlugin = async (): Promise<PluginInstances[T]> => {\n return (\n this.#_api?.addPlugin(name, options) ??\n Promise.reject(new Error(`plugin ${name} cannot be defined`))\n );\n };\n\n if (this.#_api) {\n return addPlugin();\n }\n\n return new Promise((resolve, reject) => {\n this.whenApiReady()\n .then(async () => addPlugin())\n .then((plugin) => resolve(plugin))\n .catch((err: unknown) => {\n if (err instanceof Error) {\n reject(err);\n } else {\n reject(new Error('Promise rejected with non-Error value'));\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch((_error: unknown) => {});\n });\n }\n\n /**\n * Deletes an overlay with the specified name.\n * @param {string} name - The name of the overlay to delete.\n * @returns A promise that resolves when the overlay is successfully deleted, or rejects with an error if the overlay cannot be deleted at this time.\n */\n public async deleteOverlay(name: string): Promise<void> {\n if (this.#_impl?.undefineOverlay) {\n return this.#_impl.undefineOverlay(name);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be deleted at this time`));\n }\n\n /**\n *\n * @param {string} name the handle name of the control to be disabled\n * @returns {Promise<void>} Promise that resolves when operation is complete\n */\n public async disableControl(name: string): Promise<void> {\n if (this.#_impl?.setControlEnabled) {\n return this.#_impl.setControlEnabled(name, false);\n }\n return Promise.reject(new Error(`control \"${name}\" cannot be disabled at this time`));\n }\n\n /**\n *\n * @param {string} name the handle name of the control to be enabled\n * @returns {Promise<void>} Promise that resolves when operation is complete\n */\n public async enableControl(name: string): Promise<void> {\n if (this.#_impl?.setControlEnabled) {\n return this.#_impl.setControlEnabled(name, true);\n }\n return Promise.reject(new Error(`control \"${name}\" cannot be enabled at this time`));\n }\n\n public async enterInputContext(context: string): Promise<void> {\n if (this.#_impl?.enterInputContext) {\n return new Promise((resolve) => {\n const handler = (event: WistiaPlayerEvents[typeof INPUT_CONTEXT_CHANGE_EVENT]) => {\n const { detail } = event;\n\n if (detail.context === context) {\n resolve();\n }\n\n this.removeEventListener(INPUT_CONTEXT_CHANGE_EVENT, handler);\n };\n\n this.addEventListener(INPUT_CONTEXT_CHANGE_EVENT, handler);\n\n this.#_impl?.enterInputContext(context);\n });\n }\n\n return Promise.reject(\n new Error(`input context of name \"${context}\" cannot be enabled at this time`),\n );\n }\n\n public async exitInputContext(context: string): Promise<void> {\n if (this.#_impl?.exitInputContext) {\n return Promise.resolve(this.#_impl.exitInputContext(context));\n }\n return Promise.reject(new Error(`control \"${context}\" cannot be enabled at this time`));\n }\n\n /**\n * Gets initial media data for the video. This method exists purely to make\n * mocking easier in tests and mirrors the import from getInitialMediaData.ts.\n * @param {string} mediaId - The hashed ID of the media\n * @param {FetchMediaDataOptions} options - Options for fetching media data\n * @returns {Promise<MediaData | MediaDataServerErrorResponse>} The media data or error response\n */\n public async getInitialMediaData(\n mediaId: string,\n options: FetchMediaDataOptions,\n ): Promise<MediaData | MediaDataServerErrorResponse> {\n return getInitialMediaData(mediaId, options);\n }\n\n /**\n * Gets a plugin from the player.\n * @param {T extends keyof PluginInstances} name name of the plugin to retrieve\n * @returns {Promise<PluginInstances[T]>} returns a Promise that resolves with the request plugin\n */\n public async getPlugin<T extends keyof PluginInstances>(name: T): Promise<PluginInstances[T]> {\n return new Promise((resolve, reject) => {\n if (this.#_api?.plugin && name in this.#_api.plugin) {\n resolve(this.#_api.plugin[name]);\n }\n\n reject(new Error(`plugin ${name} is not defined`));\n });\n }\n\n /**\n * Returns a function that remaps the time of the video from one language to another.\n * @returns {Function} A function that remaps the time of the video from one\n * language to another with signature\n * (fromLanguage: string, toLanguage: string, fromTime: number) => number\n */\n public async getRemapTime(): Promise<\n (fromLanguage: string, toLanguage: string, fromTime: number) => number\n > {\n if (this.#cachedRemapTime != null) {\n return this.#cachedRemapTime;\n }\n\n if (this.languages.length <= 1) {\n this.#cachedRemapTime = (_fromLanguage: string, _toLanguage: string, fromTime: number) =>\n fromTime;\n return this.#cachedRemapTime;\n }\n\n this.#cachedRemapTime ??= await dynamicImport('assets/external/timeMapping.js').then(\n ({\n remapTime,\n }: {\n remapTime: (\n sourceLocalization: Localization,\n fromLocalization: Localization,\n toLocalization: Localization,\n fromTime: number,\n ) => number;\n }) =>\n (fromLanguage: string, toLanguage: string, fromTime: number) => {\n const fromTimeInMilliseconds = fromTime * 1000;\n const fromLocalization = this.#findLocalizationByLanguage(fromLanguage);\n const sourceLocalization = this.sourceLanguage;\n const toLocalization = this.#findLocalizationByLanguage(toLanguage);\n\n if (fromLocalization == null || toLocalization == null || sourceLocalization == null) {\n return fromTime;\n }\n\n return (\n remapTime(\n sourceLocalization,\n fromLocalization,\n toLocalization,\n fromTimeInMilliseconds,\n ) / 1000\n );\n },\n );\n return this.#cachedRemapTime as (\n fromLanguage: string,\n toLanguage: string,\n fromTime: number,\n ) => number;\n }\n\n /**\n * Hides the specified overlay.\n * @param {string} name - The name of the overlay to hide.\n * @returns A promise that resolves when the overlay is hidden, or rejects with an error if the overlay cannot be cancelled at this time.\n */\n public async hideOverlay(name: string): Promise<void> {\n if (this.#_impl?.cancelOverlay) {\n return this.#_impl.cancelOverlay(name);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be cancelled at this time`));\n }\n\n /**\n * Hides the popover if this is a popover embed.\n * @returns {Promise<void>}\n */\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n public async hidePopover(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.#_api?.popover) {\n this.#_api.popover.hide();\n resolve();\n }\n\n reject(new Error(`Popover cannot be accessed`));\n });\n }\n\n public languagesToLocalizations(languages: LanguageSimplified[]): Localization[] {\n return this.#_api?.languagesToLocalizations(languages) ?? [];\n }\n\n public languageToLocalization(language: LanguageSimplified): Localization | undefined {\n return this.#_api?.languageToLocalization(language) ?? this.#defaultLocalization();\n }\n\n /**\n * Pauses the video.\n * If this is called and the video's state is \"playing,\"\n * it's expected that it will change to \"paused.\"\n * @returns {Promise<void>}\n */\n public async pause(): Promise<void> {\n return this.#_impl?.pause();\n }\n\n /**\n * Plays the video.\n * If this is called, it is expected that the state will change to \"playing.\"\n * @returns {Promise<void>}\n */\n public async play(): Promise<void> {\n return this.#_impl?.play();\n }\n\n /**\n * @param {string} name name of the controls\n * @returns {Promise<void?>}\n */\n public async releaseControls(name: string): Promise<void> {\n return this.#_impl?.releaseControls(name);\n }\n\n /**\n * Removes all event listeners from the player\n * @returns {void}\n */\n public removeAllEventListeners(): void {\n Object.entries(this.#_eventListeners).forEach(([type, listeners]) => {\n listeners.forEach(({ listener, options }) => {\n this.removeEventListener(type, listener, options);\n });\n });\n }\n\n /**\n * Removes an event listener from the player.\n * @param {string} type - The type of event to remove.\n * @param {EventListenerOrEventListenerObject} listener - The function to remove.\n * @param {EventListenerOptions | boolean} options\n * @returns {void}\n */\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: EventListenerOptions | boolean,\n ): void {\n const listeners = this.#_eventListeners[type];\n if (!Array.isArray(listeners)) return;\n\n // Find index of the matching listener+options\n const index = listeners.findIndex(\n (entry) =>\n entry.listener === listener && JSON.stringify(entry.options) === JSON.stringify(options),\n );\n\n if (index !== -1) {\n // Remove event listener from DOM\n super.removeEventListener(type, listener, options);\n\n // Remove it from the tracked list\n listeners.splice(index, 1);\n\n // If no listeners remain for this type, clean up the key\n if (listeners.length === 0) {\n this.#_eventListeners[type] = [];\n }\n }\n }\n\n /**\n * Replaces the media and then resolves when the new media is ready to play\n * @param {string} mediaId\n * @param {EmbedOptions} options\n * @returns {Promise<void>}\n */\n public async replaceWithMedia(\n mediaId: string,\n options: ReplaceWithMediaOptions = {},\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this.#_api) {\n reject(new Error('api not ready to replace'));\n }\n\n removeInjectedJsonLd(this.#_jsonLdId);\n\n const handleAfterReplace = () => {\n this.removeEventListener(AFTER_REPLACE_EVENT, handleAfterReplace);\n resolve();\n };\n\n this.addEventListener(AFTER_REPLACE_EVENT, handleAfterReplace);\n this.#_api?.replaceWith(mediaId, options);\n });\n }\n\n /**\n * @param {string} name name of the controls\n * @returns {Promise<void?>}\n */\n public async requestControls(name: string): Promise<void> {\n return this.#_impl?.requestControls(name);\n }\n\n /**\n * Attempt to enter fullscreen mode.\n * @returns {Promise<void>}\n */\n public async requestFullscreen(): Promise<void> {\n if (this.#_impl?.requestFullscreen) {\n return this.#_impl.requestFullscreen();\n }\n\n return Promise.reject(new Error('Fullscreen cannot be accessed'));\n }\n\n /**\n * Shows an overlay with the specified name.\n * @param {string} name - The name of the overlay to show.\n * @returns A promise that resolves when the overlay is shown, or rejects with an error if the overlay cannot be requested at this time.\n */\n public async showOverlay(name: string): Promise<void> {\n if (this.#_impl?.requestOverlay) {\n return this.#_impl.requestOverlay(name);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be requested at this time`));\n }\n\n /**\n * Shows the popover if this is a popover embed.\n * @returns {Promise<void>}\n */\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n public async showPopover(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.#_api?.popover) {\n this.#_api.popover.show();\n resolve();\n }\n\n reject(new Error(`Popover cannot be accessed`));\n });\n }\n\n /**\n * Updates the embed options for the player.\n * @param {Partial<EmbedOptions>} options - The new embed options to set.\n * @returns {Promise<EmbedOptions>} The updated embed options.\n */\n public async updateEmbedOptions(options: Partial<EmbedOptions>): Promise<EmbedOptions> {\n return new Promise((resolve) => {\n this.#setMultipleSyncedEmbedOptions(options);\n resolve(this.embedOptions);\n });\n }\n\n public async whenApiReady(): Promise<void> {\n return new Promise((resolve) => {\n if (this.#_api) {\n this.#_api.ready(() => {\n resolve();\n });\n }\n\n const handler = () => {\n this.removeEventListener(API_READY_EVENT, handler);\n resolve();\n };\n\n this.addEventListener(API_READY_EVENT, handler);\n });\n }\n\n public async whenControlMounted<T extends keyof ControlInstances>(\n handle: T,\n ): Promise<ControlInstances[T]> {\n await this.whenApiReady();\n\n if (this.#_api === null) {\n throw new Error('Control API not available');\n }\n\n const control = await this.#_api.whenControlMounted(handle);\n if (control === null || control === undefined) {\n throw new Error('Control not found');\n }\n\n return control;\n }\n\n // --------------------------------------------------\n // Custom element lifecycle methods\n // --------------------------------------------------\n\n /**\n * Called when an observed attribute has been added, removed, updated, or replaced.\n * Also called for initial values when an element is created by the parser, or upgraded.\n * Note: only attributes listed in the observedAttributes property will receive this callback.\n * @param {string} name - The name of the attribute that changed.\n * @param {string} oldValue - The previous value of the attribute, or null if it was added for the first time.\n * @param {string} newValue - The new value of the attribute, or null if it was removed.\n * @returns {void}\n */\n protected attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n // We need this to make sure we don't needlessly call api methods during initial component setup\n if (!this.#hasElementConnectedToDOM) {\n return;\n }\n\n if (oldValue === newValue) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (oldValue === null && newValue === '') {\n return;\n }\n\n // If the attribute string is equal to 'true' or 'false', go ahead and assume we'd\n // like the boolean value instead of the string\n let finalValue: boolean | string = newValue;\n switch (newValue) {\n case 'true':\n finalValue = true;\n break;\n case 'false':\n finalValue = false;\n break;\n default:\n break;\n }\n\n // Attribute names must match their corresponding property names (kebab-case -> camelCase)\n // So the player-color attribute maps to the playerColor property\n this[kebabCaseToCamelCase(name)] = finalValue;\n }\n\n protected connectedCallback(): void {\n if (this.#hasElementConnectedToDOM) {\n return;\n }\n this.#hasElementConnectedToDOM = true;\n\n const mediaId = this.getAttribute('media-id');\n if (mediaId == null) {\n countMetric('player/failure/init-failed');\n throw new Error('media-id attribute is required');\n }\n\n // Allows for all bulk setting of embed options and mediaData\n window.wistiaOptions = window.wistiaOptions ?? {};\n const opts = getWistiaOptions(this.mediaId);\n this.#_playerData.setWistiaWindowEmbedOptionSource(opts);\n\n // Add the media id to the logger now that we have it\n this.#_logger = (wlog as unknown as LoggerType).getPrefixedFunctions(\n `WistiaPlayer ${mediaId}`,\n ) as LoggerType;\n\n this.#_judyContext = buildContext() as JudyContext;\n\n // If the player was created from our React wrapper component, send a tracking event\n if (this.getAttribute('react') === 'true') {\n countMetric('player/initembed.react');\n }\n\n this.#setupEventListeners();\n\n this.#_logger.info('initialize embed');\n\n if (!this.useWebComponent) {\n maybeStartWistiaQueue();\n }\n\n // Generate a unique id for this embed in case there are\n // multiple embeds with the same hashed id on the page\n this.uniqueId = this.#generateUniqueId(mediaId);\n\n this.#maybeSetupEmbedOptionsFromIframe();\n\n // Sometimes if an attribute is set on the player, we want to do something immediately\n this.#runMethodsFromAttributes();\n\n // Gather any attributes set on the element and save them so the public api can use them\n this.#saveInitialAttributesFromDomOptions();\n\n const resizeCallback = () => {\n this.#renderPreloadThumbnail();\n };\n this.#resizeObserver = new ResizeObserver(resizeCallback);\n this.#resizeObserver.observe(this);\n\n const optsForFetch = {\n deferFetchingToCarousel: this.#deferMediaDataFetchingToCarouselEmbed(),\n embedHost: this.embedHost ?? '',\n overrideMediaLanguage: this.embedOptions.language,\n };\n\n this.getInitialMediaData(mediaId, optsForFetch)\n .then((mediaDataOrError: MediaData | MediaDataServerErrorResponse) => {\n if (isMediaDataError(mediaDataOrError)) {\n if (\n (mediaDataOrError as MediaDataServerErrorResponse).iframe === true ||\n (mediaDataOrError as MediaDataServerErrorResponse).iframe === 'true'\n ) {\n const baseUrl = `${eV1Protocol()}//${eV1HostWithPort()}`;\n this.style.display = 'block';\n\n // Check if width is already set via CSS or attributes\n const computedStyle = getComputedStyle(this);\n const hasWidth = computedStyle.width !== 'auto' && computedStyle.width !== '0px';\n if (!hasWidth) {\n this.style.width = '100%';\n }\n\n this.style.aspectRatio = String(this.aspect);\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = `<iframe src='${baseUrl}/embed/iframe/${this.mediaId}' aspect='${this.aspect}' style='width: 100%; height: 100%; border: 0;' scrolling='no'></iframe>`;\n }\n return;\n }\n }\n\n const mediaData = mediaDataOrError as MediaData;\n\n this.mediaId = mediaData.hashedId ?? this.mediaId;\n this.#_playerData.setMediaDataSource(mediaData);\n\n this.dispatchEvent(\n new CustomEvent(LOADED_MEDIA_DATA_EVENT, {\n detail: {\n mediaData: this.#_playerData.mediaData,\n },\n }),\n );\n\n // If the player is not available in the document, assume it's inside a shadow root\n const bestMatchContainer: WistiaPlayer | string = document.querySelector(\n `[unique-id='${this.uniqueId}']`,\n )\n ? this.uniqueId\n : this;\n\n this.#initPlayerEmbed({\n container: bestMatchContainer,\n mediaData: this.#_playerData.mediaData,\n });\n })\n .catch((error: unknown) => {\n countMetric('player/failure/init-failed');\n throw new Error((error as Error).message);\n });\n\n // Add our responsive embed template to the shadow DOM\n if (this.shadowRoot) {\n // Create slot for user content, to allow styling of children of\n // <wistia-player> via css that's external to the shadow dom.\n // This is mainly for popover embeds.\n if (this.wistiaPopover && this.popoverContent === 'link') {\n const slot = document.createElement('slot');\n slot.name = `${this.uniqueId}-popover-link`;\n this.shadowRoot.appendChild(slot);\n }\n\n // Render the embed template as soon as we can\n this.#preactRoot = document.createElement('div');\n this.#renderEmbedTemplate();\n this.shadowRoot.insertBefore(this.#preactRoot, this.shadowRoot.firstChild);\n }\n }\n\n protected disconnectedCallback(): void {\n this.#_removeEventListeners.forEach((removeListener) => removeListener());\n\n this.removeAllEventListeners();\n\n this.#_eventListeners = {};\n removeInjectedJsonLd(this.#_jsonLdId);\n\n uncacheMediaData(this.mediaId);\n\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n\n removeEmbedOptionStore(`__${this.uniqueId}_dom_options__`);\n\n this.#_api?.remove();\n this.#_api = null;\n\n this.#destroyPreloadThumbnailRoot();\n\n this.shadowRoot?.replaceChildren();\n this.#preactRoot = null;\n\n this.#hasElementConnectedToDOM = false;\n }\n\n // --------------------------------------------------\n // Private methods\n // --------------------------------------------------\n\n #defaultLocalization(): Localization {\n return {\n bcp47LanguageTag: 'en',\n familyName: 'English',\n familyNativeName: 'English',\n name: 'English',\n nativeName: 'English',\n wistiaLanguageCode: 'eng',\n\n alpha3Bibliographic: 'eng',\n alpha3Terminologic: 'eng',\n duration: 0,\n genericName: 'English',\n genericNativeName: 'English',\n hashedId: this.mediaId,\n ietfLanguageTag: 'eng',\n isLocalization: true,\n iso6392LanguageCode: 'eng',\n sourceLanguage: true,\n timeMappings: [],\n };\n }\n\n /**\n * Should the player defer fetching media data to a carousel embed?\n * Look for a connected carousel embed that is not inside a playlist embed.\n * If one is found, return true.\n * @returns {boolean}\n */\n #deferMediaDataFetchingToCarouselEmbed(): boolean {\n if (!isNonEmptyString(this.id)) {\n return false;\n }\n return !!document.querySelector(\n `wistia-channel-carousel[player-dom-id=\"${this.id}\"]:not([is-inside-playlist-embed=\"true\"][channel-id])`,\n );\n }\n\n #destroyPreloadThumbnailForPopover(): void {\n if (!this.#isPopoverWithThumbnail()) {\n return;\n }\n const { shadowRoot } = this;\n const activeElement = shadowRoot?.activeElement ?? null;\n const hadFocus =\n activeElement !== null &&\n this.#preloadThumbnailRoot !== null &&\n this.#preloadThumbnailRoot.contains(activeElement);\n this.#destroyPreloadThumbnailRoot();\n this.removeEventListener('click', this.#handlePreloadThumbnailClick, PRELOAD_CLICK_OPTIONS);\n if (hadFocus) {\n shadowRoot?.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus({ preventScroll: true });\n }\n }\n\n #destroyPreloadThumbnailRoot(): void {\n if (this.#preloadThumbnailRoot) {\n // Unmount the nested preact root so its components run componentWillUnmount\n // (e.g. clearing timers) before we detach the DOM out from under preact.\n render(null, this.#preloadThumbnailRoot);\n this.#preloadThumbnailRoot.remove();\n this.#preloadThumbnailRoot = null;\n }\n }\n\n #findLocalizationByLanguage(language: string | undefined): Localization | undefined {\n if (language == null) {\n return undefined;\n }\n\n return this.#_playerData.mediaData.localizations?.find(\n (localization) =>\n localization.wistiaLanguageCode === language || localization.bcp47LanguageTag === language,\n );\n }\n\n /**\n * Generates a unique id for the embed\n * @param {number | string} mediaId - The media id\n * @returns {string}\n */\n #generateUniqueId(mediaId): string {\n const prefix = `wistia-${mediaId}-`;\n return seqId(prefix);\n }\n\n /**\n * Returns either the value of an embed option from the public api\n * or the value of an embed option saved on this element.\n *\n * For now, the public api is the source of truth for embed options.\n * However, this will change in the future. We also need a non-public\n * api source for embed options so we can use them before the public\n * api is ready.\n * @param {string} key - Name of the embed option\n * @returns {boolean | number | string | null}\n */\n #getSyncedEmbedOption(key: string): boolean | number | string | null | undefined {\n // If the public api is ready, use it as the source of truth\n if (this.#_impl && key in this.#_impl._attrs) {\n return this.#_impl._attrs[key] as boolean | number | string | null | undefined;\n }\n\n // Otherwise check this element's embed config for a value and fallback\n // to the default embed options as a last resort\n return (\n (this.embedOptions[key] as boolean | number | string | null | undefined) ??\n (this.#getValueFromAttribute(camelCaseToKebabCase(key)) as\n | boolean\n | number\n | string\n | null\n | undefined) ??\n (defaultEmbedOptions[key] as boolean | number | string | undefined)\n );\n }\n\n /**\n * Gets the value of an attribute if it exists, returns null if not\n * @param {string} name - Name of the attribute\n * @returns {boolean | string | null}\n */\n #getValueFromAttribute(name: string): boolean | string | null {\n // If no attribute is present, return null instead of an explicit false\n // so our media data config doesn't get overridden\n if (!this.hasAttribute(name)) {\n return null;\n }\n\n switch (this.getAttribute(name)) {\n case 'true':\n return true;\n case 'false':\n return false;\n case '':\n // Boolean attributes are set to '' when they are present\n // so we need to convert them to true\n return true;\n case null:\n default:\n return this.getAttribute(name);\n }\n }\n\n readonly #handleAfterReplace = () => {\n this.#maybeInjectJsonLd();\n setEmbedOptionStore(`__${this.uniqueId}_dom_options__`, this.#_playerData.embedOptions);\n };\n\n readonly #handleBeforeReplace = (event: WistiaPlayerEvents[typeof BEFORE_REPLACE_EVENT]) => {\n /**\n * Since the public API reads embed options assigned to the DOM container,\n * we need to make sure the DOM container ID/uniqueId is updated before\n * the public API starts gathering options in replaceWithMediaDataQueuable.\n */\n this.mediaId = event.detail.mediaId;\n this.uniqueId = this.#generateUniqueId(event.detail.mediaId);\n\n // When we replace, we're getting new media data, and the function we return\n // is based off the current media data.\n this.#cachedRemapTime = undefined;\n };\n\n readonly #handlePreloadThumbnailClick: () => void = () => {\n if (\n this.#_playerType !== 'carouselHardWall' &&\n this.#_playerType !== 'notplayable' &&\n this.#_playerType !== 'passwordprotected'\n ) {\n this.#playPending = true;\n }\n this.#renderPreloadThumbnail();\n };\n\n /**\n * Handles initialization of the player for fresh Aurora embeds\n * @returns {void}\n */\n #initPlayerEmbed({\n container,\n mediaData,\n }: {\n container: WistiaPlayer | string;\n mediaData?: MediaData | MediaDataServerErrorResponse;\n }): void {\n if (!this.#hasElementConnectedToDOM) {\n return;\n }\n this.#_playerData.updateEmbedOptionOverrides({ videoFoam: true });\n\n if (mediaData && !isMediaDataError(mediaData as MediaDataServerErrorResponse)) {\n this.#_playerType = choosePlayer(\n this.#_judyContext,\n this.#_playerData.mediaData,\n this.#_playerData.embedOptions,\n ) as Players;\n\n this.#renderPreloadThumbnail();\n\n this.#maybeInjectJsonLd();\n }\n\n if ('attachInternals' in HTMLElement.prototype && 'states' in ElementInternals.prototype) {\n this.#_internals?.states.delete('--initializing');\n }\n\n // Create and save the public api instance\n void this.#initPublicApi(this.mediaId, {\n container,\n mediaData,\n });\n }\n\n /**\n * Initializes the public api instance and sends a ready event\n * @param {number | string} mediaId - The media id\n * @param {EmbedOptions | PublicApiOptions | undefined} options - The public api options\n * @returns {Promise<void>}\n */\n async #initPublicApi(\n mediaId: number | string,\n options: EmbedOptions | PublicApiOptions | undefined,\n ): Promise<void> {\n // Import the public api script\n await this.#publicApiScript;\n\n if (!Wistia.PublicApi) {\n countMetric('player/failure/init-failed');\n throw new Error('Wistia.PublicApi is not defined');\n }\n\n const embeddedCallback = () => {\n void this.#maybeInitializeMux();\n this.#renderEmbedTemplate();\n\n if (this.#playPending) {\n void this.play();\n }\n };\n\n this.addEventListener('embedded', embeddedCallback);\n this.#_removeEventListeners.push(() => {\n this.removeEventListener('embedded', embeddedCallback);\n });\n\n // Initialize!\n this.#_api = new Wistia.PublicApi(mediaId, options) as PublicApi;\n\n this.addEventListener(BEFORE_REPLACE_EVENT, this.#handleBeforeReplace);\n this.addEventListener(AFTER_REPLACE_EVENT, this.#handleAfterReplace);\n\n this.#_removeEventListeners.push(() => {\n this.removeEventListener(BEFORE_REPLACE_EVENT, this.#handleBeforeReplace);\n this.removeEventListener(AFTER_REPLACE_EVENT, this.#handleAfterReplace);\n });\n\n this.#_api.ready(() => {\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n this.#destroyPreloadThumbnailRoot();\n this.removeEventListener('click', this.#handlePreloadThumbnailClick, PRELOAD_CLICK_OPTIONS);\n // event for public consumption, exposed on our event types\n this.dispatchEvent(new CustomEvent(API_READY_EVENT, { detail: { mediaId } }));\n\n // event for internal consumption, not exposed on our event types\n this.dispatchEvent(\n new CustomEvent(INTERNAL_API_ON_FIND_EVENT, { detail: { mediaId, api: this.#_api } }),\n );\n\n this.#maybeSetupLLMOptimizedEmbed();\n\n // Sync embed options from the public api back to the embed config\n if (this.#_impl) {\n Object.entries(this.#_impl._attrs).forEach(\n ([key, value]: [string, boolean | number | string]) => {\n this.#_playerData.updateEmbedOptionOverrides({ [key]: value });\n },\n );\n }\n\n // Updates our PlayerDataProvider and re-renders the thumbnail with the new embed options\n this.#renderPreloadThumbnail();\n });\n }\n\n /**\n * Returns if this player is a popover embed with a thumbnail.\n * @returns {boolean}\n */\n #isPopoverWithThumbnail(): boolean {\n return (\n this.wistiaPopover &&\n (isNil(this.popoverContent) ||\n isEmptyString(this.popoverContent) ||\n this.popoverContent === 'thumbnail')\n );\n }\n\n /**\n * Do a coin flip to determine if Mux should be enabled\n * And enable Mux for the player if the coin flip is a win\n * @returns {Promise<void>}\n */\n async #maybeInitializeMux() {\n if (!this.#_api) {\n return;\n }\n\n const shouldRandomEnableMux = didWinCoinFlip(MUX_PERCENTAGE_TO_ENABLE);\n const shouldEnableMuxForPlayer =\n shouldEnableMux(this.#_api, shouldRandomEnableMux) && (isVisitorTrackingEnabled() as boolean);\n\n const embedType = this.useWebComponent ? 'translated-web-component' : 'web-component';\n\n if (shouldEnableMuxForPlayer) {\n try {\n const mux = (await dynamicImport('assets/external/wistia-mux.js')) as Mux;\n mux.init(this.#_api, { embedType });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err: unknown) {\n // mux-embed's internal now() utilizes PerformanceTiming, which is a\n // deprecated API being removed from browsers, and this is causing some noise in Sentry.\n // We'll catch and ignore errors stemming from mux since these should not break the player.\n }\n\n this.addEventListener(\n 'visitor-tracking-change',\n (event: CustomEvent<{ isTrackingEnabled: boolean }>) => {\n const { isTrackingEnabled } = event.detail;\n\n if (!isTrackingEnabled) {\n this.#_api?.mux?.destroy();\n }\n },\n );\n }\n }\n\n #maybeInjectJsonLd() {\n if (\n this.seo &&\n this.#_playerType !== 'notplayable' &&\n this.#_playerType !== 'passwordprotected' &&\n this.#_playerType !== 'carouselHardWall'\n ) {\n this.#_jsonLdId = `w-json-ld-${this.uniqueId}`;\n removeInjectedJsonLd(this.#_jsonLdId);\n\n injectJsonLd(this.#_jsonLdId, this.#_playerData.mediaData, {\n embedOptions: this.#_playerData.embedOptions,\n videoHeight: this.offsetHeight,\n videoWidth: this.offsetWidth,\n });\n }\n }\n\n #maybeSetupEmbedOptionsFromIframe() {\n if (!window._inWistiaIframe) {\n return;\n }\n // If we're in an iframe, grab the embed options from the iframe URL now\n // instead of waiting for insideIframe.coffee to do it - otherwise we won't\n // have these embed options until after the api has been initialized.\n const searchParams = new URLSearchParams(window.location.search);\n const iframeEmbedOptions = Object.fromEntries(searchParams.entries()) as EmbedOptions;\n\n iframeEmbedOptions.pageTitle = document.title;\n iframeEmbedOptions._inIframe = true;\n\n this.#_playerData.setIframeEmbedOptionSource(iframeEmbedOptions);\n }\n\n // The LLM-optimized embed is not meant to be long-lived or supported forever.\n // Once we decide to stop supporting it, we should remove this function.\n #maybeSetupLLMOptimizedEmbed() {\n const preloadTranscriptForLLMEmbed = this.querySelector(\n '.wistia_preload_transcript_outer_wrapper',\n );\n if (!preloadTranscriptForLLMEmbed) {\n return;\n }\n\n countMetric('player/initembed.llm-optimized', 1, {\n href: window.location.href,\n mediaId: this.mediaId,\n });\n\n preloadTranscriptForLLMEmbed.remove();\n this.captionsEnabled = true;\n }\n\n /**\n * Renders a template for the embed code\n * @returns {HTMLTemplateElement}\n */\n #renderEmbedTemplate() {\n if (!this.#preactRoot) {\n return;\n }\n\n const { mediaType } = this.#_playerData.mediaData;\n\n const swatchUrl = getSwatchUrl(this.mediaId, this.embedHost ?? '');\n\n let swatchHeight = '100%';\n if (parseFloat(this.#paddingTop) !== 0 && this.#paddingTop !== '') {\n swatchHeight = `${parseFloat(this.#paddingTop)}px`;\n }\n\n const playerBorderRadius = getDefaultPlayerBorderRadius({\n playerBorderRadius: this.playerBorderRadius,\n roundedPlayer: this.roundedPlayer,\n });\n\n render(\n <Fragment>\n <style>\n {`:host {\n display: flex;\n position: relative;\n width: 100%;\n ${mediaType === 'Audio' ? `height: ${AUDIO_DEFAULT_HEIGHT}px; min-height: 45px;` : ''}\n }`}\n </style>\n {this.#shouldDisplaySwatch() && (\n <div\n style={{ height: swatchHeight, left: 0, position: 'absolute', top: 0, width: '100%' }}\n class=\"wistia_swatch\"\n >\n <div style={{ height: '100%', position: 'relative', width: '100%' }}>\n <div\n style={{\n height: '100%',\n left: 0,\n overflow: 'hidden',\n position: 'absolute',\n top: 0,\n width: '100%',\n borderRadius: `${playerBorderRadius}px`,\n }}\n >\n <img\n src={swatchUrl}\n style={{\n filter: 'blur(5px)',\n height: '100%',\n objectFit: 'contain',\n width: '100%',\n }}\n alt=\"\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n </div>\n )}\n <div\n ref={(ref) => {\n this.#preloadThumbnailRoot = ref;\n }}\n ></div>\n </Fragment>,\n this.#preactRoot,\n );\n }\n\n /**\n * Renders a progressive thumbnail and a big play button as soon as possible,\n * while the rest of the player is loading.\n * @returns {void}\n */\n #renderPreloadThumbnail() {\n if (!this.#preloadThumbnailRoot) {\n return;\n }\n\n const { assets, mediaType, carouselHardWall } = this.#_playerData.mediaData;\n const { autoPlay, plugin } = this.#_playerData.embedOptions;\n\n // Don't render the preload thumbnail if we're going to show a carousel hard wall player.\n if (carouselHardWall) {\n return;\n }\n\n const thumbnailAssets = getThumbnailAssets(assets, {});\n\n const shouldRenderThumbnail =\n (!this.wistiaPopover || this.#isPopoverWithThumbnail()) &&\n mediaType !== 'Audio' &&\n thumbnailAssets.length > 0;\n\n if (!shouldRenderThumbnail) {\n return;\n }\n\n const willAutoplay = this.autoplay || autoPlay;\n const hasVideoThumbnail = plugin?.videoThumbnail !== undefined;\n const shouldRenderPlaceholder = willAutoplay === true || hasVideoThumbnail;\n\n // We don't want to render a preload thumbnail but we still want to avoid layout shift.\n // Render a blank placeholder with the expected aspect ratio so we reserve the correct amount of height.\n if (shouldRenderPlaceholder) {\n const height = this.offsetWidth / this.aspect;\n render(\n <div style={{ width: '100%', height: `${height}px` }}></div>,\n this.#preloadThumbnailRoot,\n );\n return;\n }\n\n render(\n <PlayerDataProvider\n embedOptions={this.#_playerData.embedOptions}\n mediaData={this.#_playerData.mediaData}\n >\n <PreloadThumbnail\n mediaId={this.mediaId}\n playerType={this.playerForce ?? this.#_playerType}\n playerWidth={this.offsetWidth}\n isPlayPending={this.#playPending}\n ></PreloadThumbnail>\n </PlayerDataProvider>,\n this.#preloadThumbnailRoot,\n );\n }\n\n /**\n * Returns keyboard focus to the inline trigger when the popover dialog closes.\n *\n * The popover dialog and its close controls are appended to <body> (light DOM)\n * by the public API, but the trigger the viewer activated to open the popover\n * lives in this element's shadow root. When the dialog closes the browser\n * leaves focus on the now-offscreen dialog contents, so keyboard and screen\n * reader users lose their place (WCAG 2.4.3). The legacy popover code tries to\n * restore focus, but it only sees `document.activeElement` — which is this host\n * element, since focus inside a shadow root is retargeted — so it can never\n * reach the real trigger. We own the shadow root, so we restore focus here.\n * @returns {void}\n */\n readonly #returnFocusToPopoverTrigger = (): void => {\n // Defer past the synchronous teardown in the legacy hide() — including its\n // own ineffective host focus call — so our focus move is the one that sticks.\n setTimeout(() => {\n // In the closed inline state the trigger is the only tab stop: the\n // BigPlayButton before the public api is ready, or the vulcan\n // click-to-play afterwards. Both are the first tabbable element.\n this.shadowRoot\n ?.querySelector<HTMLElement>('button.w-big-play-button, [tabindex=\"0\"]')\n ?.focus();\n }, 0);\n };\n\n /**\n * Runs any methods associated with set attributes when the element is connected to the DOM\n * @returns {void}\n * @private\n */\n #runMethodsFromAttributes(): void {\n // We have to wait until the api is ready to set the current time\n if (this.#getValueFromAttribute('current-time') !== null) {\n this.whenApiReady()\n .then(() => {\n const newTime = Number(this.#getValueFromAttribute('current-time'));\n\n const isClosedPopover = (this.#_api?.popover && !this.#_api.popover.isVisible()) ?? false;\n const isMobile = detectIsMobile() as unknown as boolean;\n const shouldDelayUntilPlay = this.state !== 'playing' && (isMobile || isClosedPopover);\n\n void this.#_impl?.time(newTime, { lazy: shouldDelayUntilPlay });\n this.#setSyncedEmbedOption('currentTime', newTime);\n })\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch((_error: unknown) => {});\n }\n\n if (this.#getValueFromAttribute('email') !== null) {\n this.#updateEmail(this.#getValueFromAttribute('email') as string);\n }\n\n if (this.#getValueFromAttribute('video-quality') !== null) {\n this.whenApiReady()\n .then(() => {\n const newQuality = this.#getValueFromAttribute('video-quality') as number | 'auto';\n\n this.#_impl?.setVideoQuality(newQuality);\n this.#setSyncedEmbedOption('videoQuality', newQuality);\n })\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch((_error: unknown) => {});\n }\n }\n\n /**\n * Saves the initial attributes from the DOM to a store so the public api can use them\n * @returns {void}\n * @private\n */\n #saveInitialAttributesFromDomOptions(): void {\n const domOptions = Object.fromEntries(\n Object.entries(this.attributes).map(([, value]) => [\n kebabCaseToCamelCase(value.name),\n this.#getValueFromAttribute(value.name),\n ]),\n );\n\n this.#_playerData.setDomEmbedOptionSource(domOptions);\n\n // The public api uses this store when it gathers options from our many different sources\n setEmbedOptionStore(`__${this.uniqueId}_dom_options__`, this.#_playerData.embedOptions);\n }\n\n /**\n * Takes an object of embed options and sets both the value of an\n * embed option from the public api and the value of an embed option\n * saved on this element.\n *\n * For now, the public api is the source of truth for embed options.\n * However, this will change in the future. We also need a non-public\n * api source for embed options so we can use them before the public\n * api is ready.\n * @param {Partial<EmbedOptions>} options - Object of embed options\n * @returns {void}\n */\n #setMultipleSyncedEmbedOptions(options: Partial<EmbedOptions>): void {\n Object.entries(options).forEach((entry) => {\n const [key, value] = entry;\n // The TypeScript compiler is complaining because it thinks the value can never be undefined\n // based on the type definition, but we're being defensive here\n if (value == null) {\n return;\n }\n\n // If the embed option has a setter, use that. Our setters call #setSyncedEmbedOption\n // which will update the public api and the embed option store, and importantly they\n // *also* run any specific functions that are needed for that embed option.\n if (Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), key)?.set) {\n this[key] = value;\n } else {\n // Otherwise, we'll just run #setSyncedEmbedOption directly\n this.#setSyncedEmbedOption(\n key,\n value as Authorization | Gradient | boolean | number | string,\n );\n }\n });\n }\n\n /**\n * Sets both the value of an embed option from the public api\n * and the value of an embed option saved on this element.\n *\n * For now, the public api is the source of truth for embed options.\n * However, this will change in the future. We also need a non-public\n * api source for embed options so we can use them before the public\n * api is ready.\n * @param {string} key - Name of the embed option\n * @param {boolean | number | string} value - Value of the embed option\n * @returns {void}\n */\n #setSyncedEmbedOption(\n key: string,\n value: Authorization | Gradient | boolean | number | string,\n ): void {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n this.#_logger.info(`set ${key}`, value.toString());\n\n if (this.#_impl) {\n this.#_impl._attrs[key] = value;\n }\n this.#_playerData.updateEmbedOptionOverrides({ [key]: value });\n\n // Updates our PlayerDataProvider and re-renders the thumbnail with the new embed option\n this.#renderPreloadThumbnail();\n }\n\n #setupEventListeners(): void {\n const loadedMediaDataCallback = (event: LOADED_MEDIA_DATA_EVENT_TYPE) => {\n this.#updateMediaData(event.detail.mediaData);\n };\n\n const implCreatedCallback = (event: IMPL_CREATED_EVENT_TYPE) => {\n this.#_impl = event.detail.impl;\n };\n\n this.addEventListener(LOADED_MEDIA_DATA_EVENT, loadedMediaDataCallback);\n this.addEventListener(IMPL_CREATED_EVENT, implCreatedCallback);\n\n // Dispatched on this host by the legacy popover code each time the popover\n // dialog closes. See #returnFocusToPopoverTrigger.\n this.addEventListener('popover-hide', this.#returnFocusToPopoverTrigger);\n const popoverThumbnailReadyCallback = (): void => {\n this.#destroyPreloadThumbnailForPopover();\n };\n this.addEventListener('popover-thumbnail-ready', popoverThumbnailReadyCallback);\n\n this.#_removeEventListeners.push(\n () => {\n this.removeEventListener(LOADED_MEDIA_DATA_EVENT, loadedMediaDataCallback);\n },\n () => {\n this.removeEventListener(IMPL_CREATED_EVENT, implCreatedCallback);\n },\n () => {\n this.removeEventListener('popover-hide', this.#returnFocusToPopoverTrigger);\n },\n () => {\n this.removeEventListener('popover-thumbnail-ready', popoverThumbnailReadyCallback);\n },\n );\n this.addEventListener('click', this.#handlePreloadThumbnailClick, PRELOAD_CLICK_OPTIONS);\n }\n\n /**\n * Determines if a swatch should be displayed based on the embed options\n * @returns {boolean}\n */\n #shouldDisplaySwatch(): boolean {\n // If this is a popover and it renders a thumbnail in its container, we'll want to show a swatch\n return this.swatch !== false && (!this.wistiaPopover || this.#isPopoverWithThumbnail());\n }\n\n /**\n * Saves new email within localstorage and dispatches an emailchange event\n * @param {string} email - The new email\n * @returns {void}\n * @emits {EmailChangeEventData}\n * @private\n */\n #updateEmail(email: string): void {\n updateWistiaLocalStorage((localStorage: WistiaLocalStorage) => {\n // eslint-disable-next-line no-param-reassign\n localStorage[this.#pageUrl] = {\n ...localStorage[this.#pageUrl],\n trackEmail: email,\n };\n });\n this.dispatchEvent(\n new CustomEvent<EmailChangeEventData>('emailchange', {\n detail: { email },\n }),\n );\n }\n\n /**\n * Called when we have new mediadata for the player\n * @param {MediaData} mediaData\n * @returns {void}\n * @private\n */\n #updateMediaData(mediaData: MediaData): void {\n if (isMediaDataError(mediaData)) {\n // Return early to avoid errors since the rest of the code assumes a\n // MediaData object.\n return;\n }\n\n this.#_playerData.setMediaDataSource(mediaData);\n\n this.#_playerType = choosePlayer(\n this.#_judyContext,\n this.#_playerData.mediaData,\n this.#_playerData.embedOptions,\n ) as Players;\n\n this.#renderPreloadThumbnail();\n }\n}\n\n/**\n * Takes an image url (swatch) and returns the image metadata\n * @param {string} url\n * @returns {Promise<HTMLImageElement>}\n */\nconst getSwatchMetaData = async (url: string) => {\n const swatch = new Image();\n swatch.src = url;\n await swatch.decode();\n return swatch;\n};\n\n/**\n * Takes a media id and returns a swatch style element once we\n * have the swatch image metadata to calculate the aspect ratio\n * @param {string} mediaId\n * @returns {Promise<HTMLStyleElement>}\n */\nexport const wistiaSwatchElement = async (\n mediaId: string,\n embedHost?: string,\n): Promise<HTMLStyleElement> => {\n const swatchUrl = getSwatchUrl(mediaId, embedHost);\n\n const swatchImg = await getSwatchMetaData(swatchUrl);\n const { naturalHeight, naturalWidth } = swatchImg;\n const ratio = (naturalHeight / naturalWidth) * 100;\n\n const style = document.createElement('style');\n style.innerHTML = `\n wistia-player[media-id='${mediaId}']:not(:defined) {\n padding: ${ratio}% 0 0 0;\n background: url(${swatchUrl});\n background-size: contain;\n filter: blur(5px);\n display: block;\n }\n `;\n return style;\n};\n\nif (customElements.get('wistia-player') === undefined) {\n customElements.define('wistia-player', WistiaPlayer);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'wistia-player': WistiaPlayer;\n }\n\n interface GlobalEventHandlersEventMap {\n [AFTER_REPLACE_EVENT]: WistiaPlayerEvents[typeof AFTER_REPLACE_EVENT];\n [API_READY_EVENT]: WistiaPlayerEvents[typeof API_READY_EVENT];\n [BEFORE_REPLACE_EVENT]: WistiaPlayerEvents[typeof BEFORE_REPLACE_EVENT];\n [INPUT_CONTEXT_CHANGE_EVENT]: WistiaPlayerEvents[typeof INPUT_CONTEXT_CHANGE_EVENT];\n [LOADED_MEDIA_DATA_EVENT]: WistiaPlayerEvents[typeof LOADED_MEDIA_DATA_EVENT];\n [MUTE_CHANGE_EVENT]: WistiaPlayerEvents[typeof MUTE_CHANGE_EVENT];\n }\n}\n\ntype WistiaPlayerHTMLAttributes = HTMLAttributes<WistiaPlayer> &\n Partial<\n Pick<\n WistiaPlayer,\n | 'aspect'\n | 'bigPlayButton'\n | 'branding'\n | 'contrastIcons'\n | 'doNotTrack'\n | 'embedHost'\n | 'opaqueControls'\n | 'playerColor'\n | 'playerColorGradient'\n | 'roundedPlayer'\n | 'swatch'\n >\n > &\n Pick<WistiaPlayer, 'mediaId'>;\n\ndeclare module 'preact/src/jsx' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSXInternal {\n interface IntrinsicElements {\n 'wistia-player': WistiaPlayerHTMLAttributes;\n }\n }\n}\n"],"names":[],"ignoreList":[],"sourceRoot":""}
1
+ {"version":3,"file":"wistia-player.js","mappings":"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AACA;AACA;AACA;AACA;AACA;AACA,UAAW;AACX;AACA;AACA,gCAAgC;AAChC,mCAAmC;AACnC;AACA;AACA,mBAAmB,UAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAiB;AACjB,yBAAe;AACf,SAAS,UAAW;AACpB,eAAe,UAAiB;AAChC,aAAa,UAAe;AAC5B,WAAW,UAAa;AACxB;;;;;;;;;;;;;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkE;AAClB;AAEzC,MAAM,KAAK,GAAG,CAAC;AACf,MAAM,OAAO,GAAG,CAAC;AACjB,MAAM,MAAM,GAAG,CAAC;AAChB,MAAM,IAAI,GAAG,CAAC;AACd,MAAM,KAAK,GAAG,CAAC;AACf,MAAM,UAAU,GAAG;EACxB,KAAK;EACL,OAAO;EACP,MAAM;EACN,IAAI;EACJ,KAAK;EACL,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,OAAO;EAChB,MAAM,EAAE,MAAM;EACd,IAAI,EAAE,IAAI;EACV,KAAK,EAAE;AACT,CAAC;AAED,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC;AAEpB,MAAM,MAAM,GAAG,UAAU,GAAG,EAAE;EACnC,MAAM,IAAI,GAAG,IAAI;EAEjB,IAAI,GAAG,IAAI,IAAI,EAAE;IACf,GAAG,GAAG,CAAC,CAAC;EACV;EAEA,MAAM,SAAS,GAAG,YAAY;IAC5B,IAAI,CAAC,GAAG,GAAG,GAAG;IACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;MAC3B,IAAI,CAAC,KA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;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,WAAW,OAAO;AAClB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,QAAQ,UAAU;AAC7B,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,kBAAkB;AAClB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA,+CAA+C,mBAAmB;AAClE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,WAAW;AACX;AACA,cAAc,QAAQ;AACtB,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,WAAW;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ,IAAI,QAAQ;AACjC;AACA;AACA;AACA,aAAa,QAAQ,IAAI,QAAQ;AACjC;AACA;AACA;AACA,WAAW,QAAQ,gBAAgB,IAAI,gBAAgB;AACvD;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,UAAU;AACvB;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA,YAAY,QAAQ,IAAI,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,GAAG;AAChB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACx7DA,IAAI,QAAQ;AACZ,IAAI;EACF,QAAQ,GAAG,IAAI,CAAC,CAAC;EACjB,IACE,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAC1B,OAAO,QAAQ,CAAC,IAAI,KAAK,WAAW,IACpC,OAAO,MAAM,KAAK,WAAW,EAC7B;IACA;IACA;IACA,QAAQ,GAAG,MAAM;EACnB;AACF,CAAC,CAAC,OAAO,GAAG,EAAE;EACZ,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IACrC,QAAQ,GAAG,UAAU,CAAC,CAAC;EACzB,CAAC,MAAM;IACL;IACA,QAAQ,GAAG,MAAM;EACnB;AACF;AAEO,MAAM,IAAI,GAAG,QAAQ,C;;;;;;;;;;;ACrBrB,MAAM,yBAAyB,GAAG,oDAAoD;AACtF,MAAM,eAAe,GAAG,0CAA0C;AAClE,MAAM,uBAAuB,GAAG,kDAAkD;AAClF,MAAM,oBAAoB,GAAG,yDAAyD,C;;;;;;;;ACH7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,qBAAM,gBAAgB,qBAAM,IAAI,qBAAM,sBAAsB,qBAAM;;AAE1F;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,KAA0B;;AAE5C;AACA,gCAAgC,QAAa;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB;AACA,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,QAAQ,UAAU;AAC7B,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA,wBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ,UAAU;AAC7B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,GAAG;AAChB;AACA;AACA;AACA,oBAAoB,QAAQ,IAAI,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,kBAAkB;AAClB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;ACntDA;AACA;;AAEO,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,KAAK;EACvC,IAAI,MAAM,CAAC,MAAM,EAAE;IACjB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;EACrC;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1B;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;EAChC,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;IAClB,kBAAkB,IAAI,EAAE,CAAC,GAAG;MAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,C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","sources":["webpack://@wistia/wistia-player/../../src/utilities/script-utils.js","webpack://@wistia/wistia-player/../../src/utilities/performance.ts","webpack://@wistia/wistia-player/../../src/utilities/judy.js","webpack://@wistia/wistia-player/../../src/utilities/wistiaQueue.ts","webpack://@wistia/wistia-player/../../src/utilities/metrics.js","webpack://@wistia/wistia-player/../../src/utilities/obj.js","webpack://@wistia/wistia-player/../../src/appHostname.js","webpack://@wistia/wistia-player/../../src/utilities/mediaDataError.ts","webpack://@wistia/wistia-player/../../src/utilities/color-utils.ts","webpack://@wistia/wistia-player/../../src/utilities/simpleMetrics.js","webpack://@wistia/wistia-player/../../src/utilities/seqid.js","webpack://@wistia/wistia-player/../../src/utilities/runScript.js","webpack://@wistia/wistia-player/../../src/utilities/duration.ts","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/constants.ts","webpack://@wistia/wistia-player/../../node_modules/preact/compat/dist/compat.module.js","webpack://@wistia/wistia-player/../../src/utilities/core.js","webpack://@wistia/wistia-player/../../src/utilities/media_data.js","webpack://@wistia/wistia-player/../../src/utilities/svg_boilerplate.ts","webpack://@wistia/wistia-player/../../src/utilities/injectJsonLd.js","webpack://@wistia/wistia-player/../../src/utilities/unescape-html.js","webpack://@wistia/wistia-player/../../src/utilities/sentryUtils.ts","webpack://@wistia/wistia-player/../../src/utilities/url.js","webpack://@wistia/wistia-player/../../src/utilities/eventShepherd.ts","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/hooks/usePlayerData.tsx","webpack://@wistia/wistia-player/../../src/utilities/eventConstants.ts","webpack://@wistia/wistia-player/../../src/utilities/namespacedLocalStorage.js","webpack://@wistia/wistia-player/../../src/utilities/fetchMediaData.ts","webpack://@wistia/wistia-player/../../src/utilities/roundedPlayerDefaults.ts","webpack://@wistia/wistia-player/../../src/embeds/shared/ProgressiveThumbnail.jsx","webpack://@wistia/wistia-player/../../src/utilities/embedOptionStore.ts","webpack://@wistia/wistia-player/../../src/utilities/remote-data-cache.ts","webpack://@wistia/wistia-player/../../src/utilities/keyMoments.ts","webpack://@wistia/wistia-player/../../src/utilities/legacyLocalstorage.js","webpack://@wistia/wistia-player/../../src/utilities/timeout-utils.js","webpack://@wistia/wistia-player/../../node_modules/preact/hooks/dist/hooks.module.js","webpack://@wistia/wistia-player/../../src/utilities/extractEmailFromParams.ts","webpack://@wistia/wistia-player/../../src/utilities/media-data-transforms.js","webpack://@wistia/wistia-player/../../src/utilities/wistiaData.js","webpack://@wistia/wistia-player/../../src/utilities/globalBindAndTrigger.js","webpack://@wistia/wistia-player/../../src/utilities/fit-control.js","webpack://@wistia/wistia-player/../../src/utilities/gradients.ts","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/getPreferredLanguageIndex.ts","webpack://@wistia/wistia-player/../../src/utilities/image.js","webpack://@wistia/wistia-player/../../src/embeds/media/players/vulcanV2Player/shared/ui_components/BigPlayButtonLoadingAnim.tsx","webpack://@wistia/wistia-player/../../src/embeds/shared/translations.js","webpack://@wistia/wistia-player/../../src/utilities/trackingConsentApi.js","webpack://@wistia/wistia-player/../../src/utilities/camelCaseToKebabCase.ts","webpack://@wistia/wistia-player/../../src/utilities/wistiaLocalStorage.js","webpack://@wistia/wistia-player/../../node_modules/preact/dist/preact.module.js","webpack://@wistia/wistia-player/../../src/utilities/inferPageUrl.ts","webpack://@wistia/wistia-player/../../src/utilities/color.js","webpack://@wistia/wistia-player/../../src/wistia_namespace.ts","webpack://@wistia/wistia-player/../../src/utilities/getApiHandles.ts","webpack://@wistia/wistia-player/../../src/embeds/shared/Thumbnail.jsx","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/getInitialMediaData.ts","webpack://@wistia/wistia-player/../../src/utilities/hosts.js","webpack://@wistia/wistia-player/../../src/utilities/script-tags.js","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/utilities/PlayerDataHandler.ts","webpack://@wistia/wistia-player/../../node_modules/iso8601-duration/lib/index.js","webpack://@wistia/wistia-player/../../src/utilities/wlog.js","webpack://@wistia/wistia-player/../../src/embeds/media/players/vulcanV2Player/shared/ui_components/BigPlayButton.tsx","webpack://@wistia/wistia-player/../../src/utilities/dynamicImport.ts","webpack://@wistia/wistia-player/../../src/utilities/assets.js","webpack://@wistia/wistia-player/../../src/utilities/shouldEnableMux.ts","webpack://@wistia/wistia-player/../../src/utilities/iso8601Helper.ts","webpack://@wistia/wistia-player/../../src/utilities/detect.js","webpack://@wistia/wistia-player/../../src/utilities/coinFlip.ts","webpack://@wistia/wistia-player/../../src/types/gradient.ts","webpack://@wistia/wistia-player/../../src/utilities/viewerPreferences.js","webpack://@wistia/wistia-player/../../src/utilities/elem.js","webpack://@wistia/wistia-player/../../src/embeds/media/players/vulcanV2Player/shared/ui_components/svgs/BigPlayButtonSVG.tsx","webpack://@wistia/wistia-player/../../node_modules/lodash.merge/index.js","webpack://@wistia/wistia-player/../../src/utilities/root.js","webpack://@wistia/wistia-player/../../src/utilities/interFontFamily.js","webpack://@wistia/wistia-player/../../node_modules/lodash.clonedeep/index.js","webpack://@wistia/wistia-player/../../src/utilities/assign.js","webpack://@wistia/wistia-player/../../src/utilities/bindify.js","webpack://@wistia/wistia-player/../../src/utilities/normalizeChapters.ts","webpack://@wistia/wistia-player/../../src/utilities/wbindable.js","webpack://@wistia/wistia-player/../../src/utilities/wistiaOptions.ts","webpack://@wistia/wistia-player/../../src/utilities/pageLoaded.js","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/components/PreloadThumbnail.tsx","webpack://@wistia/wistia-player/../../node_modules/@wistia/type-guards/dist/index.mjs","webpack://@wistia/wistia-player/webpack/bootstrap","webpack://@wistia/wistia-player/webpack/runtime/compat get default export","webpack://@wistia/wistia-player/webpack/runtime/define property getters","webpack://@wistia/wistia-player/webpack/runtime/global","webpack://@wistia/wistia-player/webpack/runtime/hasOwnProperty shorthand","webpack://@wistia/wistia-player/webpack/runtime/make namespace object","webpack://@wistia/wistia-player/webpack/runtime/node module decorator","webpack://@wistia/wistia-player/../../src/embeds/wistiaPlayer/WistiaPlayer.tsx"],"sourcesContent":["import { wlog } from 'utilities/wlog.js';\nimport { isObject } from 'utilities/obj.js';\nimport { runScript as runScriptWithPromise } from 'utilities/runScript.js';\n\nexport const findScriptInDomBySrc = (targetSrc, options = {}) => {\n const scriptTags = document.getElementsByTagName('script');\n for (let i = 0; i < scriptTags.length; i++) {\n const s = scriptTags[i];\n let src = s.getAttribute('src') || '';\n\n if (options.ignoreQueryParams) {\n let matches = src.split('?');\n let urlWithoutParams = matches[0];\n src = urlWithoutParams;\n }\n\n if (!options.scriptRegex && options.ignoreProtocol) {\n src = src.replace(/^https?:/, '');\n targetSrc = targetSrc.replace(/^https?:/, '');\n }\n\n if (options.scriptRegex && options.scriptRegex.test(src)) {\n return s;\n }\n if (options.testStartsWith && src.indexOf(targetSrc) === 0) {\n return s;\n }\n if (src === targetSrc) {\n return s;\n }\n }\n return null;\n};\n\nexport const removeScriptsBySrc = (targetSrc, options = {}) => {\n let s;\n while ((s = findScriptInDomBySrc(targetSrc, options))) {\n if (s) {\n s.onload = s.onreadystatechange = s.onerror = null;\n if (s.parentNode && typeof s.parentNode.removeChild) {\n try {\n s.parentNode.removeChild(s);\n } catch (e) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n }\n }\n }\n};\n\n// fire and forget.\n// run a script and immediately remove it from the DOM.\nexport const runScript = (src, timeout = 8000, options = {}) => {\n if (timeout == null) {\n timeout = 8000;\n }\n if (options == null) {\n options = {};\n }\n let s;\n let alreadyExists;\n\n return new Promise((resolve) => {\n if (options.once === true && (s = findScriptInDomBySrc(src))) {\n alreadyExists = true;\n }\n\n if (options.once && alreadyExists) {\n if (!s.readyState || /loaded|complete/.test(s.readyState)) {\n setTimeout(() => {\n resolve();\n }, 1);\n }\n } else {\n runScriptWithPromise(src, timeout)\n .then(resolve)\n .catch((msg) => {\n resolve(msg);\n setTimeout(() => {\n console.error(msg);\n }, 1);\n });\n }\n });\n};\n\nexport const runScripts = (...args) => {\n // support either an array of scripts or a single script as a string\n let scripts;\n if (args[0] instanceof Array) {\n scripts = args[0];\n } else {\n scripts = args;\n }\n\n scripts = scriptInputsToHash(scripts);\n\n const asyncScripts = [];\n const syncScripts = [];\n const scriptPromises = [];\n\n scripts.forEach((s) => {\n const script = { ...s };\n const p = new Promise((resolve) => {\n script.resolve = resolve;\n });\n\n script.promise = p;\n\n scriptPromises.push(script.promise);\n\n if (s.async) {\n asyncScripts.push(script);\n } else {\n syncScripts.push(script);\n }\n });\n\n syncScripts.reduce((prev, script) => {\n if (script.fn) {\n try {\n script.fn();\n } catch (e) {\n wlog.error(e);\n } finally {\n script.resolve();\n }\n } else if (script.src) {\n runScript(script.src, null, script).then(script.resolve);\n }\n\n return prev.then(script.promise);\n }, Promise.resolve());\n\n setTimeout(() => {\n asyncScripts.forEach((script) => {\n if (script.fn) {\n try {\n script.fn();\n } catch (e) {\n wlog.error(e);\n } finally {\n script.resolve();\n }\n } else if (script.src) {\n runScript(script.src, null, script).then(script.resolve);\n }\n });\n }, 1);\n\n return Promise.all(scriptPromises);\n};\n\nexport const scriptInputsToHash = (scripts) => {\n const result = [];\n for (let i = 0; i < scripts.length; i++) {\n let script = scripts[i];\n if (typeof script === 'string') {\n result.push({ src: script, async: false });\n } else if (isObject(script)) {\n result.push(script);\n } else {\n result.push({ fn: script, async: false });\n }\n }\n return result;\n};\n","export const hasPerformanceMeasureSupport = (): boolean => {\n const { performance } = window;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return Boolean(performance) && Boolean(performance.measure);\n};\n","import { cast, clone, except, getDeep, indexOf, merge } from 'utilities/obj.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { count } from 'utilities/metrics.js';\nimport { setOrGet as wlocalstorage } from 'utilities/legacyLocalstorage.js';\nimport { root } from 'utilities/root.js';\nimport { wlog as wlogRaw } from 'utilities/wlog.js';\nimport {\n filter,\n READY,\n readyPublicMp4s,\n readyPublicM3u8s,\n readyPublicMp3s,\n nonfailedPublicOver400,\n readyPublicOver400,\n} from './assets.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst wlog = wlogRaw.getPrefixedFunctions('judy');\n\nconst AUTO = 'auto';\nconst CAROUSEL_HARD_WALL = 'carouselHardWall';\nconst EXTERNAL = 'external';\nconst HLS_VIDEO = 'hlsVideo';\nconst HTML5 = 'html5';\nconst MANUAL_QUALITY_VIDEO = 'manualQualityVideo';\nconst NATIVE_HLS_VIDEO = 'nativeHlsVideo';\nconst NOT_PLAYABLE = 'notplayable';\nconst PASSWORD_PROTECTED = 'passwordprotected';\nconst SIMPLE_HTML5 = 'simplehtml5';\nconst VULCAN_V2 = 'vulcan-v2';\nconst SPHERICAL_VIDEO = 'sphericalVideo';\nconst PLAYERS = [VULCAN_V2, HTML5, SIMPLE_HTML5, EXTERNAL, NOT_PLAYABLE, PASSWORD_PROTECTED];\n\nexport const HLS_ENGINE_PATH = 'engines/hls_video.js';\nexport const NATIVE_HLS_ENGINE_PATH = 'engines/native_hls_video.js';\nexport const SIMPLE_AUDIO_ENGINE_PATH = 'engines/simple_audio.js';\nexport const MANUAL_QUALITY_ENGINE_PATH = 'engines/manual_quality_video.js';\nexport const SPHERICAL_VIDEO_ENGINE_PATH = 'engines/spherical_video.js';\n\nexport const PLUGIN_CONFIGS = {\n notPlayableVideo: {\n on: true,\n initBeforeHasData: true,\n async: false,\n loadWeight: -1,\n },\n vulcanV2Player: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n hlsVideo: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: 0,\n },\n nativeHlsVideo: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: 0,\n },\n passwordProtectedVideo: {\n on: true,\n initBeforeHasData: true,\n async: false,\n loadWeight: -1,\n },\n externalPlayer: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n html5Player: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n playlist: {\n on: true,\n initBeforeHasData: false,\n async: false,\n loadWeight: -1,\n },\n};\n\nexport const bestPlayer = (context, mediaData, embedOptions) => {\n const { detect, logger } = context;\n\n const isSpherical = isSphericalVideo({ mediaData, options: embedOptions }, detect);\n\n if (detect.oldandroid) {\n logger.info('external on old android');\n return EXTERNAL;\n }\n if (canUsePlayer(context, VULCAN_V2, mediaData)) {\n logger.info('default, ret', VULCAN_V2);\n return VULCAN_V2;\n }\n if (mediaData.mediaType === 'Audio' || mediaData.mediaType === 'LiveStream') {\n // audio and lives are only supported with vulcan_v2\n return VULCAN_V2;\n }\n if (canUsePlayer(context, HTML5, mediaData)) {\n logger.info('default, ret', HTML5);\n return HTML5;\n }\n logger.info('nothing left, use', EXTERNAL);\n // Everything supports external, but nobody likes it. It's just an image\n // and a link to an mp4 file.\n return EXTERNAL;\n};\n\nexport const bestUsableEngine = (context, mediaData, options = {}) => {\n const { detect, logger } = context;\n logger.info('bestUsableEngineClass');\n const allowHls = shouldServeHls(context, mediaData, options);\n\n const isSpherical = isSphericalVideo(\n {\n mediaData,\n options,\n },\n detect,\n );\n\n if (options.engine) {\n return options.engine;\n }\n\n if (isSpherical) {\n logger.info(SPHERICAL_VIDEO);\n return SPHERICAL_VIDEO_ENGINE_PATH;\n }\n\n if (mediaData.mediaType === 'Audio') {\n return SIMPLE_AUDIO_ENGINE_PATH;\n }\n\n // If managedMediaSource is false or restricted by same origin (often iframes), we need to use the native hls video engine\n // Otherwise, we can use the hls.js in Safari\n const isApple = detect.safari || detect.ios.version > 0;\n const allowsSameOrigin = window.origin !== 'null';\n const restrictedBySameOrigin = isApple && !allowsSameOrigin;\n if (\n allowHls &&\n detect.nativeHls &&\n (detect.managedMediaSource === false || restrictedBySameOrigin)\n ) {\n logger.info(NATIVE_HLS_VIDEO);\n return NATIVE_HLS_ENGINE_PATH;\n }\n\n if (allowHls) {\n logger.info(HLS_VIDEO);\n return HLS_ENGINE_PATH;\n }\n\n logger.info(MANUAL_QUALITY_VIDEO);\n return MANUAL_QUALITY_ENGINE_PATH;\n};\n\n// Given a media data blob and options--and assuming all engine scripts have\n// been loaded--return the engine class that we should initialize.\nexport const bestUsableEngineClass = (context, mediaData, options = {}) => {\n const { detect, logger } = context;\n logger.info('bestUsableEngineClass');\n const allowHls = shouldServeHls(context, mediaData, options);\n\n const engines = Wistia.engines || {};\n\n if (mediaData.mediaType === 'Audio') {\n return engines.SimpleAudio;\n }\n\n if (allowHls && detect.nativeHls && engines.NativeHlsVideo) {\n logger.info(NATIVE_HLS_VIDEO);\n return engines.NativeHlsVideo;\n }\n\n if (allowHls && engines.HlsVideo) {\n logger.info(HLS_VIDEO);\n return engines.HlsVideo;\n }\n\n logger.info(MANUAL_QUALITY_VIDEO);\n return engines.ManualQualityVideo;\n};\n\nexport const buildContext = (overrides = {}) => {\n const pageUrl = contextUrl(overrides);\n return { ...getDefaultContext(), ...overrides, pageUrl };\n};\n\nexport const canPlayInline = (context) => {\n const { detect } = context;\n return detect.android || detect.ios.version >= 10;\n};\n\nexport const canUsePlayer = (context, player, mediaData) => {\n return isSupportedPlayer(context, player) && hasAssetsForPlayer(context, player, mediaData);\n};\n\nexport const choosePlayer = (context, mediaData, embedOptions) => {\n const { detect } = context;\n const { logger } = context;\n let { playerForce } = embedOptions;\n\n logger.info('choosePlayer input', mediaData.hashedId);\n\n // This can be falsey if there is no specific player preference. Users may\n // also pass in \"auto\" to be explicit, which means there should be no\n // preference.\n let playerPreference = determinePlayerPreferenceFromInput(context, mediaData, embedOptions);\n\n // Loudly error but don't die if given invalid input.\n if (playerForce && !isValidPlayer(context, playerForce)) {\n logger.error(`Invalid playerForce option: \"${playerForce}\", ignoring`);\n playerForce = null;\n }\n if (playerPreference && playerPreference !== AUTO && !isValidPlayer(context, playerPreference)) {\n logger.error(`Invalid playerPreference option: \"${playerPreference}\", ignoring`);\n playerPreference = AUTO;\n }\n\n logger.info('playerPreference is', playerPreference);\n\n if (playerForce) {\n // This is really only used when testing.\n logger.info('\"playerForce\" used, return', playerForce);\n return playerForce;\n }\n // A carousel can contain a password-protected media which should be unlocked\n // when the carousel is unlocked, so this check should always\n // come before the check to see if a media is password-protected\n if (mediaData.carouselHardWall) {\n logger.info('return', CAROUSEL_HARD_WALL);\n return CAROUSEL_HARD_WALL;\n }\n if (isPasswordProtected(context, embedOptions)) {\n // the video is marked as being password protected. it's expected that the\n // password protected player, upon a successful password entry, changes an\n // option and is replaced such that isPasswordProtected() returns false.\n logger.info('return', PASSWORD_PROTECTED);\n return PASSWORD_PROTECTED;\n }\n if (isNotPlayable(context, mediaData, embedOptions)) {\n // 1. We can generate embed codes before a video can actually be played. If we\n // can't field any kind of player, we want to embed NOT_PLAYABLE instead,\n // which shows upload and encoding progress, then re-embeds as a \"real\"\n // player once it reaches 100%.\n // 2. DRM-lite customers must include their `authorization` credentials as embedOptions. If we know\n // a media is \"protected\", but there are no authorization credentials for the embed, we can build\n // directly into the NotPlayablePlayer state.\n // 3. DRM-lite customers that either do not have HLS enabled or cannot use HLS\n // will reach a NOT_PLAYABLE state.\n logger.info('return', NOT_PLAYABLE);\n return NOT_PLAYABLE;\n }\n\n // DRM-lite medias are marked as \"protected\". And those medias must be played back using our\n // VULCAN_V2 player.\n if (mediaData.protected) {\n return VULCAN_V2;\n }\n\n if (playerPreference !== AUTO && canUsePlayer(context, playerPreference, mediaData)) {\n const isSpherical = isSphericalVideo({ mediaData, options: embedOptions }, detect);\n if (playerPreference !== VULCAN_V2 && isSpherical) {\n logger.info(\"this player doesn't support spherical, return\", VULCAN_V2);\n return VULCAN_V2;\n }\n // Hooray! The customer has chosen a preference that we can actually use.\n // Let's use it.\n logger.info('\"playerPreference\" used, return', playerPreference);\n return playerPreference;\n }\n // Okay, we are not being compelled to use any particular player. Choose\n // the best one that we can support.\n logger.info('choosing player with no preference');\n return bestPlayer(context, mediaData, embedOptions);\n};\n\n// return the url to use for building up the Judy context.\nconst contextUrl = (opts = {}) => {\n if (opts.pageUrl) {\n return opts.pageUrl;\n }\n\n if (Object(window.FreshUrl).originalUrl) {\n return window.FreshUrl.originalUrl;\n }\n\n if (window.top === window.self) {\n return location.href || '';\n }\n\n return document.referrer || '';\n};\n\nexport const determinePlayerPreferenceFromInput = (context, mediaData, embedOptions) => {\n // platformPreference is a legacy option. It used to have difference\n // semantics as playerPreference, but let's treat it the same now.\n const playerPreference = embedOptions.playerPreference || embedOptions.platformPreference;\n\n if (playerPreference && playerPreference !== AUTO) {\n if (playerPreference === HTML5) {\n if (isMobile(context)) {\n return HTML5;\n }\n return VULCAN_V2;\n }\n if (playerPreference === SIMPLE_HTML5) {\n // Because \"html5\" is an overloaded term on desktop, we add this other one\n // so we can more easily test the simple/mobile html5 player.\n return HTML5;\n }\n return playerPreference;\n }\n // no preference was specified\n return AUTO;\n};\n\n// the browser can support hlsjs or native HLS\nexport const doesBrowserSupportHlsTools = (detect) => {\n const hasPromise = Boolean(window.Promise);\n\n return (detect.mediaSource || detect.nativeHls) && hasPromise;\n};\n\n// Given a media data blob and options, return _all_ engines and sub-engines\n// that will need to be loaded. This is how we determine which scripts to load.\nexport const enginesToLoad = (context, mediaData, options = {}) => {\n const { detect, logger } = context;\n let engineNames = [];\n\n logger.info('enginesToLoad');\n\n const allowHls = shouldServeHls(context, mediaData, options);\n if (allowHls && detect.nativeHls) {\n logger.info(NATIVE_HLS_VIDEO);\n engineNames.push(NATIVE_HLS_VIDEO);\n } else if (allowHls) {\n logger.info(HLS_VIDEO);\n engineNames.push(HLS_VIDEO);\n } else {\n logger.info(MANUAL_QUALITY_VIDEO);\n engineNames.push(MANUAL_QUALITY_VIDEO);\n }\n\n const isSpherical = isSphericalVideo({ mediaData, options }, detect);\n\n if (isSpherical) {\n engineNames.push(SPHERICAL_VIDEO);\n logger.info(SPHERICAL_VIDEO);\n }\n\n // Make sure engine names are unique in this array.\n const tmpHash = {};\n engineNames.forEach((engineName) => {\n tmpHash[engineName] = true;\n });\n const result = [];\n for (let engineName in tmpHash) {\n result.push(engineName);\n }\n\n return result;\n};\n\nlet cachedDefaultContext;\nexport const getDefaultContext = () => {\n if (cachedDefaultContext) {\n return cachedDefaultContext;\n }\n\n cachedDefaultContext = {\n detect: clone(cachedDetect()),\n inIframe: top !== self,\n location: window.location,\n logger: wlog,\n pageUrl: location.href,\n silenceGlobalWarnings: root.wistiaSilenceGlobalWarnings,\n userAgent: navigator.userAgent,\n };\n\n return cachedDefaultContext;\n};\n\nconst getPluginConfig = (context, pluginName) => {\n const result = {};\n result[pluginName] = PLUGIN_CONFIGS[pluginName];\n return result;\n};\n\nconst canUseInstantHls = (context, mediaData, embedOptions = {}) => {\n return (\n embedOptions.instantHls !== false &&\n mediaData.instantHlsAssetsReady &&\n shouldServeHls(context, mediaData, embedOptions)\n );\n};\n\nconst canUseOriginalFilePlayback = (context, mediaData, embedOptions = {}) => {\n return (\n mediaData.originalIsEligibleForDirectPlayback &&\n shouldServeHls(context, mediaData, embedOptions)\n );\n};\n\nexport const hasAssetsForPlayer = (context, player, mediaData) => {\n if (!isValidPlayer(context, player)) {\n return false;\n }\n\n if (player === NOT_PLAYABLE || player === PASSWORD_PROTECTED || player === CAROUSEL_HARD_WALL) {\n // No special asset requirements for these.\n return true;\n }\n\n const { assets } = mediaData;\n\n if (player === VULCAN_V2) {\n return (\n canUseInstantHls(context, mediaData) ||\n canUseOriginalFilePlayback(context, mediaData) ||\n hasReadyVideoAssets(assets) ||\n hasReadyAudioAssets(assets)\n );\n }\n if (player === HTML5) {\n return readyPublicMp4s(assets).length > 0;\n }\n if (player === EXTERNAL) {\n return readyPublicMp4s(assets).length > 0;\n }\n throw new Error(`Unhandled player type '${player}'`);\n};\n\nconst hasReadyVideoAssets = (assets) => {\n return readyPublicMp4s(assets).length > 0 || readyPublicM3u8s(assets).length > 0;\n};\n\nconst hasReadyAudioAssets = (assets) => {\n return readyPublicMp3s(assets).length > 0;\n};\n\nexport const hasEnoughReadyMp4Assets = (assets) => {\n const mp4Assets = filter(assets, {\n container: 'mp4',\n metadata: (m) => {\n return m && m.max_bitrate;\n },\n public: true,\n sortBy: 'width desc',\n status: READY,\n type: /\\b(?!captioned_video)\\S+/, // no burned in captions\n });\n\n // ensure that we have at least one asset at or above 400 width. This prevents\n // using HLS from using too low quality an asset, say in the scenario where\n // the other assets are still being processed.\n const hasAssetWithBitRateAndSize = Boolean(mp4Assets[0] && mp4Assets[0].width >= 400);\n return hasAssetWithBitRateAndSize;\n};\n\nexport const hasSupportedHlsAssets = (mediaData, options = {}) => {\n if (options.instantHls !== false && mediaData.instantHlsAssetsReady) {\n return true;\n }\n if (mediaData.originalIsEligibleForDirectPlayback) {\n return true;\n }\n const hasAssets = hasEnoughReadyMp4Assets(mediaData.assets);\n if (!hasAssets) {\n count('player/originV2/media-has-no-metadata', 1, { hashedId: mediaData.hashedId });\n }\n return hasAssets;\n};\n\nconst hlsOverrideValue = ({ pageUrl }, embedOptions) => {\n const paramVal = hlsQueryParamValue(pageUrl);\n if (paramVal != null) {\n return paramVal;\n }\n\n const localStorageVal = wlocalstorage('forceHls');\n if (localStorageVal != null) {\n return localStorageVal;\n }\n\n return embedOptions.hls;\n};\n\nconst hlsQueryParamValue = (pageUrl) => {\n const match = pageUrl && pageUrl.match && pageUrl.match(/[&?]whls=([^&]+)/);\n const val = match && match[1];\n if (val != null) {\n return cast(val);\n }\n return null;\n};\n\n// Chromecast doesn't work with hlsjs because it only understands a src\n// that can be referenced externally. And playsinline=false or\n// nativeMode=true is our signal to use something close to a native player.\nexport const isBrowserInNativeAndroid = (detect, embedOptions) => {\n return detect.android && (embedOptions.playsinline === false || embedOptions.nativeMode === true);\n};\n\n// chrome 49 and earlier (the last supported version on Win XP/Vista) does\n// not support MSE well enough for hls.js.\nexport const isBrowserOldChrome = (detect) => {\n return detect.chrome && parseInt(detect.chrome.version, 10) < 50;\n};\n\nexport const isHlsEnabled = (context, mediaData, embedOptions) => {\n // always prefer the hls override value if it is present, regardless of the\n // hls_enabled value\n const overrideValue = hlsOverrideValue(context, embedOptions);\n if (overrideValue === true || overrideValue === false) {\n return overrideValue;\n }\n\n if (mediaData.hls_enabled === false) {\n return false;\n }\n return true;\n};\n\nexport const isMobile = ({ detect }) => {\n return detect.iphone || detect.ipad || detect.android;\n};\n\nexport const isNotPlayable = (context, mediaData, embedOptions = {}) => {\n const { assets } = mediaData;\n\n if (\n !mediaData.protected &&\n (canUseInstantHls(context, mediaData, embedOptions) ||\n canUseOriginalFilePlayback(context, mediaData, embedOptions))\n ) {\n return false;\n }\n\n const assetsArentReady =\n mediaData.type === 'Audio'\n ? readyPublicMp3s(assets).length == 0\n : readyPublicMp4s(assets).length == 0;\n\n // LiveStreams won't have ready assets, but that does not mean we're in an\n // unplayable position.\n if (mediaData.mediaType === 'LiveStream') {\n return false;\n }\n\n // DRM-lite authorization check!\n // For DRM-lite, customers must include their `authorization` credentials as embedOptions. If we know\n // a media is \"protected\", but there are no authorization credentials for the embed, we can build\n // directly into the NotPlayablePlayer state.\n if (mediaData.protected && !embedOptions.authorization?.jwt) {\n embedOptions.notPlayableOptions = {\n fadeIn: false,\n message: 'This video is set to private.',\n shouldRefresh: false,\n };\n\n return true;\n }\n\n const allowHls = shouldServeHls(context, mediaData, embedOptions);\n if (mediaData.protected && allowHls === false) {\n embedOptions.notPlayableOptions = {\n fadeIn: false,\n message: 'This video is not playable.',\n shouldRefresh: false,\n };\n\n return true;\n }\n\n return (\n assets.length === 0 ||\n (assets.length === 1 && assets[0].type === 'original') ||\n assetsArentReady ||\n (nonfailedPublicOver400(assets).length > 0 && readyPublicOver400(assets).length === 0)\n );\n};\n\nexport const isPasswordProtected = (context, embedOptions) => {\n const pluginOpts = getDeep(embedOptions, 'plugin.passwordProtectedVideo');\n return pluginOpts != null && pluginOpts.on !== false;\n};\n\nconst isSphericalVideo = (mediaInfo = {}) => {\n if (mediaInfo.options.overrideSpherical) {\n return false;\n }\n\n const mediaDataSpherical = String(mediaInfo.mediaData?.spherical);\n const optsSpherical = String(mediaInfo.opts?.spherical);\n\n return mediaDataSpherical === 'true' || optsSpherical === 'true';\n};\n\nexport const isSupportedPlayer = (context, player) => {\n if (!isValidPlayer(context, player)) {\n return false;\n }\n return indexOf(supportedPlayers(context), player) >= 0;\n};\n\nexport const isValidPlayer = (context, player) => {\n return indexOf(PLAYERS, player) >= 0;\n};\n\nexport const logWarnings = (context) => {\n const { detect, userAgent, logger, silenceGlobalWarnings } = context;\n\n if (silenceGlobalWarnings) {\n // Customers can set window.wistiaSilenceGlobalWarnings = true, and that\n // will be included in the default judy context.\n return;\n }\n\n const isHeadless = /phantomjs/i.test(userAgent);\n if (xhrHasBeenTamperedWith()) {\n if (!isHeadless) {\n logger.error(\n 'The XMLHttpRequest constructor has been tampered with. Because this affects CORS/Range XHR requests, HLS playback has been disabled. To enable HLS playback and other important features, please remove code that changes the definition of window.XMLHttpRequest.',\n );\n }\n }\n\n if (urlHasBeenTamperedWith()) {\n if (detect.mediaSource && !isHeadless) {\n logger.error(\n 'window.URL.createObjectURL has been tampered with. Because this affects use of Media Source Extensions, HLS playback has been disabled. window.URL is a browser API that should not be clobbered. Its current value is:',\n window.URL,\n );\n }\n }\n};\n\nexport const playerPlugins = (context, player, mediaData, embedOptions) => {\n const { logger } = context;\n const plugins = {};\n\n logger.info('playerPlugins input', player, mediaData.hashedId, mediaData, embedOptions);\n\n if (player === NOT_PLAYABLE) {\n merge(plugins, getPluginConfig(context, 'notPlayableVideo'));\n } else if (player === PASSWORD_PROTECTED) {\n merge(plugins, getPluginConfig(context, 'passwordProtectedVideo'));\n } else if (player === HTML5) {\n merge(plugins, getPluginConfig(context, 'html5Player'));\n } else if (player === EXTERNAL) {\n merge(plugins, getPluginConfig(context, 'externalPlayer'));\n } else if (player === VULCAN_V2) {\n merge(plugins, getPluginConfig(context, 'vulcanV2Player'));\n }\n\n const pluginNames = [];\n for (let k in plugins) {\n pluginNames.push(k);\n }\n logger.info('playerPlugins output', ...pluginNames, plugins);\n\n return plugins;\n};\n\nexport const report = (context, mediaData, embedOptions) => {\n return {\n bestPlayer: bestPlayer(context, mediaData, embedOptions),\n playerPreferenceFromInput: determinePlayerPreferenceFromInput(context, mediaData, embedOptions),\n supportedPlayers: supportedPlayers(context),\n usablePlayers: usablePlayers(context, mediaData.assets),\n };\n};\n\nexport const shouldServeHls = (context, mediaData, embedOptions) => {\n // start by forcing HLS when the type is livestream, but later\n // refactor things such that NotPlayablePlayer is used if we can't handle\n // live\n if (mediaData.type === 'LiveStream') {\n return true;\n }\n const { detect } = context;\n return (\n doesBrowserSupportHlsTools(detect) &&\n !isBrowserOldChrome(detect) &&\n !isBrowserInNativeAndroid(detect, embedOptions) &&\n // the account has hls enabled or explicitly trying to force\n isHlsEnabled(context, mediaData, embedOptions) &&\n // the media actually has desktop assets compatable with the delivery system\n hasSupportedHlsAssets(mediaData) &&\n // Some sites completely replace the XMLHttpRequest constructor with one\n // that doesn't work with hls.js. If we detect that, don't use HLS\n // (...unless we explicitly say to try it.)\n ((!xhrHasBeenTamperedWith(context) && !urlHasBeenTamperedWith(context)) ||\n hlsOverrideValue(context, embedOptions))\n );\n};\n\nexport const supportedPlayers = (context) => {\n const { detect } = context;\n const result = [NOT_PLAYABLE, PASSWORD_PROTECTED, EXTERNAL, CAROUSEL_HARD_WALL];\n\n if (detect.vulcanV2Support) {\n result.push(VULCAN_V2);\n }\n\n if (detect.video.h264) {\n result.push(HTML5);\n }\n\n return result;\n};\n\nexport const usablePlayers = (context, mediaData) => {\n const result = [];\n const candidates = supportedPlayers(context);\n for (let i = 0; i < candidates.length; i++) {\n let player = candidates[i];\n if (canUsePlayer(context, player, mediaData)) {\n result.push(player);\n }\n }\n return result;\n};\n\n// `URL` is a built-in type, but a lot sites accidentally clobber it like\n// `URL = location.href`. hls.js uses it though.\nexport const urlHasBeenTamperedWith = () => {\n return typeof (window.URL && window.URL.createObjectURL) !== 'function';\n};\n\n// `XMLHttpRequest.prototype.constructor.toString()` should be of this form if it's untampered with\nconst XMLHTTPREQUEST_CONSTRUCTOR_RE =\n /\\s*function\\s+XMLHttpRequest\\(\\)\\s*{\\s*\\[native code\\]\\s*}\\s*/m;\n// Oddly, safari 9.x seems to display this in the [object ...] form.\nconst XMLHTTPREQUEST_CONSTRUCTOR_IN_SAFARI_9_RE = /\\[object XMLHttpRequestConstructor\\]/m;\n\nexport const xhrHasBeenTamperedWith = () => {\n if (XMLHttpRequest && XMLHttpRequest.prototype && XMLHttpRequest.prototype.constructor) {\n const constructorString = XMLHttpRequest.prototype.constructor.toString();\n return !(\n XMLHTTPREQUEST_CONSTRUCTOR_RE.test(constructorString) ||\n XMLHTTPREQUEST_CONSTRUCTOR_IN_SAFARI_9_RE.test(constructorString)\n );\n }\n return true;\n};\n","import { Wistia } from '../wistia_namespace.ts';\nimport type { WistiaGlobal } from '../types/player-api-types.ts';\n\nconst QUEUE_INTERVAL = 500;\n\nlet wistiaQueue = null as unknown as NodeJS.Timeout | null;\n\n/**\n * Periodically checks the Wistia queue and executes the functions in it\n * @returns {void}\n */\nexport const maybeStartWistiaQueue = (): void => {\n if (wistiaQueue) {\n return;\n }\n\n wistiaQueue = setInterval(() => {\n // Bail if window is gone (e.g., jsdom torn down between vitest tests\n // while the interval is still alive in Node). Without this, the timer\n // fires \"ReferenceError: window is not defined\" and breaks the test run.\n if (typeof window === 'undefined') {\n return;\n }\n const queue = window._wq;\n if (!queue || queue.length === 0) {\n return;\n }\n\n queue.slice(0).forEach((item) => {\n if (typeof item === 'function') {\n item(Wistia as unknown as WistiaGlobal);\n queue.splice(queue.indexOf(item), 1);\n } else if (!Wistia.flushInitQueue) {\n queue.splice(queue.indexOf(item), 1);\n // eslint-disable-next-line no-console\n console.warn(\n `<wistia-player> elements must be configured via window.wistiaOptions instead of window._wq. Config not applied`,\n item,\n );\n }\n });\n }, QUEUE_INTERVAL);\n};\n\n/**\n * Stops the Wistia queue\n * @returns {void}\n */\nexport const stopWistiaQueue = (): void => {\n if (wistiaQueue) {\n clearInterval(wistiaQueue);\n wistiaQueue = null;\n }\n};\n","import { doTimeout } from 'utilities/timeout-utils.js';\nimport { wlog } from 'utilities/wlog.js';\nimport { merge } from 'utilities/obj.js';\nimport { pageLoaded } from 'utilities/elem.js';\nimport { proto as urlProto } from 'utilities/url.js';\nimport { metricsHost } from 'utilities/hosts.js';\nimport { isVisitorTrackingEnabled } from 'utilities/trackingConsentApi.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst W = Wistia;\n\nif (Wistia._metricsCache == null) {\n Wistia._metricsCache = {};\n}\n\nconst METRICS_CACHE = Wistia._metricsCache;\n\nexport const send = (type, key, val, extraData = {}) => {\n try {\n if (METRICS_CACHE.toMput == null) {\n METRICS_CACHE.toMput = [];\n }\n if (METRICS_CACHE.requestId == null) {\n METRICS_CACHE.requestId = 0;\n }\n\n const messageObj = merge(\n {\n type,\n key,\n value: val != null ? val : null,\n request_id: METRICS_CACHE.requestId,\n },\n extraData,\n );\n\n const serialized = JSON.stringify(messageObj);\n wlog.debug('send metrics', serialized);\n METRICS_CACHE.toMput.push(serialized);\n\n doTimeout(\n 'metrics.debounce',\n () => {\n pageLoaded(() => {\n msend.apply(this, METRICS_CACHE.toMput);\n METRICS_CACHE.toMput = [];\n METRICS_CACHE.requestId += 1;\n });\n },\n 500,\n );\n } catch (e) {\n wlog.error(e);\n }\n};\n\nexport const msend = (...messages) => {\n if (!isVisitorTrackingEnabled()) {\n return;\n }\n const url = `${urlProto()}//${metricsHost()}/mput?topic=metrics`;\n return fetch(url, {\n method: 'POST',\n mode: 'cors',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: messages.join('\\n'),\n })\n .then((response) => {\n if (!response.ok) {\n // If fetch returns a response with an HTTP error code,\n // print an error in the console\n console.error(response);\n }\n })\n .catch((reason) => {\n // If fetch fails (such as when this URL is blocked by an ad blocking extension),\n // print an error in the console\n console.error(reason);\n });\n};\n\nexport const count = (key, val = 1, extraData = {}) => {\n return send('count', key, val, extraData);\n};\n\nexport const sample = (key, val, extraData) => {\n return send('sample', key, val, extraData);\n};\n","import { assign } from 'utilities/assign.js';\n\n// Old trick to clone arrays, i.e. `aps.call(array)`.\nconst aps = Array.prototype.slice;\n\nconst merge = (obj1, ...objs) => {\n if (objs.length === 0) {\n return obj1;\n }\n for (let i = 0; i < objs.length; i++) {\n mergeOne(obj1, objs[i]);\n }\n return obj1;\n};\n\n// Recursively merge the leaf values of obj2 into obj1. obj1 is modified\n// in-place. Accepts objects or arrays. Always returns obj1.\n//\n// By default, we do not transform any merged values.\n//\n// We also use a non-ideal legacy strategy when merging null/undefined\n// values from obj2: they will _delete_ corresponding keys in obj1. The more\n// correct solution seems like it would be to _never_ delete from obj1, or\n// at least to only delete `undefined` values, but maybe not null. We _may_\n// be able to just make this change, but let's do one thing at a time.\nconst mergeOne = (\n obj1,\n obj2,\n transformerFn = identityFunc,\n shouldDeleteFn = legacyShouldDeleteFromMerge,\n) => {\n if (isArray(obj2)) {\n if (!isArray(obj1)) {\n obj1 = [];\n }\n for (let i = 0; i < obj2.length; i++) {\n let v = obj2[i];\n // note that setting an index of an array will naturally increase the\n // length of the array. Array#push() is not necessary.\n if (obj1[i] == null && v != null) {\n if (isArray(v)) {\n obj1[i] = [];\n } else if (isObject(v)) {\n obj1[i] = {};\n }\n }\n const result = mergeOne(obj1[i], v, transformerFn);\n if (shouldDeleteFn(obj2, i, result)) {\n delete obj1[i];\n } else {\n obj1[i] = result;\n }\n }\n return transformerFn(obj1);\n }\n if (isObject(obj2)) {\n for (let k in obj2) {\n if (Object.hasOwn(obj2, k) && (Object.hasOwn(obj1, k) || obj1[k] == null)) {\n let v = obj2[k];\n if (isArray(v)) {\n if (!isArray(obj1[k])) {\n obj1[k] = [];\n }\n mergeOne(obj1[k], v, transformerFn);\n obj1[k] = transformerFn(obj1[k]);\n } else if (isObject(v)) {\n if (!isObject(obj1[k])) {\n obj1[k] = {};\n }\n mergeOne(obj1[k], v, transformerFn);\n obj1[k] = transformerFn(obj1[k]);\n } else if (obj1 == null) {\n obj1 = {};\n if (!shouldDeleteFn(obj2, k, v)) {\n obj1[k] = transformerFn(v);\n }\n } else if (shouldDeleteFn(obj2, k, v)) {\n delete obj1[k];\n } else {\n obj1[k] = transformerFn(v);\n }\n }\n }\n return transformerFn(obj1);\n }\n // obj2 is not an object that can be cloned. Since we may recurse down\n // to this level, we should just return obj2, since it will overwrite\n // obj1.\n return transformerFn(obj2);\n};\n\nconst identityFunc = (v) => {\n return v;\n};\n\n// When merging, delete key from obj1 if the value from obj2 is null or\n// undefined.\nconst legacyShouldDeleteFromMerge = (obj, k, v) => {\n return v == null;\n};\n\nconst clone = (obj, transformerFn) => {\n if (isArray(obj)) {\n return mergeOne([], obj, transformerFn);\n }\n return mergeOne({}, obj, transformerFn);\n};\n\nconst getDeep = (obj, parts, create) => {\n if (typeof parts === 'string') {\n parts = parts.split('.');\n } else {\n parts = aps.call(parts);\n }\n\n let lastObj = obj;\n let lastP;\n while (obj != null && parts.length) {\n let p = parts.shift();\n if ((obj[p] === undefined || (!isObject(obj[p]) && !isArray(obj[p]))) && create) {\n if (p === 0) {\n obj = lastObj[lastP] = [];\n obj[p] = {};\n } else {\n obj[p] = {};\n }\n }\n lastObj = obj;\n lastP = p;\n\n // Only descend into properties that the object directly owns. getDeep({}, '__proto__')\n // See for security vulnerability reproduction.\n // https://github.com/wistia/player-modern/issues/1800\n if (Object.hasOwn(obj, p)) {\n obj = obj[p];\n } else {\n obj = undefined;\n }\n }\n\n return obj;\n};\n\nconst setDeep = (obj, parts, value) => {\n return setAndMaybeDeleteUndefined(obj, parts, value, true);\n};\n\nconst setAndPreserveUndefined = (obj, parts, value) => {\n return setAndMaybeDeleteUndefined(obj, parts, value, false);\n};\n\nconst setAndMaybeDeleteUndefined = (obj, parts, value, shouldDeleteUndefined = true) => {\n if (typeof parts === 'string') {\n parts = parts.split('.');\n } else {\n parts = aps.call(parts);\n }\n const prop = parts.pop();\n obj = getDeep(obj, parts, true);\n if (obj != null && (isObject(obj) || isArray(obj)) && prop != null) {\n if (!shouldDeleteUndefined || value != null) {\n obj[prop] = value;\n } else {\n delete obj[prop];\n }\n } else {\n // nothing to set or delete\n return undefined;\n }\n};\n\nconst unsetDeep = (obj, parts) => {\n return setDeep(obj, parts);\n};\n\nconst exists = (obj, name) => {\n return getDeep(obj, name) !== undefined;\n};\n\nconst cast = (maybeStr) => {\n if (maybeStr == null) {\n return maybeStr;\n }\n\n if (isObject(maybeStr) || isArray(maybeStr)) {\n return castDeep(maybeStr);\n }\n\n return castStr(`${maybeStr}`, maybeStr);\n};\n\nconst castStr = (str, defaultRet = str) => {\n if (/^-?[1-9]\\d*?$/.test(str)) {\n return parseInt(str, 10);\n }\n if (str === '0' || str === '-0') {\n return 0;\n }\n if (/^-?\\d*\\.\\d+$/.test(str)) {\n return parseFloat(str);\n }\n if (/^true$/i.test(str)) {\n return true;\n }\n if (/^false$/i.test(str)) {\n return false;\n }\n return defaultRet;\n};\n\n// Given an object or array, iterates over each leaf and casts the value.\nconst castDeep = (obj) => {\n const castTransformer = (val) => {\n if (typeof val === 'string') {\n return castStr(val);\n }\n return val;\n };\n const dontDeleteAnything = () => false;\n return mergeOne(obj, obj, castTransformer, dontDeleteAnything);\n};\n\nconst only = (hash, keys) => {\n const result = {};\n const keyHash = {};\n for (let i = 0; i < keys.length; i++) {\n keyHash[keys[i]] = true;\n }\n for (let k in hash) {\n if (keyHash[k]) {\n result[k] = hash[k];\n }\n }\n return result;\n};\n\nconst except = (hash, keys) => {\n const result = {};\n const keyHash = {};\n for (let i = 0; i < keys.length; i++) {\n keyHash[keys[i]] = true;\n }\n for (let k in hash) {\n if (!keyHash[k]) {\n result[k] = hash[k];\n }\n }\n return result;\n};\n\n// Advanced sorting and filtering so we can be expressive and concise when\n// choosing assets.\n//\n// Defined at the class level so it's easier to test sorting and filtering.\nconst select = (arr, keyPairs) => {\n const result = [];\n\n const isFn = typeof keyPairs === 'function';\n const filterFn = isFn ? keyPairs : null;\n\n for (let i = 0; i < arr.length; i++) {\n let elem = arr[i];\n if (isFn) {\n // Filter by function. This gives the most freedom.\n if (filterFn(elem)) {\n result.push(elem);\n }\n } else {\n // Select the asset if all keyPairs of the object match. Common.\n let matching = true;\n for (let k in keyPairs) {\n let v = keyPairs[k];\n if (v instanceof Array) {\n // Range check.\n if (!elem[k] || elem[k] < v[0] || elem[k] > v[1]) {\n matching = false;\n break;\n }\n } else if (v instanceof RegExp) {\n // Regular Expression check.\n if (!v.test(elem[k])) {\n matching = false;\n break;\n }\n } else if (v instanceof MultipleValues) {\n let anyMatch = false;\n for (let j = 0; j < v.values.length; j++) {\n let value = v.values[j];\n if (elem[k] === value) {\n anyMatch = true;\n break;\n }\n }\n if (!anyMatch) {\n matching = false;\n break;\n }\n } else if (typeof v === 'function') {\n if (elem[k] == null || !v(elem[k])) {\n matching = false;\n break;\n }\n } else if (elem[k] !== v) {\n // Exact match.\n matching = false;\n break;\n }\n }\n if (matching) {\n result.push(elem);\n }\n }\n }\n\n return result;\n};\n\n// This is just a way to box multiple values in a semantic way, to help us\n// differentiate between AND/OR/Range type situations.\nconst MultipleValues = function (values) {\n const self = this;\n\n const construct = function () {\n self.values = values;\n };\n\n construct();\n\n return self;\n};\n\nconst values = (...values) => {\n return new MultipleValues(values);\n};\n\nconst sort = (arr, keys) => {\n const isFn = typeof keys === 'function';\n const filterFn = isFn ? keys : null;\n const result = aps.call(arr);\n\n // Sort results with this option.\n if (isFn) {\n // Sort via sort functions. This gives the most freedom.\n result.sort(filterFn);\n } else {\n // Convenience for sorting by one or many properties. Can either pass an\n // array or a comma separated list.\n result.sort((a, b) => {\n let sortBys;\n if (keys instanceof Array) {\n sortBys = clone(keys);\n } else {\n sortBys = keys.split(/\\s*,\\s*/);\n }\n let ret = 0;\n while (ret === 0 && sortBys.length > 0) {\n let pieces = sortBys.shift().split(/\\s+/);\n let sortBy = pieces[0];\n let dir = pieces[1];\n dir = dir === 'desc' ? -1 : 1;\n if (a[sortBy] < b[sortBy]) {\n ret = -1 * dir;\n break;\n } else if (a[sortBy] === b[sortBy]) {\n ret = 0;\n } else {\n ret = 1 * dir;\n break;\n }\n }\n return ret;\n });\n }\n return result;\n};\n\nconst filter = (arr, callback, thisArg) => {\n const ctx = thisArg === undefined ? this : thisArg;\n const result = [];\n for (let i = 0; i < arr.length; i++) {\n if (callback.call(ctx, arr[i], i, arr)) {\n result.push(arr[i]);\n }\n }\n return result;\n};\n\n// returns true if obj is a basic Array, []\n// duck type push as optimization; most checks are not arrays and will not\n// have push set. this way we avoid the implicit toString() on the\n// constructor.\nconst ARR_REGEXP = /^\\s*function Array()/;\nconst isArray = (obj) => {\n return obj != null && obj.push && ARR_REGEXP.test(obj.constructor);\n};\n\n// returns true if obj is a basic Object, {}\nconst OBJ_REGEXP = /^\\s*function Object()/;\nconst isObject = (obj) => {\n return obj != null && typeof obj === 'object' && OBJ_REGEXP.test(obj.constructor);\n};\n\nconst isFunction = (obj) => {\n return obj != null && typeof obj === 'function';\n};\n\nconst REGEXP_REGEXP = /^\\s*function RegExp()/;\nconst isRegExp = (obj) => {\n return obj != null && REGEXP_REGEXP.test(obj.constructor);\n};\n\n// returns true if obj is one of javascript's basic types\nconst BASIC_TYPE_REGEXP = /^string|number|boolean|function$/i;\nconst isBasicType = (obj) => {\n return obj != null && (BASIC_TYPE_REGEXP.test(typeof obj) || isRegExp(obj));\n};\n\nconst isEmpty = (obj) => {\n if (obj == null) {\n return true;\n }\n if (isArray(obj) && !obj.length) {\n return true;\n }\n if (isObject(obj)) {\n if (Object.keys(obj).length) {\n return false;\n }\n return true;\n }\n return false;\n};\n\n// returns true if obj1 is a subset of obj2\nconst isSubsetDeep = (obj1, obj2) => {\n if (obj1 === obj2) {\n return true;\n }\n if ((obj1 != null && obj2 == null) || (obj1 == null && obj2 != null)) {\n return false;\n }\n let result = true;\n eachLeaf(obj1, (obj1LeafVal, path) => {\n let obj2LeafVal = getDeep(obj2, path);\n if (obj1LeafVal !== obj2LeafVal) {\n result = false;\n }\n });\n return result;\n};\n\n// true if each object is a subset of the other\nconst equalsDeep = (obj1, obj2) => {\n return isSubsetDeep(obj1, obj2) && isSubsetDeep(obj2, obj1);\n};\n\n//\n// This is the meat and potatoes for iterating over\n// javascript object/array structures.\n//\n// Call fn(node, path, parent, key) for each node in an object.\n//\n// We include the parent + key so that the callback can modify the leaf\n// value in-place. We pass the path to the root node (the keys from root to\n// leaf) so that we can serialize objects.\nconst eachDeep = (obj, fn, path, parent, key) => {\n if (path == null) {\n path = [];\n }\n if (isBasicType(obj)) {\n fn(obj, path, parent, key);\n } else if (isObject(obj) || isArray(obj)) {\n fn(obj, path, parent, key);\n for (let key in obj) {\n if (Object.hasOwn(obj, key)) {\n const newPath = aps.call(path);\n newPath.push(key);\n eachDeep(obj[key], fn, newPath, obj, key);\n }\n }\n } else {\n fn(obj, path, parent, key);\n }\n};\n\n// call fn(node, path, parent, key) for each leaf node in an object\nconst eachLeaf = (obj, fn) => {\n eachDeep(obj, (obj, path, parent, key) => {\n if (!isArray(obj) && !isObject(obj)) {\n fn(obj, path, parent, key);\n }\n });\n};\n\nconst pick = (obj, keys) => {\n const result = {};\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (obj[key] !== undefined) {\n result[key] = obj[key];\n }\n }\n return result;\n};\n\nconst indexOf = (arr, target) => {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === target) {\n return i;\n }\n }\n return -1;\n};\n\nconst keys = (obj) => {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const result = [];\n for (let k in obj) {\n if (Object.hasOwn(obj, k)) {\n result.push(k);\n }\n }\n return result;\n};\n\nexport {\n merge,\n mergeOne,\n identityFunc,\n legacyShouldDeleteFromMerge,\n clone,\n getDeep,\n setDeep,\n setAndPreserveUndefined,\n unsetDeep,\n exists,\n assign,\n cast,\n castDeep,\n only,\n except,\n select,\n filter,\n values,\n sort,\n isArray,\n isObject,\n isFunction,\n isRegExp,\n isBasicType,\n isEmpty,\n isSubsetDeep,\n equalsDeep,\n eachDeep,\n eachLeaf,\n pick,\n indexOf,\n keys,\n};\n","// Regex to match cloud dev box hostnames: [subdomain]-cde-[devbox].[region].wistia.io\nexport const REGEX_CLOUD_DEV_BOX = /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.wistia\\.io/i;\n// Regex to match openclaw containerized dev box hostnames: [subdomain]-cde-[devbox].[region].claw.wistia.io\nexport const REGEX_OPENCLAW_DEV_BOX =\n /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.claw\\.wistia\\.io/i;\nexport const REGEX_WIZARD_DEV_BOX = /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.wiz\\.wistia\\.io/i;\nexport const REGEX_CDB_STAGING_DEV_BOX =\n /([a-z0-9-]+)-cde-([a-z0-9-]+)\\.([a-z0-9-]+)\\.cdb-staging\\.wistia\\.io/i;\nexport const REGEX_DEV_METAL_TUNNEL =\n /([a-z0-9-]+)-txl-([a-z0-9-]+)\\.([a-z0-9-]+)\\.mtl\\.wistia\\.io/i;\n\nexport const HOST_MODE_META_NAME = 'wistia-host-mode';\nexport const HOST_MODE_PRODUCTION = 'production';\n\nexport const isProductionHostMode = () => {\n if (typeof document === 'undefined' || typeof document.querySelector !== 'function') {\n return false;\n }\n try {\n const meta = document.querySelector(`meta[name=\"${HOST_MODE_META_NAME}\"]`);\n const content = meta?.getAttribute('content');\n return typeof content === 'string' && content.trim().toLowerCase() === HOST_MODE_PRODUCTION;\n } catch {\n return false;\n }\n};\n\nexport const appHostname = (subdomain = 'app') => {\n const hostname = process.env.BASE_HOSTNAME || process.env.HOSTNAME;\n const subdomainSuffixHostname = getSubdomainSuffixHostname(subdomain);\n if (subdomainSuffixHostname) {\n return subdomainSuffixHostname;\n }\n\n return `${subdomain}.${hostname}`;\n};\n\nexport const getSubdomainSuffixHostname = (subdomain = 'app') => {\n if (isProductionHostMode()) {\n return null;\n }\n\n // Check if we're running in a cloud dev environment by parsing the current hostname\n if (typeof window !== 'undefined' && window.location) {\n const currentHost = window.location.hostname;\n\n // If we're already on a cloud dev box, extract the devbox and region\n const cdbStagingDevBoxMatches = REGEX_CDB_STAGING_DEV_BOX.exec(currentHost);\n if (cdbStagingDevBoxMatches) {\n return `${subdomain}-cde-${cdbStagingDevBoxMatches[2]}.${cdbStagingDevBoxMatches[3]}.cdb-staging.wistia.io`;\n }\n const cloudDevBoxMatches = REGEX_CLOUD_DEV_BOX.exec(currentHost);\n if (cloudDevBoxMatches) {\n // Return the new hostname with the same devbox and region\n return `${subdomain}-cde-${cloudDevBoxMatches[2]}.${cloudDevBoxMatches[3]}.wistia.io`;\n }\n const openclawDevBoxMatches = REGEX_OPENCLAW_DEV_BOX.exec(currentHost);\n if (openclawDevBoxMatches) {\n return `${subdomain}-cde-${openclawDevBoxMatches[2]}.${openclawDevBoxMatches[3]}.claw.wistia.io`;\n }\n const wizardDevBoxMatches = REGEX_WIZARD_DEV_BOX.exec(currentHost);\n if (wizardDevBoxMatches) {\n return `${subdomain}-cde-${wizardDevBoxMatches[2]}.${wizardDevBoxMatches[3]}.wiz.wistia.io`;\n }\n const metalTunnelMatches = REGEX_DEV_METAL_TUNNEL.exec(currentHost);\n if (metalTunnelMatches) {\n // Return the new hostname with the same tunnel subdomain suffix and region\n return `${subdomain}-txl-${metalTunnelMatches[2]}.${metalTunnelMatches[3]}.mtl.wistia.io`;\n }\n }\n return null;\n};\n","import { isNil } from '@wistia/type-guards';\nimport { MediaDataServerResponse } from '../types/player-api-types.ts';\n\nexport const isMediaDataError = (mediaData: MediaDataServerResponse): boolean => {\n if (!Object.hasOwn(mediaData, 'error') || isNil(mediaData.error)) {\n return false;\n }\n\n if (mediaData.error === 'true' || mediaData.error === true) {\n return true;\n }\n\n return false;\n};\n","/* eslint-disable @typescript-eslint/no-magic-numbers */\nimport { isNil, isNonEmptyString } from '@wistia/type-guards';\nimport { Color } from './color.js';\nimport { reportError } from './sentryUtils.ts';\n\nexport const DEFAULT_PLAYER_COLOR = '#2949E5';\n\nexport const colorContrastRatiosByShape = {\n nonText: 3, // 3:1 - https://www.w3.org/TR/WCAG21/#non-text-contrast\n largeText: 3, // 3:1 - https://www.w3.org/TR/WCAG21/#contrast-minimum\n paragraphText: 4.5, // 4.5:1 - https://www.w3.org/TR/WCAG21/#contrast-minimum\n smallText: 5.5, // We're making this up, but it should be more than the paragraph text\n // This one is made up, but we want to offer _some_ visual contrast between the background color and its non-text hit areas with properly contrasting contents.\n // However, the contrast here is for visual interest, not for accessibility (since the contents have proper contrast).\n // In these cases, we'll use a lower contrast ratio than the normal nonText value.\n backgroundColorWhereNonTextHitAreaContentsHaveProperContrast: 2, // https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html#intent\n};\n\nexport const rgbToHsl = (\n color: Color | number[] | string,\n): { hue: number; lightness: number; saturation: number } => {\n let colorArray = color;\n if (color instanceof Color) {\n if (isNil(color.r) || isNil(color.g) || isNil(color.b)) {\n throw new Error('Color does not contain required RGB values');\n }\n colorArray = [color.r, color.g, color.b];\n } else if (typeof color === 'string') {\n const colorInstance = new Color(color);\n if (isNil(colorInstance.r) || isNil(colorInstance.g) || isNil(colorInstance.b)) {\n throw new Error('Color does not contain required RGB values');\n }\n colorArray = [colorInstance.r, colorInstance.g, colorInstance.b];\n }\n const red = colorArray[0] / 255;\n const green = colorArray[1] / 255;\n const blue = colorArray[2] / 255;\n const max = Math.max(red, green, blue);\n const min = Math.min(red, green, blue);\n let hue = 0;\n let saturation = 0;\n const lightness = (max + min) / 2;\n\n if (max === min) {\n hue = 0;\n saturation = 0;\n }\n\n const delta = max - min;\n if (delta === 0) {\n return {\n hue,\n saturation,\n lightness: red * 100,\n };\n }\n if (lightness > 0.5) {\n saturation = delta / (2 - max - min);\n } else {\n saturation = delta / (max + min);\n }\n\n if (max === red) {\n hue = (green - blue) / delta + (green < blue ? 6 : 0);\n } else if (max === green) {\n hue = (blue - red) / delta + 2;\n } else {\n hue = (red - green) / delta + 4;\n }\n hue /= 6;\n\n return { hue: hue * 360, saturation: saturation * 100, lightness: lightness * 100 };\n};\n\nexport const getContrast = (foreground: Color | string, background: Color | string): number => {\n // WCAG contrast ratio\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n const foregroundColor = new Color(foreground);\n const backgroundColor = new Color(background);\n const l1 = foregroundColor.getRelativeLuminance();\n const l2 = backgroundColor.getRelativeLuminance();\n const contrastRatio = l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n return Number.parseFloat(contrastRatio.toFixed(3));\n};\n\nexport const adjustColorForProperContrast = (\n foreground: Color | string,\n background: Color | string,\n shape: keyof typeof colorContrastRatiosByShape = 'paragraphText',\n): string => {\n const foregroundColor = new Color(foreground);\n const backgroundColor = new Color(background);\n\n // This shouldn't be a valid scenario, but since the Color class isn't converted to TS yet\n // the r, g, and b properties could theoretically be optional\n if (isNil(foregroundColor.r) || isNil(foregroundColor.g) || isNil(foregroundColor.b)) {\n throw new Error('Color does not contain required RGB values');\n }\n\n const initialContrastRatio = getContrast(\n foregroundColor.toHexWithHash(),\n backgroundColor.toHexWithHash(),\n );\n if (foregroundColor.hasAccessibleContrast(backgroundColor, shape)) {\n return foregroundColor.toHexWithHash();\n }\n\n const { lightness: foregroundColorLightness } = rgbToHsl([\n foregroundColor.r,\n foregroundColor.g,\n foregroundColor.b,\n ]);\n\n const slightlyLighterForegroundColor = new Color(foregroundColor).lighten(1);\n const slightlyDarkerForegroundColor = new Color(foregroundColor).darken(1);\n\n // Does lightening the foreground color slightly increase the contrast ratio?\n let shouldForegroundColorBeLighter =\n foregroundColorLightness < 15 ||\n slightlyLighterForegroundColor.getContrastRatio(backgroundColor) >\n slightlyDarkerForegroundColor.getContrastRatio(backgroundColor);\n\n // If the foreground color is already very light and the initial contrast ratio was 1:1,\n // lightening the foreground color technically would have increased the contrast ratio, but\n // we know it can never be lightened enough to provide sufficient contrast,\n // so we'll set shouldForegroundColorBeLighter to false.\n if (foregroundColorLightness > 75 && initialContrastRatio === 1) {\n shouldForegroundColorBeLighter = false;\n }\n\n let adjustedForegroundColor = new Color(foregroundColor);\n let i = 0;\n while (!adjustedForegroundColor.hasAccessibleContrast(backgroundColor, shape)) {\n i += 1;\n // This is a safety mechanism to prevent getting stuck in an infinite loop.\n // If anyone exceeds 1,000 attempts to find a contrasting color, just return the best option we have\n // and log the colors where we couldn't generate sufficient contrast.\n if (i > 1000) {\n reportError('other', new Error(`Exceeded ${i} attempts to find contrasting color`), {\n key: 'adjust-color-for-proper-contrast',\n foregroundColor: foregroundColor.toHexWithHash(),\n backgroundColor: backgroundColor.toHexWithHash(),\n });\n return adjustedForegroundColor.toHexWithHash();\n }\n const adjustedForegroundColorLuminance = adjustedForegroundColor.getRelativeLuminance();\n // If the adjusted foreground color is white or black and the required contrast ratio is more than 3:1,\n // we should just return the adjusted foreground color.\n // Otherwise, if the adjusted foreground color is white or black,\n // reset the adjusted foreground color to the original foreground color and try looking\n // in the opposite direction for a properly contrasting color.\n if (\n i > 1 &&\n (adjustedForegroundColorLuminance === 1 || adjustedForegroundColorLuminance === 0)\n ) {\n if (colorContrastRatiosByShape[shape] > 3) {\n return getContrast('#fff', backgroundColor.toHexWithHash()) >\n getContrast('#000', backgroundColor.toHexWithHash())\n ? '#fff'\n : '#000';\n }\n shouldForegroundColorBeLighter = !shouldForegroundColorBeLighter;\n adjustedForegroundColor = new Color(foregroundColor);\n }\n\n if (shouldForegroundColorBeLighter) {\n adjustedForegroundColor.lighten(1);\n } else {\n adjustedForegroundColor.darken(1);\n }\n }\n return adjustedForegroundColor.toHexWithHash();\n};\n\n/**\n * Takes an array of values, either strings or Color objects, then\n * - inserts black and white values in case we need these for our contrast-fetching functions using palettes\n * - filters any duplicate values\n * - sorts the palette from darkest to lightest color value by its relative luminance\n *\n * @param colors - an array of Color objects or strings representing hex values\n * @returns Color[]\n */\nexport const generateColorPalette = (colors: Color[] | string[]): Color[] => {\n const formattedColors = colors.map((color) => new Color(color));\n // Make sure we have black and white colors available in case they're needed for sufficient contrast\n const uniqueColors = [new Color('#ffffff'), new Color('#000000'), ...formattedColors].reduce<\n Color[]\n >((acc, currentColor) => {\n if (acc.find((colorObj) => colorObj.toHex() === currentColor.toHex())) {\n return acc;\n }\n acc.push(currentColor);\n return acc;\n }, []);\n\n return uniqueColors.sort(\n (colorOne, colorTwo) => colorOne.getRelativeLuminance() - colorTwo.getRelativeLuminance(),\n );\n};\n\n/**\n * Given a set of colors, a background color, and any colors from the set that we want to exclude from consideration,\n * this utility returns an appropriate foreground color based on the contrast ratio required for the shape param.\n *\n * For example, this method could be used to determine that we should use white text against a black background and vice versa.\n *\n * @param colors - an array of Color objects or strings representing hex values\n * @param backgroundColor - a Color object or hex string\n * @param [colorsToExclude] - optional, an array of Color objects or strings representing hex values\n * @param [shape] - optional, used to determine the appropriate contrast ratio used in calculating the foreground color\n * @returns\n */\nexport const getBestColorForShape = (\n colors: Color[] | string[],\n backgroundColor: Color | string,\n colorsToExclude: Color[] | string[] = [],\n shape: keyof typeof colorContrastRatiosByShape = 'paragraphText',\n): string => {\n const colorPalette = generateColorPalette(colors);\n\n const backgroundColorObj = new Color(backgroundColor);\n\n // Always exclude the background color in addition to the colorsToExclude\n let formattedExcludedColors = colorsToExclude.map((color: Color | string) => new Color(color));\n formattedExcludedColors.push(new Color(backgroundColor));\n\n // If one of the excluded colors is black or white, don't exclude it.\n // We always need black and white as potential text color options.\n formattedExcludedColors = formattedExcludedColors.filter(\n (color) => color.toHex() !== '000000' && color.toHex() !== 'FFFFFF',\n );\n\n const stringifiedExcludedColors = formattedExcludedColors.map((formattedColor) =>\n formattedColor.toHex(),\n );\n\n const availableColors = colorPalette.filter((color) => {\n return !stringifiedExcludedColors.includes(color.toHex());\n });\n\n // If the background color is light, sort the available colors from lightest to darkest\n if (!backgroundColorObj.isDark(true)) {\n availableColors.reverse();\n }\n\n const textColor = availableColors.find((color) => {\n return color.getContrastRatio(backgroundColor) >= colorContrastRatiosByShape[shape];\n });\n\n if (!textColor) {\n return backgroundColorObj.isDark(true) ? '#ffffff' : '#000000';\n }\n\n return textColor.toHexWithHash();\n};\n\nexport const getHexWithoutHash = (hex?: string): string => {\n if (!isNonEmptyString(hex)) {\n return '';\n }\n\n if (hex.startsWith('#')) {\n return hex.substring(1);\n }\n\n return hex;\n};\n\nexport const getVideoPlayerIconColor = (\n _playerColor: Color | string,\n shouldUseAccessibleIconColor: boolean,\n isGradientEnabled: boolean,\n): string => {\n const playerColor = new Color(_playerColor);\n const { searchParams } = new URL(window.location.toString());\n const hasQueryParamOverride = Boolean(searchParams.get('useAccessiblePlayerIconColor') ?? false);\n\n if (isGradientEnabled || (!hasQueryParamOverride && !shouldUseAccessibleIconColor)) {\n return '#ffffff';\n }\n\n if (new Color('#fff').getContrastRatio(playerColor) >= colorContrastRatiosByShape.paragraphText) {\n return '#ffffff';\n }\n\n return adjustColorForProperContrast(_playerColor, _playerColor, 'paragraphText');\n};\n\nexport const getAudioPlayerIconColor = (\n _playerColor: Color | string,\n shouldUseAccessibleIconColor: boolean,\n isGradientEnabled: boolean,\n): string => {\n const playerColor = new Color(_playerColor);\n const { searchParams } = new URL(window.location.toString());\n const hasQueryParamOverride = Boolean(searchParams.get('useAccessiblePlayerIconColor') ?? false);\n\n if (isGradientEnabled || (!hasQueryParamOverride && !shouldUseAccessibleIconColor)) {\n return '#ffffff';\n }\n\n if (new Color('#fff').getContrastRatio(playerColor) >= colorContrastRatiosByShape.paragraphText) {\n return '#ffffff';\n }\n\n return adjustColorForProperContrast(_playerColor, _playerColor, 'paragraphText');\n};\n\nconst SHADE = 0.8;\n\nexport const getBackgroundColorFromPlayerColor = (color: string = DEFAULT_PLAYER_COLOR): string => {\n return new Color(color).shade(SHADE).toHexWithHash();\n};\n\nexport const isDarkColor = (color: string | Color): boolean => {\n return new Color(color).getRelativeLuminance() < 0.15;\n};\n\nexport const isVeryDarkColor = (color: string | Color): boolean => {\n return new Color(color).getRelativeLuminance() < 0.05;\n};\n\nexport const isLightColor = (color: string | Color): boolean => {\n return new Color(color).getRelativeLuminance() >= 0.8;\n};\n\nexport const isMidToneColor = (color: string | Color): boolean => {\n const relativeLuminance = new Color(color).getRelativeLuminance();\n return relativeLuminance > 0.13 && relativeLuminance < 0.75;\n};\n","import { assign } from 'utilities/assign.js';\nimport { pageLoaded } from 'utilities/pageLoaded.js';\nimport { isVisitorTrackingEnabled } from 'utilities/trackingConsentApi.js';\nimport { metricsHost } from './hosts.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nif (Wistia._simpleMetricsCache == null) {\n Wistia._simpleMetricsCache = {};\n}\n\nif (Wistia._simpleMetricsDebounceInterval == null) {\n Wistia._simpleMetricsDebounceInterval = 500;\n}\n\nconst METRICS_CACHE = Wistia._simpleMetricsCache;\n\nexport const countMetric = (key, val = 1, extraData = {}) => {\n return sendMetric('count', key, val, extraData);\n};\n\nexport const sendMetrics = (...messages) => {\n if (!isVisitorTrackingEnabled()) {\n return;\n }\n const url = `https://${metricsHost()}/mput?topic=metrics`;\n return fetch(url, {\n method: 'POST',\n mode: 'cors',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: messages.join('\\n'),\n })\n .then((response) => {\n if (!response.ok) {\n // If fetch returns a response with an HTTP error code,\n // print an error in the console\n console.error(response);\n }\n })\n .catch((reason) => {\n // If fetch fails (such as when this URL is blocked by an ad blocking extension),\n // print an error in the console\n console.error(reason);\n });\n};\n\nexport const sampleMetric = (key, val, extraData) => {\n return sendMetric('sample', key, val, extraData);\n};\n\nconst getCircularReplacer = () => {\n // form a closure and use this\n // weakset to monitor object reference.\n const seen = new WeakSet();\n\n // return the replacer function\n return (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n };\n};\n\nexport const sendMetric = (type, key, val, extraData = {}) => {\n if (!isVisitorTrackingEnabled()) {\n return;\n }\n try {\n if (METRICS_CACHE.toMput == null) {\n METRICS_CACHE.toMput = [];\n }\n\n const messageObj = assign(\n {\n type,\n key,\n value: val != null ? val : null,\n },\n extraData,\n );\n\n const serialized = JSON.stringify(messageObj, getCircularReplacer());\n METRICS_CACHE.toMput.push(serialized);\n\n clearTimeout(Wistia._msendTimeout);\n Wistia._msendTimeout = setTimeout(() => {\n pageLoaded(() => {\n sendMetrics.apply(this, METRICS_CACHE.toMput);\n METRICS_CACHE.toMput = [];\n });\n }, Wistia._simpleMetricsDebounceInterval);\n } catch (e) {\n console.error(e.message);\n console.error(e.stack);\n }\n};\n\n// only used in testing to clear the cache\nexport const _clearMetricsCache = () => {\n METRICS_CACHE.toMput = [];\n};\n","import { Wistia } from '../wistia_namespace.ts';\n\nexport const seqId = (prefix = 'wistia_', suffix = '') => {\n const currentVal = Wistia._sequenceVal || 1;\n const result = `${prefix}${currentVal}${suffix}`;\n Wistia._sequenceVal = currentVal + 1;\n return result;\n};\n","import { TAGGED_VERSION } from './hosts.js';\n// fire and forget.\n// run a script and immediately remove it from the DOM.\nexport const runScript = (src, timeout) => {\n const taggedVersion = TAGGED_VERSION;\n return new Promise((resolve, reject) => {\n if (timeout == null) {\n timeout = 8000;\n }\n let s;\n\n s = document.createElement('script');\n s.src = src;\n s.async = true;\n s.type = 'text/javascript';\n\n if (\n /https?:\\/\\/fast\\.wistia\\./.test(s.src) &&\n taggedVersion !== '' &&\n taggedVersion.length > 0\n ) {\n s.src = `${s.src}@${taggedVersion}`;\n }\n\n let cleanupTimeoutId = null;\n let done = false;\n\n const cleanUp = () => {\n s.onerror = s.onreadystatechange = s.onload = null;\n clearTimeout(cleanupTimeoutId);\n clearTimeout(loadingTimeout);\n cleanupTimeoutId = setTimeout(() => {\n if (s && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }, 500);\n };\n\n const onSuccess = () => {\n const state = s.readyState;\n if (!done && (!state || /loaded|complete/.test(state))) {\n done = true;\n // We call success on next tick to separate script evaluation time from\n // callback execution time. This helps reduce thread-blocking since\n // script-eval and initialization tend to be expensive.\n setTimeout(() => {\n resolve();\n cleanUp();\n }, 1);\n }\n };\n\n const onTimeout = () => {\n done = true;\n cleanUp();\n reject(new Error('timeout'));\n };\n\n const onError = (e) => {\n done = true;\n cleanUp();\n reject(e);\n };\n\n const loadingTimeout = setTimeout(onTimeout, timeout);\n s.onerror = onError;\n s.onreadystatechange = onSuccess;\n s.onload = onSuccess;\n\n (document.body || document.head).appendChild(s);\n });\n};\n","import { toSeconds, parse } from 'iso8601-duration';\nimport { isNil, isNumber } from '@wistia/type-guards';\n\ntype DurationData = {\n hours: number;\n minutes: number;\n seconds: number;\n};\n\nconst SECONDS_IN_HOUR = 3600;\nconst MINUTES_IN_HOUR = 60;\nconst SECONDS_IN_MINUTE = 60;\nconst SECONDS_CUTTOFF = 45;\n\nconst padNumber = (num: number, length = 0): string => {\n let result = `${num}`;\n while (result.length < length) {\n result = `0${result}`;\n }\n return result;\n};\n\nexport const secondsConverter = (total: number, format: string): DurationData => {\n let hours = 0;\n let minutes = 0;\n let seconds = 0;\n\n let remainingDuration = total;\n\n const useHours = format.includes('h');\n const useMinutes = format.includes('m');\n\n if (useHours && remainingDuration > 0) {\n hours += Math.floor(remainingDuration / SECONDS_IN_HOUR);\n remainingDuration %= SECONDS_IN_HOUR;\n }\n\n if (useMinutes && remainingDuration > 0) {\n minutes += Math.floor(remainingDuration / MINUTES_IN_HOUR);\n remainingDuration %= MINUTES_IN_HOUR;\n }\n\n seconds = Math.round(remainingDuration);\n\n if (useHours && minutes === MINUTES_IN_HOUR) {\n hours += 1;\n minutes = 0;\n }\n\n if (useMinutes && seconds === SECONDS_IN_MINUTE) {\n minutes += 1;\n seconds = 0;\n }\n\n return {\n hours,\n minutes,\n seconds,\n };\n};\n\n// flexibleDuration is a duration format that uses as\n// few digits as possible to express that duration\nexport const flexibleDuration = (total: number): string => {\n const { hours, minutes, seconds } = secondsConverter(total, 'hms');\n\n if (hours === 0) {\n return `${minutes}:${padNumber(seconds, 2)}`;\n }\n return `${hours}:${padNumber(minutes, 2)}:${padNumber(seconds, 2)}`;\n};\n\nexport const formattedDurationToSeconds = (dur: string): number | string => {\n if (isNil(dur) || isNumber(dur)) {\n return dur;\n }\n\n try {\n const parsed = parse(dur.toUpperCase());\n return toSeconds(parsed);\n } catch {\n /* empty, we want to swallow and continue */\n }\n\n // We allow for non-standard IS0 6801 Duration strings, eg. 1H30M,\n // the parsing lib can do that if prefixed with the correct ISO Duration prefixes\n try {\n const parsed = parse(`PT${dur.toUpperCase()}`);\n return toSeconds(parsed);\n } catch {\n /* empty, we want to swallow and continue */\n }\n\n return dur;\n};\n\nexport const accessibilityDuration = (duration: number): string => {\n const { hours, minutes, seconds } = secondsConverter(duration, 'hms');\n const zeroHours = hours === 0;\n const zeroMinutes = minutes === 0;\n if (zeroHours && zeroMinutes) {\n return `${seconds} second${seconds === 1 ? '' : 's'}`;\n }\n\n const hoursText = zeroHours ? '' : `${hours} hour${hours === 1 ? '' : 's'}`;\n const minText = zeroMinutes ? '' : `${minutes} minute${hours === 1 ? '' : 's'}`;\n\n return `${hoursText} ${minText}`.trim();\n};\n\nexport const humanReadableDuration = (duration: number): string => {\n const { hours, minutes, seconds } = secondsConverter(duration, 'hms');\n const zeroHours = hours === 0;\n const zeroMinutes = minutes === 0;\n if (zeroHours && zeroMinutes) return `${seconds} Sec`;\n\n const hoursText = zeroHours ? '' : `${hours} Hr`;\n const minText = zeroMinutes ? '' : `${minutes} Min`;\n return `${hoursText} ${minText}`.trim();\n};\n\nexport const getSecondsRemaining = (start: Date, end: Date): number => {\n const remaining = end.getTime() - start.getTime();\n return remaining / 1000;\n};\n\nexport const secondsToMilliseconds = (seconds: number): number => seconds * 1000;\n\nexport const formatDuration = (totalSeconds: number): string => {\n const { hours, minutes } = secondsConverter(totalSeconds, 'hms');\n\n if (totalSeconds < SECONDS_CUTTOFF) {\n return `${Math.round(totalSeconds)} SEC`;\n }\n\n if (hours) {\n return `${hours} HR ${minutes} MIN`;\n }\n\n return `${Math.round(totalSeconds / SECONDS_IN_MINUTE)} MIN`;\n};\n","export const CONTROL_BAR_HEIGHT = 34;\n\n// Default height for an audio <wistia-player> when the author hasn't set an\n// explicit height. Audio has no intrinsic media height (the <audio> element is\n// 0px and the UI is absolutely positioned), so without this the host collapses\n// to a bare control bar — most visibly after a video→audio replaceWith. Matches\n// FULL_SIZED_PLAYER_MIN_HEIGHT in players/vulcanV2Player/audio/constants.js so\n// the audio UI renders its full-sized layout. Author CSS (e.g. the inline\n// `height` the standard embed codes set) still overrides this.\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nexport const AUDIO_DEFAULT_HEIGHT = 218;\n\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nexport const DEFAULT_ASPECT = 16 / 9;\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,Fragment as StrictMode,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,R(u)&&o({t:u})},[n,e,t]),h(function(){return R(u)&&o({t:u}),n(function(){R(u)&&o({t:u})})},[n]),e}function R(n){try{return!((t=n.__)===(e=n.u())&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}var t,e}function x(n){n()}function w(n){return n}function k(){return[!1,x]}var I=s;function M(n,t){this.props=n,this.context=t}function N(n,e){function r(n){var t=this.props.ref;return t!=n.ref&&t&&(\"function\"==typeof t?t(null):t.current=null),e?!e(this.props,n)||t!=n.ref:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.__f=u.prototype.isReactComponent=!0,u.type=n,u}(M.prototype=new n).isPureReactComponent=!0,M.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=n,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var F=function(n,t){return null==n?null:r(r(n).map(t))},L={map:F,forEach:F,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},O=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);O(n,t,e,r)};var U=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){var t=n.__&&n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u,o=null;function i(i){if(e||(e=n()).then(function(n){n&&(o=n.default||n),u=!0},function(n){r=n,u=!0}),r)throw r;if(!u)throw e;return o?t(o,i):null}return i.displayName=\"Lazy\",i.__f=!0,i}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&(t.__z=!0),t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),U&&U(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||r.__z||(o=!0,e.__R=null,u?u(c):c())};e.__R=i;var l=e.__P;e.__P=null;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.__P=l,t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},namespaceURI:r.namespaceURI,insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent=!0,[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;e.event=function(n){return en&&(n=en(n)),n.persist=function(){},n.isPropagationStopped=function(){return this.cancelBubble},n.isDefaultPrevented=function(){return this.defaultPrevented},n.nativeEvent=n};var rn,un={configurable:!0,get:function(){return this.class}},on=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1==e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&(u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value}))),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",un)):t.className&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,on&&on(n)};var ln=e.__r;e.__r=function(n){ln&&ln(n),rn=n.__c};var cn=e.diffed;e.diffed=function(n){cn&&cn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),rn=null};var fn={ReactCurrentDispatcher:{current:{readContext:function(n){return rn.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},an=\"18.3.1\";function sn(n){return t.bind(null,n)}function hn(n){return!!n&&n.$$typeof===q}function vn(n){return hn(n)&&n.type===u}function dn(n){return!!n&&\"string\"==typeof n.displayName&&0==n.displayName.indexOf(\"Memo(\")}function mn(n){return hn(n)?f.apply(null,arguments):n}function pn(n){return!!n.__k&&(o(null,n),!0)}function yn(n){return n&&(n.base||1===n.nodeType&&n)||null}var _n=function(n,t){return n(t)},bn=function(n,t){var r=e.debounceRendering;e.debounceRendering=function(n){return n()};var u=n(t);return e.debounceRendering=r,u},Sn=hn,gn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:x,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:L,render:nn,hydrate:tn,unmountComponentAtNode:pn,createPortal:$,createElement:t,createContext:l,createFactory:sn,cloneElement:mn,createRef:c,Fragment:u,isValidElement:hn,isElement:Sn,isFragment:vn,isMemo:dn,findDOMNode:yn,Component:n,PureComponent:M,memo:N,forwardRef:D,flushSync:bn,unstable_batchedUpdates:_n,StrictMode:u,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:fn};export{L as Children,M as PureComponent,P as Suspense,B as SuspenseList,fn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,mn as cloneElement,sn as createFactory,$ as createPortal,gn as default,yn as findDOMNode,bn as flushSync,D as forwardRef,tn as hydrate,Sn as isElement,vn as isFragment,dn as isMemo,hn as isValidElement,z as lazy,N as memo,nn as render,x as startTransition,pn as unmountComponentAtNode,_n as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,an as version};\n//# sourceMappingURL=compat.module.js.map\n","import { poll } from 'utilities/poll.js';\nimport { throttle } from 'utilities/throttle.js';\nimport { unescapeHtml } from 'utilities/unescape-html.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport { poll, throttle, unescapeHtml };\n\n// replace spaces in text with &nbsp; this prevents the line from wrapping.\n// specifically, it allows menu items in the vulcan ui to push their parent div\n// open as wide as the text.\nexport const unbreakifyText = (text = '') => {\n return text.replace(' ', '&nbsp;');\n};\n\nexport const stripHtml = (htmlStr) => {\n const tmp = document.createElement('div');\n tmp.innerHTML = htmlStr;\n return tmp.textContent || tmp.innerText || '';\n};\n\nexport const camelCase = (snakeStr) => {\n return snakeStr.replace(/[_-]([a-z])/g, (g) => {\n return g.charAt(1).toUpperCase();\n });\n};\n\nexport const snakeCase = (camelStr) => {\n return camelStr.replace(/[A-Z]/g, (g) => {\n return `_${g.toLowerCase()}`;\n });\n};\n\n// Not safe IE8 and below.\nexport const shallowCamelizeKeys = (o) => {\n return Object.keys(o).reduce((memo, key) => {\n memo[camelCase(key)] = o[key];\n return memo;\n }, {});\n};\n\n// Not safe IE8 and below.\nexport const shallowSnakeKeys = (o) => {\n return Object.keys(o).reduce((memo, key) => {\n memo[snakeCase(key)] = o[key];\n return memo;\n }, {});\n};\n\n// the implementations of base64Decode and base64Encode here are adapted from\n// https://stackoverflow.com/a/30106551/529530, and designed to safely handle\n// multibyte characters\n\nexport const base64Decode = (input) => {\n return decodeURIComponent(\n atob(input)\n .split('')\n .map((c) => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join(''),\n );\n};\n\nexport const base64Encode = (input) => {\n return btoa(\n encodeURIComponent(input).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(`0x${p1}`);\n }),\n );\n};\n\nexport const notSetOrTrue = (val) => {\n return val == null || val === true;\n};\n\n// prevent scrolling outside a container\n// topMargin and bottomMargin are optional and can be used to provide a cushion to adjust to determine\n// if you are at the top. We have seen some weird behavior with some uses where the scrollTop maxes out\n// at scrollHeight - offsetHeight - 1. Possible subpixel rendering issue???\nexport const preventOuterMouseWheel = (e, container, topMargin = 0, bottomMargin = 0) => {\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const hitTop = (extra = 0) => {\n return scrollTop + extra - topMargin <= 0;\n };\n const hitBottom = (extra = 0) => {\n return scrollTop + extra + bottomMargin >= scrollHeight - offsetHeight;\n };\n\n const delta = e.deltaY || -e.wheelDelta;\n const dir = delta > 0 ? 'down' : 'up';\n const isModernBrowser = !!e.deltaY;\n if (isModernBrowser) {\n if ((dir === 'up' && hitTop()) || (dir === 'down' && hitBottom())) {\n e.preventDefault();\n }\n } else {\n // IE scrolls 47.5 pixels each scroll but reports 120\n const extra = (47.5 * delta) / 120;\n if (dir === 'up' && hitTop(extra)) {\n e.preventDefault();\n // Manually set scroll to avoid scrolling parent in IE 11\n container.scrollTop = 0;\n } else if (dir === 'down' && hitBottom(extra)) {\n e.preventDefault();\n container.scrollTop = scrollHeight - offsetHeight;\n }\n }\n};\n\n// parent.frames.length should tell us how many iframes exist on the parent\n// page. However, if the user has overwritten the accessor with something\n// that's not safe for CORS (i.e. they changed it at all), then\n// parent.frames.length throws an exception and screws up the embedding\n// process. This function just gives a safe way of getting the value, or\n// defaulting to something unknown.\nexport const parentFramesLength = function () {\n try {\n return parent.frames.length;\n } catch (e) {\n Wistia.warn(e);\n return 1;\n }\n};\n","import { Wistia } from 'wistia_namespace.ts';\nimport { root } from 'utilities/root.js';\nimport { merge } from 'utilities/obj.js';\nimport { removeScriptsBySrc } from 'utilities/script-utils.js';\nimport {\n cacheMediaData,\n uncacheMediaData,\n getMediaDataFromCache,\n} from 'utilities/remote-data-cache.ts';\nimport {\n eV1Protocol,\n cdnFastWistiaComHost,\n cdnFastWistiaNetHost,\n mediaDataHost,\n} from 'utilities/hosts.js';\nimport { mediaDataTransforms } from 'utilities/media-data-transforms.js';\n\nexport const transformResponse = (mediaData, options) => {\n const mediaWithOpts = { ...mediaData };\n const transformOpts = merge({}, mediaWithOpts.media?.embedOptions, options);\n\n if (mediaWithOpts.error) {\n return mediaWithOpts;\n }\n\n delete mediaWithOpts.media.unnamed_assets;\n mediaDataTransforms(mediaWithOpts.media, transformOpts);\n return mediaWithOpts.media;\n};\n\nexport const mediaDataUrl = (hashedId, options = {}) => {\n const host = mediaDataHost(options);\n return `${eV1Protocol()}//${host}/embed/medias/${hashedId}.json`;\n};\n\nexport const mediaDataScriptRegExp = (hashedId) => {\n const protocolMatch = location.protocol === 'https:' ? 'https' : 'https?';\n return new RegExp(\n `^(${protocolMatch}:)?//((${cdnFastWistiaComHost().replace(\n '.',\n '\\\\.',\n )})|(${cdnFastWistiaNetHost().replace('.', '\\\\.')}))/embed/medias/${hashedId}\\\\.jsonp\\\\??`,\n );\n};\n\nexport const cacheMedia = (hashedId, data) => {\n return cacheMediaData(hashedId, data);\n};\n\nexport const uncacheMedia = (hashedId) => {\n uncacheMediaData(hashedId);\n Wistia.uncacheCaptions?.(hashedId);\n removeSpeedDemonScriptAndData(hashedId);\n};\n\nconst removeSpeedDemonScriptAndData = (hashedId) => {\n window[`wistiajsonp-/embed/medias/${hashedId}.json`] = null;\n removeScriptsBySrc(mediaDataUrl(hashedId), {\n scriptRegex: mediaDataScriptRegExp(hashedId),\n });\n};\n\nexport const mediaFromCache = (hashedId) => {\n return dataFromCache(hashedId);\n};\n\nconst dataFromCache = (hashedId) => {\n const resultFromFetchCache = getMediaDataFromCache(hashedId);\n if (resultFromFetchCache) {\n return resultFromFetchCache;\n }\n\n const speedDemonData = root[`wistiajsonp-/embed/medias/${hashedId}.json`];\n if (speedDemonData != null && speedDemonData.media) {\n return speedDemonData.media;\n }\n\n return null;\n};\n","import type { CSSProperties, SVGAttributes } from 'preact';\n\ntype Props = {\n ariaHidden?: boolean;\n fillColor?: string;\n height: number;\n styleOverride?: CSSProperties;\n width: number;\n};\nexport const standardSvgAttrs = ({\n width = 40,\n height = 34,\n styleOverride = {},\n ariaHidden = false,\n fillColor = '#ffffff',\n}: Props): Pick<\n SVGAttributes,\n 'aria-hidden' | 'enable-background' | 'style' | 'viewBox' | 'x' | 'y'\n> => {\n return {\n x: '0px',\n y: '0px',\n viewBox: `0 0 ${width} ${height}`,\n 'enable-background': `new 0 0 ${width} ${height}`,\n 'aria-hidden': `${ariaHidden}`,\n style: {\n fill: fillColor,\n height: '100%',\n left: 0,\n strokeWidth: 0,\n top: 0,\n width: '100%',\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...styleOverride,\n },\n };\n};\n","import {\n clipsFromChapters,\n shouldAddKeyMoments,\n shouldAddClipsFromChapters,\n seekToAction,\n} from 'utilities/keyMoments.ts';\nimport { cast, clone } from 'utilities/obj.js';\nimport { cdnFastWistiaNetHost } from 'utilities/hosts.js';\nimport {\n stillUrl,\n findClosestAssetByQuality,\n readyPublicMp3s,\n readyPublicMp4s,\n} from 'utilities/assets.js';\nimport { Url } from 'utilities/url.js';\nimport { secondsToIso8601Duration } from './iso8601Helper.ts';\nimport { normalizeChapters } from './normalizeChapters.ts';\n\nconst generateAudioJsonLd = (mediaData, options = {}) => {\n const { videoWidth, videoHeight } = options;\n let { embedOptions } = options;\n\n if (!embedOptions) {\n embedOptions = cast(clone(mediaData.embedOptions));\n }\n\n const obj = {\n '@context': 'http://schema.org/',\n '@id': `https://${cdnFastWistiaNetHost()}/embed/iframe/${mediaData.hashedId}`,\n '@type': 'AudioObject',\n duration: `PT${secondsToIso8601Duration(mediaData.duration)}`,\n name: mediaData.name,\n thumbnailUrl: stillUrl(mediaData.assets, {\n ext: 'jpg',\n protocol: 'https:',\n videoWidth,\n videoHeight,\n embedHost: embedOptions?.embedHost,\n }),\n contentUrl: generateContentUrl(mediaData),\n embedUrl: generateEmbedUrl(mediaData, embedOptions),\n uploadDate: new Date(mediaData.createdAt * 1000).toISOString(),\n description: mediaData.seoDescription,\n };\n\n // multilingual captions should come as array of transcript objects.\n if (mediaData.captions && mediaData.captions[0]) {\n obj.transcript = mediaData.captions[0].text;\n }\n\n return obj;\n};\n\nconst generateEmbedUrl = (mediaData, embedOptions) => {\n const baseUrl = `https://${cdnFastWistiaNetHost()}/embed/iframe/${mediaData.hashedId}`;\n // if we're doing SeekToAction for Google KeyMoments AND video thumbnail\n // is enabled, we need to attach a query param so that it is disabled when\n // Google tries to crawl it\n if (\n shouldAddKeyMoments(mediaData, embedOptions) &&\n !shouldAddClipsFromChapters(embedOptions) &&\n mediaData.embedOptions.plugin?.videoThumbnail\n ) {\n return `${baseUrl}?wseektoaction=true`;\n }\n return baseUrl;\n};\n\n// Google has been struggling with Key Moments using our normal iframe pages as the embedUrl\n// and have asked us to use a contentUrl with a direct m3u8 asset instead.\nconst generateContentUrl = (mediaData) => {\n const { assets } = mediaData;\n if (mediaData.mediaType === 'Audio') {\n return readyPublicMp3s(assets)[0]?.url;\n }\n\n const availableMp4s = readyPublicMp4s(assets);\n if (availableMp4s.length === 0) {\n return;\n }\n\n const highestQuality = findClosestAssetByQuality(availableMp4s, 1080);\n if (!highestQuality) {\n return;\n }\n const url = new Url(highestQuality.url);\n\n url.ext('m3u8');\n return url.absolute();\n};\n\nconst generateVideoJsonLd = (mediaData, options = {}) => {\n const { videoWidth, videoHeight } = options;\n let { embedOptions } = options;\n\n if (!embedOptions) {\n embedOptions = cast(clone(mediaData.embedOptions)) ?? {};\n }\n\n const obj = {\n '@context': 'http://schema.org/',\n '@id': `https://${cdnFastWistiaNetHost()}/embed/iframe/${mediaData.hashedId}`,\n '@type': 'VideoObject',\n duration: `PT${secondsToIso8601Duration(mediaData.duration)}`,\n name: mediaData.name,\n thumbnailUrl: stillUrl(mediaData.assets, {\n ext: 'jpg',\n protocol: 'https:',\n videoWidth,\n videoHeight,\n embedHost: embedOptions?.embedHost,\n }),\n embedUrl: generateEmbedUrl(mediaData, embedOptions),\n uploadDate: new Date(mediaData.createdAt * 1000).toISOString(),\n description: mediaData.seoDescription,\n };\n\n // LiveStream Medias should not get content urls as we might not have any video assets available\n if (mediaData.mediaType === 'Video') {\n obj.contentUrl = generateContentUrl(mediaData);\n }\n\n // multilingual captions should come as array of transcript objects. Like\n // Scar in Lion King, we should Be Prepared!\n if (mediaData.captions && mediaData.captions[0]) {\n obj.transcript = mediaData.captions[0].text;\n }\n\n if (shouldAddKeyMoments(mediaData, embedOptions)) {\n // keyMoments come in two flavors.\n // A. If we have chapters, then we will manually define the key moments via the \"Clip\" schema property\n // B. If we don't, we will use the \"SeekToAction\" property that lets google parse via `wtime`\n if (shouldAddClipsFromChapters(embedOptions)) {\n const chapters = normalizeChapters(embedOptions);\n const chapterList = chapters.chapterList;\n obj.hasPart = clipsFromChapters(chapterList, location.href, mediaData.duration);\n } else {\n obj.potentialAction = seekToAction();\n }\n }\n\n return obj;\n};\n\nexport const injectJsonLd = (id, mediaData, options = {}) => {\n let jsonLdObj;\n\n if (mediaData.mediaType === 'Audio') {\n jsonLdObj = generateAudioJsonLd(mediaData, options);\n } else {\n jsonLdObj = generateVideoJsonLd(mediaData, options);\n }\n\n const stringified = JSON.stringify(jsonLdObj);\n const jsonLd = document.createElement('script');\n jsonLd.className = 'w-json-ld';\n jsonLd.type = 'application/ld+json';\n jsonLd.innerHTML = stringified;\n jsonLd._wistia = true;\n jsonLd.setAttribute('id', id);\n removeInjectedJsonLd(id);\n\n const existingScripts = document.querySelectorAll('script.w-json-ld');\n const existingScript = existingScripts[existingScripts.length - 1];\n if (existingScript) {\n // insert JSON-LD after last JSON-LD script we injected.\n existingScript.parentNode.insertBefore(jsonLd, existingScript.nextSibling);\n } else {\n // prepend JSON-LD to head if we don't see any others yet\n document.head.insertBefore(jsonLd, document.head.childNodes[0]);\n }\n};\n\nexport const removeInjectedJsonLd = (id) => {\n if (!id) {\n return;\n }\n\n const el = document.getElementById(id);\n if (!el) {\n return;\n }\n\n el.remove();\n};\n","const unescapedCache = {};\n\nexport const unescapeHtml = (encodedHtmlStr, options = {}) => {\n if (!encodedHtmlStr) {\n return '';\n }\n\n if (options.cache) {\n const cachedVal = unescapedCache[encodedHtmlStr];\n if (unescapedCache[encodedHtmlStr]) {\n return cachedVal;\n }\n }\n\n const e = document.createElement('div');\n e.innerHTML = encodedHtmlStr.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;');\n let result;\n if (e.childNodes.length > 0) {\n result = e.childNodes[0].nodeValue;\n } else {\n result = '';\n }\n\n if (options.cache) {\n unescapedCache[encodedHtmlStr] = result;\n }\n\n return result;\n};\n","import { isNil, isNonEmptyRecord, isNonEmptyString } from '@wistia/type-guards';\nimport { isVisitorTrackingEnabled } from './trackingConsentApi.js';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { appHostname } from '../appHostname.js';\nimport { CURRENT_SHA, TAGGED_VERSION } from './hosts.js';\nimport { countMetric } from './simpleMetrics.js';\n\nexport type SentryProductType =\n | 'carousel'\n | 'channel'\n | 'dynamicImport'\n | 'form'\n | 'globalListener'\n | 'hlsPlayback'\n | 'mediaPlayback'\n | 'other'\n | 'player'\n | 'playlist'\n | 'relatedMedia'\n | 'transcript';\n\nconst getSampleRatesByProductType = (productType: SentryProductType) => {\n // These errors don't seem terribly useful for us, and it's not clear they are actionable.\n // Let's set a low sample rate for them.\n if (productType === 'mediaPlayback') {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n return 0.001;\n }\n\n if (productType === 'hlsPlayback') {\n // HLS fatals were previously lumped into the heavily-sampled mediaPlayback\n // bucket, so we saw far fewer than expected. I expect we'll have a lot of these,\n // so lets sample them heavily but not quite as much as `mediaPlayback`\n //\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n return 0.01;\n }\n\n return 1;\n};\n\nconst IS_DEV_ENV = process.env.NODE_ENV === 'development';\nconst IS_TEST_ENV = process.env.NODE_ENV === 'test';\n\n// Prevents multiple Sentry script tags from being appended while loading\nlet isSentryLoading = false;\n\n// Buffer for errors reported before Sentry is initialized\nconst errorsCapturedBeforeSentryClientInit: {\n details?: Record<string, string>;\n error: Error;\n product: SentryProductType;\n}[] = [];\nconst MAX_PENDING_ERRORS = 50;\n\nconst configureSentry = () => {\n if (\n isNil(window.Sentry) ||\n isNil(window.Sentry.BrowserClient) ||\n isNil(window.Sentry.makeFetchTransport) ||\n isNil(window.Sentry.defaultStackParser) ||\n isNil(window.Sentry.Scope)\n ) {\n return;\n }\n\n /**\n * Since the webpages our code is embedded in might have their own Sentry instances defined,\n * we cannot use Sentry.init();\n *\n * Instead, we can follow the example provided by Sentry (https://docs.sentry.io/platforms/javascript/best-practices/shared-environments/)\n * and create our own client that we use to report errors. This will prevent any Wistia exceptions\n * from being logged in customer Sentry instances, and it should also help prevent our Sentry instance\n * from picking up exceptions in customer code.\n */\n const client = new window.Sentry.BrowserClient({\n dsn: 'https://a3591ba5e949a37083cc6f5a4191e903@o4505518331658240.ingest.us.sentry.io/4505794284290048',\n transport: window.Sentry.makeFetchTransport,\n stackParser: window.Sentry.defaultStackParser,\n integrations: [window.Sentry.httpContextIntegration()], // Allow httpContextIntegration so we can collect URL, browser, and OS version information. No PII is included here.\n release: isNonEmptyString(TAGGED_VERSION) ? TAGGED_VERSION : CURRENT_SHA,\n });\n const scope = new window.Sentry.Scope();\n scope.setClient(client);\n scope.setTags({\n pillar: 'publish',\n });\n\n Wistia._sentryScope = scope;\n client.init(); // initializing has to be done after setting the client on the scope\n\n Wistia.isSentryInitialized = true;\n\n if (errorsCapturedBeforeSentryClientInit.length > 0) {\n countMetric('player/buffered-sentry-errors', errorsCapturedBeforeSentryClientInit.length);\n }\n // Flush any errors that were buffered before Sentry was ready\n errorsCapturedBeforeSentryClientInit.forEach((pending) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n reportError(pending.product, pending.error, { ...pending.details, isBuffered: 'true' });\n });\n // Empty the array after we process all the entries.\n errorsCapturedBeforeSentryClientInit.length = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n listenForGlobalErrors();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n listenForGlobalUnhandledRejections();\n};\n\nexport const initializeSentry = (): void => {\n if (isVisitorTrackingEnabled() !== true) {\n return;\n }\n\n if (!window.Sentry && !Wistia.isSentryInitialized && !isSentryLoading) {\n isSentryLoading = true;\n const sentryLoader = document.createElement('script');\n /**\n * Using the Sentry loader script means Sentry will init a second time after\n * our own call to init inside configureSentry(). The second init will include\n * all the default Sentry integrations, which we do not want.\n *\n * Instead of using the loader script, we can load the bundle directly\n * and configure the client when the script loads. This allows us to maintain\n * our own Sentry client without worrying about it colliding with customer instances of Sentry.\n *\n */\n sentryLoader.src = 'https://browser.sentry-cdn.com/9.6.1/bundle.min.js';\n sentryLoader.crossOrigin = 'anonymous';\n sentryLoader.integrity =\n 'sha384-kbRmCeIl7Uxr+vT9YhSAdguCdd4L5QPRj7jzQTanorUVVlw/Y5X9vtzVyOEHLfpH';\n sentryLoader.onload = () => configureSentry();\n document.head.appendChild(sentryLoader);\n }\n};\n\ntype ReportErrorDetails = Record<string, string> & {\n url?: never; // Don't ever let calling sites overwrite the `url` tag set\n};\n\nexport const reportError = (\n product: SentryProductType,\n error: Error,\n details?: ReportErrorDetails,\n): void => {\n try {\n if (isVisitorTrackingEnabled() !== true) {\n return;\n }\n\n if (!Wistia.isSentryInitialized) {\n initializeSentry();\n if (errorsCapturedBeforeSentryClientInit.length < MAX_PENDING_ERRORS) {\n errorsCapturedBeforeSentryClientInit.push({ details, error, product });\n }\n return;\n }\n\n const sampleRate = getSampleRatesByProductType(product);\n\n if (IS_DEV_ENV) {\n console.error(error); // eslint-disable-line no-console\n return;\n }\n if (IS_TEST_ENV) {\n // Do nothing\n return;\n }\n\n let shouldSendToSentry = false;\n\n const cryptoObj = isNil(window.crypto) ? window.msCrypto : window.crypto;\n if (cryptoObj !== undefined) {\n const cryptoRandom = cryptoObj.getRandomValues(new Uint32Array(1));\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n shouldSendToSentry = cryptoRandom[0] / (0xffffffff + 1) < sampleRate;\n } else {\n const mathRandom = Math.random();\n shouldSendToSentry = mathRandom < sampleRate;\n }\n\n if (!shouldSendToSentry) {\n // If we shouldn't send to Sentry, just print to the console\n console.error(error); // eslint-disable-line no-console\n // trackingConsentApi is not yet converted to TS\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n } else if (isVisitorTrackingEnabled()) {\n // The Sentry docs indicate that we can pass context in a few different ways (https://docs.sentry.io/platforms/javascript/enriching-events/context/#passing-context-directly)\n // Those examples do not actually seem to work.\n // Instead, we will clear out the scope each time we report a new exception and manually re-create it.\n Wistia._sentryScope.clear();\n Wistia._sentryScope.setTag('pillar', 'publish');\n Wistia._sentryScope.setTag('product', product);\n if (isNonEmptyRecord(details)) {\n Wistia._sentryScope.setTags(details);\n }\n Wistia._sentryScope.setTag('url', window.location.href);\n Wistia._sentryScope.captureException(error);\n }\n } catch (err) {\n // We don't want any problems with our error logging to break other things,\n // so we'll just print this to the console.\n console.error(err); // eslint-disable-line no-console\n }\n};\n\nconst globalErrorHandler = (event: ErrorEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const eventError = event.error;\n if (!(eventError instanceof Error)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const eventErrorSource: string = event.error?.source ?? '';\n const fastHostName = appHostname('fast');\n // Filter out any global errors that didn't originate from Wistia code\n if (eventErrorSource.includes(fastHostName)) {\n reportError('globalListener', eventError);\n }\n};\n\nconst globalUnhandledRejectionHandler = (event: PromiseRejectionEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const eventReason = event.reason;\n if (!(eventReason instanceof Error)) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const eventReasonStack: string = event.reason?.stack ?? '';\n // Filter out any unhandled rejections that didn't originate from Wistia code\n if (eventReasonStack.includes(appHostname('fast'))) {\n reportError('globalListener', eventReason);\n }\n};\n\nexport const listenForGlobalErrors = (): void => {\n if (!Wistia._isListeningForGlobalErrors) {\n window.addEventListener('error', globalErrorHandler);\n Wistia._isListeningForGlobalErrors = true;\n }\n};\n\nexport const listenForGlobalUnhandledRejections = (): void => {\n if (!Wistia._isListeningForGlobalUnhandledRejections) {\n window.addEventListener('unhandledrejection', globalUnhandledRejectionHandler);\n Wistia._isListeningForGlobalUnhandledRejections = true;\n }\n};\n","import { cast, clone, getDeep, isArray, setAndPreserveUndefined, eachLeaf } from 'utilities/obj.js';\nimport { wlog } from 'utilities/wlog.js';\n\nexport const proto = (url = location.href) => {\n if (/^http:\\/\\//.test(url)) {\n return 'http:';\n }\n\n return 'https:';\n};\n\n// decompose the raw query params into a JSON object\n// root[level1][level2][level3] to deep set\n// param[a]=1&param[a]=2 to create an array\nexport const queryParamsToObject = (raw) => {\n // get each key/val pair separated by &\n const result = {};\n if (!raw) {\n return result;\n }\n\n const parts = raw.split('&');\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n\n // break up key/vals\n let pair = part.split('=');\n let key = pair[0];\n let val = pair[1];\n try {\n key = debrack(decodeURIComponent(key)) || '';\n } catch (e) {\n // log on a timeout so that wlog has a chance to set its level from page\n // url.\n setTimeout(() => {\n wlog.notice(e);\n }, 50);\n key = '';\n }\n\n // deep cast each piece of the key (e.g. \"foo.1\" yields [\"foo\", 1])\n cast(key);\n\n // if the key already exists in params\n const existing = getDeep(result, key);\n if (existing != null) {\n // make this value an array of same-name params\n if (isArray(existing)) {\n existing.push(urlComponentToObject(val));\n } else {\n const arr = [existing];\n arr.push(urlComponentToObject(val));\n setAndPreserveUndefined(result, key, arr);\n }\n } else {\n // otherwise save key/val\n setAndPreserveUndefined(result, key, urlComponentToObject(val));\n }\n }\n\n // return the json object\n return result;\n};\n\n// Any val that starts with json:slashslash should have its data\n// parsed as JSON.\nexport const urlComponentToObject = (val) => {\n if (val == null) {\n return val;\n }\n\n let result;\n try {\n result = decodeURIComponent(val);\n } catch (e) {\n // log on a timeout so that wlog has a chance to set its level from page\n // url.\n setTimeout(() => {\n wlog.notice(e);\n }, 50);\n result = val;\n }\n return result;\n};\n\nexport const objectToQueryParams = (obj) => {\n const result = [];\n eachLeaf(obj, (leafVal, path) => {\n if (leafVal != null) {\n result.push(`${encodeURIComponent(brack(path))}=${encodeURIComponent(leafVal)}`);\n } else {\n result.push(encodeURIComponent(brack(path)));\n }\n });\n return result.join('&');\n};\n\nexport const splitPath = (str) => {\n const result = [];\n if (str == null) {\n return result;\n }\n const parts = str.split(/\\/+/);\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n if (part != null && part !== '') {\n result.push(part);\n }\n }\n return result;\n};\n\n// `path` can be a string or an array of strings.\nexport const joinPath = (path) => {\n if (typeof path === 'string') {\n path = path.split('/');\n }\n if (path == null) {\n return '';\n }\n return `/${path.join('/')}`;\n};\n\n// convert array [abc, def, ghi] to bracketed format \"abc[def][ghi]\"\nexport const brack = (path) => {\n let result = path[0];\n for (let i = 1; i < path.length; i++) {\n result += `[${path[i]}]`;\n }\n return result;\n};\n\n// convert \"abc[def][ghi][jkl]\" to array [abc, def, ghi, jkl]\nexport const debrack = (str) => {\n return str.match(/([\\w\\-_]+)/g);\n};\n\n/// /\n// An object to represent an URL, and to make it easy to\n// get/set various properties and parameters of the URL.\n/// /\nconst URL_CONSTRUCTOR_KEYS = ['protocol', 'host', 'port', 'params', 'path'];\nexport const Url = function (url) {\n const self = this;\n\n // if an url is supplied, parse. if it's an object, explicitly\n // set options. otherwise, just assume we're building an url\n // from scratch.\n const construct = function () {\n self.params = {};\n self.path = [];\n self.host = '';\n self.rawPath = '';\n if (typeof url === 'object') {\n self.fromOptions(url);\n } else if (url) {\n self.fromRaw(url);\n }\n };\n\n construct();\n};\n\nconst uproto = Url.prototype;\n\nuproto.fromOptions = function (options) {\n for (let i = 0; i < URL_CONSTRUCTOR_KEYS.length; i++) {\n let opt = URL_CONSTRUCTOR_KEYS[i];\n if (options[opt] != null) {\n this[opt] = options[opt];\n }\n }\n return this;\n};\n\n// parse the url and save the info\nuproto.fromRaw = function (raw) {\n this.rawUrl = raw;\n\n let match;\n\n // protocol\n match = raw.match(/^((?:https?:)|(?:file:)|(?:ftp:))?\\/\\//);\n if (match) {\n this.protocol = match[1] || undefined;\n }\n\n // host\n match = raw.match(/\\/\\/([^:?#/]*)/);\n if (match) {\n this.host = match[1] || undefined;\n }\n\n // path\n match = raw.match(/\\/\\/.*?(\\/[^?#$]+)/) || raw.match(/(^\\/[^/][^?#$]+)/);\n if (match) {\n this.setPath(match[1]);\n }\n\n // port\n match = raw.match(/:(\\d+)/);\n if (match) {\n this.port = parseInt(match[1], 10);\n }\n\n // url parameters\n match = raw.match(/\\?([^#]+)/);\n if (match) {\n this.rawParams = match[1];\n this.params = queryParamsToObject(this.rawParams);\n }\n\n // anchor\n match = raw.match(/#(.*)$/);\n if (match) {\n this.anchor = match[1];\n }\n\n return this;\n};\n\nuproto.clone = function () {\n return new Url({\n protocol: this.protocol,\n host: this.host,\n port: this.port,\n path: clone(this.path),\n params: clone(this.params),\n anchor: this.anchor,\n });\n};\n\nuproto.ext = function (ext) {\n if (ext != null) {\n const current = this.ext();\n const i = this.path.length - 1;\n const regexp = new RegExp(`\\\\.${current}`, 'g');\n if (current) {\n this.path[i] = `${this.path[i].replace(regexp, '')}`;\n }\n return (this.path[i] = `${this.path[i]}.${ext}`);\n }\n const match = this.path[this.path.length - 1].match(/\\.(.*)$/);\n return (match != null && match[1]) || null;\n};\n\n// accept loc for testing purposes\nuproto.isRelative = function (loc = window.location) {\n const proto = this.protocol;\n const host = this.host;\n return (\n (proto == null || proto === '' || proto === loc.protocol) && (!host || host === loc.hostname)\n );\n};\n\nuproto.toString = function () {\n if (this.isRelative()) {\n return this.relative();\n }\n return this.absolute();\n};\n\n// print this url object as a simple string\n// choose sane defaults if parts aren't specified\nuproto.absolute = function () {\n let protocolPart = '';\n if (this.protocol != null) {\n protocolPart = this.protocol;\n }\n let portPart = '';\n if (this.port != null) {\n portPart = `:${this.port}`;\n }\n return `${protocolPart}//${this.host || location.host}${portPart}${this.relative()}`;\n};\n\nuproto.relative = function () {\n let pathPart = '';\n if (this.path.length > 0) {\n pathPart = joinPath(this.path);\n if (this._hasTrailingSlash) {\n pathPart += '/';\n }\n }\n let paramPart = `?${objectToQueryParams(this.params)}`;\n if (paramPart.length === 1) {\n paramPart = '';\n }\n return `${pathPart}${paramPart}${this.relativeAnchor()}`;\n};\n\nuproto.authority = function () {\n const portPart = this.port != null ? `:${this.port}` : '';\n return `${this.host}${portPart}`;\n};\n\nuproto.relativeProtocol = function () {\n let portPart = '';\n if (this.port != null) {\n portPart = `:${this.port}`;\n }\n return `//${this.host}${portPart}${this.relative()}`;\n};\n\nuproto.relativeAnchor = function () {\n let anchorPart = '';\n if (this.anchor != null) {\n anchorPart = `#${this.anchor}`;\n }\n return `${anchorPart}`;\n};\n\nuproto.setPath = function (rawPath) {\n this.rawPath = rawPath;\n this._hasTrailingSlash = /\\/$/.test(this.rawPath);\n this.path = splitPath(this.rawPath);\n};\n\n// create some aliases in Url to create/parse URLs\nUrl.create = (options) => {\n return new Url(options);\n};\n\nexport const createUrl = Url.create;\nUrl.parse = (str) => {\n return new Url(str);\n};\nexport const parseUrl = Url.parse;\n","import { MUTE_CHANGE_EVENT } from './eventConstants.ts';\nimport type { MUTE_CHANGE_EVENT_TYPE } from '../types/events.ts';\n\ntype EventCallback = (detail?: unknown) => void;\n\ntype StoredCallbacks = {\n eventListenerCallback: EventCallback;\n givenCallback: unknown;\n};\n\n// some legacy events are converted to a different name when they are added to the event listener\nexport const convertedEventNames: Record<string, string> = {\n mutechange: MUTE_CHANGE_EVENT,\n};\n\n// some legacy events have a different detail structure than the new ones\n// this is a mapping of the old detail structure to the new one\nconst callbackDetailsConversions: Record<string, ((detail: unknown) => unknown) | undefined> = {\n mutechange: (detail: MUTE_CHANGE_EVENT_TYPE['detail']) => {\n return detail.isMuted;\n },\n};\n\nexport class EventShepherd {\n private readonly convertedEventsMap: Record<string, StoredCallbacks[] | undefined> = {};\n\n public addListener(eventName: string, element: HTMLElement, callback: EventCallback): void {\n // if the event name is not in the convertedEventNames map, use the event name as is\n // this accounts for legacy events that do not have kebab-case names\n const normalizedEventName = convertedEventNames[eventName] ?? eventName;\n\n // if the event name is not in the convertedEventsMap, initialize an empty array\n this.convertedEventsMap[normalizedEventName] ??= [];\n\n const eventListenerCallback = (customEvent: CustomEvent) => {\n // if the callbackDetailsConversions map has a conversion function for the event name, use it.\n // for example, the mute-change event has a detail of { isMuted: boolean }, but the legacy event just passes a boolean\n if (callbackDetailsConversions[eventName]) {\n const convertedDetail = callbackDetailsConversions[eventName](customEvent.detail);\n callback(convertedDetail);\n } else {\n callback();\n }\n };\n\n // we have to store the callback and the event listener callback separately because:\n // 1. to properly remove the event listener, we need to have a reference to the event listener callback\n // 2. we need to match against the given callback to remove the correct listener\n this.convertedEventsMap[normalizedEventName].push({\n givenCallback: callback,\n eventListenerCallback,\n });\n\n // add the event listener to the element\n element.addEventListener(normalizedEventName, eventListenerCallback);\n }\n\n public removeAllListeners(element: HTMLElement): void {\n Object.keys(this.convertedEventsMap).forEach((eventName) => {\n this.convertedEventsMap[eventName]?.forEach((storedCallbacks: StoredCallbacks) => {\n element.removeEventListener(eventName, storedCallbacks.eventListenerCallback);\n });\n\n this.convertedEventsMap[eventName] = [];\n });\n }\n\n public removeListener(eventName: string, element: HTMLElement, callback?: EventCallback): void {\n const normalizedEventName = convertedEventNames[eventName] ?? eventName;\n const indexesToRemove: number[] = [];\n if (callback) {\n element.removeEventListener(normalizedEventName, callback);\n\n if (this.convertedEventsMap[normalizedEventName]) {\n this.convertedEventsMap[normalizedEventName].forEach((storedCallbacks, index) => {\n if (storedCallbacks.givenCallback === callback) {\n indexesToRemove.push(index);\n element.removeEventListener(normalizedEventName, storedCallbacks.eventListenerCallback);\n }\n });\n\n // remove the bindings entirely\n indexesToRemove.forEach((index: number) => {\n if (this.convertedEventsMap[normalizedEventName]) {\n this.convertedEventsMap[normalizedEventName].splice(index, 1);\n }\n });\n }\n } else {\n this.convertedEventsMap[normalizedEventName] = [];\n }\n }\n}\n","import { ComponentChildren, createContext, h, JSX } from 'preact';\nimport { useContext } from 'preact/hooks';\nimport type { MediaData } from '../../../types/player-api-types.ts';\nimport type { EmbedOptions } from '../../../types/EmbedOptions.ts';\n\ntype PlayerDataContextType = {\n embedOptions: EmbedOptions;\n mediaData: MediaData;\n};\n\nconst PlayerDataContext = createContext<PlayerDataContextType | null>(null);\n\nexport const PlayerDataProvider = ({\n children,\n embedOptions,\n mediaData,\n}: {\n children: ComponentChildren;\n embedOptions: EmbedOptions;\n mediaData: MediaData;\n}): JSX.Element | null => {\n return (\n <PlayerDataContext.Provider\n value={{\n embedOptions,\n mediaData,\n }}\n >\n {children}\n </PlayerDataContext.Provider>\n );\n};\n\nexport const usePlayerData = (): PlayerDataContextType => {\n const context = useContext(PlayerDataContext);\n if (context == null) {\n throw new Error('usePlayerData must be used within a PlayerDataProvider');\n }\n return context;\n};\n","export const AFTER_REPLACE_EVENT = 'after-replace';\n\nexport const API_READY_EVENT = 'api-ready';\n\nexport const BEFORE_REPLACE_EVENT = 'before-replace';\n\nexport const BETWEENTIMES_EVENT_EV1 = 'betweentimes';\n\nexport const CROSSTIME_EVENT_EV1 = 'crosstime';\n\nexport const EMBED_OPTIONS_CHANGED_EVENT = 'embed-options-changed';\n\nexport const IMPL_CREATED_EVENT = 'impl-created';\n\nexport const INIT_EMBED_EVENT = 'initembed';\n\nexport const INPUT_CONTEXT_CHANGE_EVENT = 'input-context-change';\n\n// internal: fired by <wistia-player> the moment its inner PublicApi is constructed\nexport const INTERNAL_API_CREATED_EVENT = 'internal-api-created';\nexport const INTERNAL_API_ON_FIND_EVENT = 'internal-api-on-find';\n\nexport const LOADED_MEDIA_DATA_EVENT = 'loaded-media-data';\n\nexport const MUTE_CHANGE_EVENT = 'mute-change';\n\nexport const PLAYER_COLOR_CHANGE_EVENT = 'playercolorchange';\n\nexport const TIME_UPDATE_EVENT = 'time-update';\n","import { Wistia } from '../wistia_namespace.ts';\n\n/*\n * This module is designed as a simpler version of our old localStorage\n * utility. To reduce potential bundle size, it doesn't make use of Obj\n * utilities or wlog, and doesn't return early based on browser detection.\n *\n * To avoid multiple tab bugs, it does not try to do any kind of commit\n * debouncing. Every call to `set` involves JSON.serialize() and every call to\n * `get` involves JSON.parse(). Therefore, if you are performing many\n * operations, you should cache an intermediate value. The\n * updateLocalStorage function is also provided for doing many updates\n * with a single parse and serialize call.\n *\n * If you are working with localStorage on something that requires lots of\n * updates, you should use a separate namespace. That way there is less to\n * deserialize and serialize on each read and write.\n */\n\nconst throwAsync = (e) => {\n setTimeout(() => {\n throw e;\n }, 0);\n};\n\nconst OBJ_PROP = '_namespacedLocalStorage';\n\nconst localStorageWorks = (ns = 'wistia-test-localstorage') => {\n try {\n // Check the global on every call — don't rely solely on the cached result.\n // In test environments (Vitest with jsdom), a previous test can warm the\n // cache to `true` and then have the global torn down between files, leaving\n // pending timers/intervals to dereference a missing `localStorage` and\n // crash with a ReferenceError.\n //\n // This access must live inside the try/catch: simply *reading* the global\n // can throw, not just be undefined. In a sandboxed iframe without\n // `allow-same-origin`, the `localStorage` getter throws a SecurityError —\n // and `typeof` does NOT suppress it (it only suppresses ReferenceError for\n // truly undeclared identifiers, and `localStorage` is a declared property\n // on `window`). We must never recommend adding `allow-same-origin` to fix\n // this, so the code has to tolerate the throw.\n if (typeof localStorage === 'undefined') {\n return false;\n }\n if (Wistia._localStorageWorks != null) {\n return Wistia._localStorageWorks;\n }\n // no-ops that test get, set, and remove. These may throw an exception\n // in Private Browsing mode on iOS and Safari.\n const currentVal = localStorage.getItem(ns);\n localStorage.removeItem(ns);\n localStorage.setItem(ns, currentVal);\n localStorage.removeItem(ns);\n Wistia._localStorageWorks = true;\n } catch (e) {\n Wistia._localStorageWorks = false;\n }\n return Wistia._localStorageWorks;\n};\n\n// Gets our memory store, which we use in parallel with localStorage in case\n// localStorage is disabled. In some browsers and situations, disabled\n// localStorage will throw exceptions.\nconst getMemory = () => {\n if (Wistia[OBJ_PROP] == null) {\n Wistia[OBJ_PROP] = {};\n }\n return Wistia[OBJ_PROP];\n};\n\nexport const getLocalStorage = (ns) => {\n if (!localStorageWorks()) {\n return getMemory()[ns] || {};\n }\n\n if (localStorage[ns]) {\n try {\n if (localStorage[ns] === 'null') {\n // \"null\" is valid JSON, and JSON.parse(\"null\") will return null, which\n // isn't usable for our purposes at all.\n return {};\n }\n return JSON.parse(localStorage[ns]);\n } catch (e) {\n throwAsync(e);\n }\n }\n return {};\n};\n\nexport const removeLocalStorage = (ns) => {\n if (!localStorageWorks()) {\n getMemory()[ns] = {};\n return;\n }\n\n try {\n localStorage.removeItem(ns);\n } catch (e) {\n throwAsync(e);\n }\n};\n\nexport const setLocalStorage = (ns, obj) => {\n if (!localStorageWorks()) {\n if (obj != null && typeof obj === 'object') {\n getMemory()[ns] = obj;\n }\n return obj;\n }\n\n try {\n // We set Wistia._localStorage for compatibility with the old localStorage util,\n // which would otherwise overwrite any changes we make. :0\n getMemory()[ns] = obj;\n\n localStorage[ns] = JSON.stringify(obj);\n } catch (e) {\n throwAsync(e);\n\n // TODO: We might want some strategy of dealing with QuotaExceededError\n // exceptions. Ideally we'd be really smart about pruning, but our other\n // options are (a) just don't update localStorage (that's what we're\n // doing now), or (b) clobber our localStorage to see if that helps.\n }\n return obj;\n};\n\nexport const updateLocalStorage = (ns, fn) => {\n const obj = getLocalStorage(ns);\n\n // fn() may throw an exception. we catch and report because we don't want\n // an exception after modifying in-place localStorage to get our local store\n // out of sync.\n try {\n fn(obj);\n } catch (e) {\n throwAsync(e);\n }\n return setLocalStorage(ns, obj);\n};\n","import { isNotNil } from '@wistia/type-guards';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { mediaDataHost } from './hosts.js';\nimport { mediaDataTransforms } from './media-data-transforms.js';\nimport { cacheMediaData, getMediaDataFromCache } from './remote-data-cache.ts';\nimport type {\n MediaDataServerResponse,\n MediaDataServerErrorResponse,\n MediaData,\n Localization,\n} from '../types/player-api-types.ts';\nimport { isMediaDataError } from './mediaDataError.ts';\nimport type { PluginConfigs } from '../types/plugins.ts';\nimport { getPreferredAvailableLanguageIndex } from '../embeds/wistiaPlayer/utilities/getPreferredLanguageIndex.ts';\nimport { getViewerPreferences } from './viewerPreferences.js';\n\nexport type FetchMediaDataOptions = {\n bypassOriginShield?: boolean;\n channelId?: number | null;\n channelPassword?: string | null;\n defaultMediaLanguage?: string;\n deferFetchingToCarousel?: boolean;\n embedHost?: string;\n overrideMediaLanguage?: string;\n password?: string | null;\n plugin?: PluginConfigs;\n skipCache?: boolean;\n};\n\nconst fetchUnlocalizedMediaData = async (\n hashedId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n const cacheKey = hashedId;\n\n const mediaDataFromCache = getMediaDataFromCache(cacheKey);\n if (mediaDataFromCache && options.skipCache !== true) {\n return Promise.resolve(mediaDataFromCache);\n }\n\n if (isNotNil(Wistia._mediaDataPromises[cacheKey]) && options.skipCache !== true) {\n return Wistia._mediaDataPromises[cacheKey];\n }\n\n const host = mediaDataHost(options) as string;\n const url = new window.URL(`https://${host}/embed/medias/${hashedId}.json`);\n\n if (isNotNil(options.channelId)) {\n url.searchParams.set('channelId', options.channelId.toString());\n }\n\n const channelPasswordParam =\n options.channelPassword ?? options.plugin?.passwordProtectedChannel?.password;\n if (isNotNil(channelPasswordParam)) {\n url.searchParams.set('channelPassword', channelPasswordParam);\n }\n\n if (isNotNil(options.password)) {\n url.searchParams.set('password', options.password);\n }\n\n if (options.deferFetchingToCarousel) {\n url.searchParams.set('defer_fetching_to_carousel', 'true');\n }\n\n // See: https://www.fastly.com/documentation/guides/concepts/edge-state/cache/purging/#shielding\n if (options.bypassOriginShield) {\n url.searchParams.set('bos', '1');\n }\n\n const promise = fetch(url.href)\n .then((resp) => resp.json() as MediaDataServerResponse)\n .then((response: MediaDataServerResponse): MediaData | MediaDataServerErrorResponse => {\n if (isMediaDataError(response)) {\n return response;\n }\n const { media: mediaData } = response as { media: MediaData };\n\n mediaDataTransforms(mediaData, options);\n cacheMediaData(mediaData.hashedId ?? '', mediaData);\n\n return mediaData;\n })\n .finally(() => {\n Reflect.deleteProperty(Wistia._mediaDataPromises, cacheKey);\n });\n\n Wistia._mediaDataPromises[cacheKey] = promise;\n\n return promise;\n};\n\nexport const fetchMediaData = async (\n hashedId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n const mediaDataOrError = await fetchUnlocalizedMediaData(hashedId, options);\n if (isMediaDataError(mediaDataOrError)) {\n return mediaDataOrError as MediaDataServerErrorResponse;\n }\n\n const mediaData = mediaDataOrError as MediaData;\n\n if (mediaData.localizations == null || mediaData.localizations.length === 0) {\n return mediaData;\n }\n\n const typedViewerPreferences = getViewerPreferences() as Record<string, unknown>;\n const localizationViewerPreferences = typedViewerPreferences.localization as\n | Partial<Localization>\n | undefined;\n\n // The order is meaningful here. Languages earlier in the array take priority\n // over those later in the array.\n const preferredLanguages: string[] = [];\n if (options.overrideMediaLanguage != null) {\n preferredLanguages.push(options.overrideMediaLanguage);\n }\n if (localizationViewerPreferences?.bcp47LanguageTag != null) {\n preferredLanguages.push(localizationViewerPreferences.bcp47LanguageTag);\n }\n if (options.defaultMediaLanguage != null) {\n preferredLanguages.push(options.defaultMediaLanguage);\n }\n\n // Remove duplicates, keeping the first occurrence\n const uniquePreferredLanguages = preferredLanguages.filter(\n (lang, index) => preferredLanguages.indexOf(lang) === index,\n );\n\n // First look for exact bcp-47 language code matches\n let preferredLanguageIndex = getPreferredAvailableLanguageIndex(\n mediaData.localizations.map((loc) => loc.bcp47LanguageTag),\n uniquePreferredLanguages,\n );\n\n // If none found, look for exact wistiaLanguageCode matches\n if (preferredLanguageIndex === -1) {\n preferredLanguageIndex = getPreferredAvailableLanguageIndex(\n mediaData.localizations.map((loc) => loc.wistiaLanguageCode),\n uniquePreferredLanguages,\n );\n }\n\n // If still no match, default to the browser language preferences\n if (preferredLanguageIndex === -1) {\n preferredLanguageIndex = getPreferredAvailableLanguageIndex(\n mediaData.localizations.map((loc) => loc.bcp47LanguageTag),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n [...(navigator.languages ?? ['en'])],\n );\n }\n\n if (preferredLanguageIndex >= 0) {\n const preferredLocalization = mediaData.localizations[preferredLanguageIndex];\n\n if (mediaData.hashedId === preferredLocalization.hashedId) {\n return mediaData;\n }\n\n // For alternate audio, always load the source media (not the alternate audio's hashedId)\n // The audio track switching is handled by HLS, not by loading a different media\n if (preferredLocalization.localizationIntent === 'alternate_audio') {\n return mediaData;\n }\n\n return fetchUnlocalizedMediaData(preferredLocalization.hashedId, {\n ...options,\n });\n }\n\n return mediaData;\n};\n","import type { EmbedOptions } from '../types/EmbedOptions.ts';\n\nconst BIG_PLAY_BUTTON_RADIUS_RATIO = 0.75;\nexport const CONTROL_BAR_DISTANCE_RATIO = 0.75;\n\nconst FLOATING_CONTROL_BAR_RADIUS = 18;\nconst FLOATING_CONTROL_BAR_DISTANCE = 6;\n\n/*\n\nRounded Player\n\nThese four methods determine the defaults for rounding the player.\n\n- {roundedPlayer} - if it is the _only_ option, it is used as the base upon which all the other border radiuses are derived.\n- {playerBorderRadius} - Determines the border radius of the thumbnail and outer parts of the player.\n- {bigPlayButtonBorderRadius} - Border radius of the big play button.\n- {controlBarBorderRadius} - Border radius of the control bar.\n- {controlBarDistance} - Distance the control bar is from the edges of the player - also how far control bar dialogs are from the control bar.\n- {floatingControlBar} - Boolean that can used to just create a floating control bar with border radius - no configuration.\n\n*/\n\n/**\n * Takes rounded player embed options and returns the calculated player border radius.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultPlayerBorderRadius = ({\n playerBorderRadius,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (roundedPlayer !== undefined) {\n return roundedPlayer;\n }\n if (playerBorderRadius !== undefined) {\n return playerBorderRadius;\n }\n return 0;\n};\n\n/**\n * Takes rounded player embed options and returns the calculated big play button border radius.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultBigPlayButtonBorderRadius = ({\n bigPlayButtonBorderRadius,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (bigPlayButtonBorderRadius !== undefined) {\n return bigPlayButtonBorderRadius;\n }\n if (roundedPlayer !== undefined) {\n return roundedPlayer * BIG_PLAY_BUTTON_RADIUS_RATIO;\n }\n\n return 0;\n};\n\n/**\n * Takes rounded player embed options and returns the calculated control bar border radius.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultControlBarBorderRadius = ({\n controlBarBorderRadius,\n floatingControlBar,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (controlBarBorderRadius !== undefined) {\n return controlBarBorderRadius;\n }\n if (roundedPlayer !== undefined) {\n return roundedPlayer * CONTROL_BAR_DISTANCE_RATIO;\n }\n if (floatingControlBar === true) {\n return FLOATING_CONTROL_BAR_RADIUS;\n }\n\n return 0;\n};\n\n/**\n * Takes rounded player embed options and returns the calculated control bar distance.\n * @param {EmbedOptions} embedOptions\n * @returns {number}\n */\nexport const getDefaultControlBarDistance = ({\n controlBarBorderRadius,\n floatingControlBar,\n roundedPlayer,\n}: EmbedOptions): number => {\n if (roundedPlayer !== undefined) {\n return roundedPlayer / 4;\n }\n if (controlBarBorderRadius !== undefined) {\n return controlBarBorderRadius / 2;\n }\n if (floatingControlBar === true) {\n return FLOATING_CONTROL_BAR_DISTANCE;\n }\n\n return 0;\n};\n","import { assign } from 'utilities/obj.js';\nimport { h, render, Component } from 'preact';\nimport { eV1Protocol, eV1Host } from 'utilities/hosts.js';\nimport { Thumbnail } from './Thumbnail.jsx';\n\nexport class ProgressiveThumbnail extends Component {\n constructor(props) {\n super(props);\n this.state = {\n normalThumbOpacity: props.isVisible ? 1 : 0,\n };\n this.onDisplay = props.onDisplay;\n }\n\n componentWillReceiveProps(nextProps) {\n if (!this.onDisplay && nextProps.onDisplay) {\n this.onDisplay = nextProps.onDisplay;\n }\n }\n\n render() {\n if (this.props.isVisible) {\n this._hasRenderedVisible = true;\n }\n\n const sharedProps = {\n ariaHidden: this.props.ariaHidden,\n backgroundColor: this.props.backgroundColor,\n fitStrategy: this.props.fitStrategy,\n isVisible: this.props.isVisible,\n stillSnap: this.props.stillSnap,\n stretchLimit: this.props.stretchLimit,\n videoHeight: this.props.videoHeight,\n videoWidth: this.props.videoWidth,\n thumbnailAltText: this.props.thumbnailAltText,\n playerBorderRadius: this.props.playerBorderRadius,\n };\n const swatchProps = assign({}, sharedProps, {\n ariaHidden: true,\n images: [\n {\n url: `${eV1Protocol()}//${eV1Host()}/embed/medias/${this.props.hashedId}/swatch`,\n },\n ],\n });\n const normalThumbProps = assign({}, sharedProps, {\n onDisplay: this.onDisplayNormalThumb,\n images: this.props.images,\n });\n return (\n <div ref={this.props.elemRef}>\n {this.props.swatchEnabled && this._hasRenderedVisible ? (\n <Thumbnail {...swatchProps} wrapperStyle={this.swatchWrapperStyle()} />\n ) : null}\n {this._hasRenderedVisible ? (\n <Thumbnail {...normalThumbProps} wrapperStyle={this.normalThumbWrapperStyle()} />\n ) : null}\n </div>\n );\n }\n\n componentDidMount() {\n this._fadeTimer = setTimeout(this.afterTwoSeconds, 2000);\n }\n\n componentWillUnmount() {\n clearTimeout(this._fadeTimer);\n }\n\n normalThumbWrapperStyle() {\n const transition =\n this.props.swatchEnabled && this.props.uiHasRendered && this.state.normalThumbOpacity === 1\n ? 'opacity 3s'\n : '';\n return {\n height: '100%',\n left: 0,\n opacity: this.state.normalThumbOpacity,\n position: this.props.fitStrategy === 'naturalHeight' ? 'relative' : 'absolute',\n top: 0,\n transition,\n width: '100%',\n };\n }\n\n swatchWrapperStyle() {\n return {\n filter: 'blur(5px)',\n height: '100%',\n left: 0,\n position: this.props.fitStrategy === 'naturalHeight' ? 'relative' : 'absolute',\n top: 0,\n width: '100%',\n };\n }\n\n afterTwoSeconds = () => {\n // If we've waited 2 seconds for the thumbnail to load but it still hasn't\n // finished, then we guessed wrong about what the initial opacity should\n // be. Set it back to 0 so we do a slow fade when it's done loading.\n if (!this._displayed && this.state.normalThumbOpacity === 1) {\n this.setState({ normalThumbOpacity: 0 });\n }\n };\n\n onDisplayNormalThumb = () => {\n this.setState({ normalThumbOpacity: 1 });\n\n this._displayed = true;\n if (this.onDisplay) {\n this.onDisplay();\n }\n };\n}\n","import type { PublicApi } from '../types/player-api-types.ts';\nimport { cast, clone, isObject } from './obj.js';\nimport { wData, wRemoveData } from './wistiaData.js';\nimport { getOneApiHandle } from './getApiHandles.ts';\n\nexport const OPTION_PREFIX = 'wistia_embed_options_';\nexport const GLOBAL_ID_KEY = '__global__';\n\n/**\n * Get the embed options for a given key or embed id\n * @param {string} id - The key or embed id\n * @param {Function} [matcherFn=getOneApiHandle] - Custom matcher function\n * @returns {object}\n */\nexport const getEmbedOptionStore = (id: string, matcherFn = getOneApiHandle): object => {\n // If options exist for the provided id, just return them\n if (wData([OPTION_PREFIX, id]) !== undefined) {\n return wData([OPTION_PREFIX, id]) as object;\n }\n\n // Otherwise, lets check this key's api handle\n const apiHandleFromKey = matcherFn(id) as PublicApi | 'removed' | null;\n if (apiHandleFromKey === null || apiHandleFromKey === 'removed') {\n return {};\n }\n // And compare it against all the other stored api handles\n if (wData(OPTION_PREFIX) !== undefined) {\n // If the api handles match, return the options for that key\n const matchedKey = Object.keys(wData(OPTION_PREFIX) as object).find(\n (key) => matcherFn(key) === apiHandleFromKey,\n );\n if (wData([OPTION_PREFIX, matchedKey]) !== undefined) {\n return wData([OPTION_PREFIX, matchedKey]) as object;\n }\n }\n return {};\n};\n\n/**\n * Set the embed options for a given key or embed id\n * @param {string} id - The key or embed id\n * @param {object} options - The options to set\n * @returns {object}\n */\nexport const setEmbedOptionStore = (id: string, options: object | null): object => {\n if (options !== null) {\n return wData([OPTION_PREFIX, id], cast(clone(options))) as object;\n }\n return {};\n};\n\n/**\n * Remove the embed options for a given key or embed id\n * @param {string} id - The key or embed id\n * @param {object} options - The options to set\n * @returns {void}\n */\nexport const removeEmbedOptionStore = (id: string): void => {\n wRemoveData([OPTION_PREFIX, id]);\n};\n\n/**\n * Legacy behavior replacement for Wistia.options - Get or set embed options based\n * on the parameters provided\n * @param {string | object} id - The id of the embed or an object of options\n * @param {object} options - The options to set\n * @returns {object}\n */\nexport const getOrSetEmbedOptionStore = (id?: object | string, options?: object | null): object => {\n let optionsKey = id;\n let embedOptions = options;\n\n // Redundant \"typeof\" check is needed to make typescript happy\n if (isObject(optionsKey) && typeof optionsKey === 'object') {\n embedOptions = optionsKey;\n optionsKey = GLOBAL_ID_KEY;\n }\n\n // Set options\n if (embedOptions !== undefined && embedOptions !== null) {\n return wData([OPTION_PREFIX, optionsKey], cast(clone(embedOptions))) as object;\n }\n\n // Get options\n if (optionsKey !== undefined) {\n // If options exist for the provided id, just return them\n if (wData([OPTION_PREFIX, id]) !== undefined) {\n return wData([OPTION_PREFIX, id]) as object;\n }\n\n // Otherwise, lets check this key's api handle\n const apiHandleFromKey = getOneApiHandle(optionsKey as string) as PublicApi | 'removed' | null;\n if (apiHandleFromKey === null || apiHandleFromKey === 'removed') {\n return {};\n }\n // And compare it against all the other stored api handles\n if (wData(OPTION_PREFIX) !== undefined) {\n // If the api handles match, return the options for that key\n const matchedKey = Object.keys(wData(OPTION_PREFIX) as object).find(\n (key) => getOneApiHandle(key) === apiHandleFromKey,\n );\n if (wData([OPTION_PREFIX, matchedKey]) !== undefined) {\n return wData([OPTION_PREFIX, matchedKey]) as object;\n }\n }\n return {};\n }\n return wData(OPTION_PREFIX) as object;\n};\n","import { isNil } from '@wistia/type-guards';\nimport { CarouselData } from '../types/carousel.ts';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { MediaData } from '../types/player-api-types.ts';\nimport { wlog } from './wlog.js';\nimport { LiveStreamEventData } from '../types/live-stream-event.ts';\n\nexport const getMediaDataFromCache = (hashedId: string): MediaData | null | undefined => {\n const mediaData = Wistia._remoteData.get(`media_${hashedId}`);\n if (isNil(mediaData)) return null;\n\n // It's possible that we're caching a server error response as MediaData.\n // If we find one of those places, log an error.\n if (Object.hasOwn(mediaData, 'error')) {\n wlog.error(\n `Received cached error response instead of MediaData when retrieving cached mediaData for ${hashedId}`,\n );\n }\n\n return mediaData as MediaData;\n};\n\nexport const cacheMediaData = (hashedId: string, data: MediaData): void => {\n Wistia._remoteData.set(`media_${hashedId}`, data);\n};\n\nexport const uncacheMediaData = (hashedId: string): void => {\n Wistia._remoteData.delete(`media_${hashedId}`);\n Reflect.deleteProperty(Wistia._mediaDataPromises, hashedId);\n};\n\nexport const cacheLiveStreamEventData = (hashedId: string, data: LiveStreamEventData): void => {\n Wistia._remoteData.set(`live_stream_event_${hashedId}`, data);\n};\n\nexport const uncacheLiveStreamEventData = (hashedId: string): void => {\n Wistia._remoteData.delete(`live_stream_event_${hashedId}`);\n};\n\nexport const getLiveStreamEventDataFromCache = (\n hashedId: string,\n): LiveStreamEventData | null | undefined => {\n const liveStreamEventData = Wistia._remoteData.get(`live_stream_event_${hashedId}`);\n if (isNil(liveStreamEventData)) return null;\n\n // It's possible that we're caching a server error response as LiveStreamEventData.\n // If we find one of those places, log an error.\n if (Object.hasOwn(liveStreamEventData, 'error')) {\n wlog.error(\n `Received cached error response instead of LiveStreamEventData when retrieving cached liveStreamEventData for ${hashedId}`,\n );\n uncacheLiveStreamEventData(hashedId);\n }\n\n return liveStreamEventData as LiveStreamEventData;\n};\n\nexport const getCarouselDataFromCache = (hashedId: string): CarouselData | null | undefined => {\n const carouselData = Wistia._remoteData.get(`carousel_${hashedId}`);\n if (isNil(carouselData)) return null;\n\n return carouselData as CarouselData;\n};\n\nexport const cacheCarouselData = (hashedId: string, data: CarouselData): void => {\n Wistia._remoteData.set(`carousel_${hashedId}`, data);\n};\n\nexport const uncacheCarouselData = (hashedId: string): void => {\n Wistia._remoteData.delete(`carousel_${hashedId}`);\n};\n","import { isNotNil } from '@wistia/type-guards';\nimport { normalizeChapters } from './normalizeChapters.ts';\nimport { Chapter, ChaptersPluginConfig } from '../types/plugins.ts';\nimport type { MediaData } from '../types/player-api-types.ts';\nimport type { EmbedOptions } from '../types/EmbedOptions.ts';\n\n// Google got mad that the default chapter title is (of course) not very\n// descriptive, and wanted us to make sure it's never used for Key Moments.\nconst DEFAULT_CHAPTER_TITLE = 'Chapter Title';\nconst MINIMUM_DURATION = 30;\n\nexport const shouldAddClipsFromChapters = (embedOptions: EmbedOptions): boolean => {\n const chapters = normalizeChapters(embedOptions);\n if (!chapters) {\n return false;\n }\n\n const { chapterList } = chapters;\n\n // the `on` property must be explicitly false to disable\n return (\n chapters.on !== false &&\n chapters.on !== 'false' &&\n Array.isArray(chapterList) &&\n chapterList.length > 0\n );\n};\n\n// keyMoments should only be limited by a few factors:\n// 1. a turnstile/form is blocking content\n// 2. it's password protected\n// 3. the video is really short\n// 4. only available for VOD, not Live\n// Then, there are two different _types_ of key moments. If we have chapters\n// we will use the Clips format to specifically tell google the timestamps we think\n// are important. Otherwise, we will use the SeekToAction field along with the wtime\n// param to allow Google to search through the video for key moments\nexport const shouldAddKeyMoments = (mediaData: MediaData, embedOptions: EmbedOptions): boolean => {\n if (embedOptions.keyMoments === false) {\n return false;\n }\n\n const { duration, type } = mediaData;\n const {\n passwordProtectedVideo,\n 'requireEmail-v1': turnstilePlugin,\n form,\n } = embedOptions.plugin ?? {};\n const isLiveStream = type === 'LiveStream';\n\n const passwordEnabled =\n passwordProtectedVideo?.on === true || passwordProtectedVideo?.on === 'true';\n\n const turnstileBlocksContent =\n turnstilePlugin &&\n turnstilePlugin.on !== false &&\n turnstilePlugin.time !== 'end' &&\n !turnstilePlugin.persistentTurnstile;\n\n const formBlocksContent =\n form?.on !== false && form?.time !== 'end' && form?.displayMode === 'pause';\n\n return (\n !passwordEnabled &&\n !turnstileBlocksContent &&\n !formBlocksContent &&\n !isLiveStream &&\n typeof duration === 'number' &&\n duration >= MINIMUM_DURATION\n );\n};\n\nconst sortedFilteredChapters = (\n chapterList: ChaptersPluginConfig['chapterList'],\n): ChaptersPluginConfig['chapterList'] => {\n const chapterExistsAtTime = {};\n\n return [...chapterList]\n .sort((firstChapter: Chapter, secondChapter) => firstChapter.time - secondChapter.time)\n .filter(({ time, title, deleted }) => {\n if (Boolean(chapterExistsAtTime[time]) || deleted || title === DEFAULT_CHAPTER_TITLE) {\n return false;\n }\n chapterExistsAtTime[time] = true;\n return true;\n });\n};\n\ntype Clips = {\n '@type': string;\n endOffset: number;\n name: string;\n startOffset: number;\n url: string;\n}[];\n\nexport const clipsFromChapters = (\n chapterList: ChaptersPluginConfig['chapterList'],\n baseUrl: string,\n mediaDuration: number,\n): Clips => {\n if (!Array.isArray(chapterList) || chapterList.length === 0) {\n return [];\n }\n\n const clips = sortedFilteredChapters(chapterList).map((chapter, index, chapters) => {\n const { time, title } = chapter;\n const url = new window.URL(baseUrl);\n const floorTime = Math.floor(time);\n const nextChapter = chapters[index + 1];\n const endOffsetTime = isNotNil(nextChapter) ? nextChapter.time : mediaDuration;\n\n // wtime does not support decimals\n url.searchParams.set('wtime', `${floorTime}s`);\n\n // https://schema.org/Clip\n return {\n '@type': 'Clip',\n endOffset: Math.floor(endOffsetTime),\n name: title,\n startOffset: floorTime,\n url: url.toString(),\n };\n });\n\n return clips;\n};\n\ntype SeekToAction = {\n '@type': string;\n 'startOffset-input': string;\n target: string;\n};\n// https://developers.google.com/search/docs/advanced/structured-data/video#seek\nexport const seekToAction = (): SeekToAction => {\n const url = new window.URL(window.location.href);\n // if wtime is already on the url as query param, it will be overwritten here. This is only for the JSON+LD though.\n url.searchParams.set('wtime', '{seek_to_second_number}');\n\n return {\n '@type': 'SeekToAction',\n target: url.toString().replace('%7Bseek_to_second_number%7D', '{seek_to_second_number}'), // we need to replace the encoded uri with the direct string\n 'startOffset-input': 'required name=seek_to_second_number',\n };\n};\n","import {\n getWistiaLocalStorage,\n removeWistiaLocalStorage,\n updateWistiaLocalStorage,\n} from 'utilities/wistiaLocalStorage.js';\nimport { getDeep, setDeep, unsetDeep } from 'utilities/obj.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\n/*\n * DEPRECATED: Use utilities/wistiaLocalStorage.js directly instead.\n *\n * This module has two failings.\n *\n * First, it must include utilities/obj for its deep setting and getting\n * functionality, which is a core part of its API. However, this convenience\n * does not merit the size of its inclusion; if we want to do deep setting and\n * getting, we can just compose with Obj.setDeep and Obj.getDeep at the import site.\n *\n * Second, in order to avoid lots of JSON.parse calls, it keeps a cache that\n * should mirror the contents of localStorage. However, because localStorage\n * data is shared across tabs with the same domain--and because we are never\n * syncing the actual localStorage values here--changes in multiple open tabs\n * will overwrite each other, causing general strangeness.\n */\n\nif (!Wistia._localStorage) {\n Wistia._localStorage = getWistiaLocalStorage();\n}\n\nexport const uncache = () => {\n Wistia._localStorage = {};\n};\n\nexport const setOrGet = (key, val, unset = false) => {\n if (val != null) {\n const fn = unset ? unsetDeep : setDeep;\n Wistia._localStorage = updateWistiaLocalStorage((ls) => fn(ls, key, val));\n return val;\n }\n if (key != null) {\n return getDeep(Wistia._localStorage, key);\n }\n return Wistia._localStorage;\n};\n\nexport const removeLocalStorage = (key) => {\n return setOrGet(key, 'nada', true);\n};\n\nexport const dumpLocalStorage = removeWistiaLocalStorage;\n","import { isArray, isEmpty } from 'utilities/obj.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst W = Wistia;\n\nif (Wistia._timeouts == null) {\n Wistia._timeouts = {};\n}\n\n// Improved timeouts!\n// allows us to\n// 1. auto-debounce if an identical key is replaced\n// 2. associate timeouts with a specific context, but access them globally\n// 3. Clear all timeouts in a specific context\n// 4. Do nextTick by not specifying the time argument\n// e.g. Wistia.timeout(\"video1234\", function() { ... });\n//\n// In our implementation, we treat the first dot-delimited value in the key\n// as a namespace. This is an optimization since most of our videos prefix\n// their timeouts with a uuid. By keeping them in a namespace, it means\n// clearTimeouts doesn't need to iterate through _all_ timeouts globally,\n// which makes doTimeout itself faster (since it calls clearTimeouts internally).\n//\n// Returns the timeoutId.\nexport const doTimeout = (key, fn, time = 1) => {\n if (isArray(key)) {\n key = key.join('.');\n }\n const namespace = timeoutNamespace(key);\n clearTimeouts(key, namespace);\n if (fn) {\n let timeouts = Wistia._timeouts[namespace];\n if (timeouts == null) {\n timeouts = Wistia._timeouts[namespace] = {};\n }\n let timeoutId = setTimeout(() => {\n delete timeouts[key];\n fn();\n }, time);\n timeouts[key] = timeoutId;\n return timeoutId;\n }\n return Wistia._timeouts[namespace][key];\n};\n\n// This will clear timeouts matching the key. Key is dot-delimited list\n// like:\n//\n// mynamespace.more_specific.\n// mynamespace.anothernamespace.more_specific\n//\n// We allow passing in namespace as an optimization for doTimeout.\nexport const clearTimeouts = (key, namespace = null) => {\n if (isArray(key)) {\n key = key.join('.');\n }\n namespace = namespace || timeoutNamespace(key);\n\n // If there's no namespacing on the input key, then we should treat the\n // input as both a namespace _and_ a key. This handles the namespace case.\n // We handle the key case with our normal logic.\n let timeouts;\n if (namespace === '__global__') {\n timeouts = Wistia._timeouts[key];\n if (timeouts) {\n for (let k in timeouts) {\n let v = timeouts[k];\n clearTimeout(v);\n delete timeouts[k];\n }\n }\n }\n\n timeouts = Wistia._timeouts[namespace];\n if (timeouts) {\n for (let k in timeouts) {\n let v = timeouts[k];\n if (\n k.indexOf &&\n k.indexOf(key) === 0 &&\n (k.length === key.length || k.charAt(key.length) === '.')\n ) {\n clearTimeout(v);\n delete timeouts[k];\n }\n }\n }\n\n // Cleaning out namespaces is not particularly efficient, and isn't\n // particularly helpful, so let's only do it once every 5 seconds.\n if (!Wistia.blockSweepTimeouts) {\n Wistia.blockSweepTimeouts = true;\n setTimeout(sweepTimeouts, 0);\n setTimeout(() => {\n Wistia.blockSweepTimeouts = false;\n }, 5000);\n }\n};\n\n// Clear out any namespaces that are no longer active\nconst sweepTimeouts = () => {\n for (let namespace in Wistia._timeouts) {\n let timeouts = Wistia._timeouts[namespace];\n if (isEmpty(timeouts)) {\n delete Wistia._timeouts[namespace];\n }\n }\n};\n\nconst timeoutNamespace = (key) => {\n const dotIndex = key.indexOf('.');\n if (dotIndex > 0) {\n return key.substring(0, dotIndex);\n }\n return '__global__';\n};\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.some(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import { base64Decode } from './core.js';\nimport { wlog } from './wlog.js';\n\n/**\n * Extracts the email from the pageUrl and returns it if found\n * @param {string} pageUrl the url of the page\n * @returns {string | null} the email if found, null otherwise\n */\nexport const extractEmailFromParams = (pageUrl: string): string | null => {\n const wemail = /wemail=([^&#]+)/.exec(pageUrl) ?? null;\n\n if (wemail) {\n // wemail may arrive URL-encoded (e.g. jane%40example.com) when the embedding\n // page constructs the URL with encodeURIComponent or similar. Decode here so\n // downstream ETL pipeline sees a well-formed address.\n try {\n return decodeURIComponent(wemail[1]);\n } catch {\n // Malformed percent-encoding — fall back to the raw capture rather\n // than crashing the player's init path.\n return wemail[1];\n }\n }\n\n const wkey = /wkey=([^&#]+)/.exec(pageUrl) ?? null;\n\n if (wkey) {\n const base64Email = wkey[1];\n try {\n const decodedEmail = base64Decode(base64Email);\n return decodedEmail;\n } catch (error) {\n wlog.info('Failed to decode email from wkey', error);\n }\n }\n\n return null;\n};\n","import { assign } from 'utilities/obj.js';\nimport { Url } from 'utilities/url.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { isNotNil } from '@wistia/type-guards';\nimport { readyPublicOver400 } from './assets.js';\n\nconst detect = cachedDetect();\n\nconst convertStillImageToWebp = (media) => {\n if (media.assets && detect.webp) {\n media.assets = media.assets.map((asset) => {\n // there was a flow with the uploader + notPlayablePlayer where we have assets\n // but they're not ready and don't have urls, so just double check for that here\n if (asset.type === 'still_image' && Object(asset).url) {\n const url = new Url(asset.url);\n url.ext('webp');\n asset.url = url.absolute();\n }\n\n return asset;\n });\n }\n};\n\nconst maybeCloneOriginalAsMp4 = (media, options = {}) => {\n if (options.allowOriginalAsMp4 !== true) {\n // only transform if the embed options ask for it\n return;\n }\n\n const original = media.assets.filter((a) => a.type === 'original')[0];\n\n if (readyPublicOver400(media.assets).length > 0) {\n // we have a derivative we can show instead\n return;\n }\n\n media.assets = [\n ...media.assets,\n assign({}, original, {\n display_name: `${original.display_name} copy`,\n container: 'mp4',\n codec: 'h264',\n type: 'mp4_video',\n }),\n ];\n};\n\nconst maybeAddChannelIdToEmbedOptions = (media, options = {}) => {\n if (isNotNil(options.channelId) && media.embedOptions) {\n media.embedOptions.channelId = options.channelId;\n }\n};\n\nconst maybeAddChannelPasswordToEmbedOptions = (media, options = {}) => {\n if (isNotNil(options.channelPassword) && media.embedOptions) {\n media.embedOptions.channelPassword = options.channelPassword;\n }\n};\n\nconst mergeFormCustomizations = (formCustomizations, embedOptions) => {\n if (!formCustomizations || !embedOptions) return;\n\n if (!embedOptions.plugin) embedOptions.plugin = {};\n if (!embedOptions.plugin.form) embedOptions.plugin.form = {};\n\n const form = embedOptions.plugin.form;\n if (formCustomizations.form_button_text)\n form.formButtonText = formCustomizations.form_button_text;\n if (formCustomizations.form_lower_text) form.formLowerText = formCustomizations.form_lower_text;\n if (formCustomizations.title) form.title = formCustomizations.title;\n};\n\n// The API returns form customization fields (like button text, lower text, and title)\n// in a separate `formCustomizations` object rather than inside `embedOptions`. We merge\n// them into `embedOptions.plugin.form` here so the form plugin can consume them\n// through the same path it uses for all other configuration.\nconst mergeFormCustomizationsIntoEmbedOptions = (media) => {\n mergeFormCustomizations(media.formCustomizations, media.embedOptions);\n\n if (Array.isArray(media.translatedMediaData)) {\n for (const entry of media.translatedMediaData) {\n mergeFormCustomizations(entry.formCustomizations, entry.embedOptions);\n }\n }\n};\n\nexport const mediaDataTransforms = (media, options = {}) => {\n maybeCloneOriginalAsMp4(media, options);\n convertStillImageToWebp(media);\n maybeAddChannelIdToEmbedOptions(media, options);\n maybeAddChannelPasswordToEmbedOptions(media, options);\n mergeFormCustomizationsIntoEmbedOptions(media);\n return media;\n};\n","import { isArray, getDeep, setDeep, unsetDeep } from 'utilities/obj.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\n// A simple key/value store implementation\n// stored on the Wistia namespace\n//\n// To set:\n//\n// wData(\"key.path\", \"val\")\n// wData([\"key\", \"path\"], \"val\")\n//\n// To get\n//\n// wData(\"key.path\")\n// wData([\"key\", \"path\"])\n\nexport const wData = (key, val) => {\n if (!isArray(key)) {\n key = key.split('.');\n }\n if (val != null) {\n setDeep(Wistia, ['_data'].concat(key), val);\n }\n return getDeep(Wistia, ['_data'].concat(key));\n};\n\nexport const wRemoveData = (key) => {\n if (!isArray(key)) {\n key = key.split('.');\n }\n return unsetDeep(Wistia, ['_data'].concat(key));\n};\n","import { makeWbindable } from 'utilities/wbindable.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nmakeWbindable(Wistia);\n\nexport const globalBind = Wistia.bind.bind(Wistia);\nexport const globalOn = Wistia.on.bind(Wistia);\nexport const globalOff = Wistia.off.bind(Wistia);\nexport const globalRebind = Wistia.rebind.bind(Wistia);\nexport const globalTrigger = Wistia.trigger.bind(Wistia);\nexport const globalUnbind = Wistia.unbind.bind(Wistia);\n","import { elemStyle } from 'utilities/elem.js';\nimport { doTimeout } from 'utilities/timeout-utils.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { cast, merge } from 'utilities/obj.js';\n\nconst detect = cachedDetect();\n\nexport const scalingOptionsFromVideo = (video, options) => {\n return merge(\n {\n videoWidth: video.videoWidth(),\n videoHeight: video.videoHeight(),\n isInFullscreen: video.inFullscreen(),\n controlScaling: video.controlScaling(),\n },\n options,\n );\n};\n\nexport const controlDimensions = (options = {}, baseWidth = 40, baseHeight = 34) => {\n options = merge(\n {\n videoWidth: 640,\n videoHeight: 360,\n isInFullscreen: false,\n baseWidth: baseWidth != null ? baseWidth : 40,\n baseHeight: baseHeight != null ? baseHeight : 34,\n },\n options,\n );\n const multiplier = controlMultiplier(options);\n return { width: multiplier * options.baseWidth, height: multiplier * options.baseHeight };\n};\n\nexport const bigPlayButtonDimensions = (options, baseWidth, baseHeight) => {\n return controlDimensions(options, baseWidth, baseHeight);\n};\n\n// abstracted so this can easily be changed if we wanted.\nexport const fontSizeMultiplier = (options) => {\n return controlMultiplier(options);\n};\n\nexport const allowBigControls = (options = {}) => {\n const screenHeight = options.screenHeight || window.screen.height;\n const screenWidth = options.screenWidth || window.screen.width;\n return (\n options.controlScaling != 'auto' ||\n detect.iphone ||\n detect.android ||\n screenWidth < screenHeight\n );\n};\n\nexport const maxMultiplierForVideo = (options) => {\n if (options.controlScaling != 'auto') {\n return options.controlScaling;\n }\n\n if (allowBigControls(options)) {\n // the device dimensions are oriented vertically; this is probably a phone\n // or tablet, or just a monitor that would be fine with huge controls.\n return 3.5;\n }\n return 1.4;\n};\n\nexport const minMultiplierForVideo = (options) => {\n if (options.controlScaling != 'auto') {\n return options.controlScaling;\n }\n\n if (allowBigControls(options)) {\n // the controls are unusable if we scale down too much for on phones and\n // tablets.\n return 1;\n }\n return 0.75;\n};\n\nexport const getZoomMultiplier = (options) => {\n if (!options.isInFullscreen) {\n return 1;\n }\n\n const result = Math.max(1, window.innerWidth / Math.max(screen.width, screen.height));\n return result;\n};\n\nexport const getDeviceMultiplier = (options) => {\n if (allowBigControls(options)) {\n return 1.4;\n }\n return 1;\n};\n\nexport const controlMultiplierForVideo = (video, options) => {\n return controlMultiplier(scalingOptionsFromVideo(video, options));\n};\n\nexport const controlMultiplier = (options) => {\n if (options.controlScaling != 'auto') {\n return options.controlScaling;\n }\n\n const { videoWidth, videoHeight } = options;\n const zoomMultiplier = getZoomMultiplier(options);\n const largestDimension = Math.max(videoWidth, videoHeight);\n if (largestDimension > 960) {\n const percentOverThreshold = largestDimension / 960;\n const scaleFactor = percentOverThreshold * getDeviceMultiplier(options);\n return Math.min(maxMultiplierForVideo(options) * zoomMultiplier, scaleFactor * zoomMultiplier);\n }\n if (largestDimension < 640) {\n const percentUnderThreshold = largestDimension / 640;\n const scaleFactor = percentUnderThreshold * getDeviceMultiplier(options);\n return Math.max(minMultiplierForVideo(options) * zoomMultiplier, scaleFactor * zoomMultiplier);\n }\n return 1 * getDeviceMultiplier(options);\n};\n\n// abstracted so this can easily be changed if we wanted.\nexport const menuMultiplier = (options) => {\n return Math.max(0.75, controlMultiplier(options));\n};\n\nexport const fitControl = (options) => {\n const { controlId, video, controlElem } = options;\n options = merge(\n {\n videoWidth: video.videoWidth(),\n videoHeight: video.videoHeight(),\n controlScaling: video.controlScaling(),\n isInFullscreen: video.inFullscreen(),\n },\n options,\n );\n const { width, height } = controlDimensions(options);\n elemStyle(controlElem, {\n height: `${height}px`,\n width: `${width}px`,\n });\n tapIcon(`${video.uuid}.${controlId}`, controlElem);\n return { width, height };\n};\n\n// Often the svg size changes don't visually change the vertical position of\n// the icon. \"tapping\" it by forcing it to reevaluate the stack is one way to\n// fix that.\nexport const tapIcon = (timeoutPrefix, controlElem) => {\n const svgs = controlElem.getElementsByTagName('svg');\n for (let i = 0; i < svgs.length; i++) {\n ((svg) => {\n doTimeout(\n `${timeoutPrefix}.tap_icon`,\n () => {\n elemStyle(svg, { position: 'relative' });\n doTimeout(\n '#{timeoutPrefix}.tap_icon',\n () => {\n elemStyle(svg, { position: '' });\n },\n 30,\n );\n },\n 30,\n );\n })(svgs[i]);\n }\n};\n\nexport const parseMetaViewport = () => {\n const metaTag = document.querySelector('meta[name=viewport]');\n const content = metaTag && metaTag.getAttribute('content');\n const result = {};\n if (content) {\n const pairs = content.split(/[\\s,]+/);\n pairs.forEach((pair) => {\n const keyAndVal = pair.split('=');\n if (keyAndVal.length === 2) {\n result[keyAndVal[0]] = cast(keyAndVal[1]);\n }\n });\n }\n return result;\n};\n\nconst normalScaleWidthRange = (media) => {\n const onMobile = detect.iphone || detect.ipad || detect.android;\n\n if (!onMobile) {\n return [640, 960];\n }\n\n if (media?.isAudio()) {\n return [500, 960];\n }\n\n const viewport = parseMetaViewport();\n\n let screenWidth;\n if (viewport.width) {\n // Initial render being controled by <meta name='viewport' content='...'/>\n if (typeof viewport.width === 'number') {\n screenWidth = 0 + viewport.width;\n } else {\n screenWidth = screen.width || window.innerWidth;\n }\n\n // This doesn't capture any scaling the user does after the initial\n // render, but the page designer would expect the video to render at the\n // scale they set.\n const scale = Math.max(\n viewport['minimum-scale'] || 0,\n Math.min(viewport['maximum-scale'] || 10, viewport['initial-scale'] || 1),\n );\n if (scale < 1) {\n screenWidth /= scale;\n }\n } else {\n // Initial render will use the width of the document to determine its\n // size, then zoom out to show the whole page.\n screenWidth = window.innerWidth;\n }\n\n return [screenWidth, (screenWidth * 2) / 3];\n};\n\nconst normalScaleHeightRange = (media) => {\n const onMobile = detect.iphone || detect.ipad || detect.android;\n\n if (!onMobile) {\n return [340, 860];\n }\n\n if (media?.isAudio()) {\n return [500, 960];\n }\n\n const viewport = parseMetaViewport();\n\n let screenHeight;\n if (viewport.height) {\n // Initial render being controled by <meta name='viewport' content='...'/>\n if (typeof viewport.height === 'number') {\n screenHeight = 0 + viewport.height;\n } else {\n screenHeight = screen.height || window.innerHeight;\n }\n\n // This doesn't capture any scaling the user does after the initial\n // render, but the page designer would expect the video to render at the\n // scale they set.\n const scale = Math.max(\n viewport['minimum-scale'] || 0,\n Math.min(viewport['maximum-scale'] || 10, viewport['initial-scale'] || 1),\n );\n if (scale < 1) {\n screenHeight /= scale;\n }\n } else {\n // Initial render will use the width of the document to determine its\n // size, then zoom out to show the whole page.\n screenHeight = window.innerWidth;\n }\n\n return [screenHeight, (screenHeight * 2) / 1.3];\n};\n\nexport const controlMultiplierBasedOnVideo = (video, normalRange) => {\n const vidWidth = video.videoWidth();\n const vidHeight = video.videoHeight();\n const aspect = vidWidth / vidHeight;\n\n // vertical orientation\n if (aspect < 1) {\n const [lowerCutoff, upperCutoff] = normalScaleHeightRange(video);\n\n if (vidHeight <= lowerCutoff) {\n return vidHeight / lowerCutoff;\n }\n if (vidHeight > upperCutoff) {\n return vidHeight / upperCutoff;\n }\n }\n // horizontal orientation\n else {\n const [lowerCutoff, upperCutoff] = normalRange || normalScaleWidthRange(video);\n\n if (vidWidth <= lowerCutoff) {\n return vidWidth / lowerCutoff;\n }\n if (vidWidth > upperCutoff) {\n return vidWidth / upperCutoff;\n }\n }\n\n // default when the video is within normal range\n return 1;\n};\n\n// A more general version of controlMultiplierBasedOnVideo that doesn't require\n// a video object.\nexport const controlMultiplierEstimatedByWidth = (width, normalRange) => {\n const [lowerCutoff, upperCutoff] = normalRange || normalScaleWidthRange();\n if (width <= lowerCutoff) {\n return width / lowerCutoff;\n }\n if (width > upperCutoff) {\n return width / upperCutoff;\n }\n return 1;\n};\n","import { isNil } from '@wistia/type-guards';\nimport { Gradient, GradientMaybeWithColorsAsNumbers, isGradient } from '../types/gradient.ts';\nimport { DEFAULT_PLAYER_COLOR } from './color-utils.ts';\nimport { addHashToHex, Color } from './color.js';\nimport { cast, clone } from './obj.js';\n\nconst DEFAULT_ALPHA = 0.9;\nconst GRADIENT_COLOR_INDEX = 0;\nconst GRADIENT_PERCENTAGE_INDEX = 1;\n\nexport const DEFAULT_GRADIENT: Gradient = {\n colors: [\n [DEFAULT_PLAYER_COLOR, 0],\n ['#6A84FF', 1],\n ],\n on: true,\n};\n\nexport const hexToRGBA = (hex: string, alpha = DEFAULT_ALPHA): string => {\n const color = new Color(hex);\n\n // the \"as Color\" here is because the implicit types are not quite right... because we're passing a value to the\n // alpha function and using it as a setter it returns the new color as a Color object, not a number or undefined\n // (which happens if you're using the function as a getter)\n const colorWithAlpha = color.alpha(alpha) as Color;\n\n return colorWithAlpha.toRgba();\n};\n\nconst decimalToPercentage = (decimal: number): number => decimal * 100;\n\nexport const getCssGradient = (gradient: Gradient, alpha = DEFAULT_ALPHA): string | null => {\n if (gradient.colors.length === 0) {\n return null;\n }\n\n const areAllColorsValid = gradient.colors.every((gradientColor): boolean =>\n Boolean(\n gradientColor[GRADIENT_COLOR_INDEX] &&\n gradientColor[GRADIENT_PERCENTAGE_INDEX] >= 0 &&\n gradientColor[GRADIENT_PERCENTAGE_INDEX] <= 1,\n ),\n );\n\n if (!areAllColorsValid) {\n return null;\n }\n\n return `linear-gradient(90deg, ${gradient.colors.map((gradientColor) => `${hexToRGBA(gradientColor[0], alpha)} ${decimalToPercentage(gradientColor[1])}%`).join(', ')})`;\n};\n\nexport const getGradientColor = (gradient: Gradient, index = 0): string | null => {\n if (!isGradient(gradient)) {\n return null;\n }\n\n return gradient.colors[index][GRADIENT_COLOR_INDEX];\n};\n\nexport const cleanGradient = (gradient: unknown): Gradient => {\n const casted = cast(clone(gradient)) as GradientMaybeWithColorsAsNumbers;\n\n const result: Gradient = {\n colors: casted.colors.map(([color, percentage]) => [color.toString(), percentage]),\n on: casted.on,\n };\n\n return result;\n};\n\nexport const getPlayerColorOrFirstGradientStop = (\n playerColor?: string,\n gradient?: Gradient,\n): string => {\n if (!isGradient(gradient) || !gradient.on) {\n return playerColor ?? DEFAULT_PLAYER_COLOR;\n }\n\n const firstGradientColorStop = getGradientColor(gradient);\n\n // This should not be possible because we verified that the gradient passes isGradient above.\n // However, since getGradietnColor's return type is string | null,\n // we need to add this logic to appease TS.\n if (isNil(firstGradientColorStop)) {\n return playerColor ?? DEFAULT_PLAYER_COLOR;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return addHashToHex(firstGradientColorStop) ?? DEFAULT_PLAYER_COLOR;\n};\n","const getAlpha2Code = (iso6392Code: string) => {\n return iso6392Code.split('-')[0];\n};\n\nconst getStack = () => {\n const err = new Error();\n return err.stack?.split('\\n').slice(2).join('\\n');\n};\n\n/**\n * Finds the index of the preferred language from a list of available languages.\n *\n * This function helps select the best matching language based on user preferences and browser settings.\n * It's designed to work with arrays of ISO 639-2 language codes, optionally with region codes (e.g. 'en' or 'en-US'),\n * but can also be used for matching alpha3 ietf language tags, e.g. \"eng\".\n *\n * @param availableLanguages - Array of language codes that are available to choose from\n * @param preferredLanguages - Array of language codes to try matching\n * @returns The index of the best matching language in the availableLanguages array, or -1 if no languages are available\n *\n * @example\n * const captions = [\n * { language: 'en', text: 'Hello' },\n * { language: 'es', text: 'Hola' }\n * ];\n * const index = getPreferredAvailableLanguageIndex(\n * captions.map(c => c.language),\n * ['es']\n * );\n * const preferredCaption = captions[index];\n */\nexport const getPreferredAvailableLanguageIndex = (\n availableLanguages: string[],\n preferredLanguages: string[],\n): number => {\n // Many of the call sites are not typescript, so are susceptible to pass in\n // non-string values. We don't want to break in that scenario, but we do want\n // to log the issue so we can fix it.\n if ((availableLanguages as unknown[]).some((lang) => typeof lang !== 'string')) {\n // eslint-disable-next-line no-console\n console.error('availableLanguages has non-string values', availableLanguages, getStack());\n // eslint-disable-next-line no-param-reassign\n availableLanguages = availableLanguages.filter((lang) => typeof lang === 'string');\n }\n if ((preferredLanguages as unknown[]).some((lang) => typeof lang !== 'string')) {\n // eslint-disable-next-line no-console\n console.error('preferredLanguages has non-string values', preferredLanguages, getStack());\n // eslint-disable-next-line no-param-reassign\n preferredLanguages = preferredLanguages.filter((lang) => typeof lang === 'string');\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const preferredLanguage of preferredLanguages) {\n // Try exact matches first\n if (availableLanguages.includes(preferredLanguage)) {\n return availableLanguages.indexOf(preferredLanguage);\n }\n\n // Try region matches\n const preferredAlpha2 = getAlpha2Code(preferredLanguage);\n const hasRegionMatch = availableLanguages.some(\n (lang) => getAlpha2Code(lang) === preferredAlpha2,\n );\n\n if (hasRegionMatch) {\n return availableLanguages.findIndex((lang) => getAlpha2Code(lang) === preferredAlpha2);\n }\n }\n\n return -1;\n};\n","import { eV1HostWithPort } from 'utilities/hosts.js';\nimport { root } from 'utilities/root.js';\n\nexport const bestImage = (images, opts = {}) => {\n const _sortedImages = sortedImages(images);\n\n if (_sortedImages.length === 0) {\n // If the still failed to process, we might find ourselves going down\n // this path.\n return blankImage(opts.videoWith, opts.videoHeight);\n }\n\n // When this first loads it's possible that @img will have a width of -1\n // until fit() fully takes hold. This could probably be fixed a better\n // way, but this code is here to ensure that we don't return a bogus\n // bestImage() if that's the case.\n const currentWidth = opts.videoWidth;\n\n // For sharper screens, let's load up larger images so the thumbnail\n // looks hella sharp\n const desiredWidth = (root.devicePixelRatio || 1) * currentWidth;\n\n if (desiredWidth <= _sortedImages[0].width) {\n return _sortedImages[0];\n }\n\n for (let i = 0; i < _sortedImages.length; i++) {\n const image = _sortedImages[i];\n if (image.width >= desiredWidth) {\n return image;\n }\n }\n\n return _sortedImages[_sortedImages.length - 1];\n};\n\nexport const blankImage = (videoWidth, videoHeight) => {\n return {\n height: videoHeight,\n url: `https://${eV1HostWithPort()}/assets/images/blank.gif`,\n width: videoWidth,\n };\n};\n\nexport const sortedImages = (images) => {\n return images.map((image) => {\n image.aspect = image.width / image.height;\n return image;\n });\n};\n","import { h, JSX } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { addInlineCss } from '../../../../../../utilities/elem.js';\n\nexport const BigPlayButtonLoadingAnim = (): JSX.Element => {\n const svgEl = useRef(null);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n addInlineCss(\n svgEl.current,\n `\n @keyframes w-loading-pulse {\n from {\n stroke-dashoffset: 55;\n }\n to {\n stroke-dashoffset: -175;\n }\n }\n .w-big-play-button-loading-anim {\n stroke-dasharray: 50 260;\n stroke-dashoffset: 55;\n animation: w-loading-pulse 1.2s infinite cubic-bezier(0.65, 0, 0, 1);\n }\n `,\n );\n\n setIsAnimating(true);\n }, []);\n\n return (\n <line\n ref={svgEl}\n class=\"w-big-play-button-loading-anim\"\n x1=\"0\"\n y1=\"78\"\n x2=\"125\"\n y2=\"78\"\n style={{\n stroke: 'currentcolor',\n strokeWidth: 4,\n strokeLinecap: 'round',\n opacity: isAnimating ? 1 : 0,\n }}\n />\n );\n};\n","import { merge, clone } from 'utilities/obj.js';\nimport { dynamicImport } from 'utilities/dynamicImport.ts';\nimport { Wistia } from '../../wistia_namespace.ts';\n\nconst languages = (Wistia.languages = Wistia.languages || {});\nconst translations = (Wistia.translations = Wistia.translations || {});\n\n// set translationPromises if doesn't exist\nif (!Wistia._translationPromises) {\n Wistia._translationPromises = {};\n}\n\nexport const supportedLanguages = [\n 'ar',\n 'de',\n 'es',\n 'en-US',\n 'fr',\n 'it',\n 'ja',\n 'ko',\n 'pt',\n 'ru',\n 'zh-CN',\n];\n\nconst ietfLanguageTagToCode = {\n ara: 'ar',\n ger: 'de',\n spa: 'es',\n eng: 'en-US',\n fre: 'fr',\n ita: 'it',\n jpn: 'ja',\n kor: 'ko',\n por: 'pt',\n rus: 'ru',\n chi: 'zh-CN',\n};\n\nconst normalizeLanguageCode = (code) => {\n if (code == null) {\n // whoops, passed no code, don't fail.\n return 'en-US';\n }\n\n // eng -> en-US, etc.\n code = ietfLanguageTagToCode[code] || code;\n\n // en-UK -> en, es-419 -> es, etc.\n if (!supportedLanguages.includes(code)) {\n const match = matchingLanguages(() => [code])[0];\n if (match) {\n code = match;\n }\n }\n\n // we have a translation for en-US, but not en\n if (code === 'en' || /^en-/.test(code)) {\n code = 'en-US';\n }\n\n // we have a translation for zh-CN, but not zh\n if (code === 'zh' || /^zh-/.test(code)) {\n code = 'zh-CN';\n }\n\n return code;\n};\n\nconst defineLanguage = (code, text, translations) => {\n languages[code] = { code, text: decodeEntities(text) };\n if (translations) {\n defineTranslations(code, translations);\n }\n};\n\nexport const getLanguage = (code) => {\n return languages[normalizeLanguageCode(code)];\n};\n\nexport const isSupportedPlayerLanguage = (code) => {\n return supportedLanguages.includes(normalizeLanguageCode(code));\n};\n\nexport const defineTranslations = (code, keyValPairs) => {\n if (languages[code] == null) {\n throw new Error(`Must define a language with code ${code} before defining its translations.`);\n }\n\n const translation = translations[code];\n if (translation) {\n merge(translation, keyValPairs);\n } else {\n translations[code] = clone(keyValPairs);\n }\n};\n\nconst withFallbackText = (text) => {\n if (text == null) {\n return '?';\n }\n return text;\n};\n\nlet dummyTextArea;\nconst cachedDecodings = (Wistia.cachedDecodings = Wistia.cachedDecodings || {});\nconst decodeEntities = (text) => {\n if (!dummyTextArea) {\n // Create this lazily to avoid race conditions while document is rendering.\n dummyTextArea = document.createElement('textarea');\n }\n if (cachedDecodings[text] != null) {\n // If we've decoded this before, use that value; DOM operations aren't\n // fast.\n return cachedDecodings[text];\n }\n dummyTextArea.innerHTML = text;\n cachedDecodings[text] = dummyTextArea.value;\n return dummyTextArea.value;\n};\n\nexport const getTranslation = (code, key) => {\n code = normalizeLanguageCode(code);\n\n let text;\n if (translations[code] && translations[code][key]) {\n text = translations[code][key];\n } else {\n text = translations['en-US'][key];\n }\n return decodeEntities(withFallbackText(text));\n};\n\n/**\n * Gets translations for the specified language code and keys\n * @param {string} code - The language code to get translations for\n * @param {string[]} [keys=[]] - Array of translation keys to retrieve\n * @returns {Record<string, string>} Object containing the translations with keys as properties\n */\nexport const getTranslations = (code, keys = []) => {\n const translations = {};\n keys.forEach((key) => {\n translations[key] = getTranslation(code, key);\n });\n return translations;\n};\n\nexport const getLanguagePreference = () => {\n if (navigator.languages || navigator.language) {\n Wistia.languagePreference = navigator.languages || [navigator.language];\n } else {\n // in old browsers that don't support navigator.language(s), like IE 9/10,\n // just go with English.\n Wistia.languagePreference = ['en-US'];\n }\n\n return Wistia.languagePreference;\n};\n\nlet defaultPromise = Promise.resolve({\n code: 'en-US',\n translations: translations['en-US'],\n});\n\nexport const loadAndDefineTranslation = (code) => {\n code = normalizeLanguageCode(code);\n\n if (!supportedLanguages.includes(code)) {\n // we don't support this language; just use en-US\n return defaultPromise;\n }\n\n if (Wistia._translationPromises[code]) {\n return Wistia._translationPromises[code];\n }\n\n if (code === 'en-US') {\n return defaultPromise;\n }\n\n const result = new Promise((resolve, reject) => {\n dynamicImport([`assets/external/translations/${code}.js`])\n .then((moduleClass) => {\n const { languageCode, languageLabel, translations } = moduleClass;\n defineLanguage(languageCode, languageLabel, translations);\n resolve({\n code,\n translations: translations[code],\n });\n })\n .catch(reject);\n });\n\n Wistia._translationPromises[code] = result;\n return result;\n};\n\nexport const matchingLanguages = (languagePrefs = getLanguagePreference) => {\n return languagePrefs().reduce((matches, langCode) => {\n const isFullMatch = supportedLanguages.indexOf(langCode) !== -1;\n\n // strip the region off a language, e.g. `es-ES` -> `es`\n const partialLangCode = langCode.split('-')[0];\n\n // take a partial match if the language hits, just not the region, e.g. `es-ES` -> `es`\n const isPartialMatch = supportedLanguages.indexOf(partialLangCode) !== -1;\n\n if (isFullMatch) {\n matches.push(langCode);\n } else if (isPartialMatch) {\n matches.push(partialLangCode);\n }\n\n return matches;\n }, []);\n};\n\nexport const getDefaultTranslation = () => {\n let matchingLanguage = matchingLanguages()[0];\n\n // if there is not match, or if it is 'en', go to our\n // default of 'en-US'\n if (!matchingLanguage || matchingLanguage === 'en') {\n matchingLanguage = 'en-US';\n }\n\n if (translations[matchingLanguage]) {\n return Promise.resolve({\n code: matchingLanguage,\n translations: translations[matchingLanguage],\n });\n }\n\n return loadAndDefineTranslation(matchingLanguage);\n};\n\n// Most translations are defined where they are used, however these translations are\n// rather generic and used in multiple places. They are defined here so we don't\n// duplicate multiple translation keys.\ndefineLanguage('en-US', 'English');\ndefineTranslations('en-US', {\n BACKGROUND_FOCUS_MORE_OPTIONS_HINT: 'Press O for more options',\n\n ELLIPSIS_LESS: 'Show fewer buttons',\n ELLIPSIS_MORE: 'Show more buttons',\n\n PAUSE: 'Pause',\n PLAY: 'Play',\n PLAY_BUTTON_LIVE_NOT_STARTED: 'Livestream has not started',\n PLAY_BUTTON_TITLE_WHEN_NOT_PLAYING: 'Play Video',\n PLAY_BUTTON_TITLE_WHEN_PLAYING: 'Pause Video',\n\n REWATCH: 'Rewatch',\n\n SKIP: 'Skip',\n});\n","import { globalTrigger } from 'utilities/globalBindAndTrigger.js';\nimport { getWistiaLocalStorage, updateWistiaLocalStorage } from 'utilities/wistiaLocalStorage.js';\nimport { getAllApiHandles } from 'utilities/getApiHandles.ts';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport const migrateLegacyVisitorTracking = () => {\n const legacyIsEnabled = getWistiaLocalStorage().visitorTrackingEnabled;\n if (legacyIsEnabled != null) {\n // Migrate old structure to new structure\n //\n // old:\n // localStorage\n // visitorTrackingEnabled: boolean\n //\n // new:\n // localStorage\n // visitorTracking: {\n // isEnabled: boolean,\n // updatedAt: timestamp,\n // }\n //\n updateWistiaLocalStorage((ls) => delete ls.visitorTrackingEnabled);\n Wistia._visitorTracking = {};\n Wistia._visitorTracking[Wistia._visitorTrackingDomain] = {\n isEnabled: legacyIsEnabled,\n updatedAt: Date.now(),\n };\n updateWistiaLocalStorage((ls) => (ls.visitorTracking = Wistia._visitorTracking));\n }\n};\n\nif (!Wistia._visitorTrackingDomain) {\n Wistia._visitorTrackingDomain = location.hostname || '';\n}\n\n// Initialize from localStorage, or with an empty hash if not set.\nif (!Wistia._visitorTracking) {\n migrateLegacyVisitorTracking();\n Wistia._visitorTracking = getWistiaLocalStorage().visitorTracking || {};\n}\n\nexport const consent = (val) => {\n if (val == null) {\n return isVisitorTrackingEnabled();\n }\n return setVisitorTrackingEnabled(val);\n};\nWistia.consent = consent;\n\nexport const setVisitorTrackingEnabled = (val, domain = Wistia._visitorTrackingDomain) => {\n if (val === 'default') {\n delete Wistia._visitorTracking[domain];\n } else {\n Wistia._visitorTracking[domain] = {\n isEnabled: `${val}` === 'true',\n updatedAt: Date.now(),\n };\n }\n updateWistiaLocalStorage((obj) => (obj.visitorTracking = Wistia._visitorTracking));\n globalTrigger('visitortrackingchange', val);\n\n const allWistiaPlayers = [...document.getElementsByTagName('wistia-player')];\n allWistiaPlayers.forEach((player) => {\n player.dispatchEvent(\n new CustomEvent('visitor-tracking-change', { detail: { isTrackingEnabled: val } }),\n );\n });\n};\n\nconst isCurrentDomainOrAnyParentDomainsEnabled = () => {\n if (Wistia._visitorTrackingDomain) {\n const domainParts = Wistia._visitorTrackingDomain.split('.');\n while (domainParts.length > 0) {\n const entry = Wistia._visitorTracking[domainParts.join('.')];\n const enabledVal = entry && entry.isEnabled;\n if (enabledVal != null) {\n return enabledVal;\n }\n domainParts.shift();\n }\n }\n\n // returns undefined instead of false as a result so that we can have\n // different behavior if it has not been set.\n};\n\nexport const isVisitorTrackingEnabled = () => {\n if (typeof Wistia._visitorTracking === 'boolean') {\n // Legacy. We previously persisted this data as a boolean\n return Wistia._visitorTracking;\n }\n\n if (Wistia._visitorTracking) {\n // _visitorTracking has been set. Let's check the value for the current\n // domain. And if that's set, we return.\n const isEnabledVal = isCurrentDomainOrAnyParentDomainsEnabled();\n if (isEnabledVal != null) {\n return Boolean(isEnabledVal);\n }\n }\n\n const apis = getAllApiHandles();\n\n if (Wistia.channel && Wistia.channel.all) {\n try {\n apis.push(...Wistia.channel.all());\n } catch (e) {\n // If Wistia.api.all() is called before Wistia._data is setup, this will throw\n // an exception. That's okay--it just means there are effectively no\n // channel embeds yet.\n }\n }\n\n // By default, if any videos have privacy mode enabled, then we disable\n // visitor tracking for all videos on the page. In practice, we would only\n // see this occur if videos from multiple accounts--with different privacy\n // mode settings--appear on the same page.\n const isPrivacyModeEnabled =\n apis.some((api) => {\n const data = api._mediaData || api._galleryData || {};\n return data.privacyMode === true;\n }) || hasRegisteredPrivacyModeSource();\n\n return !isPrivacyModeEnabled;\n};\n\n// Embeds that aren't API handles or channels -- form embeds, and any future\n// non-player surface -- register their account's privacy mode here.\n//\n// Without this, the scan above only sees media handles, so a page with a form\n// embed and no video reports privacy mode as OFF no matter what the account is\n// set to, and consent() returns true for a privacy-mode account.\nexport const registerPrivacyModeSource = (key, privacyMode) => {\n Wistia._privacyModeSources ??= {};\n Wistia._privacyModeSources[key] = privacyMode === true;\n};\n\nexport const unregisterPrivacyModeSource = (key) => {\n if (Wistia._privacyModeSources) {\n delete Wistia._privacyModeSources[key];\n }\n};\n\nconst hasRegisteredPrivacyModeSource = () =>\n Object.values(Wistia._privacyModeSources || {}).some(Boolean);\n","export const camelCaseToKebabCase = (camelCaseString: string): string => {\n return camelCaseString.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (letter: string, idx?: number) => {\n return (idx !== undefined ? '-' : '') + letter.toLowerCase();\n });\n};\n\nexport const kebabCaseToCamelCase = (kebabCaseString: string): string => {\n return kebabCaseString.replace(/-./g, (word) => word[1].toUpperCase());\n};\n","import {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n updateLocalStorage,\n} from 'utilities/namespacedLocalStorage.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\n// This localStorage utility can be used in situations where we don't need to\n// do very frequent updates or reads. If frequent updates or reads are\n// expected, you should use namespacedLocalStorage.js with its own namespace,\n// since the entire namespace is deserialized and serialized on read and write\n// respectively.\n\nconst WISTIA_NAMESPACE = 'wistia';\n\nexport const getWistiaLocalStorage = () => {\n return getLocalStorage(WISTIA_NAMESPACE);\n};\n\nexport const removeWistiaLocalStorage = () => {\n Wistia._localStorage = removeLocalStorage(WISTIA_NAMESPACE);\n return Wistia._localStorage;\n};\n\nexport const setWistiaLocalStorage = (obj) => {\n Wistia._localStorage = setLocalStorage(WISTIA_NAMESPACE, obj);\n return Wistia._localStorage;\n};\n\nexport const updateWistiaLocalStorage = (fn) => {\n Wistia._localStorage = updateLocalStorage(WISTIA_NAMESPACE, fn);\n return Wistia._localStorage;\n};\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p,v,y,d={},w=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function m(n,l){for(var u in l)n[u]=l[u];return n}function b(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function k(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return x(l,e,i,r,null)}function x(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function M(){return{current:null}}function S(n){return n.children}function C(n,l){this.props=n,this.context=l}function $(n,l){if(null==l)return n.__?$(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?$(n):null}function I(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=m({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),q(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?$(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,D(i,o,r),u.__e=u.__=null,o.__e!=t&&P(o)}}function P(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),P(n)}function A(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!H.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(H)}function H(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,I(n)}finally{i.length=H.__r=0}}function L(n,l,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,g,m=t&&t.__k||w,b=l.length;for(f=T(u,l,m,f,b),a=0;a<b;a++)null!=(p=u.__k[a])&&(h=-1!=p.__i&&m[p.__i]||d,p.__i=a,_=q(n,p,h,i,r,o,e,f,c,s),v=p.__e,p.ref&&h.ref!=p.ref&&(h.ref&&J(h.ref,null,p),s.push(p.ref,p.__c||v,p)),null==y&&null!=v&&(y=v),(g=!!(4&p.__u))||h.__k===p.__k?(f=j(p,f,n,g),g&&h.__e&&(h.__e=null)):\"function\"==typeof p.type&&void 0!==_?f=_:v&&(f=v.nextSibling),p.__u&=-7);return u.__e=y,f}function T(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=x(null,o,null,null,null):g(o)?o=n.__k[r]=x(S,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=O(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=$(e)),K(e,e));return t}function j(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=j(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=$(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function F(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(g(n)?n.some(function(n){F(n,l)}):l.push(n)),l}function O(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function z(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||_.test(l)?u:u+\"px\"}function N(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||z(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||z(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(a,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u[s]=t[s]:(u[s]=h,n.addEventListener(l,r?v:p,r)):n.removeEventListener(l,r?v:p,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function V(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u[c])u[c]=h++;else if(u[c]<t[s])return;return t(l.event?l.event(u):u)}}}function q(n,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,d,_,k,x,M,$,I,P,A,H,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(k=u.props,x=T.prototype&&T.prototype.render,M=(a=T.contextType)&&i[a.__c],$=a?M?M.props.value:a.__:i,t.__c?_=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(k,$):(u.__c=h=new C(k,$),h.constructor=T,h.render=Q),M&&M.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=m({},h.__s)),m(h.__s,T.getDerivedStateFromProps(k,h.__s))),v=h.props,y=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(x&&null==T.getDerivedStateFromProps&&k!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(k,$),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(k,h.__s,$)){u.__v!=t.__v&&(h.props=k,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),w.push.apply(h.__h,h._sb),h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(k,h.__s,$),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,d)})}if(h.context=$,h.props=k,h.__P=n,h.__e=!1,I=l.__r,P=0,x)h.state=h.__s,h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),w.push.apply(h.__h,h._sb),h._sb=[];else do{h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++P<25);h.state=h.__s,null!=h.getChildContext&&(i=m(m({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(d=h.getSnapshotBeforeUpdate(v,y)),A=null!=a&&a.type===S&&null==a.key?E(a.props.children):a,f=L(n,g(A)?A:[A],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),_&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(H=o.length;H--;)b(o[H]);B(u)}else u.__e=t.__e,u.__k=t.__k,n.then||B(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=G(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function B(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(B))}function D(n,u,t){for(var i=0;i<t.length;i++)J(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function E(n){return\"object\"!=typeof n||null==n||n.__b>0?n:g(n)?n.map(E):m({},n)}function G(u,t,i,r,o,e,f,c,s){var a,h,p,v,y,w,_,m=i.props||d,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((y=e[a])&&\"setAttribute\"in y==!!x&&(x?y.localName==x:3==y.nodeType)){u=y,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)m===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(m={},a=0;a<u.attributes.length;a++)m[(y=u.attributes[a]).name]=y.value;for(a in m)y=m[a],\"dangerouslySetInnerHTML\"==a?p=y:\"children\"==a||a in k||\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k||N(u,a,null,y,o);for(a in k)y=k[a],\"children\"==a?v=y:\"dangerouslySetInnerHTML\"==a?h=y:\"value\"==a?w=y:\"checked\"==a?_=y:c&&\"function\"!=typeof y||m[a]===y||N(u,a,y,m[a],o);if(h)c||p&&(h.__html==p.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(p&&(u.innerHTML=\"\"),L(\"template\"==t.type?u.content:u,g(v)?v:[v],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&$(i,0),c,s),null!=e)for(a=e.length;a--;)b(e[a]);c||(a=\"value\",\"progress\"==x&&null==w?u.removeAttribute(\"value\"):null!=w&&(w!==u[a]||\"progress\"==x&&!w||\"option\"==x&&w!=m[a])&&N(u,a,w,m[a],o),a=\"checked\",null!=_&&_!=u[a]&&N(u,a,_,m[a],o))}return u}function J(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function K(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||J(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&K(i[r],u,t||\"function\"!=typeof n.type);t||b(n.__e),n.__c=n.__=n.__e=void 0}function Q(n,l,u){return this.constructor(n,u)}function R(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],q(t,u=(!r&&i||t).__k=k(S,null,[u]),o||d,d,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),D(e,u,f)}function U(n,l){R(n,l,U)}function W(l,u,t){var i,r,o,e,f=m({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),x(l.type,f,i||l.key,r||l.ref,null)}function X(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,A(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+y++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=w.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},C.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=m({},this.state),\"function\"==typeof n&&(n=n(m({},u),this.props)),n&&m(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),A(this))},C.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),A(this))},C.prototype.render=S,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},H.__r=0,f=Math.random().toString(8),c=\"__d\"+f,s=\"__a\"+f,a=/(PointerCapture)$|Capture$/i,h=0,p=V(!1),v=V(!0),y=0;export{C as Component,S as Fragment,W as cloneElement,X as createContext,k as createElement,M as createRef,k as h,U as hydrate,t as isValidElement,l as options,R as render,F as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","/**\n * Infer the url of the page best we can\n * @returns {string} the url of the page\n */\nexport const inferPageUrl = (): string => {\n if (window.FreshUrl?.originalUrl != null) {\n return window.FreshUrl.originalUrl;\n }\n if (window.top === window.self) {\n return window.location.href || '';\n }\n return document.referrer || '';\n};\n","// Logic adapted from this Javascript Color class:\n// https://github.com/moagrius/Color/blob/master/Color.js\n//\n// HSL to RGB logic (broken in Color class) taken from:\n// http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n\nimport { isNil } from '@wistia/type-guards';\nimport { colorContrastRatiosByShape, getContrast, rgbToHsl } from './color-utils.ts';\n\n// LRGB color blending taken from chroma-js:\n// https://github.com/gka/chroma.js/blob/main/src/interpolator/lrgb.js\n\n// ## Regular expressions ##\nconst rHex = /^#?([0-9a-f]{3,4}|[0-9a-f]{6,8})$/i;\nconst rRgb =\n /^rgba?\\((\\d{1,3}(?:\\.\\d+)?%?),\\s*(\\d{1,3}(?:\\.\\d+)?%?),\\s*(\\d{1,3}(?:\\.\\d+)?%?)(?:,\\s*([01]?\\.?\\d*))?\\)$/;\nconst rPercent = /^\\d+(\\.\\d+)*%$/;\nconst hexBit = /([0-9a-f])/gi;\n\nconst p2v = (p) => {\n if (rPercent.test(p)) {\n return parseFloat(p) * 2.55;\n }\n return p;\n};\n\nconst hue2rgb = (a, b, c) => {\n if (c < 0) {\n c += 1;\n }\n if (c > 1) {\n c -= 1;\n }\n if (c < 1 / 6) {\n return a + (b - a) * 6 * c;\n }\n if (c < 1 / 2) {\n return b;\n }\n if (c < 2 / 3) {\n return a + (b - a) * (2 / 3 - c) * 6;\n }\n return a;\n};\n\nexport class Color {\n // ## Constructor ##\n //\n // Construct our own color representation either from an\n // existing color, or a color string.\n constructor(input) {\n if (input instanceof Color) {\n this.r = input.r;\n this.g = input.g;\n this.b = input.b;\n this.a = input.a;\n } else if (input) {\n this.parse(input);\n } else {\n this.r = this.g = this.b = 0;\n this.a = 1;\n }\n }\n\n // ## Parse ##\n //\n // Accept #RRGGBB, #RRGGBBAA, rgba(R,G,B), or rgba(R,G,B,A) formats\n // as well as [r, g, b, a].\n // The rgb formats also allows percents.\n // Falls back to #2949E5 if parsing fails.\n parse(input) {\n let parsed = false;\n\n if (Array.isArray(input)) {\n this.r = input[0];\n this.g = input[1];\n this.b = input[2];\n this.a = input[3] ?? 1;\n parsed = true;\n } else {\n // Sanitize: remove spaces and other whitespace characters\n const sanitized = String(input).replace(/\\s+/g, '');\n\n if (rHex.test(sanitized)) {\n let stripped = sanitized.replace(/^#/, '');\n if (stripped.length === 3 || stripped.length === 4) {\n stripped = stripped.replace(hexBit, '$1$1');\n }\n this.r = parseInt(stripped.substr(0, 2), 16);\n this.g = parseInt(stripped.substr(2, 2), 16);\n this.b = parseInt(stripped.substr(4, 2), 16);\n if (stripped.length === 8) {\n this.a = parseInt(stripped.substr(6, 2), 16) / 255;\n } else {\n this.a = 1;\n }\n parsed = true;\n } else if (rRgb.test(sanitized)) {\n const parts = sanitized.match(rRgb);\n this.r = parseFloat(p2v(parts[1]));\n this.g = parseFloat(p2v(parts[2]));\n this.b = parseFloat(p2v(parts[3]));\n if (parts[4]) {\n this.a = parseFloat(parts[4]);\n } else {\n this.a = 1;\n }\n parsed = true;\n }\n }\n\n // Validate parsed values and fall back to safe default (#2949E5) if invalid\n if (\n !parsed ||\n isNaN(this.r) ||\n isNaN(this.g) ||\n isNaN(this.b) ||\n isNaN(this.a) ||\n this.r < 0 ||\n this.g < 0 ||\n this.b < 0 ||\n this.a < 0\n ) {\n this.r = 41;\n this.g = 73;\n this.b = 229;\n this.a = 1;\n console.error(\n `An invalid color was provided, ${input.toString()}, using default color instead.`,\n );\n }\n\n return this;\n }\n\n clone() {\n return new Color(this);\n }\n\n // Compute internal HSL values based on internal RGB values.\n _hslFromRgb() {\n const { hue, saturation, lightness } = rgbToHsl([this.r, this.g, this.b]);\n\n this._h = hue;\n this._s = saturation;\n this._l = lightness;\n\n return this;\n }\n\n // Compute internal RGB values based on internal HSL values.\n _rgbFromHsl() {\n const h = this._h / 360;\n const s = this._s / 100;\n const l = this._l / 100;\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n this.r = hue2rgb(p, q, h + 1 / 3) * 255;\n this.g = hue2rgb(p, q, h) * 255;\n this.b = hue2rgb(p, q, h - 1 / 3) * 255;\n\n return this;\n }\n\n // Do math to blend a channel with a different value. Alpha is\n // the strength of the blend.\n blendChannel(channel, value, alpha, shouldUseLrgb) {\n if (shouldUseLrgb) {\n this[channel] = Math.sqrt(this[channel] ** 2 * (1 - alpha) + value ** 2 * alpha);\n return this;\n }\n this[channel] = alpha * value + (1 - alpha) * this[channel];\n return this;\n }\n\n // Blend this color with another color by blending each RGB\n // channel individually.\n blend(color, alpha, shouldUseLrgb) {\n color = new Color(color);\n this.blendChannel('r', color.r, alpha, shouldUseLrgb);\n this.blendChannel('g', color.g, alpha, shouldUseLrgb);\n this.blendChannel('b', color.b, alpha, shouldUseLrgb);\n return this;\n }\n\n // background color can be a string or a Color\n getContrastRatio(backgroundColor) {\n return Number.parseFloat(\n getContrast(this.toHexWithHash(), new Color(backgroundColor).toHexWithHash()).toFixed(3),\n );\n }\n\n // background color can be a string or a Color\n // shape will be a key of colorContrastRatiosByShape\n hasAccessibleContrast(backgroundColor, shape) {\n return this.getContrastRatio(backgroundColor) >= colorContrastRatiosByShape[shape];\n }\n\n hue() {\n this._hslFromRgb();\n return this._h;\n }\n\n // Increase a channel by a fixed value, but within the [0,255] range.\n lightenChannel(channel, steps) {\n this[channel] += steps;\n if (this[channel] < 0) {\n this[channel] = 0;\n } else if (this[channel] > 255) {\n this[channel] = 255;\n }\n return this;\n }\n\n // Lighten this color by increasing each channel by a fixed value.\n lighten(steps) {\n if (this.looksLikePercent(steps)) {\n this.lightness(this.lightness() + parseFloat(steps));\n } else {\n this.lightenChannel('r', steps);\n this.lightenChannel('g', steps);\n this.lightenChannel('b', steps);\n }\n return this;\n }\n\n darken(steps) {\n if (typeof steps === 'string') {\n return this.lighten(`-${steps}`);\n }\n return this.lighten(-steps);\n }\n\n looksLikePercent(str) {\n return /^-?\\d+(\\.\\d+)?%$/.test(str);\n }\n\n // Set the lightness of this color by modifying the L value in\n // HSL, then recomputing the RGB.\n //\n // No args gets the current lightness.\n lightness(l) {\n this._hslFromRgb();\n if (l != null) {\n this._l = Math.max(0, Math.min(100, l));\n this._rgbFromHsl();\n return this;\n }\n return this._l;\n }\n\n // Set the saturation of this color by modifying the S value in\n // HSL, then recomputing the RGB.\n //\n // No args gets the current saturation.\n saturation(s) {\n this._hslFromRgb();\n if (s != null) {\n this._s = Math.max(0, Math.min(100, s));\n this._rgbFromHsl();\n return this;\n }\n return this._s;\n }\n\n setHue(hueValue) {\n this._hslFromRgb();\n if (hueValue != null) {\n this._h = Math.max(0, Math.min(360, hueValue));\n this._rgbFromHsl();\n return this;\n }\n }\n\n shade(percentage, shouldUseLrgb) {\n return this.blend('#000000', percentage, shouldUseLrgb);\n }\n\n // Gray level accounts for the strength of each individual channel.\n // This is more visually accurate than just averaging all the channels.\n grayLevel() {\n return (0.299 * this.r + 0.587 * this.g + 0.114 * this.b) / 255;\n }\n\n tint(percentage, shouldUseLrgb) {\n return this.blend('#ffffff', percentage, shouldUseLrgb);\n }\n\n // The white level is basically paleness, and is determined by the\n // minimum of all the RGB channels.\n whiteLevel() {\n return Math.min(Math.min(this.r, this.g), this.b);\n }\n\n getRelativeLuminance() {\n // For reference on calculating relative luminance: https://www.w3.org/WAI/GL/wiki/Relative_luminance\n const adjustChannel = (givenVal) => {\n const val = givenVal * 0.003921569; // 1 / 255 = 0.003921569; avoiding division\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return ((val + 0.055) / 1.055) ** 2.4;\n };\n\n const rAdjusted = adjustChannel(this.r);\n const gAdjusted = adjustChannel(this.g);\n const bAdjusted = adjustChannel(this.b);\n return Math.min(0.2126 * rAdjusted + 0.7152 * gAdjusted + 0.0722 * bAdjusted, 1);\n }\n\n isDark(shouldUseRL) {\n if (shouldUseRL) {\n return this.getRelativeLuminance() < 0.15;\n }\n return this.grayLevel() <= 0.4;\n }\n\n isLight(shouldUseRL) {\n if (shouldUseRL) {\n return this.getRelativeLuminance() >= 0.8;\n }\n return this.grayLevel() > 0.4;\n }\n\n isGrayscale() {\n return this.r === this.g && this.g === this.b;\n }\n\n distanceFrom(color) {\n return Math.sqrt((this.r - color.r) ** 2 + (this.g - color.g) ** 2 + (this.b - color.b) ** 2);\n }\n\n channelDominance() {\n return ['r', 'g', 'b'].sort((a, b) => this[b] - this[a]);\n }\n\n alpha(a) {\n if (a != null) {\n this.a = a;\n return this;\n }\n return this.a;\n }\n\n red(r) {\n if (r != null) {\n this.r = r;\n return this;\n }\n return this.r;\n }\n\n green(g) {\n if (g != null) {\n this.g = g;\n return this;\n }\n return this.g;\n }\n\n blue(b) {\n if (b != null) {\n this.b = b;\n return this;\n }\n return this.b;\n }\n\n toHex() {\n let r = Math.round(this.r).toString(16);\n let g = Math.round(this.g).toString(16);\n let b = Math.round(this.b).toString(16);\n if (r.length === 1) {\n r = `0${r}`;\n }\n if (g.length === 1) {\n g = `0${g}`;\n }\n if (b.length === 1) {\n b = `0${b}`;\n }\n return `${r}${g}${b}`;\n }\n\n toHexWithAlpha() {\n let a = Math.round(this.a * 255).toString(16);\n if (a.length === 1) {\n a = `0${a}`;\n }\n return `${a}${this.toHex()}`;\n }\n\n toHexWithHash() {\n return `#${this.toHex()}`;\n }\n\n toRgb() {\n return `rgb(${Math.round(this.r)},${Math.round(this.g)},${Math.round(this.b)})`;\n }\n\n toRgba() {\n return `rgba(${Math.round(this.r)},${Math.round(this.g)},${Math.round(this.b)},${this.a})`;\n }\n\n toRgbaOrHex() {\n return this.toRgba();\n }\n\n toPercent() {\n return `rgba(${(this.r / 255) * 100}%,${(this.g / 255) * 100}%,${(this.b / 255) * 100}%,${\n this.a\n })`;\n }\n\n // IE8 and below don't support RGBA, but we can use this gradient hack to\n // do the same thing. The catch is that it functions as a background image\n // instead of a color, and therefore overrides other background images in IE.\n //\n // This should go after a `filter` CSS property.\n toIeGradient() {\n return `progid:DXImageTransform.Microsoft.gradient(startColorStr='#${this.toHexWithAlpha()}', endColorStr='#${this.toHexWithAlpha()}')`;\n }\n\n toString() {\n return this.toPercent();\n }\n}\n\n// @param {string} hex\n// @return {string}\nexport const addHashToHex = (hex) => {\n if (isNil(hex)) {\n return;\n }\n\n // A valid hex color might be composed of all numbers\n // so we need to ensure that the hex is actually a string\n // before we try to examine its contents.\n const hexGuaranteedToBeString = String(hex);\n\n // return if already has hash\n if (hexGuaranteedToBeString.charAt(0) === '#') {\n return hexGuaranteedToBeString;\n }\n\n return `#${hexGuaranteedToBeString}`;\n};\n\nexport const colorWithAlpha = (color, alpha) => {\n return new Color(color).alpha(alpha).toRgba();\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable no-console */\nimport * as preact from 'preact';\nimport * as hooks from 'preact/hooks';\nimport * as compat from 'preact/compat';\nimport { root } from './utilities/root.js';\nimport { WistiaGlobal } from './types/player-api-types.ts';\n\nroot.Wistia ??= {};\n\n// Set up Preact on the namespace for async entry points to use\n// Embeds often asynchronously load additional or conditional Preact components, and if they are hook based, they should all use the same instance of Preact.\n// This is because Preact tracks hook state using internal module-level variables. And if they are not shared, they will often not work correctly if trying to use\n// them in one tree. https://github.com/wistia/player-modern/pull/5297\nroot.Wistia.Preact ??= { ...preact, hooks, compat };\n\nroot.Wistia._destructors ??= {};\n\nroot.Wistia._initializers ??= {};\n\nroot.Wistia._remoteData ??= new Map();\n\nroot.Wistia.api ??= () => {\n console.error('Accessed Wistia.api() before it was initialized');\n return null;\n};\n\n// this will be overwritten in _async.coffee\nroot.Wistia.defineControl ??= () => {\n console.error('Accessed Wistia.defineControl() before it was initialized');\n return null;\n};\n\nroot.Wistia.EventShepherdManager ??= {};\n\nroot.Wistia.mixin ??= <T>(klass: T, obj: Partial<Record<keyof T, unknown>> = {}) => {\n Object.keys(obj).forEach((key) => {\n if (Object.hasOwn(obj, key)) {\n // eslint-disable-next-line no-param-reassign\n klass[key] = obj[key] as unknown as T[keyof T];\n }\n });\n};\n\nroot.Wistia.playlistMethods ??= new Map();\n\n// will be overwritten in _public_api.coffee\nroot.Wistia.PublicApi ??= null;\n\n// will be overwritten in _remote_data.js\nroot.Wistia.uncacheMedia ??= () => {\n console.error('Accessed Wistia.uncacheMedia() before it was initialized');\n return null;\n};\n\n// will be overwritten in _visitor_key.js\nroot.Wistia.VisitorKey ??= null;\n\n// will be overwritten in _visitor_key.js\nroot.Wistia.visitorKey ??= null;\n\n// will be overwritten in WistiaPlayer.tsx\nroot.Wistia.wistia ??= undefined;\n\nroot.Wistia._liveStreamEventDataPromises ??= {};\n\nroot.Wistia._mediaDataPromises ??= {};\n\nroot.Wistia._liveStreamPollingPromises ??= {};\n\nroot.Wistia.first ??= () => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return root.Wistia.api() ?? document.querySelector('wistia-player');\n // 👆 prefer the E-v1 api first, so for translated embeds, it'll use the TranslationApi, otherwise use the first wistia-player on the page\n};\n\nexport const Wistia = root.Wistia as WistiaGlobal;\n","import type { PublicApi, WistiaContainerHTMLElement } from '../types/player-api-types.ts';\nimport { getAllApiEmbedElements } from './getEmbedElements.ts';\nimport { wlog } from './wlog.js';\nimport { wData } from './wistiaData.js';\nimport { ensureString } from './hashedId.ts';\n\nexport type MatcherFunction = (\n video?: MatcherFunction | PublicApi | WistiaContainerHTMLElement | 'removed' | null,\n) => void;\n\n/**\n * Initialized embeds are API embeds that have a wistiaApi property set on the\n * container. container.wistiaApi is set on legacy embeds in _public_api.js\n * @returns {PublicApi[]}\n */\nexport const getAllInitializedEmbedApiHandles = (): (PublicApi | 'removed' | undefined)[] => {\n if (wData('video') === undefined) {\n return [];\n }\n return Object.values(wData('video') as PublicApi[]);\n};\n\n/**\n * Get all initialized instances of the iframe api\n * @returns {PublicApi[]}\n */\nexport const getAllIframeApiHandles = (): (PublicApi | 'removed' | undefined)[] => {\n if (wData('iframe_api') === undefined) {\n return [];\n }\n return Object.values(wData('iframe_api') as PublicApi[]);\n};\n\n/**\n * Get all initialized instances of the API, inclusive of both\n * iframe API and regular embed public API\n * @returns {PublicApi[]}\n */\nexport const getAllApiHandles = (): (PublicApi | 'removed' | undefined)[] => {\n return getAllInitializedEmbedApiHandles().concat(getAllIframeApiHandles());\n};\n\n/**\n * Get a single API handle by matcher\n * @param {Function | HTMLElement | number | string | undefined} matcher - The matcher\n * @returns {PublicApi | null}\n */\nexport const getOneApiHandle = (\n matcher?: HTMLElement | MatcherFunction | number | string,\n // fn?: MatcherFunction | undefined, // TODO: Handle the case where functions are provided\n): MatcherFunction | PublicApi | WistiaContainerHTMLElement | 'removed' | null => {\n // If no matcher is provided, return the first api handle\n if (matcher === undefined) {\n return getAllApiHandles()[0] ?? null;\n }\n\n /* TODO: Handle the case where functions are provided to completely replicate\n * the original behavior of the `Wistia.api` function from _async.coffee\n * This will also require us to port over the Wistia.api.onFind function\n *\n // If a callback is provided, return the first api handle that matches\n if (fn !== undefined) {\n return onFindApiHandle(matcher, fn);\n }\n\n // If the matcher provided is a function, return the first api handle that matches\n if (typeof matcher === 'function') {\n return onFindApiHandle(matcher);\n }\n *\n * END TODO\n */\n\n // TODO: Consider using the strategy pattern here to isolate the logic for these cases a little more!\n let container: WistiaContainerHTMLElement | null = null;\n if (typeof matcher === 'string') {\n const query = matcher;\n\n // Find by DOM ID\n // Prefer unique-id attribute over id attribute\n container =\n document.querySelector(`[unique-id='${query}']`) ??\n (document.getElementById(query) as WistiaContainerHTMLElement | null);\n\n // Or find by fuzzy match on hashed ID or container\n if (container === null) {\n const apiHandles = getAllApiHandles();\n const matchedHandle = apiHandles.find((handle: PublicApi) => {\n // note: eslint flagged the logical OR below but it's intentional and necessary\n // see: https://github.com/wistia/player-modern/pull/2964#discussion_r1274876654\n\n if (handle.hashedId()?.startsWith(query) || handle.container?.id.startsWith(query)) {\n return handle;\n }\n\n // not all public api handles will have this method\n if ('mediaLanguages' in handle && 'languageToLocalization' in handle) {\n const queryMatchesLocalization = handle.mediaLanguages().some((language) => {\n const localization = handle.languageToLocalization(language);\n return localization != null && ensureString(localization.hashedId).startsWith(query);\n });\n\n if (queryMatchesLocalization) {\n return handle;\n }\n\n const queryMatchesSourceMediaId = ensureString(\n handle._mediaData?.sourceHashedId,\n ).startsWith(query);\n\n if (queryMatchesSourceMediaId) {\n return handle;\n }\n }\n\n return null;\n });\n if (matchedHandle !== 'removed') {\n container = (matchedHandle?.container as WistiaContainerHTMLElement | null) ?? null;\n }\n }\n } else if (typeof matcher === 'number') {\n let index = matcher;\n const apiHandles = getAllApiHandles();\n // Allow negative indices to get from the end\n if (index < 0) {\n index = apiHandles.length + index;\n }\n\n const apiHandle = apiHandles[index];\n if (apiHandle !== undefined && apiHandle !== 'removed') {\n container = apiHandle.container ?? null;\n }\n } else if (matcher instanceof HTMLElement) {\n container = matcher as WistiaContainerHTMLElement;\n } else {\n wlog.error('Unrecognized matcher', matcher);\n }\n\n // If our container is a wistia-player web component, it handles its own API\n // and we can just return it.\n if (container?.tagName === 'WISTIA-PLAYER') {\n // TODO: We need to call the PublicApi methods for now, but once WistiaPlayer\n // is more built out we should be able to just send that over directly\n return container.deprecatedApiDoNotUse as unknown as PublicApi;\n }\n\n // If the container has an API handle that isn't 'removed', return it\n // More on 'removed': https://github.com/wistia/player-modern/pull/1280\n if (container?.wistiaApi !== undefined && container.wistiaApi !== 'removed') {\n return container.wistiaApi as unknown as PublicApi;\n }\n return null;\n};\n\n/**\n * Get a single API handle by ONLY hashed id, not by container id\n * @param {number | string | undefined} hashedId\n * @returns {PublicApi | null}\n */\nexport const getOneApiHandleFromHashedId = (\n hashedId: string,\n): MatcherFunction | PublicApi | WistiaContainerHTMLElement | 'removed' | null => {\n let container: WistiaContainerHTMLElement | null = null;\n const query = hashedId;\n\n // Find by fuzzy match on hashed ID\n const apiHandles = getAllApiHandles();\n const matchedHandle = apiHandles.find((handle: PublicApi) => {\n if (handle.hashedId()?.startsWith(query)) {\n return handle;\n }\n return null;\n });\n\n if (matchedHandle !== 'removed') {\n container = (matchedHandle?.container as WistiaContainerHTMLElement | null) ?? null;\n }\n\n // If our container is a wistia-player web component, it handles its own API\n // and we can just return it.\n if (container?.tagName === 'WISTIA-PLAYER') {\n // TODO: We need to call the PublicApi methods for now, but once WistiaPlayer\n // is more built out we should be able to just send that over directly\n return container.deprecatedApiDoNotUse as unknown as PublicApi;\n }\n\n // If the container has an API handle that isn't 'removed', return it\n // More on 'removed': https://github.com/wistia/player-modern/pull/1280\n if (container?.wistiaApi !== undefined && container.wistiaApi !== 'removed') {\n return container.wistiaApi as unknown as PublicApi;\n }\n return null;\n};\n\n/**\n * Get all (non-iframe) API handles in the order they appear in the DOM\n * @returns {PublicApi[]}\n */\nexport const getAllApiHandlesByDomOrder = (): (PublicApi | 'removed' | undefined)[] => {\n // Legacy embeds have a wistia_embed_initialized class added to the container\n // when their public api is initialized and set (container.wistiaApi)\n const legacyHandles = Array.from(\n getAllApiEmbedElements('wistia_embed_initialized') as unknown as WistiaContainerHTMLElement[],\n ).reduce((accumulator: PublicApi[], legacyContainer: WistiaContainerHTMLElement) => {\n // Make sure the api has been initialized, set, and is not marked as 'removed'\n if (\n legacyContainer.wistiaApi !== undefined &&\n legacyContainer.wistiaApi !== 'removed' &&\n legacyContainer.wistiaApi !== null\n ) {\n accumulator.push(legacyContainer.wistiaApi);\n }\n return accumulator;\n }, []);\n\n const wistiaPlayerHandles = Array.from(document.querySelectorAll('wistia-player')).reduce(\n (accumulator: PublicApi[], container: WistiaContainerHTMLElement) => {\n if (\n container.deprecatedApiDoNotUse !== undefined &&\n container.deprecatedApiDoNotUse !== 'removed' &&\n container.deprecatedApiDoNotUse !== null\n ) {\n accumulator.push(container.deprecatedApiDoNotUse);\n }\n return accumulator;\n },\n [],\n );\n\n return [...legacyHandles, ...wistiaPlayerHandles];\n};\n","import { bestImage, blankImage, sortedImages } from 'utilities/image.js';\nimport { Component, h, render } from 'preact';\nimport { assign } from 'utilities/obj.js';\nimport { elemInDom } from 'utilities/elem.js';\nimport { defineTranslations, getTranslation } from './translations.js';\n\ndefineTranslations('en-US', {\n THUMBNAIL_VIDEO_THUMBNAIL: 'Video Thumbnail',\n});\n\nexport class Thumbnail extends Component {\n constructor(props) {\n super(props);\n this.initialState = this.state = {\n isLoaded: false,\n isDisplaying: false,\n };\n\n this.onDisplay = this.props.onDisplay;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.images !== this.props.images) {\n // clear the cache if we're changing which images to operate on.\n this._sortedImages = null;\n this.setState({ isLoaded: false, isDisplaying: false });\n }\n\n if (!this.onDisplay && nextProps.onDisplay) {\n this.onDisplay = nextProps.onDisplay;\n }\n }\n\n render() {\n const altText =\n this.props.thumbnailAltText !== undefined\n ? this.props.thumbnailAltText\n : this.translate('VIDEO_THUMBNAIL');\n return (\n <div style={this.wrapperStyle()} class=\"w-css-reset\">\n <img\n class=\"w-css-reset\"\n srcset={this.props.images.length > 1 ? this.srcSet() : null}\n src={this.bestSrc()}\n style={this.imgStyle()}\n alt={altText}\n ref={(e) => (this.imgElem = e)}\n aria-hidden={this.props.ariaHidden ? 'true' : null}\n />\n </div>\n );\n }\n\n translate(key) {\n return getTranslation(this.props.playerLanguage, `THUMBNAIL_${key}`);\n }\n\n componentDidMount() {\n this.setStateBasedOnImgStatus();\n this.maybeCallOnDisplay(this.initialState);\n }\n\n componentDidUpdate(prevProps, prevState) {\n this.setStateBasedOnImgStatus();\n this.maybeCallOnDisplay(prevState);\n }\n\n maybeCallOnDisplay() {\n if (this.onDisplay && this.state.isDisplaying && !this.calledOnDisplay) {\n // There may be components outside the thumbnail that depend on this.\n // For example, we might not want to show controls until the thumbnail\n // is displayed.\n this.calledOnDisplay = true;\n this.onDisplay();\n }\n }\n\n setStateBasedOnImgStatus() {\n const state = this.state;\n\n const imgElem = this.imgElem;\n if (state.isLoaded) {\n return;\n }\n\n if (!imgElem.onload) {\n imgElem.onload = () => {\n if (elemInDom(imgElem)) {\n this.setState({ isLoaded: true, isDisplaying: true });\n }\n };\n }\n\n if (imgElem.complete) {\n this.setState({ isLoaded: true, isDisplaying: true });\n }\n }\n\n wrapperStyle() {\n const shouldShow = this.state.isDisplaying && this.props.isVisible;\n return assign({}, this.props.wrapperStyle, {\n display: this.state.isLoaded && !shouldShow ? 'none' : 'block',\n });\n }\n\n baseStyle() {\n const fitStrategy = this.props.fitStrategy;\n if (fitStrategy === 'cover') {\n return this.coverStyle();\n }\n if (fitStrategy === 'contain') {\n return this.containStyle();\n }\n if (fitStrategy === 'fill') {\n return this.fillStyle();\n }\n if (fitStrategy === 'naturalHeight') {\n return this.naturalHeightStyle();\n }\n return this.containStyle();\n }\n\n imgStyle() {\n const shouldShow = this.state.isDisplaying && this.props.isVisible;\n return assign(this.baseStyle(), {\n // We use position/clip to hide/show the thumbnail until it has loaded\n // because the img may not try to load if it's not visible. But after\n // it's loaded, we use display: none/block to defeat over-aggressive css\n // that might do something like position: static !important.\n clip: shouldShow ? 'auto' : 'rect(0,0,0,0)',\n display: this.state.isLoaded && !shouldShow ? 'none' : 'block',\n borderRadius: `${this.props.playerBorderRadius}px`,\n });\n }\n\n containStyle() {\n return {\n backgroundColor: this.props.backgroundColor || '#000',\n height: '100%',\n objectFit: 'contain',\n position: 'absolute',\n width: '100%',\n top: 0,\n left: 0,\n };\n }\n\n coverStyle() {\n // IE11 does not support objectFit. Screw em.\n return {\n height: '100%',\n objectFit: 'cover',\n position: 'absolute',\n width: '100%',\n };\n }\n\n fillStyle() {\n // Though object-fit will be ignored, this will work in IE1 because the\n // default is to stretch the image.\n return {\n height: '100%',\n objectFit: 'fill',\n position: 'absolute',\n width: '100%',\n };\n }\n\n naturalHeightStyle() {\n return {\n width: '100%',\n position: 'relative',\n };\n }\n\n bestSrc() {\n return bestImage(this.props.images, {\n videoWidth: this.props.videoWidth,\n videoHeight: this.props.videoHeight,\n }).url;\n }\n\n srcSet() {\n let sortedImages = this.sortedImages();\n\n if (sortedImages.length === 0) {\n sortedImages = [blankImage(this.props.videoWidth, this.props.videoHeight)];\n }\n\n return sortedImages\n .map((image) => {\n return `${image.url} ${image.width}w`;\n })\n .join(', ');\n }\n\n sortedImages() {\n if (this._sortedImages) {\n return this._sortedImages;\n }\n\n this._sortedImages = sortedImages(this.props.images);\n\n return this._sortedImages;\n }\n\n stretchLimit() {\n const stretchLimit = this.props.stretchLimit;\n if (stretchLimit != null) {\n return stretchLimit;\n }\n return 10;\n }\n}\n","import { Wistia } from '../../../wistia_namespace.ts';\nimport { findScriptInDomBySrc } from '../../../utilities/script-utils.js';\nimport { mediaDataScriptRegExp, mediaDataUrl } from '../../../utilities/media_data.js';\nimport { eV1Protocol, mediaDataHost } from '../../../utilities/hosts.js';\nimport { mediaDataTransforms } from '../../../utilities/media-data-transforms.js';\nimport { cacheMediaData, getMediaDataFromCache } from '../../../utilities/remote-data-cache.ts';\nimport { isMediaDataError } from '../../../utilities/mediaDataError.ts';\nimport { clone } from '../../../utilities/obj.js';\nimport { fetchMediaData } from '../../../utilities/fetchMediaData.ts';\nimport type {\n MediaData,\n MediaDataServerResponse,\n MediaDataServerErrorResponse,\n} from '../../../types/player-api-types.ts';\nimport type { FetchMediaDataOptions } from '../../../utilities/fetchMediaData.ts';\n\n// This file is designed to efficiently retrieve media data from multiple potential sources.\n// The goal is to obtain the media data as quickly as possible.\n// Our legacy embed scripts use JSONP and our new scripts use a JS module.\n// It includes functions to check for the presence of these JSONP and JavaScript embed scripts in the DOM,\n// which can provide the necessary media data.\n// If they aren't there or don't load fast enough, we use server data.\n\nconst INTERVAL_TIME = 15;\nconst JS_LOAD_TIMEOUT = 30000; // 30 seconds\nconst SERVER_FETCH_FALLBACK_TIMEOUT = 15000; // 15 seconds\n\nconst doesJsonpExist = (mediaId: string, options: FetchMediaDataOptions = {}): boolean => {\n const url = mediaDataUrl(mediaId, options);\n // the mediaDataUrl above 👆 ends with `json` and we're specifically looking for jsonp here\n // also, really old embed codes may have added query params to the end of the url, which we want to exclude\n const matchUrl = url.replace(/\\.json(?!p)/, '.jsonp').replace(/&$/, '');\n\n const isJsonpScriptInDom = findScriptInDomBySrc(matchUrl, {\n ignoreProtocol: true,\n scriptRegex: mediaDataScriptRegExp(mediaId),\n });\n\n return Boolean(isJsonpScriptInDom);\n};\n\nconst jsScriptUrl = (mediaId: string, options: FetchMediaDataOptions = {}): string => {\n const host = mediaDataHost(options) as string;\n return `${eV1Protocol()}//${host}/embed/${mediaId}.js`;\n};\n\nconst doesJsMediaDataScriptExist = (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): boolean => {\n const url = jsScriptUrl(mediaId, options);\n const isJsScriptInDom = findScriptInDomBySrc(url, {\n ignoreProtocol: true,\n });\n\n return Boolean(isJsScriptInDom);\n};\n\nconst pollForJsonp = async (\n mediaId: string,\n options: FetchMediaDataOptions,\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n return new Promise((resolve, reject) => {\n const pollState = { isSettled: false, intervalId: -1, timeoutId: -1 };\n\n const cleanup = () => {\n pollState.isSettled = true;\n clearInterval(pollState.intervalId);\n clearTimeout(pollState.timeoutId);\n };\n\n // try looking once before the interval. This is especially useful for tests\n // since using vi.useFakeTimers() doesn't work with this function\n const checkForJsonp = () => {\n const jsonp = window[`wistiajsonp-/embed/medias/${mediaId}.jsonp`] as\n | MediaDataServerResponse\n | undefined;\n\n if (jsonp) {\n if (jsonp.media) {\n cleanup();\n\n // Any data from speed demon scripts we know won't be localized, so we can\n // cache it.\n cacheMediaData(mediaId, jsonp.media);\n\n // Still call fetchMediaData in case we need to get the localized version.\n fetchMediaData(mediaId, options)\n .then(resolve)\n .catch(() => {\n reject(new Error('Failed to fetch media data via jsonp'));\n });\n return;\n }\n\n if (isMediaDataError(jsonp)) {\n cleanup();\n resolve(jsonp);\n }\n }\n };\n\n checkForJsonp();\n\n if (pollState.isSettled) return;\n\n pollState.intervalId = window.setInterval(checkForJsonp, INTERVAL_TIME);\n\n pollState.timeoutId = window.setTimeout(() => {\n cleanup();\n reject(new Error('Timeout loading jsonp media data'));\n }, JS_LOAD_TIMEOUT);\n });\n};\n\nconst getJsScript = async (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n const url = jsScriptUrl(mediaId, options);\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error('Timeout loading js media data'));\n }, JS_LOAD_TIMEOUT);\n void import(/* webpackIgnore: true */ url)\n .then((module: { mediaData: MediaDataServerResponse }) => {\n const { mediaData } = module;\n\n // Any data from speed demon scripts we know won't be localized, so we can\n // cache it.\n cacheMediaData(mediaId, mediaData as MediaData);\n })\n .then(async () => fetchMediaData(mediaId, options))\n .then(resolve)\n .catch((err: unknown) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n};\n\nconst fetchMediaDataDelayed = (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): [Promise<MediaData | MediaDataServerErrorResponse>, { current: number }] => {\n const timeoutRef = { current: -1 };\n const promise = new Promise<MediaData | MediaDataServerErrorResponse>((resolve, reject) => {\n timeoutRef.current = window.setTimeout(() => {\n void fetchMediaData(mediaId, options)\n .then(resolve)\n .catch((err: unknown) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n }, SERVER_FETCH_FALLBACK_TIMEOUT);\n });\n return [promise, timeoutRef];\n};\n\nexport const getInitialMediaData = async (\n mediaId: string,\n options: FetchMediaDataOptions = {},\n): Promise<MediaData | MediaDataServerErrorResponse> => {\n // If the media data is already in the cache, no need to wait for everything\n // else. Also, if we've cached from an external source like password\n // protected video, this lets us respect that value.\n const mediaDataFromCache = getMediaDataFromCache(mediaId);\n if (mediaDataFromCache != null && options.skipCache !== true) {\n return fetchMediaData(mediaId, options);\n }\n\n const inlineMediaData = Wistia._inlineMediaData?.[mediaId];\n if (inlineMediaData != null) {\n // Any data from inline media data we know won't be localized, so we can\n // cache it.\n const clonedInlineMediaData = clone(inlineMediaData) as MediaData;\n mediaDataTransforms(clonedInlineMediaData, options);\n cacheMediaData(mediaId, clonedInlineMediaData);\n // Still call fetchMediaData in case we need to get the localized version.\n return fetchMediaData(mediaId, options);\n }\n\n const speedDemonPromises: Promise<MediaData | MediaDataServerErrorResponse>[] = [];\n\n if (doesJsonpExist(mediaId, options)) {\n speedDemonPromises.push(pollForJsonp(mediaId, options));\n }\n\n if (doesJsMediaDataScriptExist(mediaId, options)) {\n speedDemonPromises.push(getJsScript(mediaId, options));\n }\n\n // eslint-disable-next-line @typescript-eslint/init-declarations\n let mediaData: MediaData | MediaDataServerErrorResponse | undefined;\n\n if (speedDemonPromises.length === 0) {\n // If we get the json from the server, it'll do its own caching and mediaDataTransforms,\n // so we don't want to do that here. Doing so here could assign the mediaData to the\n // wrong mediaId (if it's localized) in the cache or double transform the data.\n mediaData = await fetchMediaData(mediaId, options);\n } else {\n const [delayedMediaDataPromise, delayedFetchTimeoutRef] = fetchMediaDataDelayed(\n mediaId,\n options,\n );\n mediaData = await Promise.any([...speedDemonPromises, delayedMediaDataPromise]);\n clearTimeout(delayedFetchTimeoutRef.current);\n }\n\n return mediaData;\n};\n","import { root } from 'utilities/root.js';\nimport { Url, proto as urlProto } from 'utilities/url.js';\nimport { appHostname, getSubdomainSuffixHostname } from '../appHostname.js';\n\nconst APP_WISTIA_COM = appHostname('app');\nconst CDN_FAST_PROTECTED_WISTIA_COM = appHostname('fast-protected');\nconst CDN_FAST_WISTIA_COM = appHostname('fast');\nconst CDN_FAST_WISTIA_CANARY = process.env.FAST_HOSTNAME_CANARY;\n\nexport const EMBED_HOST = process.env.EMBED_HOST;\n\nexport const PROD_FAST_HOSTNAME_NET = 'fast.wistia.net';\nexport const PROD_FAST_HOSTNAME_COM = 'fast.wistia.com';\n\nexport const PROD_EMBED_HOST = 'embed.wistia.com';\nexport const PROD_SSL_EMBED_HOST = 'embed-ssl.wistia.com';\n\nexport const PROD_FASTLY_SSL_HOST = 'embed-fastly.wistia.com';\n\nexport const SSL_EMBED_HOST = process.env.SSL_EMBED_HOST;\n\nexport const TAGGED_VERSION = process.env.TAGGED_VERSION || '';\n\nexport const CURRENT_SHA = process.env.CURRENT_SHA || '';\n\nconst DEFAULT_PROTOCOL = (() => {\n if (typeof window !== 'undefined' && root === window && root.location) {\n return root.location.protocol;\n }\n return 'https:';\n})();\n\nconst sslOrNonSsl = (protocol, sslHost, nonSslHost) => {\n return protocol === 'https:' ? sslHost : nonSslHost;\n};\n\nexport const deliveryHost = (protocol = DEFAULT_PROTOCOL) => {\n return sslOrNonSsl(protocol, SSL_EMBED_HOST, EMBED_HOST);\n};\n\nexport const appHost = () => {\n return APP_WISTIA_COM;\n};\n/**\n * Checks if we're running in a cloud dev environment or exposing a public endpoint\n * via a dev metal tunnel and returns the appropriate fast hostname\n * @returns {string|null} The fast hostname for cloud dev environment, or null if not in cloud dev\n */\nexport const getDevFastHostname = () => {\n const fastDevHostname = getSubdomainSuffixHostname('fast');\n if (fastDevHostname) {\n return fastDevHostname;\n }\n return null;\n};\n\n/**\n * @param {string} embedHost\n * @returns {string}\n */\nexport const cdnFastWistiaComHost = (embedHost = undefined) => {\n if (embedHost) {\n return embedHost;\n }\n\n const devFastHostname = getDevFastHostname();\n if (devFastHostname) {\n return devFastHostname;\n }\n\n return CDN_FAST_WISTIA_COM;\n};\n\nexport const cdnFastProtectedWistiaComHost = (assetHost) => {\n if (assetHost) {\n return assetHost;\n }\n return CDN_FAST_PROTECTED_WISTIA_COM;\n};\n\nexport const cdnFastWistiaNetHost = () => {\n const devFastHostname = getDevFastHostname();\n if (devFastHostname) {\n return devFastHostname;\n }\n\n const hostName = process.env.BASE_HOSTNAME || process.env.FAST_HOSTNAME_NET;\n return `fast.${hostName}`;\n};\n\nexport const cdnFastWistiaCanaryHost = () => {\n return CDN_FAST_WISTIA_CANARY;\n};\n// We run this immediately because we'll be guaranteed that E-v1 is in the DOM\n// when this is executing--unless we're loading a legacy thing like\n// playlist-v1.js or embed-shepherd_v1.js. We can use the result to determine\n// what host we should load other dynamic assets on.\nexport const eV1Url = (() => {\n const scripts = document.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const s = scripts[i];\n if (s.src) {\n const url = new Url(s.src);\n\n // Check that this is definitely our script.\n const pathIsEv1 = /\\/assets\\/external\\/E-v1?\\.js$/.test(url.rawPath);\n const hasKnownHost =\n url.host === cdnFastWistiaComHost() ||\n url.host === cdnFastWistiaNetHost() ||\n url.host === cdnFastWistiaCanaryHost();\n\n // Check that the script's protocol is sensible for the page we're on.\n const usesHttpsIfRequired = location.protocol === 'https:' && url.protocol === 'https:';\n const isProtocolRelative = url.protocol === '' || url.protocol == null;\n const protoIsSane =\n usesHttpsIfRequired || isProtocolRelative || location.protocol === 'http:';\n\n // It's possible there are multiple versions of the script and one failed\n // to load. Let's use the domain that succeeded.\n const scriptHasLoaded = !s.readyState || /loaded|complete/.test(s.readyState);\n\n if (pathIsEv1 && hasKnownHost && protoIsSane && scriptHasLoaded) {\n return url;\n }\n }\n }\n\n // If we can't find an instance of E-v1 matching\n return new Url(`${urlProto()}//${cdnFastWistiaNetHost()}/E-v1.js`);\n})();\n\n/**\n * @returns { string } string of the host\n */\nexport const eV1Host = () => {\n return eV1Url.host;\n};\n\n/**\n * @returns { string } string of the host with port\n */\nexport const eV1HostWithPort = () => {\n if (eV1Url.port) {\n return `${eV1Host()}:${eV1Url.port}`;\n }\n\n return eV1Host();\n};\n\n/**\n * @returns { string } string of the protocol\n */\nexport const eV1Protocol = () => {\n return eV1Url.protocol;\n};\n\nexport const mediaDataHost = (options = {}) => {\n // If embedHost is specified, just use that.\n if (options.embedHost) {\n return forceValidFastWistiaHost(options.embedHost);\n }\n\n // Try to match whatever host E-v1 is set to by default.\n return eV1HostWithPort();\n};\n\nexport const metricsHost = () => {\n const hostname = process.env.BASE_HOSTNAME ? process.env.BASE_HOSTNAME : process.env.METRICS_HOST;\n\n return `pipedream.${hostname}`;\n};\n\nconst VALID_PRODUCTION_HOSTS = ['wistia.net', 'wistia.com'];\n\n// We have some non-production hosts in here to allow connecting to the player via ngrok - which\n// is used for testing Live in VMA.\nexport const VALID_FASTLY_HOSTS = [\n ...VALID_PRODUCTION_HOSTS,\n 'wistia.mx', // ngrok hosts\n 'wistia.dev',\n 'wistia.tech',\n 'wistia.am',\n 'wistia.se',\n 'wistia.io', // development\n 'wistia.st', // staging\n];\n\nconst VALID_FASTLY_HOSTS_R = new RegExp(\n `(${VALID_FASTLY_HOSTS.map((h) => `\\\\.${h.replace('.', '\\\\.')}`).join('|')})$`,\n);\n\nexport const forceValidFastWistiaHost = (host) => {\n if (host && VALID_FASTLY_HOSTS_R.test(host)) {\n return host;\n }\n\n return eV1HostWithPort();\n};\n\n/**\n * Checks to see if the window location is a page that's hosted by wistia,\n * e.g., https://app.wistia.com, http://player.wistia.io, https://customer-name.wistia.com\n *\n * If so, return false.\n *\n * @returns boolean\n */\nexport const isEmbedOnACustomerPage = () => {\n return window.location.href.match(/^http(s)?:\\/\\/(\\S)*.wistia.(io|test|st|com)/gi) === null;\n};\n","import { runScripts } from 'utilities/script-utils.js';\n\nexport const getScriptTags = (htmlStr) => {\n return htmlStr.match(/<script.*?src[^>]*>\\s*<\\/script>|<script.*?>[\\s\\S]+?<\\/script>/gi) || [];\n};\n\nexport const scriptTagsToRunScriptsInput = (scriptTags) => {\n if (!scriptTags) {\n return [];\n }\n if (!(scriptTags instanceof Array)) {\n scriptTags = getScriptTags(scriptTags);\n }\n const hashes = [];\n for (let i = 0; i < scriptTags.length; i++) {\n let scriptTag = scriptTags[i];\n let hash = {};\n let matches = scriptTag.match(/<script.*?>/i);\n if (matches) {\n matches = matches[0].match(/src=\"([^\"]+)\"/i);\n if (matches) {\n hash.src = matches[1];\n hash.async = /async/i.test(scriptTag.replace(hash.src, ''));\n }\n }\n if (!matches) {\n matches = scriptTag.match(/<script>([\\s\\S]+?)<\\/script>/i);\n if (matches) {\n let src = matches[1];\n hash.fn = function () {\n // eslint-disable-next-line no-eval\n return eval(src);\n };\n }\n }\n hashes.push(hash);\n }\n return hashes;\n};\n\nexport const execScriptTags = (scriptTags, callback) => {\n if (!scriptTags) {\n return null;\n }\n const hashes = scriptTagsToRunScriptsInput(scriptTags);\n return runScripts(hashes).then(callback);\n};\n\nexport const removeScriptTags = (htmlStr) => {\n return htmlStr.replace(/<script.*?src[^>]*>\\s*<\\/script>|<script>[\\s\\S]+?<\\/script>/g, '');\n};\n","import merge from 'lodash.merge';\nimport cloneDeep from 'lodash.clonedeep';\nimport { cast } from '../../../utilities/obj.js';\nimport type { MediaData } from '../../../types/player-api-types.ts';\nimport type { EmbedOptions } from '../../../types/EmbedOptions.ts';\n\ninterface SourceEmbedOptions {\n domOptions?: EmbedOptions;\n iframeOptions?: EmbedOptions;\n mediaDataOptions?: EmbedOptions;\n wistiaWindowOptions?: EmbedOptions;\n}\n\nexport class PlayerDataHandler {\n // Embed options set after initialization which override the embed options\n // gathered from the source data\n #embedOptionOverrides: EmbedOptions = {};\n\n // Merged embed options gathered from source data\n #embedOptions: EmbedOptions = {};\n\n // Merged media data gathered from source data\n #mediaData: MediaData = {};\n\n // Source data which is used to create the final embed options\n readonly #sourceEmbedOptions: SourceEmbedOptions = {\n domOptions: {} as EmbedOptions,\n iframeOptions: {} as EmbedOptions,\n mediaDataOptions: {} as EmbedOptions,\n wistiaWindowOptions: {} as EmbedOptions,\n };\n\n // Source data which is used to create the final media data\n #sourceMediaData: MediaData = {};\n\n /**\n * Returns the final embed options which are a merge of all the source data and the overrides\n * @returns {EmbedOptions}\n * @readonly\n */\n public get embedOptions(): EmbedOptions {\n return this.#embedOptions;\n }\n\n /**\n * Returns the final media data which is a merge of all the source data\n * @returns {MediaData}\n * @readonly\n */\n public get mediaData(): MediaData {\n // Our embed options can be overridden after our initial source data fetches\n // Make sure the embed options within the media data are up to date\n this.#mediaData.embedOptions = this.#embedOptions;\n return this.#mediaData;\n }\n\n /**\n * Sets the source data for the embed options set on the <wistia-player> DOM element\n * @param {EmbedOptions} data\n * @returns {void}\n */\n public setDomEmbedOptionSource(data: EmbedOptions): void {\n this.#sourceEmbedOptions.domOptions = data;\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Sets the source data for the embed options from an iframe's url search params\n * @returns {void}\n */\n public setIframeEmbedOptionSource(data: EmbedOptions): void {\n this.#sourceEmbedOptions.iframeOptions = data;\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Sets the source data for the media data\n * @param {MediaData} data\n * @returns {void}\n */\n public setMediaDataSource(data: MediaData): void {\n this.#sourceMediaData = data;\n this.#mediaData = cast(cloneDeep(this.#sourceMediaData)) as MediaData;\n // Sometimes the hashedId has no alpha characters, so cast() will convert it to a number.\n // Our api expects hashedId to be a string, so we need to convert it back.\n if (this.#mediaData.hashedId !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#mediaData.hashedId = this.#mediaData.hashedId.toString();\n }\n\n this.#sourceEmbedOptions.mediaDataOptions = cloneDeep(this.#mediaData.embedOptions) ?? {};\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Sets the source data for the embed options set on the window via wistiaOptions\n * @param {EmbedOptions} data\n * @returns {void}\n */\n public setWistiaWindowEmbedOptionSource(data: EmbedOptions): void {\n this.#sourceEmbedOptions.wistiaWindowOptions = data;\n this.#updatePlayerEmbedOptions();\n }\n\n /**\n * Updates the embed option overrides which will be merged with the source embed option data\n * This merge can happen more frequently than our finite source data sets, which is why it's separate.\n * That way we don't have to re-merge the source data every time we update the overrides.\n * @param {EmbedOptions} data\n * @returns {void}\n */\n public updateEmbedOptionOverrides(data: EmbedOptions): void {\n this.#embedOptionOverrides = merge(this.#embedOptionOverrides, data);\n this.#embedOptions = merge(this.#embedOptions, this.#embedOptionOverrides);\n }\n\n /**\n * Merge the source embed options together to create a single source of truth of embed options\n * @private\n * @returns {void}\n */\n #updatePlayerEmbedOptions(): void {\n const { mediaDataOptions, wistiaWindowOptions, domOptions, iframeOptions } =\n this.#sourceEmbedOptions;\n\n // Merge the embed options together to create a single source of truth of embed options\n this.#embedOptions = cast(\n merge(\n {},\n mediaDataOptions ?? {},\n wistiaWindowOptions ?? {},\n domOptions ?? {},\n iframeOptions ?? {},\n this.#embedOptionOverrides,\n ),\n ) as EmbedOptions;\n\n // Make sure the embed options within the media data are up to date\n this.#mediaData.embedOptions = this.#embedOptions;\n }\n}\n","\"use strict\";\n/**\n * @description A module for parsing ISO8601 durations\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toSeconds = exports.end = exports.parse = exports.pattern = void 0;\n/**\n * The pattern used for parsing ISO8601 duration (PnYnMnWnDTnHnMnS).\n */\n// PnYnMnWnDTnHnMnS\nvar numbers = \"\\\\d+\";\nvar fractionalNumbers = \"\".concat(numbers, \"(?:[\\\\.,]\").concat(numbers, \")?\");\nvar datePattern = \"(\".concat(numbers, \"Y)?(\").concat(numbers, \"M)?(\").concat(numbers, \"W)?(\").concat(numbers, \"D)?\");\nvar timePattern = \"T(\".concat(fractionalNumbers, \"H)?(\").concat(fractionalNumbers, \"M)?(\").concat(fractionalNumbers, \"S)?\");\nvar iso8601 = \"P(?:\".concat(datePattern, \"(?:\").concat(timePattern, \")?)\");\nvar objMap = [\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n];\nvar defaultDuration = Object.freeze({\n years: 0,\n months: 0,\n weeks: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n});\n/**\n * The ISO8601 regex for matching / testing durations\n */\nexports.pattern = new RegExp(iso8601);\n/** Parse PnYnMnDTnHnMnS format to object */\nvar parse = function (durationString) {\n var matches = durationString.replace(/,/g, \".\").match(exports.pattern);\n if (!matches) {\n throw new RangeError(\"invalid duration: \".concat(durationString));\n }\n // Slice away first entry in match-array (the input string)\n var slicedMatches = matches.slice(1);\n if (slicedMatches.filter(function (v) { return v != null; }).length === 0) {\n throw new RangeError(\"invalid duration: \".concat(durationString));\n }\n // Check only one fraction is used\n if (slicedMatches.filter(function (v) { return /\\./.test(v || \"\"); }).length > 1) {\n throw new RangeError(\"only the smallest unit can be fractional\");\n }\n return slicedMatches.reduce(function (prev, next, idx) {\n prev[objMap[idx]] = parseFloat(next || \"0\") || 0;\n return prev;\n }, {});\n};\nexports.parse = parse;\n/** Convert ISO8601 duration object to an end Date. */\nvar end = function (durationInput, startDate) {\n if (startDate === void 0) { startDate = new Date(); }\n var duration = Object.assign({}, defaultDuration, durationInput);\n // Create two equal timestamps, add duration to 'then' and return time difference\n var timestamp = startDate.getTime();\n var then = new Date(timestamp);\n then.setFullYear(then.getFullYear() + duration.years);\n then.setMonth(then.getMonth() + duration.months);\n then.setDate(then.getDate() + duration.days);\n // set time as milliseconds to get fractions working for minutes/hours\n var hoursInMs = duration.hours * 3600 * 1000;\n var minutesInMs = duration.minutes * 60 * 1000;\n then.setMilliseconds(then.getMilliseconds() + duration.seconds * 1000 + hoursInMs + minutesInMs);\n // Special case weeks\n then.setDate(then.getDate() + duration.weeks * 7);\n return then;\n};\nexports.end = end;\n/** Convert ISO8601 duration object to seconds */\nvar toSeconds = function (durationInput, startDate) {\n if (startDate === void 0) { startDate = new Date(); }\n var duration = Object.assign({}, defaultDuration, durationInput);\n var timestamp = startDate.getTime();\n var now = new Date(timestamp);\n var then = (0, exports.end)(duration, now);\n // Account for timezone offset between start and end date\n var tzStart = startDate.getTimezoneOffset();\n var tzEnd = then.getTimezoneOffset();\n var tzOffsetSeconds = (tzStart - tzEnd) * 60;\n var seconds = (then.getTime() - now.getTime()) / 1000;\n return seconds + tzOffsetSeconds;\n};\nexports.toSeconds = toSeconds;\nexports.default = {\n end: exports.end,\n toSeconds: exports.toSeconds,\n pattern: exports.pattern,\n parse: exports.parse,\n};\n","/* eslint no-console: \"off\" */\n/* oxlint-disable no-console */\n/*\n * wlog\n *\n * wlog seeks to give us flexibility and power.\n *\n * Basic usage:\n *\n * import {Logger} from 'utilities/wlog.js';\n * const logger = new Logger();\n *\n * logger.error(exception); // this will print the message and stack nicely\n * logger.error('an error');\n * logger.info('informational');\n * logger.warn('a warning');\n * logger.debug('really high volume stuff');\n *\n * You can change the level:\n *\n * logger.setLevel(LOG_LEVELS.INFO);\n *\n * You can change grep (include matching) and grepv (exclude matching):\n *\n * logger.setGrep('include only lines matching this text');\n * logger.setGrepv('exclude any lines matching this text');\n *\n * If you want loggers to share context--for example, all logs for the player\n * should send to the same first1000LogLines and last1000LogLines caches.\n *\n * Wistia.wlog = Wistia.wlog || {};\n * const logger = new Logger(Wistia.wlog);\n *\n * A more advanced case would be to return the context in a function. This is\n * helpful if your logger is initialized/configured in one point, but used in\n * others that don't need to know about that configuration. In fact, this is\n * how the `wlog` constant is setup at the bottom of this file.\n *\n * We often want to have a global logger, but prefix certain portions of it.\n *\n * const myLogger = logger.getPrefixedFunctions('my prefix');\n * myLogger.info('aha'); // outputs \"my prefix aha\"\n *\n * A prefix can be a string or an array of strings. It can also be a function\n * that returns a string or an array of strings.\n *\n * In the above example, `myLogger` is a simple Object with defined logging\n * functions and fixed `this` context:\n *\n * {\n * error: (...messages) => { ... },\n * warn: (...messages) => { ... },\n * info: (...messages) => { ... },\n * etc...\n * }\n *\n * So it can also be used as a mix-in for other objects, e.g.\n *\n * import {Logger} from 'utilities/wlog.js';\n * class MyThing {\n * constructor () {\n * this.logger = new Logger().getPrefixedFunctions(this.logPrefix);\n * for (let k in this.logger) {\n * this[k] = this.logger[k];\n * }\n * this.info('my mixed-in logger is setup!');\n * }\n *\n * logPrefix = () => {\n * return [this.id, this.variable];\n * }\n * }\n */\nimport { globalTrigger } from 'utilities/globalBindAndTrigger.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport const ERROR = 0;\nexport const WARNING = 1;\nexport const NOTICE = 2;\nexport const INFO = 3;\nexport const DEBUG = 4;\nexport const LOG_LEVELS = {\n ERROR,\n WARNING,\n NOTICE,\n INFO,\n DEBUG,\n error: ERROR,\n warning: WARNING,\n notice: NOTICE,\n info: INFO,\n debug: DEBUG,\n};\n\nconst NOOP = function () {};\n\nexport const Logger = function (ctx) {\n const self = this;\n\n if (ctx == null) {\n ctx = {};\n }\n\n const construct = function () {\n self.ctx = ctx;\n if (!self.ctx.initializedAt) {\n self.reset();\n }\n };\n\n self.error = (...messages) => {\n return self.log(ERROR, messages);\n };\n self.warn = (...messages) => {\n return self.log(WARNING, messages);\n };\n self.notice = (...messages) => {\n return self.log(WARNING, messages);\n };\n self.info = (...messages) => {\n return self.log(INFO, messages);\n };\n self.debug = (...messages) => {\n return self.log(DEBUG, messages);\n };\n\n construct();\n\n return self;\n};\n\nconst lproto = Logger.prototype;\n\nlproto.reset = function () {\n this.ctx.level = ERROR;\n this.ctx.grep = null;\n this.ctx.grepv = null;\n this.ctx.first1000LogLines = [];\n this.ctx.last1000LogLines = [];\n this.ctx.initializedAt = new Date().getTime();\n};\n\nlproto.setLevel = function (level) {\n const logFunc = this.logFunc(INFO);\n if (LOG_LEVELS[level] != null) {\n this.ctx.level = LOG_LEVELS[level];\n logFunc(`Log level set to \"${level}\" (${LOG_LEVELS[level]})`);\n } else {\n logFunc(`Unknown log level \"${level}\"`);\n }\n};\n\nlproto.setGrep = function (grep) {\n this.ctx.grep = grep;\n};\n\nlproto.setGrepv = function (grepv) {\n this.ctx.grepv = grepv;\n};\n\nlproto.first1000LogLines = function () {\n return this.ctx.first1000LogLines;\n};\n\nlproto.last1000LogLines = function () {\n return this.ctx.last1000LogLines;\n};\n\nlproto.matchedGrep = function (messages) {\n let matched = false;\n if (this.ctx.grep || this.ctx.grepv) {\n let messageStrings = [];\n for (let i = 0; i < messages.length; i++) {\n try {\n let message = messages[i];\n messageStrings.push(message.toString && message.toString());\n } catch (e) {\n messageStrings.push('');\n }\n }\n let fullLine = messageStrings.join(' ');\n let matchesGrep = !this.ctx.grep || fullLine.match(this.ctx.grep);\n let matchesGrepv = !this.ctx.grepv || !fullLine.match(this.ctx.grepv);\n matched = matchesGrep && matchesGrepv;\n } else {\n matched = true;\n }\n return matched;\n};\n\nlproto.now = function () {\n // IE9 has window.performance, but not performance.now\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now().toFixed(3);\n }\n if (Date.now) {\n return Date.now() - this.ctx.initializedAt;\n }\n return new Date().getTime() - this.ctx.initializedAt;\n};\n\nlproto.messagesToLogLine = function (level, time, messages) {\n let logLine = [level, time];\n logLine = logLine.concat(messages);\n let cappedLine;\n try {\n cappedLine = logLine.join(' ') || '';\n if (cappedLine.length > 200) {\n cappedLine = cappedLine.slice(0, 200);\n }\n } catch (e1) {\n cappedLine = 'could not serialize';\n }\n return cappedLine;\n};\n\nlproto.persistLine = function (logLine) {\n if (this.ctx.first1000LogLines.length < 1000) {\n this.ctx.first1000LogLines.push(logLine);\n } else {\n if (this.ctx.last1000LogLines.length >= 1000) {\n this.ctx.last1000LogLines.shift();\n }\n this.ctx.last1000LogLines.push(logLine);\n }\n};\n\nlproto.log = function (level, messages) {\n const withinLevel = level <= this.ctx.level;\n const notDebug = level < DEBUG;\n const matched = (withinLevel || notDebug) && this.matchedGrep(messages);\n\n if (level === ERROR) {\n globalTrigger('problem', {\n type: 'error-logged',\n data: { messages },\n });\n }\n\n let now;\n if (matched && (withinLevel || notDebug)) {\n // This is initialized conditionally as a micro-optimization. We call\n // this function _a lot_, and new Date().getTime() (used on older\n // browsers) is expensive.\n now = this.now();\n }\n\n // Don't store \"debug\" lines, but keep the first and last 1000 lines so we\n // can send it with problem reports.\n if (notDebug && matched) {\n const logLine = this.messagesToLogLine(level, now, messages);\n this.persistLine(logLine);\n }\n\n // Output that log to the console! Minus info that is distracting like the\n // timestamp and log level.\n if (withinLevel && matched) {\n const logFunc = this.logFunc(level);\n let e;\n if (messages.length === 1 && (e = messages[0]) instanceof Error) {\n logFunc(e.message);\n if (e.stack) {\n logFunc(e.stack);\n }\n } else {\n logFunc(...messages);\n }\n }\n};\n\nconst logError = function (...messages) {\n console.error.apply(console, messages);\n};\n\nconst logWarn = function (...messages) {\n console.warn.apply(console, messages);\n};\n\nconst logInfo = function (...messages) {\n console.info.apply(console, messages);\n};\n\nconst logDebug = function (...messages) {\n console.debug.apply(console, messages);\n};\n\nconst logLog = function (messages) {\n console.log.apply(console, messages);\n};\n\nlproto.logFunc = function (level) {\n if (level == null) {\n level = this.level;\n }\n\n if (!console) {\n return NOOP;\n }\n\n let func;\n if (level === ERROR) {\n func = logError;\n } else if (level === WARNING) {\n func = logWarn;\n } else if (level === INFO) {\n func = logInfo;\n } else if (level === DEBUG) {\n func = logDebug;\n }\n\n if (!func) {\n func = logLog;\n }\n\n if (typeof func !== 'function') {\n // This should pretty much never happen, but if it does, we could only\n // tell by checking the value of logger.noConsoleLog.\n this.noConsoleLog = true;\n func = NOOP;\n }\n\n return func;\n};\n\nlproto.maybePrefix = function (prefix, messages) {\n if (prefix) {\n // prefix can be a fixed value, or a function that returns a value.\n if (typeof prefix === 'function') {\n try {\n prefix = prefix();\n } catch (e) {\n prefix = `prefix err \"${e.message}\"`;\n }\n }\n\n if (prefix instanceof Array) {\n return prefix.concat(messages);\n }\n return [prefix].concat(messages);\n }\n return messages;\n};\n\n// Return a hash of functions so we can easily setup prefixes and mix in the\n// results.\nlproto.getPrefixedFunctions = function (prefix) {\n return {\n log: (...messages) => {\n return this.log(ERROR, this.maybePrefix(prefix, messages));\n },\n error: (...messages) => {\n return this.log(ERROR, this.maybePrefix(prefix, messages));\n },\n warn: (...messages) => {\n return this.log(WARNING, this.maybePrefix(prefix, messages));\n },\n notice: (...messages) => {\n return this.log(WARNING, this.maybePrefix(prefix, messages));\n },\n info: (...messages) => {\n return this.log(INFO, this.maybePrefix(prefix, messages));\n },\n debug: (...messages) => {\n return this.log(DEBUG, this.maybePrefix(prefix, messages));\n },\n };\n};\n\n// This should work in either the browser or node.\nif (Wistia && Wistia.wlogCtx == null) {\n Wistia.wlogCtx = {};\n}\nexport const wlog = new Logger(Wistia.wlogCtx);\n","import { h, JSX, Ref } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { BigPlayButtonSVG } from './svgs/BigPlayButtonSVG.tsx';\nimport { getTranslation } from '../../../../../shared/translations.js';\nimport { Color } from '../../../../../../utilities/color.js';\nimport { unescapeHtml } from '../../../../../../utilities/core.js';\nimport { cachedDetect } from '../../../../../../utilities/detect.js';\nimport { flexibleDuration } from '../../../../../../utilities/duration.ts';\nimport { interNumbersSemiBold } from '../../../../../../utilities/interFontFamily.js';\nimport {\n adjustColorForProperContrast,\n getVideoPlayerIconColor,\n} from '../../../../../../utilities/color-utils.ts';\n\nconst detect = cachedDetect() as { edge: boolean };\n\nexport const BASE_BUTTON_WIDTH = 125;\nexport const BASE_BUTTON_HEIGHT = 80;\n\nconst BASE_FONT_SIZE = 18;\nconst BASE_LINE_HEIGHT = 30;\n\nconst ALPHA_MIX_BLEND_MODE = 0.7;\nconst ALPHA_NO_MIX_BLEND_MODE = 0.85;\n\ninterface BigPlayButtonProps {\n backgroundGradientCss?: string | null;\n baseHeight?: number;\n baseWidth?: number;\n borderRadius: number;\n buttonTabIndex: number;\n color?: string;\n controlBarDistance?: number;\n duration: number;\n elemRef?: Ref<HTMLDivElement>;\n hasContrastIcons: boolean;\n isLiveMedia: boolean;\n isLoading?: boolean;\n isOpaque?: boolean;\n isVisible: boolean;\n leftNudgeFraction?: number;\n noMixBlendMode?: boolean;\n onClick?: () => void;\n playerLanguage: {\n code: string;\n };\n scale: number;\n showBpbTime: boolean;\n topNudgeFraction?: number;\n videoName: string;\n videoWidth: number;\n}\n\nexport const BigPlayButton = ({\n backgroundGradientCss,\n baseHeight = BASE_BUTTON_HEIGHT,\n baseWidth = BASE_BUTTON_WIDTH,\n borderRadius,\n buttonTabIndex,\n color,\n controlBarDistance = 0,\n duration,\n elemRef,\n hasContrastIcons,\n isLiveMedia,\n isLoading = false,\n isOpaque = false,\n isVisible,\n leftNudgeFraction = 0,\n noMixBlendMode = false,\n onClick,\n playerLanguage,\n scale,\n showBpbTime,\n topNudgeFraction = 0,\n videoName,\n videoWidth,\n}: BigPlayButtonProps): JSX.Element => {\n const [isFocused, setIsFocused] = useState(false);\n\n const scaledWidth = baseWidth * scale;\n const scaledHeight = baseHeight * scale;\n\n const translate = (key) => getTranslation(playerLanguage.code, `PLAY_BUTTON_${key}`) as string;\n const unescapedVideoName = unescapeHtml(videoName) as string;\n const ariaLabel = `${translate('TITLE_WHEN_NOT_PLAYING')}: ${unescapedVideoName}`;\n\n const wrapperStyle = {\n borderRadius: `${borderRadius}px`,\n display: isVisible ? 'block' : 'none',\n left: `calc(50% + ${(leftNudgeFraction || 0) * 100}%)`,\n marginLeft: `-${scaledWidth / 2}px`,\n marginTop: `-${scaledHeight / 2}px`,\n overflow: 'hidden',\n position: 'absolute',\n top: `calc(50% + ${(topNudgeFraction || 0) * 100}% - ${controlBarDistance}px)`,\n boxShadow: isOpaque ? '0 3px 5px rgba(0,0,0,0.3)' : undefined,\n };\n\n const shouldMixBlendMode = !detect.edge && !noMixBlendMode;\n\n const blendColor = new Color(color ?? '#000').alpha(1) as Color;\n const blendStyle = {\n background: blendColor.toRgba(),\n display: shouldMixBlendMode ? 'block' : 'none',\n left: 0,\n height: `${scaledHeight}px`,\n mixBlendMode: 'darken',\n position: 'absolute',\n top: 0,\n width: `${scaledWidth}px`,\n };\n\n const shouldUseGradient = backgroundGradientCss != null;\n const playerColorObj = new Color(color ?? '#000000');\n let hoverButtonColor = adjustColorForProperContrast(playerColorObj, playerColorObj, 'nonText');\n const overlayColor = isFocused ? hoverButtonColor : playerColorObj;\n const overlayAlphaValue = shouldMixBlendMode ? ALPHA_MIX_BLEND_MODE : ALPHA_NO_MIX_BLEND_MODE;\n const overlayColorObj = new Color(overlayColor);\n const playerIconColor = getVideoPlayerIconColor(\n playerColorObj,\n hasContrastIcons,\n shouldUseGradient,\n );\n\n let hoverIconColor = adjustColorForProperContrast(\n playerIconColor,\n hoverButtonColor,\n // Technically the nonText shape will suffice for contrast, but we should use the paragraphText shape to make sure this color is the same as the playbar button icon color on hover\n 'paragraphText',\n );\n\n overlayColorObj.alpha(isOpaque ? 1 : overlayAlphaValue);\n\n const gradientStyles = shouldUseGradient\n ? {\n background: backgroundGradientCss,\n backgroundSize: `${videoWidth}px 100%`,\n backgroundPositionX: 'center',\n }\n : {};\n\n if (shouldUseGradient) {\n hoverIconColor = '#ffffff';\n hoverButtonColor = 'rgba(0,0,0,0.4)';\n }\n\n const overlayStyle = {\n backgroundColor: overlayColorObj.toRgba(),\n ...gradientStyles,\n height: `${scaledHeight}px`,\n left: 0,\n position: 'absolute',\n top: 0,\n transition: 'background-color 150ms',\n width: `${scaledWidth}px`,\n };\n\n const buttonStyle = {\n backgroundColor: 'transparent',\n border: 0,\n color: isFocused ? hoverIconColor : playerIconColor,\n cursor: 'pointer',\n height: `${scaledHeight}px`,\n boxShadow: 'none',\n width: `${scaledWidth}px`,\n };\n\n const shouldDisplayDuration = showBpbTime && !isLiveMedia;\n const timeStyle = {\n background: 'rgba(0,0,0,.4)',\n color: '#fff',\n fontFamily: interNumbersSemiBold,\n fontSize: `${BASE_FONT_SIZE * scale}px`,\n lineHeight: `${BASE_LINE_HEIGHT * scale}px`,\n pointerEvents: 'none',\n textAlign: 'center',\n };\n\n const handleIsFocused = () => {\n setIsFocused(true);\n };\n\n const handleNotFocused = () => {\n setIsFocused(false);\n };\n\n return (\n <div class=\"w-bpb-wrapper w-css-reset w-css-reset-tree\" ref={elemRef} style={wrapperStyle}>\n <button\n class=\"w-big-play-button w-css-reset-button-important w-vulcan-v2-button\"\n style={buttonStyle}\n onMouseEnter={handleIsFocused}\n onMouseLeave={handleNotFocused}\n onFocusIn={handleIsFocused}\n onFocusOut={handleNotFocused}\n onClick={onClick}\n aria-label={ariaLabel}\n tabIndex={buttonTabIndex}\n type=\"button\"\n >\n <div style={blendStyle} />\n <div style={overlayStyle} />\n <BigPlayButtonSVG\n width={baseWidth}\n height={baseHeight}\n scale={scale}\n isLoading={isLoading}\n overrideFillColor={isFocused ? hoverIconColor : playerIconColor}\n />\n </button>\n {shouldDisplayDuration ? (\n <div class=\"w-bpb-time\" style={timeStyle}>\n {flexibleDuration(duration)}\n </div>\n ) : null}\n </div>\n );\n};\n","import { eV1Protocol, eV1HostWithPort, TAGGED_VERSION, CURRENT_SHA } from './hosts.js';\nimport { reportError } from './sentryUtils.ts';\nimport { countMetric } from './simpleMetrics.js';\n\nconst MAX_RETRIES = 3;\n\nconst importWithRetry = async (\n baseUrl: string,\n retries = MAX_RETRIES,\n delay = 200,\n attempt = 0,\n): Promise<unknown> => {\n // Append a cache-busting query parameter to avoid Safari's caching of failed imports\n const url =\n attempt === 0 ? baseUrl : `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}retry=${attempt}`;\n try {\n const result: unknown = await import(/* webpackIgnore: true */ url);\n if (attempt > 0) {\n countMetric('dynamic-import/retry-success', 1, { attempt: String(attempt), url: baseUrl });\n }\n return result;\n } catch (error) {\n if (retries <= 0) throw error;\n await new Promise<void>((resolve) => {\n setTimeout(resolve, delay);\n });\n return importWithRetry(baseUrl, retries - 1, delay, attempt + 1);\n }\n};\n\nexport type DynamicImportOptions = {\n host?: string;\n mediaData?: boolean;\n};\nexport const dynamicImport = async (\n filePath: string,\n options: DynamicImportOptions = {},\n): Promise<unknown> => {\n const host: string =\n Object.hasOwn(options, 'host') && options.host != null ? options.host : eV1HostWithPort();\n\n const taggedVersion: string = TAGGED_VERSION;\n\n const currentSha: string = CURRENT_SHA;\n\n const getVersionSuffix = (): string => {\n if (taggedVersion !== '' && taggedVersion.length > 0 && options.mediaData !== true) {\n return `@${taggedVersion}`;\n }\n // If there is no tagged version, we can fall back to the current SHA.\n // This mechanism keeps a cached script from fetching a newer, mismatched version of an imported bundle.\n if (currentSha !== '' && currentSha.length > 0 && options.mediaData !== true) {\n return `@${currentSha}`;\n }\n return '';\n };\n\n const url = `${eV1Protocol()}//${host}/${filePath}${getVersionSuffix()}`;\n\n try {\n return await importWithRetry(url);\n } catch (error) {\n const reportedError = error instanceof Error ? error : new Error(String(error));\n reportError('dynamicImport', reportedError, {\n importUrl: url,\n });\n countMetric('dynamic-import/failure-after-retry', 1, { attempt: String(MAX_RETRIES), url });\n throw error;\n }\n};\n","import { clone, merge, select, except, only, sort } from 'utilities/obj.js';\nimport { Url } from 'utilities/url.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport * as Hosts from 'utilities/hosts.js';\nimport { wlog } from 'utilities/wlog.js';\nimport { appHostname } from '../appHostname.js';\n\nconst aps = Array.prototype.slice;\n\nexport const FAILED = -1;\nexport const QUEUED = 0;\nexport const PROCESSING = 1;\nexport const READY = 2;\n\n// Advanced sorting and filtering so we can be expressive and concise when\n// choosing assets.\nconst FILTER_KEYS = ['select', 'sortFn', 'sortBy', 'unique'];\nexport const filter = (assets, options = {}) => {\n // there was an issues in the uploader + notPlayablePlayer flow where we\n // occasionally asked to filter assets when we didn't have any. If we\n // don't have assets just gtfo\n if (!assets) {\n return [];\n }\n // We started out passing the whole mediaData object here, but we only\n // operate on assets, and that's more convenient for filtering result sets\n // multiple times. This if continues to allow mediaData to be passed in.\n if (assets.assets) {\n assets = assets.assets;\n }\n\n // If qualityMin/qualityMax are specified, filtered the assets with those\n // before doing anything else. That's because those aren't set directly on\n // the assets; rather, it is a computed value for each asset.\n if (options.qualityMin != null || options.qualityMax != null) {\n assets = withinQualityRange(assets, options.qualityMin, options.qualityMax);\n options = except(options, ['qualityMin', 'qualityMax']);\n }\n\n const filterOptions = only(options, FILTER_KEYS);\n const selectFn = filterOptions.select || except(options, FILTER_KEYS);\n\n if (selectFn) {\n filterOptions.select = selectFn;\n }\n\n let result = filterOptions.select ? select(assets, filterOptions.select) : clone(assets);\n\n if (filterOptions.sortFn || filterOptions.sortBy) {\n result = sort(result, filterOptions.sortFn || filterOptions.sortBy);\n }\n\n // If \"unique\" is given, it means we only want the first asset with that\n // property. We can leverage sortBy and select to meaningfully order the\n // assets, essentially letting us choose which one is unique.\n if (filterOptions.unique) {\n const uniqHash = {};\n for (let i = 0; i < result.length; i++) {\n let asset = result[i];\n let bucket = asset[`${filterOptions.unique}`] || '__undefined__';\n if (!uniqHash[bucket]) {\n uniqHash[bucket] = asset;\n }\n }\n result = [];\n for (let k in uniqHash) {\n result.push(uniqHash[k]);\n }\n }\n\n return result;\n};\n\nexport const one = (assets, options) => {\n return filter(assets, options)[0] || null;\n};\n\nexport const readyPublicMp3s = (assets) => {\n return filter(assets, {\n ext: 'mp3',\n status: READY,\n public: true,\n });\n};\n\nexport const readyPublicMp4s = (assets) => {\n return filter(assets, {\n container: 'mp4',\n status: READY,\n public: true,\n });\n};\n\nexport const readyPublicM3u8s = (assets) => {\n return filter(assets, {\n container: 'm3u8',\n status: READY,\n public: true,\n });\n};\n\nexport const filterOver400 = (assets) => {\n const result = [];\n for (let i = 0; i < assets.length; i++) {\n let a = assets[i];\n let vbitrateInRange =\n a.opt_vbitrate != null && a.opt_vbitrate >= 500 && a.opt_vbitrate <= 100000;\n let widthInRange = a.width != null && a.width > 400;\n if (vbitrateInRange || widthInRange) {\n result.push(a);\n }\n }\n return result;\n};\n\nexport const readyPublicOver400 = (assets) => {\n return filterOver400(\n filter(assets, {\n container: /mp4/,\n public: true,\n status: READY,\n }),\n );\n};\n\nexport const nonfailedPublicOver400 = (assets) => {\n return filterOver400(\n filter(assets, {\n container: /mp4/,\n public: true,\n status: (s) => {\n return s !== FAILED;\n },\n }),\n );\n};\n\nexport const withinQualityRange = (assets, qualityMin = 100, qualityMax = 10000) => {\n return filter(assets, {\n select: (asset) => {\n // quality is based on width * height, and given back in a format like\n // 720, 1080, 3840, etc.\n const quality = numericSizeSnapped(asset.width, asset.height);\n return qualityMin <= quality && quality <= qualityMax;\n },\n });\n};\n\nexport const numericSizeSnapped = (width, height) => {\n if (height > width) {\n // let's mathematically rotate vertical videos when determining their\n // snapped size.\n const tmpWidth = width;\n width = height;\n height = tmpWidth;\n }\n\n const aspectRatio = width / height;\n\n // If given a square video, expand the width so we'll name it as if\n // it's 16:9 with the given height.\n if (aspectRatio < 1.05) {\n width = height * (16 / 9);\n }\n\n if (width >= 3740) {\n return 2160;\n }\n if (width >= 3100) {\n return 1800;\n }\n if (width >= 2460) {\n return 1440;\n }\n if (width >= 1820) {\n return 1080;\n }\n if (width >= 1180) {\n return 720;\n }\n if (width >= 860) {\n return 540;\n }\n if (width >= 540) {\n return 360;\n }\n\n return height;\n};\n\n// Expect that assets are a subset of assets that we are allowed to select.\n// This function does not have any special logic to filter only selectable\n// assets.\nexport const findClosestAssetByQuality = (assets, quality) => {\n let height;\n if (quality === '4k') {\n height = 2160;\n } else {\n // '360p' yields 360, '1080i' yields 1080, etc.\n height = parseInt(quality, 10);\n }\n\n const exactMatch = withinQualityRange(assets, height, height)[0];\n if (exactMatch) {\n return exactMatch;\n }\n\n const surroundingAssets = nearestOutsideRange(assets, height, height);\n if (surroundingAssets.length === 1) {\n return surroundingAssets[0];\n }\n const aspect = videoAspect(assets);\n const width = Math.round(aspect * height);\n const [lowerAsset, upperAsset] = surroundingAssets;\n const lowerDiff = Math.abs(lowerAsset.width - width);\n const upperDiff = Math.abs(upperAsset.width - width);\n if (lowerDiff < upperDiff) {\n return lowerAsset;\n }\n return upperAsset;\n};\n\nexport const still = (assets) => {\n let stillAsset = one(assets, {\n type: /^still_image$/,\n sortBy: 'created_at desc',\n });\n\n // If no still is associated, check for channel artwork\n if (!stillAsset) {\n stillAsset = channelArtworkStill(assets);\n }\n\n // If no still or channel art is associated, generate from the first video asset\n // we can find.\n if (!stillAsset) {\n stillAsset = one(assets, { container: /mp4/, sortBy: 'width desc' });\n }\n\n return stillAsset;\n};\n\nexport const channelArtworkStill = (assets) => {\n return one(assets, {\n type: /^channel_still_image$/,\n sortBy: 'created_at desc',\n });\n};\n\nexport const thumbnailAssets = (assets, options) => {\n if (options.stillUrl) {\n return [{ height: null, url: options.stillUrl, width: null }];\n }\n\n const stillAsset = still(assets);\n if (options.instantHlsStillAsset != null && (!stillAsset || /mp4/.test(stillAsset.container))) {\n return [options.instantHlsStillAsset];\n }\n\n if (options.originalFileStillAsset != null && (!stillAsset || /mp4/.test(stillAsset.container))) {\n return [options.originalFileStillAsset];\n }\n\n if (!stillAsset) {\n return [];\n }\n\n const stillAspect = stillAsset.width / stillAsset.height;\n return [320, 640, 960, 1280, 1920, 3840].map((width) => {\n const height = Math.round(width / stillAspect);\n const url = stillUrl(assets, { videoWidth: width, videoHeight: height, playButton: false });\n return { height, url, width };\n });\n};\n\nconst FAST_HOSTNAME = appHostname('fast');\nexport const stillUrl = (assets, options = {}) => {\n const stillAsset = still(assets);\n\n // @TODO should this throw an error instead?\n if (!stillAsset) return;\n\n if (stillAsset.status !== READY) {\n // occasionally we might get a stillAsset that isn't ready, but its\n // channel art is for an audio! fallback to that first!\n const channelArtwork = channelArtworkStill();\n if (channelArtwork && channelArtwork.status === READY) {\n return channelArtwork.url;\n }\n\n return `//${FAST_HOSTNAME}/assets/images/blank.gif`;\n }\n\n options = merge(\n {\n aspect: stillAsset.width / stillAsset.height || 1, // default to square if we can't determine the aspect\n stillUrl: stillAsset.url,\n playButton: false,\n playerColor: options.playerColor || '636155',\n videoWidth: stillAsset.width || 640,\n videoHeight: stillAsset.height || 360,\n stillSnap: true,\n },\n options,\n );\n\n let stillWidth = options.videoWidth;\n let stillHeight = options.videoHeight;\n const result = new Url(options.stillUrl);\n\n if (options.retina) {\n result.params.image_play_button_size = '2x';\n stillWidth *= 2;\n stillHeight *= 2;\n }\n\n // By default, we snap to a pre-generated still size\n if (options.stillSnap) {\n stillWidth = getStillWidth({\n videoWidth: stillWidth,\n stillAssetWidth: stillAsset.width || 640, // there have been times where we fail to have proper width returned\n });\n\n stillHeight = Math.round(stillWidth / options.aspect);\n }\n\n // Don't do anything special if this is not a Wistia hosted image.\n if (!isBakeryUrl(options.stillUrl)) {\n return options.stillUrl;\n }\n\n if (options.protocol === 'https:') {\n result.protocol = 'https:';\n // Under normal circumstances, the host for assets should depend on the\n // environment – but if you're using the embedHost option to use non-prod\n // code with prod embeds, we force using a prod host.\n result.host =\n options.embedHost === Hosts.PROD_FAST_HOSTNAME_COM ||\n options.embedHost === Hosts.PROD_FAST_HOSTNAME_NET\n ? Hosts.PROD_SSL_EMBED_HOST\n : Hosts.SSL_EMBED_HOST;\n }\n\n result.params.image_crop_resized = `${stillWidth}x${stillHeight}`;\n\n if (options.playButton == null || options.playButton) {\n result.params.image_play_button_rounded = 1;\n result.params.image_play_button_color = `${`${options.playerColor}`.replace(/^#+/, '')}e0`;\n }\n\n if (options.ext) {\n result.ext(options.ext);\n }\n\n // if the extension has not been transformed, default to a jpg\n if (result.ext() === 'bin') {\n result.ext('jpg');\n }\n\n return result.absolute();\n};\n\n// We only make three sizes of a thumbnail for a given video: 1280, 960, and\n// 640 wide. We have logic on the server that matches this as well. The idea\n// is that since we only use these three, we can generate them beforehand so\n// they're always ready and automatic for the people.\nexport const getStillWidth = (options) => {\n const potentialStillWidths = [640, 960, 1280, 1920, 3840];\n\n // We also have a still that's the exact width of the one they uploaded\n // or generated (so long as it is less than 3840px across)\n if (options.stillAssetWidth < 3840) {\n potentialStillWidths.push(options.stillAssetWidth);\n }\n\n // We don't create thumbnails that are larger than the stillAssetWidth,\n // so eliminate anything that's larger than that, because it's wasteful to\n // scale up an image past it's original size!\n const availableStillWidths = [];\n for (let i = 0; i < potentialStillWidths.length; i++) {\n let width = potentialStillWidths[i];\n if (width <= options.stillAssetWidth) {\n availableStillWidths.push(width);\n }\n }\n\n // sort the widths in place.\n availableStillWidths.sort((a, b) => {\n return a - b;\n });\n\n // Use the still that's equal to or slightly larger than the size of the\n // video embed.\n for (let i = 0; i < availableStillWidths.length; i++) {\n let width = availableStillWidths[i];\n if (options.videoWidth <= width) {\n return width;\n }\n }\n\n // Can't find one that fits? Let's use the biggest available width.\n return Math.max(...availableStillWidths);\n};\n\nexport const BAKERY_HOSTS = [\n Hosts.EMBED_HOST,\n Hosts.SSL_EMBED_HOST,\n appHostname('embed'),\n appHostname('prime'),\n appHostname('mixergy-cdn'),\n appHostname('embed-fastly'), // XXX: akamai test\n Hosts.PROD_EMBED_HOST,\n Hosts.PROD_SSL_EMBED_HOST,\n Hosts.PROD_FASTLY_SSL_HOST,\n];\n\n// Check if a given url is like embed.wistia.com, embed-ssl.wistia.com,\n// prime.wistia.com, etc.\nexport const isBakeryUrl = (rawUrl) => {\n if (rawUrl == null) {\n return false;\n }\n const url = new Url(rawUrl);\n if (!url.host) {\n return false;\n }\n return BAKERY_HOSTS.join(',').indexOf(url.host) >= 0;\n};\n\nexport const onePublicReadyWithContainer = (assets, type, options) => {\n options = merge(\n {\n container: type,\n public: true,\n status: READY,\n },\n options,\n );\n\n return one(assets, options);\n};\n\nexport const hasAnyReadyHdrAssets = (assets) => {\n return assets.some(\n (asset) =>\n asset.type === 'hdr_video' &&\n asset.status === READY &&\n asset.public &&\n asset.container === 'mp4',\n );\n};\n\nexport const mp4 = (assets, options) => {\n return onePublicReadyWithContainer(assets, 'mp4', options);\n};\n\nexport const webm = (assets, options) => {\n return onePublicReadyWithContainer(assets, 'webm', options);\n};\n\nexport const m3u8 = (assets, options) => {\n return onePublicReadyWithContainer(assets, 'm3u8', options);\n};\n\nexport const original = (assets) => {\n return one(assets, { type: 'original' });\n};\n\n// If we support webm, prefer webm (since VP9 codec is better), otherwise\n// use mp4 (h264)\nexport const playable = (assets, options, detect = cachedDetect()) => {\n if (detect.video.webm) {\n return webm(assets, options) || mp4(assets, options);\n }\n return mp4(assets, options);\n};\n\nexport const videoAspect = (assets) => {\n const asset = mp4(assets) || m3u8(assets) || webm(assets) || original(assets);\n if (asset && asset.height) {\n return asset.width / asset.height;\n }\n // no assets available; use default aspect 1.6667\n return 640 / 360;\n};\n\nexport const originalAspect = (assets) => {\n const derivativeAspect = videoAspect(assets);\n const asset = original(assets);\n if (asset && asset.width && asset.height) {\n const candidateAspect = asset.width / asset.height;\n if (\n (candidateAspect > 1 && derivativeAspect < 1) ||\n (candidateAspect < 1 && derivativeAspect > 1)\n ) {\n // the original is rotated relative to its derivatives\n return 1 / candidateAspect;\n }\n return candidateAspect;\n }\n return derivativeAspect;\n};\n\nexport const iphone = (assets, options) => {\n const aspect = videoAspect(assets);\n if (aspect > 1) {\n options = merge({ width: 640 }, options);\n return mp4(assets, options) || smallestNormalMp4(assets, options);\n }\n const opt1 = merge({ width: 320 }, options);\n const opt2 = merge({ width: 640 }, options);\n return mp4(assets, opt1) || mp4(assets, opt2) || smallestNormalMp4(assets, options);\n};\n\nexport const smallestNormalMp4 = (assets, options) => {\n options = merge({ sortBy: 'width asc', width: [640, 1920] }, options);\n return mp4(assets, options);\n};\n\nexport const urlWithCorrectHost = (assetUrl, proto = Hosts.eV1Protocol()) => {\n const parsedUrl = new Url(assetUrl);\n if (isBakeryUrl(assetUrl)) {\n if (proto === 'https:') {\n parsedUrl.host = Hosts.deliveryHost(location.protocol);\n parsedUrl.protocol = 'https:';\n } else {\n parsedUrl.host = Hosts.deliveryHost(location.protocol);\n parsedUrl.protocol = 'http:';\n }\n }\n return parsedUrl.absolute();\n};\n\n// It is possible for our customers to give us quality ranges that are\n// impossible to solve for a given video. In these cases, we want to instead\n// use the assets that are closest to satisfying their constraints. For\n// example, if they specify 4k and we only go up to 1080p, it'll use 1080p.\n// Or if they specify a range _between_ two, say 800p to 900p, it'll use the\n// two surrounding values: 720p and 1080p.\nexport const nearestOutsideRange = (assets, lower, upper) => {\n if (assets.length === 0) {\n return [];\n }\n\n const sortedAssets = aps.call(assets).sort((a, b) => {\n return numericSizeSnapped(a.width, a.height) - numericSizeSnapped(b.width, b.height);\n });\n\n let lowerAsset;\n let upperAsset;\n for (let i = 0; i < sortedAssets.length; i++) {\n let asset = sortedAssets[i];\n let assetSize = numericSizeSnapped(asset.width, asset.height);\n if (assetSize < lower) {\n lowerAsset = asset;\n }\n if (assetSize >= upper) {\n upperAsset = asset;\n break;\n }\n }\n\n // get rid of nulls\n const result = [];\n if (lowerAsset) {\n result.push(lowerAsset);\n }\n if (upperAsset) {\n result.push(upperAsset);\n }\n\n // If somehow we didn't end up with any assets, don't fail completely, but\n // let us know.\n if (result.length === 0) {\n wlog.error('nearestOutsideRange: no nearby assets found, using first in list', sortedAssets[0]);\n result.push(sortedAssets[0]);\n }\n\n return result;\n};\n\n// This operates on the array in-place\nexport const moveToFront = (assets, toFront) => {\n if (!toFront) {\n return assets;\n }\n\n let index = -1;\n for (let i = 0; i < assets.length; i++) {\n let asset = assets[i];\n if (asset.url === toFront.url) {\n index = i;\n break;\n }\n }\n\n // If it's -1, it wasn't found. If it's 0, it's already in front.\n if (index > 0) {\n assets.splice(index, 1);\n assets.unshift(toFront);\n }\n\n return assets;\n};\n","import { PublicApi } from '../types/player-api-types.ts';\n\nexport const MUX_PERCENTAGE_TO_ENABLE = 0.1;\n\n/**\n * Whether the current environment provides the `console` methods that mux-embed\n * relies on at module-evaluation time.\n *\n * mux-embed sets up its logger via `console.trace`/`console.info`/`console.debug`\n * as soon as the module is imported (`var q = kt(\"[mux]\")`). In restricted\n * WebKit environments such as Apple Mail's email preview, those methods are\n * undefined, so simply importing wistia-mux.js throws an error\n * @returns {boolean} True if the console methods mux-embed needs are available.\n */\nconst isMuxEnvironmentSupported = (): boolean =>\n typeof console !== 'undefined' &&\n // eslint-disable-next-line no-console\n typeof console.trace === 'function' &&\n // eslint-disable-next-line no-console\n typeof console.info === 'function' &&\n // eslint-disable-next-line no-console\n typeof console.debug === 'function';\n\n/**\n * Determines if Mux should be enabled for an embed based on various conditions.\n * @param {PublicApi} video The embed mux should be enabled for.\n * @param {boolean} didWinCoinFlip Whether or not the embed won the coin flip which determines if Mux should be enabled.\n * @returns {boolean} True if Mux should be enabled, false otherwise.\n */\nexport const shouldEnableMux = (video: PublicApi, didWinCoinFlip: boolean): boolean => {\n const isMuxEnabledInEnvironment = isMuxEnvironmentSupported();\n const isMuxEnabledOnWindow = window.wistiaDisableMux !== true;\n const isMuxEnabledFromOpts = video._opts?.mux !== false;\n const isMuxEnabledFromStandardEmbed = video.iframe == null;\n const isMuxEnabledFromCoinFlip = didWinCoinFlip;\n const isMuxEnabledFromLiveStream = video._mediaData?.type === 'LiveStream';\n\n // Mux should be enabled if all of the following are true:\n // 1. The environment provides the console methods mux-embed needs\n // 3. Mux is not disabled from the embed options\n // 4. Mux is not disabled from the video being an iframe embed\n // 5. Mux is not disabled from the coin flip OR the video is a live stream\n // (Live streams should always have Mux enabled, regardless of the coin flip result)\n return (\n isMuxEnabledInEnvironment &&\n isMuxEnabledOnWindow &&\n isMuxEnabledFromOpts &&\n isMuxEnabledFromStandardEmbed &&\n (isMuxEnabledFromCoinFlip || isMuxEnabledFromLiveStream)\n );\n};\n","import { secondsConverter } from './duration.ts';\n\nconst SECONDS_IN_MINUTE = 60;\n\nexport const secondsToIso8601Duration = (totalSeconds: number): string => {\n const { hours, minutes, seconds } = secondsConverter(totalSeconds, 'hms');\n\n let result = '';\n\n if (hours) {\n result += `${hours}H`;\n }\n\n if (minutes || (totalSeconds > SECONDS_IN_MINUTE && seconds !== 0)) {\n result += `${minutes}M`;\n }\n\n if (seconds || totalSeconds === 0) {\n result += `${seconds}S`;\n }\n\n return result;\n};\n","import { root } from 'utilities/root.js';\nimport { hasPerformanceMeasureSupport } from './performance.ts';\n\nconst na = navigator.userAgent;\n\nlet _playerDetectCache = null;\n\n// ua regexes taken from http://code.jquery.com/jquery-1.6.4.js\nconst rwebkit = /(webkit)[ /]([^\\s]+)/i;\nconst ropera = /OPR\\/([^\\s]+)/i;\nconst redge = /(edge)\\/(\\d+(?:\\.\\d+)?)/i;\nconst rmozilla = /(mozilla)(?:.*? rv:([^\\s)]+))?/i;\n\n// special platform regexes\nconst randroid = /(android) ([^;]+)/i;\nconst riphone = /(iphone)/i;\nconst rwinphone = /(Windows Phone OS (\\d+(?:\\.\\d+)?))/;\nconst rios = /OS (\\d+)_(\\d+)/i;\nconst rfirefox = /(firefox)/i;\nconst rgearvr = /Mobile VR/i;\n\n// Apple keeps their Safari version the same as their iOS version\n// (with the exception being that they occasionally release the new safari\n// slightly before the new iOS is available)\nconst riosVersion = /Version\\/([^\\s]+)/i;\n\nconst browser = () => {\n return (browserMatch()[1] || 'webkit').toLowerCase();\n};\n\nconst browserVersion = () => {\n return browserMatch()[2];\n};\n\nconst browserMatch = () => {\n let match;\n\n match = na.match(redge);\n if (match) {\n return match;\n }\n\n match = na.match(rwebkit);\n if (match) {\n return match;\n }\n\n match = na.match(ropera);\n if (match) {\n return match;\n }\n\n if (match) {\n if (document.documentMode != null) {\n match[2] = document.documentMode;\n }\n return match;\n }\n\n match = na.match(rmozilla);\n if (match) {\n return match;\n }\n\n return [];\n};\n\n// return false if not android, version info if android\nconst android = () => {\n const matches = na.match(randroid);\n if (matches == null) {\n return false;\n }\n return { version: matches[2] };\n};\n\nconst oldandroid = () => {\n return android() && parseFloat(android().version) < 4.1;\n};\n\nconst iphone = () => {\n return riphone.test(na);\n};\n\nconst touchScreen = () => {\n return iosVersion() > 0 || android() || ipad();\n};\n\nconst HDRCodecSupport = () => {\n return {\n hevc: window.MediaSource?.isTypeSupported?.('video/mp4; codecs=\"hvc1.2.4.L153.B0\"') ?? false, // // HEVC Main10\n av1:\n window.MediaSource?.isTypeSupported?.('video/mp4; codecs=\"av01.0.08M.10.0.110.09.16.09\"') ??\n false, // AV1 10-bit Main, PQ (HDR10)\n vp92:\n window.MediaSource?.isTypeSupported?.('video/mp4; codecs=\"vp09.02.10.10.01.09.16.09\"') ??\n false, // // VP9 Profile 2 (10-bit)\n };\n};\n\nconst HDRSupported = () => {\n if (window.matchMedia?.('(dynamic-range: high)').matches) {\n return true; // modern Safari, Chrome\n }\n\n // Unfortunately, many screens that support HDR may still report a colorDepth of 24. But if screen only reports\n // 24 and doesn't support `matchMedia` there is no way to tell if the screen supports HDR or not.\n if (screen.colorDepth && screen.colorDepth >= 30) {\n return true; // legacy hint or Firefox fallback\n }\n\n return false;\n};\n\nconst hoverIsNatural = () => {\n // The (hover: hover) query matches when two conditions are met:\n //\n // 1. hover is supported\n // 2. hover is easy to access for the user based on their primary input device\n //\n // So for example, when the user’s primary input is touch, this returns false\n // even though hover interactions are technically supported.\n //\n // If matchMedia is unsupported or the hover query is unsupported, we fall\n // back on returning the heuristic check for iOS or Android. If it is true,\n // we assume hover is not natural. This can produce false negatives and false\n // positives, but most agents support the hover query.\n //\n // This is an alternative to using touchScreen() when deciding whether to\n // attach enter/leave mouse event handlers based on hover capability.\n\n try {\n const mediaQueryList = matchMedia('(hover:hover)');\n\n if (mediaQueryList.media !== 'not all') {\n return mediaQueryList.matches;\n }\n } catch (err) {\n // feature detection: swallow errors.\n }\n\n return !touchScreen();\n};\n\nconst retina = () => {\n return root.devicePixelRatio != null && root.devicePixelRatio > 1;\n};\n\nconst ipad = () => {\n return (\n /Macintosh/i.test(navigator.userAgent) &&\n navigator.maxTouchPoints &&\n navigator.maxTouchPoints > 1\n );\n};\n\nconst safari = () => {\n return rwebkit.test(na) && !/chrome/i.test(na) && !ipad() && !iphone();\n};\n\nconst chrome = () => {\n if (/Chrome/.test(na) && /Google Inc/.test(navigator.vendor)) {\n return { version: chromeVersion() };\n }\n return false;\n};\n\nconst silkVersion = () => {\n const match = na.match(/\\bSilk\\/([^\\s]+)/);\n return match && match[1];\n};\n\nconst chromeVersion = () => {\n const match = na.match(/\\bChrome\\/([^\\s]+)/);\n return match && match[1];\n};\n\nconst opera = () => {\n return ropera.test(na);\n};\n\nconst iosVersion = () => {\n const iosMatch = na.match(rios);\n const versionMatch = na.match(riosVersion);\n\n if (iosMatch != null) {\n return parseFloat(`${iosMatch[1]}.${iosMatch[2]}`);\n }\n if (versionMatch != null && versionMatch[1] && ipad()) {\n // to get the version of an ipad that is reporting as a Mac in its\n // user agent, we can rely on the Version part of the ua to be\n // fairly certain\n return parseFloat(versionMatch[1]);\n }\n return 0;\n};\n\nconst windowsPhone = () => {\n return rwinphone.test(na);\n};\n\nconst edge = () => {\n return redge.test(na);\n};\n\nconst firefox = () => {\n return rfirefox.test(na);\n};\n\nconst gearvr = () => {\n return rgearvr.test(na);\n};\n\nconst windows = () => {\n return /win/i.test(navigator.platform);\n};\n\nconst mac = () => {\n return /mac/i.test(navigator.platform);\n};\n\n// modified slightly from http://www.modernizr.com/downloads/modernizr-2.0.6.js\nconst html5Video = () => {\n const elem = document.createElement('video');\n let result = false;\n\n // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n try {\n if (elem.canPlayType) {\n result = {};\n // Workaround required for IE9, which doesn't report video support without audio codec specified.\n // bug 599718 @ msft connect\n const h264 = 'video/mp4; codecs=\"avc1.42E01E';\n result.h264 = !!elem.canPlayType(`${h264}\"`) || !!elem.canPlayType(`${h264}, mp4a.40.2\"`);\n result.webm = !!elem.canPlayType('video/webm; codecs=\"vp9, vorbis\"');\n result.nativeHls = !!elem.canPlayType('application/vnd.apple.mpegURL');\n }\n } catch (e) {\n result = {\n ogg: false,\n h264: false,\n webm: false,\n nativeHls: false,\n };\n }\n return result;\n};\n\nconst mediaSource = () => {\n const h264 = 'video/mp4; codecs=\"avc1.42E01E';\n return root.MediaSource && root.MediaSource.isTypeSupported(`${h264}, mp4a.40.2\"`);\n};\n\nconst nativeHls = () => {\n return (iphone() || ipad() || safari()) && html5Video().nativeHls;\n};\n\nconst localStorage = () => {\n try {\n return 'localStorage' in root && root.localStorage != null;\n } catch (e) {\n return false;\n }\n};\n\nconst fullscreenEnabled = () => {\n return (\n document.fullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.msFullscreenEnabled\n );\n};\n\nconst managedMediaSource = () => {\n return (\n 'ManagedMediaSource' in window &&\n typeof window.ManagedMediaSource?.isTypeSupported === 'function'\n );\n};\n\nconst browserPrefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\nconst mutationObserver = () => {\n for (let i = 0; i < browserPrefixes.length; i++) {\n let prefix = browserPrefixes[i];\n let prop = `${prefix}MutationObserver`;\n if (root[prop]) {\n return prop;\n }\n }\n return null;\n};\n\nconst vulcanV2Support = () => {\n const modernBrowser = /webkit|mozilla|edge/.test(browser());\n\n if (iphone() || ipad() || android()) {\n return true;\n }\n\n return Boolean(modernBrowser && html5Video().h264 && Object.defineProperties);\n};\n\nlet isPassiveSupported;\nconst passiveSupported = () => {\n if (isPassiveSupported != null) {\n return isPassiveSupported;\n }\n try {\n const options = Object.defineProperty({}, 'passive', {\n /* eslint-disable-next-line getter-return */\n get() {\n isPassiveSupported = true;\n },\n });\n\n window.addEventListener('test', null, options);\n } catch (err) {\n isPassiveSupported = false;\n }\n return isPassiveSupported;\n};\n\nexport const callingPlayRequiresEventContext = () => {\n return iosVersion() > 0 || android() || safari();\n};\n\n// https://caniuse.com/#search=webp\n// use user-agent for browser and version webp detection\n// we're opting for this over a feature detection mechanism so that our detection\n// can be as fast and synchronous as possible. Doing an async feature detection\n// occasionally resulted in false negatives.\nexport const webp = () => {\n const chromeBrowser = chrome();\n const firefoxBrowser = firefox();\n const edgeBrowser = edge();\n const operaBrowser = opera();\n\n const isChromeDesktopSupported = chromeBrowser && browserVersion() >= 32;\n const isChromeAndroidSupported = chromeBrowser && browserVersion() >= 75 && android();\n const isFirefoxDesktopSupported = firefoxBrowser && browserVersion() >= 65;\n const isFirefoxAndroidSupported = firefoxBrowser && browserVersion() >= 67 && android();\n const isEdgeSupported = edgeBrowser && browserVersion() >= 18;\n const isOperaSupported = operaBrowser && browserVersion() >= 19;\n\n return (\n isChromeDesktopSupported ||\n isChromeAndroidSupported ||\n isFirefoxDesktopSupported ||\n isFirefoxAndroidSupported ||\n isEdgeSupported ||\n isOperaSupported\n );\n};\n\nexport const cachedDetect = () => {\n if (_playerDetectCache) {\n // Allow this to be cached globally so it's not executed once every time\n // it's imported.\n return _playerDetectCache;\n }\n\n _playerDetectCache = uncachedDetect();\n return _playerDetectCache;\n};\n\nexport const uncachedDetect = () => {\n const result = {\n browser: {\n version: browserVersion(),\n },\n edge: edge(),\n firefox: firefox(),\n gearvr: gearvr(),\n hdr: HDRSupported(),\n hdrCodecs: HDRCodecSupport(),\n android: android(),\n oldandroid: oldandroid(),\n iphone: iphone(),\n ipad: ipad(),\n safari: safari(),\n chrome: chrome(),\n winphone: { version: windowsPhone()[2] },\n ios: { version: iosVersion() },\n windows: windows(),\n mac: mac(),\n retina: retina(),\n hoverIsNatural: hoverIsNatural(),\n touchScreen: touchScreen(),\n video: html5Video(),\n managedMediaSource: managedMediaSource(),\n mediaSource: mediaSource(),\n nativeHls: nativeHls(),\n localstorage: localStorage(),\n fullscreenEnabled: fullscreenEnabled(),\n vulcanV2Support: vulcanV2Support(),\n mutationObserver: mutationObserver(),\n callingPlayRequiresEventContext: callingPlayRequiresEventContext(),\n passiveSupported: passiveSupported(),\n webp: webp(),\n performanceMeasure: hasPerformanceMeasureSupport(),\n };\n\n result.browser[browser()] = true;\n\n return result;\n};\n\nexport const clearDetectCache = () => {\n _playerDetectCache = null;\n};\n\n// Starting a migration away from cachedDetect in the wistia-player web component\n// Based on https://github.com/wistia/player-modern/blob/main/docs/ifaq.md#whats-the-deal-with-cacheddetect-and-why-do-we-also-assign-the-result-of-it\nexport const detectIsMobile = () => {\n const isAndroid = android();\n const isIPad = ipad();\n const isIPhone = iphone();\n\n return isAndroid || isIPad || isIPhone;\n};\n","const MAX_RANDOM_VALUE = 0xffffffff;\n\n/**\n * Simulates a coin flip with a given percentage to win\n * @param percentToWinCoinFlip - Number between 0 and 1 representing the percentage to win the coin flip\n * @returns boolean - True if the coin flip was won, false otherwise\n */\nexport const didWinCoinFlip = (percentToWinCoinFlip: number): boolean => {\n const cryptoObj = window.crypto;\n if (typeof cryptoObj !== 'undefined') {\n const cryptoRandom = cryptoObj.getRandomValues(new Uint32Array(1));\n return cryptoRandom[0] / (MAX_RANDOM_VALUE + 1) < percentToWinCoinFlip;\n }\n\n const mathRandom = Math.random();\n return mathRandom >= percentToWinCoinFlip;\n};\n","export type GradientColor = [string, number]; // [color, percentage]\n\nexport type Gradient = {\n colors: GradientColor[];\n on: boolean;\n};\n\n// Gradients can get into this state if the hex code for the color is a numeric\n// string and it gets casted to a number.\nexport type GradientMaybeWithColorsAsNumbers = {\n colors: [number | string, number][];\n on: boolean;\n};\n\nexport const isGradient = (value: unknown): value is Gradient => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const { colors, on } = value as Gradient;\n\n if (!on) {\n return true;\n }\n\n if (!Array.isArray(colors) || typeof on !== 'boolean') {\n return false;\n }\n\n if (colors.length === 0) {\n return false;\n }\n\n return colors.every((color) => {\n return typeof color[0] === 'string' && typeof color[1] === 'number';\n });\n};\n","import {\n getLocalStorage,\n removeLocalStorage,\n updateLocalStorage,\n} from 'utilities/namespacedLocalStorage.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nexport const deleteViewerPreferences = () => {\n removeLocalStorage(getLocalStorageKey());\n};\n\nconst getLocalStorageKey = () => {\n return 'wistia-viewer-preferences';\n};\n\nexport const getViewerPreferences = () => {\n // if viewer preferences are disabled, return an empty object\n if (Wistia._viewerPreferencesEnabled === false) {\n return {};\n }\n\n return getLocalStorage(getLocalStorageKey());\n};\n\nexport const getViewerPreference = (preference) => {\n const preferences = getViewerPreferences();\n\n if (!preferences) {\n return null;\n }\n\n return preferences[preference];\n};\n\nexport const setViewerPreference = (preference, value) => {\n // delete the plugin property. fix for captions setting plugin.captions-v1 - which caused a bug\n // as when captions was getting enabled. This can be removed after a couple\n // of weeks or so\n updateLocalStorage(getLocalStorageKey(), (obj) => {\n if (obj.plugin) {\n delete obj.plugin;\n }\n\n obj[preference] = value;\n });\n};\n","import { isObject, isArray, merge } from 'utilities/obj.js';\nimport { isDocReady, onDocReady } from 'utilities/docReady.js';\nimport { pageLoaded } from 'utilities/pageLoaded.js';\nimport { cachedDetect } from 'utilities/detect.js';\nimport { wlog } from 'utilities/wlog.js';\nimport { elemOffset, elemZoom, isBoxModel } from 'utilities/elemOffset.js';\nimport { execScriptTags, getScriptTags, removeScriptTags } from 'utilities/script-tags.js';\nimport { seqId } from 'utilities/seqid.js';\nimport { Wistia } from '../wistia_namespace.ts';\n\nconst W = Wistia;\nconst detect = cachedDetect();\n\nexport { isDocReady, onDocReady };\nexport { pageLoaded };\nexport { execScriptTags, getScriptTags, removeScriptTags };\nexport { elemOffset, elemZoom, isBoxModel };\n\nexport const elemHtml = (elem, content) => {\n const cssTags = getCssTags(content);\n const scriptTags = getScriptTags(content);\n content = removeCssTags(content);\n content = removeScriptTags(content);\n\n elem.innerHTML = content;\n execCssTags(cssTags, elem);\n\n // these script tags will be removed in short order as part of the script\n // loader\n return execScriptTags(scriptTags);\n};\n\nexport const getCssTags = (htmlStr) => {\n return htmlStr.match(/<link.*?rel=['\"]stylesheet['\"][^>]*>|<style>[\\s\\S]+?<\\/style>/gi) || [];\n};\n\nexport const execCssTags = (cssTags, parentElem) => {\n if (!cssTags) {\n return null;\n }\n\n if (!isArray(cssTags)) {\n cssTags = getCssTags(cssTags);\n }\n const inserted = [];\n for (let i = 0; i < cssTags.length; i++) {\n let cssTag = cssTags[i];\n if (/<link.*?rel=['\"]stylesheet['\"][^>]*>/.test(cssTag)) {\n const matches = cssTag.match(/href=['\"](.*?)['\"]/i);\n if (matches) {\n let link = document.createElement('link');\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('href', matches[1]);\n link.className = 'wistia_injected_style';\n (parentElem || document.body || document.head).appendChild(link);\n inserted.push(link);\n }\n } else if (/<style>[\\s\\S]+?<\\/style>/gi.test(cssTag)) {\n const matches = cssTag.match(/<style>([\\s\\S]+?)<\\/style>/i);\n if (matches) {\n let style = addInlineCss(parentElem || document.body || document.head, matches[1]);\n inserted.push(style);\n }\n }\n }\n return inserted;\n};\n\nexport const removeCssTags = (htmlStr) => {\n return htmlStr.replace(/<link.*?rel=['\"]stylesheet['\"][^>]*>|<style>[\\s\\S]+?<\\/style>/gi, '');\n};\n\nexport const addInlineCss = (domTarget, css) => {\n const target = domTarget || document.body || document.head;\n\n const styleElem = document.createElement('style');\n styleElem.id = seqId('wistia_', '_style');\n styleElem.setAttribute('type', 'text/css');\n styleElem.className = 'wistia_injected_style';\n target.appendChild(styleElem, target.nextSibling);\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css;\n } else {\n styleElem.appendChild(document.createTextNode(css));\n }\n return styleElem;\n};\n\nexport const elemFromObject = (obj) => {\n if (isArray(obj)) {\n let result = [];\n for (let i = 0; i < obj.length; i++) {\n result.push(elemFromObject(obj[i]));\n }\n return result;\n }\n\n const tagName = obj.tagName || 'div';\n let childNodes = obj.childNodes || [];\n if (!isArray(childNodes)) {\n childNodes = [childNodes];\n }\n\n const elem = document.createElement(tagName);\n\n for (let key in obj) {\n if (Object.hasOwn(obj, key)) {\n let val = obj[key];\n if (key !== 'childNodes' && key !== 'tagName' && key !== 'ref') {\n let dashedKey = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n if (key === 'style') {\n if (isObject(val)) {\n for (let p in val) {\n elem.style[p] = val[p];\n }\n } else {\n // setAttribute('style', ...) only works in IE8+, so parse inline\n // styles if it's passed in as a string.\n let styles = val.split(';');\n for (let i = 0; i < styles.length; i++) {\n let pair = styles[i].split(/\\s*:\\s*/);\n let p = pair[0];\n let v = pair[1];\n if (p && v) {\n elem.style[p] = v;\n }\n }\n }\n } else if (key === 'events') {\n for (let evt in val) {\n let callback = val[evt];\n elemBind(elem, evt, callback);\n }\n } else if (key === 'className' || key === 'class') {\n elem.className = val;\n } else if (key === 'innerHTML') {\n elem.innerHTML = val;\n } else if (key === 'innerText') {\n elem.innerText = val;\n } else if (val != null && typeof val.toString === 'function') {\n elem.setAttribute(dashedKey, val.toString());\n }\n }\n }\n }\n\n for (let i = 0; i < childNodes.length; i++) {\n let childObj = childNodes[i];\n if (isObject(childObj)) {\n let child = elemFromObject(childObj);\n elemAppend(elem, child);\n } else {\n let child = document.createTextNode(childObj.toString());\n elemAppend(elem, child);\n }\n }\n\n if (typeof obj.ref === 'function') {\n obj.ref(elem);\n }\n\n return elem;\n};\n\nexport const elemToObject = (elem) => {\n if (isArray(elem)) {\n let result = [];\n for (let i = 0; i < elem.length; i++) {\n result.push(elemToObject(elem[i]));\n }\n }\n\n const result = {};\n result.tagName = elem.tagName.toLowerCase();\n\n const elemKeys = Object.keys(elem);\n for (let i = 0; i < elemKeys.length; i++) {\n let attr = elemKeys[i];\n if (\n attr !== 'tagName' &&\n attr !== 'childNodes' &&\n attr !== 'nodeType' &&\n attr !== 'nodeValue'\n ) {\n if (attr === 'style') {\n result.style = {};\n let styleKeys = Object.keys(elem.style);\n for (let j = 0; j < styleKeys.length; j++) {\n let prop = styleKeys[j];\n const val = elem.style[prop];\n if (val && !/^\\d/.test(prop) && prop !== 'length') {\n result.style[prop] = val;\n }\n }\n } else {\n const value = elem.getAttribute(attr);\n if (value != null) {\n result[attr] = value;\n }\n }\n }\n }\n\n let children = [];\n for (let i = 0; i < elem.childNodes.length; i++) {\n let child = elem.childNodes[i];\n if (child.nodeType === 1) {\n children.push(elemToObject(child));\n } else if (child.nodeType === 3) {\n children.push(child.nodeValue);\n }\n }\n if (children.length > 0) {\n result.childNodes = children;\n }\n return result;\n};\n\nexport const elemClone = (elem) => {\n const obj = elemToObject(elem);\n return elemFromObject(obj);\n};\n\nexport const elemAppend = (par, elem) => {\n if (isArray(elem)) {\n for (let i = 0; i < elem.length; i++) {\n elemAppend(par, elem[i]);\n }\n return;\n }\n\n if (par.tagName.includes('-')) {\n par.shadowRoot.appendChild(elem, { wistiaGridCaller: true });\n } else {\n par.appendChild(elem, { wistiaGridCaller: true });\n }\n};\n\nexport const elemPrepend = (par, elem) => {\n if (isArray(elem)) {\n for (let i = 0; i < elem.length; i++) {\n elemPrepend(par, elem[i]);\n }\n return;\n }\n\n if (par.childNodes.length === 0) {\n return elemAppend(par, elem);\n }\n return par.insertBefore(elem, par.childNodes[0]);\n};\n\nexport const elemBefore = (sibling, elem) => {\n if (isArray(elem)) {\n elem = elem.reverse();\n for (let i = 0; i < elem.length; i++) {\n elemBefore(sibling, elem[i]);\n }\n return;\n }\n\n return sibling.parentNode.insertBefore(elem, sibling);\n};\n\nexport const elemAfter = (sibling, elem) => {\n if (isArray(elem)) {\n elem = elem.reverse();\n for (let i = 0; i < elem.length; i++) {\n elemAfter(sibling, elem[i]);\n }\n return;\n }\n\n return sibling.parentNode.insertBefore(elem, sibling.nextSibling);\n};\n\nexport const elemRemove = (elem) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n for (let i = 0; i < elem.length; i++) {\n elemRemove(elem[i]);\n }\n return;\n }\n\n let par;\n if (elem != null && (elem.nodeType === 1 || elem.nodeType === 3) && (par = elem.parentNode)) {\n par.removeChild(elem);\n elem = null;\n }\n};\n\nexport const elemRemoveClass = (elem, klass) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n for (let i = 0; i < elem.length; i++) {\n elemRemoveClass(elem[i], klass);\n }\n return;\n }\n\n if (!elemHasClass(elem, klass)) {\n return;\n }\n\n let className = elem.getAttribute('class');\n if (className) {\n const regexp = new RegExp(`\\\\b${klass}\\\\b`, 'g');\n const newClassString = normalizeClassName(className.replace(regexp, ''));\n elem.setAttribute('class', newClassString);\n }\n};\n\nexport const elemAddClass = (elem, klass) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n for (let i = 0; i < elem.length; i++) {\n elemAddClass(elem[i], klass);\n }\n return;\n }\n\n if (elemHasClass(elem, klass)) {\n return;\n }\n\n let className = elem.getAttribute('class');\n let newClassString;\n if (className) {\n elemRemoveClass(elem, klass);\n newClassString = normalizeClassName(`${className} ${klass}`);\n } else {\n newClassString = klass;\n }\n\n elem.setAttribute('class', newClassString);\n};\n\n// Longer than ` ${elem.className} `.indexOf(` ${klass} `) >= 0, but doesn't\n// cause JIT code deoptimization in Chrome.\nexport const elemHasClass = (elem, klass) => {\n let className =\n elem != null && typeof elem.getAttribute === 'function' && elem.getAttribute('class');\n if (!className && elem && typeof elem.className === 'string') {\n className = elem.className;\n }\n\n if (!className) {\n return false;\n }\n\n let returnValue = false;\n\n eachIndexOf(className, klass, (index) => {\n let classBeginningFound = index === 0 || className.charAt(index - 1) === ' ';\n let endsWidthClass = index + klass.length === className.length;\n let classInMiddle = className.charAt(index + klass.length) === ' ';\n\n if (classBeginningFound && (endsWidthClass || classInMiddle)) {\n returnValue = true;\n return BREAK_IDENTIFIER;\n }\n });\n\n return returnValue;\n};\n\nconst BREAK_IDENTIFIER = {};\nconst eachIndexOf = (str, needle, fn) => {\n let i = -1;\n\n while ((i = str.indexOf(needle, i + 1)) != -1) {\n if (fn(i) === BREAK_IDENTIFIER) {\n break;\n }\n }\n};\n\nexport const elemClasses = (elem) => {\n if (elem && typeof elem.className !== 'string') {\n // Sometimes, className doesn't return a string. Who knew?!\n // https://wistia.zendesk.com/agent/tickets/196879\n return [''];\n }\n return ((elem && elem.className) || '').split(/\\s+/);\n};\n\nconst normalizeClassName = (className) => {\n return className.replace(/^\\s+/g, '').replace(/\\s+$/g, '').replace(/\\s+/g, ' ');\n};\n\nexport const elemStyle = (elem, ...args) => {\n if (isArray(elem) || (window.NodeList && elem instanceof NodeList)) {\n let result = [];\n for (let i = 0; i < elem.length; i++) {\n let node = elem[i];\n if (node.nodeType === 1) {\n result.push(elemStyle(node, ...args));\n }\n }\n return result;\n }\n if (args.length === 2) {\n let prop = args[0];\n let val = args[1];\n elem.style[prop] = val;\n } else if (args.length === 1) {\n if (typeof args[0] === 'string') {\n let prop = args[0];\n try {\n if (elem.currentStyle) {\n return elem.currentStyle[prop];\n }\n if (window.getComputedStyle) {\n return window.getComputedStyle(elem, null).getPropertyValue(prop);\n }\n return null;\n } catch (e) {\n wlog.notice(e);\n }\n } else {\n let props = propsWithVendorPrefixes(args[0]);\n for (let prop in props) {\n let val = props[prop];\n elem.style[prop] = val;\n }\n }\n } else {\n wlog('Unexpected args', elem, ...args);\n }\n};\n\nconst VENDORED_PROPERTIES = {\n borderImage: true,\n mixBlendMode: true,\n transform: true,\n transition: true,\n transitionDuration: true,\n};\n\nconst VENDOR_PREFIXES = ['webkit', 'moz', 'o', 'ms'];\n\nexport const propsWithVendorPrefixes = (props) => {\n if (detect.chrome) {\n return props;\n }\n\n const result = {};\n for (let prop in props) {\n let val = props[prop];\n result[prop] = val;\n if (VENDORED_PROPERTIES[prop]) {\n let prefixes = VENDOR_PREFIXES;\n for (let i = 0; i < prefixes.length; i++) {\n let prefix = prefixes[i];\n let prefixedProp = prefix + prop.charAt(0).toUpperCase() + prop.slice(1);\n if (!prop[prefixedProp]) {\n result[prefixedProp] = val;\n }\n }\n }\n }\n return result;\n};\n\nexport const getComputedStyle = (elem, prop) => {\n if (!window.getComputedStyle) {\n return null;\n }\n const computed = window.getComputedStyle(elem, null);\n if (computed == null) {\n return null;\n }\n if (prop != null) {\n return computed[prop];\n }\n return computed;\n};\n\nexport const elemWidth = (elem) => {\n if (elem === window) {\n if (window.innerWidth) {\n return window.innerWidth;\n }\n if (document.documentElement) {\n return document.documentElement.offsetWidth;\n }\n return document.body.offsetWidth;\n }\n if (elem === document) {\n const body = document.body;\n const html = document.documentElement;\n return Math.max(\n body.scrollWidth,\n body.offsetWidth,\n html.clientWidth,\n html.scrollWidth,\n html.offsetWidth,\n );\n }\n let val;\n if ((val = getComputedStyle(elem, 'width')) && val != null) {\n return parseFloat(val);\n }\n if (elem.currentStyle) {\n return elem.offsetWidth;\n }\n return -1;\n};\n\nexport const elemHeight = (elem) => {\n if (elem === window) {\n if (window.innerHeight) {\n return window.innerHeight;\n }\n if (document.documentElement) {\n return document.documentElement.offsetHeight;\n }\n return document.body.offsetHeight;\n }\n if (elem === document) {\n const body = document.body;\n const html = document.documentElement;\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight,\n );\n }\n let val;\n if ((val = getComputedStyle(elem, 'height')) && val != null) {\n return parseFloat(val);\n }\n if (elem.currentStyle) {\n return elem.offsetHeight;\n }\n return -1;\n};\n\nexport const elemContainsOffset = (elem, left, top) => {\n let offset = elemOffset(elem);\n offset.right = offset.left + elemWidth(elem);\n offset.bottom = offset.top + elemHeight(elem);\n return offset.left <= left && left < offset.right && offset.top <= top && top < offset.bottom;\n};\n\nexport const elemScrollOffset = (elem) => {\n let curLeft = 0;\n let curTop = 0;\n if (elem.parentNode) {\n while (elem && elem.offsetParent) {\n curTop += elem.scrollTop;\n curLeft += elem.scrollLeft;\n elem = elem.parentNode;\n }\n }\n return {\n left: curLeft,\n top: curTop,\n };\n};\n\nexport const elemIsHidden = (elem) => {\n while (elem && elem.nodeType === 1) {\n if (elemStyle(elem, 'display') === 'none') {\n return true;\n }\n elem = elem.parentNode;\n }\n\n return false;\n};\n\n// Like elemIsHidden but complete: also treats visibility hidden/collapse as\n// hidden, reads computed styles rather than inline ones, and follows the walk\n// out of shadow roots into the host so an element inside a hidden web\n// component reports hidden.\nexport const elemIsHiddenByStyle = (elem) => {\n const view = elem.ownerDocument.defaultView;\n if (!view) {\n return false;\n }\n let node = elem;\n while (node) {\n const { display, visibility } = view.getComputedStyle(node);\n if (display === 'none' || visibility === 'hidden' || visibility === 'collapse') {\n return true;\n }\n const root = node.getRootNode();\n node = node.parentElement || (root instanceof ShadowRoot ? root.host : null);\n }\n return false;\n};\n\nexport const elemInDom = (elem) => {\n while (elem) {\n if (elem === document) {\n return true;\n }\n const parent = elem.parentNode;\n if (parent != null) {\n elem = parent;\n } else if (typeof elem.getRootNode === 'function') {\n elem = elem.getRootNode()?.host;\n } else {\n return false;\n }\n }\n return false;\n};\n\n// Returns the truly focused element, descending through any number of nested\n// shadow roots. document.activeElement only reports the active element within\n// its own tree scope; when focus lives inside a (possibly nested) shadow DOM —\n// e.g. a <wistia-player> nested inside another web component — it reports the\n// outermost host. Walking activeElement through each shadowRoot gives us the\n// real leaf element so containment checks work regardless of nesting depth.\nexport const getDeepActiveElement = (root = document) => {\n let active = root.activeElement;\n while (active?.shadowRoot?.activeElement) {\n active = active.shadowRoot.activeElement;\n }\n return active;\n};\n\nexport const elemIsDescendantOf = (elem, target) => {\n let ancestors = elemAncestors(elem);\n for (let i = 0; i < ancestors.length; i++) {\n if (ancestors[i] === target) {\n return true;\n }\n }\n return false;\n};\n\nexport const elemAncestorWithClass = (elem, klass) => {\n let ancestors = elemAncestors(elem);\n for (let i = 0; i < ancestors.length; i++) {\n if (elemHasClass(ancestors[i], klass)) {\n return ancestors[i];\n }\n }\n return null;\n};\n\nexport const elemAncestorHasClass = (elem, klass) => {\n const ancestor = elemAncestorWithClass(elem, klass);\n return !!ancestor;\n};\n\nexport const elemAncestors = (elem) => {\n let current = elem;\n const result = [];\n while ((current = current.parentNode)) {\n result.push(current);\n }\n return result;\n};\n\nexport const elemIsInside = (elem, ancestor) => {\n return elem === ancestor || elemIsDescendantOf(elem, ancestor);\n};\n\nconst getTransitionProp = (props, time, easing) => {\n const result = [];\n for (let prop in props) {\n result.push(`${prop} ${time}ms ${easing}`);\n }\n return result.join(',');\n};\n\nexport const elemAnimate = (elem, props = {}, options = {}) => {\n options = merge({ time: 400, easing: 'ease' }, options);\n\n const transitions = getTransitionProp(props, options.time, options.easing);\n elemStyle(elem, { transition: transitions });\n\n safeRequestAnimationFrame(() => {\n elemStyle(elem, props);\n setTimeout(() => {\n elemStyle(elem, { transition: '' });\n if (typeof options.callback === 'function') {\n options.callback();\n }\n }, options.time);\n });\n};\n\nexport const elemBind = (elem, event, fn, useCapture = false) => {\n const eventShim = (e, ...args) => {\n e = e || window.event;\n\n // Normalize pageX, pagey\n if (!e.pageX && !e.pageY && (e.clientX || e.clientY)) {\n e.pageX = e.clientX + docScrollLeft();\n e.pageY = e.clientY + docScrollTop();\n }\n\n // Normalize preventDefault\n if (!e.preventDefault) {\n e.preventDefault = function () {\n e.returnValue = false;\n };\n }\n\n // Normalize stopPropagation\n if (!e.stopPropagation) {\n e.stopPropagation = function () {\n e.cancelBubble = true;\n };\n }\n\n // Normalize `which`\n if (e.which == null) {\n e.which = e.charCode != null ? e.charCode : e.keyCode;\n }\n if (e.which == null && e.button != null) {\n if (e.button & 1) {\n e.which = 1; // left\n } else if (e.button & 2) {\n e.which = 3; // right\n } else if (e.button & 4) {\n e.which = 2; // middle\n } else {\n e.which = 0; // no button pressed\n }\n }\n\n // Normalize `target`\n if (e.target) {\n // perfect\n } else if (e.srcElement) {\n e.target = e.srcElement;\n }\n if (e.target && e.target.nodeType === 3) {\n e.target = e.target.parentNode;\n }\n\n // Actually call the function\n const result = fn.apply(e.target, [e].concat(args));\n\n // Sweet anonymous unbinding logic\n if (result === elemUnbind) {\n elemUnbind(elem, event, fn);\n }\n\n return result;\n };\n\n Wistia._elemBind = Wistia._elemBind || {};\n const key = elemBindKey(elem, event, fn);\n Wistia._elemBind[key] = eventShim;\n\n // Set the elem/event property so we can unbind all for the elem\n eventShim.elem = elem;\n eventShim.event = event;\n\n elem.addEventListener(event, eventShim, useCapture);\n return function () {\n elemUnbind(elem, event, fn, useCapture);\n };\n};\n\nexport const elemUnbind = (elem, event, fn, useCapture = false) => {\n if (!(elem != null && elem._wistiaElemId != null && fn != null && fn._wistiaBindId)) {\n return;\n }\n const key = elemBindKey(elem, event, fn);\n const eventShim = Wistia._elemBind[key];\n if (eventShim) {\n elem.removeEventListener(event, eventShim, useCapture);\n eventShim.elem = null;\n eventShim.event = null;\n }\n return delete Wistia._elemBind[key];\n};\n\nexport const elemUnbindAll = (elem) => {\n for (let key in Wistia._elemBind) {\n let eventShim = Wistia._elemBind[key];\n if (eventShim && elem === eventShim.elem) {\n let event = eventShim.event;\n eventShim.elem.removeEventListener(event, eventShim, false);\n eventShim.elem = null;\n eventShim.event = null;\n delete Wistia._elemBind[key];\n }\n }\n};\n\nexport const elemUnbindAllInside = (container) => {\n let count = 0;\n for (let key in Wistia._elemBind) {\n let eventShim = Wistia._elemBind[key];\n if (eventShim && elemIsInside(eventShim.elem, container)) {\n let event = eventShim.event;\n eventShim.elem.removeEventListener(event, eventShim, false);\n eventShim.elem = null;\n eventShim.event = null;\n delete Wistia._elemBind[key];\n count += 1;\n }\n }\n\n return count;\n};\n\nexport const elemBindKey = (elem, event, fn) => {\n elem._wistiaElemId = elem._wistiaElemId || seqId('wistia_elem_');\n fn._wistiaBindId = fn._wistiaBindId || seqId('wistia_bind_');\n return `${elem._wistiaElemId}.${event}.${fn._wistiaBindId}`;\n};\n\nexport const elemRebind = (elem, event, fn) => {\n if (fn) {\n elemUnbind(elem, event, fn);\n return elemBind(elem, event, fn);\n }\n};\n\nexport const elemBindOnce = (elem, event, fn) => {\n const wrap = function (...args) {\n fn.apply(this, args);\n return elemUnbind;\n };\n return elemBind(elem, event, wrap);\n};\n\nexport const elemTrigger = (elem, event, ...customArguments) => {\n if (elem.dispatchEvent) {\n const eventObj = document.createEvent('Events');\n eventObj.initEvent(event, true, false);\n if (event === 'click' || event === 'doubleclick') {\n eventObj.which = 1;\n } else if (event === 'rightclick') {\n eventObj.which = 2;\n }\n eventObj.customArguments = customArguments;\n return elem.dispatchEvent(eventObj);\n }\n if (elem.fireEvent) {\n const eventObj = { customArguments };\n return elem.fireEvent(`on${event}`, eventObj);\n }\n wlog.error('neither dispatchEvent nor fireEvent is defined for', elem, event);\n};\n\nexport const fullscreenElement = () => {\n return document.fullscreenElement || document.webkitFullscreenElement;\n};\n\nexport const elemRequestFullscreen = (elem) => {\n try {\n if (elem.requestFullscreen && document.fullscreenEnabled) {\n return elem.requestFullscreen().catch((error) => {\n wlog.notice('requestFullscreen failed', error);\n return Promise.reject(error);\n });\n }\n\n if (elem.webkitEnterFullscreen) {\n if (elem.readyState !== undefined && elem.readyState < HTMLMediaElement.HAVE_METADATA) {\n const errorMessage = 'webkitEnterFullscreen requires at least HAVE_METADATA readyState';\n wlog.notice(errorMessage);\n return Promise.reject(new Error(errorMessage));\n }\n // WebKit throws InvalidStateError if fullscreen isn't currently\n // possible (no video track, fullscreen restrictions, expired user\n // gesture), even when metadata has loaded. webkitSupportsFullscreen\n // reflects that exact internal check. It's undefined on non-video\n // elements, so only an explicit false blocks the call.\n if (elem.webkitSupportsFullscreen === false) {\n const errorMessage = 'webkitEnterFullscreen is not currently supported for this element';\n wlog.notice(errorMessage);\n return Promise.reject(new Error(errorMessage));\n }\n elem.webkitEnterFullscreen();\n return Promise.resolve();\n }\n } catch (error) {\n wlog.notice('requestFullscreen failed', error);\n return Promise.reject(error);\n }\n\n wlog.notice('no requestFullscreen functionality detected');\n return Promise.resolve();\n};\n\nexport const elemCancelFullscreen = (elem) => {\n if (document.exitFullscreen) {\n return document.exitFullscreen();\n }\n if (elem && elem.webkitExitFullscreen) {\n return new Promise((resolve) => {\n elem.webkitExitFullscreen();\n resolve();\n });\n }\n wlog.notice('no cancelFullscreen functionality detected');\n return Promise.resolve();\n};\n\nexport const elemStripEventAttributes = (elem) => {\n const attributes = (elem && elem.attributes) || [];\n try {\n for (let i = 0; i < attributes.length; i++) {\n let attr = attributes[i];\n if (/^on.+/i.test(attr.name)) {\n elem[attr.name] = null;\n elem.removeAttribute(attr.name);\n }\n }\n } catch (e) {\n wlog.error(e);\n }\n\n if (elem.childNodes) {\n for (let i = 0; i < elem.childNodes.length; i++) {\n let child = elem.childNodes[i];\n if (child.nodeType === 1) {\n elemStripEventAttributes(child);\n }\n }\n }\n};\n\nexport const elemMutationObserver = (fn) => {\n const klass = detect.mutationObserver;\n if (klass) {\n return new window[klass](fn);\n }\n return null;\n};\n\nexport const docScrollTop = (t) => {\n let docBody = document.body;\n let docElem = document.documentElement;\n if (t != null) {\n if (docBody) {\n docBody.scrollTop = t;\n }\n if (docElem) {\n docElem.scrollTop = t;\n }\n } else {\n return (docElem && docElem.scrollTop) || (docBody && docBody.scrollTop) || 0;\n }\n};\n\nexport const docScrollLeft = (t) => {\n let docBody = document.body;\n let docElem = document.documentElement;\n if (t != null) {\n if (docBody) {\n docBody.scrollLeft = t;\n }\n if (docElem) {\n docElem.scrollLeft = t;\n }\n } else {\n return (docElem && docElem.scrollLeft) || (docBody && docBody.scrollLeft) || 0;\n }\n};\n\nexport const safeRequestAnimationFrame = (fn) => {\n const requestAnimFrame =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n ((callback) => setTimeout(callback, 1000 / 60));\n return requestAnimFrame(fn);\n};\n\nconst FORM_CONTROL_ROLES = /^(radio|checkbox|switch|option|menuitemradio|menuitemcheckbox)$/i;\n\nexport const formInputIsFocused = () => {\n let activeElement = document.activeElement;\n if (document.activeElement.tagName === 'WISTIA-PLAYER') {\n activeElement = document.activeElement.shadowRoot.activeElement;\n }\n\n if (activeElement.tagName === 'WISTIA-FORM-EMBED') {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return (\n /^textarea|input|select$/i.test(activeElement.tagName) ||\n FORM_CONTROL_ROLES.test(activeElement.getAttribute('role') || '') ||\n activeElement.isContentEditable\n );\n};\n\nexport const currentEventSource = () => {\n return inUserEventContext() ? 'user-event' : 'non-user-event';\n};\n\nexport const inUserEventContext = () => {\n return !!activeDOMEvent;\n};\n\nexport const getLastActiveEventAt = () => {\n return lastActiveEventAt;\n};\n\nlet activeDOMEvent;\nlet lastActiveEventAt = -1;\nconst userEventsThatShowIntent = [\n 'auxclick',\n 'click',\n 'contextmenu',\n 'dblclick',\n 'focus',\n 'keydown',\n 'keypress',\n 'keyup',\n 'mousedown',\n 'mouseup',\n 'reset',\n 'submit',\n 'touchend',\n 'touchstart',\n];\nuserEventsThatShowIntent.forEach((type) => {\n const onEvent = (e) => {\n activeDOMEvent = e;\n lastActiveEventAt = Date.now();\n setTimeout(() => {\n if (activeDOMEvent === e) {\n // if some other event has triggered synchronously, let's not clobber it;\n // the last one to fire will set this to null.\n activeDOMEvent = undefined;\n }\n }, 0);\n };\n\n // We use capture = true because event.stopPropagation() would cause us to\n // miss this.\n elemBind(\n document,\n type,\n onEvent,\n detect.passiveSupported ? { capture: true, passive: true } : true,\n );\n});\n","import { h, JSX, type SVGAttributes } from 'preact';\nimport { BigPlayButtonLoadingAnim } from '../BigPlayButtonLoadingAnim.tsx';\nimport { standardSvgAttrs } from '../../../../../../../utilities/svg_boilerplate.ts';\n\ninterface BigPlayButtonSVGProps {\n height: number;\n isLoading?: boolean;\n overrideFillColor?: string;\n scale: number;\n width: number;\n}\n\nconst ICON_WIDTH = 37;\nconst ICON_HEIGHT = 36;\n\nconst LOADING_ALPHA = 0.5;\n\nexport const BigPlayButtonSVG = ({\n width,\n height,\n scale,\n isLoading = false,\n overrideFillColor,\n}: BigPlayButtonSVGProps): JSX.Element => {\n const scaledHeight = height * scale;\n const svgAttrs = standardSvgAttrs({\n width,\n height,\n styleOverride: {\n position: 'absolute',\n height: `${scaledHeight}px`,\n color: overrideFillColor,\n },\n ariaHidden: true,\n }) as SVGAttributes<SVGSVGElement>;\n\n // Center the icon within the width and height of the button\n const iconXOffset = -(ICON_WIDTH / 2) + width / 2;\n const iconYOffset = -(ICON_HEIGHT / 2) + height / 2;\n\n return (\n <svg {...svgAttrs} aria-hidden=\"true\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentcolor\"\n opacity={isLoading ? LOADING_ALPHA : 1}\n transform={`translate(${iconXOffset}, ${iconYOffset})`}\n d=\"M12.138 2.173C10.812 1.254 9 2.203 9 3.817v28.366c0 1.613 1.812 2.563 3.138 1.644l20.487-14.183a2 2 0 0 0 0-3.288L12.138 2.173Z\"\n />\n {isLoading && <BigPlayButtonLoadingAnim />}\n </svg>\n );\n};\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n","let rootTest;\ntry {\n rootTest = self; // dom or web worker\n if (\n rootTest.self !== rootTest &&\n typeof rootTest.self !== 'undefined' &&\n typeof window !== 'undefined'\n ) {\n // Accidentally assigning `self` is a thing that websites do. But most of\n // these accidental assigns won't have a self property pointing at themselves.\n rootTest = window;\n }\n} catch (err) {\n if (typeof globalThis !== 'undefined') {\n rootTest = globalThis; // es native in the future\n } else {\n // oh god, what's even happening\n rootTest = window;\n }\n}\n\nexport const root = rootTest;\n","export const interBoldItalicFontFamily = 'WistiaPlayerInterBoldItalic, Helvetica, Sans-Serif';\nexport const interFontFamily = 'WistiaPlayerInter, Helvetica, Sans-Serif';\nexport const interSemiBoldFontFamily = 'WistiaPlayerInterSemiBold, Helvetica, Sans-Serif';\nexport const interNumbersSemiBold = 'WistiaPlayerInterNumbersSemiBold, Helvetica, Sans-Serif';\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n","// You wouldn't believe it, but IE11 does not support Object.assign(), so this\n// is our non-polyfill replacement.\n\nexport const assign = (obj1, ...objs) => {\n if (Object.assign) {\n return Object.assign(obj1, ...objs);\n }\n for (let i = 0; i < objs.length; i++) {\n assignOne(obj1, objs[i]);\n }\n return obj1;\n};\n\nconst assignOne = (obj1, obj2) => {\n for (let k in obj2) {\n if (Object.hasOwn(obj2, k)) {\n obj1[k] = obj2[k];\n }\n }\n return obj1;\n};\n","import { Wistia } from '../wistia_namespace.ts';\n\nconst aps = Array.prototype.slice;\n\nexport const bind = function (event, fn) {\n const self = this;\n if (!self._bindings) {\n self._bindings = {};\n }\n if (!self._bindings[event]) {\n self._bindings[event] = [];\n }\n self._bindings[event].push(fn);\n return function () {\n self.unbind(event, fn);\n };\n};\n\nexport const unbind = function (event, fn) {\n if (!this._bindings) {\n return this;\n }\n if (!this._bindings[event]) {\n return this;\n }\n const bindings = [];\n for (let i = 0; i < this._bindings[event].length; i++) {\n let boundFn = this._bindings[event][i];\n if (boundFn !== fn) {\n bindings.push(boundFn);\n }\n }\n this._bindings[event] = bindings;\n};\n\nexport const rebind = function (event, fn) {\n this.unbind(event, fn);\n this.bind(event, fn);\n return { event, fn };\n};\n\nexport const trigger = function (event, ...args) {\n if (this._bindings && this._bindings.all != null) {\n triggerImpl.apply(this, ['all', event].concat(args));\n }\n return triggerImpl.apply(this, [event].concat(args));\n};\n\nconst triggerImpl = function (event) {\n if (!this._bindings) {\n return this;\n }\n if (!this._bindings[event]) {\n return this;\n }\n const args = aps.call(arguments, 1);\n let unbinds;\n // memoize necessary to loop over all bindings if one of the bindings\n // unbinds a following binding\n const bindings = [...this._bindings[event]];\n for (let i = 0; i < bindings.length; i++) {\n let fn = bindings[i];\n try {\n let ret = fn.apply(this, args);\n // special return value will unbind when triggered\n if (ret === this.unbind) {\n if (unbinds == null) {\n unbinds = [];\n }\n unbinds.push({ event, fn });\n }\n } catch (e) {\n if (this._throwTriggerErrors) {\n throw e;\n } else if (Wistia.error) {\n Wistia.error(e);\n }\n }\n }\n\n if (unbinds) {\n for (let i = 0; i < unbinds.length; i++) {\n let unbind = unbinds[i];\n this.unbind(unbind.event, unbind.fn);\n }\n }\n\n return this;\n};\n\nexport const once = function (event, fn) {\n const wrappedFn = function () {\n fn.apply(this, aps.call(arguments, 0));\n return unbind;\n };\n return bind(event, wrappedFn);\n};\n\nexport const initNamespace = function (ctx, namespace) {\n if (ctx._namedBindings == null) {\n ctx._namedBindings = {};\n }\n\n if (ctx._namedBindings[namespace] == null) {\n ctx._namedBindings[namespace] = {};\n }\n};\n\nconst getNamedBinding = function (ctx, namespace, fnKey) {\n initNamespace(ctx, namespace);\n return ctx._namedBindings[namespace][fnKey];\n};\n\nconst setNamedBinding = function (ctx, namespace, fnKey, event, fn) {\n initNamespace(ctx, namespace);\n ctx._namedBindings[namespace][fnKey] = { event, fn };\n};\n\nexport const bindNamed = function (namespace, fnKey, event, fn) {\n this.unbindNamed(namespace, fnKey);\n setNamedBinding(this, namespace, fnKey, event, fn);\n this.bind(event, fn);\n return function () {\n this.unbindNamed(namespace, fnKey);\n };\n};\n\nexport const unbindNamed = function (namespace, fnKey) {\n initNamespace(this, namespace);\n const entry = getNamedBinding(this, namespace, fnKey);\n if (entry) {\n const { event, fn } = entry;\n this.unbind(event, fn);\n }\n const namedBindings = this._namedBindings;\n delete namedBindings[namespace][fnKey];\n if (isEmpty(namedBindings[namespace])) {\n delete namedBindings[namespace];\n }\n return this;\n};\n\nexport const unbindAllInNamespace = function (namespace) {\n const bindings = this._namedBindings && this._namedBindings[namespace];\n if (bindings == null) {\n return this;\n }\n for (let fnKey in bindings) {\n if (Object.hasOwn(bindings, fnKey)) {\n this.unbindNamed(namespace, fnKey);\n }\n }\n};\n\nconst isEmpty = function (obj) {\n for (let k in obj) {\n if (Object.hasOwn(obj, k)) {\n return false;\n }\n }\n return true;\n};\n\nexport const bindify = function (prototype) {\n prototype.bind = bind;\n prototype.unbind = unbind;\n prototype.on = bind;\n prototype.off = unbind;\n prototype.rebind = rebind;\n prototype.trigger = trigger;\n prototype.bindNamed = bindNamed;\n prototype.unbindNamed = unbindNamed;\n prototype.unbindAllInNamespace = unbindAllInNamespace;\n return prototype;\n};\n\n// If you don't want to mix in state with an existing object, you can use this\n// as a proxy, for example:\n//\n// var bindings = new Bindings();\n// bindings.bind('hello', function(name) {\n// console.log('hi', name);\n// return bindings.unbind;\n// });\n// bindings.trigger('hello', 'Max');\nexport const Bindings = function () {};\nbindify(Bindings.prototype);\n","// chapters has two ways of being defined in embed options.\n// The current way is as an object inside `embedOptions.plugin`\n// The old way was as root embed options like `chaptersOn` and `chapterList`.\n// This function normalizes the old root embed option format to an object\n// like the current model\n\nimport { isNotNil } from '@wistia/type-guards';\nimport type { EmbedOptions } from '../types/EmbedOptions.ts';\nimport type { ChaptersPluginConfig } from '../types/plugins.ts';\n\nexport const normalizeChapters = (embedOptions: EmbedOptions): ChaptersPluginConfig | undefined => {\n const { plugin, chaptersOn, chapterList } = embedOptions;\n\n if (plugin?.chapters) {\n return plugin.chapters;\n }\n\n const areChaptersOn = chaptersOn === true || chaptersOn === 'true';\n\n if (isNotNil(chapterList) || areChaptersOn) {\n const hasChapters = isNotNil(chapterList) && chapterList.length > 0;\n const list = hasChapters ? chapterList : [];\n\n return {\n on: chaptersOn,\n chapterList: list,\n };\n }\n\n return undefined;\n};\n","import * as bindify from 'utilities/bindify.js';\nimport { Wistia } from '../wistia_namespace.ts';\nimport { convertedEventNames, EventShepherd } from './eventShepherd.ts';\n\n// This is an adaptation on top of bindify that is intended to provide both\n// legacy functionality (returning `this` instead of an \"unbind\" function) and\n// and functionality for \"crosstime\" and \"betweentimes\", which are\n// \"composite\" bindings that do not have normal event signatures, as they take additional arguments.\n//\n// If you're setting up on/off/trigger for any new things, you should use\n// bindify directly instead.\n\nif (!Wistia.bindable) {\n if (!Wistia.EventShepherdManager) {\n Wistia.EventShepherdManager = {};\n }\n\n Wistia.bindable = {\n bind(event, callback) {\n if (event === 'crosstime' && this.crossTime) {\n this.crossTime.addBinding(arguments[1], arguments[2]);\n return this;\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n this.betweenTimes.addBinding(arguments[1], arguments[2], arguments[3]);\n return this;\n }\n\n const embedElement = this.embedElement || this.container;\n\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n if (Wistia.EventShepherdManager[id] === undefined) {\n Wistia.EventShepherdManager[id] = new EventShepherd();\n }\n Wistia.EventShepherdManager[id].addListener(event, embedElement, callback);\n return this;\n }\n\n if (callback) {\n bindify.bind.call(this, event, callback);\n return this;\n }\n\n if (Wistia.warn) {\n Wistia.warn(this.constructor.name, 'bind', 'falsey value passed in as callback:', callback);\n }\n },\n\n // unbind the matching callback and event for this video\n unbind(event, callback) {\n if (event === 'crosstime' && this.crossTime) {\n if (!callback) {\n this.crossTime.removeAllBindings();\n } else {\n this.crossTime.removeBinding(arguments[1], arguments[2]);\n }\n\n return this;\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n if (!callback) {\n this.betweenTimes.removeAllBindings();\n } else {\n this.betweenTimes.removeBinding(arguments[1], arguments[2], arguments[3]);\n }\n return this;\n }\n\n const embedElement = this.embedElement || this.container;\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n // return early if the EventShepherd for the hashedId is not defined\n if (Wistia.EventShepherdManager[id] === undefined) {\n return this;\n }\n Wistia.EventShepherdManager[id].removeListener(event, embedElement, callback);\n return this;\n }\n\n if (callback) {\n bindify.unbind.call(this, event, callback);\n } else if (this._bindings) {\n // no callback passed in, so clear all callbacks for this event\n this._bindings[event] = [];\n }\n\n // null/delete the event keys if they have no events\n if (this._bindings && this._bindings[event] && !this._bindings[event].length) {\n this._bindings[event] = null;\n delete this._bindings[event];\n }\n\n return this;\n },\n\n on(event, fn) {\n if (event === 'crosstime' && this.crossTime) {\n this.crossTime.addBinding(arguments[1], arguments[2]);\n\n return () => {\n this.crossTime.removeBinding(arguments[1], arguments[2]);\n };\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n this.betweenTimes.addBinding(arguments[1], arguments[2], arguments[3]);\n\n return () => {\n this.betweenTimes.removeBinding(arguments[1], arguments[2], arguments[3]);\n };\n }\n\n const embedElement = this.embedElement || this.container;\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n if (Wistia.EventShepherdManager[id] === undefined) {\n Wistia.EventShepherdManager[id] = new EventShepherd(embedElement);\n }\n\n Wistia.EventShepherdManager[id].addListener(event, embedElement, fn);\n\n return () => {\n Wistia.EventShepherdManager[id].removeListener(event, embedElement, fn);\n };\n }\n\n return bindify.bind.call(this, event, fn);\n },\n\n off(event, fn) {\n if (event === 'crosstime' && this.crossTime) {\n return this.crossTime.removeBinding(arguments[1], arguments[2]);\n }\n\n if (event === 'betweentimes' && this.betweenTimes) {\n return this.betweenTimes.removeBinding(arguments[1], arguments[2], arguments[3]);\n }\n\n const embedElement = this.embedElement || this.container;\n if (Object.keys(convertedEventNames).includes(event) && embedElement) {\n const id = identifierFromEmbedElement(embedElement);\n // return early if the EventShepherd for the hashedId is not defined\n if (Wistia.EventShepherdManager[id] === undefined) {\n return () => {};\n }\n return Wistia.EventShepherdManager[id].removeListener(event, embedElement, fn);\n }\n\n return bindify.unbind.call(this, event, fn);\n },\n\n rebind(event, callback) {\n this.unbind(event, callback);\n this.bind(event, callback);\n return this;\n },\n\n // fire an event trigger on the video. for play/pause/ended callbacks.\n trigger(event, ...args) {\n bindify.trigger.call(this, event, ...args);\n return this;\n },\n\n bindNamed() {\n return bindify.bindNamed.apply(this, arguments);\n },\n\n unbindNamed() {\n return bindify.unbindNamed.apply(this, arguments);\n },\n\n unbindAllInNamespace() {\n return bindify.unbindAllInNamespace.apply(this, arguments);\n },\n };\n}\n\nexport const makeWbindable = function (obj) {\n for (let k in Wistia.bindable) {\n const v = Wistia.bindable[k];\n if (!obj[k]) {\n obj[k] = v;\n }\n }\n};\n\nconst identifierFromEmbedElement = function (embedElement) {\n if (embedElement?.mediaId) {\n return embedElement.mediaId;\n }\n\n if (embedElement?.id) {\n return embedElement.id;\n }\n};\n","import merge from 'lodash.merge';\nimport type { EmbedOptions } from '../types/EmbedOptions.ts';\n\nexport const getWistiaOptions = (mediaId: string): EmbedOptions => {\n if (!window.wistiaOptions) {\n return {};\n }\n\n const globalOptions: EmbedOptions = window.wistiaOptions._all ?? {};\n\n const mediaOptions: EmbedOptions = window.wistiaOptions[mediaId] ?? {};\n\n return merge(globalOptions, mediaOptions);\n};\n","export const pageLoaded = (fn, timeout = 4000, doc = document, win = window) => {\n if (/loaded|complete/.test(doc.readyState)) {\n setTimeout(fn, 0);\n } else {\n const unbind = () => {\n win.removeEventListener('load', onPageLoad, false);\n };\n\n const onPageLoad = () => {\n clearTimeout(onLoadTimeout);\n unbind();\n fn();\n };\n\n win.addEventListener('load', onPageLoad, false);\n\n const onLoadTimeout = setTimeout(() => {\n unbind();\n fn();\n }, timeout);\n }\n};\n","import { h, JSX } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport type { PlayerLanguage, Players } from '../../../types/player-api-types.ts';\nimport { usePlayerData } from '../hooks/usePlayerData.tsx';\nimport { CONTROL_BAR_HEIGHT, DEFAULT_ASPECT } from '../utilities/constants.ts';\nimport { BigPlayButton } from '../../media/players/vulcanV2Player/shared/ui_components/BigPlayButton.tsx';\nimport { ProgressiveThumbnail } from '../../shared/ProgressiveThumbnail.jsx';\nimport { getLanguage } from '../../shared/translations.js';\nimport { thumbnailAssets as getThumbnailAssets } from '../../../utilities/assets.js';\nimport { controlMultiplierEstimatedByWidth } from '../../../utilities/fit-control.js';\nimport {\n getDefaultBigPlayButtonBorderRadius,\n getDefaultControlBarDistance,\n getDefaultPlayerBorderRadius,\n} from '../../../utilities/roundedPlayerDefaults.ts';\nimport { getCssGradient, getGradientColor } from '../../../utilities/gradients.ts';\nimport { isGradient } from '../../../types/gradient.ts';\nimport { getVideoPlayerIconColor } from '../../../utilities/color-utils.ts';\n\nconst MAX_SCALE = 1.3;\nconst MIN_SCALE = 0.3;\nconst DEFAULT_LOWER_CUTOFF_WIDTH = 640;\nconst DEFAULT_UPPER_CUTOFF_WIDTH = 960;\n\ninterface PreloadThumbnailProps {\n isPlayPending: boolean;\n mediaId: string;\n playerType: Players;\n playerWidth: number;\n}\n\nexport const PreloadThumbnail = ({\n isPlayPending,\n mediaId,\n playerType,\n playerWidth,\n}: PreloadThumbnailProps): JSX.Element => {\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (isPlayPending) {\n setIsLoading(true);\n }\n }, [isPlayPending]);\n\n const { embedOptions, mediaData } = usePlayerData();\n const {\n aspect,\n bigPlayButton,\n bpbTime,\n bigPlayButtonBorderRadius,\n contrastIcons,\n controlBarBorderRadius,\n controlsVisibleOnLoad,\n floatingControlBar,\n noMixBlendMode,\n opaqueControls,\n playButton,\n playerBorderRadius,\n playerColor,\n playerColorGradient,\n playerLanguage,\n roundedPlayer,\n thumbnailAltText,\n transparentLetterbox,\n } = embedOptions;\n const { aspectRatio, assets, duration, mediaType, name } = mediaData;\n const height = playerWidth / (aspect ?? aspectRatio ?? DEFAULT_ASPECT);\n\n const scale = Math.min(\n MAX_SCALE,\n Math.max(\n MIN_SCALE,\n controlMultiplierEstimatedByWidth(playerWidth, [\n DEFAULT_LOWER_CUTOFF_WIDTH,\n DEFAULT_UPPER_CUTOFF_WIDTH,\n ]),\n ),\n );\n\n const calculatedControlsVisibleOnLoad = controlsVisibleOnLoad && playerType === 'vulcan-v2';\n\n const defaultControlBarDistance = getDefaultControlBarDistance({\n controlBarBorderRadius,\n floatingControlBar,\n roundedPlayer,\n });\n const calculatedControlBarDistance = calculatedControlsVisibleOnLoad\n ? (CONTROL_BAR_HEIGHT / 2 + defaultControlBarDistance) * scale\n : defaultControlBarDistance * scale;\n\n const calculatedBigPlayButtonBorderRadius =\n getDefaultBigPlayButtonBorderRadius({\n bigPlayButtonBorderRadius,\n roundedPlayer,\n }) * scale;\n\n const calculatedPlayerBorderRadius =\n getDefaultPlayerBorderRadius({\n playerBorderRadius,\n roundedPlayer,\n }) * scale;\n\n const backgroundColor =\n transparentLetterbox === true || calculatedPlayerBorderRadius > 0 ? 'transparent' : undefined;\n\n const thumbnailAssets = getThumbnailAssets(assets, {});\n\n const calculatedPlayerLanguage =\n (getLanguage(playerLanguage) as PlayerLanguage | undefined) ??\n (getLanguage('en-US') as PlayerLanguage);\n\n const shouldShowBigPlayButton = bigPlayButton !== false && playButton !== false;\n const shouldShowBpbTime = bpbTime === true || bpbTime === 'true';\n\n const backgroundGradientCss = playerColorGradient?.on\n ? getCssGradient(playerColorGradient)\n : undefined;\n\n // if the gradient is enabled and valid, use the first color in the gradient as the player color,\n // otherwise, just use the player color like normal\n const playerColorOrGradientColor =\n playerColorGradient?.on && isGradient(playerColorGradient)\n ? (getGradientColor(playerColorGradient) ?? playerColor)\n : playerColor;\n\n const handleClick = () => {\n setIsLoading(true);\n };\n\n return (\n // Provide the icon color for the BigPlayButton\n <div\n style={{\n '--wistia-player-icon-color': getVideoPlayerIconColor(\n playerColor ?? '#636155',\n contrastIcons ?? false,\n playerColorGradient?.on === true,\n ),\n }}\n >\n <div\n class=\"w-css-reset\"\n style={{\n cursor: 'pointer',\n width: '100%',\n height: `${height}px`,\n }}\n onClick={handleClick}\n tabIndex={shouldShowBigPlayButton ? -1 : 0}\n >\n <ProgressiveThumbnail\n backgroundColor={backgroundColor}\n images={thumbnailAssets}\n isVisible={true}\n hashedId={mediaId}\n playerBorderRadius={calculatedPlayerBorderRadius}\n swatchEnabled={false}\n uiHasRendered={false}\n thumbnailAltText={thumbnailAltText ?? ''}\n height={`${height}px`}\n />\n </div>\n {shouldShowBigPlayButton && (\n <BigPlayButton\n borderRadius={calculatedBigPlayButtonBorderRadius}\n buttonTabIndex={0}\n color={playerColorOrGradientColor}\n controlBarDistance={calculatedControlBarDistance}\n duration={duration ?? 0}\n hasContrastIcons={contrastIcons ?? false}\n isLiveMedia={mediaType === 'LiveStream'}\n isLoading={isLoading}\n isOpaque={opaqueControls}\n isVisible={true}\n noMixBlendMode={noMixBlendMode}\n onClick={handleClick}\n playerLanguage={calculatedPlayerLanguage}\n scale={scale}\n showBpbTime={shouldShowBpbTime}\n videoName={name ?? ''}\n videoWidth={playerWidth}\n backgroundGradientCss={backgroundGradientCss}\n ></BigPlayButton>\n )}\n </div>\n );\n};\n","\n/*\n * @license @wistia/type-guards v0.9.3\n *\n * Copyright (c) 2023-2025, Wistia, Inc. and its affiliates.\n *\n * This source code is unlicensed, all rights reserved.\n */\n\n\n// index.ts\nvar FALSY_VALUES = [false, 0, -0, 0n, \"\", null, void 0, Number.NaN];\nvar isNull = (value) => value === null;\nvar isNotNull = (value) => !isNull(value);\nvar isUndefined = (value) => value === void 0;\nvar isNotUndefined = (value) => !isUndefined(value);\nvar isNil = (value) => isNull(value) || isUndefined(value);\nvar isNotNil = (value) => !isNil(value);\nvar isString = (value) => typeof value === \"string\";\nvar isNotString = (value) => !isString(value);\nvar isEmptyString = (value) => isString(value) && value === \"\";\nvar isNonEmptyString = (value) => isString(value) && !isEmptyString(value);\nvar isNumber = (value) => typeof value === \"number\";\nvar isNotNumber = (value) => !isNumber(value);\nvar isNaN = (value) => Number.isNaN(value);\nvar isInteger = (value) => Number.isInteger(value);\nvar isRecord = (value) => isNotNil(value) && typeof value === \"object\" && !(value instanceof Array);\nvar isNotRecord = (value) => !isRecord(value);\nvar isEmptyRecord = (value) => isRecord(value) && Object.keys(value).length === 0;\nvar isNonEmptyRecord = (value) => isRecord(value) && Object.keys(value).length > 0;\nvar isArray = (value) => isNotNil(value) && typeof value === \"object\" && value instanceof Array;\nvar isNotArray = (value) => !isArray(value);\nvar isEmptyArray = (value) => isArray(value) && value.length === 0;\nvar isNonEmptyArray = (value) => isArray(value) && value.length > 0;\nvar isFunction = (value) => isNotNil(value) && typeof value === \"function\";\nvar isNotFunction = (value) => !isFunction(value);\nvar isBoolean = (value) => isNotNil(value) && typeof value === \"boolean\";\nvar isNotBoolean = (value) => !isBoolean(value);\nvar isVoid = (value) => value === void 0;\nvar isNotVoid = (value) => !isVoid(value);\nvar isError = (value) => {\n return isNotNil(value) && value instanceof Error;\n};\nvar isFalsy = (value) => (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n FALSY_VALUES.includes(value) || Number.isNaN(value)\n);\nvar isTruthy = (value) => (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n !FALSY_VALUES.includes(value) && !Number.isNaN(value)\n);\nvar hasKey = (value, key) => isNonEmptyRecord(value) && key in value;\nexport {\n hasKey,\n isArray,\n isBoolean,\n isEmptyArray,\n isEmptyRecord,\n isEmptyString,\n isError,\n isFalsy,\n isFunction,\n isInteger,\n isNaN,\n isNil,\n isNonEmptyArray,\n isNonEmptyRecord,\n isNonEmptyString,\n isNotArray,\n isNotBoolean,\n isNotFunction,\n isNotNil,\n isNotNull,\n isNotNumber,\n isNotRecord,\n isNotString,\n isNotUndefined,\n isNotVoid,\n isNull,\n isNumber,\n isRecord,\n isString,\n isTruthy,\n isUndefined,\n isVoid\n};\n//# sourceMappingURL=index.mjs.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","import { Fragment, h, render } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { isEmptyString, isNil, isNonEmptyString } from '@wistia/type-guards';\nimport { getGradientColor } from '../../utilities/gradients.ts';\nimport { Wistia } from '../../wistia_namespace.ts';\nimport type { Authorization, FullscreenState } from './types.ts';\nimport type { EmailChangeEventData } from '../../types/custom-event-data.js';\nimport type {\n IMPL_CREATED_EVENT_TYPE,\n LOADED_MEDIA_DATA_EVENT_TYPE,\n WistiaPlayerEvents,\n} from '../../types/events.ts';\nimport type {\n AllowedQualities,\n EventListenerMap,\n Impl,\n JudyContext,\n LanguageSimplified,\n Localization,\n LoggerType,\n MediaData,\n MediaDataServerErrorResponse,\n Mux,\n OverlayOptions,\n Players,\n PlayerState,\n PopoverAnimation,\n PopoverContentSettings,\n PublicApi,\n PublicApiOptions,\n ReplaceWithMediaOptions,\n WistiaLocalStorage,\n} from '../../types/player-api-types.ts';\nimport type { FetchMediaDataOptions } from '../../utilities/fetchMediaData.ts';\nimport type { EmbedOptions } from '../../types/EmbedOptions.ts';\nimport type { PluginConfigs, PluginInstances } from '../../types/plugins.ts';\nimport { PreloadThumbnail } from './components/PreloadThumbnail.tsx';\nimport { PlayerDataProvider } from './hooks/usePlayerData.tsx';\nimport { AUDIO_DEFAULT_HEIGHT, DEFAULT_ASPECT } from './utilities/constants.ts';\nimport { PlayerDataHandler } from './utilities/PlayerDataHandler.ts';\nimport { appHostname } from '../../appHostname.js';\nimport { thumbnailAssets as getThumbnailAssets } from '../../utilities/assets.js';\nimport { didWinCoinFlip } from '../../utilities/coinFlip.ts';\nimport { detectIsMobile } from '../../utilities/detect.js';\nimport { dynamicImport } from '../../utilities/dynamicImport.ts';\nimport { removeEmbedOptionStore, setEmbedOptionStore } from '../../utilities/embedOptionStore.ts';\nimport { elemWidth } from '../../utilities/elem.js';\nimport {\n AFTER_REPLACE_EVENT,\n API_READY_EVENT,\n BEFORE_REPLACE_EVENT,\n IMPL_CREATED_EVENT,\n INPUT_CONTEXT_CHANGE_EVENT,\n INTERNAL_API_CREATED_EVENT,\n INTERNAL_API_ON_FIND_EVENT,\n LOADED_MEDIA_DATA_EVENT,\n MUTE_CHANGE_EVENT,\n} from '../../utilities/eventConstants.ts';\nimport { extractEmailFromParams } from '../../utilities/extractEmailFromParams.ts';\nimport { cdnFastWistiaComHost, eV1Protocol, eV1HostWithPort } from '../../utilities/hosts.js';\nimport { inferPageUrl } from '../../utilities/inferPageUrl.ts';\nimport { buildContext, choosePlayer } from '../../utilities/judy.js';\nimport { getDefaultPlayerBorderRadius } from '../../utilities/roundedPlayerDefaults.ts';\nimport { runScript } from '../../utilities/runScript.js';\nimport { seqId } from '../../utilities/seqid.js';\nimport { MUX_PERCENTAGE_TO_ENABLE, shouldEnableMux } from '../../utilities/shouldEnableMux.ts';\nimport { countMetric } from '../../utilities/simpleMetrics.js';\nimport { isVisitorTrackingEnabled } from '../../utilities/trackingConsentApi.js';\nimport { proto } from '../../utilities/url.js';\nimport {\n getWistiaLocalStorage,\n updateWistiaLocalStorage,\n} from '../../utilities/wistiaLocalStorage.js';\nimport { getWistiaOptions } from '../../utilities/wistiaOptions.ts';\nimport { maybeStartWistiaQueue } from '../../utilities/wistiaQueue.ts';\nimport { wlog } from '../../utilities/wlog.js';\nimport { injectJsonLd, removeInjectedJsonLd } from '../../utilities/injectJsonLd.js';\nimport { getInitialMediaData } from './utilities/getInitialMediaData.ts';\nimport { isMediaDataError } from '../../utilities/mediaDataError.ts';\nimport { uncacheMediaData } from '../../utilities/remote-data-cache.ts';\nimport {\n camelCaseToKebabCase,\n kebabCaseToCamelCase,\n} from '../../utilities/camelCaseToKebabCase.ts';\nimport { ControlInstances } from '../../types/controls.ts';\nimport { Gradient, isGradient } from '../../types/gradient.ts';\n\n// The component will not run without these attributes.\nconst requiredAttributes = ['media-id'];\n\n// Optional attributes surfaced in documentation to our customers.\nconst optionalPublicAttributes = [\n 'aspect',\n 'audio-description-control',\n 'autoplay',\n 'big-play-button',\n 'branding',\n 'contrast-icons',\n 'controls-visible-on-load',\n 'copy-link-and-thumbnail',\n 'current-time',\n 'do-not-track',\n 'email',\n 'end-video-behavior',\n 'fit-strategy',\n 'fullscreen-control',\n 'language',\n 'muted',\n 'opaque-controls',\n 'playback-rate-control',\n 'play-bar-control',\n 'player-color',\n 'playlist-links',\n 'playlist-loop',\n 'play-pause-control',\n 'play-pause-notifier',\n 'play-suspended-off-screen',\n 'popover-animate-thumbnail',\n 'popover-animation',\n 'popover-border-color',\n 'popover-border-radius',\n 'popover-border-width',\n 'popover-box-shadow',\n 'popover-caption',\n 'popover-caption-container',\n 'popover-content',\n 'popover-disable-autoplay',\n 'popover-overlay-color',\n 'popover-overlay-opacity',\n 'popover-prevent-scroll',\n 'popover-show-on-load',\n 'poster',\n 'preload',\n 'quality-control',\n 'quality-max',\n 'quality-min',\n 'resumable',\n 'rounded-player',\n 'rounded-playlist',\n 'rotate-to-fullscreen',\n 'seo',\n 'settings-control',\n 'silent-autoplay',\n 'transparent-letterbox',\n 'video-quality',\n 'volume',\n 'volume-control',\n 'wistia-popover',\n];\n\n// Optional attributes used by Wistia developers.\nconst optionalPrivateAttributes = [\n 'big-play-button-border-radius',\n 'control-bar-border-radius',\n 'embed-host',\n 'hls',\n 'page-url',\n 'player-border-radius',\n 'player-force',\n 'stats-url',\n 'swatch',\n 'unique-id',\n 'use-web-component',\n];\n\nconst defaultEmbedOptions = {\n audioDescriptionControl: false,\n autoplay: false,\n bigPlayButton: true,\n bigPlayButtonBorderRadius: undefined,\n contrastIcons: false,\n controlBarBorderRadius: undefined,\n controlsVisibleOnLoad: true,\n copyLinkAndThumbnail: true,\n currentTime: 0,\n doNotTrack: false,\n endVideoBehavior: 'default',\n fitStrategy: 'contain',\n fullscreenControl: true,\n hls: true,\n opaqueControls: false,\n playBarControl: true,\n playerBorderRadius: undefined,\n playerColor: '636155',\n playPauseControl: true,\n playPauseNotifier: true,\n playbackRateControl: true,\n playlistLinks: '',\n playlistLoop: false,\n playSuspendedOffScreen: 'auto',\n popoverAnimateThumbnail: false,\n popoverAnimation: 'slide',\n popoverBorderColor: 'ffffff',\n popoverBorderRadius: 0,\n popoverBorderWidth: 0,\n popoverBoxShadow: true,\n popoverCaption: '',\n popoverCaptionContainer: '',\n popoverContent: undefined,\n popoverDisableAutoplay: false,\n popoverOverlayColor: '000000',\n popoverOverlayOpacity: 0.5,\n popoverPreventScroll: false,\n popoverShowOnLoad: false,\n poster: '',\n qualityControl: true,\n qualityMax: undefined,\n qualityMin: undefined,\n resumable: 'auto',\n rotateToFullscreen: false,\n roundedPlayer: undefined,\n seo: true,\n settingsControl: true,\n silentAutoplay: false,\n state: 'beforeplay' as PlayerState,\n statsUrl: null,\n transparentLetterbox: false,\n volume: 1,\n volumeControl: true,\n wistiaPopover: false,\n};\n\n/**\n * Returns the swatch url for a given mediaId\n * @param {string} mediaId\n * @param {string} embedHost\n * @returns {string}\n */\nconst getSwatchUrl = (mediaId, embedHost = '') => {\n const fastHost = cdnFastWistiaComHost(embedHost);\n return `https://${fastHost}/embed/medias/${mediaId}/swatch`;\n};\n\nconst PRELOAD_CLICK_OPTIONS: AddEventListenerOptions = { once: true };\n\nexport class WistiaPlayer extends HTMLElement {\n public plugin: PluginInstances | null;\n\n // can be null when doing document.createElement and referencing an attribute/property\n // before being injected into the dom\n #_api: PublicApi | null;\n\n #_eventListeners: EventListenerMap = {};\n\n // private internal fullscreen state of the video. Stored as a property on the web component\n // for easy transfer to another web component during replace if necessary.\n #_fullscreenState: FullscreenState = {\n heightBeforeFullscreen: undefined,\n inFullscreen: false,\n nativeFullscreen: false,\n widthBeforeFullscreen: undefined,\n };\n\n #_impl: Impl | undefined;\n\n readonly #_internals: ElementInternals | undefined;\n\n #_jsonLdId: string;\n\n #_judyContext: JudyContext | null = null;\n\n #_logger: LoggerType;\n\n // private value used during the replace flow to pass along the old engine.\n #_oldEngine: object | null | undefined;\n\n readonly #_playerData: PlayerDataHandler;\n\n #_playerType: Players;\n\n readonly #_removeEventListeners: (() => void)[] = [];\n\n #cachedRemapTime:\n | ((fromLanguage: string, toLanguage: string, fromTime: number) => number)\n | undefined = undefined;\n\n #hasElementConnectedToDOM = false;\n\n #paddingTop = '0px';\n\n #playPending = false;\n\n #preactRoot: HTMLDivElement | null = null;\n\n #preloadThumbnailRoot: HTMLDivElement | null = null;\n\n readonly #publicApiScript: Promise<void> = runScript(\n `${proto()}//${appHostname('fast')}/assets/external/publicApi.js`,\n ) as Promise<void>;\n\n #resizeObserver: ResizeObserver | null = null;\n\n /**\n * Represents one embedded Wistia media player.\n * @constructor\n */\n public constructor() {\n super();\n if ('attachInternals' in HTMLElement.prototype && 'states' in ElementInternals.prototype) {\n this.#_internals = this.attachInternals();\n this.#_internals.states.add('--initializing');\n }\n\n this.attachShadow({ mode: 'open' });\n\n this.dispatchEvent(new CustomEvent('load-start'));\n\n this.paddingTop = getComputedStyle(this).paddingTop;\n\n // Set up a prefixed logger\n this.#_logger = (wlog as unknown as LoggerType).getPrefixedFunctions(\n 'WistiaPlayer',\n ) as LoggerType;\n\n this.#_playerData = new PlayerDataHandler();\n\n // Wistia global setup if this is the first time we've seen a Wistia player\n Wistia.wistia ??= Date.now();\n }\n\n // --------------------------------------------------\n // Public properties\n // --------------------------------------------------\n\n /**\n * Return an array of the attributes that we want to observe for changes.\n * If one of these attributes changes, the attributeChangedCallback will be called.\n * @returns {string[]}\n */\n public static get observedAttributes(): string[] {\n return [...requiredAttributes, ...optionalPublicAttributes, ...optionalPrivateAttributes];\n }\n\n /**\n * @returns {FullscreenState} private fullscreenState of the video.\n */\n public get _fullscreenState(): FullscreenState {\n return this.#_fullscreenState;\n }\n\n /**\n * @param {FullscreenState} state private fullscreenState of the video.\n */\n public set _fullscreenState(state: FullscreenState) {\n this.#_fullscreenState = state;\n }\n\n /**\n * @deprecated The method should not be used\n * @returns {object | null |undefined } private - old engine being transferred.\n */\n public get _oldEngine(): object | null | undefined {\n return this.#_oldEngine;\n }\n\n /**\n * @deprecated The method should not be used\n * @param {object | null | undefined} engine private old engine to be transferred of the video.\n */\n public set _oldEngine(engine: object | null | undefined) {\n this.#_oldEngine = engine;\n }\n\n /**\n * Returns the aspect ratio (width / height) of the originally uploaded video or given aspect ratio.\n * @returns {number}\n */\n public get aspect(): number {\n const fallbackAspect =\n !Number.isNaN(this.offsetWidth / this.offsetHeight) &&\n Number.isFinite(this.offsetWidth / this.offsetHeight)\n ? this.offsetWidth / this.offsetHeight\n : DEFAULT_ASPECT;\n\n return (\n this.#_impl?.aspect() ??\n this.embedOptions.aspect ??\n (this.#getValueFromAttribute('aspect') as number | null) ??\n fallbackAspect\n );\n }\n\n /**\n * Sets the aspect ratio (width / height) of the video.\n * @param {number} newAspect\n * @returns {void}\n */\n public set aspect(newAspect: number) {\n this.#setSyncedEmbedOption('aspect', newAspect);\n\n // By re-setting width to the same value, we trigger the aspect ratio to be recalculated.\n this.#_impl?.width(elemWidth(this) as number, { constrain: true });\n }\n\n /**\n * Returns whether the Audio Description control in the control bar is enabled.\n * @returns {boolean}\n */\n public get audioDescriptionControl(): boolean {\n return this.#getSyncedEmbedOption('audioDescriptionControl') as boolean;\n }\n\n /**\n * Enable or disable the Audio Description control in the control bar. Note: Even if set to `true`, this control will\n * only appear if the video has an Audio Description track.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set audioDescriptionControl(shouldDisplay: boolean) {\n this.#_impl?.audioDescriptionControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('audioDescriptionControl', shouldDisplay);\n }\n\n /**\n * sets the authorization property to be used for authorized asset delivery\n * @param {Authorization}\n * @returns {void}\n */\n public set authorization(auth: Authorization) {\n this.#setSyncedEmbedOption('authorization', auth);\n }\n\n /**\n * Returns if the player should attempt to autoplay as soon as it's ready.\n * @returns {boolean}\n */\n public get autoplay(): boolean {\n return this.#getSyncedEmbedOption('autoplay') as boolean;\n }\n\n /**\n * Sets the attribute to enable/disable autoplay.\n * @param {boolean} shouldSetAutoplay\n * @returns {void}\n */\n public set autoplay(shouldSetAutoplay: boolean) {\n // This method is called a second time when the attribute value (string | null)\n // is set on the element. Checking for typeof boolean here prevents us from\n // saving that second value to the api.\n if (typeof shouldSetAutoplay !== 'boolean') {\n return;\n }\n this.#setSyncedEmbedOption('autoplay', shouldSetAutoplay);\n\n // Sync the element's autoplay attribute with this property\n // This matches the behavior of the native <video> element\n if (shouldSetAutoplay) {\n this.setAttribute('autoplay', '');\n } else {\n this.removeAttribute('autoplay');\n }\n }\n\n /**\n * Returns if the big play button control will appear in the center of the video before play.\n * @returns {boolean}\n */\n public get bigPlayButton(): boolean {\n return this.#getSyncedEmbedOption('bigPlayButton') as boolean;\n }\n\n /**\n * Sets if the big play button control will appear in the center of the video before play.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set bigPlayButton(shouldDisplay: boolean) {\n this.#_impl?.bigPlayButtonEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('bigPlayButton', shouldDisplay);\n }\n\n /**\n * Returns the border radius of the big play button.\n * @returns {number}\n */\n public get bigPlayButtonBorderRadius(): number {\n return this.#getSyncedEmbedOption('bigPlayButtonBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the big play button.\n * @param {number} radius\n * @returns {void}\n */\n public set bigPlayButtonBorderRadius(radius: number) {\n this.#_impl?.setBigPlayButtonBorderRadius(radius);\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('bigPlayButtonBorderRadius', Number(radius));\n }\n\n public get branding(): boolean {\n return this.#getSyncedEmbedOption('branding') as boolean;\n }\n\n /**\n * This can only be used to enable the wistia logo for players\n * that might not otherwise require it. We don't want to introduce\n * the ability to easily hide the wistia logo for players where it's required.\n */\n public set branding(value: unknown) {\n if (value === 'true' || value === true) {\n this.#setSyncedEmbedOption('branding', true);\n }\n }\n\n /**\n * Returns a new static normalized TimeRanges object that represents the ranges of the media resource,\n * if any, that the user agent has buffered at the moment the buffered property is accessed.\n * @returns {TimeRanges}\n */\n public get buffered(): TimeRanges {\n return this.#_impl?.getStandardBuffered() ?? ({} as TimeRanges);\n }\n\n public get captionsEnabled(): boolean {\n return this.#_api?.captionsEnabled() ?? false;\n }\n\n public set captionsEnabled(enabled: boolean) {\n this.#_api?.captionsEnabled(enabled);\n }\n\n // the public api has a different syntax for setting the captionsLanguage and getting it\n public get captionsLanguage(): LanguageSimplified {\n return this.#_api?.captionsLanguage() ?? this.#defaultLocalization();\n }\n\n public set captionsLanguageCode(languageCode: string) {\n this.#_api?.captionsLanguageCode(languageCode);\n }\n\n public get captionsLanguageCode(): string {\n return this.#_api?.captionsLanguageCode() ?? this.#defaultLocalization().wistiaLanguageCode;\n }\n\n public get captionsLanguages(): LanguageSimplified[] {\n return this.#_api?.captionsLanguages() ?? [this.#defaultLocalization()];\n }\n\n /**\n * Returns the status of the contrastIcons embed option, which determines\n * if the the player controls should use icons with accessible contrast or default to white.\n *\n * @returns {boolean}\n */\n public get contrastIcons(): boolean {\n return this.#getSyncedEmbedOption('contrastIcons') as boolean;\n }\n\n /**\n * When true the player will use icons with accessible contrast or default to white.\n * @param {boolean} contrastIcons\n * @returns {void}\n */\n public set contrastIcons(contrastIcons: unknown) {\n const valueAsBoolean = Boolean(contrastIcons);\n this.#_impl?.contrastIcons(valueAsBoolean);\n this.#setSyncedEmbedOption('contrastIcons', valueAsBoolean);\n }\n\n /**\n * Returns the border radius of the control bar.\n * @returns {number}\n */\n public get controlBarBorderRadius(): number {\n return this.#getSyncedEmbedOption('controlBarBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the control bar.\n * @param {number} radius\n * @returns {void}\n */\n public set controlBarBorderRadius(radius: number) {\n this.#_impl?.setControlBarBorderRadius(radius);\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('controlBarBorderRadius', Number(radius));\n }\n\n /**\n * Getter. Returns all defined controls.\n * @returns {ControlInstances} returns object of defined controls. Please note this may return an\n * empty object if not controls have yet been defined.\n */\n public get controls(): ControlInstances {\n if (this.#_impl) {\n // We don't want customers modifying this object (adding/deleting what is already here).\n // But they may need to interact/modify the existing ones, so we only use `seal`.\n return Object.seal({ ...this.#_impl.controls });\n }\n return {};\n }\n\n /**\n * Returns whether or not to hide the controls on load.\n * @returns {boolean}\n */\n public get controlsVisibleOnLoad(): boolean {\n return this.#getSyncedEmbedOption('controlsVisibleOnLoad') as boolean;\n }\n\n /**\n * Sets whether or not to hide the controls on load.\n * @param {boolean} shouldHide\n * @returns {void}\n */\n public set controlsVisibleOnLoad(shouldHide: boolean) {\n this.#_impl?.renderUI();\n this.#setSyncedEmbedOption('controlsVisibleOnLoad', shouldHide);\n }\n\n /**\n * Returns whether or the copy link and thumbnail option from the context menu\n * is available.\n * @returns {boolean}\n */\n public get copyLinkAndThumbnail(): boolean {\n return this.#getSyncedEmbedOption('copyLinkAndThumbnail') as boolean;\n }\n\n /**\n * Enable or disable the copy link and thumbnail option from the context menu.\n * @param {boolean} enabled\n * @returns {void}\n */\n public set copyLinkAndThumbnail(enabled: boolean) {\n const prevVal = this.copyLinkAndThumbnail;\n this.#setSyncedEmbedOption('copyLinkAndThumbnail', enabled);\n\n if (prevVal !== enabled) {\n this.dispatchEvent(\n new CustomEvent('copy-link-and-thumbnail-change', {\n detail: { copyLinkAndThumbnail: enabled },\n }),\n );\n }\n }\n\n /**\n * Returns the current time of the video as a decimal in seconds.\n * @returns {number}\n */\n public get currentTime(): number {\n return (this.#_impl?.time() as number | null) ?? this.embedOptions.currentTime ?? 0;\n }\n\n /**\n * Sets the current time of the video as a decimal in seconds.\n * @param {number} newTime\n * @returns {void}\n */\n public set currentTime(newTime: number) {\n void this.#_impl?.time(newTime);\n this.#setSyncedEmbedOption('currentTime', newTime);\n }\n\n /**\n * @returns {object} helpful object for debugging\n */\n public get debug(): object {\n return {\n impl: this.#_impl,\n engine: this.#_impl?.engine,\n };\n }\n\n /**\n * Returns the public api instance.\n * @deprecated this is a deprecated method and should not be used.\n * @returns {PublicApi | null}\n */\n public get deprecatedApiDoNotUse(): PublicApi | null {\n return this.#_api;\n }\n\n /**\n * Returns the description of the video, as used in the JSON-LD schema\n * @returns {string}\n */\n public get description(): string {\n return (\n this.#_playerData.mediaData.seoDescription ?? this.#_api?._mediaData?.seoDescription ?? ''\n );\n }\n\n /**\n * Returns the status of the do not track embed option that controls whether the player\n * sends tracking pings.\n * @returns {boolean}\n */\n public get doNotTrack(): boolean {\n return this.#getSyncedEmbedOption('doNotTrack') as boolean;\n }\n\n /**\n * When present the player will not send tracking events for stats.\n * Note that this must be set at the time of embed to have any impact.\n * @param {boolean} dontTrack\n * @returns {void}\n */\n public set doNotTrack(dontTrack: boolean) {\n this.#setSyncedEmbedOption('doNotTrack', dontTrack);\n }\n\n /**\n * Returns the duration of the video in seconds.\n * @returns {number}\n */\n public get duration(): number {\n return this.#_impl?.duration() ?? 0;\n }\n\n /**\n * Returns the email associated with this viewing session.\n * If no email is associated, it will return undefined.\n * NOTE: This attribute will impact the entire page and is not scoped to the player.\n * @returns {string | undefined}\n */\n // the public api doesn't allow for unsetting an email, so we don't wan to allow the setter\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get email(): string | undefined {\n return (\n extractEmailFromParams(this.#pageUrl) ??\n ((getWistiaLocalStorage() as WistiaLocalStorage)[this.#pageUrl]?.trackEmail as\n | string\n | undefined) ??\n this.embedOptions.email ??\n undefined\n );\n }\n\n /**\n * Associates the view of this media with the given email value.\n * This email will appear in stats for the video.\n * NOTE: This attribute will impact the entire page and is not scoped to the player.\n * @param {string} newEmail\n * @returns {void}\n */\n public set email(newEmail: string) {\n if (this.email === newEmail) {\n return;\n }\n this.#updateEmail(newEmail);\n this.#setSyncedEmbedOption('email', newEmail);\n }\n\n /**\n * Returns the overridding embed host for the player.\n * Internal use only.\n * @returns {string | null | undefined}\n */\n // we don't want to allow for unsetting this option\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get embedHost(): string | null | undefined {\n return this.#getSyncedEmbedOption('embedHost') as string | null | undefined;\n }\n\n /**\n * Sets the overridding embed host for the player.\n * Internal use only.\n * @param {string} newEmbedHost\n * @returns {void}\n */\n public set embedHost(newEmbedHost: string) {\n this.#setSyncedEmbedOption('embedHost', newEmbedHost);\n }\n\n /**\n * Returns all the embed options being set on the WistiaPlayer from attributes and mediaData json\n * @returns {EmbedOptions }\n */\n public get embedOptions(): EmbedOptions {\n return this.#_playerData.embedOptions;\n }\n\n /**\n * Returns whether the video has ended playback.\n * @returns {boolean}\n */\n public get ended(): boolean {\n return this.#_impl?.state() === 'ended';\n }\n\n /**\n * Returns the current end video behavior value\n * @returns {'default' | 'loop' | 'reset'}\n */\n public get endVideoBehavior(): NonNullable<EmbedOptions['endVideoBehavior']> {\n return this.#getSyncedEmbedOption('endVideoBehavior') as NonNullable<\n EmbedOptions['endVideoBehavior']\n >;\n }\n\n /**\n * Sets the behavior for what the video should do when it ends.\n * @param {'default' | 'loop' | 'reset'} behavior\n * @returns {void}\n */\n public set endVideoBehavior(behavior: NonNullable<EmbedOptions['endVideoBehavior']>) {\n // loop is a slightly odd option, as it's set as an attribute directly on the\n // underlying <video /> element. So we must do more than just change the _impl._attrs\n // for it to be updated.\n if (behavior === 'loop') {\n this.#_impl?.addLoopBehavior();\n } else {\n this.#_impl?.removeLoopBehavior();\n }\n\n this.#setSyncedEmbedOption('endVideoBehavior', behavior);\n }\n\n /**\n * Returns the embed's event key if it exists.\n * @returns {string | undefined}\n */\n public get eventKey(): string | undefined {\n return this.#_impl?.eventKey();\n }\n\n /**\n * Returns how the video should be sized within its container.\n * @returns {'contain' | 'cover' | 'fill'}\n */\n public get fitStrategy(): NonNullable<EmbedOptions['fitStrategy']> {\n return this.#getSyncedEmbedOption('fitStrategy') as NonNullable<EmbedOptions['fitStrategy']>;\n }\n\n /**\n * Sets how the video should be sized within its container.\n * @param {'contain' | 'cover' | 'fill'} strategy\n * @returns {void}\n */\n public set fitStrategy(strategy: NonNullable<EmbedOptions['fitStrategy']>) {\n this.#setSyncedEmbedOption('fitStrategy', strategy);\n }\n\n /**\n * Returns if the fullscreen button control will appear in the control bar.\n * @returns {boolean}\n */\n public get fullscreenControl(): boolean {\n return this.#getSyncedEmbedOption('fullscreenControl') as boolean;\n }\n\n /**\n * Sets if the fullscreen button control is enabled in the control bar.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set fullscreenControl(shouldDisplay: boolean) {\n this.#_impl?.fullscreenControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('fullscreenControl', shouldDisplay);\n }\n\n /**\n * Returns if the video should use HLS playback.\n * Internal only.\n * @returns {boolean}\n */\n public get hls(): boolean {\n return this.#getSyncedEmbedOption('hls') as boolean;\n }\n\n /**\n * Sets if the video should use HLS playback.\n * Internal only.\n * @param {boolean} shouldUseHls\n * @returns {void}\n */\n public set hls(shouldUseHls: boolean) {\n this.#setSyncedEmbedOption('hls', shouldUseHls);\n }\n\n /**\n * Returns whether the video is currently in fullscreen\n * @returns {boolean}\n */\n public get inFullscreen(): boolean {\n return this.#_impl?.inFullscreen() ?? false;\n }\n\n public get inputContext(): string | undefined {\n return this.#_impl?.getInputContext();\n }\n\n /**\n * Returns whether instantHLS is enabled for the video.\n * @returns {boolean}\n */\n public get instantHls(): boolean {\n return this.#_impl?.isInstantHls() ?? false;\n }\n\n // the publicApi returns a language object, but you are not allowed to pass that object as a type when setting the language\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get language(): LanguageSimplified | undefined {\n return this.#_api?.language() ?? this.#defaultLocalization();\n }\n\n public set language(language: string | undefined) {\n this.#_api?.language(language);\n }\n\n public get languages(): LanguageSimplified[] {\n return this.#_api?.languages() ?? [this.#defaultLocalization()];\n }\n\n /**\n * Returns all the mediaData set on the WistiaPlayer\n * @returns {MediaData }\n */\n public get mediaData(): MediaData {\n return this.#_playerData.mediaData;\n }\n\n /**\n * Returns the hashed id of the media.\n * @returns {string}\n */\n public get mediaId(): string {\n return this.getAttribute('media-id') ?? '';\n }\n\n /**\n * Replaces the content of the current video with the video identified by the given mediaId.\n * @param {string} newMediaId\n * @returns {void}\n */\n public set mediaId(newMediaId: string) {\n const prevMediaId = this.mediaId;\n\n if (prevMediaId === newMediaId) {\n return;\n }\n\n this.#_logger.info('set mediaId', newMediaId);\n\n // Sync the element's media-id attribute with this property\n // This is the most important and only required attribute on the element\n // and won't change frequently, so it shouldn't cost too much to keep in sync\n this.setAttribute('media-id', newMediaId);\n }\n\n /**\n * Returns the language of the media stream.\n * @returns {Localization | undefined}\n */\n public get mediaLanguage(): LanguageSimplified {\n return this.#_api?.mediaLanguage() ?? this.#defaultLocalization();\n }\n\n /**\n * Changes the language of the media stream/content.\n * @param {string} language\n * @returns {void}\n */\n public set mediaLanguageCode(languageCode: string) {\n this.#_api?.mediaLanguageCode(languageCode);\n }\n\n public get mediaLanguageCode(): string {\n return this.#_api?.mediaLanguageCode() ?? this.#defaultLocalization().wistiaLanguageCode;\n }\n\n /**\n * Returns the languages of the media.\n * @returns {Localization[]}\n */\n public get mediaLanguages(): LanguageSimplified[] {\n return this.#_api?.mediaLanguages() ?? [this.#defaultLocalization()];\n }\n\n /**\n * Returns if player is currently muted\n * @returns {boolean}\n */\n public get muted(): boolean {\n return this.#_impl?.isMuted() ?? this.embedOptions.muted ?? false;\n }\n\n /**\n * Change player muted state\n * @param {boolean} shouldMute\n */\n public set muted(shouldMute: boolean) {\n if (this.#_impl) {\n if (shouldMute) {\n void this.#_impl.mute();\n } else {\n void this.#_impl.unmute();\n }\n }\n\n this.#setSyncedEmbedOption('muted', shouldMute);\n }\n\n /**\n * Returns the name of the media as it is in the Wistia application.\n * Returns undefined until media data is loaded.\n * @returns {string | undefined}\n */\n public get name(): string | undefined {\n return this.#_playerData.mediaData.name ?? this.#_api?._mediaData?.name ?? undefined;\n }\n\n /**\n * Returns the status of the opaqueControls embed option, which determines\n * if the playbar and big play button are opaque ore semi-transparent\n *\n * @returns {boolean}\n */\n public get opaqueControls(): boolean {\n return this.#getSyncedEmbedOption('opaqueControls') as boolean;\n }\n\n /**\n * When true the player will use a fully opaque big play button and playbar\n * @param {boolean} opaqueControls\n * @returns {void}\n */\n public set opaqueControls(opaqueControls: unknown) {\n const valueAsBoolean = Boolean(opaqueControls);\n this.#_impl?.opaqueControls(valueAsBoolean);\n this.#setSyncedEmbedOption('opaqueControls', valueAsBoolean);\n }\n\n public get paddingTop(): string {\n return this.#paddingTop;\n }\n\n public set paddingTop(paddingTop: string) {\n this.#paddingTop = paddingTop;\n }\n\n /**\n * Returns a boolean that indicates whether the video is paused.\n * @returns {boolean}\n */\n public get paused(): boolean {\n return this.#_impl?.state() === 'paused';\n }\n\n /**\n * Returns the percent of the video that has been watched as a decimal between 0 and 1.\n * @returns {number}\n */\n public get percentWatched(): number {\n return this.#_impl?.percentWatched() ?? 0;\n }\n\n /**\n * Returns the playback rate of the video.\n * @returns {number}\n */\n public get playbackRate(): number {\n return this.#_impl?.playbackRate() ?? this.embedOptions.playbackRate ?? 1;\n }\n\n /**\n * Set the playback rate of the video.\n * @param {number} rate\n * @returns {void}\n */\n public set playbackRate(rate: number) {\n this.#_impl?.playbackRate(rate);\n this.#setSyncedEmbedOption('playbackRate', rate);\n }\n\n /**\n * If set to true, the playback rate control will appear in the setting control.\n * @returns {boolean}\n */\n public get playbackRateControl(): boolean {\n return this.#getSyncedEmbedOption('playbackRateControl') as boolean;\n }\n\n /**\n * enable or disable the playback rate control in the settings control.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playbackRateControl(shouldDisplay: boolean) {\n this.#_impl?.playbackRateControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playbackRateControl', shouldDisplay);\n }\n\n /**\n * Returns if the playbar - which includes the playhead, current time, and scrubbing functionality - will be available.\n * @returns {boolean}\n */\n public get playBarControl(): boolean {\n return this.#getSyncedEmbedOption('playBarControl') as boolean;\n }\n\n /**\n * Sets if the playbar - which includes the playhead, current time, and scrubbing functionality - will be available.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playBarControl(shouldDisplay: boolean) {\n this.#_impl?.playbarControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playBarControl', shouldDisplay);\n }\n\n /**\n * Returns the border radius of the player.\n * @returns {number}\n */\n public get playerBorderRadius(): number {\n return this.#getSyncedEmbedOption('playerBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the player.\n * @param {number} radius\n * @returns {void}\n */\n public set playerBorderRadius(radius: number) {\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#_impl?.setPlayerBorderRadius(Number(radius));\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('playerBorderRadius', Number(radius));\n }\n\n /**\n * Returns the base color of the player.\n * @returns {string}\n */\n public get playerColor(): string {\n if (this.playerColorGradient?.on) {\n return (\n getGradientColor(this.playerColorGradient) ??\n (this.#getSyncedEmbedOption('playerColor') as string)\n );\n }\n return this.#getSyncedEmbedOption('playerColor') as string;\n }\n\n /**\n * Changes the base color of the player.\n * Expects a hexadecimal rgb string like \"ff0000\" (red), \"000000\" (black), \"ffffff\" (white), or \"0000ff\" (blue).\n * @param {string} newColor\n * @returns {void}\n */\n public set playerColor(newColor: string) {\n this.#_impl?.playerColor(newColor);\n this.#setSyncedEmbedOption('playerColor', newColor);\n }\n\n /**\n * Returns the player color gradient object.\n * @returns {Gradient}\n */\n public get playerColorGradient(): Gradient | undefined {\n const value = this.#getSyncedEmbedOption('playerColorGradient');\n if (isGradient(value)) {\n return value;\n }\n return undefined;\n }\n\n /**\n * Sets the player color gradient object.\n * @param {Gradient} gradient\n * @returns {void}\n */\n public set playerColorGradient(gradient: unknown) {\n if (!isGradient(gradient)) {\n throw new Error('playerColorGradient must be a valid gradient object');\n }\n\n this.#_impl?.playerColorGradient(gradient);\n this.#setSyncedEmbedOption('playerColorGradient', gradient);\n }\n\n /**\n * Returns the overridding player.\n * Internal use only.\n * @returns {Players | undefined}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get playerForce(): Players | undefined {\n return (this.getAttribute('player-force') as Players | null) ?? undefined;\n }\n\n /**\n * Sets the overridding player.\n * Internal use only.\n * @param {string} newPlayer\n * @returns {void}\n */\n public set playerForce(newPlayer: Players) {\n this.#_logger.info('set playerForce', newPlayer);\n this.setAttribute('player-force', newPlayer);\n }\n\n /**\n * Returns the strategy for associating specially crafted links on a page with a video, turning them into a playlist.\n * auto: For each video on the page, look for links after the video, until we come to another Wistia video.\n * manual: Given each link element, look at its 'container' option to determine which video it should connect to.\n * \"container\": For all embed links in a container whose id matches this given string, connect them to this specific video.\n * @returns {'auto' | 'manual' | string}\n */\n public get playlistLinks(): string {\n return this.#getSyncedEmbedOption('playlistLinks') as string;\n }\n\n /**\n * Sets the strategy for associating specially crafted links on a page with a video, turning them into a playlist.\n * @param {'auto' | 'manual' | string} newStrategy\n * @returns {void}\n */\n public set playlistLinks(newStrategy: string) {\n this.#setSyncedEmbedOption('playlistLinks', newStrategy);\n }\n\n /**\n * When present or set to true and this video has a playlist, it will loop back to\n * the first video and replay it once the last video has finished.\n * @returns {boolean}\n */\n public get playlistLoop(): boolean {\n return this.#getSyncedEmbedOption('playlistLoop') as boolean;\n }\n\n /**\n * When present or set to true and this video has a playlist, it will loop back to\n * the first video and replay it once the last video has finished.\n * @param {boolean} shouldLoop\n * @returns {void}\n */\n public set playlistLoop(shouldLoop: boolean) {\n this.#setSyncedEmbedOption('playlistLoop', shouldLoop);\n }\n\n /**\n * If set to true, the small play button control will be available.\n * @returns {boolean}\n */\n public get playPauseControl(): boolean {\n return this.#getSyncedEmbedOption('playPauseControl') as boolean;\n }\n\n /**\n * If set to true, the small play button control will be available.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playPauseControl(shouldDisplay: boolean) {\n this.#_impl?.playPauseControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playPauseControl', shouldDisplay);\n }\n\n /**\n * By default, pausing a video will display a brief animation of the pause symbol\n * and resuming the video will display an animation of the play symbol.\n * Setting this embed option to false will remove those animations.\n * @returns {boolean}\n */\n public get playPauseNotifier(): boolean {\n return this.#getSyncedEmbedOption('playPauseNotifier') as boolean;\n }\n\n /**\n * By default, pausing a video will display a brief animation of the pause symbol\n * and resuming the video will display an animation of the play symbol.\n * Setting this embed option to false will remove those animations.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set playPauseNotifier(shouldDisplay: boolean) {\n this.#_impl?.playPauseNotifierEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('playPauseNotifier', shouldDisplay);\n }\n\n /**\n * Controls whether playback is suspended (paused) while the video is scrolled out of the\n * viewport, resuming when it re-enters. This mirrors the legacy player's `playSuspendedOffScreen`\n * embed option.\n * 'auto': off-screen suspend follows the muted state — it is active whenever the video is muted\n * (the default, and what makes silent autoplay pause off-screen automatically).\n * true: always suspend playback while off-screen.\n * false: never suspend playback while off-screen.\n * @returns {boolean | 'auto'}\n */\n public get playSuspendedOffScreen(): boolean | 'auto' {\n return this.#getSyncedEmbedOption('playSuspendedOffScreen') as boolean | 'auto';\n }\n\n /**\n * Controls whether playback is suspended (paused) while the video is scrolled out of the\n * viewport, resuming when it re-enters. This mirrors the legacy player's `playSuspendedOffScreen`\n * embed option.\n * @param {boolean | 'auto'} value\n * @returns {void}\n */\n public set playSuspendedOffScreen(value: boolean | 'auto') {\n this.#setSyncedEmbedOption('playSuspendedOffScreen', value);\n }\n\n /**\n * Getter. Returns all defined plugins.\n * @returns {PluginInstances} returns object of defined plugins. Please note this may return an\n * empty object if not plugins have yet been defined.\n */\n public get plugins(): PluginInstances {\n if (this.#_impl) {\n // We don't want customers modifying this object (adding/deleting what is already here).\n // But they may need to interact/modify the existing ones, so we only use `seal`.\n return Object.seal({ ...this.#_impl.plugin });\n }\n return {};\n }\n\n /**\n * Returns if the play button will expand to cover the thumbnail on hover,\n * while also displaying the duration of the video.\n * @returns {boolean}\n */\n public get popoverAnimateThumbnail(): boolean {\n return this.#getSyncedEmbedOption('popoverAnimateThumbnail') as boolean;\n }\n\n /**\n * Sets if the play button will expand to cover the thumbnail on hover,\n * while also displaying the duration of the video.\n * @param {boolean} shouldAnimate\n * @returns {void}\n */\n public set popoverAnimateThumbnail(shouldAnimate: boolean) {\n this.#setSyncedEmbedOption('popoverAnimateThumbnail', shouldAnimate);\n }\n\n /**\n * Returns the current state of the video.\n * @returns {PopoverAnimation}\n */\n public get popoverAnimation(): PopoverAnimation {\n return this.#getSyncedEmbedOption('popoverAnimation') as PopoverAnimation;\n }\n\n /**\n * Sets if the play button will expand to cover the thumbnail on hover,\n * while also displaying the duration of the video.\n * @param {PopoverAnimation} newAnimation\n * @returns {void}\n */\n public set popoverAnimation(newAnimation: PopoverAnimation) {\n this.#setSyncedEmbedOption('popoverAnimation', newAnimation);\n }\n\n /**\n * Returns the border color of the popover.\n * @returns {string}\n */\n public get popoverBorderColor(): string {\n return this.#getSyncedEmbedOption('popoverBorderColor') as string;\n }\n\n /**\n * Sets the border color of the popover.\n * @param {string} newColor\n * @returns {void}\n */\n public set popoverBorderColor(newColor: string) {\n this.#setSyncedEmbedOption('popoverBorderColor', newColor);\n }\n\n /**\n * Returns the border radius of the popover.\n * @returns {number}\n */\n public get popoverBorderRadius(): number {\n return this.#getSyncedEmbedOption('popoverBorderRadius') as number;\n }\n\n /**\n * Sets the border radius of the popover.\n * @param {number} newRadius\n * @returns {void}\n */\n public set popoverBorderRadius(newRadius: number) {\n this.#setSyncedEmbedOption('popoverBorderRadius', newRadius);\n }\n\n /**\n * Returns the border width of the popover.\n * @returns {number}\n */\n public get popoverBorderWidth(): number {\n return this.#getSyncedEmbedOption('popoverBorderWidth') as number;\n }\n\n /**\n * Sets the border width of the popover.\n * @param {number} newWidth\n * @returns {void}\n */\n public set popoverBorderWidth(newWidth: number) {\n this.#setSyncedEmbedOption('popoverBorderWidth', newWidth);\n }\n\n /**\n * Returns if the popover should be displayed with a box shadow.\n * @returns {boolean}\n */\n public get popoverBoxShadow(): boolean {\n return this.#getSyncedEmbedOption('popoverBoxShadow') as boolean;\n }\n\n /**\n * Sets if the popover should be displayed with a box shadow.\n * @param {boolean} shouldDisplayBoxShadow\n * @returns {void}\n */\n public set popoverBoxShadow(shouldDisplayBoxShadow: boolean) {\n this.#setSyncedEmbedOption('popoverBoxShadow', shouldDisplayBoxShadow);\n }\n\n /**\n * Returns text set to be displayed directly below the popover.\n * @returns {string}\n */\n public get popoverCaption(): string {\n return this.#getSyncedEmbedOption('popoverCaption') as string;\n }\n\n /**\n * Sets text set to be displayed directly below the popover.\n * @param {string} newCaption\n * @returns {void}\n */\n public set popoverCaption(newCaption: string) {\n this.#setSyncedEmbedOption('popoverCaption', newCaption);\n }\n\n /**\n * Returns the id of the dom element which will be moved beneath the popover.\n * @returns {string}\n */\n public get popoverCaptionContainer(): string {\n return this.#getSyncedEmbedOption('popoverCaptionContainer') as string;\n }\n\n /**\n * Sets the id of the dom element which will be moved beneath the popover.\n * @param {string} newCaptionContainer\n * @returns {void}\n */\n public set popoverCaptionContainer(newCaptionContainer: string) {\n this.#setSyncedEmbedOption('popoverCaptionContainer', newCaptionContainer);\n }\n\n /**\n * Returns how the popover content will render.\n * @returns {PopoverContentSettings | string | undefined}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get popoverContent(): PopoverContentSettings | undefined {\n return this.#getSyncedEmbedOption('popoverContent') as unknown as\n | PopoverContentSettings\n | undefined;\n }\n\n /**\n * Sets how the popover content will render.\n * @param {PopoverContentSettings} newContentType\n * @returns {void}\n */\n public set popoverContent(newContentType: PopoverContentSettings) {\n this.#setSyncedEmbedOption('popoverContent', newContentType);\n }\n\n /**\n * Returns if embed should override the behavior for the autoplay option in Customize for\n * a popover specifically, so that launching the popover doesn't also play the video.\n * @returns {boolean}\n */\n public get popoverDisableAutoplay(): boolean {\n return this.#getSyncedEmbedOption('popoverDisableAutoplay') as boolean;\n }\n\n /**\n * Sets if embed should override the behavior for the autoplay option in Customize for\n * a popover specifically, so that launching the popover doesn't also play the video.\n * @param {boolean} shouldDisable\n * @returns {void}\n */\n public set popoverDisableAutoplay(shouldDisable: boolean) {\n this.#setSyncedEmbedOption('popoverDisableAutoplay', shouldDisable);\n }\n\n /**\n * Returns the overlay's background color in RGB hexadecimal.\n * @returns {string}\n */\n public get popoverOverlayColor(): string {\n return this.#getSyncedEmbedOption('popoverOverlayColor') as string;\n }\n\n /**\n * Sets the overlay's background color in RGB hexadecimal.\n * @param {string} newColor\n * @returns {void}\n */\n public set popoverOverlayColor(newColor: string) {\n this.#setSyncedEmbedOption('popoverOverlayColor', newColor);\n }\n\n /**\n * Returns the overlay's opacity. Expects a decimal value between 0 and 1.\n * @returns {number}\n */\n public get popoverOverlayOpacity(): number {\n return this.#getSyncedEmbedOption('popoverOverlayOpacity') as number;\n }\n\n /**\n * Sets the overlay's opacity. Expects a decimal value between 0 and 1.\n * @param {number} newOpacity\n * @returns {void}\n */\n public set popoverOverlayOpacity(newOpacity: number) {\n this.#setSyncedEmbedOption('popoverOverlayOpacity', newOpacity);\n }\n\n /**\n * Returns if scrolling should be prevented when the popover is open.\n * @returns {boolean}\n */\n public get popoverPreventScroll(): boolean {\n return this.#getSyncedEmbedOption('popoverPreventScroll') as boolean;\n }\n\n /**\n * Sets if scrolling should be prevented when the popover is open.\n * @param {boolean} shouldPreventScroll\n * @returns {void}\n */\n public set popoverPreventScroll(shouldPreventScroll: boolean) {\n this.#setSyncedEmbedOption('popoverPreventScroll', shouldPreventScroll);\n }\n\n /**\n * Returns if popover should immediately open as if it was clicked.\n * @returns {boolean}\n */\n public get popoverShowOnLoad(): boolean {\n return this.#getSyncedEmbedOption('popoverShowOnLoad') as boolean;\n }\n\n /**\n * Sets if popover should immediately open as if it was clicked.\n * @param {boolean} shouldShow\n * @returns {void}\n */\n public set popoverShowOnLoad(shouldShow: boolean) {\n this.#setSyncedEmbedOption('popoverShowOnLoad', shouldShow);\n }\n\n /**\n * Overrides the thumbnail image that appears before the video plays.\n * Expects an absolute URL to an image.\n * @returns {string}\n */\n public get poster(): string {\n return this.#getSyncedEmbedOption('poster') as string;\n }\n\n /**\n * Overrides the thumbnail image that appears before the video plays.\n * Expects an absolute URL to an image.\n * @param {string} newUrl\n * @returns {void}\n */\n public set poster(newUrl: string) {\n // This method is called a second time when the attribute value\n // is set on the element. Checking for the same value here prevents\n // us from running that second redundant set.\n const prevVal = this.poster;\n if (prevVal === newUrl) {\n return;\n }\n\n const prevUrl = this.poster;\n this.#setSyncedEmbedOption('poster', newUrl);\n\n // Sync the element's autoplay attribute with this property\n // This matches the behavior of the native <video> element\n this.setAttribute('poster', newUrl);\n\n if (prevUrl !== newUrl) {\n this.dispatchEvent(new CustomEvent('thumbnailchange'));\n }\n }\n\n /**\n * Returns the preload setting for the player.\n * @returns {string | undefined}\n * undefined is allowed as a return type because there may be situations\n * where the player and/or engine has not loaded and we don't know what\n * preload setting will be used\n */\n public get preload(): NonNullable<EmbedOptions['preload']> {\n return this.#_impl?.preloadValue() ?? this.embedOptions.preload ?? 'metadata';\n }\n\n /**\n * sets the preload value for the player. Note that changing this option\n * after player initialization has no impact.\n * @param {'auto'| 'metadata' | 'none'} preloadValue\n * @returns {void}\n */\n public set preload(preloadValue: NonNullable<EmbedOptions['preload']>) {\n // This method is called a second time when the attribute value\n // is set on the element. Checking for the same value here prevents\n // us from running that second redundant set.\n const prevVal = this.preload;\n if (prevVal === preloadValue) {\n return;\n }\n this.#setSyncedEmbedOption('preload', preloadValue);\n\n // Sync the element's autoplay attribute with this property\n // This matches the behavior of the native <video> element\n this.setAttribute('preload', preloadValue);\n }\n\n /**\n * If set to true, the quality control will appear in the setting control.\n * @returns {boolean}\n */\n public get qualityControl(): boolean {\n return this.#getSyncedEmbedOption('qualityControl') as boolean;\n }\n\n /**\n * enable or disable the quality control in the settings control.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set qualityControl(shouldDisplay: boolean) {\n this.#_impl?.qualityControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('qualityControl', shouldDisplay);\n }\n\n /**\n * Return the max quality allowed for the 'Auto' asset in HLS playback\n * @returns {number | undefined}\n */\n public get qualityMax(): AllowedQualities {\n return this.#getSyncedEmbedOption('qualityMax') as AllowedQualities;\n }\n\n /**\n * Set the max quality to be used for \"Auto\" in the HLS stream.\n * @param {number} quality\n * @returns {void}\n */\n public set qualityMax(quality: AllowedQualities) {\n this.#_impl?.qualityMax(quality);\n this.#setSyncedEmbedOption('qualityMax', quality);\n }\n\n /**\n * Return the min quality allowed for the 'Auto' asset in HLS playback\n * @returns {number}\n */\n public get qualityMin(): AllowedQualities {\n return this.#getSyncedEmbedOption('qualityMin') as AllowedQualities;\n }\n\n /**\n * Set the min quality to be used for \"Auto\" in the HLS stream.\n * @param {number} quality\n * @returns {void}\n */\n public set qualityMin(quality: AllowedQualities) {\n this.#_impl?.qualityMin(quality);\n this.#setSyncedEmbedOption('qualityMin', quality);\n }\n\n /**\n * Returns the readyState of the inner video HTML element.\n * @returns {number}\n */\n public get readyState(): number {\n return this.#_impl?.getReadyState() ?? 0;\n }\n\n /**\n * Returns the current resumable status of the video.\n * @returns {'auto' | boolean}\n */\n public get resumable(): NonNullable<EmbedOptions['resumable']> {\n return (this.#getSyncedEmbedOption('resumable') ?? 'auto') as NonNullable<\n EmbedOptions['resumable']\n >;\n }\n\n /**\n * set the resumable state of the video to 'auto' | true | false.\n * note that this can be changed 'beforeplay', however changing the\n * value after play will have no effect\n * @param {'auto' | boolean} resumableState\n * @returns {void}\n */\n public set resumable(resumableState: NonNullable<EmbedOptions['resumable']>) {\n this.#_impl?.setResumable(resumableState);\n this.#setSyncedEmbedOption('resumable', resumableState);\n }\n\n /**\n * Returns whether the player enters fullscreen when a touch device is rotated\n * to landscape while the video is playing (and exits on rotate back to\n * portrait). Opt-in; off by default.\n * @returns {boolean}\n */\n public get rotateToFullscreen(): boolean {\n return this.#getSyncedEmbedOption('rotateToFullscreen') as boolean;\n }\n\n /**\n * Sets whether the player enters fullscreen when a touch device is rotated to\n * landscape while the video is playing. This is an embedder-set config, not a\n * viewer-facing control. Set it before play; changing it after the player has\n * initialized has no effect on the already-bound orientation listener.\n * @param {boolean} shouldRotateToFullscreen\n * @returns {void}\n */\n public set rotateToFullscreen(shouldRotateToFullscreen: unknown) {\n const attrAsBoolean = shouldRotateToFullscreen === 'true' || shouldRotateToFullscreen === true;\n this.#_impl?.rotateToFullscreen(attrAsBoolean);\n this.#setSyncedEmbedOption('rotateToFullscreen', attrAsBoolean);\n }\n\n /**\n * Returns a value which controls all rounded corners of the player.\n * @returns {number}\n */\n public get roundedPlayer(): number {\n return this.#getSyncedEmbedOption('roundedPlayer') as number;\n }\n\n /**\n * Returns the value which controls all rounded corners of the player.\n * @param {number} radius\n * @returns {void}\n */\n public set roundedPlayer(radius: number) {\n // ensure the value is a number, since this is potentially coming from outside the player,\n // we can't guarantee they have given us the right type\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#_impl?.setRoundedPlayer(Number(radius));\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n this.#setSyncedEmbedOption('roundedPlayer', Number(radius));\n }\n\n /**\n * Returns the number of unique seconds that have been watched for the video.\n * This does not include seconds that have been skipped by seeking.\n * @returns {number}\n */\n public get secondsWatched(): number {\n return this.#_impl?.secondsWatched() ?? 0;\n }\n\n /**\n * Returns an array where each index represents the number of times the viewer has watched each second of the video.\n * @returns {number[]}\n */\n public get secondsWatchedVector(): number[] {\n return this.#_impl?.secondsWatchedVector() ?? [];\n }\n\n /**\n * Returns whether JSON+LD seo data will be injected.\n * @returns {boolean}\n */\n public get seo(): boolean {\n return this.#getSyncedEmbedOption('seo') as boolean;\n }\n\n /**\n * Set whether JSON+LD seo data will be injected.\n * Note that changing this value after embed has no impact as JSON+LD needs\n * to be injected as soon as possible.\n * @param {boolean} val\n * @returns {void}\n */\n public set seo(val: boolean) {\n this.#setSyncedEmbedOption('seo', val);\n }\n\n /**\n * If set to true, the settings control will appear in the control bar.\n * @returns {boolean}\n */\n public get settingsControl(): boolean {\n return this.#getSyncedEmbedOption('settingsControl') as boolean;\n }\n\n /**\n * enable or disable the settings control in the control bar.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set settingsControl(shouldDisplay: boolean) {\n this.#_impl?.settingsControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('settingsControl', shouldDisplay);\n }\n\n /**\n * This option allows videos to autoplay in a muted state in contexts where normal autoplay\n * is blocked or not supported (e.g. iOS, Safari 11+, Chrome 66+).\n * allow: The video will default to normal autoplay, with silent autoplay as a fallback if needed.\n * false: The video will not autoplay silently.\n * true: The video will default to autoplaying silently.\n * @returns {boolean | 'allow'}\n */\n public get silentAutoplay(): boolean | 'allow' {\n return this.#getSyncedEmbedOption('silentAutoplay') as boolean | 'allow';\n }\n\n /**\n * This option allows videos to autoplay in a muted state in contexts where normal autoplay\n * is blocked or not supported (e.g. iOS, Safari 11+, Chrome 66+).\n * @param {boolean | 'allow'} silentAutoplayValue\n * @returns {void}\n */\n public set silentAutoplay(silentAutoplayValue: boolean | 'allow') {\n this.#setSyncedEmbedOption('silentAutoplay', silentAutoplayValue);\n }\n\n public get sourceLanguage(): Localization | undefined {\n return (\n this.#_playerData.mediaData.localizations?.find((loc) => loc.isOriginal) ??\n this.#_playerData.mediaData.localizations?.[0]\n );\n }\n\n /**\n * Returns the source media id for the player. If a player has different localized versions,\n * each will have a different mediaId, but the same sourceMediaId.\n * @returns {string}\n */\n public get sourceMediaId(): string {\n return this.mediaData.sourceHashedId ?? this.mediaId;\n }\n\n /**\n * Returns the current state of the video.\n * @returns {PlayerState}\n */\n public get state(): PlayerState {\n return this.#_api?.state() ?? defaultEmbedOptions.state;\n }\n\n /**\n * Returns the stats url for the player.\n * @returns {string | null}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get statsUrl(): EmbedOptions['statsUrl'] {\n return this.#getSyncedEmbedOption('statsUrl') as EmbedOptions['statsUrl'];\n }\n\n /**\n * Sets the stats url for the player.\n * @param {string} url\n * @returns {void}\n */\n public set statsUrl(url: NonNullable<EmbedOptions['statsUrl']>) {\n this.#setSyncedEmbedOption('statsUrl', url);\n }\n\n /**\n * Returns if a swatch should be shown before the player renders.\n * Internal use only.\n * @returns {boolean | undefined}\n */\n // This will return undefined if it's not set, but you are not allowed to set it to undefined\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n public get swatch(): boolean | undefined {\n return this.#getSyncedEmbedOption('swatch') as boolean | undefined;\n }\n\n /**\n * Sets if a swatch should be shown before the player renders.\n * Internal use only.\n * @param {boolean} shouldShowSwatch\n * @returns {void}\n */\n public set swatch(shouldShowSwatch: boolean) {\n this.#setSyncedEmbedOption('swatch', shouldShowSwatch);\n }\n\n /**\n * If present, the background behind the video player will be transparent\n * allowing the page color to show through instead of black.\n * @returns {boolean}\n */\n public get transparentLetterbox(): boolean {\n return this.#getSyncedEmbedOption('transparentLetterbox') as boolean;\n }\n\n /**\n * Sets the letterbox to be transparent or not.\n * @param {boolean} shouldSetTransparentLetterbox\n * @returns {void}\n */\n public set transparentLetterbox(shouldSetTransparentLetterbox: boolean) {\n this.#setSyncedEmbedOption('transparentLetterbox', shouldSetTransparentLetterbox);\n }\n\n /**\n * Returns the unique id of this embed\n * Expected format is `wistia-mediaId-index`\n * @returns {string}\n */\n public get uniqueId(): string {\n return this.getAttribute('unique-id') ?? '';\n }\n\n /**\n * Sets the unique id of this embed.\n * Expected format is `wistia-mediaId-index`\n * @returns {string}\n */\n public set uniqueId(id: string) {\n this.setAttribute('unique-id', id);\n }\n\n /**\n * Returns if this custom element was created from a legacy translated embed.\n * Internal use only.\n * @returns {boolean}\n */\n public get useWebComponent(): boolean {\n return this.getAttribute('use-web-component') === 'true';\n }\n\n /**\n * Set if this custom element was created from a legacy translated embed.\n * Internal use only.\n * @param {boolean} val\n * @returns {void}\n */\n public set useWebComponent(val: boolean) {\n if (val) {\n this.setAttribute('use-web-component', String(val));\n } else {\n this.removeAttribute('use-web-component');\n }\n }\n\n /**\n * Returns the current video quality.\n * @returns {number | 'auto'}\n */\n public get videoQuality(): number | 'auto' {\n return this.#_impl?.getVideoQuality() ?? this.embedOptions.videoQuality ?? 'auto';\n }\n\n /**\n * Sets the video quality.\n * @param {number | 'auto'} quality\n * @returns {void}\n */\n public set videoQuality(quality: number | 'auto') {\n this.#_impl?.setVideoQuality(quality);\n this.#setSyncedEmbedOption('videoQuality', quality);\n }\n\n /**\n * Returns the visitor_key of the viewer of this player.\n * @returns {string | null | undefined}\n */\n public get visitorKey(): string | null | undefined {\n return Wistia.visitorKey?.value();\n }\n\n /**\n * Returns the current volume set on the player\n * @returns {number}\n */\n public get volume(): number {\n return this.#getSyncedEmbedOption('volume') as number;\n }\n\n /**\n * Set the current volume set on the player\n * @param {number} level - a Number from 0 - 1\n * @returns {void}\n */\n public set volume(level: number) {\n this.#_impl?.volume(level);\n this.#setSyncedEmbedOption('volume', level);\n }\n\n /**\n * If set to true, the volume control will appear in the control bar.\n * Note that on mobile, we never show a volume control, as the device\n * volume is used.\n * @returns {boolean}\n */\n public get volumeControl(): boolean {\n return this.#getSyncedEmbedOption('volumeControl') as boolean;\n }\n\n /**\n * enable or disable the volume control in the control bar.\n * @param {boolean} shouldDisplay\n * @returns {void}\n */\n public set volumeControl(shouldDisplay: boolean) {\n this.#_impl?.volumeControlEnabled(shouldDisplay);\n this.#setSyncedEmbedOption('volumeControl', shouldDisplay);\n }\n\n /**\n * Returns if the player embed is a popover.\n * @returns {boolean}\n */\n public get wistiaPopover(): boolean {\n return this.#getSyncedEmbedOption('wistiaPopover') as boolean;\n }\n\n /**\n * Sets if the player embed is a popover.\n * @param {boolean} shouldBePopover\n * @returns {void}\n */\n public set wistiaPopover(shouldBePopover: boolean) {\n this.#setSyncedEmbedOption('wistiaPopover', shouldBePopover);\n }\n\n get #pageUrl(): string {\n return this.getAttribute('page-url') ?? inferPageUrl();\n }\n\n // --------------------------------------------------\n // Public api methods\n // --------------------------------------------------\n\n /**\n * Adds an event listener to the player.\n * @param {string} eventName - The name of the event to listen for.\n * @param {EventListenerOrEventListenerObject} listener - The function to call when the event occurs.\n * @param {AddEventListenerOptions | boolean} options - Additional options for the event listener.\n */\n public addEventListener(\n eventName: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions | boolean,\n ): void {\n if (!Array.isArray(this.#_eventListeners[eventName])) {\n this.#_eventListeners[eventName] = [];\n }\n this.#_eventListeners[eventName].push({ listener, options });\n\n super.addEventListener(eventName, listener, options);\n }\n\n /**\n * Attempt to enter fullscreen mode.\n * @returns {Promise<void>}\n */\n public async cancelFullscreen(): Promise<void> {\n return this.#_impl?.cancelFullscreen().then(() => {\n this._fullscreenState.heightBeforeFullscreen = undefined;\n this._fullscreenState.widthBeforeFullscreen = undefined;\n });\n }\n\n /**\n * Creates an overlay with the specified name and options.\n * @param {string} name - The name of the overlay.\n * @param {OverlayOptions} options - The options for the overlay.\n * @returns A promise that resolves when the overlay is created successfully, or rejects with an error if the overlay cannot be defined at this time.\n */\n public async createOverlay(name: string, options: OverlayOptions): Promise<void> {\n if (this.#_impl?.defineOverlay) {\n return this.#_impl.defineOverlay(name, options);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be defined at this time`));\n }\n\n /**\n * Defines a plugin on the player.\n * @param {T extends keyof PluginConfigs} name name of the plugin to define\n * @param {PluginConfigs[T]} options object of plugin options related to the specific plugin\n * @returns {Promise<PluginInstances<T>>} returns a Promise that resolves with the defined plugin\n */\n public async definePlugin<T extends keyof PluginConfigs>(\n name: T,\n options: PluginConfigs[T],\n ): Promise<PluginInstances[T]> {\n const addPlugin = async (): Promise<PluginInstances[T]> => {\n return (\n this.#_api?.addPlugin(name, options) ??\n Promise.reject(new Error(`plugin ${name} cannot be defined`))\n );\n };\n\n if (this.#_api) {\n return addPlugin();\n }\n\n return new Promise((resolve, reject) => {\n this.whenApiReady()\n .then(async () => addPlugin())\n .then((plugin) => resolve(plugin))\n .catch((err: unknown) => {\n if (err instanceof Error) {\n reject(err);\n } else {\n reject(new Error('Promise rejected with non-Error value'));\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch((_error: unknown) => {});\n });\n }\n\n /**\n * Deletes an overlay with the specified name.\n * @param {string} name - The name of the overlay to delete.\n * @returns A promise that resolves when the overlay is successfully deleted, or rejects with an error if the overlay cannot be deleted at this time.\n */\n public async deleteOverlay(name: string): Promise<void> {\n if (this.#_impl?.undefineOverlay) {\n return this.#_impl.undefineOverlay(name);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be deleted at this time`));\n }\n\n /**\n *\n * @param {string} name the handle name of the control to be disabled\n * @returns {Promise<void>} Promise that resolves when operation is complete\n */\n public async disableControl(name: string): Promise<void> {\n if (this.#_impl?.setControlEnabled) {\n return this.#_impl.setControlEnabled(name, false);\n }\n return Promise.reject(new Error(`control \"${name}\" cannot be disabled at this time`));\n }\n\n /**\n *\n * @param {string} name the handle name of the control to be enabled\n * @returns {Promise<void>} Promise that resolves when operation is complete\n */\n public async enableControl(name: string): Promise<void> {\n if (this.#_impl?.setControlEnabled) {\n return this.#_impl.setControlEnabled(name, true);\n }\n return Promise.reject(new Error(`control \"${name}\" cannot be enabled at this time`));\n }\n\n public async enterInputContext(context: string): Promise<void> {\n if (this.#_impl?.enterInputContext) {\n return new Promise((resolve) => {\n const handler = (event: WistiaPlayerEvents[typeof INPUT_CONTEXT_CHANGE_EVENT]) => {\n const { detail } = event;\n\n if (detail.context === context) {\n resolve();\n }\n\n this.removeEventListener(INPUT_CONTEXT_CHANGE_EVENT, handler);\n };\n\n this.addEventListener(INPUT_CONTEXT_CHANGE_EVENT, handler);\n\n this.#_impl?.enterInputContext(context);\n });\n }\n\n return Promise.reject(\n new Error(`input context of name \"${context}\" cannot be enabled at this time`),\n );\n }\n\n public async exitInputContext(context: string): Promise<void> {\n if (this.#_impl?.exitInputContext) {\n return Promise.resolve(this.#_impl.exitInputContext(context));\n }\n return Promise.reject(new Error(`control \"${context}\" cannot be enabled at this time`));\n }\n\n /**\n * Gets initial media data for the video. This method exists purely to make\n * mocking easier in tests and mirrors the import from getInitialMediaData.ts.\n * @param {string} mediaId - The hashed ID of the media\n * @param {FetchMediaDataOptions} options - Options for fetching media data\n * @returns {Promise<MediaData | MediaDataServerErrorResponse>} The media data or error response\n */\n public async getInitialMediaData(\n mediaId: string,\n options: FetchMediaDataOptions,\n ): Promise<MediaData | MediaDataServerErrorResponse> {\n return getInitialMediaData(mediaId, options);\n }\n\n /**\n * Gets a plugin from the player.\n * @param {T extends keyof PluginInstances} name name of the plugin to retrieve\n * @returns {Promise<PluginInstances[T]>} returns a Promise that resolves with the request plugin\n */\n public async getPlugin<T extends keyof PluginInstances>(name: T): Promise<PluginInstances[T]> {\n return new Promise((resolve, reject) => {\n if (this.#_api?.plugin && name in this.#_api.plugin) {\n resolve(this.#_api.plugin[name]);\n }\n\n reject(new Error(`plugin ${name} is not defined`));\n });\n }\n\n /**\n * Returns a function that remaps the time of the video from one language to another.\n * @returns {Function} A function that remaps the time of the video from one\n * language to another with signature\n * (fromLanguage: string, toLanguage: string, fromTime: number) => number\n */\n public async getRemapTime(): Promise<\n (fromLanguage: string, toLanguage: string, fromTime: number) => number\n > {\n if (this.#cachedRemapTime != null) {\n return this.#cachedRemapTime;\n }\n\n if (this.languages.length <= 1) {\n this.#cachedRemapTime = (_fromLanguage: string, _toLanguage: string, fromTime: number) =>\n fromTime;\n return this.#cachedRemapTime;\n }\n\n this.#cachedRemapTime ??= await dynamicImport('assets/external/timeMapping.js').then(\n ({\n remapTime,\n }: {\n remapTime: (\n sourceLocalization: Localization,\n fromLocalization: Localization,\n toLocalization: Localization,\n fromTime: number,\n ) => number;\n }) =>\n (fromLanguage: string, toLanguage: string, fromTime: number) => {\n const fromTimeInMilliseconds = fromTime * 1000;\n const fromLocalization = this.#findLocalizationByLanguage(fromLanguage);\n const sourceLocalization = this.sourceLanguage;\n const toLocalization = this.#findLocalizationByLanguage(toLanguage);\n\n if (fromLocalization == null || toLocalization == null || sourceLocalization == null) {\n return fromTime;\n }\n\n return (\n remapTime(\n sourceLocalization,\n fromLocalization,\n toLocalization,\n fromTimeInMilliseconds,\n ) / 1000\n );\n },\n );\n return this.#cachedRemapTime as (\n fromLanguage: string,\n toLanguage: string,\n fromTime: number,\n ) => number;\n }\n\n /**\n * Hides the specified overlay.\n * @param {string} name - The name of the overlay to hide.\n * @returns A promise that resolves when the overlay is hidden, or rejects with an error if the overlay cannot be cancelled at this time.\n */\n public async hideOverlay(name: string): Promise<void> {\n if (this.#_impl?.cancelOverlay) {\n return this.#_impl.cancelOverlay(name);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be cancelled at this time`));\n }\n\n /**\n * Hides the popover if this is a popover embed.\n * @returns {Promise<void>}\n */\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n public async hidePopover(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.#_api?.popover) {\n this.#_api.popover.hide();\n resolve();\n }\n\n reject(new Error(`Popover cannot be accessed`));\n });\n }\n\n public languagesToLocalizations(languages: LanguageSimplified[]): Localization[] {\n return this.#_api?.languagesToLocalizations(languages) ?? [];\n }\n\n public languageToLocalization(language: LanguageSimplified): Localization | undefined {\n return this.#_api?.languageToLocalization(language) ?? this.#defaultLocalization();\n }\n\n /**\n * Pauses the video.\n * If this is called and the video's state is \"playing,\"\n * it's expected that it will change to \"paused.\"\n * @returns {Promise<void>}\n */\n public async pause(): Promise<void> {\n return this.#_impl?.pause();\n }\n\n /**\n * Plays the video.\n * If this is called, it is expected that the state will change to \"playing.\"\n * @returns {Promise<void>}\n */\n public async play(): Promise<void> {\n return this.#_impl?.play();\n }\n\n /**\n * @param {string} name name of the controls\n * @returns {Promise<void?>}\n */\n public async releaseControls(name: string): Promise<void> {\n return this.#_impl?.releaseControls(name);\n }\n\n /**\n * Removes all event listeners from the player\n * @returns {void}\n */\n public removeAllEventListeners(): void {\n Object.entries(this.#_eventListeners).forEach(([type, listeners]) => {\n listeners.forEach(({ listener, options }) => {\n this.removeEventListener(type, listener, options);\n });\n });\n }\n\n /**\n * Removes an event listener from the player.\n * @param {string} type - The type of event to remove.\n * @param {EventListenerOrEventListenerObject} listener - The function to remove.\n * @param {EventListenerOptions | boolean} options\n * @returns {void}\n */\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: EventListenerOptions | boolean,\n ): void {\n const listeners = this.#_eventListeners[type];\n if (!Array.isArray(listeners)) return;\n\n // Find index of the matching listener+options\n const index = listeners.findIndex(\n (entry) =>\n entry.listener === listener && JSON.stringify(entry.options) === JSON.stringify(options),\n );\n\n if (index !== -1) {\n // Remove event listener from DOM\n super.removeEventListener(type, listener, options);\n\n // Remove it from the tracked list\n listeners.splice(index, 1);\n\n // If no listeners remain for this type, clean up the key\n if (listeners.length === 0) {\n this.#_eventListeners[type] = [];\n }\n }\n }\n\n /**\n * Replaces the media and then resolves when the new media is ready to play\n * @param {string} mediaId\n * @param {EmbedOptions} options\n * @returns {Promise<void>}\n */\n public async replaceWithMedia(\n mediaId: string,\n options: ReplaceWithMediaOptions = {},\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this.#_api) {\n reject(new Error('api not ready to replace'));\n }\n\n removeInjectedJsonLd(this.#_jsonLdId);\n\n const handleAfterReplace = () => {\n this.removeEventListener(AFTER_REPLACE_EVENT, handleAfterReplace);\n resolve();\n };\n\n this.addEventListener(AFTER_REPLACE_EVENT, handleAfterReplace);\n this.#_api?.replaceWith(mediaId, options);\n });\n }\n\n /**\n * @param {string} name name of the controls\n * @returns {Promise<void?>}\n */\n public async requestControls(name: string): Promise<void> {\n return this.#_impl?.requestControls(name);\n }\n\n /**\n * Attempt to enter fullscreen mode.\n * @returns {Promise<void>}\n */\n public async requestFullscreen(): Promise<void> {\n if (this.#_impl?.requestFullscreen) {\n return this.#_impl.requestFullscreen();\n }\n\n return Promise.reject(new Error('Fullscreen cannot be accessed'));\n }\n\n /**\n * Shows an overlay with the specified name.\n * @param {string} name - The name of the overlay to show.\n * @returns A promise that resolves when the overlay is shown, or rejects with an error if the overlay cannot be requested at this time.\n */\n public async showOverlay(name: string): Promise<void> {\n if (this.#_impl?.requestOverlay) {\n return this.#_impl.requestOverlay(name);\n }\n return Promise.reject(new Error(`overlay ${name} cannot be requested at this time`));\n }\n\n /**\n * Shows the popover if this is a popover embed.\n * @returns {Promise<void>}\n */\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n public async showPopover(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.#_api?.popover) {\n this.#_api.popover.show();\n resolve();\n }\n\n reject(new Error(`Popover cannot be accessed`));\n });\n }\n\n /**\n * Updates the embed options for the player.\n * @param {Partial<EmbedOptions>} options - The new embed options to set.\n * @returns {Promise<EmbedOptions>} The updated embed options.\n */\n public async updateEmbedOptions(options: Partial<EmbedOptions>): Promise<EmbedOptions> {\n return new Promise((resolve) => {\n this.#setMultipleSyncedEmbedOptions(options);\n resolve(this.embedOptions);\n });\n }\n\n public async whenApiReady(): Promise<void> {\n return new Promise((resolve) => {\n if (this.#_api) {\n this.#_api.ready(() => {\n resolve();\n });\n }\n\n const handler = () => {\n this.removeEventListener(API_READY_EVENT, handler);\n resolve();\n };\n\n this.addEventListener(API_READY_EVENT, handler);\n });\n }\n\n public async whenControlMounted<T extends keyof ControlInstances>(\n handle: T,\n ): Promise<ControlInstances[T]> {\n await this.whenApiReady();\n\n if (this.#_api === null) {\n throw new Error('Control API not available');\n }\n\n const control = await this.#_api.whenControlMounted(handle);\n if (control === null || control === undefined) {\n throw new Error('Control not found');\n }\n\n return control;\n }\n\n // --------------------------------------------------\n // Custom element lifecycle methods\n // --------------------------------------------------\n\n /**\n * Called when an observed attribute has been added, removed, updated, or replaced.\n * Also called for initial values when an element is created by the parser, or upgraded.\n * Note: only attributes listed in the observedAttributes property will receive this callback.\n * @param {string} name - The name of the attribute that changed.\n * @param {string} oldValue - The previous value of the attribute, or null if it was added for the first time.\n * @param {string} newValue - The new value of the attribute, or null if it was removed.\n * @returns {void}\n */\n protected attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n // We need this to make sure we don't needlessly call api methods during initial component setup\n if (!this.#hasElementConnectedToDOM) {\n return;\n }\n\n if (oldValue === newValue) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (oldValue === null && newValue === '') {\n return;\n }\n\n // If the attribute string is equal to 'true' or 'false', go ahead and assume we'd\n // like the boolean value instead of the string\n let finalValue: boolean | string = newValue;\n switch (newValue) {\n case 'true':\n finalValue = true;\n break;\n case 'false':\n finalValue = false;\n break;\n default:\n break;\n }\n\n // Attribute names must match their corresponding property names (kebab-case -> camelCase)\n // So the player-color attribute maps to the playerColor property\n this[kebabCaseToCamelCase(name)] = finalValue;\n }\n\n protected connectedCallback(): void {\n if (this.#hasElementConnectedToDOM) {\n return;\n }\n this.#hasElementConnectedToDOM = true;\n\n const mediaId = this.getAttribute('media-id');\n if (mediaId == null) {\n countMetric('player/failure/init-failed');\n throw new Error('media-id attribute is required');\n }\n\n // Allows for all bulk setting of embed options and mediaData\n window.wistiaOptions = window.wistiaOptions ?? {};\n const opts = getWistiaOptions(this.mediaId);\n this.#_playerData.setWistiaWindowEmbedOptionSource(opts);\n\n // Add the media id to the logger now that we have it\n this.#_logger = (wlog as unknown as LoggerType).getPrefixedFunctions(\n `WistiaPlayer ${mediaId}`,\n ) as LoggerType;\n\n this.#_judyContext = buildContext() as JudyContext;\n\n // If the player was created from our React wrapper component, send a tracking event\n if (this.getAttribute('react') === 'true') {\n countMetric('player/initembed.react');\n }\n\n this.#setupEventListeners();\n\n this.#_logger.info('initialize embed');\n\n if (!this.useWebComponent) {\n maybeStartWistiaQueue();\n }\n\n // Generate a unique id for this embed in case there are\n // multiple embeds with the same hashed id on the page\n this.uniqueId = this.#generateUniqueId(mediaId);\n\n this.#maybeSetupEmbedOptionsFromIframe();\n\n // Sometimes if an attribute is set on the player, we want to do something immediately\n this.#runMethodsFromAttributes();\n\n // Gather any attributes set on the element and save them so the public api can use them\n this.#saveInitialAttributesFromDomOptions();\n\n const resizeCallback = () => {\n this.#renderPreloadThumbnail();\n };\n this.#resizeObserver = new ResizeObserver(resizeCallback);\n this.#resizeObserver.observe(this);\n\n const optsForFetch = {\n deferFetchingToCarousel: this.#deferMediaDataFetchingToCarouselEmbed(),\n embedHost: this.embedHost ?? '',\n overrideMediaLanguage: this.embedOptions.language,\n };\n\n this.getInitialMediaData(mediaId, optsForFetch)\n .then((mediaDataOrError: MediaData | MediaDataServerErrorResponse) => {\n if (isMediaDataError(mediaDataOrError)) {\n if (\n (mediaDataOrError as MediaDataServerErrorResponse).iframe === true ||\n (mediaDataOrError as MediaDataServerErrorResponse).iframe === 'true'\n ) {\n const baseUrl = `${eV1Protocol()}//${eV1HostWithPort()}`;\n this.style.display = 'block';\n\n // Check if width is already set via CSS or attributes\n const computedStyle = getComputedStyle(this);\n const hasWidth = computedStyle.width !== 'auto' && computedStyle.width !== '0px';\n if (!hasWidth) {\n this.style.width = '100%';\n }\n\n this.style.aspectRatio = String(this.aspect);\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = `<iframe src='${baseUrl}/embed/iframe/${this.mediaId}' aspect='${this.aspect}' style='width: 100%; height: 100%; border: 0;' scrolling='no'></iframe>`;\n }\n return;\n }\n }\n\n const mediaData = mediaDataOrError as MediaData;\n\n this.mediaId = mediaData.hashedId ?? this.mediaId;\n this.#_playerData.setMediaDataSource(mediaData);\n\n this.dispatchEvent(\n new CustomEvent(LOADED_MEDIA_DATA_EVENT, {\n detail: {\n mediaData: this.#_playerData.mediaData,\n },\n }),\n );\n\n // If the player is not available in the document, assume it's inside a shadow root\n const bestMatchContainer: WistiaPlayer | string = document.querySelector(\n `[unique-id='${this.uniqueId}']`,\n )\n ? this.uniqueId\n : this;\n\n this.#initPlayerEmbed({\n container: bestMatchContainer,\n mediaData: this.#_playerData.mediaData,\n });\n })\n .catch((error: unknown) => {\n countMetric('player/failure/init-failed');\n throw new Error((error as Error).message);\n });\n\n // Add our responsive embed template to the shadow DOM\n if (this.shadowRoot) {\n // Create slot for user content, to allow styling of children of\n // <wistia-player> via css that's external to the shadow dom.\n // This is mainly for popover embeds.\n if (this.wistiaPopover && this.popoverContent === 'link') {\n const slot = document.createElement('slot');\n slot.name = `${this.uniqueId}-popover-link`;\n this.shadowRoot.appendChild(slot);\n }\n\n // Render the embed template as soon as we can\n this.#preactRoot = document.createElement('div');\n this.#renderEmbedTemplate();\n this.shadowRoot.insertBefore(this.#preactRoot, this.shadowRoot.firstChild);\n }\n }\n\n protected disconnectedCallback(): void {\n this.#_removeEventListeners.forEach((removeListener) => removeListener());\n\n this.removeAllEventListeners();\n\n this.#_eventListeners = {};\n removeInjectedJsonLd(this.#_jsonLdId);\n\n uncacheMediaData(this.mediaId);\n\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n\n removeEmbedOptionStore(`__${this.uniqueId}_dom_options__`);\n\n this.#_api?.remove();\n this.#_api = null;\n\n this.#destroyPreloadThumbnailRoot();\n\n this.shadowRoot?.replaceChildren();\n this.#preactRoot = null;\n\n this.#hasElementConnectedToDOM = false;\n }\n\n // --------------------------------------------------\n // Private methods\n // --------------------------------------------------\n\n #defaultLocalization(): Localization {\n return {\n bcp47LanguageTag: 'en',\n familyName: 'English',\n familyNativeName: 'English',\n name: 'English',\n nativeName: 'English',\n wistiaLanguageCode: 'eng',\n\n alpha3Bibliographic: 'eng',\n alpha3Terminologic: 'eng',\n duration: 0,\n genericName: 'English',\n genericNativeName: 'English',\n hashedId: this.mediaId,\n ietfLanguageTag: 'eng',\n isLocalization: true,\n iso6392LanguageCode: 'eng',\n sourceLanguage: true,\n timeMappings: [],\n };\n }\n\n /**\n * Should the player defer fetching media data to a carousel embed?\n * Look for a connected carousel embed that is not inside a playlist embed.\n * If one is found, return true.\n * @returns {boolean}\n */\n #deferMediaDataFetchingToCarouselEmbed(): boolean {\n if (!isNonEmptyString(this.id)) {\n return false;\n }\n return !!document.querySelector(\n `wistia-channel-carousel[player-dom-id=\"${this.id}\"]:not([is-inside-playlist-embed=\"true\"][channel-id])`,\n );\n }\n\n #destroyPreloadThumbnailForPopover(): void {\n if (!this.#isPopoverWithThumbnail()) {\n return;\n }\n const { shadowRoot } = this;\n const activeElement = shadowRoot?.activeElement ?? null;\n const hadFocus =\n activeElement !== null &&\n this.#preloadThumbnailRoot !== null &&\n this.#preloadThumbnailRoot.contains(activeElement);\n this.#destroyPreloadThumbnailRoot();\n this.removeEventListener('click', this.#handlePreloadThumbnailClick, PRELOAD_CLICK_OPTIONS);\n if (hadFocus) {\n shadowRoot?.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus({ preventScroll: true });\n }\n }\n\n #destroyPreloadThumbnailRoot(): void {\n if (this.#preloadThumbnailRoot) {\n // Unmount the nested preact root so its components run componentWillUnmount\n // (e.g. clearing timers) before we detach the DOM out from under preact.\n render(null, this.#preloadThumbnailRoot);\n this.#preloadThumbnailRoot.remove();\n this.#preloadThumbnailRoot = null;\n }\n }\n\n #findLocalizationByLanguage(language: string | undefined): Localization | undefined {\n if (language == null) {\n return undefined;\n }\n\n return this.#_playerData.mediaData.localizations?.find(\n (localization) =>\n localization.wistiaLanguageCode === language || localization.bcp47LanguageTag === language,\n );\n }\n\n /**\n * Generates a unique id for the embed\n * @param {number | string} mediaId - The media id\n * @returns {string}\n */\n #generateUniqueId(mediaId): string {\n const prefix = `wistia-${mediaId}-`;\n return seqId(prefix);\n }\n\n /**\n * Returns either the value of an embed option from the public api\n * or the value of an embed option saved on this element.\n *\n * For now, the public api is the source of truth for embed options.\n * However, this will change in the future. We also need a non-public\n * api source for embed options so we can use them before the public\n * api is ready.\n * @param {string} key - Name of the embed option\n * @returns {boolean | number | string | null}\n */\n #getSyncedEmbedOption(key: string): boolean | number | string | null | undefined {\n // If the public api is ready, use it as the source of truth\n if (this.#_impl && key in this.#_impl._attrs) {\n return this.#_impl._attrs[key] as boolean | number | string | null | undefined;\n }\n\n // Otherwise check this element's embed config for a value and fallback\n // to the default embed options as a last resort\n return (\n (this.embedOptions[key] as boolean | number | string | null | undefined) ??\n (this.#getValueFromAttribute(camelCaseToKebabCase(key)) as\n | boolean\n | number\n | string\n | null\n | undefined) ??\n (defaultEmbedOptions[key] as boolean | number | string | undefined)\n );\n }\n\n /**\n * Gets the value of an attribute if it exists, returns null if not\n * @param {string} name - Name of the attribute\n * @returns {boolean | string | null}\n */\n #getValueFromAttribute(name: string): boolean | string | null {\n // If no attribute is present, return null instead of an explicit false\n // so our media data config doesn't get overridden\n if (!this.hasAttribute(name)) {\n return null;\n }\n\n switch (this.getAttribute(name)) {\n case 'true':\n return true;\n case 'false':\n return false;\n case '':\n // Boolean attributes are set to '' when they are present\n // so we need to convert them to true\n return true;\n case null:\n default:\n return this.getAttribute(name);\n }\n }\n\n readonly #handleAfterReplace = () => {\n this.#maybeInjectJsonLd();\n setEmbedOptionStore(`__${this.uniqueId}_dom_options__`, this.#_playerData.embedOptions);\n };\n\n readonly #handleBeforeReplace = (event: WistiaPlayerEvents[typeof BEFORE_REPLACE_EVENT]) => {\n /**\n * Since the public API reads embed options assigned to the DOM container,\n * we need to make sure the DOM container ID/uniqueId is updated before\n * the public API starts gathering options in replaceWithMediaDataQueuable.\n */\n this.mediaId = event.detail.mediaId;\n this.uniqueId = this.#generateUniqueId(event.detail.mediaId);\n\n // When we replace, we're getting new media data, and the function we return\n // is based off the current media data.\n this.#cachedRemapTime = undefined;\n };\n\n readonly #handlePreloadThumbnailClick: () => void = () => {\n if (\n this.#_playerType !== 'carouselHardWall' &&\n this.#_playerType !== 'notplayable' &&\n this.#_playerType !== 'passwordprotected'\n ) {\n this.#playPending = true;\n }\n this.#renderPreloadThumbnail();\n };\n\n /**\n * Handles initialization of the player for fresh Aurora embeds\n * @returns {void}\n */\n #initPlayerEmbed({\n container,\n mediaData,\n }: {\n container: WistiaPlayer | string;\n mediaData?: MediaData | MediaDataServerErrorResponse;\n }): void {\n if (!this.#hasElementConnectedToDOM) {\n return;\n }\n this.#_playerData.updateEmbedOptionOverrides({ videoFoam: true });\n\n if (mediaData && !isMediaDataError(mediaData as MediaDataServerErrorResponse)) {\n this.#_playerType = choosePlayer(\n this.#_judyContext,\n this.#_playerData.mediaData,\n this.#_playerData.embedOptions,\n ) as Players;\n\n this.#renderPreloadThumbnail();\n\n this.#maybeInjectJsonLd();\n }\n\n if ('attachInternals' in HTMLElement.prototype && 'states' in ElementInternals.prototype) {\n this.#_internals?.states.delete('--initializing');\n }\n\n // Create and save the public api instance\n void this.#initPublicApi(this.mediaId, {\n container,\n mediaData,\n });\n }\n\n /**\n * Initializes the public api instance and sends a ready event\n * @param {number | string} mediaId - The media id\n * @param {EmbedOptions | PublicApiOptions | undefined} options - The public api options\n * @returns {Promise<void>}\n */\n async #initPublicApi(\n mediaId: number | string,\n options: EmbedOptions | PublicApiOptions | undefined,\n ): Promise<void> {\n // Import the public api script\n await this.#publicApiScript;\n\n if (!Wistia.PublicApi) {\n countMetric('player/failure/init-failed');\n throw new Error('Wistia.PublicApi is not defined');\n }\n\n const embeddedCallback = () => {\n void this.#maybeInitializeMux();\n this.#renderEmbedTemplate();\n\n if (this.#playPending) {\n void this.play();\n }\n };\n\n this.addEventListener('embedded', embeddedCallback);\n this.#_removeEventListeners.push(() => {\n this.removeEventListener('embedded', embeddedCallback);\n });\n\n // Initialize!\n this.#_api = new Wistia.PublicApi(mediaId, options) as PublicApi;\n // internal: lets the TranslationApi attach legacy bindings made before the api existed\n this.dispatchEvent(new CustomEvent(INTERNAL_API_CREATED_EVENT, { detail: { mediaId } }));\n\n this.addEventListener(BEFORE_REPLACE_EVENT, this.#handleBeforeReplace);\n this.addEventListener(AFTER_REPLACE_EVENT, this.#handleAfterReplace);\n\n this.#_removeEventListeners.push(() => {\n this.removeEventListener(BEFORE_REPLACE_EVENT, this.#handleBeforeReplace);\n this.removeEventListener(AFTER_REPLACE_EVENT, this.#handleAfterReplace);\n });\n\n this.#_api.ready(() => {\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n this.#destroyPreloadThumbnailRoot();\n this.removeEventListener('click', this.#handlePreloadThumbnailClick, PRELOAD_CLICK_OPTIONS);\n // event for public consumption, exposed on our event types\n this.dispatchEvent(new CustomEvent(API_READY_EVENT, { detail: { mediaId } }));\n\n // event for internal consumption, not exposed on our event types\n this.dispatchEvent(\n new CustomEvent(INTERNAL_API_ON_FIND_EVENT, { detail: { mediaId, api: this.#_api } }),\n );\n\n this.#maybeSetupLLMOptimizedEmbed();\n\n // Sync embed options from the public api back to the embed config\n if (this.#_impl) {\n Object.entries(this.#_impl._attrs).forEach(\n ([key, value]: [string, boolean | number | string]) => {\n this.#_playerData.updateEmbedOptionOverrides({ [key]: value });\n },\n );\n }\n\n // Updates our PlayerDataProvider and re-renders the thumbnail with the new embed options\n this.#renderPreloadThumbnail();\n });\n }\n\n /**\n * Returns if this player is a popover embed with a thumbnail.\n * @returns {boolean}\n */\n #isPopoverWithThumbnail(): boolean {\n return (\n this.wistiaPopover &&\n (isNil(this.popoverContent) ||\n isEmptyString(this.popoverContent) ||\n this.popoverContent === 'thumbnail')\n );\n }\n\n /**\n * Do a coin flip to determine if Mux should be enabled\n * And enable Mux for the player if the coin flip is a win\n * @returns {Promise<void>}\n */\n async #maybeInitializeMux() {\n if (!this.#_api) {\n return;\n }\n\n const shouldRandomEnableMux = didWinCoinFlip(MUX_PERCENTAGE_TO_ENABLE);\n const shouldEnableMuxForPlayer =\n shouldEnableMux(this.#_api, shouldRandomEnableMux) && (isVisitorTrackingEnabled() as boolean);\n\n const embedType = this.useWebComponent ? 'translated-web-component' : 'web-component';\n\n if (shouldEnableMuxForPlayer) {\n try {\n const mux = (await dynamicImport('assets/external/wistia-mux.js')) as Mux;\n mux.init(this.#_api, { embedType });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err: unknown) {\n // mux-embed's internal now() utilizes PerformanceTiming, which is a\n // deprecated API being removed from browsers, and this is causing some noise in Sentry.\n // We'll catch and ignore errors stemming from mux since these should not break the player.\n }\n\n this.addEventListener(\n 'visitor-tracking-change',\n (event: CustomEvent<{ isTrackingEnabled: boolean }>) => {\n const { isTrackingEnabled } = event.detail;\n\n if (!isTrackingEnabled) {\n this.#_api?.mux?.destroy();\n }\n },\n );\n }\n }\n\n #maybeInjectJsonLd() {\n if (\n this.seo &&\n this.#_playerType !== 'notplayable' &&\n this.#_playerType !== 'passwordprotected' &&\n this.#_playerType !== 'carouselHardWall'\n ) {\n this.#_jsonLdId = `w-json-ld-${this.uniqueId}`;\n removeInjectedJsonLd(this.#_jsonLdId);\n\n injectJsonLd(this.#_jsonLdId, this.#_playerData.mediaData, {\n embedOptions: this.#_playerData.embedOptions,\n videoHeight: this.offsetHeight,\n videoWidth: this.offsetWidth,\n });\n }\n }\n\n #maybeSetupEmbedOptionsFromIframe() {\n if (!window._inWistiaIframe) {\n return;\n }\n // If we're in an iframe, grab the embed options from the iframe URL now\n // instead of waiting for insideIframe.coffee to do it - otherwise we won't\n // have these embed options until after the api has been initialized.\n const searchParams = new URLSearchParams(window.location.search);\n const iframeEmbedOptions = Object.fromEntries(searchParams.entries()) as EmbedOptions;\n\n iframeEmbedOptions.pageTitle = document.title;\n iframeEmbedOptions._inIframe = true;\n\n this.#_playerData.setIframeEmbedOptionSource(iframeEmbedOptions);\n }\n\n // The LLM-optimized embed is not meant to be long-lived or supported forever.\n // Once we decide to stop supporting it, we should remove this function.\n #maybeSetupLLMOptimizedEmbed() {\n const preloadTranscriptForLLMEmbed = this.querySelector(\n '.wistia_preload_transcript_outer_wrapper',\n );\n if (!preloadTranscriptForLLMEmbed) {\n return;\n }\n\n countMetric('player/initembed.llm-optimized', 1, {\n href: window.location.href,\n mediaId: this.mediaId,\n });\n\n preloadTranscriptForLLMEmbed.remove();\n this.captionsEnabled = true;\n }\n\n /**\n * Renders a template for the embed code\n * @returns {HTMLTemplateElement}\n */\n #renderEmbedTemplate() {\n if (!this.#preactRoot) {\n return;\n }\n\n const { mediaType } = this.#_playerData.mediaData;\n\n const swatchUrl = getSwatchUrl(this.mediaId, this.embedHost ?? '');\n\n let swatchHeight = '100%';\n if (parseFloat(this.#paddingTop) !== 0 && this.#paddingTop !== '') {\n swatchHeight = `${parseFloat(this.#paddingTop)}px`;\n }\n\n const playerBorderRadius = getDefaultPlayerBorderRadius({\n playerBorderRadius: this.playerBorderRadius,\n roundedPlayer: this.roundedPlayer,\n });\n\n render(\n <Fragment>\n <style>\n {`:host {\n display: flex;\n position: relative;\n width: 100%;\n ${mediaType === 'Audio' ? `height: ${AUDIO_DEFAULT_HEIGHT}px; min-height: 45px;` : ''}\n }`}\n </style>\n {this.#shouldDisplaySwatch() && (\n <div\n style={{ height: swatchHeight, left: 0, position: 'absolute', top: 0, width: '100%' }}\n class=\"wistia_swatch\"\n >\n <div style={{ height: '100%', position: 'relative', width: '100%' }}>\n <div\n style={{\n height: '100%',\n left: 0,\n overflow: 'hidden',\n position: 'absolute',\n top: 0,\n width: '100%',\n borderRadius: `${playerBorderRadius}px`,\n }}\n >\n <img\n src={swatchUrl}\n style={{\n filter: 'blur(5px)',\n height: '100%',\n objectFit: 'contain',\n width: '100%',\n }}\n alt=\"\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n </div>\n )}\n <div\n ref={(ref) => {\n this.#preloadThumbnailRoot = ref;\n }}\n ></div>\n </Fragment>,\n this.#preactRoot,\n );\n }\n\n /**\n * Renders a progressive thumbnail and a big play button as soon as possible,\n * while the rest of the player is loading.\n * @returns {void}\n */\n #renderPreloadThumbnail() {\n if (!this.#preloadThumbnailRoot) {\n return;\n }\n\n const { assets, mediaType, carouselHardWall } = this.#_playerData.mediaData;\n const { autoPlay, plugin } = this.#_playerData.embedOptions;\n\n // Don't render the preload thumbnail if we're going to show a carousel hard wall player.\n if (carouselHardWall) {\n return;\n }\n\n const thumbnailAssets = getThumbnailAssets(assets, {});\n\n const shouldRenderThumbnail =\n (!this.wistiaPopover || this.#isPopoverWithThumbnail()) &&\n mediaType !== 'Audio' &&\n thumbnailAssets.length > 0;\n\n if (!shouldRenderThumbnail) {\n return;\n }\n\n const willAutoplay = this.autoplay || autoPlay;\n const hasVideoThumbnail = plugin?.videoThumbnail !== undefined;\n const shouldRenderPlaceholder = willAutoplay === true || hasVideoThumbnail;\n\n // We don't want to render a preload thumbnail but we still want to avoid layout shift.\n // Render a blank placeholder with the expected aspect ratio so we reserve the correct amount of height.\n if (shouldRenderPlaceholder) {\n const height = this.offsetWidth / this.aspect;\n render(\n <div style={{ width: '100%', height: `${height}px` }}></div>,\n this.#preloadThumbnailRoot,\n );\n return;\n }\n\n render(\n <PlayerDataProvider\n embedOptions={this.#_playerData.embedOptions}\n mediaData={this.#_playerData.mediaData}\n >\n <PreloadThumbnail\n mediaId={this.mediaId}\n playerType={this.playerForce ?? this.#_playerType}\n playerWidth={this.offsetWidth}\n isPlayPending={this.#playPending}\n ></PreloadThumbnail>\n </PlayerDataProvider>,\n this.#preloadThumbnailRoot,\n );\n }\n\n /**\n * Returns keyboard focus to the inline trigger when the popover dialog closes.\n *\n * The popover dialog and its close controls are appended to <body> (light DOM)\n * by the public API, but the trigger the viewer activated to open the popover\n * lives in this element's shadow root. When the dialog closes the browser\n * leaves focus on the now-offscreen dialog contents, so keyboard and screen\n * reader users lose their place (WCAG 2.4.3). The legacy popover code tries to\n * restore focus, but it only sees `document.activeElement` — which is this host\n * element, since focus inside a shadow root is retargeted — so it can never\n * reach the real trigger. We own the shadow root, so we restore focus here.\n * @returns {void}\n */\n readonly #returnFocusToPopoverTrigger = (): void => {\n // Defer past the synchronous teardown in the legacy hide() — including its\n // own ineffective host focus call — so our focus move is the one that sticks.\n setTimeout(() => {\n // In the closed inline state the trigger is the only tab stop: the\n // BigPlayButton before the public api is ready, or the vulcan\n // click-to-play afterwards. Both are the first tabbable element.\n this.shadowRoot\n ?.querySelector<HTMLElement>('button.w-big-play-button, [tabindex=\"0\"]')\n ?.focus();\n }, 0);\n };\n\n /**\n * Runs any methods associated with set attributes when the element is connected to the DOM\n * @returns {void}\n * @private\n */\n #runMethodsFromAttributes(): void {\n // We have to wait until the api is ready to set the current time\n if (this.#getValueFromAttribute('current-time') !== null) {\n this.whenApiReady()\n .then(() => {\n const newTime = Number(this.#getValueFromAttribute('current-time'));\n\n const isClosedPopover = (this.#_api?.popover && !this.#_api.popover.isVisible()) ?? false;\n const isMobile = detectIsMobile() as unknown as boolean;\n const shouldDelayUntilPlay = this.state !== 'playing' && (isMobile || isClosedPopover);\n\n void this.#_impl?.time(newTime, { lazy: shouldDelayUntilPlay });\n this.#setSyncedEmbedOption('currentTime', newTime);\n })\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch((_error: unknown) => {});\n }\n\n if (this.#getValueFromAttribute('email') !== null) {\n this.#updateEmail(this.#getValueFromAttribute('email') as string);\n }\n\n if (this.#getValueFromAttribute('video-quality') !== null) {\n this.whenApiReady()\n .then(() => {\n const newQuality = this.#getValueFromAttribute('video-quality') as number | 'auto';\n\n this.#_impl?.setVideoQuality(newQuality);\n this.#setSyncedEmbedOption('videoQuality', newQuality);\n })\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch((_error: unknown) => {});\n }\n }\n\n /**\n * Saves the initial attributes from the DOM to a store so the public api can use them\n * @returns {void}\n * @private\n */\n #saveInitialAttributesFromDomOptions(): void {\n const domOptions = Object.fromEntries(\n Object.entries(this.attributes).map(([, value]) => [\n kebabCaseToCamelCase(value.name),\n this.#getValueFromAttribute(value.name),\n ]),\n );\n\n this.#_playerData.setDomEmbedOptionSource(domOptions);\n\n // The public api uses this store when it gathers options from our many different sources\n setEmbedOptionStore(`__${this.uniqueId}_dom_options__`, this.#_playerData.embedOptions);\n }\n\n /**\n * Takes an object of embed options and sets both the value of an\n * embed option from the public api and the value of an embed option\n * saved on this element.\n *\n * For now, the public api is the source of truth for embed options.\n * However, this will change in the future. We also need a non-public\n * api source for embed options so we can use them before the public\n * api is ready.\n * @param {Partial<EmbedOptions>} options - Object of embed options\n * @returns {void}\n */\n #setMultipleSyncedEmbedOptions(options: Partial<EmbedOptions>): void {\n Object.entries(options).forEach((entry) => {\n const [key, value] = entry;\n // The TypeScript compiler is complaining because it thinks the value can never be undefined\n // based on the type definition, but we're being defensive here\n if (value == null) {\n return;\n }\n\n // If the embed option has a setter, use that. Our setters call #setSyncedEmbedOption\n // which will update the public api and the embed option store, and importantly they\n // *also* run any specific functions that are needed for that embed option.\n if (Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), key)?.set) {\n this[key] = value;\n } else {\n // Otherwise, we'll just run #setSyncedEmbedOption directly\n this.#setSyncedEmbedOption(\n key,\n value as Authorization | Gradient | boolean | number | string,\n );\n }\n });\n }\n\n /**\n * Sets both the value of an embed option from the public api\n * and the value of an embed option saved on this element.\n *\n * For now, the public api is the source of truth for embed options.\n * However, this will change in the future. We also need a non-public\n * api source for embed options so we can use them before the public\n * api is ready.\n * @param {string} key - Name of the embed option\n * @param {boolean | number | string} value - Value of the embed option\n * @returns {void}\n */\n #setSyncedEmbedOption(\n key: string,\n value: Authorization | Gradient | boolean | number | string,\n ): void {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n this.#_logger.info(`set ${key}`, value.toString());\n\n if (this.#_impl) {\n this.#_impl._attrs[key] = value;\n }\n this.#_playerData.updateEmbedOptionOverrides({ [key]: value });\n\n // Updates our PlayerDataProvider and re-renders the thumbnail with the new embed option\n this.#renderPreloadThumbnail();\n }\n\n #setupEventListeners(): void {\n const loadedMediaDataCallback = (event: LOADED_MEDIA_DATA_EVENT_TYPE) => {\n this.#updateMediaData(event.detail.mediaData);\n };\n\n const implCreatedCallback = (event: IMPL_CREATED_EVENT_TYPE) => {\n this.#_impl = event.detail.impl;\n };\n\n this.addEventListener(LOADED_MEDIA_DATA_EVENT, loadedMediaDataCallback);\n this.addEventListener(IMPL_CREATED_EVENT, implCreatedCallback);\n\n // Dispatched on this host by the legacy popover code each time the popover\n // dialog closes. See #returnFocusToPopoverTrigger.\n this.addEventListener('popover-hide', this.#returnFocusToPopoverTrigger);\n const popoverThumbnailReadyCallback = (): void => {\n this.#destroyPreloadThumbnailForPopover();\n };\n this.addEventListener('popover-thumbnail-ready', popoverThumbnailReadyCallback);\n\n this.#_removeEventListeners.push(\n () => {\n this.removeEventListener(LOADED_MEDIA_DATA_EVENT, loadedMediaDataCallback);\n },\n () => {\n this.removeEventListener(IMPL_CREATED_EVENT, implCreatedCallback);\n },\n () => {\n this.removeEventListener('popover-hide', this.#returnFocusToPopoverTrigger);\n },\n () => {\n this.removeEventListener('popover-thumbnail-ready', popoverThumbnailReadyCallback);\n },\n );\n this.addEventListener('click', this.#handlePreloadThumbnailClick, PRELOAD_CLICK_OPTIONS);\n }\n\n /**\n * Determines if a swatch should be displayed based on the embed options\n * @returns {boolean}\n */\n #shouldDisplaySwatch(): boolean {\n // If this is a popover and it renders a thumbnail in its container, we'll want to show a swatch\n return this.swatch !== false && (!this.wistiaPopover || this.#isPopoverWithThumbnail());\n }\n\n /**\n * Saves new email within localstorage and dispatches an emailchange event\n * @param {string} email - The new email\n * @returns {void}\n * @emits {EmailChangeEventData}\n * @private\n */\n #updateEmail(email: string): void {\n updateWistiaLocalStorage((localStorage: WistiaLocalStorage) => {\n // eslint-disable-next-line no-param-reassign\n localStorage[this.#pageUrl] = {\n ...localStorage[this.#pageUrl],\n trackEmail: email,\n };\n });\n this.dispatchEvent(\n new CustomEvent<EmailChangeEventData>('emailchange', {\n detail: { email },\n }),\n );\n }\n\n /**\n * Called when we have new mediadata for the player\n * @param {MediaData} mediaData\n * @returns {void}\n * @private\n */\n #updateMediaData(mediaData: MediaData): void {\n if (isMediaDataError(mediaData)) {\n // Return early to avoid errors since the rest of the code assumes a\n // MediaData object.\n return;\n }\n\n this.#_playerData.setMediaDataSource(mediaData);\n\n this.#_playerType = choosePlayer(\n this.#_judyContext,\n this.#_playerData.mediaData,\n this.#_playerData.embedOptions,\n ) as Players;\n\n this.#renderPreloadThumbnail();\n }\n}\n\n/**\n * Takes an image url (swatch) and returns the image metadata\n * @param {string} url\n * @returns {Promise<HTMLImageElement>}\n */\nconst getSwatchMetaData = async (url: string) => {\n const swatch = new Image();\n swatch.src = url;\n await swatch.decode();\n return swatch;\n};\n\n/**\n * Takes a media id and returns a swatch style element once we\n * have the swatch image metadata to calculate the aspect ratio\n * @param {string} mediaId\n * @returns {Promise<HTMLStyleElement>}\n */\nexport const wistiaSwatchElement = async (\n mediaId: string,\n embedHost?: string,\n): Promise<HTMLStyleElement> => {\n const swatchUrl = getSwatchUrl(mediaId, embedHost);\n\n const swatchImg = await getSwatchMetaData(swatchUrl);\n const { naturalHeight, naturalWidth } = swatchImg;\n const ratio = (naturalHeight / naturalWidth) * 100;\n\n const style = document.createElement('style');\n style.innerHTML = `\n wistia-player[media-id='${mediaId}']:not(:defined) {\n padding: ${ratio}% 0 0 0;\n background: url(${swatchUrl});\n background-size: contain;\n filter: blur(5px);\n display: block;\n }\n `;\n return style;\n};\n\nif (customElements.get('wistia-player') === undefined) {\n customElements.define('wistia-player', WistiaPlayer);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'wistia-player': WistiaPlayer;\n }\n\n interface GlobalEventHandlersEventMap {\n [AFTER_REPLACE_EVENT]: WistiaPlayerEvents[typeof AFTER_REPLACE_EVENT];\n [API_READY_EVENT]: WistiaPlayerEvents[typeof API_READY_EVENT];\n [BEFORE_REPLACE_EVENT]: WistiaPlayerEvents[typeof BEFORE_REPLACE_EVENT];\n [INPUT_CONTEXT_CHANGE_EVENT]: WistiaPlayerEvents[typeof INPUT_CONTEXT_CHANGE_EVENT];\n [LOADED_MEDIA_DATA_EVENT]: WistiaPlayerEvents[typeof LOADED_MEDIA_DATA_EVENT];\n [MUTE_CHANGE_EVENT]: WistiaPlayerEvents[typeof MUTE_CHANGE_EVENT];\n }\n}\n\ntype WistiaPlayerHTMLAttributes = HTMLAttributes<WistiaPlayer> &\n Partial<\n Pick<\n WistiaPlayer,\n | 'aspect'\n | 'bigPlayButton'\n | 'branding'\n | 'contrastIcons'\n | 'doNotTrack'\n | 'embedHost'\n | 'opaqueControls'\n | 'playerColor'\n | 'playerColorGradient'\n | 'roundedPlayer'\n | 'swatch'\n >\n > &\n Pick<WistiaPlayer, 'mediaId'>;\n\ndeclare module 'preact/src/jsx' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSXInternal {\n interface IntrinsicElements {\n 'wistia-player': WistiaPlayerHTMLAttributes;\n }\n }\n}\n"],"names":[],"ignoreList":[],"sourceRoot":""}