{"version":3,"file":"light-BIMBAXr4.js","sources":["../../node_modules/.pnpm/@stencil+core@2.5.2/node_modules/@stencil/core/internal/app-data/index.js","../../node_modules/.pnpm/@stencil+core@2.5.2/node_modules/@stencil/core/internal/client/index.js","../../node_modules/.pnpm/@vime+core@5.4.1/node_modules/@vime/core/dist/custom-elements/index.js"],"sourcesContent":["const BUILD = {\n allRenderFn: false,\n cmpDidLoad: true,\n cmpDidUnload: false,\n cmpDidUpdate: true,\n cmpDidRender: true,\n cmpWillLoad: true,\n cmpWillUpdate: true,\n cmpWillRender: true,\n connectedCallback: true,\n disconnectedCallback: true,\n element: true,\n event: true,\n hasRenderFn: true,\n lifecycle: true,\n hostListener: true,\n hostListenerTargetWindow: true,\n hostListenerTargetDocument: true,\n hostListenerTargetBody: true,\n hostListenerTargetParent: false,\n hostListenerTarget: true,\n member: true,\n method: true,\n mode: true,\n observeAttribute: true,\n prop: true,\n propMutable: true,\n reflect: true,\n scoped: true,\n shadowDom: true,\n slot: true,\n cssAnnotations: true,\n state: true,\n style: true,\n svg: true,\n updatable: true,\n vdomAttribute: true,\n vdomXlink: true,\n vdomClass: true,\n vdomFunctional: true,\n vdomKey: true,\n vdomListener: true,\n vdomRef: true,\n vdomPropOrAttr: true,\n vdomRender: true,\n vdomStyle: true,\n vdomText: true,\n watchCallback: true,\n taskQueue: true,\n hotModuleReplacement: false,\n isDebug: false,\n isDev: false,\n isTesting: false,\n hydrateServerSide: false,\n hydrateClientSide: false,\n lifecycleDOMEvents: false,\n lazyLoad: false,\n profile: false,\n slotRelocation: true,\n appendChildSlotFix: false,\n cloneNodeFix: false,\n hydratedAttribute: false,\n hydratedClass: true,\n safari10: false,\n scriptDataOpts: false,\n shadowDomShim: false,\n slotChildNodesFix: false,\n propBoolean: true,\n propNumber: true,\n propString: true,\n cssVarShim: false,\n constructableCSS: true,\n cmpShouldUpdate: true,\n devTools: false,\n dynamicImportShim: false,\n shadowDelegatesFocus: true,\n initializeNextTick: false,\n asyncLoading: false,\n asyncQueue: false,\n transformTagName: false,\n attachStyles: true,\n};\nconst Env = {};\nconst NAMESPACE = /* default */ 'app';\n\nexport { BUILD, Env, NAMESPACE };\n","let scopeId;\nlet contentRef;\nlet hostTagName;\nlet customError;\nlet i = 0;\nlet useNativeShadowDom = false;\nlet checkSlotFallbackVisibility = false;\nlet checkSlotRelocate = false;\nlet isSvgMode = false;\nlet renderingRef = null;\nlet queueCongestion = 0;\nlet queuePending = false;\n/*\n Stencil Client Platform v2.5.2 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nconst win = typeof window !== 'undefined' ? window : {};\nconst CSS = BUILD.cssVarShim ? win.CSS : null;\nconst doc = win.document || { head: {} };\nconst H = (win.HTMLElement || class {\n});\nconst plt = {\n $flags$: 0,\n $resourcesUrl$: '',\n jmp: h => h(),\n raf: h => requestAnimationFrame(h),\n ael: (el, eventName, listener, opts) => el.addEventListener(eventName, listener, opts),\n rel: (el, eventName, listener, opts) => el.removeEventListener(eventName, listener, opts),\n ce: (eventName, opts) => new CustomEvent(eventName, opts),\n};\nconst supportsShadow = BUILD.shadowDomShim && BUILD.shadowDom ? /*@__PURE__*/ (() => (doc.head.attachShadow + '').indexOf('[native') > -1)() : true;\nconst supportsListenerOptions = /*@__PURE__*/ (() => {\n let supportsListenerOptions = false;\n try {\n doc.addEventListener('e', null, Object.defineProperty({}, 'passive', {\n get() {\n supportsListenerOptions = true;\n },\n }));\n }\n catch (e) { }\n return supportsListenerOptions;\n})();\nconst promiseResolve = (v) => Promise.resolve(v);\nconst supportsConstructibleStylesheets = BUILD.constructableCSS\n ? /*@__PURE__*/ (() => {\n try {\n new CSSStyleSheet();\n return typeof (new CSSStyleSheet()).replace === 'function';\n }\n catch (e) { }\n return false;\n })()\n : false;\nconst Context = {};\nconst addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {\n if (BUILD.hostListener && listeners) {\n // this is called immediately within the element's constructor\n // initialize our event listeners on the host element\n // we do this now so that we can listen to events that may\n // have fired even before the instance is ready\n if (BUILD.hostListenerTargetParent) {\n // this component may have event listeners that should be attached to the parent\n if (attachParentListeners) {\n // this is being ran from within the connectedCallback\n // which is important so that we know the host element actually has a parent element\n // filter out the listeners to only have the ones that ARE being attached to the parent\n listeners = listeners.filter(([flags]) => flags & 32 /* TargetParent */);\n }\n else {\n // this is being ran from within the component constructor\n // everything BUT the parent element listeners should be attached at this time\n // filter out the listeners that are NOT being attached to the parent\n listeners = listeners.filter(([flags]) => !(flags & 32 /* TargetParent */));\n }\n }\n listeners.map(([flags, name, method]) => {\n const target = BUILD.hostListenerTarget ? getHostListenerTarget(elm, flags) : elm;\n const handler = hostListenerProxy(hostRef, method);\n const opts = hostListenerOpts(flags);\n plt.ael(target, name, handler, opts);\n (hostRef.$rmListeners$ = hostRef.$rmListeners$ || []).push(() => plt.rel(target, name, handler, opts));\n });\n }\n};\nconst hostListenerProxy = (hostRef, methodName) => (ev) => {\n try {\n if (BUILD.lazyLoad) {\n if (hostRef.$flags$ & 256 /* isListenReady */) {\n // instance is ready, let's call it's member method for this event\n hostRef.$lazyInstance$[methodName](ev);\n }\n else {\n (hostRef.$queuedListeners$ = hostRef.$queuedListeners$ || []).push([methodName, ev]);\n }\n }\n else {\n hostRef.$hostElement$[methodName](ev);\n }\n }\n catch (e) {\n consoleError(e);\n }\n};\nconst getHostListenerTarget = (elm, flags) => {\n if (BUILD.hostListenerTargetDocument && flags & 4 /* TargetDocument */)\n return doc;\n if (BUILD.hostListenerTargetWindow && flags & 8 /* TargetWindow */)\n return win;\n if (BUILD.hostListenerTargetBody && flags & 16 /* TargetBody */)\n return doc.body;\n if (BUILD.hostListenerTargetParent && flags & 32 /* TargetParent */)\n return elm.parentElement;\n return elm;\n};\n// prettier-ignore\nconst hostListenerOpts = (flags) => supportsListenerOptions\n ? ({\n passive: (flags & 1 /* Passive */) !== 0,\n capture: (flags & 2 /* Capture */) !== 0,\n })\n : (flags & 2 /* Capture */) !== 0;\nconst CONTENT_REF_ID = 'r';\nconst ORG_LOCATION_ID = 'o';\nconst SLOT_NODE_ID = 's';\nconst TEXT_NODE_ID = 't';\nconst HYDRATE_ID = 's-id';\nconst HYDRATED_STYLE_ID = 'sty-id';\nconst HYDRATE_CHILD_ID = 'c-id';\nconst HYDRATED_CSS = '{visibility:hidden}.hydrated{visibility:inherit}';\nconst XLINK_NS = 'http://www.w3.org/1999/xlink';\nconst createTime = (fnName, tagName = '') => {\n if (BUILD.profile && performance.mark) {\n const key = `st:${fnName}:${tagName}:${i++}`;\n // Start\n performance.mark(key);\n // End\n return () => performance.measure(`[Stencil] ${fnName}() <${tagName}>`, key);\n }\n else {\n return () => {\n return;\n };\n }\n};\nconst uniqueTime = (key, measureText) => {\n if (BUILD.profile && performance.mark) {\n if (performance.getEntriesByName(key).length === 0) {\n performance.mark(key);\n }\n return () => {\n if (performance.getEntriesByName(measureText).length === 0) {\n performance.measure(measureText, key);\n }\n };\n }\n else {\n return () => {\n return;\n };\n }\n};\nconst inspect = (ref) => {\n const hostRef = getHostRef(ref);\n if (!hostRef) {\n return undefined;\n }\n const flags = hostRef.$flags$;\n const hostElement = hostRef.$hostElement$;\n return {\n renderCount: hostRef.$renderCount$,\n flags: {\n hasRendered: !!(flags & 2 /* hasRendered */),\n hasConnected: !!(flags & 1 /* hasConnected */),\n isWaitingForChildren: !!(flags & 4 /* isWaitingForChildren */),\n isConstructingInstance: !!(flags & 8 /* isConstructingInstance */),\n isQueuedForUpdate: !!(flags & 16 /* isQueuedForUpdate */),\n hasInitializedComponent: !!(flags & 32 /* hasInitializedComponent */),\n hasLoadedComponent: !!(flags & 64 /* hasLoadedComponent */),\n isWatchReady: !!(flags & 128 /* isWatchReady */),\n isListenReady: !!(flags & 256 /* isListenReady */),\n needsRerender: !!(flags & 512 /* needsRerender */),\n },\n instanceValues: hostRef.$instanceValues$,\n ancestorComponent: hostRef.$ancestorComponent$,\n hostElement,\n lazyInstance: hostRef.$lazyInstance$,\n vnode: hostRef.$vnode$,\n modeName: hostRef.$modeName$,\n onReadyPromise: hostRef.$onReadyPromise$,\n onReadyResolve: hostRef.$onReadyResolve$,\n onInstancePromise: hostRef.$onInstancePromise$,\n onInstanceResolve: hostRef.$onInstanceResolve$,\n onRenderResolve: hostRef.$onRenderResolve$,\n queuedListeners: hostRef.$queuedListeners$,\n rmListeners: hostRef.$rmListeners$,\n ['s-id']: hostElement['s-id'],\n ['s-cr']: hostElement['s-cr'],\n ['s-lr']: hostElement['s-lr'],\n ['s-p']: hostElement['s-p'],\n ['s-rc']: hostElement['s-rc'],\n ['s-sc']: hostElement['s-sc'],\n };\n};\nconst installDevTools = () => {\n if (BUILD.devTools) {\n const stencil = (win.stencil = win.stencil || {});\n const originalInspect = stencil.inspect;\n stencil.inspect = (ref) => {\n let result = inspect(ref);\n if (!result && typeof originalInspect === 'function') {\n result = originalInspect(ref);\n }\n return result;\n };\n }\n};\nconst rootAppliedStyles = new WeakMap();\nconst registerStyle = (scopeId, cssText, allowCS) => {\n let style = styles.get(scopeId);\n if (supportsConstructibleStylesheets && allowCS) {\n style = (style || new CSSStyleSheet());\n style.replace(cssText);\n }\n else {\n style = cssText;\n }\n styles.set(scopeId, style);\n};\nconst addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {\n let scopeId = getScopeId(cmpMeta, mode);\n let style = styles.get(scopeId);\n if (!BUILD.attachStyles) {\n return scopeId;\n }\n // if an element is NOT connected then getRootNode() will return the wrong root node\n // so the fallback is to always use the document for the root node in those cases\n styleContainerNode = styleContainerNode.nodeType === 11 /* DocumentFragment */ ? styleContainerNode : doc;\n if (style) {\n if (typeof style === 'string') {\n styleContainerNode = styleContainerNode.head || styleContainerNode;\n let appliedStyles = rootAppliedStyles.get(styleContainerNode);\n let styleElm;\n if (!appliedStyles) {\n rootAppliedStyles.set(styleContainerNode, (appliedStyles = new Set()));\n }\n if (!appliedStyles.has(scopeId)) {\n if (BUILD.hydrateClientSide && styleContainerNode.host && (styleElm = styleContainerNode.querySelector(`[${HYDRATED_STYLE_ID}=\"${scopeId}\"]`))) {\n // This is only happening on native shadow-dom, do not needs CSS var shim\n styleElm.innerHTML = style;\n }\n else {\n if (BUILD.cssVarShim && plt.$cssShim$) {\n styleElm = plt.$cssShim$.createHostStyle(hostElm, scopeId, style, !!(cmpMeta.$flags$ & 10 /* needsScopedEncapsulation */));\n const newScopeId = styleElm['s-sc'];\n if (newScopeId) {\n scopeId = newScopeId;\n // we don't want to add this styleID to the appliedStyles Set\n // since the cssVarShim might need to apply several different\n // stylesheets for the same component\n appliedStyles = null;\n }\n }\n else {\n styleElm = doc.createElement('style');\n styleElm.innerHTML = style;\n }\n if (BUILD.hydrateServerSide || BUILD.hotModuleReplacement) {\n styleElm.setAttribute(HYDRATED_STYLE_ID, scopeId);\n }\n styleContainerNode.insertBefore(styleElm, styleContainerNode.querySelector('link'));\n }\n if (appliedStyles) {\n appliedStyles.add(scopeId);\n }\n }\n }\n else if (BUILD.constructableCSS && !styleContainerNode.adoptedStyleSheets.includes(style)) {\n styleContainerNode.adoptedStyleSheets = [...styleContainerNode.adoptedStyleSheets, style];\n }\n }\n return scopeId;\n};\nconst attachStyles = (hostRef) => {\n const cmpMeta = hostRef.$cmpMeta$;\n const elm = hostRef.$hostElement$;\n const flags = cmpMeta.$flags$;\n const endAttachStyles = createTime('attachStyles', cmpMeta.$tagName$);\n const scopeId = addStyle(BUILD.shadowDom && supportsShadow && elm.shadowRoot ? elm.shadowRoot : elm.getRootNode(), cmpMeta, hostRef.$modeName$, elm);\n if ((BUILD.shadowDom || BUILD.scoped) && BUILD.cssAnnotations && flags & 10 /* needsScopedEncapsulation */) {\n // only required when we're NOT using native shadow dom (slot)\n // or this browser doesn't support native shadow dom\n // and this host element was NOT created with SSR\n // let's pick out the inner content for slot projection\n // create a node to represent where the original\n // content was first placed, which is useful later on\n // DOM WRITE!!\n elm['s-sc'] = scopeId;\n elm.classList.add(scopeId + '-h');\n if (BUILD.scoped && flags & 2 /* scopedCssEncapsulation */) {\n elm.classList.add(scopeId + '-s');\n }\n }\n endAttachStyles();\n};\nconst getScopeId = (cmp, mode) => 'sc-' + (BUILD.mode && mode && cmp.$flags$ & 32 /* hasMode */ ? cmp.$tagName$ + '-' + mode : cmp.$tagName$);\nconst convertScopedToShadow = (css) => css.replace(/\\/\\*!@([^\\/]+)\\*\\/[^\\{]+\\{/g, '$1{');\n// Private\nconst computeMode = (elm) => modeResolutionChain.map(h => h(elm)).find(m => !!m);\n// Public\nconst setMode = (handler) => modeResolutionChain.push(handler);\nconst getMode = (ref) => getHostRef(ref).$modeName$;\n/**\n * Default style mode id\n */\n/**\n * Reusable empty obj/array\n * Don't add values to these!!\n */\nconst EMPTY_OBJ = {};\n/**\n * Namespaces\n */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst HTML_NS = 'http://www.w3.org/1999/xhtml';\nconst isDef = (v) => v != null;\nconst isComplexType = (o) => {\n // https://jsperf.com/typeof-fn-object/5\n o = typeof o;\n return o === 'object' || o === 'function';\n};\n/**\n * Production h() function based on Preact by\n * Jason Miller (@developit)\n * Licensed under the MIT License\n * https://github.com/developit/preact/blob/master/LICENSE\n *\n * Modified for Stencil's compiler and vdom\n */\n// const stack: any[] = [];\n// export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, child?: d.ChildType): d.VNode;\n// export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, ...children: d.ChildType[]): d.VNode;\nconst h = (nodeName, vnodeData, ...children) => {\n let child = null;\n let key = null;\n let slotName = null;\n let simple = false;\n let lastSimple = false;\n let vNodeChildren = [];\n const walk = (c) => {\n for (let i = 0; i < c.length; i++) {\n child = c[i];\n if (Array.isArray(child)) {\n walk(child);\n }\n else if (child != null && typeof child !== 'boolean') {\n if ((simple = typeof nodeName !== 'function' && !isComplexType(child))) {\n child = String(child);\n }\n else if (BUILD.isDev && typeof nodeName !== 'function' && child.$flags$ === undefined) {\n consoleDevError(`vNode passed as children has unexpected type.\nMake sure it's using the correct h() function.\nEmpty objects can also be the cause, look for JSX comments that became objects.`);\n }\n if (simple && lastSimple) {\n // If the previous child was simple (string), we merge both\n vNodeChildren[vNodeChildren.length - 1].$text$ += child;\n }\n else {\n // Append a new vNode, if it's text, we create a text vNode\n vNodeChildren.push(simple ? newVNode(null, child) : child);\n }\n lastSimple = simple;\n }\n }\n };\n walk(children);\n if (vnodeData) {\n if (BUILD.isDev && nodeName === 'input') {\n validateInputProperties(vnodeData);\n }\n // normalize class / classname attributes\n if (BUILD.vdomKey && vnodeData.key) {\n key = vnodeData.key;\n }\n if (BUILD.slotRelocation && vnodeData.name) {\n slotName = vnodeData.name;\n }\n if (BUILD.vdomClass) {\n const classData = vnodeData.className || vnodeData.class;\n if (classData) {\n vnodeData.class =\n typeof classData !== 'object'\n ? classData\n : Object.keys(classData)\n .filter(k => classData[k])\n .join(' ');\n }\n }\n }\n if (BUILD.isDev && vNodeChildren.some(isHost)) {\n consoleDevError(`The must be the single root component. Make sure:\n- You are NOT using hostData() and in the same component.\n- is used once, and it's the single root component of the render() function.`);\n }\n if (BUILD.vdomFunctional && typeof nodeName === 'function') {\n // nodeName is a functional component\n return nodeName(vnodeData === null ? {} : vnodeData, vNodeChildren, vdomFnUtils);\n }\n const vnode = newVNode(nodeName, null);\n vnode.$attrs$ = vnodeData;\n if (vNodeChildren.length > 0) {\n vnode.$children$ = vNodeChildren;\n }\n if (BUILD.vdomKey) {\n vnode.$key$ = key;\n }\n if (BUILD.slotRelocation) {\n vnode.$name$ = slotName;\n }\n return vnode;\n};\nconst newVNode = (tag, text) => {\n const vnode = {\n $flags$: 0,\n $tag$: tag,\n $text$: text,\n $elm$: null,\n $children$: null,\n };\n if (BUILD.vdomAttribute) {\n vnode.$attrs$ = null;\n }\n if (BUILD.vdomKey) {\n vnode.$key$ = null;\n }\n if (BUILD.slotRelocation) {\n vnode.$name$ = null;\n }\n return vnode;\n};\nconst Host = {};\nconst isHost = (node) => node && node.$tag$ === Host;\nconst vdomFnUtils = {\n forEach: (children, cb) => children.map(convertToPublic).forEach(cb),\n map: (children, cb) => children.map(convertToPublic).map(cb).map(convertToPrivate),\n};\nconst convertToPublic = (node) => ({\n vattrs: node.$attrs$,\n vchildren: node.$children$,\n vkey: node.$key$,\n vname: node.$name$,\n vtag: node.$tag$,\n vtext: node.$text$,\n});\nconst convertToPrivate = (node) => {\n if (typeof node.vtag === 'function') {\n const vnodeData = Object.assign({}, node.vattrs);\n if (node.vkey) {\n vnodeData.key = node.vkey;\n }\n if (node.vname) {\n vnodeData.name = node.vname;\n }\n return h(node.vtag, vnodeData, ...(node.vchildren || []));\n }\n const vnode = newVNode(node.vtag, node.vtext);\n vnode.$attrs$ = node.vattrs;\n vnode.$children$ = node.vchildren;\n vnode.$key$ = node.vkey;\n vnode.$name$ = node.vname;\n return vnode;\n};\nconst validateInputProperties = (vnodeData) => {\n const props = Object.keys(vnodeData);\n const typeIndex = props.indexOf('type');\n const minIndex = props.indexOf('min');\n const maxIndex = props.indexOf('max');\n const stepIndex = props.indexOf('min');\n const value = props.indexOf('value');\n if (value === -1) {\n return;\n }\n if (value < typeIndex || value < minIndex || value < maxIndex || value < stepIndex) {\n consoleDevWarn(`The \"value\" prop of should be set after \"min\", \"max\", \"type\" and \"step\"`);\n }\n};\n/**\n * Production setAccessor() function based on Preact by\n * Jason Miller (@developit)\n * Licensed under the MIT License\n * https://github.com/developit/preact/blob/master/LICENSE\n *\n * Modified for Stencil's compiler and vdom\n */\nconst setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags) => {\n if (oldValue !== newValue) {\n let isProp = isMemberInElement(elm, memberName);\n let ln = memberName.toLowerCase();\n if (BUILD.vdomClass && memberName === 'class') {\n const classList = elm.classList;\n const oldClasses = parseClassList(oldValue);\n const newClasses = parseClassList(newValue);\n classList.remove(...oldClasses.filter(c => c && !newClasses.includes(c)));\n classList.add(...newClasses.filter(c => c && !oldClasses.includes(c)));\n }\n else if (BUILD.vdomStyle && memberName === 'style') {\n // update style attribute, css properties and values\n if (BUILD.updatable) {\n for (const prop in oldValue) {\n if (!newValue || newValue[prop] == null) {\n if (!BUILD.hydrateServerSide && prop.includes('-')) {\n elm.style.removeProperty(prop);\n }\n else {\n elm.style[prop] = '';\n }\n }\n }\n }\n for (const prop in newValue) {\n if (!oldValue || newValue[prop] !== oldValue[prop]) {\n if (!BUILD.hydrateServerSide && prop.includes('-')) {\n elm.style.setProperty(prop, newValue[prop]);\n }\n else {\n elm.style[prop] = newValue[prop];\n }\n }\n }\n }\n else if (BUILD.vdomKey && memberName === 'key')\n ;\n else if (BUILD.vdomRef && memberName === 'ref') {\n // minifier will clean this up\n if (newValue) {\n newValue(elm);\n }\n }\n else if (BUILD.vdomListener && (BUILD.lazyLoad ? !isProp : !elm.__lookupSetter__(memberName)) && memberName[0] === 'o' && memberName[1] === 'n') {\n // Event Handlers\n // so if the member name starts with \"on\" and the 3rd characters is\n // a capital letter, and it's not already a member on the element,\n // then we're assuming it's an event listener\n if (memberName[2] === '-') {\n // on- prefixed events\n // allows to be explicit about the dom event to listen without any magic\n // under the hood:\n // // listens for \"click\"\n // // listens for \"Click\"\n // // listens for \"ionChange\"\n // // listens for \"EVENTS\"\n memberName = memberName.slice(3);\n }\n else if (isMemberInElement(win, ln)) {\n // standard event\n // the JSX attribute could have been \"onMouseOver\" and the\n // member name \"onmouseover\" is on the window's prototype\n // so let's add the listener \"mouseover\", which is all lowercased\n memberName = ln.slice(2);\n }\n else {\n // custom event\n // the JSX attribute could have been \"onMyCustomEvent\"\n // so let's trim off the \"on\" prefix and lowercase the first character\n // and add the listener \"myCustomEvent\"\n // except for the first character, we keep the event name case\n memberName = ln[2] + memberName.slice(3);\n }\n if (oldValue) {\n plt.rel(elm, memberName, oldValue, false);\n }\n if (newValue) {\n plt.ael(elm, memberName, newValue, false);\n }\n }\n else if (BUILD.vdomPropOrAttr) {\n // Set property if it exists and it's not a SVG\n const isComplex = isComplexType(newValue);\n if ((isProp || (isComplex && newValue !== null)) && !isSvg) {\n try {\n if (!elm.tagName.includes('-')) {\n let n = newValue == null ? '' : newValue;\n // Workaround for Safari, moving the caret when re-assigning the same valued\n if (memberName === 'list') {\n isProp = false;\n // tslint:disable-next-line: triple-equals\n }\n else if (oldValue == null || elm[memberName] != n) {\n elm[memberName] = n;\n }\n }\n else {\n elm[memberName] = newValue;\n }\n }\n catch (e) { }\n }\n /**\n * Need to manually update attribute if:\n * - memberName is not an attribute\n * - if we are rendering the host element in order to reflect attribute\n * - if it's a SVG, since properties might not work in \n * - if the newValue is null/undefined or 'false'.\n */\n let xlink = false;\n if (BUILD.vdomXlink) {\n if (ln !== (ln = ln.replace(/^xlink\\:?/, ''))) {\n memberName = ln;\n xlink = true;\n }\n }\n if (newValue == null || newValue === false) {\n if (newValue !== false || elm.getAttribute(memberName) === '') {\n if (BUILD.vdomXlink && xlink) {\n elm.removeAttributeNS(XLINK_NS, memberName);\n }\n else {\n elm.removeAttribute(memberName);\n }\n }\n }\n else if ((!isProp || flags & 4 /* isHost */ || isSvg) && !isComplex) {\n newValue = newValue === true ? '' : newValue;\n if (BUILD.vdomXlink && xlink) {\n elm.setAttributeNS(XLINK_NS, memberName, newValue);\n }\n else {\n elm.setAttribute(memberName, newValue);\n }\n }\n }\n }\n};\nconst parseClassListRegex = /\\s/;\nconst parseClassList = (value) => (!value ? [] : value.split(parseClassListRegex));\nconst updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {\n // if the element passed in is a shadow root, which is a document fragment\n // then we want to be adding attrs/props to the shadow root's \"host\" element\n // if it's not a shadow root, then we add attrs/props to the same element\n const elm = newVnode.$elm$.nodeType === 11 /* DocumentFragment */ && newVnode.$elm$.host ? newVnode.$elm$.host : newVnode.$elm$;\n const oldVnodeAttrs = (oldVnode && oldVnode.$attrs$) || EMPTY_OBJ;\n const newVnodeAttrs = newVnode.$attrs$ || EMPTY_OBJ;\n if (BUILD.updatable) {\n // remove attributes no longer present on the vnode by setting them to undefined\n for (memberName in oldVnodeAttrs) {\n if (!(memberName in newVnodeAttrs)) {\n setAccessor(elm, memberName, oldVnodeAttrs[memberName], undefined, isSvgMode, newVnode.$flags$);\n }\n }\n }\n // add new & update changed attributes\n for (memberName in newVnodeAttrs) {\n setAccessor(elm, memberName, oldVnodeAttrs[memberName], newVnodeAttrs[memberName], isSvgMode, newVnode.$flags$);\n }\n};\nconst createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {\n // tslint:disable-next-line: prefer-const\n let newVNode = newParentVNode.$children$[childIndex];\n let i = 0;\n let elm;\n let childNode;\n let oldVNode;\n if (BUILD.slotRelocation && !useNativeShadowDom) {\n // remember for later we need to check to relocate nodes\n checkSlotRelocate = true;\n if (newVNode.$tag$ === 'slot') {\n if (scopeId) {\n // scoped css needs to add its scoped id to the parent element\n parentElm.classList.add(scopeId + '-s');\n }\n newVNode.$flags$ |= newVNode.$children$\n ? // slot element has fallback content\n 2 /* isSlotFallback */\n : // slot element does not have fallback content\n 1 /* isSlotReference */;\n }\n }\n if (BUILD.isDev && newVNode.$elm$) {\n consoleDevError(`The JSX ${newVNode.$text$ !== null ? `\"${newVNode.$text$}\" text` : `\"${newVNode.$tag$}\" element`} node should not be shared within the same renderer. The renderer caches element lookups in order to improve performance. However, a side effect from this is that the exact same JSX node should not be reused. For more information please see https://stenciljs.com/docs/templating-jsx#avoid-shared-jsx-nodes`);\n }\n if (BUILD.vdomText && newVNode.$text$ !== null) {\n // create text node\n elm = newVNode.$elm$ = doc.createTextNode(newVNode.$text$);\n }\n else if (BUILD.slotRelocation && newVNode.$flags$ & 1 /* isSlotReference */) {\n // create a slot reference node\n elm = newVNode.$elm$ = BUILD.isDebug || BUILD.hydrateServerSide ? slotReferenceDebugNode(newVNode) : doc.createTextNode('');\n }\n else {\n if (BUILD.svg && !isSvgMode) {\n isSvgMode = newVNode.$tag$ === 'svg';\n }\n // create element\n elm = newVNode.$elm$ = (BUILD.svg\n ? doc.createElementNS(isSvgMode ? SVG_NS : HTML_NS, BUILD.slotRelocation && newVNode.$flags$ & 2 /* isSlotFallback */ ? 'slot-fb' : newVNode.$tag$)\n : doc.createElement(BUILD.slotRelocation && newVNode.$flags$ & 2 /* isSlotFallback */ ? 'slot-fb' : newVNode.$tag$));\n if (BUILD.svg && isSvgMode && newVNode.$tag$ === 'foreignObject') {\n isSvgMode = false;\n }\n // add css classes, attrs, props, listeners, etc.\n if (BUILD.vdomAttribute) {\n updateElement(null, newVNode, isSvgMode);\n }\n if ((BUILD.shadowDom || BUILD.scoped) && isDef(scopeId) && elm['s-si'] !== scopeId) {\n // if there is a scopeId and this is the initial render\n // then let's add the scopeId as a css class\n elm.classList.add((elm['s-si'] = scopeId));\n }\n if (newVNode.$children$) {\n for (i = 0; i < newVNode.$children$.length; ++i) {\n // create the node\n childNode = createElm(oldParentVNode, newVNode, i, elm);\n // return node could have been null\n if (childNode) {\n // append our new node\n elm.appendChild(childNode);\n }\n }\n }\n if (BUILD.svg) {\n if (newVNode.$tag$ === 'svg') {\n // Only reset the SVG context when we're exiting element\n isSvgMode = false;\n }\n else if (elm.tagName === 'foreignObject') {\n // Reenter SVG context when we're exiting element\n isSvgMode = true;\n }\n }\n }\n if (BUILD.slotRelocation) {\n elm['s-hn'] = hostTagName;\n if (newVNode.$flags$ & (2 /* isSlotFallback */ | 1 /* isSlotReference */)) {\n // remember the content reference comment\n elm['s-sr'] = true;\n // remember the content reference comment\n elm['s-cr'] = contentRef;\n // remember the slot name, or empty string for default slot\n elm['s-sn'] = newVNode.$name$ || '';\n // check if we've got an old vnode for this slot\n oldVNode = oldParentVNode && oldParentVNode.$children$ && oldParentVNode.$children$[childIndex];\n if (oldVNode && oldVNode.$tag$ === newVNode.$tag$ && oldParentVNode.$elm$) {\n // we've got an old slot vnode and the wrapper is being replaced\n // so let's move the old slot content back to it's original location\n putBackInOriginalLocation(oldParentVNode.$elm$, false);\n }\n }\n }\n return elm;\n};\nconst putBackInOriginalLocation = (parentElm, recursive) => {\n plt.$flags$ |= 1 /* isTmpDisconnected */;\n const oldSlotChildNodes = parentElm.childNodes;\n for (let i = oldSlotChildNodes.length - 1; i >= 0; i--) {\n const childNode = oldSlotChildNodes[i];\n if (childNode['s-hn'] !== hostTagName && childNode['s-ol']) {\n // // this child node in the old element is from another component\n // // remove this node from the old slot's parent\n // childNode.remove();\n // and relocate it back to it's original location\n parentReferenceNode(childNode).insertBefore(childNode, referenceNode(childNode));\n // remove the old original location comment entirely\n // later on the patch function will know what to do\n // and move this to the correct spot in need be\n childNode['s-ol'].remove();\n childNode['s-ol'] = undefined;\n checkSlotRelocate = true;\n }\n if (recursive) {\n putBackInOriginalLocation(childNode, recursive);\n }\n }\n plt.$flags$ &= ~1 /* isTmpDisconnected */;\n};\nconst addVnodes = (parentElm, before, parentVNode, vnodes, startIdx, endIdx) => {\n let containerElm = ((BUILD.slotRelocation && parentElm['s-cr'] && parentElm['s-cr'].parentNode) || parentElm);\n let childNode;\n if (BUILD.shadowDom && containerElm.shadowRoot && containerElm.tagName === hostTagName) {\n containerElm = containerElm.shadowRoot;\n }\n for (; startIdx <= endIdx; ++startIdx) {\n if (vnodes[startIdx]) {\n childNode = createElm(null, parentVNode, startIdx, parentElm);\n if (childNode) {\n vnodes[startIdx].$elm$ = childNode;\n containerElm.insertBefore(childNode, BUILD.slotRelocation ? referenceNode(before) : before);\n }\n }\n }\n};\nconst removeVnodes = (vnodes, startIdx, endIdx, vnode, elm) => {\n for (; startIdx <= endIdx; ++startIdx) {\n if ((vnode = vnodes[startIdx])) {\n elm = vnode.$elm$;\n callNodeRefs(vnode);\n if (BUILD.slotRelocation) {\n // we're removing this element\n // so it's possible we need to show slot fallback content now\n checkSlotFallbackVisibility = true;\n if (elm['s-ol']) {\n // remove the original location comment\n elm['s-ol'].remove();\n }\n else {\n // it's possible that child nodes of the node\n // that's being removed are slot nodes\n putBackInOriginalLocation(elm, true);\n }\n }\n // remove the vnode's element from the dom\n elm.remove();\n }\n }\n};\nconst updateChildren = (parentElm, oldCh, newVNode, newCh) => {\n let oldStartIdx = 0;\n let newStartIdx = 0;\n let idxInOld = 0;\n let i = 0;\n let oldEndIdx = oldCh.length - 1;\n let oldStartVnode = oldCh[0];\n let oldEndVnode = oldCh[oldEndIdx];\n let newEndIdx = newCh.length - 1;\n let newStartVnode = newCh[0];\n let newEndVnode = newCh[newEndIdx];\n let node;\n let elmToMove;\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n // Vnode might have been moved left\n oldStartVnode = oldCh[++oldStartIdx];\n }\n else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n }\n else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n }\n else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n }\n else if (isSameVnode(oldStartVnode, newStartVnode)) {\n patch(oldStartVnode, newStartVnode);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else if (isSameVnode(oldEndVnode, newEndVnode)) {\n patch(oldEndVnode, newEndVnode);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (isSameVnode(oldStartVnode, newEndVnode)) {\n // Vnode moved right\n if (BUILD.slotRelocation && (oldStartVnode.$tag$ === 'slot' || newEndVnode.$tag$ === 'slot')) {\n putBackInOriginalLocation(oldStartVnode.$elm$.parentNode, false);\n }\n patch(oldStartVnode, newEndVnode);\n parentElm.insertBefore(oldStartVnode.$elm$, oldEndVnode.$elm$.nextSibling);\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (isSameVnode(oldEndVnode, newStartVnode)) {\n // Vnode moved left\n if (BUILD.slotRelocation && (oldStartVnode.$tag$ === 'slot' || newEndVnode.$tag$ === 'slot')) {\n putBackInOriginalLocation(oldEndVnode.$elm$.parentNode, false);\n }\n patch(oldEndVnode, newStartVnode);\n parentElm.insertBefore(oldEndVnode.$elm$, oldStartVnode.$elm$);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n // createKeyToOldIdx\n idxInOld = -1;\n if (BUILD.vdomKey) {\n for (i = oldStartIdx; i <= oldEndIdx; ++i) {\n if (oldCh[i] && oldCh[i].$key$ !== null && oldCh[i].$key$ === newStartVnode.$key$) {\n idxInOld = i;\n break;\n }\n }\n }\n if (BUILD.vdomKey && idxInOld >= 0) {\n elmToMove = oldCh[idxInOld];\n if (elmToMove.$tag$ !== newStartVnode.$tag$) {\n node = createElm(oldCh && oldCh[newStartIdx], newVNode, idxInOld, parentElm);\n }\n else {\n patch(elmToMove, newStartVnode);\n oldCh[idxInOld] = undefined;\n node = elmToMove.$elm$;\n }\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n // new element\n node = createElm(oldCh && oldCh[newStartIdx], newVNode, newStartIdx, parentElm);\n newStartVnode = newCh[++newStartIdx];\n }\n if (node) {\n if (BUILD.slotRelocation) {\n parentReferenceNode(oldStartVnode.$elm$).insertBefore(node, referenceNode(oldStartVnode.$elm$));\n }\n else {\n oldStartVnode.$elm$.parentNode.insertBefore(node, oldStartVnode.$elm$);\n }\n }\n }\n }\n if (oldStartIdx > oldEndIdx) {\n addVnodes(parentElm, newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].$elm$, newVNode, newCh, newStartIdx, newEndIdx);\n }\n else if (BUILD.updatable && newStartIdx > newEndIdx) {\n removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n }\n};\nconst isSameVnode = (vnode1, vnode2) => {\n // compare if two vnode to see if they're \"technically\" the same\n // need to have the same element tag, and same key to be the same\n if (vnode1.$tag$ === vnode2.$tag$) {\n if (BUILD.slotRelocation && vnode1.$tag$ === 'slot') {\n return vnode1.$name$ === vnode2.$name$;\n }\n if (BUILD.vdomKey) {\n return vnode1.$key$ === vnode2.$key$;\n }\n return true;\n }\n return false;\n};\nconst referenceNode = (node) => {\n // this node was relocated to a new location in the dom\n // because of some other component's slot\n // but we still have an html comment in place of where\n // it's original location was according to it's original vdom\n return (node && node['s-ol']) || node;\n};\nconst parentReferenceNode = (node) => (node['s-ol'] ? node['s-ol'] : node).parentNode;\nconst patch = (oldVNode, newVNode) => {\n const elm = (newVNode.$elm$ = oldVNode.$elm$);\n const oldChildren = oldVNode.$children$;\n const newChildren = newVNode.$children$;\n const tag = newVNode.$tag$;\n const text = newVNode.$text$;\n let defaultHolder;\n if (!BUILD.vdomText || text === null) {\n if (BUILD.svg) {\n // test if we're rendering an svg element, or still rendering nodes inside of one\n // only add this to the when the compiler sees we're using an svg somewhere\n isSvgMode = tag === 'svg' ? true : tag === 'foreignObject' ? false : isSvgMode;\n }\n // element node\n if (BUILD.vdomAttribute || BUILD.reflect) {\n if (BUILD.slot && tag === 'slot')\n ;\n else {\n // either this is the first render of an element OR it's an update\n // AND we already know it's possible it could have changed\n // this updates the element's css classes, attrs, props, listeners, etc.\n updateElement(oldVNode, newVNode, isSvgMode);\n }\n }\n if (BUILD.updatable && oldChildren !== null && newChildren !== null) {\n // looks like there's child vnodes for both the old and new vnodes\n updateChildren(elm, oldChildren, newVNode, newChildren);\n }\n else if (newChildren !== null) {\n // no old child vnodes, but there are new child vnodes to add\n if (BUILD.updatable && BUILD.vdomText && oldVNode.$text$ !== null) {\n // the old vnode was text, so be sure to clear it out\n elm.textContent = '';\n }\n // add the new vnode children\n addVnodes(elm, null, newVNode, newChildren, 0, newChildren.length - 1);\n }\n else if (BUILD.updatable && oldChildren !== null) {\n // no new child vnodes, but there are old child vnodes to remove\n removeVnodes(oldChildren, 0, oldChildren.length - 1);\n }\n if (BUILD.svg && isSvgMode && tag === 'svg') {\n isSvgMode = false;\n }\n }\n else if (BUILD.vdomText && BUILD.slotRelocation && (defaultHolder = elm['s-cr'])) {\n // this element has slotted content\n defaultHolder.parentNode.textContent = text;\n }\n else if (BUILD.vdomText && oldVNode.$text$ !== text) {\n // update the text content for the text only vnode\n // and also only if the text is different than before\n elm.data = text;\n }\n};\nconst updateFallbackSlotVisibility = (elm) => {\n // tslint:disable-next-line: prefer-const\n let childNodes = elm.childNodes;\n let childNode;\n let i;\n let ilen;\n let j;\n let slotNameAttr;\n let nodeType;\n for (i = 0, ilen = childNodes.length; i < ilen; i++) {\n childNode = childNodes[i];\n if (childNode.nodeType === 1 /* ElementNode */) {\n if (childNode['s-sr']) {\n // this is a slot fallback node\n // get the slot name for this slot reference node\n slotNameAttr = childNode['s-sn'];\n // by default always show a fallback slot node\n // then hide it if there are other slots in the light dom\n childNode.hidden = false;\n for (j = 0; j < ilen; j++) {\n nodeType = childNodes[j].nodeType;\n if (childNodes[j]['s-hn'] !== childNode['s-hn'] || slotNameAttr !== '') {\n // this sibling node is from a different component OR is a named fallback slot node\n if (nodeType === 1 /* ElementNode */ && slotNameAttr === childNodes[j].getAttribute('slot')) {\n childNode.hidden = true;\n break;\n }\n }\n else {\n // this is a default fallback slot node\n // any element or text node (with content)\n // should hide the default fallback slot node\n if (nodeType === 1 /* ElementNode */ ||\n (nodeType === 3 /* TextNode */ && childNodes[j].textContent.trim() !== '')) {\n childNode.hidden = true;\n break;\n }\n }\n }\n }\n // keep drilling down\n updateFallbackSlotVisibility(childNode);\n }\n }\n};\nconst relocateNodes = [];\nconst relocateSlotContent = (elm) => {\n // tslint:disable-next-line: prefer-const\n let childNode;\n let node;\n let hostContentNodes;\n let slotNameAttr;\n let relocateNodeData;\n let j;\n let i = 0;\n let childNodes = elm.childNodes;\n let ilen = childNodes.length;\n for (; i < ilen; i++) {\n childNode = childNodes[i];\n if (childNode['s-sr'] && (node = childNode['s-cr']) && node.parentNode) {\n // first got the content reference comment node\n // then we got it's parent, which is where all the host content is in now\n hostContentNodes = node.parentNode.childNodes;\n slotNameAttr = childNode['s-sn'];\n for (j = hostContentNodes.length - 1; j >= 0; j--) {\n node = hostContentNodes[j];\n if (!node['s-cn'] && !node['s-nr'] && node['s-hn'] !== childNode['s-hn']) {\n // let's do some relocating to its new home\n // but never relocate a content reference node\n // that is suppose to always represent the original content location\n if (isNodeLocatedInSlot(node, slotNameAttr)) {\n // it's possible we've already decided to relocate this node\n relocateNodeData = relocateNodes.find(r => r.$nodeToRelocate$ === node);\n // made some changes to slots\n // let's make sure we also double check\n // fallbacks are correctly hidden or shown\n checkSlotFallbackVisibility = true;\n node['s-sn'] = node['s-sn'] || slotNameAttr;\n if (relocateNodeData) {\n // previously we never found a slot home for this node\n // but turns out we did, so let's remember it now\n relocateNodeData.$slotRefNode$ = childNode;\n }\n else {\n // add to our list of nodes to relocate\n relocateNodes.push({\n $slotRefNode$: childNode,\n $nodeToRelocate$: node,\n });\n }\n if (node['s-sr']) {\n relocateNodes.map(relocateNode => {\n if (isNodeLocatedInSlot(relocateNode.$nodeToRelocate$, node['s-sn'])) {\n relocateNodeData = relocateNodes.find(r => r.$nodeToRelocate$ === node);\n if (relocateNodeData && !relocateNode.$slotRefNode$) {\n relocateNode.$slotRefNode$ = relocateNodeData.$slotRefNode$;\n }\n }\n });\n }\n }\n else if (!relocateNodes.some(r => r.$nodeToRelocate$ === node)) {\n // so far this element does not have a slot home, not setting slotRefNode on purpose\n // if we never find a home for this element then we'll need to hide it\n relocateNodes.push({\n $nodeToRelocate$: node,\n });\n }\n }\n }\n }\n if (childNode.nodeType === 1 /* ElementNode */) {\n relocateSlotContent(childNode);\n }\n }\n};\nconst isNodeLocatedInSlot = (nodeToRelocate, slotNameAttr) => {\n if (nodeToRelocate.nodeType === 1 /* ElementNode */) {\n if (nodeToRelocate.getAttribute('slot') === null && slotNameAttr === '') {\n return true;\n }\n if (nodeToRelocate.getAttribute('slot') === slotNameAttr) {\n return true;\n }\n return false;\n }\n if (nodeToRelocate['s-sn'] === slotNameAttr) {\n return true;\n }\n return slotNameAttr === '';\n};\nconst callNodeRefs = (vNode) => {\n if (BUILD.vdomRef) {\n vNode.$attrs$ && vNode.$attrs$.ref && vNode.$attrs$.ref(null);\n vNode.$children$ && vNode.$children$.map(callNodeRefs);\n }\n};\nconst renderVdom = (hostRef, renderFnResults) => {\n const hostElm = hostRef.$hostElement$;\n const cmpMeta = hostRef.$cmpMeta$;\n const oldVNode = hostRef.$vnode$ || newVNode(null, null);\n const rootVnode = isHost(renderFnResults) ? renderFnResults : h(null, null, renderFnResults);\n hostTagName = hostElm.tagName;\n // runtime check\n if (BUILD.isDev && Array.isArray(renderFnResults) && renderFnResults.some(isHost)) {\n throw new Error(`The must be the single root component.\nLooks like the render() function of \"${hostTagName.toLowerCase()}\" is returning an array that contains the .\n\nThe render() function should look like this instead:\n\nrender() {\n // Do not return an array\n return (\n {content}\n );\n}\n `);\n }\n if (BUILD.reflect && cmpMeta.$attrsToReflect$) {\n rootVnode.$attrs$ = rootVnode.$attrs$ || {};\n cmpMeta.$attrsToReflect$.map(([propName, attribute]) => (rootVnode.$attrs$[attribute] = hostElm[propName]));\n }\n rootVnode.$tag$ = null;\n rootVnode.$flags$ |= 4 /* isHost */;\n hostRef.$vnode$ = rootVnode;\n rootVnode.$elm$ = oldVNode.$elm$ = (BUILD.shadowDom ? hostElm.shadowRoot || hostElm : hostElm);\n if (BUILD.scoped || BUILD.shadowDom) {\n scopeId = hostElm['s-sc'];\n }\n if (BUILD.slotRelocation) {\n contentRef = hostElm['s-cr'];\n useNativeShadowDom = supportsShadow && (cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) !== 0;\n // always reset\n checkSlotFallbackVisibility = false;\n }\n // synchronous patch\n patch(oldVNode, rootVnode);\n if (BUILD.slotRelocation) {\n // while we're moving nodes around existing nodes, temporarily disable\n // the disconnectCallback from working\n plt.$flags$ |= 1 /* isTmpDisconnected */;\n if (checkSlotRelocate) {\n relocateSlotContent(rootVnode.$elm$);\n let relocateData;\n let nodeToRelocate;\n let orgLocationNode;\n let parentNodeRef;\n let insertBeforeNode;\n let refNode;\n let i = 0;\n for (; i < relocateNodes.length; i++) {\n relocateData = relocateNodes[i];\n nodeToRelocate = relocateData.$nodeToRelocate$;\n if (!nodeToRelocate['s-ol']) {\n // add a reference node marking this node's original location\n // keep a reference to this node for later lookups\n orgLocationNode = BUILD.isDebug || BUILD.hydrateServerSide ? originalLocationDebugNode(nodeToRelocate) : doc.createTextNode('');\n orgLocationNode['s-nr'] = nodeToRelocate;\n nodeToRelocate.parentNode.insertBefore((nodeToRelocate['s-ol'] = orgLocationNode), nodeToRelocate);\n }\n }\n for (i = 0; i < relocateNodes.length; i++) {\n relocateData = relocateNodes[i];\n nodeToRelocate = relocateData.$nodeToRelocate$;\n if (relocateData.$slotRefNode$) {\n // by default we're just going to insert it directly\n // after the slot reference node\n parentNodeRef = relocateData.$slotRefNode$.parentNode;\n insertBeforeNode = relocateData.$slotRefNode$.nextSibling;\n orgLocationNode = nodeToRelocate['s-ol'];\n while ((orgLocationNode = orgLocationNode.previousSibling)) {\n refNode = orgLocationNode['s-nr'];\n if (refNode && refNode['s-sn'] === nodeToRelocate['s-sn'] && parentNodeRef === refNode.parentNode) {\n refNode = refNode.nextSibling;\n if (!refNode || !refNode['s-nr']) {\n insertBeforeNode = refNode;\n break;\n }\n }\n }\n if ((!insertBeforeNode && parentNodeRef !== nodeToRelocate.parentNode) || nodeToRelocate.nextSibling !== insertBeforeNode) {\n // we've checked that it's worth while to relocate\n // since that the node to relocate\n // has a different next sibling or parent relocated\n if (nodeToRelocate !== insertBeforeNode) {\n if (!nodeToRelocate['s-hn'] && nodeToRelocate['s-ol']) {\n // probably a component in the index.html that doesn't have it's hostname set\n nodeToRelocate['s-hn'] = nodeToRelocate['s-ol'].parentNode.nodeName;\n }\n // add it back to the dom but in its new home\n parentNodeRef.insertBefore(nodeToRelocate, insertBeforeNode);\n }\n }\n }\n else {\n // this node doesn't have a slot home to go to, so let's hide it\n if (nodeToRelocate.nodeType === 1 /* ElementNode */) {\n nodeToRelocate.hidden = true;\n }\n }\n }\n }\n if (checkSlotFallbackVisibility) {\n updateFallbackSlotVisibility(rootVnode.$elm$);\n }\n // done moving nodes around\n // allow the disconnect callback to work again\n plt.$flags$ &= ~1 /* isTmpDisconnected */;\n // always reset\n relocateNodes.length = 0;\n }\n};\n// slot comment debug nodes only created with the `--debug` flag\n// otherwise these nodes are text nodes w/out content\nconst slotReferenceDebugNode = (slotVNode) => doc.createComment(` (host=${hostTagName.toLowerCase()})`);\nconst originalLocationDebugNode = (nodeToRelocate) => doc.createComment(`org-location for ` + (nodeToRelocate.localName ? `<${nodeToRelocate.localName}> (host=${nodeToRelocate['s-hn']})` : `[${nodeToRelocate.textContent}]`));\nconst getElement = (ref) => (BUILD.lazyLoad ? getHostRef(ref).$hostElement$ : ref);\nconst createEvent = (ref, name, flags) => {\n const elm = getElement(ref);\n return {\n emit: (detail) => {\n if (BUILD.isDev && !elm.isConnected) {\n consoleDevWarn(`The \"${name}\" event was emitted, but the dispatcher node is no longer connected to the dom.`);\n }\n return emitEvent(elm, name, {\n bubbles: !!(flags & 4 /* Bubbles */),\n composed: !!(flags & 2 /* Composed */),\n cancelable: !!(flags & 1 /* Cancellable */),\n detail,\n });\n },\n };\n};\nconst emitEvent = (elm, name, opts) => {\n const ev = plt.ce(name, opts);\n elm.dispatchEvent(ev);\n return ev;\n};\nconst attachToAncestor = (hostRef, ancestorComponent) => {\n if (BUILD.asyncLoading && ancestorComponent && !hostRef.$onRenderResolve$ && ancestorComponent['s-p']) {\n ancestorComponent['s-p'].push(new Promise(r => (hostRef.$onRenderResolve$ = r)));\n }\n};\nconst scheduleUpdate = (hostRef, isInitialLoad) => {\n if (BUILD.taskQueue && BUILD.updatable) {\n hostRef.$flags$ |= 16 /* isQueuedForUpdate */;\n }\n if (BUILD.asyncLoading && hostRef.$flags$ & 4 /* isWaitingForChildren */) {\n hostRef.$flags$ |= 512 /* needsRerender */;\n return;\n }\n attachToAncestor(hostRef, hostRef.$ancestorComponent$);\n // there is no ancestor component or the ancestor component\n // has already fired off its lifecycle update then\n // fire off the initial update\n const dispatch = () => dispatchHooks(hostRef, isInitialLoad);\n return BUILD.taskQueue ? writeTask(dispatch) : dispatch();\n};\nconst dispatchHooks = (hostRef, isInitialLoad) => {\n const elm = hostRef.$hostElement$;\n const endSchedule = createTime('scheduleUpdate', hostRef.$cmpMeta$.$tagName$);\n const instance = BUILD.lazyLoad ? hostRef.$lazyInstance$ : elm;\n let promise;\n if (isInitialLoad) {\n if (BUILD.lazyLoad && BUILD.hostListener) {\n hostRef.$flags$ |= 256 /* isListenReady */;\n if (hostRef.$queuedListeners$) {\n hostRef.$queuedListeners$.map(([methodName, event]) => safeCall(instance, methodName, event));\n hostRef.$queuedListeners$ = null;\n }\n }\n emitLifecycleEvent(elm, 'componentWillLoad');\n if (BUILD.cmpWillLoad) {\n promise = safeCall(instance, 'componentWillLoad');\n }\n }\n else {\n emitLifecycleEvent(elm, 'componentWillUpdate');\n if (BUILD.cmpWillUpdate) {\n promise = safeCall(instance, 'componentWillUpdate');\n }\n }\n emitLifecycleEvent(elm, 'componentWillRender');\n if (BUILD.cmpWillRender) {\n promise = then(promise, () => safeCall(instance, 'componentWillRender'));\n }\n endSchedule();\n return then(promise, () => updateComponent(hostRef, instance, isInitialLoad));\n};\nconst updateComponent = async (hostRef, instance, isInitialLoad) => {\n // updateComponent\n const elm = hostRef.$hostElement$;\n const endUpdate = createTime('update', hostRef.$cmpMeta$.$tagName$);\n const rc = elm['s-rc'];\n if (BUILD.style && isInitialLoad) {\n // DOM WRITE!\n attachStyles(hostRef);\n }\n const endRender = createTime('render', hostRef.$cmpMeta$.$tagName$);\n if (BUILD.isDev) {\n hostRef.$flags$ |= 1024 /* devOnRender */;\n }\n if (BUILD.hydrateServerSide) {\n await callRender(hostRef, instance, elm);\n }\n else {\n callRender(hostRef, instance, elm);\n }\n if (BUILD.cssVarShim && plt.$cssShim$) {\n plt.$cssShim$.updateHost(elm);\n }\n if (BUILD.isDev) {\n hostRef.$renderCount$++;\n hostRef.$flags$ &= ~1024 /* devOnRender */;\n }\n if (BUILD.hydrateServerSide) {\n try {\n // manually connected child components during server-side hydrate\n serverSideConnected(elm);\n if (isInitialLoad) {\n // using only during server-side hydrate\n if (hostRef.$cmpMeta$.$flags$ & 1 /* shadowDomEncapsulation */) {\n elm['s-en'] = '';\n }\n else if (hostRef.$cmpMeta$.$flags$ & 2 /* scopedCssEncapsulation */) {\n elm['s-en'] = 'c';\n }\n }\n }\n catch (e) {\n consoleError(e, elm);\n }\n }\n if (BUILD.asyncLoading && rc) {\n // ok, so turns out there are some child host elements\n // waiting on this parent element to load\n // let's fire off all update callbacks waiting\n rc.map(cb => cb());\n elm['s-rc'] = undefined;\n }\n endRender();\n endUpdate();\n if (BUILD.asyncLoading) {\n const childrenPromises = elm['s-p'];\n const postUpdate = () => postUpdateComponent(hostRef);\n if (childrenPromises.length === 0) {\n postUpdate();\n }\n else {\n Promise.all(childrenPromises).then(postUpdate);\n hostRef.$flags$ |= 4 /* isWaitingForChildren */;\n childrenPromises.length = 0;\n }\n }\n else {\n postUpdateComponent(hostRef);\n }\n};\nconst callRender = (hostRef, instance, elm) => {\n // in order for bundlers to correctly treeshake the BUILD object\n // we need to ensure BUILD is not deoptimized within a try/catch\n // https://rollupjs.org/guide/en/#treeshake tryCatchDeoptimization\n const allRenderFn = BUILD.allRenderFn ? true : false;\n const lazyLoad = BUILD.lazyLoad ? true : false;\n const taskQueue = BUILD.taskQueue ? true : false;\n const updatable = BUILD.updatable ? true : false;\n try {\n renderingRef = instance;\n instance = allRenderFn ? instance.render() : instance.render && instance.render();\n if (updatable && taskQueue) {\n hostRef.$flags$ &= ~16 /* isQueuedForUpdate */;\n }\n if (updatable || lazyLoad) {\n hostRef.$flags$ |= 2 /* hasRendered */;\n }\n if (BUILD.hasRenderFn || BUILD.reflect) {\n if (BUILD.vdomRender || BUILD.reflect) {\n // looks like we've got child nodes to render into this host element\n // or we need to update the css class/attrs on the host element\n // DOM WRITE!\n if (BUILD.hydrateServerSide) {\n return Promise.resolve(instance).then(value => renderVdom(hostRef, value));\n }\n else {\n renderVdom(hostRef, instance);\n }\n }\n else {\n elm.textContent = instance;\n }\n }\n }\n catch (e) {\n consoleError(e, hostRef.$hostElement$);\n }\n renderingRef = null;\n return null;\n};\nconst getRenderingRef = () => renderingRef;\nconst postUpdateComponent = (hostRef) => {\n const tagName = hostRef.$cmpMeta$.$tagName$;\n const elm = hostRef.$hostElement$;\n const endPostUpdate = createTime('postUpdate', tagName);\n const instance = BUILD.lazyLoad ? hostRef.$lazyInstance$ : elm;\n const ancestorComponent = hostRef.$ancestorComponent$;\n if (BUILD.cmpDidRender) {\n if (BUILD.isDev) {\n hostRef.$flags$ |= 1024 /* devOnRender */;\n }\n safeCall(instance, 'componentDidRender');\n if (BUILD.isDev) {\n hostRef.$flags$ &= ~1024 /* devOnRender */;\n }\n }\n emitLifecycleEvent(elm, 'componentDidRender');\n if (!(hostRef.$flags$ & 64 /* hasLoadedComponent */)) {\n hostRef.$flags$ |= 64 /* hasLoadedComponent */;\n if (BUILD.asyncLoading && BUILD.cssAnnotations) {\n // DOM WRITE!\n addHydratedFlag(elm);\n }\n if (BUILD.cmpDidLoad) {\n if (BUILD.isDev) {\n hostRef.$flags$ |= 2048 /* devOnDidLoad */;\n }\n safeCall(instance, 'componentDidLoad');\n if (BUILD.isDev) {\n hostRef.$flags$ &= ~2048 /* devOnDidLoad */;\n }\n }\n emitLifecycleEvent(elm, 'componentDidLoad');\n endPostUpdate();\n if (BUILD.asyncLoading) {\n hostRef.$onReadyResolve$(elm);\n if (!ancestorComponent) {\n appDidLoad(tagName);\n }\n }\n }\n else {\n if (BUILD.cmpDidUpdate) {\n // we've already loaded this component\n // fire off the user's componentDidUpdate method (if one was provided)\n // componentDidUpdate runs AFTER render() has been called\n // and all child components have finished updating\n if (BUILD.isDev) {\n hostRef.$flags$ |= 1024 /* devOnRender */;\n }\n safeCall(instance, 'componentDidUpdate');\n if (BUILD.isDev) {\n hostRef.$flags$ &= ~1024 /* devOnRender */;\n }\n }\n emitLifecycleEvent(elm, 'componentDidUpdate');\n endPostUpdate();\n }\n if (BUILD.hotModuleReplacement) {\n elm['s-hmr-load'] && elm['s-hmr-load']();\n }\n if (BUILD.method && BUILD.lazyLoad) {\n hostRef.$onInstanceResolve$(elm);\n }\n // load events fire from bottom to top\n // the deepest elements load first then bubbles up\n if (BUILD.asyncLoading) {\n if (hostRef.$onRenderResolve$) {\n hostRef.$onRenderResolve$();\n hostRef.$onRenderResolve$ = undefined;\n }\n if (hostRef.$flags$ & 512 /* needsRerender */) {\n nextTick(() => scheduleUpdate(hostRef, false));\n }\n hostRef.$flags$ &= ~(4 /* isWaitingForChildren */ | 512 /* needsRerender */);\n }\n // ( •_•)\n // ( •_•)>⌐■-■\n // (⌐■_■)\n};\nconst forceUpdate = (ref) => {\n if (BUILD.updatable) {\n const hostRef = getHostRef(ref);\n const isConnected = hostRef.$hostElement$.isConnected;\n if (isConnected && (hostRef.$flags$ & (2 /* hasRendered */ | 16 /* isQueuedForUpdate */)) === 2 /* hasRendered */) {\n scheduleUpdate(hostRef, false);\n }\n // Returns \"true\" when the forced update was successfully scheduled\n return isConnected;\n }\n return false;\n};\nconst appDidLoad = (who) => {\n // on appload\n // we have finish the first big initial render\n if (BUILD.cssAnnotations) {\n addHydratedFlag(doc.documentElement);\n }\n if (BUILD.asyncQueue) {\n plt.$flags$ |= 2 /* appLoaded */;\n }\n nextTick(() => emitEvent(win, 'appload', { detail: { namespace: NAMESPACE } }));\n if (BUILD.profile && performance.measure) {\n performance.measure(`[Stencil] ${NAMESPACE} initial load (by ${who})`, 'st:app:start');\n }\n};\nconst safeCall = (instance, method, arg) => {\n if (instance && instance[method]) {\n try {\n return instance[method](arg);\n }\n catch (e) {\n consoleError(e);\n }\n }\n return undefined;\n};\nconst then = (promise, thenFn) => {\n return promise && promise.then ? promise.then(thenFn) : thenFn();\n};\nconst emitLifecycleEvent = (elm, lifecycleName) => {\n if (BUILD.lifecycleDOMEvents) {\n emitEvent(elm, 'stencil_' + lifecycleName, {\n bubbles: true,\n composed: true,\n detail: {\n namespace: NAMESPACE,\n },\n });\n }\n};\nconst addHydratedFlag = (elm) => (BUILD.hydratedClass ? elm.classList.add('hydrated') : BUILD.hydratedAttribute ? elm.setAttribute('hydrated', '') : undefined);\nconst serverSideConnected = (elm) => {\n const children = elm.children;\n if (children != null) {\n for (let i = 0, ii = children.length; i < ii; i++) {\n const childElm = children[i];\n if (typeof childElm.connectedCallback === 'function') {\n childElm.connectedCallback();\n }\n serverSideConnected(childElm);\n }\n }\n};\nconst initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {\n const endHydrate = createTime('hydrateClient', tagName);\n const shadowRoot = hostElm.shadowRoot;\n const childRenderNodes = [];\n const slotNodes = [];\n const shadowRootNodes = BUILD.shadowDom && shadowRoot ? [] : null;\n const vnode = (hostRef.$vnode$ = newVNode(tagName, null));\n if (!plt.$orgLocNodes$) {\n initializeDocumentHydrate(doc.body, (plt.$orgLocNodes$ = new Map()));\n }\n hostElm[HYDRATE_ID] = hostId;\n hostElm.removeAttribute(HYDRATE_ID);\n clientHydrate(vnode, childRenderNodes, slotNodes, shadowRootNodes, hostElm, hostElm, hostId);\n childRenderNodes.map(c => {\n const orgLocationId = c.$hostId$ + '.' + c.$nodeId$;\n const orgLocationNode = plt.$orgLocNodes$.get(orgLocationId);\n const node = c.$elm$;\n if (orgLocationNode && supportsShadow && orgLocationNode['s-en'] === '') {\n orgLocationNode.parentNode.insertBefore(node, orgLocationNode.nextSibling);\n }\n if (!shadowRoot) {\n node['s-hn'] = tagName;\n if (orgLocationNode) {\n node['s-ol'] = orgLocationNode;\n node['s-ol']['s-nr'] = node;\n }\n }\n plt.$orgLocNodes$.delete(orgLocationId);\n });\n if (BUILD.shadowDom && shadowRoot) {\n shadowRootNodes.map(shadowRootNode => {\n if (shadowRootNode) {\n shadowRoot.appendChild(shadowRootNode);\n }\n });\n }\n endHydrate();\n};\nconst clientHydrate = (parentVNode, childRenderNodes, slotNodes, shadowRootNodes, hostElm, node, hostId) => {\n let childNodeType;\n let childIdSplt;\n let childVNode;\n let i;\n if (node.nodeType === 1 /* ElementNode */) {\n childNodeType = node.getAttribute(HYDRATE_CHILD_ID);\n if (childNodeType) {\n // got the node data from the element's attribute\n // `${hostId}.${nodeId}.${depth}.${index}`\n childIdSplt = childNodeType.split('.');\n if (childIdSplt[0] === hostId || childIdSplt[0] === '0') {\n childVNode = {\n $flags$: 0,\n $hostId$: childIdSplt[0],\n $nodeId$: childIdSplt[1],\n $depth$: childIdSplt[2],\n $index$: childIdSplt[3],\n $tag$: node.tagName.toLowerCase(),\n $elm$: node,\n $attrs$: null,\n $children$: null,\n $key$: null,\n $name$: null,\n $text$: null,\n };\n childRenderNodes.push(childVNode);\n node.removeAttribute(HYDRATE_CHILD_ID);\n // this is a new child vnode\n // so ensure its parent vnode has the vchildren array\n if (!parentVNode.$children$) {\n parentVNode.$children$ = [];\n }\n // add our child vnode to a specific index of the vnode's children\n parentVNode.$children$[childVNode.$index$] = childVNode;\n // this is now the new parent vnode for all the next child checks\n parentVNode = childVNode;\n if (shadowRootNodes && childVNode.$depth$ === '0') {\n shadowRootNodes[childVNode.$index$] = childVNode.$elm$;\n }\n }\n }\n // recursively drill down, end to start so we can remove nodes\n for (i = node.childNodes.length - 1; i >= 0; i--) {\n clientHydrate(parentVNode, childRenderNodes, slotNodes, shadowRootNodes, hostElm, node.childNodes[i], hostId);\n }\n if (node.shadowRoot) {\n // keep drilling down through the shadow root nodes\n for (i = node.shadowRoot.childNodes.length - 1; i >= 0; i--) {\n clientHydrate(parentVNode, childRenderNodes, slotNodes, shadowRootNodes, hostElm, node.shadowRoot.childNodes[i], hostId);\n }\n }\n }\n else if (node.nodeType === 8 /* CommentNode */) {\n // `${COMMENT_TYPE}.${hostId}.${nodeId}.${depth}.${index}`\n childIdSplt = node.nodeValue.split('.');\n if (childIdSplt[1] === hostId || childIdSplt[1] === '0') {\n // comment node for either the host id or a 0 host id\n childNodeType = childIdSplt[0];\n childVNode = {\n $flags$: 0,\n $hostId$: childIdSplt[1],\n $nodeId$: childIdSplt[2],\n $depth$: childIdSplt[3],\n $index$: childIdSplt[4],\n $elm$: node,\n $attrs$: null,\n $children$: null,\n $key$: null,\n $name$: null,\n $tag$: null,\n $text$: null,\n };\n if (childNodeType === TEXT_NODE_ID) {\n childVNode.$elm$ = node.nextSibling;\n if (childVNode.$elm$ && childVNode.$elm$.nodeType === 3 /* TextNode */) {\n childVNode.$text$ = childVNode.$elm$.textContent;\n childRenderNodes.push(childVNode);\n // remove the text comment since it's no longer needed\n node.remove();\n if (!parentVNode.$children$) {\n parentVNode.$children$ = [];\n }\n parentVNode.$children$[childVNode.$index$] = childVNode;\n if (shadowRootNodes && childVNode.$depth$ === '0') {\n shadowRootNodes[childVNode.$index$] = childVNode.$elm$;\n }\n }\n }\n else if (childVNode.$hostId$ === hostId) {\n // this comment node is specifcally for this host id\n if (childNodeType === SLOT_NODE_ID) {\n // `${SLOT_NODE_ID}.${hostId}.${nodeId}.${depth}.${index}.${slotName}`;\n childVNode.$tag$ = 'slot';\n if (childIdSplt[5]) {\n node['s-sn'] = childVNode.$name$ = childIdSplt[5];\n }\n else {\n node['s-sn'] = '';\n }\n node['s-sr'] = true;\n if (BUILD.shadowDom && shadowRootNodes) {\n // browser support shadowRoot and this is a shadow dom component\n // create an actual slot element\n childVNode.$elm$ = doc.createElement(childVNode.$tag$);\n if (childVNode.$name$) {\n // add the slot name attribute\n childVNode.$elm$.setAttribute('name', childVNode.$name$);\n }\n // insert the new slot element before the slot comment\n node.parentNode.insertBefore(childVNode.$elm$, node);\n // remove the slot comment since it's not needed for shadow\n node.remove();\n if (childVNode.$depth$ === '0') {\n shadowRootNodes[childVNode.$index$] = childVNode.$elm$;\n }\n }\n slotNodes.push(childVNode);\n if (!parentVNode.$children$) {\n parentVNode.$children$ = [];\n }\n parentVNode.$children$[childVNode.$index$] = childVNode;\n }\n else if (childNodeType === CONTENT_REF_ID) {\n // `${CONTENT_REF_ID}.${hostId}`;\n if (BUILD.shadowDom && shadowRootNodes) {\n // remove the content ref comment since it's not needed for shadow\n node.remove();\n }\n else if (BUILD.slotRelocation) {\n hostElm['s-cr'] = node;\n node['s-cn'] = true;\n }\n }\n }\n }\n }\n else if (parentVNode && parentVNode.$tag$ === 'style') {\n const vnode = newVNode(null, node.textContent);\n vnode.$elm$ = node;\n vnode.$index$ = '0';\n parentVNode.$children$ = [vnode];\n }\n};\nconst initializeDocumentHydrate = (node, orgLocNodes) => {\n if (node.nodeType === 1 /* ElementNode */) {\n let i = 0;\n for (; i < node.childNodes.length; i++) {\n initializeDocumentHydrate(node.childNodes[i], orgLocNodes);\n }\n if (node.shadowRoot) {\n for (i = 0; i < node.shadowRoot.childNodes.length; i++) {\n initializeDocumentHydrate(node.shadowRoot.childNodes[i], orgLocNodes);\n }\n }\n }\n else if (node.nodeType === 8 /* CommentNode */) {\n const childIdSplt = node.nodeValue.split('.');\n if (childIdSplt[0] === ORG_LOCATION_ID) {\n orgLocNodes.set(childIdSplt[1] + '.' + childIdSplt[2], node);\n node.nodeValue = '';\n // useful to know if the original location is\n // the root light-dom of a shadow dom component\n node['s-en'] = childIdSplt[3];\n }\n }\n};\nconst parsePropertyValue = (propValue, propType) => {\n // ensure this value is of the correct prop type\n if (propValue != null && !isComplexType(propValue)) {\n if (BUILD.propBoolean && propType & 4 /* Boolean */) {\n // per the HTML spec, any string value means it is a boolean true value\n // but we'll cheat here and say that the string \"false\" is the boolean false\n return propValue === 'false' ? false : propValue === '' || !!propValue;\n }\n if (BUILD.propNumber && propType & 2 /* Number */) {\n // force it to be a number\n return parseFloat(propValue);\n }\n if (BUILD.propString && propType & 1 /* String */) {\n // could have been passed as a number or boolean\n // but we still want it as a string\n return String(propValue);\n }\n // redundant return here for better minification\n return propValue;\n }\n // not sure exactly what type we want\n // so no need to change to a different type\n return propValue;\n};\nconst getValue = (ref, propName) => getHostRef(ref).$instanceValues$.get(propName);\nconst setValue = (ref, propName, newVal, cmpMeta) => {\n // check our new property value against our internal value\n const hostRef = getHostRef(ref);\n const elm = BUILD.lazyLoad ? hostRef.$hostElement$ : ref;\n const oldVal = hostRef.$instanceValues$.get(propName);\n const flags = hostRef.$flags$;\n const instance = BUILD.lazyLoad ? hostRef.$lazyInstance$ : elm;\n newVal = parsePropertyValue(newVal, cmpMeta.$members$[propName][0]);\n if ((!BUILD.lazyLoad || !(flags & 8 /* isConstructingInstance */) || oldVal === undefined) && newVal !== oldVal) {\n // gadzooks! the property's value has changed!!\n // set our new value!\n hostRef.$instanceValues$.set(propName, newVal);\n if (BUILD.isDev) {\n if (hostRef.$flags$ & 1024 /* devOnRender */) {\n consoleDevWarn(`The state/prop \"${propName}\" changed during rendering. This can potentially lead to infinite-loops and other bugs.`, '\\nElement', elm, '\\nNew value', newVal, '\\nOld value', oldVal);\n }\n else if (hostRef.$flags$ & 2048 /* devOnDidLoad */) {\n consoleDevWarn(`The state/prop \"${propName}\" changed during \"componentDidLoad()\", this triggers extra re-renders, try to setup on \"componentWillLoad()\"`, '\\nElement', elm, '\\nNew value', newVal, '\\nOld value', oldVal);\n }\n }\n if (!BUILD.lazyLoad || instance) {\n // get an array of method names of watch functions to call\n if (BUILD.watchCallback && cmpMeta.$watchers$ && flags & 128 /* isWatchReady */) {\n const watchMethods = cmpMeta.$watchers$[propName];\n if (watchMethods) {\n // this instance is watching for when this property changed\n watchMethods.map(watchMethodName => {\n try {\n // fire off each of the watch methods that are watching this property\n instance[watchMethodName](newVal, oldVal, propName);\n }\n catch (e) {\n consoleError(e, elm);\n }\n });\n }\n }\n if (BUILD.updatable && (flags & (2 /* hasRendered */ | 16 /* isQueuedForUpdate */)) === 2 /* hasRendered */) {\n if (BUILD.cmpShouldUpdate && instance.componentShouldUpdate) {\n if (instance.componentShouldUpdate(newVal, oldVal, propName) === false) {\n return;\n }\n }\n // looks like this value actually changed, so we've got work to do!\n // but only if we've already rendered, otherwise just chill out\n // queue that we need to do an update, but don't worry about queuing\n // up millions cuz this function ensures it only runs once\n scheduleUpdate(hostRef, false);\n }\n }\n }\n};\nconst proxyComponent = (Cstr, cmpMeta, flags) => {\n if (BUILD.member && cmpMeta.$members$) {\n if (BUILD.watchCallback && Cstr.watchers) {\n cmpMeta.$watchers$ = Cstr.watchers;\n }\n // It's better to have a const than two Object.entries()\n const members = Object.entries(cmpMeta.$members$);\n const prototype = Cstr.prototype;\n members.map(([memberName, [memberFlags]]) => {\n if ((BUILD.prop || BUILD.state) && (memberFlags & 31 /* Prop */ || ((!BUILD.lazyLoad || flags & 2 /* proxyState */) && memberFlags & 32 /* State */))) {\n // proxyComponent - prop\n Object.defineProperty(prototype, memberName, {\n get() {\n // proxyComponent, get value\n return getValue(this, memberName);\n },\n set(newValue) {\n // only during dev time\n if (BUILD.isDev) {\n const ref = getHostRef(this);\n if (\n // we are proxying the instance (not element)\n (flags & 1 /* isElementConstructor */) === 0 &&\n // the element is not constructing\n (ref.$flags$ & 8 /* isConstructingInstance */) === 0 &&\n // the member is a prop\n (memberFlags & 31 /* Prop */) !== 0 &&\n // the member is not mutable\n (memberFlags & 1024 /* Mutable */) === 0) {\n consoleDevWarn(`@Prop() \"${memberName}\" on <${cmpMeta.$tagName$}> is immutable but was modified from within the component.\\nMore information: https://stenciljs.com/docs/properties#prop-mutability`);\n }\n }\n // proxyComponent, set value\n setValue(this, memberName, newValue, cmpMeta);\n },\n configurable: true,\n enumerable: true,\n });\n }\n else if (BUILD.lazyLoad && BUILD.method && flags & 1 /* isElementConstructor */ && memberFlags & 64 /* Method */) {\n // proxyComponent - method\n Object.defineProperty(prototype, memberName, {\n value(...args) {\n const ref = getHostRef(this);\n return ref.$onInstancePromise$.then(() => ref.$lazyInstance$[memberName](...args));\n },\n });\n }\n });\n if (BUILD.observeAttribute && (!BUILD.lazyLoad || flags & 1 /* isElementConstructor */)) {\n const attrNameToPropName = new Map();\n prototype.attributeChangedCallback = function (attrName, _oldValue, newValue) {\n plt.jmp(() => {\n const propName = attrNameToPropName.get(attrName);\n this[propName] = newValue === null && typeof this[propName] === 'boolean' ? false : newValue;\n });\n };\n // create an array of attributes to observe\n // and also create a map of html attribute name to js property name\n Cstr.observedAttributes = members\n .filter(([_, m]) => m[0] & 15 /* HasAttribute */) // filter to only keep props that should match attributes\n .map(([propName, m]) => {\n const attrName = m[1] || propName;\n attrNameToPropName.set(attrName, propName);\n if (BUILD.reflect && m[0] & 512 /* ReflectAttr */) {\n cmpMeta.$attrsToReflect$.push([propName, attrName]);\n }\n return attrName;\n });\n }\n }\n return Cstr;\n};\nconst initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) => {\n // initializeComponent\n if ((BUILD.lazyLoad || BUILD.hydrateServerSide || BUILD.style) && (hostRef.$flags$ & 32 /* hasInitializedComponent */) === 0) {\n if (BUILD.lazyLoad || BUILD.hydrateClientSide) {\n // we haven't initialized this element yet\n hostRef.$flags$ |= 32 /* hasInitializedComponent */;\n // lazy loaded components\n // request the component's implementation to be\n // wired up with the host element\n Cstr = loadModule(cmpMeta, hostRef, hmrVersionId);\n if (Cstr.then) {\n // Await creates a micro-task avoid if possible\n const endLoad = uniqueTime(`st:load:${cmpMeta.$tagName$}:${hostRef.$modeName$}`, `[Stencil] Load module for <${cmpMeta.$tagName$}>`);\n Cstr = await Cstr;\n endLoad();\n }\n if ((BUILD.isDev || BUILD.isDebug) && !Cstr) {\n throw new Error(`Constructor for \"${cmpMeta.$tagName$}#${hostRef.$modeName$}\" was not found`);\n }\n if (BUILD.member && !Cstr.isProxied) {\n // we'eve never proxied this Constructor before\n // let's add the getters/setters to its prototype before\n // the first time we create an instance of the implementation\n if (BUILD.watchCallback) {\n cmpMeta.$watchers$ = Cstr.watchers;\n }\n proxyComponent(Cstr, cmpMeta, 2 /* proxyState */);\n Cstr.isProxied = true;\n }\n const endNewInstance = createTime('createInstance', cmpMeta.$tagName$);\n // ok, time to construct the instance\n // but let's keep track of when we start and stop\n // so that the getters/setters don't incorrectly step on data\n if (BUILD.member) {\n hostRef.$flags$ |= 8 /* isConstructingInstance */;\n }\n // construct the lazy-loaded component implementation\n // passing the hostRef is very important during\n // construction in order to directly wire together the\n // host element and the lazy-loaded instance\n try {\n new Cstr(hostRef);\n }\n catch (e) {\n consoleError(e);\n }\n if (BUILD.member) {\n hostRef.$flags$ &= ~8 /* isConstructingInstance */;\n }\n if (BUILD.watchCallback) {\n hostRef.$flags$ |= 128 /* isWatchReady */;\n }\n endNewInstance();\n fireConnectedCallback(hostRef.$lazyInstance$);\n }\n else {\n // sync constructor component\n Cstr = elm.constructor;\n hostRef.$flags$ |= 128 /* isWatchReady */ | 32 /* hasInitializedComponent */;\n }\n if (BUILD.style && Cstr.style) {\n // this component has styles but we haven't registered them yet\n let style = Cstr.style;\n if (BUILD.mode && typeof style !== 'string') {\n style = style[(hostRef.$modeName$ = computeMode(elm))];\n if (BUILD.hydrateServerSide && hostRef.$modeName$) {\n elm.setAttribute('s-mode', hostRef.$modeName$);\n }\n }\n const scopeId = getScopeId(cmpMeta, hostRef.$modeName$);\n if (!styles.has(scopeId)) {\n const endRegisterStyles = createTime('registerStyles', cmpMeta.$tagName$);\n if (!BUILD.hydrateServerSide && BUILD.shadowDom && BUILD.shadowDomShim && cmpMeta.$flags$ & 8 /* needsShadowDomShim */) {\n style = await import('./shadow-css.js').then(m => m.scopeCss(style, scopeId, false));\n }\n registerStyle(scopeId, style, !!(cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */));\n endRegisterStyles();\n }\n }\n }\n // we've successfully created a lazy instance\n const ancestorComponent = hostRef.$ancestorComponent$;\n const schedule = () => scheduleUpdate(hostRef, true);\n if (BUILD.asyncLoading && ancestorComponent && ancestorComponent['s-rc']) {\n // this is the intial load and this component it has an ancestor component\n // but the ancestor component has NOT fired its will update lifecycle yet\n // so let's just cool our jets and wait for the ancestor to continue first\n // this will get fired off when the ancestor component\n // finally gets around to rendering its lazy self\n // fire off the initial update\n ancestorComponent['s-rc'].push(schedule);\n }\n else {\n schedule();\n }\n};\nconst fireConnectedCallback = (instance) => {\n if (BUILD.lazyLoad && BUILD.connectedCallback) {\n safeCall(instance, 'connectedCallback');\n }\n};\nconst connectedCallback = (elm) => {\n if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {\n const hostRef = getHostRef(elm);\n const cmpMeta = hostRef.$cmpMeta$;\n const endConnected = createTime('connectedCallback', cmpMeta.$tagName$);\n if (BUILD.hostListenerTargetParent) {\n // only run if we have listeners being attached to a parent\n addHostEventListeners(elm, hostRef, cmpMeta.$listeners$, true);\n }\n if (!(hostRef.$flags$ & 1 /* hasConnected */)) {\n // first time this component has connected\n hostRef.$flags$ |= 1 /* hasConnected */;\n let hostId;\n if (BUILD.hydrateClientSide) {\n hostId = elm.getAttribute(HYDRATE_ID);\n if (hostId) {\n if (BUILD.shadowDom && supportsShadow && cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) {\n const scopeId = BUILD.mode ? addStyle(elm.shadowRoot, cmpMeta, elm.getAttribute('s-mode')) : addStyle(elm.shadowRoot, cmpMeta);\n elm.classList.remove(scopeId + '-h', scopeId + '-s');\n }\n initializeClientHydrate(elm, cmpMeta.$tagName$, hostId, hostRef);\n }\n }\n if (BUILD.slotRelocation && !hostId) {\n // initUpdate\n // if the slot polyfill is required we'll need to put some nodes\n // in here to act as original content anchors as we move nodes around\n // host element has been connected to the DOM\n if (BUILD.hydrateServerSide || ((BUILD.slot || BUILD.shadowDom) && cmpMeta.$flags$ & (4 /* hasSlotRelocation */ | 8 /* needsShadowDomShim */))) {\n setContentReference(elm);\n }\n }\n if (BUILD.asyncLoading) {\n // find the first ancestor component (if there is one) and register\n // this component as one of the actively loading child components for its ancestor\n let ancestorComponent = elm;\n while ((ancestorComponent = ancestorComponent.parentNode || ancestorComponent.host)) {\n // climb up the ancestors looking for the first\n // component that hasn't finished its lifecycle update yet\n if ((BUILD.hydrateClientSide && ancestorComponent.nodeType === 1 /* ElementNode */ && ancestorComponent.hasAttribute('s-id') && ancestorComponent['s-p']) ||\n ancestorComponent['s-p']) {\n // we found this components first ancestor component\n // keep a reference to this component's ancestor component\n attachToAncestor(hostRef, (hostRef.$ancestorComponent$ = ancestorComponent));\n break;\n }\n }\n }\n // Lazy properties\n // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n if (BUILD.prop && BUILD.lazyLoad && !BUILD.hydrateServerSide && cmpMeta.$members$) {\n Object.entries(cmpMeta.$members$).map(([memberName, [memberFlags]]) => {\n if (memberFlags & 31 /* Prop */ && elm.hasOwnProperty(memberName)) {\n const value = elm[memberName];\n delete elm[memberName];\n elm[memberName] = value;\n }\n });\n }\n if (BUILD.initializeNextTick) {\n // connectedCallback, taskQueue, initialLoad\n // angular sets attribute AFTER connectCallback\n // https://github.com/angular/angular/issues/18909\n // https://github.com/angular/angular/issues/19940\n nextTick(() => initializeComponent(elm, hostRef, cmpMeta));\n }\n else {\n initializeComponent(elm, hostRef, cmpMeta);\n }\n }\n else {\n // not the first time this has connected\n // reattach any event listeners to the host\n // since they would have been removed when disconnected\n addHostEventListeners(elm, hostRef, cmpMeta.$listeners$, false);\n // fire off connectedCallback() on component instance\n fireConnectedCallback(hostRef.$lazyInstance$);\n }\n endConnected();\n }\n};\nconst setContentReference = (elm) => {\n // only required when we're NOT using native shadow dom (slot)\n // or this browser doesn't support native shadow dom\n // and this host element was NOT created with SSR\n // let's pick out the inner content for slot projection\n // create a node to represent where the original\n // content was first placed, which is useful later on\n const contentRefElm = (elm['s-cr'] = doc.createComment(BUILD.isDebug ? `content-ref (host=${elm.localName})` : ''));\n contentRefElm['s-cn'] = true;\n elm.insertBefore(contentRefElm, elm.firstChild);\n};\nconst disconnectedCallback = (elm) => {\n if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {\n const hostRef = getHostRef(elm);\n const instance = BUILD.lazyLoad ? hostRef.$lazyInstance$ : elm;\n if (BUILD.hostListener) {\n if (hostRef.$rmListeners$) {\n hostRef.$rmListeners$.map(rmListener => rmListener());\n hostRef.$rmListeners$ = undefined;\n }\n }\n // clear CSS var-shim tracking\n if (BUILD.cssVarShim && plt.$cssShim$) {\n plt.$cssShim$.removeHost(elm);\n }\n if (BUILD.lazyLoad && BUILD.disconnectedCallback) {\n safeCall(instance, 'disconnectedCallback');\n }\n if (BUILD.cmpDidUnload) {\n safeCall(instance, 'componentDidUnload');\n }\n }\n};\nconst defineCustomElement = (Cstr, compactMeta) => {\n customElements.define(compactMeta[1], proxyCustomElement(Cstr, compactMeta));\n};\nconst proxyCustomElement = (Cstr, compactMeta) => {\n const cmpMeta = {\n $flags$: compactMeta[0],\n $tagName$: compactMeta[1],\n };\n if (BUILD.member) {\n cmpMeta.$members$ = compactMeta[2];\n }\n if (BUILD.hostListener) {\n cmpMeta.$listeners$ = compactMeta[3];\n }\n if (BUILD.watchCallback) {\n cmpMeta.$watchers$ = Cstr.$watchers$;\n }\n if (BUILD.reflect) {\n cmpMeta.$attrsToReflect$ = [];\n }\n if (BUILD.shadowDom && !supportsShadow && cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) {\n cmpMeta.$flags$ |= 8 /* needsShadowDomShim */;\n }\n const originalConnectedCallback = Cstr.prototype.connectedCallback;\n const originalDisconnectedCallback = Cstr.prototype.disconnectedCallback;\n Object.assign(Cstr.prototype, {\n __registerHost() {\n registerHost(this, cmpMeta);\n },\n connectedCallback() {\n connectedCallback(this);\n if (BUILD.connectedCallback && originalConnectedCallback) {\n originalConnectedCallback.call(this);\n }\n },\n disconnectedCallback() {\n disconnectedCallback(this);\n if (BUILD.disconnectedCallback && originalDisconnectedCallback) {\n originalDisconnectedCallback.call(this);\n }\n },\n });\n Cstr.is = cmpMeta.$tagName$;\n return proxyComponent(Cstr, cmpMeta, 1 /* isElementConstructor */ | 2 /* proxyState */);\n};\nconst forceModeUpdate = (elm) => {\n if (BUILD.style && BUILD.mode && !BUILD.lazyLoad) {\n const mode = computeMode(elm);\n const hostRef = getHostRef(elm);\n if (hostRef.$modeName$ !== mode) {\n const cmpMeta = hostRef.$cmpMeta$;\n const oldScopeId = elm['s-sc'];\n const scopeId = getScopeId(cmpMeta, mode);\n const style = elm.constructor.style[mode];\n const flags = cmpMeta.$flags$;\n if (style) {\n if (!styles.has(scopeId)) {\n registerStyle(scopeId, style, !!(flags & 1 /* shadowDomEncapsulation */));\n }\n hostRef.$modeName$ = mode;\n elm.classList.remove(oldScopeId + '-h', oldScopeId + '-s');\n attachStyles(hostRef);\n forceUpdate(elm);\n }\n }\n }\n};\nconst attachShadow = (el) => {\n if (supportsShadow) {\n el.attachShadow({ mode: 'open' });\n }\n else {\n el.shadowRoot = el;\n }\n};\nconst hmrStart = (elm, cmpMeta, hmrVersionId) => {\n // ¯\\_(ツ)_/¯\n const hostRef = getHostRef(elm);\n // reset state flags to only have been connected\n hostRef.$flags$ = 1 /* hasConnected */;\n // TODO\n // detatch any event listeners that may have been added\n // because we're not passing an exact event name it'll\n // remove all of this element's event, which is good\n // create a callback for when this component finishes hmr\n elm['s-hmr-load'] = () => {\n // finished hmr for this element\n delete elm['s-hmr-load'];\n };\n // re-initialize the component\n initializeComponent(elm, hostRef, cmpMeta, hmrVersionId);\n};\nconst patchCloneNode = (HostElementPrototype) => {\n const orgCloneNode = HostElementPrototype.cloneNode;\n HostElementPrototype.cloneNode = function (deep) {\n const srcNode = this;\n const isShadowDom = BUILD.shadowDom ? srcNode.shadowRoot && supportsShadow : false;\n const clonedNode = orgCloneNode.call(srcNode, isShadowDom ? deep : false);\n if (BUILD.slot && !isShadowDom && deep) {\n let i = 0;\n let slotted, nonStencilNode;\n let stencilPrivates = ['s-id', 's-cr', 's-lr', 's-rc', 's-sc', 's-p', 's-cn', 's-sr', 's-sn', 's-hn', 's-ol', 's-nr', 's-si'];\n for (; i < srcNode.childNodes.length; i++) {\n slotted = srcNode.childNodes[i]['s-nr'];\n nonStencilNode = stencilPrivates.every((privateField) => !srcNode.childNodes[i][privateField]);\n if (slotted) {\n if (BUILD.appendChildSlotFix && clonedNode.__appendChild) {\n clonedNode.__appendChild(slotted.cloneNode(true));\n }\n else {\n clonedNode.appendChild(slotted.cloneNode(true));\n }\n }\n if (nonStencilNode) {\n clonedNode.appendChild(srcNode.childNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nconst patchSlotAppendChild = (HostElementPrototype) => {\n HostElementPrototype.__appendChild = HostElementPrototype.appendChild;\n HostElementPrototype.appendChild = function (newChild) {\n const slotName = (newChild['s-sn'] = getSlotName(newChild));\n const slotNode = getHostSlotNode(this.childNodes, slotName);\n if (slotNode) {\n const slotChildNodes = getHostSlotChildNodes(slotNode, slotName);\n const appendAfter = slotChildNodes[slotChildNodes.length - 1];\n return appendAfter.parentNode.insertBefore(newChild, appendAfter.nextSibling);\n }\n return this.__appendChild(newChild);\n };\n};\nconst patchChildSlotNodes = (elm, cmpMeta) => {\n class FakeNodeList extends Array {\n item(n) {\n return this[n];\n }\n }\n if (cmpMeta.$flags$ & 8 /* needsShadowDomShim */) {\n const childNodesFn = elm.__lookupGetter__('childNodes');\n Object.defineProperty(elm, 'children', {\n get() {\n return this.childNodes.map((n) => n.nodeType === 1);\n },\n });\n Object.defineProperty(elm, 'childElementCount', {\n get() {\n return elm.children.length;\n },\n });\n Object.defineProperty(elm, 'childNodes', {\n get() {\n const childNodes = childNodesFn.call(this);\n if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0 && getHostRef(this).$flags$ & 2 /* hasRendered */) {\n const result = new FakeNodeList();\n for (let i = 0; i < childNodes.length; i++) {\n const slot = childNodes[i]['s-nr'];\n if (slot) {\n result.push(slot);\n }\n }\n return result;\n }\n return FakeNodeList.from(childNodes);\n },\n });\n }\n};\nconst getSlotName = (node) => node['s-sn'] || (node.nodeType === 1 && node.getAttribute('slot')) || '';\nconst getHostSlotNode = (childNodes, slotName) => {\n let i = 0;\n let childNode;\n for (; i < childNodes.length; i++) {\n childNode = childNodes[i];\n if (childNode['s-sr'] && childNode['s-sn'] === slotName) {\n return childNode;\n }\n childNode = getHostSlotNode(childNode.childNodes, slotName);\n if (childNode) {\n return childNode;\n }\n }\n return null;\n};\nconst getHostSlotChildNodes = (n, slotName) => {\n const childNodes = [n];\n while ((n = n.nextSibling) && n['s-sn'] === slotName) {\n childNodes.push(n);\n }\n return childNodes;\n};\nconst bootstrapLazy = (lazyBundles, options = {}) => {\n if (BUILD.profile && performance.mark) {\n performance.mark('st:app:start');\n }\n installDevTools();\n const endBootstrap = createTime('bootstrapLazy');\n const cmpTags = [];\n const exclude = options.exclude || [];\n const customElements = win.customElements;\n const head = doc.head;\n const metaCharset = /*@__PURE__*/ head.querySelector('meta[charset]');\n const visibilityStyle = /*@__PURE__*/ doc.createElement('style');\n const deferredConnectedCallbacks = [];\n const styles = /*@__PURE__*/ doc.querySelectorAll(`[${HYDRATED_STYLE_ID}]`);\n let appLoadFallback;\n let isBootstrapping = true;\n let i = 0;\n Object.assign(plt, options);\n plt.$resourcesUrl$ = new URL(options.resourcesUrl || './', doc.baseURI).href;\n if (BUILD.asyncQueue) {\n if (options.syncQueue) {\n plt.$flags$ |= 4 /* queueSync */;\n }\n }\n if (BUILD.hydrateClientSide) {\n // If the app is already hydrated there is not point to disable the\n // async queue. This will improve the first input delay\n plt.$flags$ |= 2 /* appLoaded */;\n }\n if (BUILD.hydrateClientSide && BUILD.shadowDom) {\n for (; i < styles.length; i++) {\n registerStyle(styles[i].getAttribute(HYDRATED_STYLE_ID), convertScopedToShadow(styles[i].innerHTML), true);\n }\n }\n lazyBundles.map(lazyBundle => lazyBundle[1].map(compactMeta => {\n const cmpMeta = {\n $flags$: compactMeta[0],\n $tagName$: compactMeta[1],\n $members$: compactMeta[2],\n $listeners$: compactMeta[3],\n };\n if (BUILD.member) {\n cmpMeta.$members$ = compactMeta[2];\n }\n if (BUILD.hostListener) {\n cmpMeta.$listeners$ = compactMeta[3];\n }\n if (BUILD.reflect) {\n cmpMeta.$attrsToReflect$ = [];\n }\n if (BUILD.watchCallback) {\n cmpMeta.$watchers$ = {};\n }\n if (BUILD.shadowDom && !supportsShadow && cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) {\n cmpMeta.$flags$ |= 8 /* needsShadowDomShim */;\n }\n const tagName = BUILD.transformTagName && options.transformTagName ? options.transformTagName(cmpMeta.$tagName$) : cmpMeta.$tagName$;\n const HostElement = class extends HTMLElement {\n // StencilLazyHost\n constructor(self) {\n // @ts-ignore\n super(self);\n self = this;\n registerHost(self, cmpMeta);\n if (BUILD.shadowDom && cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) {\n // this component is using shadow dom\n // and this browser supports shadow dom\n // add the read-only property \"shadowRoot\" to the host element\n // adding the shadow root build conditionals to minimize runtime\n if (supportsShadow) {\n if (BUILD.shadowDelegatesFocus) {\n self.attachShadow({\n mode: 'open',\n delegatesFocus: !!(cmpMeta.$flags$ & 16 /* shadowDelegatesFocus */),\n });\n }\n else {\n self.attachShadow({ mode: 'open' });\n }\n }\n else if (!BUILD.hydrateServerSide && !('shadowRoot' in self)) {\n self.shadowRoot = self;\n }\n }\n if (BUILD.slotChildNodesFix) {\n patchChildSlotNodes(self, cmpMeta);\n }\n }\n connectedCallback() {\n if (appLoadFallback) {\n clearTimeout(appLoadFallback);\n appLoadFallback = null;\n }\n if (isBootstrapping) {\n // connectedCallback will be processed once all components have been registered\n deferredConnectedCallbacks.push(this);\n }\n else {\n plt.jmp(() => connectedCallback(this));\n }\n }\n disconnectedCallback() {\n plt.jmp(() => disconnectedCallback(this));\n }\n componentOnReady() {\n return getHostRef(this).$onReadyPromise$;\n }\n };\n if (BUILD.cloneNodeFix) {\n patchCloneNode(HostElement.prototype);\n }\n if (BUILD.appendChildSlotFix) {\n patchSlotAppendChild(HostElement.prototype);\n }\n if (BUILD.hotModuleReplacement) {\n HostElement.prototype['s-hmr'] = function (hmrVersionId) {\n hmrStart(this, cmpMeta, hmrVersionId);\n };\n }\n cmpMeta.$lazyBundleId$ = lazyBundle[0];\n if (!exclude.includes(tagName) && !customElements.get(tagName)) {\n cmpTags.push(tagName);\n customElements.define(tagName, proxyComponent(HostElement, cmpMeta, 1 /* isElementConstructor */));\n }\n }));\n if (BUILD.hydratedClass || BUILD.hydratedAttribute) {\n visibilityStyle.innerHTML = cmpTags + HYDRATED_CSS;\n visibilityStyle.setAttribute('data-styles', '');\n head.insertBefore(visibilityStyle, metaCharset ? metaCharset.nextSibling : head.firstChild);\n }\n // Process deferred connectedCallbacks now all components have been registered\n isBootstrapping = false;\n if (deferredConnectedCallbacks.length) {\n deferredConnectedCallbacks.map(host => host.connectedCallback());\n }\n else {\n if (BUILD.profile) {\n plt.jmp(() => (appLoadFallback = setTimeout(appDidLoad, 30, 'timeout')));\n }\n else {\n plt.jmp(() => (appLoadFallback = setTimeout(appDidLoad, 30)));\n }\n }\n // Fallback appLoad event\n endBootstrap();\n};\nconst getAssetPath = (path) => {\n const assetUrl = new URL(path, plt.$resourcesUrl$);\n return assetUrl.origin !== win.location.origin ? assetUrl.href : assetUrl.pathname;\n};\nconst setAssetPath = (path) => (plt.$resourcesUrl$ = path);\nconst getConnect = (_ref, tagName) => {\n const componentOnReady = () => {\n let elm = doc.querySelector(tagName);\n if (!elm) {\n elm = doc.createElement(tagName);\n doc.body.appendChild(elm);\n }\n return typeof elm.componentOnReady === 'function' ? elm.componentOnReady() : Promise.resolve(elm);\n };\n const create = (...args) => {\n return componentOnReady().then(el => el.create(...args));\n };\n return {\n create,\n componentOnReady,\n };\n};\nconst getContext = (_elm, context) => {\n if (context in Context) {\n return Context[context];\n }\n else if (context === 'window') {\n return win;\n }\n else if (context === 'document') {\n return doc;\n }\n else if (context === 'isServer' || context === 'isPrerender') {\n return BUILD.hydrateServerSide ? true : false;\n }\n else if (context === 'isClient') {\n return BUILD.hydrateServerSide ? false : true;\n }\n else if (context === 'resourcesUrl' || context === 'publicPath') {\n return getAssetPath('.');\n }\n else if (context === 'queue') {\n return {\n write: writeTask,\n read: readTask,\n tick: {\n then(cb) {\n return nextTick(cb);\n },\n },\n };\n }\n return undefined;\n};\nconst insertVdomAnnotations = (doc, staticComponents) => {\n if (doc != null) {\n const docData = {\n hostIds: 0,\n rootLevelIds: 0,\n staticComponents: new Set(staticComponents),\n };\n const orgLocationNodes = [];\n parseVNodeAnnotations(doc, doc.body, docData, orgLocationNodes);\n orgLocationNodes.forEach(orgLocationNode => {\n if (orgLocationNode != null) {\n const nodeRef = orgLocationNode['s-nr'];\n let hostId = nodeRef['s-host-id'];\n let nodeId = nodeRef['s-node-id'];\n let childId = `${hostId}.${nodeId}`;\n if (hostId == null) {\n hostId = 0;\n docData.rootLevelIds++;\n nodeId = docData.rootLevelIds;\n childId = `${hostId}.${nodeId}`;\n if (nodeRef.nodeType === 1 /* ElementNode */) {\n nodeRef.setAttribute(HYDRATE_CHILD_ID, childId);\n }\n else if (nodeRef.nodeType === 3 /* TextNode */) {\n if (hostId === 0) {\n const textContent = nodeRef.nodeValue.trim();\n if (textContent === '') {\n // useless whitespace node at the document root\n orgLocationNode.remove();\n return;\n }\n }\n const commentBeforeTextNode = doc.createComment(childId);\n commentBeforeTextNode.nodeValue = `${TEXT_NODE_ID}.${childId}`;\n nodeRef.parentNode.insertBefore(commentBeforeTextNode, nodeRef);\n }\n }\n let orgLocationNodeId = `${ORG_LOCATION_ID}.${childId}`;\n const orgLocationParentNode = orgLocationNode.parentElement;\n if (orgLocationParentNode) {\n if (orgLocationParentNode['s-en'] === '') {\n // ending with a \".\" means that the parent element\n // of this node's original location is a SHADOW dom element\n // and this node is apart of the root level light dom\n orgLocationNodeId += `.`;\n }\n else if (orgLocationParentNode['s-en'] === 'c') {\n // ending with a \".c\" means that the parent element\n // of this node's original location is a SCOPED element\n // and this node is apart of the root level light dom\n orgLocationNodeId += `.c`;\n }\n }\n orgLocationNode.nodeValue = orgLocationNodeId;\n }\n });\n }\n};\nconst parseVNodeAnnotations = (doc, node, docData, orgLocationNodes) => {\n if (node == null) {\n return;\n }\n if (node['s-nr'] != null) {\n orgLocationNodes.push(node);\n }\n if (node.nodeType === 1 /* ElementNode */) {\n node.childNodes.forEach(childNode => {\n const hostRef = getHostRef(childNode);\n if (hostRef != null && !docData.staticComponents.has(childNode.nodeName.toLowerCase())) {\n const cmpData = {\n nodeIds: 0,\n };\n insertVNodeAnnotations(doc, childNode, hostRef.$vnode$, docData, cmpData);\n }\n parseVNodeAnnotations(doc, childNode, docData, orgLocationNodes);\n });\n }\n};\nconst insertVNodeAnnotations = (doc, hostElm, vnode, docData, cmpData) => {\n if (vnode != null) {\n const hostId = ++docData.hostIds;\n hostElm.setAttribute(HYDRATE_ID, hostId);\n if (hostElm['s-cr'] != null) {\n hostElm['s-cr'].nodeValue = `${CONTENT_REF_ID}.${hostId}`;\n }\n if (vnode.$children$ != null) {\n const depth = 0;\n vnode.$children$.forEach((vnodeChild, index) => {\n insertChildVNodeAnnotations(doc, vnodeChild, cmpData, hostId, depth, index);\n });\n }\n if (hostElm && vnode && vnode.$elm$ && !hostElm.hasAttribute('c-id')) {\n const parent = hostElm.parentElement;\n if (parent && parent.childNodes) {\n const parentChildNodes = Array.from(parent.childNodes);\n const comment = parentChildNodes.find(node => node.nodeType === 8 /* CommentNode */ && node['s-sr']);\n if (comment) {\n const index = parentChildNodes.indexOf(hostElm) - 1;\n vnode.$elm$.setAttribute(HYDRATE_CHILD_ID, `${comment['s-host-id']}.${comment['s-node-id']}.0.${index}`);\n }\n }\n }\n }\n};\nconst insertChildVNodeAnnotations = (doc, vnodeChild, cmpData, hostId, depth, index) => {\n const childElm = vnodeChild.$elm$;\n if (childElm == null) {\n return;\n }\n const nodeId = cmpData.nodeIds++;\n const childId = `${hostId}.${nodeId}.${depth}.${index}`;\n childElm['s-host-id'] = hostId;\n childElm['s-node-id'] = nodeId;\n if (childElm.nodeType === 1 /* ElementNode */) {\n childElm.setAttribute(HYDRATE_CHILD_ID, childId);\n }\n else if (childElm.nodeType === 3 /* TextNode */) {\n const parentNode = childElm.parentNode;\n const nodeName = parentNode.nodeName;\n if (nodeName !== 'STYLE' && nodeName !== 'SCRIPT') {\n const textNodeId = `${TEXT_NODE_ID}.${childId}`;\n const commentBeforeTextNode = doc.createComment(textNodeId);\n parentNode.insertBefore(commentBeforeTextNode, childElm);\n }\n }\n else if (childElm.nodeType === 8 /* CommentNode */) {\n if (childElm['s-sr']) {\n const slotName = childElm['s-sn'] || '';\n const slotNodeId = `${SLOT_NODE_ID}.${childId}.${slotName}`;\n childElm.nodeValue = slotNodeId;\n }\n }\n if (vnodeChild.$children$ != null) {\n const childDepth = depth + 1;\n vnodeChild.$children$.forEach((vnode, index) => {\n insertChildVNodeAnnotations(doc, vnode, cmpData, hostId, childDepth, index);\n });\n }\n};\nconst setPlatformOptions = (opts) => Object.assign(plt, opts);\nconst Fragment = (_, children) => children;\nconst hostRefs = new WeakMap();\nconst getHostRef = (ref) => hostRefs.get(ref);\nconst registerInstance = (lazyInstance, hostRef) => hostRefs.set((hostRef.$lazyInstance$ = lazyInstance), hostRef);\nconst registerHost = (elm, cmpMeta) => {\n const hostRef = {\n $flags$: 0,\n $hostElement$: elm,\n $cmpMeta$: cmpMeta,\n $instanceValues$: new Map(),\n };\n if (BUILD.isDev) {\n hostRef.$renderCount$ = 0;\n }\n if (BUILD.method && BUILD.lazyLoad) {\n hostRef.$onInstancePromise$ = new Promise(r => (hostRef.$onInstanceResolve$ = r));\n }\n if (BUILD.asyncLoading) {\n hostRef.$onReadyPromise$ = new Promise(r => (hostRef.$onReadyResolve$ = r));\n elm['s-p'] = [];\n elm['s-rc'] = [];\n }\n addHostEventListeners(elm, hostRef, cmpMeta.$listeners$, false);\n return hostRefs.set(elm, hostRef);\n};\nconst isMemberInElement = (elm, memberName) => memberName in elm;\nconst consoleError = (e, el) => (customError || console.error)(e, el);\nconst STENCIL_DEV_MODE = BUILD.isTesting\n ? ['STENCIL:'] // E2E testing\n : ['%cstencil', 'color: white;background:#4c47ff;font-weight: bold; font-size:10px; padding:2px 6px; border-radius: 5px'];\nconst consoleDevError = (...m) => console.error(...STENCIL_DEV_MODE, ...m);\nconst consoleDevWarn = (...m) => console.warn(...STENCIL_DEV_MODE, ...m);\nconst consoleDevInfo = (...m) => console.info(...STENCIL_DEV_MODE, ...m);\nconst setErrorHandler = (handler) => customError = handler;\nconst cmpModules = /*@__PURE__*/ new Map();\nconst loadModule = (cmpMeta, hostRef, hmrVersionId) => {\n // loadModuleImport\n const exportName = cmpMeta.$tagName$.replace(/-/g, '_');\n const bundleId = cmpMeta.$lazyBundleId$;\n if (BUILD.isDev && typeof bundleId !== 'string') {\n consoleDevError(`Trying to lazily load component <${cmpMeta.$tagName$}> with style mode \"${hostRef.$modeName$}\", but it does not exist.`);\n return undefined;\n }\n const module = !BUILD.hotModuleReplacement ? cmpModules.get(bundleId) : false;\n if (module) {\n return module[exportName];\n }\n return import(\n /* webpackInclude: /\\.entry\\.js$/ */\n /* webpackExclude: /\\.system\\.entry\\.js$/ */\n /* webpackMode: \"lazy\" */\n `./${bundleId}.entry.js${BUILD.hotModuleReplacement && hmrVersionId ? '?s-hmr=' + hmrVersionId : ''}`).then(importedModule => {\n if (!BUILD.hotModuleReplacement) {\n cmpModules.set(bundleId, importedModule);\n }\n return importedModule[exportName];\n }, consoleError);\n};\nconst styles = new Map();\nconst modeResolutionChain = [];\nconst queueDomReads = [];\nconst queueDomWrites = [];\nconst queueDomWritesLow = [];\nconst queueTask = (queue, write) => (cb) => {\n queue.push(cb);\n if (!queuePending) {\n queuePending = true;\n if (write && plt.$flags$ & 4 /* queueSync */) {\n nextTick(flush);\n }\n else {\n plt.raf(flush);\n }\n }\n};\nconst consume = (queue) => {\n for (let i = 0; i < queue.length; i++) {\n try {\n queue[i](performance.now());\n }\n catch (e) {\n consoleError(e);\n }\n }\n queue.length = 0;\n};\nconst consumeTimeout = (queue, timeout) => {\n let i = 0;\n let ts = 0;\n while (i < queue.length && (ts = performance.now()) < timeout) {\n try {\n queue[i++](ts);\n }\n catch (e) {\n consoleError(e);\n }\n }\n if (i === queue.length) {\n queue.length = 0;\n }\n else if (i !== 0) {\n queue.splice(0, i);\n }\n};\nconst flush = () => {\n if (BUILD.asyncQueue) {\n queueCongestion++;\n }\n // always force a bunch of medium callbacks to run, but still have\n // a throttle on how many can run in a certain time\n // DOM READS!!!\n consume(queueDomReads);\n // DOM WRITES!!!\n if (BUILD.asyncQueue) {\n const timeout = (plt.$flags$ & 6 /* queueMask */) === 2 /* appLoaded */ ? performance.now() + 14 * Math.ceil(queueCongestion * (1.0 / 10.0)) : Infinity;\n consumeTimeout(queueDomWrites, timeout);\n consumeTimeout(queueDomWritesLow, timeout);\n if (queueDomWrites.length > 0) {\n queueDomWritesLow.push(...queueDomWrites);\n queueDomWrites.length = 0;\n }\n if ((queuePending = queueDomReads.length + queueDomWrites.length + queueDomWritesLow.length > 0)) {\n // still more to do yet, but we've run out of time\n // let's let this thing cool off and try again in the next tick\n plt.raf(flush);\n }\n else {\n queueCongestion = 0;\n }\n }\n else {\n consume(queueDomWrites);\n if ((queuePending = queueDomReads.length > 0)) {\n // still more to do yet, but we've run out of time\n // let's let this thing cool off and try again in the next tick\n plt.raf(flush);\n }\n }\n};\nconst nextTick = /*@__PURE__*/ (cb) => promiseResolve().then(cb);\nconst readTask = /*@__PURE__*/ queueTask(queueDomReads, false);\nconst writeTask = /*@__PURE__*/ queueTask(queueDomWrites, true);\nconst Build = {\n isDev: BUILD.isDev ? true : false,\n isBrowser: true,\n isServer: false,\n isTesting: BUILD.isTesting ? true : false,\n};\nexport { BUILD, Env, NAMESPACE } from '@stencil/core/internal/app-data';\nexport { Build, CSS, Context, Fragment, H, H as HTMLElement, Host, STENCIL_DEV_MODE, addHostEventListeners, attachShadow, bootstrapLazy, cmpModules, connectedCallback, consoleDevError, consoleDevInfo, consoleDevWarn, consoleError, createEvent, defineCustomElement, disconnectedCallback, doc, forceModeUpdate, forceUpdate, getAssetPath, getConnect, getContext, getElement, getHostRef, getMode, getRenderingRef, getValue, h, insertVdomAnnotations, isMemberInElement, loadModule, modeResolutionChain, nextTick, parsePropertyValue, plt, postUpdateComponent, promiseResolve, proxyComponent, proxyCustomElement, readTask, registerHost, registerInstance, renderVdom, setAssetPath, setErrorHandler, setMode, setPlatformOptions, setValue, styles, supportsConstructibleStylesheets, supportsListenerOptions, supportsShadow, win, writeTask };\n","import { getElement, getRenderingRef, writeTask, h, attachShadow, Host, createEvent, Fragment, proxyCustomElement } from '@stencil/core/internal/client';\nexport { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';\n\n/**\n * Listen to an event on the given DOM node. Returns a callback to remove the event listener.\n */\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction fireEventAndRetry(el, event, onFail, interval = 300, maxRetries = 10) {\n let timeout;\n let attempt = 0;\n let found = false;\n function retry() {\n if (found)\n return;\n timeout = setTimeout(() => {\n if (attempt === maxRetries) {\n onFail === null || onFail === void 0 ? void 0 : onFail();\n return;\n }\n el.dispatchEvent(event);\n attempt += 1;\n retry();\n }, interval);\n }\n retry();\n return () => {\n window.clearTimeout(timeout);\n found = true;\n };\n}\nconst isColliding = (a, b, translateAx = 0, translateAy = 0, translateBx = 0, translateBy = 0) => {\n const aRect = a.getBoundingClientRect();\n const bRect = b.getBoundingClientRect();\n return (aRect.left + translateAx < bRect.right + translateBx &&\n aRect.right + translateAx > bRect.left + translateBx &&\n aRect.top + translateAy < bRect.bottom + translateBy &&\n aRect.bottom + translateAy > bRect.top + translateBy);\n};\n\n/**\n * No-operation (noop).\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst noop = (..._) => {\n // ...\n};\n/**\n * Checks if `value` is `null`.\n *\n * @param value - The value to check.\n */\nconst isNull = (value) => value === null;\n/**\n * Checks if `value` is `undefined`.\n *\n * @param value - The value to check.\n */\nconst isUndefined = (value) => typeof value === 'undefined';\n/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @param value - The value to check.\n */\nconst isNil = (value) => isNull(value) || isUndefined(value);\n/**\n * Returns the constructor of the given `value`.\n *\n * @param value - The value to return the constructor of.\n */\nconst getConstructor = (value) => \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n!isNil(value) ? value.constructor : undefined;\n/**\n * Checks if `value` is classified as a `Object` object.\n *\n * @param value - The value to check.\n */\nconst isObject = (value) => getConstructor(value) === Object;\n/**\n * Checks if `value` is classified as a `Number` object.\n *\n * @param value - The value to check.\n */\nconst isNumber = (value) => getConstructor(value) === Number && !Number.isNaN(value);\n/**\n * Checks if `value` is classified as a `String` object.\n *\n * @param value - The value to check.\n */\nconst isString = (value) => getConstructor(value) === String;\n/**\n * Checks if `value` is classified as a `Boolean` object.\n *\n * @param value - The value to check.\n */\nconst isBoolean = (value) => getConstructor(value) === Boolean;\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @param value - The value to check.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isFunction = (value) => getConstructor(value) === Function;\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @param value - The value to check.\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * Checks if `value` is an instanceof the given `constructor`.\n *\n * @param value - The value to check.\n * @param constructor - The constructor to check against.\n */\nconst isInstanceOf = (value, constructor) => Boolean(value && constructor && value instanceof constructor);\n\n/**\n * Creates an empty Promise and defers resolving/rejecting it.\n */\nconst deferredPromise = () => {\n let resolve = noop;\n let reject = noop;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n};\n\nfunction wrapStencilHook(component, lifecycle, hook) {\n const prevHook = component[lifecycle];\n component[lifecycle] = function () {\n hook();\n return prevHook ? prevHook.call(component) : undefined;\n };\n}\nfunction createStencilHook(component, onConnect, onDisconnect) {\n let hasLoaded = false;\n if (!isUndefined(onConnect)) {\n wrapStencilHook(component, 'componentWillLoad', () => {\n onConnect();\n hasLoaded = true;\n });\n wrapStencilHook(component, 'connectedCallback', () => {\n if (hasLoaded)\n onConnect();\n });\n }\n if (!isUndefined(onDisconnect)) {\n wrapStencilHook(component, 'disconnectedCallback', () => {\n onDisconnect();\n });\n }\n}\n\nconst FIND_PLAYER_EVENT = 'vmFindPlayer';\nfunction withFindPlayer(player) {\n const el = getElement(player);\n let off;\n createStencilHook(player, () => {\n off = listen(el, FIND_PLAYER_EVENT, (event) => {\n event.stopPropagation();\n event.detail(el);\n });\n }, () => {\n off === null || off === void 0 ? void 0 : off();\n });\n}\n/**\n * Finds the closest ancestor player element by firing the `vmFindPlayer` event, and waiting\n * for the player to catch it. This function retries finding the player (`maxRetries`) until it\n * gives up and fails.\n *\n * @param ref - A HTMLElement that is within the player's subtree.\n * @param interval - The length of the timeout before trying again in milliseconds.\n * @param maxRetries - The number of times to retry firing the event.\n */\nconst findPlayer = (ref, interval = 300, maxRetries = 10) => {\n const el = (isInstanceOf(ref, HTMLElement)\n ? ref\n : getElement(ref));\n const search = deferredPromise();\n // eslint-disable-next-line prefer-const\n let stopFiring;\n const event = new CustomEvent(FIND_PLAYER_EVENT, {\n bubbles: true,\n composed: true,\n detail: player => {\n search.resolve(player);\n stopFiring();\n },\n });\n stopFiring = fireEventAndRetry(el, event, () => {\n search.reject(`Could not find player for ${el.nodeName}`);\n }, interval, maxRetries);\n return search.promise;\n};\n\nvar MediaType;\n(function (MediaType) {\n MediaType[\"Audio\"] = \"audio\";\n MediaType[\"Video\"] = \"video\";\n})(MediaType || (MediaType = {}));\n\nconst STATE_CHANGE_EVENT = 'vmStateChange';\n/**\n * Creates a dispatcher on the given `ref`, to send updates to the closest ancestor player via\n * the custom `vmStateChange` event.\n *\n * @param ref An element to dispatch the state change events from.\n */\nconst createDispatcher = (ref) => (prop, value) => {\n const el = isInstanceOf(ref, HTMLElement) ? ref : getElement(ref);\n const event = new CustomEvent(STATE_CHANGE_EVENT, {\n bubbles: true,\n composed: true,\n detail: { by: el, prop, value },\n });\n el.dispatchEvent(event);\n};\n\nconst en = {\n play: 'Play',\n pause: 'Pause',\n playback: 'Playback',\n scrubber: 'Scrubber',\n scrubberLabel: '{currentTime} of {duration}',\n played: 'Played',\n duration: 'Duration',\n buffered: 'Buffered',\n close: 'Close',\n currentTime: 'Current time',\n live: 'LIVE',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n audio: 'Audio',\n default: 'Default',\n captions: 'Captions',\n subtitlesOrCc: 'Subtitles/CC',\n enableCaptions: 'Enable subtitles/captions',\n disableCaptions: 'Disable subtitles/captions',\n auto: 'Auto',\n fullscreen: 'Fullscreen',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n settings: 'Settings',\n seekForward: 'Seek forward',\n seekBackward: 'Seek backward',\n seekTotal: 'Seek total',\n normal: 'Normal',\n none: 'None',\n playbackRate: 'Playback Rate',\n playbackQuality: 'Playback Quality',\n loop: 'Loop',\n disabled: 'Disabled',\n off: 'Off',\n enabled: 'Enabled',\n pip: 'Picture-in-Picture',\n enterPiP: 'Miniplayer',\n exitPiP: 'Expand',\n};\n\nconst initialState = {\n theme: undefined,\n paused: true,\n playing: false,\n duration: -1,\n currentProvider: undefined,\n mediaTitle: undefined,\n currentSrc: undefined,\n currentPoster: undefined,\n textTracks: [],\n currentTextTrack: -1,\n audioTracks: [],\n currentAudioTrack: -1,\n isTextTrackVisible: true,\n shouldRenderNativeTextTracks: true,\n icons: 'vime',\n currentTime: 0,\n autoplay: false,\n ready: false,\n playbackReady: false,\n loop: false,\n muted: false,\n buffered: 0,\n playbackRate: 1,\n playbackRates: [1],\n playbackQuality: undefined,\n playbackQualities: [],\n seeking: false,\n debug: false,\n playbackStarted: false,\n playbackEnded: false,\n buffering: false,\n controls: false,\n isControlsActive: false,\n volume: 50,\n isFullscreenActive: false,\n aspectRatio: '16:9',\n viewType: undefined,\n isAudioView: false,\n isVideoView: false,\n mediaType: undefined,\n isAudio: false,\n isVideo: false,\n isMobile: false,\n isTouch: false,\n isSettingsActive: false,\n isLive: false,\n isPiPActive: false,\n autopause: true,\n playsinline: false,\n language: 'en',\n languages: ['en'],\n translations: { en },\n i18n: en,\n};\nconst writableProps = new Set([\n 'autoplay',\n 'autopause',\n 'aspectRatio',\n 'controls',\n 'theme',\n 'debug',\n 'paused',\n 'currentTime',\n 'language',\n 'loop',\n 'translations',\n 'playbackQuality',\n 'muted',\n 'playbackRate',\n 'playsinline',\n 'volume',\n 'isSettingsActive',\n 'isControlsActive',\n 'shouldRenderNativeTextTracks',\n]);\nconst isWritableProp = (prop) => writableProps.has(prop);\n/**\n * Player properties that should be reset when the media is changed.\n */\nconst resetableProps = new Set([\n 'paused',\n 'currentTime',\n 'duration',\n 'buffered',\n 'seeking',\n 'playing',\n 'buffering',\n 'playbackReady',\n 'textTracks',\n 'currentTextTrack',\n 'audioTracks',\n 'currentAudioTrack',\n 'mediaTitle',\n 'currentSrc',\n 'currentPoster',\n 'playbackRate',\n 'playbackRates',\n 'playbackStarted',\n 'playbackEnded',\n 'playbackQuality',\n 'playbackQualities',\n 'mediaType',\n]);\nconst shouldPropResetOnMediaChange = (prop) => resetableProps.has(prop);\n\nvar ViewType;\n(function (ViewType) {\n ViewType[\"Audio\"] = \"audio\";\n ViewType[\"Video\"] = \"video\";\n})(ViewType || (ViewType = {}));\n\nclass Disposal {\n constructor(dispose = []) {\n this.dispose = dispose;\n }\n add(callback) {\n this.dispose.push(callback);\n }\n empty() {\n this.dispose.forEach(fn => fn());\n this.dispose = [];\n }\n}\n\nvar __awaiter$y = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst PLAYER_KEY = Symbol('vmPlayerKey');\nconst COMPONENT_NAME_KEY = Symbol('vmNameKey');\nconst REGISTRY_KEY = Symbol('vmRegistryKey');\nconst REGISTRATION_KEY = Symbol('vmRegistrationKey');\nconst REGISTER_COMPONENT_EVENT = 'vmComponentRegister';\nconst COMPONENT_REGISTERED_EVENT = 'vmComponentRegistered';\nconst COMPONENT_DEREGISTERED_EVENT = 'vmComponentDeregistered';\nconst getRegistrant = (ref) => isInstanceOf(ref, HTMLElement)\n ? ref\n : getElement(ref);\n/**\n * Handles registering/deregistering the given `component` in the player registry. All registries\n * are bound per player subtree.\n *\n * @param ref - A Stencil component instance or HTMLElement.\n */\nfunction withComponentRegistry(ref, name) {\n const registryId = Symbol('vmRegistryId');\n const registrant = getRegistrant(ref);\n registrant[COMPONENT_NAME_KEY] = name !== null && name !== void 0 ? name : registrant.nodeName.toLowerCase();\n registrant[REGISTRATION_KEY] = registryId;\n const buildEvent = (eventName) => new CustomEvent(eventName, {\n bubbles: true,\n composed: true,\n detail: registrant,\n });\n const registerEvent = buildEvent(REGISTER_COMPONENT_EVENT);\n createStencilHook(ref, () => {\n registrant.dispatchEvent(registerEvent);\n });\n}\nfunction withComponentRegistrar(player) {\n const el = getElement(player);\n const registry = new Map();\n const disposal = new Disposal();\n // TODO properly type this later.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n el[REGISTRY_KEY] = registry;\n function onDeregister(registrant) {\n delete registrant[PLAYER_KEY];\n delete registrant[REGISTRY_KEY];\n registry.delete(registrant[REGISTRATION_KEY]);\n el.dispatchEvent(new CustomEvent(COMPONENT_DEREGISTERED_EVENT, { detail: registrant }));\n }\n function onRegister(e) {\n const ref = e.detail;\n const registrant = getRegistrant(ref);\n registrant[PLAYER_KEY] = el;\n registrant[REGISTRY_KEY] = registry;\n registry.set(registrant[REGISTRATION_KEY], registrant);\n el.dispatchEvent(new CustomEvent(COMPONENT_REGISTERED_EVENT, { detail: registrant }));\n createStencilHook(ref, undefined, () => onDeregister(registrant));\n }\n createStencilHook(player, () => {\n disposal.add(listen(el, REGISTER_COMPONENT_EVENT, onRegister));\n }, () => {\n registry.clear();\n disposal.empty();\n delete player[REGISTRY_KEY];\n });\n}\n/**\n * Checks whether any component with the given `name` exists in the registry. All registries\n * are bound per player subtree.\n *\n * @param ref - A Stencil component instance or HTMLElement.\n * @param name - The name of the component to search for.\n */\nfunction isComponentRegistered(ref, name) {\n var _a;\n const registrant = getRegistrant(ref);\n const registry = registrant[REGISTRY_KEY];\n return Array.from((_a = registry === null || registry === void 0 ? void 0 : registry.values()) !== null && _a !== void 0 ? _a : []).some(r => r[COMPONENT_NAME_KEY] === name);\n}\n/**\n * Returns the player for the given `ref`. This will only work after the component has been\n * registered, prefer using `findPlayer`.\n *\n * @param ref - A Stencil component instance or HTMLElement.\n */\nfunction getPlayerFromRegistry(ref) {\n const registrant = getRegistrant(ref);\n return registrant[PLAYER_KEY];\n}\n/**\n * Returns a collection of components from the registry for the given `ref`. All registries\n * are bound per player subtree.\n *\n * @param ref - A Stencil component instance or HTMLElement.\n * @param name - The name of the components to search for in the registry.\n */\nfunction getComponentFromRegistry(ref, name) {\n var _a, _b;\n const registrant = getRegistrant(ref);\n return Array.from((_b = (_a = registrant[REGISTRY_KEY]) === null || _a === void 0 ? void 0 : _a.values()) !== null && _b !== void 0 ? _b : []).filter(r => r[COMPONENT_NAME_KEY] === name);\n}\n/**\n * Watches the current registry on the given `ref` for changes. All registries are bound per\n * player subtree.\n *\n * @param ref - A Stencil component instance or HTMLElement.\n * @param name - The name of the component to watch for.\n * @param onChange - A callback that is called when a component is registered/deregistered.\n */\nfunction watchComponentRegistry(ref, name, onChange) {\n var _a;\n return __awaiter$y(this, void 0, void 0, function* () {\n const player = yield findPlayer(ref);\n const disposal = new Disposal();\n const registry = getRegistrant(ref)[REGISTRY_KEY];\n function listener(e) {\n if (e.detail[COMPONENT_NAME_KEY] === name)\n onChange === null || onChange === void 0 ? void 0 : onChange(getComponentFromRegistry(player, name));\n }\n // Hydrate.\n Array.from((_a = registry === null || registry === void 0 ? void 0 : registry.values()) !== null && _a !== void 0 ? _a : []).forEach(reg => listener(new CustomEvent('', { detail: reg })));\n if (!isUndefined(player)) {\n disposal.add(listen(player, COMPONENT_REGISTERED_EVENT, listener));\n disposal.add(listen(player, COMPONENT_DEREGISTERED_EVENT, listener));\n }\n createStencilHook(ref, () => {\n // no-op\n }, () => {\n disposal.empty();\n });\n return () => {\n disposal.empty();\n };\n });\n}\n\nvar createDeferredPromise = function () {\n var resolve;\n var promise = new Promise(function (res) { resolve = res; });\n return { promise: promise, resolve: resolve };\n};\n\nvar openWormhole = function (Component, props, isBlocking) {\n if (isBlocking === void 0) { isBlocking = true; }\n var isConstructor = (Component.constructor.name === 'Function');\n var Proto = isConstructor ? Component.prototype : Component;\n var componentWillLoad = Proto.componentWillLoad;\n Proto.componentWillLoad = function () {\n var _this = this;\n var el = getElement(this);\n var onOpen = createDeferredPromise();\n var event = new CustomEvent('openWormhole', {\n bubbles: true,\n composed: true,\n detail: {\n consumer: this,\n fields: props,\n updater: function (prop, value) {\n var target = (prop in el) ? el : _this;\n target[prop] = value;\n },\n onOpen: onOpen,\n },\n });\n el.dispatchEvent(event);\n var willLoad = function () {\n if (componentWillLoad) {\n return componentWillLoad.call(_this);\n }\n };\n return isBlocking ? onOpen.promise.then(function () { return willLoad(); }) : (willLoad());\n };\n};\n\nvar multiverse = new Map();\nvar updateConsumer = function (_a, state) {\n var fields = _a.fields, updater = _a.updater;\n fields.forEach(function (field) { updater(field, state[field]); });\n};\nvar Universe = {\n create: function (creator, initialState) {\n var el = getElement(creator);\n var wormholes = new Map();\n var universe = { wormholes: wormholes, state: initialState };\n multiverse.set(creator, universe);\n var connectedCallback = creator.connectedCallback;\n creator.connectedCallback = function () {\n multiverse.set(creator, universe);\n if (connectedCallback) {\n connectedCallback.call(creator);\n }\n };\n var disconnectedCallback = creator.disconnectedCallback;\n creator.disconnectedCallback = function () {\n multiverse.delete(creator);\n if (disconnectedCallback) {\n disconnectedCallback.call(creator);\n }\n };\n el.addEventListener('openWormhole', function (event) {\n event.stopPropagation();\n var _a = event.detail, consumer = _a.consumer, onOpen = _a.onOpen;\n if (wormholes.has(consumer))\n return;\n if (typeof consumer !== 'symbol') {\n var connectedCallback_1 = consumer.connectedCallback, disconnectedCallback_1 = consumer.disconnectedCallback;\n consumer.connectedCallback = function () {\n wormholes.set(consumer, event.detail);\n if (connectedCallback_1) {\n connectedCallback_1.call(consumer);\n }\n };\n consumer.disconnectedCallback = function () {\n wormholes.delete(consumer);\n if (disconnectedCallback_1) {\n disconnectedCallback_1.call(consumer);\n }\n };\n }\n wormholes.set(consumer, event.detail);\n updateConsumer(event.detail, universe.state);\n onOpen === null || onOpen === void 0 ? void 0 : onOpen.resolve(function () { wormholes.delete(consumer); });\n });\n el.addEventListener('closeWormhole', function (event) {\n var consumer = event.detail;\n wormholes.delete(consumer);\n });\n },\n Provider: function (_a, children) {\n var state = _a.state;\n var creator = getRenderingRef();\n if (multiverse.has(creator)) {\n var universe = multiverse.get(creator);\n universe.state = state;\n universe.wormholes.forEach(function (opening) { updateConsumer(opening, state); });\n }\n return children;\n }\n};\n\nconst LOAD_START_EVENT = 'vmLoadStart';\n// Events that toggle state and the prop is named `is{PropName}...`.\nconst isToggleStateEvent = new Set([\n 'isFullscreenActive',\n 'isControlsActive',\n 'isTextTrackVisible',\n 'isPiPActive',\n 'isLive',\n 'isTouch',\n 'isAudio',\n 'isVideo',\n 'isAudioView',\n 'isVideoView',\n]);\n// Events that are emitted without the 'Change' postfix.\nconst hasShortenedEventName = new Set([\n 'ready',\n 'playbackStarted',\n 'playbackEnded',\n 'playbackReady',\n]);\nconst getEventName = (prop) => {\n // Example: isFullscreenActive -> vmFullscreenChange\n if (isToggleStateEvent.has(prop)) {\n return `vm${prop.replace('is', '').replace('Active', '')}Change`;\n }\n // Example: playbackStarted -> vmPlaybackStarted\n if (hasShortenedEventName.has(prop)) {\n return `vm${prop.charAt(0).toUpperCase()}${prop.slice(1)}`;\n }\n // Example: currentTime -> vmCurrentTimeChange\n return `vm${prop.charAt(0).toUpperCase()}${prop.slice(1)}Change`;\n};\nfunction firePlayerEvent(el, prop, newValue, oldValue) {\n const events = [];\n events.push(new CustomEvent(getEventName(prop), { detail: newValue }));\n if (prop === 'paused' && !newValue)\n events.push(new CustomEvent('vmPlay'));\n if (prop === 'seeking' && oldValue && !newValue)\n events.push(new CustomEvent('vmSeeked'));\n events.forEach(event => {\n el.dispatchEvent(event);\n });\n}\n\nvar __awaiter$x = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n/**\n * Binds props between an instance of a given component class and it's closest ancestor player.\n *\n * @param component A Stencil component instance.\n * @param props A set of props to watch and update on the given component instance.\n */\nconst withPlayerContext = (component, props) => openWormhole(component, props);\n/**\n * Finds the closest ancestor player to the given `ref` and watches the given props for changes. On\n * a prop change the given `updater` fn is called.\n *\n * @param ref A element within any player's subtree.\n * @param props A set of props to watch and call the `updater` fn with.\n * @param updater This function is called with the prop/value of any watched properties.\n */\nconst usePlayerContext = (ref, props, updater, playerRef) => __awaiter$x(void 0, void 0, void 0, function* () {\n const player = playerRef !== null && playerRef !== void 0 ? playerRef : (yield findPlayer(ref));\n const listeners = !isUndefined(player)\n ? props.map(prop => {\n const event = getEventName(prop);\n return listen(player, event, () => {\n updater(prop, player[prop]);\n });\n })\n : [];\n return () => {\n listeners.forEach(off => off());\n };\n});\n\nvar Provider;\n(function (Provider) {\n Provider[\"Audio\"] = \"audio\";\n Provider[\"Video\"] = \"video\";\n Provider[\"HLS\"] = \"hls\";\n Provider[\"Dash\"] = \"dash\";\n Provider[\"YouTube\"] = \"youtube\";\n Provider[\"Vimeo\"] = \"vimeo\";\n Provider[\"Dailymotion\"] = \"dailymotion\";\n})(Provider || (Provider = {}));\n\nconst audioRegex = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i;\nconst videoRegex = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i;\nconst hlsRegex = /\\.(m3u8)($|\\?)/i;\nconst hlsTypeRegex = /^application\\/(x-mpegURL|vnd\\.apple\\.mpegURL)$/i;\nconst dashRegex = /\\.(mpd)($|\\?)/i;\n\nconst PROVIDER_CHANGE_EVENT = 'vmProviderChange';\n/**\n * Creates a dispatcher on the given `ref`, to send updates to the closest ancestor player via\n * the custom `vmProviderChange` event.\n *\n * @param ref A component reference to dispatch the state change events from.\n */\nconst createProviderDispatcher = (ref) => (prop, value) => {\n const el = isInstanceOf(ref, HTMLElement) ? ref : getElement(ref);\n const event = new CustomEvent(PROVIDER_CHANGE_EVENT, {\n bubbles: true,\n composed: true,\n detail: { by: el, prop, value },\n });\n el.dispatchEvent(event);\n};\n\nconst providerWritableProps = new Set([\n 'ready',\n 'playing',\n 'playbackReady',\n 'playbackStarted',\n 'playbackEnded',\n 'seeking',\n 'buffered',\n 'buffering',\n 'duration',\n 'viewType',\n 'mediaTitle',\n 'mediaType',\n 'currentSrc',\n 'currentPoster',\n 'playbackRates',\n 'playbackQualities',\n 'textTracks',\n 'currentTextTrack',\n 'isTextTrackVisible',\n 'audioTracks',\n 'currentAudioTrack',\n 'isPiPActive',\n 'isFullscreenActive',\n]);\nconst isProviderWritableProp = (prop) => isWritableProp(prop) || providerWritableProps.has(prop);\n\nvar __awaiter$w = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst PROVIDER_CACHE_KEY = Symbol('vmProviderCache');\nconst PROVIDER_CONNECT_EVENT = 'vmMediaProviderConnect';\nconst PROVIDER_DISCONNECT_EVENT = 'vmMediaProviderDisconnect';\nfunction buildProviderConnectEvent(name, host) {\n return new CustomEvent(name, {\n bubbles: true,\n composed: true,\n detail: host,\n });\n}\nfunction withProviderHost(connector) {\n const el = getElement(connector);\n const disposal = new Disposal();\n const cache = new Map();\n connector[PROVIDER_CACHE_KEY] = cache;\n function initCache() {\n Object.keys(connector).forEach(prop => {\n cache.set(prop, connector[prop]);\n });\n }\n function onDisconnect() {\n writeTask(() => __awaiter$w(this, void 0, void 0, function* () {\n var _a;\n connector.ready = false;\n connector.provider = undefined;\n cache.clear();\n (_a = connector.onProviderDisconnect) === null || _a === void 0 ? void 0 : _a.call(connector);\n el.dispatchEvent(buildProviderConnectEvent(PROVIDER_DISCONNECT_EVENT));\n }));\n }\n function onConnect(event) {\n event.stopImmediatePropagation();\n initCache();\n const hostRef = event.detail;\n const host = getElement(event.detail);\n if (connector.provider === host)\n return;\n const name = host === null || host === void 0 ? void 0 : host.nodeName.toLowerCase().replace('vm-', '');\n writeTask(() => __awaiter$w(this, void 0, void 0, function* () {\n connector.provider = host;\n connector.currentProvider = Object.values(Provider).find(provider => name === provider);\n createStencilHook(hostRef, undefined, () => onDisconnect());\n }));\n }\n function onChange(event) {\n var _a;\n event.stopImmediatePropagation();\n const { by, prop, value } = event.detail;\n if (!isProviderWritableProp(prop)) {\n (_a = connector.logger) === null || _a === void 0 ? void 0 : _a.warn(`${by.nodeName} tried to change \\`${prop}\\` but it is readonly.`);\n return;\n }\n writeTask(() => {\n cache.set(prop, value);\n connector[prop] = value;\n });\n }\n createStencilHook(connector, () => {\n disposal.add(listen(el, PROVIDER_CONNECT_EVENT, onConnect));\n disposal.add(listen(el, PROVIDER_CHANGE_EVENT, onChange));\n }, () => {\n disposal.empty();\n cache.clear();\n });\n}\nfunction withProviderConnect(ref) {\n const connectEvent = buildProviderConnectEvent(PROVIDER_CONNECT_EVENT, ref);\n createStencilHook(ref, () => {\n getElement(ref).dispatchEvent(connectEvent);\n });\n}\n\nvar __awaiter$v = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst Audio = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n /**\n * @internal Whether an external SDK will attach itself to the media player and control it.\n */\n this.willAttach = false;\n /** @inheritdoc */\n this.preload = 'metadata';\n withComponentRegistry(this);\n if (!this.willAttach)\n withProviderConnect(this);\n }\n /** @internal */\n getAdapter() {\n var _a, _b;\n return __awaiter$v(this, void 0, void 0, function* () {\n const adapter = (_b = (yield ((_a = this.fileProvider) === null || _a === void 0 ? void 0 : _a.getAdapter()))) !== null && _b !== void 0 ? _b : {};\n adapter.canPlay = (type) => __awaiter$v(this, void 0, void 0, function* () { return isString(type) && audioRegex.test(type); });\n return adapter;\n });\n }\n render() {\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n h(\"vm-file\", { noConnect: true, willAttach: this.willAttach, crossOrigin: this.crossOrigin, preload: this.preload, disableRemotePlayback: this.disableRemotePlayback, mediaTitle: this.mediaTitle, viewType: ViewType.Audio, ref: (el) => {\n this.fileProvider = el;\n } }, h(\"slot\", null)));\n }\n};\n\nconst captionControlCss = \":host([hidden]){display:none}\";\n\nvar __awaiter$u = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst CaptionControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.canToggleCaptionVisibility = false;\n /**\n * The URL to an SVG element or fragment to load.\n */\n this.showIcon = 'captions-on';\n /**\n * The URL to an SVG element or fragment to load.\n */\n this.hideIcon = 'captions-off';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n /** @inheritdoc */\n this.keys = 'c';\n /** @internal */\n this.i18n = {};\n /** @internal */\n this.playbackReady = false;\n /** @internal */\n this.textTracks = [];\n /** @internal */\n this.isTextTrackVisible = false;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'i18n',\n 'textTracks',\n 'isTextTrackVisible',\n 'playbackReady',\n ]);\n }\n onTextTracksChange() {\n var _a;\n return __awaiter$u(this, void 0, void 0, function* () {\n const player = getPlayerFromRegistry(this);\n this.canToggleCaptionVisibility =\n this.textTracks.length > 0 &&\n ((_a = (yield (player === null || player === void 0 ? void 0 : player.canSetTextTrackVisibility()))) !== null && _a !== void 0 ? _a : false);\n });\n }\n componentDidLoad() {\n this.onTextTracksChange();\n }\n onClick() {\n var _a;\n const player = getPlayerFromRegistry(this);\n (_a = player === null || player === void 0 ? void 0 : player.setTextTrackVisibility) === null || _a === void 0 ? void 0 : _a.call(player, !this.isTextTrackVisible);\n }\n render() {\n const tooltip = this.isTextTrackVisible\n ? this.i18n.disableCaptions\n : this.i18n.enableCaptions;\n const tooltipWithHint = !isUndefined(this.keys)\n ? `${tooltip} (${this.keys})`\n : tooltip;\n return (h(Host, { hidden: !this.canToggleCaptionVisibility }, h(\"vm-control\", { label: this.i18n.captions, keys: this.keys, hidden: !this.canToggleCaptionVisibility, pressed: this.isTextTrackVisible, onClick: this.onClick.bind(this) }, h(\"vm-icon\", { name: this.isTextTrackVisible ? this.showIcon : this.hideIcon, library: this.icons }), h(\"vm-tooltip\", { hidden: this.hideTooltip, position: this.tooltipPosition, direction: this.tooltipDirection }, tooltipWithHint))));\n }\n static get watchers() { return {\n \"textTracks\": [\"onTextTracksChange\"],\n \"playbackReady\": [\"onTextTracksChange\"]\n }; }\n static get style() { return captionControlCss; }\n};\n\n/* eslint-disable func-names */\nconst watch$1 = new Set();\nconst controls = new Set();\n// watchedEl -> (controlsEl -> controlsHeight) saved on collision. Basically keeps track of\n// every collision with all controls for each watched element.\nconst collisions = new Map();\nfunction update() {\n writeTask(() => {\n controls.forEach(controlsEl => {\n const controlsHeight = parseFloat(window.getComputedStyle(controlsEl).height);\n watch$1.forEach(watchedEl => {\n const watchedElCollisions = collisions.get(watchedEl);\n const hasCollided = isColliding(watchedEl, controlsEl);\n const willCollide = isColliding(watchedEl, controlsEl, 0, controlsHeight) ||\n isColliding(watchedEl, controlsEl, 0, -controlsHeight);\n watchedElCollisions.set(controlsEl, hasCollided || willCollide ? controlsHeight : 0);\n });\n });\n // Update after assessing all collisions so there are no glitchy movements.\n watch$1.forEach(watchedEl => {\n const watchedElCollisions = collisions.get(watchedEl);\n watchedEl.style.setProperty('--vm-controls-height', `${Math.max(0, Math.max(...watchedElCollisions.values()))}px`);\n });\n });\n}\nfunction registerControlsForCollisionDetection(component) {\n const el = getElement(component);\n function getInnerEl() {\n return el.shadowRoot.querySelector('.controls');\n }\n createStencilHook(component, () => {\n const innerEl = getInnerEl();\n if (!isNull(innerEl)) {\n controls.add(innerEl);\n update();\n }\n }, () => {\n controls.delete(getInnerEl());\n update();\n });\n wrapStencilHook(component, 'componentDidLoad', () => {\n controls.add(getInnerEl());\n update();\n });\n wrapStencilHook(component, 'componentDidRender', update);\n}\nfunction withControlsCollisionDetection(component) {\n const el = getElement(component);\n createStencilHook(component, () => {\n watch$1.add(el);\n collisions.set(el, new Map());\n update();\n }, () => {\n watch$1.delete(el);\n collisions.delete(el);\n });\n}\n\nconst captionsCss = \":host{position:absolute;left:0;bottom:0;width:100%;pointer-events:none;z-index:var(--vm-captions-z-index)}.captions{width:100%;text-align:center;color:var(--vm-captions-text-color);font-size:var(--vm-captions-font-size);padding:$control-spacing;display:none;pointer-events:none;transition:transform 0.4s ease-in-out, opacity 0.3s ease-in-out}.captions.enabled{display:inline-block}.captions.hidden{display:none !important}.captions.inactive{opacity:0;visibility:hidden}.captions.fontMd{font-size:var(--vm-captions-font-size-medium)}.captions.fontLg{font-size:var(--vm-captions-font-size-large)}.captions.fontXl{font-size:var(--vm-captions-font-size-xlarge)}.cue{display:inline-block;background:var(--vm-captions-cue-bg-color);border-radius:var(--vm-captions-cue-border-radius);box-decoration-break:clone;line-height:185%;padding:var(--vm-captions-cue-padding);white-space:pre-wrap;pointer-events:none}.cue>div{display:inline}.cue:empty{display:none}\";\n\nvar __awaiter$t = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst Captions = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.sizeDisposal = new Disposal();\n this.textDisposal = new Disposal();\n this.isEnabled = false;\n this.fontSize = 'sm';\n /**\n * Whether the captions should be visible or not.\n */\n this.hidden = false;\n /** @internal */\n this.isControlsActive = false;\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.playbackStarted = false;\n /** @internal */\n this.textTracks = [];\n /** @internal */\n this.currentTextTrack = -1;\n /** @internal */\n this.isTextTrackVisible = true;\n withComponentRegistry(this);\n withControlsCollisionDetection(this);\n withPlayerContext(this, [\n 'isVideoView',\n 'playbackStarted',\n 'isControlsActive',\n 'textTracks',\n 'currentTextTrack',\n 'isTextTrackVisible',\n ]);\n }\n onEnabledChange() {\n this.isEnabled = this.playbackStarted && this.isVideoView;\n }\n onTextTracksChange() {\n const textTrack = this.textTracks[this.currentTextTrack];\n const renderCues = () => {\n var _a;\n const activeCues = Array.from((_a = textTrack.activeCues) !== null && _a !== void 0 ? _a : []);\n this.renderCurrentCue(activeCues[0]);\n };\n this.textDisposal.empty();\n if (!isNil(textTrack)) {\n renderCues();\n this.textDisposal.add(listen(textTrack, 'cuechange', renderCues));\n }\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n this.dispatch('shouldRenderNativeTextTracks', false);\n this.onTextTracksChange();\n this.onPlayerResize();\n }\n disconnectedCallback() {\n this.textDisposal.empty();\n this.sizeDisposal.empty();\n this.dispatch('shouldRenderNativeTextTracks', true);\n }\n onPlayerResize() {\n return __awaiter$t(this, void 0, void 0, function* () {\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n const container = (yield player.getContainer());\n const resizeObs = new ResizeObserver(entries => {\n const entry = entries[0];\n const { width } = entry.contentRect;\n if (width >= 1360) {\n this.fontSize = 'xl';\n }\n else if (width >= 1024) {\n this.fontSize = 'lg';\n }\n else if (width >= 768) {\n this.fontSize = 'md';\n }\n else {\n this.fontSize = 'sm';\n }\n });\n resizeObs.observe(container);\n });\n }\n renderCurrentCue(cue) {\n if (isNil(cue)) {\n this.cue = '';\n return;\n }\n const div = document.createElement('div');\n div.append(cue.getCueAsHTML());\n this.cue = div.innerHTML.trim();\n }\n render() {\n return (h(\"div\", { style: {\n transform: `translateY(calc(${this.isControlsActive ? 'var(--vm-controls-height)' : '24px'} * -1))`,\n }, class: {\n captions: true,\n enabled: this.isEnabled,\n hidden: this.hidden,\n fontMd: this.fontSize === 'md',\n fontLg: this.fontSize === 'lg',\n fontXl: this.fontSize === 'xl',\n inactive: !this.isTextTrackVisible,\n } }, h(\"span\", { class: \"cue\" }, this.cue)));\n }\n static get watchers() { return {\n \"isVideoView\": [\"onEnabledChange\"],\n \"playbackStarted\": [\"onEnabledChange\"],\n \"textTracks\": [\"onTextTracksChange\"],\n \"currentTextTrack\": [\"onTextTracksChange\"]\n }; }\n static get style() { return captionsCss; }\n};\n\nconst clickToPlayCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-click-to-play-z-index)}.clickToPlay{display:none;width:100%;height:100%;pointer-events:none}.clickToPlay.enabled{display:inline-block;pointer-events:auto}\";\n\nvar __awaiter$s = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst ClickToPlay = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * By default this is disabled on mobile to not interfere with playback, set this to `true` to\n * enable it.\n */\n this.useOnMobile = false;\n /** @internal */\n this.paused = true;\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.isMobile = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['paused', 'isVideoView', 'isMobile']);\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n }\n /** @internal */\n forceClick() {\n return __awaiter$s(this, void 0, void 0, function* () {\n this.onClick();\n });\n }\n onClick() {\n this.dispatch('paused', !this.paused);\n }\n render() {\n return (h(\"div\", { class: {\n clickToPlay: true,\n enabled: this.isVideoView && (!this.isMobile || this.useOnMobile),\n }, onClick: this.onClick.bind(this) }));\n }\n static get style() { return clickToPlayCss; }\n};\n\nconst controlCss = \"button{display:flex;align-items:center;flex-direction:row;border:var(--vm-control-border);cursor:pointer;flex-shrink:0;font-size:var(--vm-control-icon-size);color:var(--vm-control-color);background:var(--vm-control-bg, transparent);border-radius:var(--vm-control-border-radius);padding:var(--vm-control-padding);position:relative;pointer-events:auto;transition:all 0.3s ease;transform:scale(var(--vm-control-scale, 1));touch-action:manipulation;box-sizing:border-box}button.hidden{display:none}button:focus{outline:0}button.tapHighlight{background:var(--vm-control-tap-highlight)}button.notTouch:focus,button.notTouch:hover,button.notTouch[aria-expanded='true']{background:var(--vm-control-focus-bg);color:var(--vm-control-focus-color);transform:scale(calc(var(--vm-control-scale, 1) + 0.06))}\";\n\nvar __awaiter$r = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst Control = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmInteractionChange = createEvent(this, \"vmInteractionChange\", 7);\n this.vmFocus = createEvent(this, \"vmFocus\", 7);\n this.vmBlur = createEvent(this, \"vmBlur\", 7);\n this.keyboardDisposal = new Disposal();\n this.showTapHighlight = false;\n /**\n * Whether the control should be displayed or not.\n */\n this.hidden = false;\n /** @internal */\n this.isTouch = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['isTouch']);\n }\n onKeysChange() {\n return __awaiter$r(this, void 0, void 0, function* () {\n this.keyboardDisposal.empty();\n if (isUndefined(this.keys))\n return;\n const player = yield findPlayer(this);\n const codes = this.keys.split('/');\n if (isUndefined(player))\n return;\n this.keyboardDisposal.add(listen(player, 'keydown', (event) => {\n if (codes.includes(event.key)) {\n this.button.click();\n }\n }));\n });\n }\n connectedCallback() {\n this.findTooltip();\n this.onKeysChange();\n }\n componentWillLoad() {\n this.findTooltip();\n }\n disconnectedCallback() {\n this.keyboardDisposal.empty();\n }\n /**\n * Focuses the control.\n */\n focusControl() {\n var _a;\n return __awaiter$r(this, void 0, void 0, function* () {\n (_a = this.button) === null || _a === void 0 ? void 0 : _a.focus();\n });\n }\n /**\n * Removes focus from the control.\n */\n blurControl() {\n var _a;\n return __awaiter$r(this, void 0, void 0, function* () {\n (_a = this.button) === null || _a === void 0 ? void 0 : _a.blur();\n });\n }\n onTouchStart() {\n this.showTapHighlight = true;\n }\n onTouchEnd() {\n setTimeout(() => {\n this.showTapHighlight = false;\n }, 100);\n }\n findTooltip() {\n const tooltip = this.host.querySelector('vm-tooltip');\n if (!isNull(tooltip))\n this.describedBy = tooltip.id;\n return tooltip;\n }\n onShowTooltip() {\n const tooltip = this.findTooltip();\n if (!isNull(tooltip))\n tooltip.active = true;\n this.vmInteractionChange.emit(true);\n }\n onHideTooltip() {\n const tooltip = this.findTooltip();\n if (!isNull(tooltip))\n tooltip.active = false;\n this.button.blur();\n this.vmInteractionChange.emit(false);\n }\n onFocus() {\n this.vmFocus.emit();\n this.onShowTooltip();\n }\n onBlur() {\n this.vmBlur.emit();\n this.onHideTooltip();\n }\n onMouseEnter() {\n this.onShowTooltip();\n }\n onMouseLeave() {\n this.onHideTooltip();\n }\n render() {\n const isMenuExpanded = this.expanded ? 'true' : 'false';\n const isPressed = this.pressed ? 'true' : 'false';\n return (h(\"button\", { class: {\n hidden: this.hidden,\n notTouch: !this.isTouch,\n tapHighlight: this.showTapHighlight,\n }, id: this.identifier, type: \"button\", \"aria-label\": this.label, \"aria-haspopup\": !isUndefined(this.menu) ? 'true' : undefined, \"aria-controls\": this.menu, \"aria-expanded\": !isUndefined(this.menu) ? isMenuExpanded : undefined, \"aria-pressed\": !isUndefined(this.pressed) ? isPressed : undefined, \"aria-hidden\": this.hidden ? 'true' : 'false', \"aria-describedby\": this.describedBy, onTouchStart: this.onTouchStart.bind(this), onTouchEnd: this.onTouchEnd.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this), onMouseEnter: this.onMouseEnter.bind(this), onMouseLeave: this.onMouseLeave.bind(this), ref: (el) => {\n this.button = el;\n } }, h(\"slot\", null)));\n }\n get host() { return this; }\n static get watchers() { return {\n \"keys\": [\"onKeysChange\"]\n }; }\n static get style() { return controlCss; }\n};\n\nconst controlGroupCss = \":host{width:100%}.controlGroup{position:relative;width:100%;display:flex;flex-wrap:wrap;flex-direction:inherit;align-items:inherit;justify-content:inherit;box-sizing:border-box}.controlGroup.spaceTop{margin-top:var(--vm-control-group-spacing)}.controlGroup.spaceBottom{margin-bottom:var(--vm-control-group-spacing)}::slotted(*){margin-left:var(--vm-controls-spacing)}::slotted(*:first-child){margin-left:0}\";\n\nconst ControlNewLine = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * Determines where to add spacing/margin. The amount of spacing is determined by the CSS variable\n * `--control-group-spacing`.\n */\n this.space = 'none';\n withComponentRegistry(this);\n }\n render() {\n return (h(\"div\", { class: {\n controlGroup: true,\n spaceTop: this.space !== 'none' && this.space !== 'bottom',\n spaceBottom: this.space !== 'none' && this.space !== 'top',\n } }, h(\"slot\", null)));\n }\n get host() { return this; }\n static get style() { return controlGroupCss; }\n};\n\nconst controlSpacerCss = \":host{flex:1}\";\n\nconst ControlSpacer = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n withComponentRegistry(this);\n }\n static get style() { return controlSpacerCss; }\n};\n\nconst debounce = (func, wait = 1000, immediate = false) => {\n let timeout;\n return function executedFunction(...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const context = this;\n const later = function delayedFunctionCall() {\n timeout = undefined;\n if (!immediate)\n func.apply(context, args);\n };\n const callNow = immediate && isUndefined(timeout);\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow)\n func.apply(context, args);\n };\n};\n\nconst controlsCss = \":host{position:relative;width:100%;z-index:var(--vm-controls-z-index)}:host([video]){position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.controls{display:flex;width:100%;position:absolute;flex-wrap:wrap;pointer-events:auto;box-sizing:border-box;background:var(--vm-controls-bg);padding:var(--vm-controls-padding);border-radius:var(--vm-controls-border-radius);opacity:0;visibility:hidden;transition:var(--vm-fade-transition)}.controls.audio{position:relative}.controls.hidden{display:none}.controls.active{opacity:1;visibility:visible}.controls.fullWidth{width:100%}.controls.fullHeight{height:100%}::slotted(*:not(vm-control-group)){margin-left:var(--vm-controls-spacing)}::slotted(*:not(vm-control-group):first-child){margin-left:0}\";\n\nvar __awaiter$q = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n/**\n * We want to keep the controls active state in-sync per player.\n */\nconst playerRef = {};\nconst hideControlsTimeout = {};\nconst Controls = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.disposal = new Disposal();\n this.isInteracting = false;\n /**\n * Whether the controls are visible or not.\n */\n this.hidden = false;\n /**\n * Whether the controls container should be 100% width. This has no effect if the view is of\n * type `audio`.\n */\n this.fullWidth = false;\n /**\n * Whether the controls container should be 100% height. This has no effect if the view is of\n * type `audio`.\n */\n this.fullHeight = false;\n /**\n * Sets the `flex-direction` property that manages the direction in which the controls are layed\n * out.\n */\n this.direction = 'row';\n /**\n * Sets the `align-items` flex property that aligns the individual controls on the cross-axis.\n */\n this.align = 'center';\n /**\n * Sets the `justify-content` flex property that aligns the individual controls on the main-axis.\n */\n this.justify = 'start';\n /**\n * Pins the controls to the defined position inside the video player. This has no effect when\n * the view is of type `audio`.\n */\n this.pin = 'bottomLeft';\n /**\n * The length in milliseconds that the controls are active for before fading out. Audio players\n * are not effected by this prop.\n */\n this.activeDuration = 2750;\n /**\n * Whether the controls should wait for playback to start before being shown. Audio players\n * are not effected by this prop.\n */\n this.waitForPlaybackStart = false;\n /**\n * Whether the controls should show/hide when paused. Audio players are not effected by this prop.\n */\n this.hideWhenPaused = false;\n /**\n * Whether the controls should hide when the mouse leaves the player. Audio players are not\n * effected by this prop.\n */\n this.hideOnMouseLeave = false;\n /** @internal */\n this.isAudioView = false;\n /** @internal */\n this.isSettingsActive = false;\n /** @internal */\n this.playbackReady = false;\n /** @internal */\n this.isControlsActive = false;\n /** @internal */\n this.paused = true;\n /** @internal */\n this.playbackStarted = false;\n withComponentRegistry(this);\n registerControlsForCollisionDetection(this);\n withPlayerContext(this, [\n 'playbackReady',\n 'isAudioView',\n 'isControlsActive',\n 'isSettingsActive',\n 'paused',\n 'playbackStarted',\n ]);\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n this.onControlsChange();\n this.setupPlayerListeners();\n }\n componentWillLoad() {\n this.onControlsChange();\n }\n disconnectedCallback() {\n this.disposal.empty();\n delete hideControlsTimeout[playerRef[this]];\n delete playerRef[this];\n }\n setupPlayerListeners() {\n return __awaiter$q(this, void 0, void 0, function* () {\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n const events = ['focus', 'keydown', 'click', 'touchstart', 'mouseleave'];\n events.forEach(event => {\n this.disposal.add(listen(player, event, this.onControlsChange.bind(this)));\n });\n this.disposal.add(listen(player, 'mousemove', debounce(this.onControlsChange, 50, true).bind(this)));\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n playerRef[this] = player;\n });\n }\n show() {\n this.dispatch('isControlsActive', true);\n }\n hide() {\n this.dispatch('isControlsActive', false);\n }\n hideWithDelay() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n clearTimeout(hideControlsTimeout[playerRef[this]]);\n hideControlsTimeout[playerRef[this]] = setTimeout(() => {\n this.hide();\n }, this.activeDuration);\n }\n onControlsChange(event) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n clearTimeout(hideControlsTimeout[playerRef[this]]);\n if (this.hidden || !this.playbackReady) {\n this.hide();\n return;\n }\n if (this.isAudioView) {\n this.show();\n return;\n }\n if (this.waitForPlaybackStart && !this.playbackStarted) {\n this.hide();\n return;\n }\n if (this.isInteracting || this.isSettingsActive) {\n this.show();\n return;\n }\n if (this.hideWhenPaused && this.paused) {\n this.hideWithDelay();\n return;\n }\n if (this.hideOnMouseLeave && !this.paused && (event === null || event === void 0 ? void 0 : event.type) === 'mouseleave') {\n this.hide();\n return;\n }\n if (!this.paused) {\n this.show();\n this.hideWithDelay();\n return;\n }\n this.show();\n }\n getPosition() {\n if (this.isAudioView)\n return {};\n if (this.pin === 'center') {\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n }\n // topLeft => { top: 0, left: 0 }\n const pos = this.pin.split(/(?=[L|R])/).map(s => s.toLowerCase());\n return { [pos[0]]: 0, [pos[1]]: 0 };\n }\n onStartInteraction() {\n this.isInteracting = true;\n }\n onEndInteraction() {\n this.isInteracting = false;\n }\n render() {\n return (h(Host, { video: !this.isAudioView }, h(\"div\", { style: Object.assign(Object.assign({}, this.getPosition()), { flexDirection: this.direction, alignItems: this.align === 'center' ? 'center' : `flex-${this.align}`, justifyContent: this.justify }), class: {\n controls: true,\n audio: this.isAudioView,\n hidden: this.hidden,\n active: this.playbackReady && this.isControlsActive,\n fullWidth: this.isAudioView || this.fullWidth,\n fullHeight: !this.isAudioView && this.fullHeight,\n }, onMouseEnter: this.onStartInteraction.bind(this), onMouseLeave: this.onEndInteraction.bind(this), onTouchStart: this.onStartInteraction.bind(this), onTouchEnd: this.onEndInteraction.bind(this) }, h(\"slot\", null))));\n }\n static get watchers() { return {\n \"paused\": [\"onControlsChange\"],\n \"hidden\": [\"onControlsChange\"],\n \"isAudioView\": [\"onControlsChange\"],\n \"isInteracting\": [\"onControlsChange\"],\n \"isSettingsActive\": [\"onControlsChange\"],\n \"hideWhenPaused\": [\"onControlsChange\"],\n \"hideOnMouseLeave\": [\"onControlsChange\"],\n \"playbackStarted\": [\"onControlsChange\"],\n \"waitForPlaybackStart\": [\"onControlsChange\"],\n \"playbackReady\": [\"onControlsChange\"]\n }; }\n static get style() { return controlsCss; }\n};\n\nconst currentTimeCss = \":host{display:flex;align-items:center;justify-content:center}\";\n\nconst CurrentTime = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.currentTime = 0;\n /** @internal */\n this.i18n = {};\n /**\n * Whether the time should always show the hours unit, even if the time is less than\n * 1 hour (eg: `20:35` -> `00:20:35`).\n */\n this.alwaysShowHours = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['currentTime', 'i18n']);\n }\n render() {\n return (h(\"vm-time\", { label: this.i18n.currentTime, seconds: this.currentTime, alwaysShowHours: this.alwaysShowHours }));\n }\n static get style() { return currentTimeCss; }\n};\n\nvar _a, _b;\nconst IS_CLIENT = typeof window !== 'undefined';\nconst UA = IS_CLIENT ? (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent.toLowerCase() : '';\nconst IS_IOS = /iphone|ipad|ipod|ios|CriOS|FxiOS/.test(UA);\nconst IS_ANDROID = /android/.test(UA);\nconst IS_MOBILE = IS_CLIENT && (IS_IOS || IS_ANDROID);\nconst IS_IPHONE = IS_CLIENT && /(iPhone|iPod)/gi.test((_b = window.navigator) === null || _b === void 0 ? void 0 : _b.platform);\n/firefox/.test(UA);\nconst IS_CHROME = IS_CLIENT && window.chrome;\nIS_CLIENT &&\n !IS_CHROME &&\n (window.safari || IS_IOS || /(apple|safari)/.test(UA));\nconst onMobileChange = (callback) => {\n if (!IS_CLIENT || isUndefined(window.ResizeObserver)) {\n callback(IS_MOBILE);\n return noop;\n }\n function onResize() {\n callback(window.innerWidth <= 480 || IS_MOBILE);\n }\n callback(window.innerWidth <= 480 || IS_MOBILE);\n return listen(window, 'resize', onResize);\n};\nconst onTouchInputChange = (callback) => {\n if (!IS_CLIENT)\n return noop;\n let lastTouchTime = 0;\n const offTouchListener = listen(document, 'touchstart', () => {\n lastTouchTime = new Date().getTime();\n callback(true);\n }, true);\n const offMouseListener = listen(document, 'mousemove', () => {\n // Filter emulated events coming from touch events\n if (new Date().getTime() - lastTouchTime < 500)\n return;\n callback(false);\n }, true);\n return () => {\n offTouchListener();\n offMouseListener();\n };\n};\n/**\n * Checks if the screen orientation can be changed.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation\n */\nconst canRotateScreen = () => IS_CLIENT && window.screen.orientation && !!window.screen.orientation.lock;\n/**\n * Checks if the native HTML5 video player can enter picture-in-picture (PIP) mode when using\n * the Chrome browser.\n *\n * @see https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n */\nconst canUsePiPInChrome = () => {\n if (!IS_CLIENT)\n return false;\n const video = document.createElement('video');\n return !!document.pictureInPictureEnabled && !video.disablePictureInPicture;\n};\n/**\n * Checks if the native HTML5 video player can enter picture-in-picture (PIP) mode when using\n * the desktop Safari browser, iOS Safari appears to \"support\" PiP through the check, however PiP\n * does not function.\n *\n * @see https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n */\nconst canUsePiPInSafari = () => {\n if (!IS_CLIENT)\n return false;\n const video = document.createElement('video');\n return (isFunction(video.webkitSupportsPresentationMode) &&\n isFunction(video.webkitSetPresentationMode) &&\n !IS_IPHONE);\n};\n// Checks if the native HTML5 video player can enter PIP.\nconst canUsePiP = () => canUsePiPInChrome() || canUsePiPInSafari();\n/**\n * To detect autoplay, we create a video element and call play on it, if it is `paused` after\n * a `play()` call, autoplay is supported. Although this unintuitive, it works across browsers\n * and is currently the lightest way to detect autoplay without using a data source.\n *\n * @see https://github.com/ampproject/amphtml/blob/9bc8756536956780e249d895f3e1001acdee0bc0/src/utils/video.js#L25\n */\nconst canAutoplay = (muted = true, playsinline = true) => {\n if (!IS_CLIENT)\n return Promise.resolve(false);\n const video = document.createElement('video');\n if (muted) {\n video.setAttribute('muted', '');\n video.muted = true;\n }\n if (playsinline) {\n video.setAttribute('playsinline', '');\n video.setAttribute('webkit-playsinline', '');\n }\n video.setAttribute('height', '0');\n video.setAttribute('width', '0');\n video.style.position = 'fixed';\n video.style.top = '0';\n video.style.width = '0';\n video.style.height = '0';\n video.style.opacity = '0';\n // Promise wrapped this way to catch both sync throws and async rejections.\n // More info: https://github.com/tc39/proposal-promise-try\n new Promise(resolve => resolve(video.play())).catch(noop);\n return Promise.resolve(!video.paused);\n};\n\n/**\n * Attempt to parse json into a POJO.\n */\nfunction tryParseJSON(json) {\n if (!isString(json))\n return undefined;\n try {\n return JSON.parse(json);\n }\n catch (e) {\n return undefined;\n }\n}\n/**\n * Check if the given input is json or a plain object.\n */\nconst isObjOrJSON = (input) => !isNil(input) &&\n (isObject(input) || (isString(input) && input.startsWith('{')));\n/**\n * If an object return otherwise try to parse it as json.\n */\nconst objOrParseJSON = (input) => isObject(input) ? input : tryParseJSON(input);\n/**\n * Load image avoiding xhr/fetch CORS issues. Server status can't be obtained this way\n * unfortunately, so this uses \"naturalWidth\" to determine if the image has been loaded. By\n * default it checks if it is at least 1px.\n */\nconst loadImage = (src, minWidth = 1) => new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete image.onload;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete image.onerror;\n image.naturalWidth >= minWidth ? resolve(image) : reject(image);\n };\n Object.assign(image, { onload: handler, onerror: handler, src });\n});\nconst loadScript = (src, onLoad, onError = noop) => {\n var _a;\n const script = document.createElement('script');\n script.src = src;\n script.onload = onLoad;\n script.onerror = onError;\n const firstScriptTag = document.getElementsByTagName('script')[0];\n (_a = firstScriptTag.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(script, firstScriptTag);\n};\n/**\n * Tries to parse json and return a object.\n */\nconst decodeJSON = (data) => {\n if (!isObjOrJSON(data))\n return undefined;\n return objOrParseJSON(data);\n};\n/**\n * Attempts to safely decode a URI component, on failure it returns the given fallback.\n */\nconst tryDecodeURIComponent = (component, fallback = '') => {\n if (!IS_CLIENT)\n return fallback;\n try {\n return window.decodeURIComponent(component);\n }\n catch (e) {\n return fallback;\n }\n};\n/**\n * Returns a simple key/value map and duplicate keys are merged into an array.\n *\n * @see https://github.com/ampproject/amphtml/blob/c7c46cec71bac92f5c5da31dcc6366c18577f566/src/url-parse-query-string.js#L31\n */\nconst QUERY_STRING_REGEX = /(?:^[#?]?|&)([^=&]+)(?:=([^&]*))?/g;\nconst parseQueryString = (qs) => {\n const params = Object.create(null);\n if (isUndefined(qs))\n return params;\n let match;\n // eslint-disable-next-line no-cond-assign\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n while ((match = QUERY_STRING_REGEX.exec(qs))) {\n const name = tryDecodeURIComponent(match[1], match[1]).replace('[]', '');\n const value = isString(match[2])\n ? tryDecodeURIComponent(match[2].replace(/\\+/g, ' '), match[2])\n : '';\n const currValue = params[name];\n if (currValue && !isArray(currValue))\n params[name] = [currValue];\n currValue ? params[name].push(value) : (params[name] = value);\n }\n return params;\n};\n/**\n * Serializes the given params into a query string.\n */\nconst serializeQueryString = (params) => {\n const qs = [];\n const appendQueryParam = (param, v) => {\n qs.push(`${encodeURIComponent(param)}=${encodeURIComponent(v)}`);\n };\n Object.keys(params).forEach(param => {\n const value = params[param];\n if (isNil(value))\n return;\n if (isArray(value)) {\n value.forEach((v) => appendQueryParam(param, v));\n }\n else {\n appendQueryParam(param, value);\n }\n });\n return qs.join('&');\n};\n/**\n * Notifies the browser to start establishing a connection with the given URL.\n */\nconst preconnect = (url, rel = 'preconnect', as) => {\n if (!IS_CLIENT)\n return false;\n const link = document.createElement('link');\n link.rel = rel;\n link.href = url;\n if (!isUndefined(as))\n link.as = as;\n link.crossOrigin = 'true';\n document.head.append(link);\n return true;\n};\n/**\n * Safely appends the given query string to the given URL.\n */\nconst appendQueryStringToURL = (url, qs) => {\n if (isUndefined(qs) || qs.length === 0)\n return url;\n const mainAndQuery = url.split('?', 2);\n return (mainAndQuery[0] +\n (!isUndefined(mainAndQuery[1]) ? `?${mainAndQuery[1]}&${qs}` : `?${qs}`));\n};\n/**\n * Serializes the given params into a query string and appends them to the given URL.\n */\nconst appendParamsToURL = (url, params) => appendQueryStringToURL(url, isObject(params)\n ? serializeQueryString(params)\n : params);\n/**\n * Tries to convert a query string into a object.\n */\nconst decodeQueryString = (qs) => {\n if (!isString(qs))\n return undefined;\n return parseQueryString(qs);\n};\nconst pendingSDKRequests = {};\n/**\n * Loads an SDK into the global window namespace.\n *\n * @see https://github.com/CookPete/react-player/blob/master/src/utils.js#L77\n */\nconst loadSDK = (url, sdkGlobalVar, sdkReadyVar, isLoaded = () => true, loadScriptFn = loadScript) => {\n const getGlobal = (key) => {\n if (!isUndefined(window[key]))\n return window[key];\n if (window.exports && window.exports[key])\n return window.exports[key];\n if (window.module && window.module.exports && window.module.exports[key]) {\n return window.module.exports[key];\n }\n return undefined;\n };\n const existingGlobal = getGlobal(sdkGlobalVar);\n if (existingGlobal && isLoaded(existingGlobal)) {\n return Promise.resolve(existingGlobal);\n }\n return new Promise((resolve, reject) => {\n if (!isUndefined(pendingSDKRequests[url])) {\n pendingSDKRequests[url].push({ resolve, reject });\n return;\n }\n pendingSDKRequests[url] = [{ resolve, reject }];\n const onLoaded = (sdk) => {\n pendingSDKRequests[url].forEach(request => request.resolve(sdk));\n };\n if (!isUndefined(sdkReadyVar)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const previousOnReady = window[sdkReadyVar];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window[sdkReadyVar] = function () {\n if (!isUndefined(previousOnReady))\n previousOnReady();\n onLoaded(getGlobal(sdkGlobalVar));\n };\n }\n loadScriptFn(url, () => {\n if (isUndefined(sdkReadyVar))\n onLoaded(getGlobal(sdkGlobalVar));\n }, e => {\n pendingSDKRequests[url].forEach(request => {\n request.reject(e);\n });\n delete pendingSDKRequests[url];\n });\n });\n};\n\nconst withProviderContext = (provider, additionalProps = []) => withPlayerContext(provider, [\n 'autoplay',\n 'controls',\n 'language',\n 'muted',\n 'logger',\n 'loop',\n 'aspectRatio',\n 'playsinline',\n ...additionalProps,\n]);\n\nconst dailymotionCss = \":host{z-index:var(--vm-media-z-index)}\";\n\nvar __awaiter$p = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst videoInfoCache$1 = new Map();\nconst Dailymotion = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.defaultInternalState = {};\n this.internalState = {\n currentTime: 0,\n volume: 0,\n muted: false,\n isAdsPlaying: false,\n playbackReady: false,\n };\n this.embedSrc = '';\n this.mediaTitle = '';\n /**\n * Whether to automatically play the next video in the queue.\n */\n this.shouldAutoplayQueue = false;\n /**\n * Whether to show the 'Up Next' queue.\n */\n this.showUpNextQueue = false;\n /**\n * Whether to show buttons for sharing the video.\n */\n this.showShareButtons = false;\n /**\n * Whether to display the Dailymotion logo.\n */\n this.showDailymotionLogo = false;\n /**\n * Whether to show video information (title and owner) on the start screen.\n */\n this.showVideoInfo = true;\n /** @internal */\n this.language = 'en';\n /** @internal */\n this.autoplay = false;\n /** @internal */\n this.controls = false;\n /** @internal */\n this.loop = false;\n /** @internal */\n this.muted = false;\n /** @internal */\n this.playsinline = false;\n withComponentRegistry(this);\n withProviderConnect(this);\n withProviderContext(this);\n }\n onVideoIdChange() {\n this.internalState = Object.assign({}, this.defaultInternalState);\n if (!this.videoId) {\n this.embedSrc = '';\n return;\n }\n this.embedSrc = `${this.getOrigin()}/embed/video/${this.videoId}?api=1`;\n this.fetchVideoInfo = this.getVideoInfo();\n this.pendingMediaTitleCall = deferredPromise();\n }\n onControlsChange() {\n if (this.internalState.playbackReady) {\n this.remoteControl(\"controls\" /* Controls */, this.controls);\n }\n }\n onCustomPosterChange() {\n this.dispatch('currentPoster', this.poster);\n }\n connectedCallback() {\n this.dispatch = createProviderDispatcher(this);\n this.dispatch('viewType', ViewType.Video);\n this.onVideoIdChange();\n this.internalState.muted = this.muted;\n this.defaultInternalState = Object.assign({}, this.internalState);\n }\n componentWillLoad() {\n this.initialMuted = this.muted;\n }\n getOrigin() {\n return 'https://www.dailymotion.com';\n }\n getPreconnections() {\n return [this.getOrigin(), 'https://static1.dmcdn.net'];\n }\n remoteControl(command, arg) {\n return this.embed.postMessage({\n command,\n parameters: arg ? [arg] : [],\n });\n }\n buildParams() {\n return {\n autoplay: this.autoplay,\n mute: this.initialMuted,\n controls: this.controls,\n 'queue-autoplay-next': this.shouldAutoplayQueue,\n 'queue-enable': this.showUpNextQueue,\n 'sharing-enable': this.showShareButtons,\n syndication: this.syndication,\n 'ui-highlight': this.color,\n 'ui-logo': this.showDailymotionLogo,\n 'ui-start-screen-info': this.showVideoInfo,\n };\n }\n getVideoInfo() {\n return __awaiter$p(this, void 0, void 0, function* () {\n if (videoInfoCache$1.has(this.videoId))\n return videoInfoCache$1.get(this.videoId);\n const apiEndpoint = 'https://api.dailymotion.com';\n return window\n .fetch(`${apiEndpoint}/video/${this.videoId}?fields=duration,thumbnail_1080_url`)\n .then(response => response.json())\n .then(data => {\n const poster = data.thumbnail_1080_url;\n const duration = parseFloat(data.duration);\n videoInfoCache$1.set(this.videoId, { poster, duration });\n return { poster, duration };\n });\n });\n }\n onEmbedSrcChange() {\n this.vmLoadStart.emit();\n this.dispatch('viewType', ViewType.Video);\n }\n onEmbedMessage(event) {\n var _a, _b;\n const msg = event.detail;\n switch (msg.event) {\n case \"playback_ready\" /* PlaybackReady */:\n this.onControlsChange();\n this.dispatch('currentSrc', this.embedSrc);\n this.dispatch('mediaType', MediaType.Video);\n Promise.all([\n this.fetchVideoInfo,\n (_a = this.pendingMediaTitleCall) === null || _a === void 0 ? void 0 : _a.promise,\n ]).then(([info, mediaTitle]) => {\n var _a, _b;\n this.dispatch('duration', (_a = info === null || info === void 0 ? void 0 : info.duration) !== null && _a !== void 0 ? _a : -1);\n this.dispatch('currentPoster', (_b = this.poster) !== null && _b !== void 0 ? _b : info === null || info === void 0 ? void 0 : info.poster);\n this.dispatch('mediaTitle', mediaTitle);\n this.dispatch('playbackReady', true);\n });\n break;\n case \"videochange\" /* VideoChange */:\n (_b = this.pendingMediaTitleCall) === null || _b === void 0 ? void 0 : _b.resolve(msg.title);\n break;\n case \"start\" /* Start */:\n this.dispatch('paused', false);\n this.dispatch('playbackStarted', true);\n this.dispatch('buffering', true);\n break;\n case \"video_start\" /* VideoStart */:\n // Commands don't go through until ads have finished, so we store them and then replay them\n // once the video starts.\n this.remoteControl(\"muted\" /* Muted */, this.internalState.muted);\n this.remoteControl(\"volume\" /* Volume */, this.internalState.volume);\n if (this.internalState.currentTime > 0) {\n this.remoteControl(\"seek\" /* Seek */, this.internalState.currentTime);\n }\n break;\n case \"play\" /* Play */:\n this.dispatch('paused', false);\n break;\n case \"pause\" /* Pause */:\n this.dispatch('paused', true);\n this.dispatch('playing', false);\n this.dispatch('buffering', false);\n break;\n case \"playing\" /* Playing */:\n this.dispatch('playing', true);\n this.dispatch('buffering', false);\n break;\n case \"video_end\" /* VideoEnd */:\n if (this.loop) {\n setTimeout(() => {\n this.remoteControl(\"play\" /* Play */);\n }, 300);\n }\n else {\n this.dispatch('playbackEnded', true);\n }\n break;\n case \"timeupdate\" /* TimeUpdate */:\n this.dispatch('currentTime', parseFloat(msg.time));\n break;\n case \"volumechange\" /* VolumeChange */:\n this.dispatch('muted', msg.muted === 'true');\n this.dispatch('volume', Math.floor(parseFloat(msg.volume) * 100));\n break;\n case \"seeking\" /* Seeking */:\n this.dispatch('currentTime', parseFloat(msg.time));\n this.dispatch('seeking', true);\n break;\n case \"seeked\" /* Seeked */:\n this.dispatch('currentTime', parseFloat(msg.time));\n this.dispatch('seeking', false);\n break;\n case \"waiting\" /* Waiting */:\n this.dispatch('buffering', true);\n break;\n case \"progress\" /* Progress */:\n this.dispatch('buffered', parseFloat(msg.time));\n break;\n case \"durationchange\" /* DurationChange */:\n this.dispatch('duration', parseFloat(msg.duration));\n break;\n case \"qualitiesavailable\" /* QualitiesAvailable */:\n this.dispatch('playbackQualities', msg.qualities.map((q) => `${q}p`));\n break;\n case \"qualitychange\" /* QualityChange */:\n this.dispatch('playbackQuality', `${msg.quality}p`);\n break;\n case \"fullscreenchange\" /* FullscreenChange */:\n this.dispatch('isFullscreenActive', msg.fullscreen === 'true');\n break;\n case \"error\" /* Error */:\n this.vmError.emit(msg.error);\n break;\n }\n }\n /** @internal */\n getAdapter() {\n return __awaiter$p(this, void 0, void 0, function* () {\n const canPlayRegex = /(?:dai\\.ly|dailymotion|dailymotion\\.com)\\/(?:video\\/|embed\\/|)(?:video\\/|)((?:\\w)+)/;\n return {\n getInternalPlayer: () => __awaiter$p(this, void 0, void 0, function* () { return this.embed; }),\n play: () => __awaiter$p(this, void 0, void 0, function* () {\n this.remoteControl(\"play\" /* Play */);\n }),\n pause: () => __awaiter$p(this, void 0, void 0, function* () {\n this.remoteControl(\"pause\" /* Pause */);\n }),\n canPlay: (type) => __awaiter$p(this, void 0, void 0, function* () { return isString(type) && canPlayRegex.test(type); }),\n setCurrentTime: (time) => __awaiter$p(this, void 0, void 0, function* () {\n if (time !== this.internalState.currentTime) {\n this.internalState.currentTime = time;\n this.remoteControl(\"seek\" /* Seek */, time);\n }\n }),\n setMuted: (muted) => __awaiter$p(this, void 0, void 0, function* () {\n this.internalState.muted = muted;\n this.remoteControl(\"muted\" /* Muted */, muted);\n }),\n setVolume: (volume) => __awaiter$p(this, void 0, void 0, function* () {\n this.internalState.volume = volume / 100;\n this.dispatch('volume', volume);\n this.remoteControl(\"volume\" /* Volume */, volume / 100);\n }),\n canSetPlaybackQuality: () => __awaiter$p(this, void 0, void 0, function* () { return true; }),\n setPlaybackQuality: (quality) => __awaiter$p(this, void 0, void 0, function* () {\n this.remoteControl(\"quality\" /* Quality */, quality.slice(0, -1));\n }),\n canSetFullscreen: () => __awaiter$p(this, void 0, void 0, function* () { return true; }),\n enterFullscreen: () => __awaiter$p(this, void 0, void 0, function* () {\n this.remoteControl(\"fullscreen\" /* Fullscreen */, true);\n }),\n exitFullscreen: () => __awaiter$p(this, void 0, void 0, function* () {\n this.remoteControl(\"fullscreen\" /* Fullscreen */, false);\n }),\n };\n });\n }\n render() {\n return (h(\"vm-embed\", { embedSrc: this.embedSrc, mediaTitle: this.mediaTitle, origin: this.getOrigin(), params: this.buildParams(), decoder: decodeQueryString, preconnections: this.getPreconnections(), onVmEmbedMessage: this.onEmbedMessage.bind(this), onVmEmbedSrcChange: this.onEmbedSrcChange.bind(this), ref: (el) => {\n this.embed = el;\n } }));\n }\n static get watchers() { return {\n \"videoId\": [\"onVideoIdChange\"],\n \"controls\": [\"onControlsChange\"],\n \"poster\": [\"onCustomPosterChange\"]\n }; }\n static get style() { return dailymotionCss; }\n};\n\nconst dashCss = \":host{z-index:var(--vm-media-z-index)}\";\n\nvar __awaiter$o = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst Dash = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n this.textTracksDisposal = new Disposal();\n this.hasAttached = false;\n /**\n * The NPM package version of the `dashjs` library to download and use.\n */\n this.version = 'latest';\n /**\n * The `dashjs` configuration.\n */\n this.config = {};\n /** @internal */\n this.autoplay = false;\n /** @inheritdoc */\n this.preload = 'metadata';\n /**\n * Are text tracks enabled by default.\n */\n this.enableTextTracksByDefault = true;\n /** @internal */\n this.shouldRenderNativeTextTracks = true;\n /** @internal */\n this.isTextTrackVisible = true;\n /** @internal */\n this.currentTextTrack = -1;\n withComponentRegistry(this);\n withProviderConnect(this);\n withPlayerContext(this, [\n 'autoplay',\n 'shouldRenderNativeTextTracks',\n 'isTextTrackVisible',\n 'currentTextTrack',\n ]);\n }\n onSrcChange() {\n var _a;\n if (!this.hasAttached)\n return;\n this.vmLoadStart.emit();\n (_a = this.dash) === null || _a === void 0 ? void 0 : _a.attachSource(this.src);\n }\n onShouldRenderNativeTextTracks() {\n var _a;\n if (this.shouldRenderNativeTextTracks) {\n this.textTracksDisposal.empty();\n }\n else {\n this.hideCurrentTextTrack();\n }\n (_a = this.dash) === null || _a === void 0 ? void 0 : _a.enableForcedTextStreaming(!this.shouldRenderNativeTextTracks);\n }\n onTextTrackChange() {\n var _a, _b;\n if (!this.shouldRenderNativeTextTracks || isUndefined(this.dash))\n return;\n this.dash.setTextTrack(!this.isTextTrackVisible ? -1 : this.currentTextTrack);\n if (!this.isTextTrackVisible) {\n const track = Array.from((_b = (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.textTracks) !== null && _b !== void 0 ? _b : [])[this.currentTextTrack];\n if ((track === null || track === void 0 ? void 0 : track.mode) === 'hidden')\n this.dispatch('currentTextTrack', -1);\n }\n }\n connectedCallback() {\n this.dispatch = createProviderDispatcher(this);\n if (this.mediaEl)\n this.setupDash();\n }\n disconnectedCallback() {\n this.textTracksDisposal.empty();\n this.destroyDash();\n }\n setupDash() {\n return __awaiter$o(this, void 0, void 0, function* () {\n try {\n const url = this.libSrc ||\n `https://cdn.jsdelivr.net/npm/dashjs@${this.version}/dist/dash.all.min.js`;\n const DashSDK = (yield loadSDK(url, 'dashjs'));\n this.dash = DashSDK.MediaPlayer(this.config).create();\n this.dash.initialize(this.mediaEl, null, this.autoplay);\n this.dash.setTextDefaultEnabled(this.enableTextTracksByDefault);\n this.dash.enableForcedTextStreaming(!this.shouldRenderNativeTextTracks);\n this.dash.on(DashSDK.MediaPlayer.events.PLAYBACK_METADATA_LOADED, () => {\n this.dispatch('mediaType', MediaType.Video);\n this.dispatch('currentSrc', this.src);\n this.dispatchLevels();\n this.listenToTextTracksForChanges();\n this.dispatch('playbackReady', true);\n });\n this.dash.on(DashSDK.MediaPlayer.events.TRACK_CHANGE_RENDERED, () => {\n if (!this.shouldRenderNativeTextTracks)\n this.hideCurrentTextTrack();\n });\n this.dash.on(DashSDK.MediaPlayer.events.ERROR, (e) => {\n this.vmError.emit(e);\n });\n this.hasAttached = true;\n }\n catch (e) {\n this.vmError.emit(e);\n }\n });\n }\n destroyDash() {\n var _a;\n return __awaiter$o(this, void 0, void 0, function* () {\n (_a = this.dash) === null || _a === void 0 ? void 0 : _a.reset();\n this.hasAttached = false;\n });\n }\n onMediaElChange(event) {\n return __awaiter$o(this, void 0, void 0, function* () {\n this.destroyDash();\n if (isUndefined(event.detail))\n return;\n this.mediaEl = event.detail;\n yield this.setupDash();\n });\n }\n levelToPlaybackQuality(level) {\n return level === -1 ? 'Auto' : `${level.height}p`;\n }\n findLevelIndexFromQuality(quality) {\n return this.dash\n .getBitrateInfoListFor('video')\n .findIndex((level) => this.levelToPlaybackQuality(level) === quality);\n }\n dispatchLevels() {\n try {\n const levels = this.dash.getBitrateInfoListFor('video');\n if ((levels === null || levels === void 0 ? void 0 : levels.length) > 0) {\n this.dispatch('playbackQualities', [\n 'Auto',\n ...levels.map(this.levelToPlaybackQuality),\n ]);\n this.dispatch('playbackQuality', 'Auto');\n }\n }\n catch (e) {\n this.vmError.emit(e);\n }\n }\n listenToTextTracksForChanges() {\n var _a, _b, _c;\n this.textTracksDisposal.empty();\n if (isUndefined(this.mediaEl) || this.shouldRenderNativeTextTracks)\n return;\n // Init current track.\n const currentTrack = (_c = ((_b = (_a = this.dash) === null || _a === void 0 ? void 0 : _a.getCurrentTrackFor('text')) === null || _b === void 0 ? void 0 : _b.index) - 1) !== null && _c !== void 0 ? _c : -1;\n this.currentTextTrack = currentTrack;\n this.dispatch('currentTextTrack', currentTrack);\n this.textTracksDisposal.add(listen(this.mediaEl.textTracks, 'change', this.onTextTracksChange.bind(this)));\n }\n getTextTracks() {\n var _a, _b;\n return Array.from((_b = (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.textTracks) !== null && _b !== void 0 ? _b : []);\n }\n hideCurrentTextTrack() {\n const textTracks = this.getTextTracks();\n if (textTracks[this.currentTextTrack] && this.isTextTrackVisible) {\n textTracks[this.currentTextTrack].mode = 'hidden';\n }\n }\n onTextTracksChange() {\n this.hideCurrentTextTrack();\n this.dispatch('textTracks', this.getTextTracks());\n this.dispatch('isTextTrackVisible', this.isTextTrackVisible);\n this.dispatch('currentTextTrack', this.currentTextTrack);\n }\n /** @internal */\n getAdapter() {\n var _a, _b;\n return __awaiter$o(this, void 0, void 0, function* () {\n const adapter = (_b = (yield ((_a = this.videoProvider) === null || _a === void 0 ? void 0 : _a.getAdapter()))) !== null && _b !== void 0 ? _b : {};\n const canVideoProviderPlay = adapter.canPlay;\n return Object.assign(Object.assign({}, adapter), { getInternalPlayer: () => __awaiter$o(this, void 0, void 0, function* () { return this.dash; }), canPlay: (type) => __awaiter$o(this, void 0, void 0, function* () {\n var _c;\n return (isString(type) && dashRegex.test(type)) ||\n ((_c = canVideoProviderPlay === null || canVideoProviderPlay === void 0 ? void 0 : canVideoProviderPlay(type)) !== null && _c !== void 0 ? _c : false);\n }), canSetPlaybackQuality: () => __awaiter$o(this, void 0, void 0, function* () {\n var _d, _e;\n try {\n return ((_e = (_d = this.dash) === null || _d === void 0 ? void 0 : _d.getBitrateInfoListFor('video')) === null || _e === void 0 ? void 0 : _e.length) > 0;\n }\n catch (e) {\n this.vmError.emit(e);\n return false;\n }\n }), setPlaybackQuality: (quality) => __awaiter$o(this, void 0, void 0, function* () {\n if (!isUndefined(this.dash)) {\n const index = this.findLevelIndexFromQuality(quality);\n this.dash.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: index === -1,\n },\n },\n },\n });\n if (index >= 0)\n this.dash.setQualityFor('video', index);\n // Update the provider cache.\n this.dispatch('playbackQuality', quality);\n }\n }), setCurrentTextTrack: (trackId) => __awaiter$o(this, void 0, void 0, function* () {\n var _f;\n if (this.shouldRenderNativeTextTracks) {\n adapter.setCurrentTextTrack(trackId);\n }\n else {\n this.currentTextTrack = trackId;\n (_f = this.dash) === null || _f === void 0 ? void 0 : _f.setTextTrack(trackId);\n this.onTextTracksChange();\n }\n }), setTextTrackVisibility: (isVisible) => __awaiter$o(this, void 0, void 0, function* () {\n var _g;\n if (this.shouldRenderNativeTextTracks) {\n adapter.setTextTrackVisibility(isVisible);\n }\n else {\n this.isTextTrackVisible = isVisible;\n (_g = this.dash) === null || _g === void 0 ? void 0 : _g.enableText(isVisible);\n this.onTextTracksChange();\n }\n }) });\n });\n }\n render() {\n return (h(\"vm-video\", { willAttach: true, crossOrigin: this.crossOrigin, preload: this.preload, poster: this.poster, controlsList: this.controlsList, autoPiP: this.autoPiP, disablePiP: this.disablePiP, hasCustomTextManager: !this.shouldRenderNativeTextTracks, disableRemotePlayback: this.disableRemotePlayback, mediaTitle: this.mediaTitle, ref: (el) => {\n this.videoProvider = el;\n } }));\n }\n static get watchers() { return {\n \"src\": [\"onSrcChange\"],\n \"hasAttached\": [\"onSrcChange\"],\n \"shouldRenderNativeTextTracks\": [\"onShouldRenderNativeTextTracks\"],\n \"isTextTrackVisible\": [\"onTextTrackChange\"],\n \"currentTextTrack\": [\"onTextTrackChange\"]\n }; }\n static get style() { return dashCss; }\n};\n\nconst dblClickFullscreenCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-dbl-click-fullscreen-z-index)}.dblClickFullscreen{display:none;width:100%;height:100%;pointer-events:none}.dblClickFullscreen.enabled{display:inline-block;pointer-events:auto}\";\n\nvar __awaiter$n = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst DblClickFullscreen = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.canSetFullscreen = false;\n /**\n * By default this is disabled on mobile to not interfere with playback, set this to `true` to\n * enable it.\n */\n this.useOnMobile = false;\n /** @internal */\n this.isFullscreenActive = true;\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.playbackReady = false;\n /** @internal */\n this.isMobile = false;\n this.clicks = 0;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'playbackReady',\n 'isFullscreenActive',\n 'isVideoView',\n 'isMobile',\n ]);\n }\n onPlaybackReadyChange() {\n return __awaiter$n(this, void 0, void 0, function* () {\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n this.canSetFullscreen = yield player.canSetFullscreen();\n });\n }\n onTriggerClickToPlay() {\n return __awaiter$n(this, void 0, void 0, function* () {\n const [clickToPlay] = getComponentFromRegistry(this, 'vm-click-to-play');\n yield (clickToPlay === null || clickToPlay === void 0 ? void 0 : clickToPlay.forceClick());\n });\n }\n onToggleFullscreen() {\n return __awaiter$n(this, void 0, void 0, function* () {\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n this.isFullscreenActive\n ? player.exitFullscreen()\n : player.enterFullscreen();\n });\n }\n onClick() {\n this.clicks += 1;\n if (this.clicks === 1) {\n setTimeout(() => {\n if (this.clicks === 1) {\n this.onTriggerClickToPlay();\n }\n else {\n this.onToggleFullscreen();\n }\n this.clicks = 0;\n }, 300);\n }\n }\n render() {\n return (h(\"div\", { class: {\n dblClickFullscreen: true,\n enabled: this.playbackReady &&\n this.canSetFullscreen &&\n this.isVideoView &&\n (!this.isMobile || this.useOnMobile),\n }, onClick: this.onClick.bind(this) }));\n }\n static get watchers() { return {\n \"playbackReady\": [\"onPlaybackReadyChange\"]\n }; }\n static get style() { return dblClickFullscreenCss; }\n};\n\nconst defaultControlsCss = \":host{display:contents;pointer-events:none;z-index:var(--vm-controls-z-index)}\";\n\nconst DefaultControls = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * The length in milliseconds that the controls are active for before fading out. Audio players\n * are not effected by this prop.\n */\n this.activeDuration = 2750;\n /**\n * Whether the controls should wait for playback to start before being shown. Audio players\n * are not effected by this prop.\n */\n this.waitForPlaybackStart = false;\n /**\n * Whether the controls should show/hide when paused. Audio players are not effected by this prop.\n */\n this.hideWhenPaused = false;\n /**\n * Whether the controls should hide when the mouse leaves the player. Audio players are not\n * effected by this prop.\n */\n this.hideOnMouseLeave = false;\n /** @internal */\n this.isMobile = false;\n /** @internal */\n this.isLive = false;\n /** @internal */\n this.isAudioView = false;\n /** @internal */\n this.isVideoView = false;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'theme',\n 'isMobile',\n 'isAudioView',\n 'isVideoView',\n 'isLive',\n ]);\n }\n buildAudioControls() {\n return (h(\"vm-controls\", { fullWidth: true }, h(\"vm-playback-control\", { tooltipDirection: \"right\" }), h(\"vm-volume-control\", null), !this.isLive && h(\"vm-current-time\", null), this.isLive && h(\"vm-control-spacer\", null), !this.isLive && h(\"vm-scrubber-control\", null), this.isLive && h(\"vm-live-indicator\", null), !this.isLive && h(\"vm-end-time\", null), !this.isLive && h(\"vm-settings-control\", { tooltipDirection: \"left\" }), h(\"div\", { style: { marginLeft: '0', paddingRight: '2px' } })));\n }\n buildMobileVideoControls() {\n return (h(Fragment, null, h(\"vm-scrim\", { gradient: \"up\" }), h(\"vm-controls\", { pin: \"topLeft\", fullWidth: true, activeDuration: this.activeDuration, waitForPlaybackStart: this.waitForPlaybackStart, hideWhenPaused: this.hideWhenPaused }, h(\"vm-control-spacer\", null), h(\"vm-volume-control\", null), !this.isLive && h(\"vm-caption-control\", null), !this.isLive && h(\"vm-settings-control\", null), this.isLive && h(\"vm-fullscreen-control\", null)), h(\"vm-controls\", { pin: \"center\", justify: \"center\", activeDuration: this.activeDuration, waitForPlaybackStart: this.waitForPlaybackStart, hideWhenPaused: this.hideWhenPaused }, h(\"vm-playback-control\", { style: { '--vm-control-scale': '1.3' } })), !this.isLive && (h(\"vm-controls\", { pin: \"bottomLeft\", fullWidth: true, activeDuration: this.activeDuration, waitForPlaybackStart: this.waitForPlaybackStart, hideWhenPaused: this.hideWhenPaused }, h(\"vm-control-group\", null, h(\"vm-current-time\", null), h(\"vm-control-spacer\", null), h(\"vm-end-time\", null), h(\"vm-fullscreen-control\", null)), h(\"vm-control-group\", { space: \"top\" }, h(\"vm-scrubber-control\", null))))));\n }\n buildDesktopVideoControls() {\n return (h(Fragment, null, this.theme !== 'light' && h(\"vm-scrim\", { gradient: \"up\" }), h(\"vm-controls\", { fullWidth: true, pin: \"bottomRight\", activeDuration: this.activeDuration, waitForPlaybackStart: this.waitForPlaybackStart, hideWhenPaused: this.hideWhenPaused, hideOnMouseLeave: this.hideOnMouseLeave }, !this.isLive && (h(\"vm-control-group\", null, h(\"vm-scrubber-control\", null))), h(\"vm-control-group\", { space: this.isLive ? 'none' : 'top' }, h(\"vm-playback-control\", { tooltipDirection: \"right\" }), h(\"vm-volume-control\", null), !this.isLive && h(\"vm-time-progress\", null), h(\"vm-control-spacer\", null), !this.isLive && h(\"vm-caption-control\", null), this.isLive && h(\"vm-live-indicator\", null), h(\"vm-pip-control\", null), !this.isLive && h(\"vm-settings-control\", null), h(\"vm-fullscreen-control\", { tooltipDirection: \"left\" })))));\n }\n render() {\n if (this.isAudioView)\n return this.buildAudioControls();\n if (this.isVideoView && this.isMobile)\n return this.buildMobileVideoControls();\n if (this.isVideoView)\n return this.buildDesktopVideoControls();\n return null;\n }\n static get style() { return defaultControlsCss; }\n};\n\nconst defaultSettingsCss = \":host{z-index:var(--vm-menu-z-index)}\";\n\nvar __awaiter$m = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst DefaultSettings = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.textTracksDisposal = new Disposal();\n this.canSetPlaybackRate = false;\n this.canSetPlaybackQuality = false;\n this.canSetTextTrack = false;\n this.canSetAudioTrack = false;\n /**\n * Pins the settings to the defined position inside the video player. This has no effect when\n * the view is of type `audio`, it will always be `bottomRight`.\n */\n this.pin = 'bottomRight';\n /** @internal */\n this.i18n = {};\n /** @internal */\n this.playbackReady = false;\n /** @internal */\n this.playbackRate = 1;\n /** @internal */\n this.playbackRates = [1];\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.playbackQualities = [];\n /** @internal */\n this.textTracks = [];\n /** @internal */\n this.currentTextTrack = -1;\n /** @internal */\n this.audioTracks = [];\n /** @internal */\n this.currentAudioTrack = -1;\n /** @internal */\n this.isTextTrackVisible = true;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'i18n',\n 'playbackReady',\n 'playbackRate',\n 'playbackRates',\n 'playbackQuality',\n 'playbackQualities',\n 'isVideoView',\n 'textTracks',\n 'currentTextTrack',\n 'isTextTrackVisible',\n 'audioTracks',\n 'currentAudioTrack',\n ]);\n }\n onPlaybackReady() {\n return __awaiter$m(this, void 0, void 0, function* () {\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n this.canSetPlaybackQuality = yield player.canSetPlaybackQuality();\n this.canSetPlaybackRate = yield player.canSetPlaybackRate();\n });\n }\n onAudioTracksChange() {\n var _a;\n return __awaiter$m(this, void 0, void 0, function* () {\n const player = getPlayerFromRegistry(this);\n this.canSetAudioTrack = (_a = (yield (player === null || player === void 0 ? void 0 : player.canSetAudioTrack()))) !== null && _a !== void 0 ? _a : false;\n });\n }\n onTextTracksChange() {\n var _a;\n return __awaiter$m(this, void 0, void 0, function* () {\n const player = getPlayerFromRegistry(this);\n this.canSetTextTrack = (_a = (yield (player === null || player === void 0 ? void 0 : player.canSetTextTrack()))) !== null && _a !== void 0 ? _a : false;\n });\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n }\n componentDidLoad() {\n this.onTextTracksChange();\n }\n disconnectedCallback() {\n this.textTracksDisposal.empty();\n }\n onPlaybackRateSelect(event) {\n const radio = event.target;\n this.dispatch('playbackRate', parseFloat(radio.value));\n }\n buildPlaybackRateSubmenu() {\n if (this.playbackRates.length <= 1 || !this.canSetPlaybackRate) {\n return (h(\"vm-menu-item\", { label: this.i18n.playbackRate, hint: this.i18n.normal }));\n }\n const formatRate = (rate) => rate === 1 ? this.i18n.normal : `${rate}`;\n return (h(\"vm-submenu\", { label: this.i18n.playbackRate, hint: formatRate(this.playbackRate) }, h(\"vm-menu-radio-group\", { value: `${this.playbackRate}`, onVmCheck: this.onPlaybackRateSelect.bind(this) }, this.playbackRates.map(rate => (h(\"vm-menu-radio\", { label: formatRate(rate), value: `${rate}` }))))));\n }\n onPlaybackQualitySelect(event) {\n const radio = event.target;\n this.dispatch('playbackQuality', radio.value);\n }\n buildPlaybackQualitySubmenu() {\n var _a;\n if (this.playbackQualities.length <= 1 || !this.canSetPlaybackQuality) {\n return (h(\"vm-menu-item\", { label: this.i18n.playbackQuality, hint: (_a = this.playbackQuality) !== null && _a !== void 0 ? _a : this.i18n.auto }));\n }\n // @TODO this doesn't account for audio qualities yet.\n const getBadge = (quality) => {\n const verticalPixels = parseInt(quality.slice(0, -1), 10);\n if (verticalPixels >= 2160)\n return 'UHD';\n if (verticalPixels >= 1080)\n return 'HD';\n return undefined;\n };\n return (h(\"vm-submenu\", { label: this.i18n.playbackQuality, hint: this.playbackQuality }, h(\"vm-menu-radio-group\", { value: this.playbackQuality, onVmCheck: this.onPlaybackQualitySelect.bind(this) }, this.playbackQualities.map(quality => (h(\"vm-menu-radio\", { label: quality, value: quality, badge: getBadge(quality) }))))));\n }\n onTextTrackSelect(event) {\n const radio = event.target;\n const trackId = parseInt(radio.value, 10);\n const player = getPlayerFromRegistry(this);\n if (trackId === -1) {\n player === null || player === void 0 ? void 0 : player.setTextTrackVisibility(false);\n return;\n }\n player === null || player === void 0 ? void 0 : player.setTextTrackVisibility(true);\n player === null || player === void 0 ? void 0 : player.setCurrentTextTrack(trackId);\n }\n buildTextTracksSubmenu() {\n var _a, _b, _c;\n if (this.textTracks.length <= 1 || !this.canSetTextTrack) {\n return (h(\"vm-menu-item\", { label: this.i18n.subtitlesOrCc, hint: (_b = (_a = this.textTracks[this.currentTextTrack]) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : this.i18n.none }));\n }\n return (h(\"vm-submenu\", { label: this.i18n.subtitlesOrCc, hint: this.isTextTrackVisible\n ? (_c = this.textTracks[this.currentTextTrack]) === null || _c === void 0 ? void 0 : _c.label\n : this.i18n.off }, h(\"vm-menu-radio-group\", { value: `${!this.isTextTrackVisible ? -1 : this.currentTextTrack}`, onVmCheck: this.onTextTrackSelect.bind(this) }, [h(\"vm-menu-radio\", { label: this.i18n.off, value: \"-1\" })].concat(this.textTracks.map((track, i) => (h(\"vm-menu-radio\", { label: track.label, value: `${i}` })))))));\n }\n onAudioTrackSelect(event) {\n const radio = event.target;\n const trackId = parseInt(radio.value, 10);\n const player = getPlayerFromRegistry(this);\n player === null || player === void 0 ? void 0 : player.setCurrentAudioTrack(trackId);\n }\n buildAudioTracksMenu() {\n var _a, _b, _c;\n if (this.audioTracks.length <= 1 || !this.canSetAudioTrack) {\n return (h(\"vm-menu-item\", { label: this.i18n.audio, hint: (_b = (_a = this.audioTracks[this.currentAudioTrack]) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : this.i18n.default }));\n }\n return (h(\"vm-submenu\", { label: this.i18n.audio, hint: (_c = this.audioTracks[this.currentAudioTrack]) === null || _c === void 0 ? void 0 : _c.label }, h(\"vm-menu-radio-group\", { value: `${this.currentAudioTrack}`, onVmCheck: this.onAudioTrackSelect.bind(this) }, this.audioTracks.map((track, i) => (h(\"vm-menu-radio\", { label: track.label, value: `${i}` }))))));\n }\n render() {\n return (h(\"vm-settings\", { pin: this.pin }, this.buildAudioTracksMenu(), this.buildPlaybackRateSubmenu(), this.buildPlaybackQualitySubmenu(), this.isVideoView && this.buildTextTracksSubmenu(), h(\"slot\", null)));\n }\n static get watchers() { return {\n \"playbackReady\": [\"onPlaybackReady\", \"onAudioTracksChange\", \"onTextTracksChange\"],\n \"audioTracks\": [\"onAudioTracksChange\"],\n \"textTracks\": [\"onTextTracksChange\"]\n }; }\n static get style() { return defaultSettingsCss; }\n};\n\nconst defaultUiCss = \":host{display:contents;pointer-events:none}\";\n\nconst DefaultUI = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * Whether clicking the player should not toggle playback.\n */\n this.noClickToPlay = false;\n /**\n * Whether double clicking the player should not toggle fullscreen mode.\n */\n this.noDblClickFullscreen = false;\n /**\n * Whether the custom captions UI should not be loaded.\n */\n this.noCaptions = false;\n /**\n * Whether the custom poster UI should not be loaded.\n */\n this.noPoster = false;\n /**\n * Whether the custom spinner UI should not be loaded.\n */\n this.noSpinner = false;\n /**\n * Whether the custom default controls should not be loaded.\n */\n this.noControls = false;\n /**\n * Whether the custom default settings menu should not be loaded.\n */\n this.noSettings = false;\n /**\n * Whether the default loading screen should not be loaded.\n */\n this.noLoadingScreen = false;\n withComponentRegistry(this);\n }\n render() {\n return (h(\"vm-ui\", null, !this.noClickToPlay && h(\"vm-click-to-play\", null), !this.noDblClickFullscreen && h(\"vm-dbl-click-fullscreen\", null), !this.noCaptions && h(\"vm-captions\", null), !this.noPoster && h(\"vm-poster\", null), !this.noSpinner && h(\"vm-spinner\", null), !this.noLoadingScreen && h(\"vm-loading-screen\", null), !this.noControls && h(\"vm-default-controls\", null), !this.noSettings && h(\"vm-default-settings\", null), h(\"slot\", null)));\n }\n static get style() { return defaultUiCss; }\n};\n\nclass LazyLoader {\n constructor(el, attributes, onLoad) {\n var _a;\n this.el = el;\n this.attributes = attributes;\n this.onLoad = onLoad;\n this.hasLoaded = false;\n if (isNil(this.el))\n return;\n this.intersectionObs = this.canObserveIntersection()\n ? new IntersectionObserver(this.onIntersection.bind(this))\n : undefined;\n this.mutationObs = this.canObserveMutations()\n ? new MutationObserver(this.onMutation.bind(this))\n : undefined;\n (_a = this.mutationObs) === null || _a === void 0 ? void 0 : _a.observe(this.el, {\n childList: true,\n subtree: true,\n attributeFilter: this.attributes,\n });\n this.lazyLoad();\n }\n didLoad() {\n return this.hasLoaded;\n }\n destroy() {\n var _a, _b;\n (_a = this.intersectionObs) === null || _a === void 0 ? void 0 : _a.disconnect();\n (_b = this.mutationObs) === null || _b === void 0 ? void 0 : _b.disconnect();\n }\n canObserveIntersection() {\n return IS_CLIENT && window.IntersectionObserver;\n }\n canObserveMutations() {\n return IS_CLIENT && window.MutationObserver;\n }\n lazyLoad() {\n var _a;\n if (this.canObserveIntersection()) {\n (_a = this.intersectionObs) === null || _a === void 0 ? void 0 : _a.observe(this.el);\n }\n else {\n this.load();\n }\n }\n onIntersection(entries) {\n entries.forEach(entry => {\n if (entry.intersectionRatio > 0 || entry.isIntersecting) {\n this.load();\n this.intersectionObs.unobserve(entry.target);\n }\n });\n }\n onMutation() {\n if (this.hasLoaded)\n this.load();\n }\n getLazyElements() {\n const root = !isNil(this.el.shadowRoot) ? this.el.shadowRoot : this.el;\n return root.querySelectorAll('.lazy');\n }\n load() {\n window.requestAnimationFrame(() => {\n this.getLazyElements().forEach(this.loadEl.bind(this));\n });\n }\n loadEl(el) {\n var _a, _b;\n (_a = this.intersectionObs) === null || _a === void 0 ? void 0 : _a.unobserve(el);\n this.hasLoaded = true;\n (_b = this.onLoad) === null || _b === void 0 ? void 0 : _b.call(this, el);\n }\n}\n\nconst embedCss = \":host{z-index:var(--vm-media-z-index)}iframe{position:absolute;top:0;left:0;border:0;width:100%;height:100%;user-select:none}\";\n\nvar __awaiter$l = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nlet idCount$4 = 0;\nconst connected = new Set();\nconst Embed = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmEmbedSrcChange = createEvent(this, \"vmEmbedSrcChange\", 3);\n this.vmEmbedMessage = createEvent(this, \"vmEmbedMessage\", 3);\n this.vmEmbedLoaded = createEvent(this, \"vmEmbedLoaded\", 3);\n this.srcWithParams = '';\n this.hasEnteredViewport = false;\n /**\n * A URL that will load the external player and media (Eg: https://www.youtube.com/embed/DyTCOwB0DVw).\n */\n this.embedSrc = '';\n /**\n * The title of the current media so it can be set on the inner `iframe` for screen readers.\n */\n this.mediaTitle = '';\n /**\n * The parameters to pass to the embedded player which are appended to the `embedSrc` prop. These\n * can be passed in as a query string or object.\n */\n this.params = '';\n /**\n * A collection of URLs to that the browser should immediately start establishing a connection\n * with.\n */\n this.preconnections = [];\n withComponentRegistry(this);\n }\n onEmbedSrcChange() {\n this.srcWithParams =\n isString(this.embedSrc) && this.embedSrc.length > 0\n ? appendParamsToURL(this.embedSrc, this.params)\n : undefined;\n }\n srcWithParamsChange() {\n if (isUndefined(this.srcWithParams)) {\n this.vmEmbedSrcChange.emit(this.srcWithParams);\n return;\n }\n if (!this.hasEnteredViewport && !connected.has(this.embedSrc)) {\n if (preconnect(this.srcWithParams))\n connected.add(this.embedSrc);\n }\n this.vmEmbedSrcChange.emit(this.srcWithParams);\n }\n preconnectionsChange() {\n if (this.hasEnteredViewport) {\n return;\n }\n this.preconnections\n .filter(connection => !connected.has(connection))\n .forEach(connection => {\n if (preconnect(connection))\n connected.add(connection);\n });\n }\n connectedCallback() {\n this.lazyLoader = new LazyLoader(this.host, ['data-src'], el => {\n const src = el.getAttribute('data-src');\n el.removeAttribute('src');\n if (!isNull(src))\n el.setAttribute('src', src);\n });\n this.onEmbedSrcChange();\n this.genIframeId();\n }\n disconnectedCallback() {\n this.lazyLoader.destroy();\n }\n onWindowMessage(e) {\n var _a, _b, _c;\n const originMatches = e.source === ((_a = this.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow) &&\n (!isString(this.origin) || this.origin === e.origin);\n if (!originMatches)\n return;\n const message = (_c = (_b = this.decoder) === null || _b === void 0 ? void 0 : _b.call(this, e.data)) !== null && _c !== void 0 ? _c : e.data;\n if (message)\n this.vmEmbedMessage.emit(message);\n }\n /**\n * Posts a message to the embedded media player.\n */\n postMessage(message, target) {\n var _a, _b;\n return __awaiter$l(this, void 0, void 0, function* () {\n (_b = (_a = this.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(JSON.stringify(message), target !== null && target !== void 0 ? target : '*');\n });\n }\n onLoad() {\n this.vmEmbedLoaded.emit();\n }\n genIframeId() {\n idCount$4 += 1;\n this.id = `vm-iframe-${idCount$4}`;\n }\n render() {\n return (h(\"iframe\", { id: this.id, class: \"lazy\", title: this.mediaTitle, \"data-src\": this.srcWithParams, allowFullScreen: true, allow: \"autoplay; encrypted-media; picture-in-picture;\", onLoad: this.onLoad.bind(this), ref: (el) => {\n this.iframe = el;\n } }));\n }\n get host() { return this; }\n static get watchers() { return {\n \"embedSrc\": [\"onEmbedSrcChange\"],\n \"params\": [\"onEmbedSrcChange\"],\n \"srcWithParams\": [\"srcWithParamsChange\"],\n \"preconnections\": [\"preconnectionsChange\"]\n }; }\n static get style() { return embedCss; }\n};\n\nconst endTimeCss = \":host{display:flex;align-items:center;justify-content:center}\";\n\nconst EndTime = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.duration = -1;\n /** @internal */\n this.i18n = {};\n /**\n * Whether the time should always show the hours unit, even if the time is less than\n * 1 hour (eg: `20:35` -> `00:20:35`).\n */\n this.alwaysShowHours = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['duration', 'i18n']);\n }\n render() {\n return (h(\"vm-time\", { label: this.i18n.duration, seconds: Math.max(0, this.duration), alwaysShowHours: this.alwaysShowHours }));\n }\n static get style() { return endTimeCss; }\n};\n\nvar key = {\r\n fullscreenEnabled: 0,\r\n fullscreenElement: 1,\r\n requestFullscreen: 2,\r\n exitFullscreen: 3,\r\n fullscreenchange: 4,\r\n fullscreenerror: 5,\r\n fullscreen: 6\r\n};\r\nvar webkit = [\r\n 'webkitFullscreenEnabled',\r\n 'webkitFullscreenElement',\r\n 'webkitRequestFullscreen',\r\n 'webkitExitFullscreen',\r\n 'webkitfullscreenchange',\r\n 'webkitfullscreenerror',\r\n '-webkit-full-screen',\r\n];\r\nvar moz = [\r\n 'mozFullScreenEnabled',\r\n 'mozFullScreenElement',\r\n 'mozRequestFullScreen',\r\n 'mozCancelFullScreen',\r\n 'mozfullscreenchange',\r\n 'mozfullscreenerror',\r\n '-moz-full-screen',\r\n];\r\nvar ms = [\r\n 'msFullscreenEnabled',\r\n 'msFullscreenElement',\r\n 'msRequestFullscreen',\r\n 'msExitFullscreen',\r\n 'MSFullscreenChange',\r\n 'MSFullscreenError',\r\n '-ms-fullscreen',\r\n];\r\n// so it doesn't throw if no window or document\r\nvar document$1 = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\r\nvar vendor = (('fullscreenEnabled' in document$1 && Object.keys(key)) ||\r\n (webkit[0] in document$1 && webkit) ||\r\n (moz[0] in document$1 && moz) ||\r\n (ms[0] in document$1 && ms) ||\r\n []);\r\nvar fscreen = {\r\n requestFullscreen: function (element) { return element[vendor[key.requestFullscreen]](); },\r\n requestFullscreenFunction: function (element) { return element[vendor[key.requestFullscreen]]; },\r\n get exitFullscreen() { return document$1[vendor[key.exitFullscreen]].bind(document$1); },\r\n get fullscreenPseudoClass() { return \":\" + vendor[key.fullscreen]; },\r\n addEventListener: function (type, handler, options) { return document$1.addEventListener(vendor[key[type]], handler, options); },\r\n removeEventListener: function (type, handler, options) { return document$1.removeEventListener(vendor[key[type]], handler, options); },\r\n get fullscreenEnabled() { return Boolean(document$1[vendor[key.fullscreenEnabled]]); },\r\n set fullscreenEnabled(val) { },\r\n get fullscreenElement() { return document$1[vendor[key.fullscreenElement]]; },\r\n set fullscreenElement(val) { },\r\n get onfullscreenchange() { return document$1[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()]; },\r\n set onfullscreenchange(handler) { return document$1[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler; },\r\n get onfullscreenerror() { return document$1[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()]; },\r\n set onfullscreenerror(handler) { return document$1[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()] = handler; },\r\n};\n\nfunction mitt(n){return {all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e]);},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]));},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e);}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e);});}}}\n\nvar __awaiter$k = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n/**\n * Unfortunately fullscreen isn't straight forward due to cross-browser inconsistencies. This\n * class abstract the logic for handling fullscreen across browsers.\n */\nclass FullscreenController {\n constructor(host) {\n this.host = host;\n this.disposal = new Disposal();\n this.emitter = mitt();\n }\n /**\n * Whether fullscreen mode can be requested, generally is an API available to do so.\n */\n get isSupported() {\n return this.isSupportedNatively;\n }\n /**\n * Whether the native Fullscreen API is enabled/available.\n */\n get isSupportedNatively() {\n return fscreen.fullscreenEnabled;\n }\n /**\n * Whether the host element is in fullscreen mode.\n */\n get isFullscreen() {\n return this.isNativeFullscreen;\n }\n /**\n * Whether the host element is in fullscreen mode via the native Fullscreen API.\n */\n get isNativeFullscreen() {\n if (fscreen.fullscreenElement === this.host)\n return true;\n try {\n // Throws in iOS Safari...\n return this.host.matches(\n // Property `fullscreenPseudoClass` is missing from `@types/fscreen`.\n fscreen\n .fullscreenPseudoClass);\n }\n catch (error) {\n return false;\n }\n }\n on(type, handler) {\n // @ts-expect-error - not typed yet.\n this.emitter.on(type, handler);\n }\n off(type, handler) {\n // @ts-expect-error - not typed yet.\n this.emitter.off(type, handler);\n }\n /**\n * Dispose of any event listeners and exit fullscreen (if active).\n */\n destroy() {\n return __awaiter$k(this, void 0, void 0, function* () {\n if (this.isFullscreen)\n yield this.exitFullscreen();\n this.disposal.empty();\n this.emitter.all.clear();\n });\n }\n addFullscreenChangeEventListener(handler) {\n if (!this.isSupported)\n return noop;\n return listen(fscreen, 'fullscreenchange', handler);\n }\n addFullscreenErrorEventListener(handler) {\n if (!this.isSupported)\n return noop;\n return listen(fscreen, 'fullscreenerror', handler);\n }\n requestFullscreen() {\n return __awaiter$k(this, void 0, void 0, function* () {\n if (this.isFullscreen)\n return;\n this.throwIfNoFullscreenSupport();\n // TODO: Check if PiP is active, if so make sure to exit - need PipController.\n this.disposal.add(this.addFullscreenChangeEventListener(this.handleFullscreenChange.bind(this)));\n this.disposal.add(this.addFullscreenErrorEventListener(this.handleFullscreenError.bind(this)));\n return this.makeEnterFullscreenRequest();\n });\n }\n makeEnterFullscreenRequest() {\n return __awaiter$k(this, void 0, void 0, function* () {\n return fscreen.requestFullscreen(this.host);\n });\n }\n handleFullscreenChange() {\n if (!this.isFullscreen)\n this.disposal.empty();\n this.emitter.emit('change', this.isFullscreen);\n }\n handleFullscreenError(event) {\n this.emitter.emit('error', event);\n }\n exitFullscreen() {\n return __awaiter$k(this, void 0, void 0, function* () {\n if (!this.isFullscreen)\n return;\n this.throwIfNoFullscreenSupport();\n return this.makeExitFullscreenRequest();\n });\n }\n makeExitFullscreenRequest() {\n return __awaiter$k(this, void 0, void 0, function* () {\n return fscreen.exitFullscreen();\n });\n }\n throwIfNoFullscreenSupport() {\n if (this.isSupported)\n return;\n throw Error('Fullscreen API is not enabled or supported in this environment.');\n }\n}\n\nvar __awaiter$j = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n/**\n * Extends the base `FullscreenController` with additional logic for handling fullscreen\n * on iOS Safari where the native Fullscreen API is not available (in this case it fallsback to\n * using the `VideoPresentationController`).\n */\nclass VideoFullscreenController extends FullscreenController {\n constructor(host, presentationController) {\n super(host);\n this.host = host;\n this.presentationController = presentationController;\n }\n get isFullscreen() {\n return this.presentationController.isFullscreenMode;\n }\n /**\n * Whether a fallback fullscreen API is available on Safari using presentation modes. This\n * is only used on iOS where the native fullscreen API is not available.\n *\n * @link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1631913-webkitpresentationmode\n */\n get isSupported() {\n return this.presentationController.isSupported;\n }\n makeEnterFullscreenRequest() {\n return __awaiter$j(this, void 0, void 0, function* () {\n return this.presentationController.setPresentationMode('fullscreen');\n });\n }\n makeExitFullscreenRequest() {\n return __awaiter$j(this, void 0, void 0, function* () {\n return this.presentationController.setPresentationMode('inline');\n });\n }\n addFullscreenChangeEventListener() {\n if (!this.isSupported)\n return noop;\n this.presentationController.on('change', this.handlePresentationModeChange.bind(this));\n return () => {\n this.presentationController.off('change', this.handlePresentationModeChange.bind(this));\n };\n }\n handlePresentationModeChange() {\n this.handleFullscreenChange();\n }\n addFullscreenErrorEventListener() {\n return noop;\n }\n}\n\nvar __awaiter$i = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n/**\n * Contains the logic for handling presentation modes on Safari. This class is used by\n * the `VideoFullscreenController` as a fallback when the native Fullscreen API is not\n * available (ie: iOS Safari).\n */\nclass VideoPresentationController {\n constructor(host) {\n this.host = host;\n this.disposal = new Disposal();\n this.emitter = mitt();\n const disconnectedCallback = host.disconnectedCallback;\n host.disconnectedCallback = () => __awaiter$i(this, void 0, void 0, function* () {\n yield this.destroy();\n disconnectedCallback === null || disconnectedCallback === void 0 ? void 0 : disconnectedCallback.call(host);\n });\n }\n get videoElement() {\n var _a;\n if (((_a = this.host.mediaEl) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) === 'video') {\n return this.host.mediaEl;\n }\n return undefined;\n }\n /**\n * The current presentation mode, possible values include `inline`, `picture-in-picture` and\n * `fullscreen`. Only available in Safari.\n *\n * @default undefined\n * @link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1631913-webkitpresentationmode\n */\n get presentationMode() {\n var _a;\n return (_a = this.videoElement) === null || _a === void 0 ? void 0 : _a.webkitPresentationMode;\n }\n /**\n * Whether the current `presentationMode` is `inline`.\n */\n get isInlineMode() {\n return this.presentationMode === 'inline';\n }\n /**\n * Whether the current `presentationMode` is `picture-in-picture`.\n */\n get isPictureInPictureMode() {\n return this.presentationMode === 'inline';\n }\n /**\n * Whether the current `presentationMode` is `fullscreen`.\n */\n get isFullscreenMode() {\n return this.presentationMode === 'fullscreen';\n }\n /**\n * Whether the presentation mode API is available.\n *\n * @link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1628805-webkitsupportsfullscreen\n */\n get isSupported() {\n var _a, _b, _c;\n return (IS_IOS &&\n isFunction((_a = this.videoElement) === null || _a === void 0 ? void 0 : _a.webkitSetPresentationMode) &&\n ((_c = (_b = this.videoElement) === null || _b === void 0 ? void 0 : _b.webkitSupportsFullscreen) !== null && _c !== void 0 ? _c : false));\n }\n setPresentationMode(mode) {\n var _a, _b;\n (_b = (_a = this.videoElement) === null || _a === void 0 ? void 0 : _a.webkitSetPresentationMode) === null || _b === void 0 ? void 0 : _b.call(_a, mode);\n }\n on(type, handler) {\n // @ts-expect-error - not typed yet.\n this.emitter.on(type, handler);\n }\n off(type, handler) {\n // @ts-expect-error - not typed yet.\n this.emitter.off(type, handler);\n }\n destroy() {\n this.setPresentationMode('inline');\n this.disposal.empty();\n }\n addPresentationModeChangeEventListener() {\n if (!this.isSupported || isNil(this.videoElement))\n return noop;\n return listen(this.videoElement, 'webkitpresentationmodechanged', this.handlePresentationModeChange.bind(this));\n }\n handlePresentationModeChange() {\n this.emitter.emit('change', this.presentationMode);\n }\n}\n\nconst fileCss = \"audio.sc-vm-file,video.sc-vm-file{border-radius:inherit;vertical-align:middle;width:100%;outline:0}video.sc-vm-file{position:absolute;top:0;left:0;border:0;height:100%;user-select:none}\";\n\nvar __awaiter$h = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst File = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n this.vmMediaElChange = createEvent(this, \"vmMediaElChange\", 7);\n this.vmSrcSetChange = createEvent(this, \"vmSrcSetChange\", 7);\n this.textTracksDisposal = new Disposal();\n this.wasPausedBeforeSeeking = true;\n this.currentSrcSet = [];\n this.mediaQueryDisposal = new Disposal();\n /** @internal Whether an external SDK will attach itself to the media player and control it. */\n this.willAttach = false;\n /** @inheritdoc */\n this.preload = 'metadata';\n /**\n * The playback rates that are available for this media.\n */\n this.playbackRates = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];\n /** @internal */\n this.language = 'en';\n /** @internal */\n this.autoplay = false;\n /** @internal */\n this.controls = false;\n /** @internal */\n this.loop = false;\n /** @internal */\n this.muted = false;\n /** @internal */\n this.playsinline = false;\n /** @internal */\n this.noConnect = false;\n /** @internal */\n this.paused = true;\n /** @internal */\n this.currentTime = 0;\n /** @internal */\n this.volume = 0;\n /** @internal */\n this.playbackReady = false;\n /** @internal */\n this.playbackStarted = false;\n this.presentationController = new VideoPresentationController(this);\n this.fullscreenController = new VideoFullscreenController(this, this.presentationController);\n /** @internal */\n this.currentTextTrack = -1;\n /** @internal */\n this.hasCustomTextManager = false;\n /** @internal */\n this.isTextTrackVisible = true;\n /** @internal */\n this.shouldRenderNativeTextTracks = true;\n withComponentRegistry(this);\n withProviderConnect(this);\n withProviderContext(this, [\n 'playbackReady',\n 'playbackStarted',\n 'currentTime',\n 'volume',\n 'paused',\n 'currentTextTrack',\n 'isTextTrackVisible',\n 'shouldRenderNativeTextTracks',\n ]);\n watchComponentRegistry(this, 'vm-poster', regs => {\n [this.vmPoster] = regs;\n });\n }\n onMediaTitleChange() {\n this.dispatch('mediaTitle', this.mediaTitle);\n }\n onPosterChange() {\n var _a;\n if (!this.playbackStarted)\n (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.load();\n }\n onViewTypeChange() {\n this.dispatch('viewType', this.viewType);\n }\n connectedCallback() {\n this.initLazyLoader();\n this.dispatch = createProviderDispatcher(this);\n this.onViewTypeChange();\n this.onPosterChange();\n this.onMediaTitleChange();\n this.addPresentationControllerListeners();\n }\n componentDidRender() {\n if (this.prevMediaEl !== this.mediaEl) {\n this.prevMediaEl = this.mediaEl;\n this.vmMediaElChange.emit(this.mediaEl);\n this.presentationController.addPresentationModeChangeEventListener();\n }\n }\n componentDidLoad() {\n this.onViewTypeChange();\n }\n disconnectedCallback() {\n var _a;\n this.mediaQueryDisposal.empty();\n this.textTracksDisposal.empty();\n this.cancelTimeUpdates();\n (_a = this.lazyLoader) === null || _a === void 0 ? void 0 : _a.destroy();\n this.wasPausedBeforeSeeking = true;\n }\n initLazyLoader() {\n this.lazyLoader = new LazyLoader(this.host, ['data-src', 'data-poster'], () => {\n if (isNil(this.mediaEl))\n return;\n const poster = this.mediaEl.getAttribute('data-poster');\n if (!isNull(poster))\n this.mediaEl.setAttribute('poster', poster);\n this.refresh();\n this.didSrcSetChange();\n });\n }\n refresh() {\n if (isNil(this.mediaEl))\n return;\n const { children } = this.mediaEl;\n for (let i = 0; i <= children.length - 1; i += 1) {\n const child = children[i];\n const src = child.getAttribute('data-src') ||\n child.getAttribute('src') ||\n child.getAttribute('data-vs');\n child.removeAttribute('src');\n if (isNull(src))\n continue;\n child.setAttribute('data-vs', src);\n child.setAttribute('src', src);\n }\n }\n didSrcSetChange() {\n if (isNil(this.mediaEl))\n return;\n const sources = Array.from(this.mediaEl.querySelectorAll('source'));\n const srcSet = sources.map(source => {\n var _a;\n return ({\n src: source.getAttribute('data-vs'),\n media: (_a = source.getAttribute('data-media')) !== null && _a !== void 0 ? _a : undefined,\n ref: source,\n });\n });\n const didChange = this.currentSrcSet.length !== srcSet.length ||\n srcSet.some((resource, i) => this.currentSrcSet[i].src !== resource.src);\n if (didChange) {\n this.currentSrcSet = srcSet;\n this.onSrcSetChange();\n }\n }\n onSrcSetChange() {\n var _a;\n this.textTracksDisposal.empty();\n this.mediaQueryDisposal.empty();\n this.vmLoadStart.emit();\n this.vmSrcSetChange.emit(this.currentSrcSet);\n if (!this.willAttach)\n (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.load();\n }\n hasCustomPoster() {\n return !IS_IOS && !isUndefined(this.vmPoster);\n }\n cancelTimeUpdates() {\n if (isNumber(this.timeRAF))\n window.cancelAnimationFrame(this.timeRAF);\n this.timeRAF = undefined;\n }\n requestTimeUpdates() {\n var _a, _b;\n this.dispatch('currentTime', (_b = (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.currentTime) !== null && _b !== void 0 ? _b : 0);\n this.timeRAF = window.requestAnimationFrame(() => {\n this.requestTimeUpdates();\n });\n }\n getMediaType() {\n const { currentSrc } = this.mediaEl;\n if (audioRegex.test(currentSrc))\n return MediaType.Audio;\n if (videoRegex.test(currentSrc) || hlsRegex.test(currentSrc))\n return MediaType.Video;\n return undefined;\n }\n onLoadedMetadata() {\n this.mediaEl.volume = this.volume / 100;\n this.listenToTextTracksForChanges();\n this.onTextTracksChange();\n this.onProgress();\n this.dispatch('currentPoster', this.poster);\n this.dispatch('duration', this.mediaEl.duration);\n this.dispatch('playbackRates', this.playbackRates);\n if (!this.willAttach) {\n this.dispatch('currentSrc', this.mediaEl.currentSrc);\n this.dispatch('mediaType', this.getMediaType());\n this.dispatch('playbackReady', true);\n }\n }\n onProgress() {\n const { buffered, duration } = this.mediaEl;\n const end = buffered.length === 0 ? 0 : buffered.end(buffered.length - 1);\n this.dispatch('buffered', end > duration ? duration : end);\n }\n onPlay() {\n this.requestTimeUpdates();\n this.dispatch('paused', false);\n if (!this.playbackStarted)\n this.dispatch('playbackStarted', true);\n }\n onPause() {\n this.cancelTimeUpdates();\n this.dispatch('paused', true);\n this.dispatch('buffering', false);\n }\n onPlaying() {\n this.dispatch('playing', true);\n this.dispatch('buffering', false);\n }\n onSeeking() {\n if (!this.wasPausedBeforeSeeking)\n this.wasPausedBeforeSeeking = this.mediaEl.paused;\n this.dispatch('currentTime', this.mediaEl.currentTime);\n this.dispatch('seeking', true);\n }\n onSeeked() {\n // Avoid calling `attemptToPlay` if seeking to 0 on 0.\n if (this.currentTime === 0 && !this.playbackStarted)\n return;\n this.dispatch('seeking', false);\n if (!this.playbackStarted || !this.wasPausedBeforeSeeking)\n this.attemptToPlay();\n this.wasPausedBeforeSeeking = true;\n }\n onRateChange() {\n this.dispatch('playbackRate', this.mediaEl.playbackRate);\n }\n onVolumeChange() {\n this.dispatch('muted', this.mediaEl.muted);\n this.dispatch('volume', this.mediaEl.volume * 100);\n }\n onDurationChange() {\n this.dispatch('duration', this.mediaEl.duration);\n }\n onWaiting() {\n this.dispatch('buffering', true);\n }\n onSuspend() {\n this.dispatch('buffering', false);\n }\n onEnded() {\n if (!this.loop)\n this.dispatch('playbackEnded', true);\n }\n onError() {\n this.vmError.emit(this.mediaEl.error);\n }\n attemptToPlay() {\n var _a;\n try {\n (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.play();\n }\n catch (e) {\n this.vmError.emit(e);\n }\n }\n togglePiPInChrome(toggle) {\n var _a;\n return toggle\n ? (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.requestPictureInPicture()\n : document.exitPictureInPicture();\n }\n togglePiPInSafari(toggle) {\n var _a, _b;\n const mode = toggle\n ? \"picture-in-picture\" /* PiP */\n : \"inline\" /* Inline */;\n if (!((_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.webkitSupportsPresentationMode(mode))) {\n throw new Error('PiP API is not available.');\n }\n return (_b = this.mediaEl) === null || _b === void 0 ? void 0 : _b.webkitSetPresentationMode(mode);\n }\n togglePiP(toggle) {\n return __awaiter$h(this, void 0, void 0, function* () {\n if (canUsePiPInChrome())\n return this.togglePiPInChrome(toggle);\n if (canUsePiPInSafari())\n return this.togglePiPInSafari(toggle);\n throw new Error('PiP API is not available.');\n });\n }\n onEnterPiP() {\n this.dispatch('isPiPActive', true);\n }\n onLeavePiP() {\n this.dispatch('isPiPActive', false);\n }\n addPresentationControllerListeners() {\n this.presentationController.on('change', mode => {\n this.dispatch('isPiPActive', mode === \"picture-in-picture\" /* PiP */);\n this.dispatch('isFullscreenActive', mode === \"fullscreen\" /* Fullscreen */);\n });\n }\n /** @internal */\n getAdapter() {\n return __awaiter$h(this, void 0, void 0, function* () {\n return {\n getInternalPlayer: () => __awaiter$h(this, void 0, void 0, function* () { return this.mediaEl; }),\n play: () => __awaiter$h(this, void 0, void 0, function* () { var _a; return (_a = this.mediaEl) === null || _a === void 0 ? void 0 : _a.play(); }),\n pause: () => __awaiter$h(this, void 0, void 0, function* () { var _b; return (_b = this.mediaEl) === null || _b === void 0 ? void 0 : _b.pause(); }),\n canPlay: (type) => __awaiter$h(this, void 0, void 0, function* () { return isString(type) && (audioRegex.test(type) || videoRegex.test(type)); }),\n setCurrentTime: (time) => __awaiter$h(this, void 0, void 0, function* () {\n if (this.mediaEl)\n this.mediaEl.currentTime = time;\n }),\n setMuted: (muted) => __awaiter$h(this, void 0, void 0, function* () {\n if (this.mediaEl)\n this.mediaEl.muted = muted;\n }),\n setVolume: (volume) => __awaiter$h(this, void 0, void 0, function* () {\n if (this.mediaEl)\n this.mediaEl.volume = volume / 100;\n }),\n canSetPlaybackRate: () => __awaiter$h(this, void 0, void 0, function* () { return true; }),\n setPlaybackRate: (rate) => __awaiter$h(this, void 0, void 0, function* () {\n if (this.mediaEl)\n this.mediaEl.playbackRate = rate;\n }),\n canSetPiP: () => __awaiter$h(this, void 0, void 0, function* () { return canUsePiP(); }),\n enterPiP: () => this.togglePiP(true),\n exitPiP: () => this.togglePiP(false),\n canSetFullscreen: () => __awaiter$h(this, void 0, void 0, function* () { return this.fullscreenController.isSupported; }),\n enterFullscreen: () => this.fullscreenController.requestFullscreen(),\n exitFullscreen: () => this.fullscreenController.exitFullscreen(),\n setCurrentTextTrack: (trackId) => __awaiter$h(this, void 0, void 0, function* () {\n if (trackId !== this.currentTextTrack)\n this.toggleTextTrackModes(trackId);\n }),\n setTextTrackVisibility: (isVisible) => __awaiter$h(this, void 0, void 0, function* () {\n this.isTextTrackVisible = isVisible;\n this.toggleTextTrackModes(this.currentTextTrack);\n }),\n };\n });\n }\n onHasCustomTextManagerChange() {\n if (this.hasCustomTextManager) {\n this.textTracksDisposal.empty();\n }\n else if (this.playbackReady) {\n this.listenToTextTracksForChanges();\n }\n }\n onShouldRenderNativeTextTracksChange() {\n if (this.hasCustomTextManager)\n return;\n this.toggleTextTrackModes(this.currentTextTrack);\n }\n onProviderConnect(event) {\n if (this.noConnect)\n event.stopImmediatePropagation();\n }\n onProviderDisconnect(event) {\n if (this.noConnect)\n event.stopImmediatePropagation();\n }\n getFilteredTextTracks() {\n const tracks = [];\n const textTrackList = Array.from(this.mediaEl.textTracks);\n for (let i = 0; i < textTrackList.length; i += 1) {\n const track = textTrackList[i];\n // Edge adds a track without a label; we don't want to use it.\n if ((track.kind === 'subtitles' || track.kind === 'captions') &&\n track.label) {\n tracks.push(textTrackList[i]);\n }\n }\n return tracks;\n }\n listenToTextTracksForChanges() {\n if (this.hasCustomTextManager)\n return;\n this.textTracksDisposal.empty();\n if (isUndefined(this.mediaEl))\n return;\n this.textTracksDisposal.add(listen(this.mediaEl.textTracks, 'change', this.onTextTracksChange.bind(this)));\n }\n onTextTracksChange() {\n var _a;\n const tracks = this.getFilteredTextTracks();\n let trackId = -1;\n for (let id = 0; id < tracks.length; id += 1) {\n if (tracks[id].mode === 'hidden') {\n // Do not break in case there is a following track with showing.\n trackId = id;\n }\n else if (tracks[id].mode === 'showing') {\n trackId = id;\n break;\n }\n }\n if (!this.shouldRenderNativeTextTracks &&\n ((_a = tracks[trackId]) === null || _a === void 0 ? void 0 : _a.mode) === 'showing') {\n tracks[trackId].mode = 'hidden';\n return;\n }\n if (this.shouldRenderNativeTextTracks) {\n this.isTextTrackVisible =\n trackId !== -1 && tracks[trackId].mode === 'showing';\n this.dispatch('isTextTrackVisible', this.isTextTrackVisible);\n }\n this.dispatch('textTracks', tracks);\n this.dispatch('currentTextTrack', this.shouldRenderNativeTextTracks && !this.isTextTrackVisible\n ? -1\n : trackId);\n }\n toggleTextTrackModes(newTrackId) {\n if (isNil(this.mediaEl))\n return;\n const { textTracks } = this.mediaEl;\n if (newTrackId === -1) {\n Array.from(textTracks).forEach(track => {\n track.mode = 'disabled';\n });\n }\n else {\n const oldTrack = textTracks[this.currentTextTrack];\n if (oldTrack)\n oldTrack.mode = 'disabled';\n }\n const nextTrack = textTracks[newTrackId];\n if (nextTrack) {\n nextTrack.mode =\n this.isTextTrackVisible && this.shouldRenderNativeTextTracks\n ? 'showing'\n : 'hidden';\n }\n this.dispatch('currentTextTrack', this.shouldRenderNativeTextTracks && !this.isTextTrackVisible\n ? -1\n : newTrackId);\n this.dispatch('isTextTrackVisible', this.isTextTrackVisible);\n }\n render() {\n const mediaProps = {\n autoplay: this.autoplay,\n muted: this.muted,\n playsinline: this.playsinline,\n playsInline: this.playsinline,\n 'x5-playsinline': this.playsinline,\n 'webkit-playsinline': this.playsinline,\n controls: this.controls,\n crossorigin: this.crossOrigin === '' ? 'anonymous' : this.crossOrigin,\n controlslist: this.controlsList,\n 'data-poster': !this.hasCustomPoster() ? this.poster : undefined,\n loop: this.loop,\n preload: this.preload,\n disablePictureInPicture: this.disablePiP,\n autoPictureInPicture: this.autoPiP,\n disableRemotePlayback: this.disableRemotePlayback,\n 'x-webkit-airplay': this.disableRemotePlayback ? 'deny' : 'allow',\n ref: (el) => {\n this.mediaEl = el;\n },\n onLoadedMetadata: this.onLoadedMetadata.bind(this),\n onProgress: this.onProgress.bind(this),\n onPlay: this.onPlay.bind(this),\n onPause: this.onPause.bind(this),\n onPlaying: this.onPlaying.bind(this),\n onSeeking: this.onSeeking.bind(this),\n onSeeked: this.onSeeked.bind(this),\n onRateChange: this.onRateChange.bind(this),\n onVolumeChange: this.onVolumeChange.bind(this),\n onDurationChange: this.onDurationChange.bind(this),\n onWaiting: this.onWaiting.bind(this),\n onSuspend: this.onSuspend.bind(this),\n onEnded: this.onEnded.bind(this),\n onError: this.onError.bind(this),\n };\n const audio = (h(\"audio\", Object.assign({ class: \"lazy\" }, mediaProps), h(\"slot\", null), \"Your browser does not support the\", h(\"code\", null, \"audio\"), \"element.\"));\n const video = (h(\"video\", Object.assign({ class: \"lazy\" }, mediaProps, {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onenterpictureinpicture: this.onEnterPiP.bind(this), onleavepictureinpicture: this.onLeavePiP.bind(this)\n }), h(\"slot\", null), \"Your browser does not support the\", h(\"code\", null, \"video\"), \"element.\"));\n return this.viewType === ViewType.Audio ? audio : video;\n }\n get host() { return this; }\n static get watchers() { return {\n \"mediaTitle\": [\"onMediaTitleChange\"],\n \"poster\": [\"onPosterChange\"],\n \"viewType\": [\"onViewTypeChange\"],\n \"hasCustomTextManager\": [\"onHasCustomTextManagerChange\"],\n \"shouldRenderNativeTextTracks\": [\"onShouldRenderNativeTextTracksChange\"]\n }; }\n static get style() { return fileCss; }\n};\n\nconst fullscreenControlCss = \":host([hidden]){display:none}\";\n\nvar __awaiter$g = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst FullscreenControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.canSetFullscreen = false;\n /**\n * The name of the enter fullscreen icon to resolve from the icon library.\n */\n this.enterIcon = 'fullscreen-enter';\n /**\n * The name of the exit fullscreen icon to resolve from the icon library.\n */\n this.exitIcon = 'fullscreen-exit';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n /** @inheritdoc */\n this.keys = 'f';\n /** @internal */\n this.isFullscreenActive = false;\n /** @internal */\n this.i18n = {};\n /** @internal */\n this.playbackReady = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['isFullscreenActive', 'playbackReady', 'i18n']);\n }\n onPlaybackReadyChange() {\n var _a;\n return __awaiter$g(this, void 0, void 0, function* () {\n const player = getPlayerFromRegistry(this);\n this.canSetFullscreen = (_a = (yield (player === null || player === void 0 ? void 0 : player.canSetFullscreen()))) !== null && _a !== void 0 ? _a : false;\n });\n }\n componentDidLoad() {\n this.onPlaybackReadyChange();\n }\n onClick() {\n const player = getPlayerFromRegistry(this);\n !this.isFullscreenActive\n ? player === null || player === void 0 ? void 0 : player.enterFullscreen()\n : player === null || player === void 0 ? void 0 : player.exitFullscreen();\n }\n render() {\n const tooltip = this.isFullscreenActive\n ? this.i18n.exitFullscreen\n : this.i18n.enterFullscreen;\n const tooltipWithHint = !isUndefined(this.keys)\n ? `${tooltip} (${this.keys})`\n : tooltip;\n return (h(Host, { hidden: !this.canSetFullscreen }, h(\"vm-control\", { label: this.i18n.fullscreen, keys: this.keys, pressed: this.isFullscreenActive, hidden: !this.canSetFullscreen, onClick: this.onClick.bind(this) }, h(\"vm-icon\", { name: this.isFullscreenActive ? this.exitIcon : this.enterIcon, library: this.icons }), h(\"vm-tooltip\", { hidden: this.hideTooltip, position: this.tooltipPosition, direction: this.tooltipDirection }, tooltipWithHint))));\n }\n static get watchers() { return {\n \"playbackReady\": [\"onPlaybackReadyChange\"]\n }; }\n static get style() { return fullscreenControlCss; }\n};\n\nvar __awaiter$f = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst HLS = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n this.hasAttached = false;\n /**\n * The NPM package version of the `hls.js` library to download and use if HLS is not natively\n * supported.\n */\n this.version = 'latest';\n /** @inheritdoc */\n this.preload = 'metadata';\n /** @internal */\n this.playbackReady = false;\n withComponentRegistry(this);\n withProviderConnect(this);\n withPlayerContext(this, ['playbackReady']);\n }\n connectedCallback() {\n this.dispatch = createProviderDispatcher(this);\n if (this.mediaEl)\n this.setupHls();\n }\n disconnectedCallback() {\n this.destroyHls();\n }\n get src() {\n if (isNil(this.videoProvider))\n return undefined;\n const sources = this.videoProvider.querySelectorAll('source');\n const currSource = Array.from(sources).find(source => hlsRegex.test(source.src) || hlsTypeRegex.test(source.type));\n return currSource === null || currSource === void 0 ? void 0 : currSource.src;\n }\n setupHls() {\n return __awaiter$f(this, void 0, void 0, function* () {\n if (!isUndefined(this.hls))\n return;\n try {\n const url = this.libSrc ||\n `https://cdn.jsdelivr.net/npm/hls.js@${this.version}/dist/hls.min.js`;\n const Hls = (yield loadSDK(url, 'Hls'));\n if (!Hls.isSupported()) {\n this.vmError.emit('hls.js is not supported');\n return;\n }\n this.hls = new Hls(this.config);\n this.hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n this.hasAttached = true;\n this.onSrcChange();\n });\n this.hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, () => {\n this.dispatch('audioTracks', this.hls.audioTracks);\n this.dispatch('currentAudioTrack', this.hls.audioTrack);\n });\n this.hls.on(Hls.Events.AUDIO_TRACK_SWITCHED, () => {\n this.dispatch('currentAudioTrack', this.hls.audioTrack);\n });\n this.hls.on(Hls.Events.ERROR, (event, data) => {\n if (data.fatal) {\n switch (data.type) {\n case Hls.ErrorTypes.NETWORK_ERROR:\n this.hls.startLoad();\n break;\n case Hls.ErrorTypes.MEDIA_ERROR:\n this.hls.recoverMediaError();\n break;\n default:\n this.destroyHls();\n break;\n }\n }\n this.vmError.emit({ event, data });\n });\n this.hls.on(Hls.Events.MANIFEST_PARSED, () => {\n this.dispatch('mediaType', MediaType.Video);\n this.dispatch('currentSrc', this.src);\n this.dispatchLevels();\n });\n this.hls.on(Hls.Events.LEVEL_LOADED, (_, data) => {\n if (!this.playbackReady) {\n this.dispatch('duration', data.details.totalduration);\n this.dispatch('playbackReady', true);\n }\n });\n this.hls.attachMedia(this.mediaEl);\n }\n catch (e) {\n this.vmError.emit(e);\n }\n });\n }\n dispatchLevels() {\n if (!this.hls.levels || this.hls.levels.length === 0)\n return;\n this.dispatch('playbackQualities', [\n 'Auto',\n ...this.hls.levels.map(this.levelToPlaybackQuality),\n ]);\n this.dispatch('playbackQuality', 'Auto');\n }\n levelToPlaybackQuality(level) {\n return level === -1 ? 'Auto' : `${level.height}p`;\n }\n findLevelIndexFromQuality(quality) {\n return this.hls.levels.findIndex((level) => this.levelToPlaybackQuality(level) === quality);\n }\n destroyHls() {\n var _a;\n (_a = this.hls) === null || _a === void 0 ? void 0 : _a.destroy();\n this.hasAttached = false;\n }\n onMediaElChange(event) {\n return __awaiter$f(this, void 0, void 0, function* () {\n this.destroyHls();\n if (isUndefined(event.detail))\n return;\n this.mediaEl = event.detail;\n // Need a small delay incase the media element changes rapidly and Hls.js can't reattach.\n setTimeout(() => __awaiter$f(this, void 0, void 0, function* () {\n yield this.setupHls();\n }), 50);\n });\n }\n onSrcChange() {\n var _a;\n return __awaiter$f(this, void 0, void 0, function* () {\n if (this.hasAttached && this.hls.url !== this.src) {\n this.vmLoadStart.emit();\n (_a = this.hls) === null || _a === void 0 ? void 0 : _a.loadSource(this.src);\n }\n });\n }\n /** @internal */\n getAdapter() {\n var _a, _b;\n return __awaiter$f(this, void 0, void 0, function* () {\n const adapter = (_b = (yield ((_a = this.videoProvider) === null || _a === void 0 ? void 0 : _a.getAdapter()))) !== null && _b !== void 0 ? _b : {};\n const canVideoProviderPlay = adapter.canPlay;\n return Object.assign(Object.assign({}, adapter), { getInternalPlayer: () => __awaiter$f(this, void 0, void 0, function* () { return this.hls; }), canPlay: (type) => __awaiter$f(this, void 0, void 0, function* () {\n var _c;\n return (isString(type) && hlsRegex.test(type)) ||\n ((_c = canVideoProviderPlay === null || canVideoProviderPlay === void 0 ? void 0 : canVideoProviderPlay(type)) !== null && _c !== void 0 ? _c : false);\n }), canSetPlaybackQuality: () => __awaiter$f(this, void 0, void 0, function* () { var _d, _e; return ((_e = (_d = this.hls) === null || _d === void 0 ? void 0 : _d.levels) === null || _e === void 0 ? void 0 : _e.length) > 0; }), setPlaybackQuality: (quality) => __awaiter$f(this, void 0, void 0, function* () {\n if (!isUndefined(this.hls)) {\n this.hls.currentLevel = this.findLevelIndexFromQuality(quality);\n // Update the provider cache.\n this.dispatch('playbackQuality', quality);\n }\n }), setCurrentAudioTrack: (trackId) => __awaiter$f(this, void 0, void 0, function* () {\n if (!isUndefined(this.hls)) {\n this.hls.audioTrack = trackId;\n }\n }) });\n });\n }\n render() {\n return (h(\"vm-video\", { willAttach: true, crossOrigin: this.crossOrigin, preload: this.preload, poster: this.poster, controlsList: this.controlsList, autoPiP: this.autoPiP, disablePiP: this.disablePiP, disableRemotePlayback: this.disableRemotePlayback, mediaTitle: this.mediaTitle, ref: (el) => {\n this.videoProvider = el;\n } }, h(\"slot\", null)));\n }\n};\n\n/**\n * INSPIRED BY: https://github.com/shoelace-style/shoelace/blob/next/src/components/icon-library/icon-library-registry.ts\n */\nconst ICONS_BASE_CDN_URL = 'https://cdn.jsdelivr.net/npm/@vime/core@latest/icons';\nconst registry = new Map(Object.entries({\n vime: iconName => `${ICONS_BASE_CDN_URL}/vime/vm-${iconName}.svg`,\n material: iconName => `${ICONS_BASE_CDN_URL}/material/md-${iconName}.svg`,\n}));\nconst watch = new Set();\nfunction withIconRegistry(component) {\n const el = getElement(component);\n createStencilHook(component, () => {\n watch.add(el);\n }, () => {\n watch.delete(el);\n });\n}\nconst getIconLibraryResolver = (name) => registry.get(name);\nfunction registerIconLibrary(name, resolver) {\n if (!isUndefined(resolver)) {\n registry.set(name, resolver);\n }\n // Redraw watched icons.\n watch.forEach(iconEl => {\n if (iconEl.library === name)\n iconEl.redraw();\n });\n}\nfunction deregisterIconLibrary(name) {\n registry.delete(name);\n}\n\n/**\n * INSPIRED BY: https://github.com/shoelace-style/shoelace/blob/next/src/components/icon/request.ts\n */\nvar __awaiter$e = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst iconFiles = new Map();\nconst requestIcon = (url) => {\n if (iconFiles.has(url))\n return iconFiles.get(url);\n const request = fetch(url).then((response) => __awaiter$e(void 0, void 0, void 0, function* () {\n if (response.ok) {\n const div = document.createElement('div');\n div.innerHTML = yield response.text();\n const svg = div.firstElementChild;\n return {\n ok: response.ok,\n status: response.status,\n svg: svg && svg.tagName.toLowerCase() === 'svg' ? svg.outerHTML : '',\n };\n }\n return {\n ok: response.ok,\n status: response.status,\n };\n }));\n iconFiles.set(url, request);\n return request;\n};\n\nconst iconCss = \":host{display:inline-block;width:1em;height:1em;contain:strict;box-sizing:content-box !important}.icon,svg{display:block;height:100%;width:100%;transition:var(--vm-icon-transition);transform:var(--vm-icon-transform);fill:var(--vm-icon-fill, currentColor);stroke:var(--vm-icon-stroke)}\";\n\n/**\n * INSPIRED BY: https://github.com/shoelace-style/shoelace/blob/next/src/components/icon/icon.tsx\n */\nvar __awaiter$d = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst parser = new DOMParser();\nconst Icon = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmLoad = createEvent(this, \"vmLoad\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n /** @internal */\n this.icons = 'material';\n withComponentRegistry(this);\n withIconRegistry(this);\n }\n handleChange() {\n this.setIcon();\n }\n connectedCallback() {\n withPlayerContext(this, ['icons']);\n }\n componentDidLoad() {\n this.setIcon();\n }\n /**\n * @internal Fetches the icon and redraws it. Used to handle library registrations.\n */\n redraw() {\n return __awaiter$d(this, void 0, void 0, function* () {\n this.setIcon();\n });\n }\n getLabel() {\n let label = '';\n if (this.label) {\n label = this.label;\n }\n else if (this.name) {\n label = this.name.replace(/-/g, ' ');\n }\n else if (this.src) {\n label = this.src\n .replace(/.*\\//, '')\n .replace(/-/g, ' ')\n .replace(/\\.svg/i, '');\n }\n return label;\n }\n setIcon() {\n var _a;\n return __awaiter$d(this, void 0, void 0, function* () {\n const resolver = getIconLibraryResolver((_a = this.library) !== null && _a !== void 0 ? _a : this.icons);\n let url = this.src;\n if (this.name && resolver) {\n url = resolver(this.name);\n }\n if (url) {\n try {\n const file = yield requestIcon(url);\n if (file.ok) {\n const doc = parser.parseFromString(file.svg, 'text/html');\n const svg = doc.body.querySelector('svg');\n if (svg) {\n this.svg = svg.outerHTML;\n this.vmLoad.emit();\n }\n else {\n this.svg = '';\n this.vmError.emit({ status: file.status });\n }\n }\n }\n catch (_b) {\n this.vmError.emit();\n }\n }\n });\n }\n render() {\n return (h(\"div\", { class: \"icon\", role: \"img\", \"aria-label\": this.getLabel(), innerHTML: this.svg }));\n }\n static get watchers() { return {\n \"name\": [\"handleChange\"],\n \"src\": [\"handleChange\"],\n \"library\": [\"handleChange\"],\n \"icons\": [\"handleChange\"]\n }; }\n static get style() { return iconCss; }\n};\n\nconst IconLibrary = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.icons = 'material';\n withComponentRegistry(this);\n withPlayerContext(this, ['icons']);\n }\n handleUpdate() {\n this.register();\n }\n connectedCallback() {\n this.register();\n }\n disconnectedCallback() {\n if (!isUndefined(this.name))\n deregisterIconLibrary(this.name);\n }\n register() {\n var _a;\n registerIconLibrary((_a = this.name) !== null && _a !== void 0 ? _a : this.icons, this.name ? this.resolver : undefined);\n }\n get host() { return this; }\n static get watchers() { return {\n \"name\": [\"handleUpdate\"],\n \"resolver\": [\"handleUpdate\"],\n \"icons\": [\"handleUpdate\"]\n }; }\n};\n\nconst liveIndicatorCss = \".liveIndicator{display:flex;align-items:center;font-size:13px;font-weight:bold;letter-spacing:0.6px;color:var(--vm-control-color)}.liveIndicator.hidden{display:none}.indicator{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;background-color:var(--vm-live-indicator-color, red)}\";\n\nconst LiveIndicator = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.isLive = false;\n /** @internal */\n this.i18n = {};\n withComponentRegistry(this);\n withPlayerContext(this, ['isLive', 'i18n']);\n }\n render() {\n return (h(\"div\", { class: {\n liveIndicator: true,\n hidden: !this.isLive,\n } }, h(\"div\", { class: \"indicator\" }), this.i18n.live));\n }\n static get style() { return liveIndicatorCss; }\n};\n\nconst loadingScreenCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-loading-screen-z-index);display:flex;align-items:center;justify-content:center}.loadingScreen{opacity:100;transition:var(--vm-fade-transition)}.loadingScreen.inactive{opacity:0}.dotPulse{position:relative;left:-9999px;width:var(--vm-loading-screen-dot-size);height:var(--vm-loading-screen-dot-size);border-radius:calc(var(--vm-loading-screen-dot-size) / 2);background-color:var(--vm-loading-screen-dot-color);color:var(--vm-loading-screen-dot-color);box-shadow:9999px 0 0 calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color);animation:dotPulse var(--vm-loading-screen-pulse-duration) infinite linear;animation-delay:calc(var(--vm-loading-screen-pulse-duration) / 6)}.dotPulse::before,.dotPulse::after{content:'';display:inline-block;position:absolute;top:0;width:var(--vm-loading-screen-dot-size);height:var(--vm-loading-screen-dot-size);border-radius:calc(var(--vm-loading-screen-dot-size) / 2);background-color:var(--vm-loading-screen-dot-color);color:var(--vm-loading-screen-dot-color)}.dotPulse::before{box-shadow:9984px 0 0 calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color);animation:dotPulseBefore var(--vm-loading-screen-pulse-duration) infinite\\n linear;animation-delay:0s}.dotPulse::after{box-shadow:10014px 0 0 calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color);animation:dotPulseAfter var(--vm-loading-screen-pulse-duration) infinite\\n linear;animation-delay:calc(var(--vm-loading-screen-pulse-duration) / 3)}@keyframes dotPulseBefore{0%{box-shadow:9984px 0 0\\n calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color)}30%{box-shadow:9984px 0 0 2px var(--vm-loading-screen-dot-color)}60%,100%{box-shadow:9984px 0 0\\n calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color)}}@keyframes dotPulse{0%{box-shadow:9999px 0 0\\n calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color)}30%{box-shadow:9999px 0 0 2px var(--vm-loading-screen-dot-color)}60%,100%{box-shadow:9999px 0 0\\n calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color)}}@keyframes dotPulseAfter{0%{box-shadow:10014px 0 0\\n calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color)}30%{box-shadow:10014px 0 0 2px var(--vm-loading-screen-dot-color)}60%,100%{box-shadow:10014px 0 0\\n calc(calc(var(--vm-loading-screen-dot-size) / 2) * -1)\\n var(--vm-loading-screen-dot-color)}}\";\n\nconst LoadingScreen = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.playbackReady = false;\n /**\n * Whether the loading dots are hidden or not.\n */\n this.hideDots = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['playbackReady']);\n }\n render() {\n return (h(\"div\", { class: {\n loadingScreen: true,\n inactive: this.playbackReady,\n } }, h(\"slot\", null), !this.hideDots && h(\"div\", { class: \"dotPulse\" })));\n }\n static get style() { return loadingScreenCss; }\n};\n\nfunction unwrapSubmenu(el) {\n if (el.tagName.toLowerCase() !== 'vm-submenu')\n return el;\n const submenu = el;\n return submenu.shadowRoot.querySelector('vm-menu-item');\n}\nfunction unwrapRadioGroup(el) {\n var _a;\n if (el.tagName.toLowerCase() !== 'vm-menu-radio-group')\n return el;\n const radioGroup = el;\n const slot = radioGroup.shadowRoot.querySelector('slot');\n const assignedElements = Array.from((_a = slot === null || slot === void 0 ? void 0 : slot.assignedElements()) !== null && _a !== void 0 ? _a : []);\n return assignedElements\n .filter(radio => radio.tagName.toLowerCase() === 'vm-menu-radio')\n .map(radio => radio.shadowRoot.querySelector('vm-menu-item'));\n}\nfunction menuItemHunter(assignedElements) {\n if (isUndefined(assignedElements))\n return [];\n const allowed = ['vm-menu-item', 'vm-menu-radio-group', 'vm-submenu'];\n return Array.from(assignedElements !== null && assignedElements !== void 0 ? assignedElements : [])\n .filter(el => allowed.includes(el.tagName.toLowerCase()))\n .map(el => unwrapSubmenu(el))\n .map(el => unwrapRadioGroup(el))\n .reduce((acc, val) => acc.concat(val), []);\n}\n\nconst menuCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;pointer-events:none;z-index:var(--vm-menu-z-index)}:host([active]){pointer-events:auto;z-index:calc(var(--vm-menu-z-index) + 1)}.menu{position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;transition:var(--vm-menu-transition)}.menu.slideIn{transform:translateX(0)}.menu[aria-hidden='true'].slideInFromLeft{transform:translateX(-100%)}.menu[aria-hidden='true'].slideInFromRight{transform:translateX(100%)}.container{display:flex;flex-direction:column;position:relative;text-align:left;width:100%;height:100%;color:var(--vm-menu-color);background:var(--vm-menu-bg);font-size:var(--vm-menu-font-size);font-weight:var(--vm-menu-font-weight)}.menu:focus{outline:0}\";\n\nvar __awaiter$c = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst Menu = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmOpen = createEvent(this, \"vmOpen\", 7);\n this.vmClose = createEvent(this, \"vmClose\", 7);\n this.vmFocus = createEvent(this, \"vmFocus\", 7);\n this.vmBlur = createEvent(this, \"vmBlur\", 7);\n this.vmActiveSubmenuChange = createEvent(this, \"vmActiveSubmenuChange\", 7);\n this.vmActiveMenuItemChange = createEvent(this, \"vmActiveMenuItemChange\", 7);\n this.vmMenuHeightChange = createEvent(this, \"vmMenuHeightChange\", 3);\n this.hasDisconnected = false;\n /**\n * Whether the menu is open/visible.\n */\n this.active = false;\n withComponentRegistry(this);\n }\n onActiveMenuitemChange() {\n this.vmActiveMenuItemChange.emit(this.activeMenuItem);\n }\n onActiveSubmenuChange() {\n this.vmActiveSubmenuChange.emit(this.activeSubmenu);\n }\n onActiveChange() {\n var _a;\n if (this.hasDisconnected)\n return;\n this.active ? this.vmOpen.emit(this.host) : this.vmClose.emit(this.host);\n if (((_a = this.controller) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) === 'vm-menu-item') {\n this.controller.expanded = true;\n }\n }\n connectedCallback() {\n this.hasDisconnected = false;\n }\n componentDidRender() {\n writeTask(() => {\n if (!this.hasDisconnected)\n this.calculateHeight();\n });\n }\n disconnectedCallback() {\n this.controller = undefined;\n this.hasDisconnected = true;\n }\n /**\n * Focuses the menu.\n */\n focusMenu() {\n var _a;\n return __awaiter$c(this, void 0, void 0, function* () {\n (_a = this.menu) === null || _a === void 0 ? void 0 : _a.focus();\n });\n }\n /**\n * Removes focus from the menu.\n */\n blurMenu() {\n var _a;\n return __awaiter$c(this, void 0, void 0, function* () {\n (_a = this.menu) === null || _a === void 0 ? void 0 : _a.blur();\n });\n }\n /**\n * Returns the currently focused menu item.\n */\n getActiveMenuItem() {\n return __awaiter$c(this, void 0, void 0, function* () {\n return this.activeMenuItem;\n });\n }\n /**\n * Sets the currently focused menu item.\n */\n setActiveMenuItem(item) {\n return __awaiter$c(this, void 0, void 0, function* () {\n item === null || item === void 0 ? void 0 : item.focusItem();\n this.activeMenuItem = item;\n });\n }\n /**\n * Calculates the height of the settings menu based on its children.\n */\n calculateHeight() {\n var _a, _b;\n return __awaiter$c(this, void 0, void 0, function* () {\n let height = 0;\n if (this.activeSubmenu) {\n const submenu = yield this.activeSubmenu.getMenu();\n height = (_a = (yield (submenu === null || submenu === void 0 ? void 0 : submenu.calculateHeight()))) !== null && _a !== void 0 ? _a : 0;\n height += yield this.activeSubmenu.getControllerHeight();\n }\n else {\n const children = ((_b = this.container) === null || _b === void 0 ? void 0 : _b.firstChild).assignedElements({ flatten: true });\n children === null || children === void 0 ? void 0 : children.forEach(child => {\n height += parseFloat(window.getComputedStyle(child).height);\n });\n }\n this.vmMenuHeightChange.emit(height);\n return height;\n });\n }\n onOpenSubmenu(event) {\n event.stopPropagation();\n if (!isUndefined(this.activeSubmenu))\n this.activeSubmenu.active = false;\n this.activeSubmenu = event.detail;\n this.getChildren().forEach(child => {\n if (child !== this.activeSubmenu) {\n child.style.opacity = '0';\n child.style.visibility = 'hidden';\n }\n });\n writeTask(() => {\n this.activeSubmenu.active = true;\n });\n }\n onCloseSubmenu(event) {\n event === null || event === void 0 ? void 0 : event.stopPropagation();\n if (!isUndefined(this.activeSubmenu))\n this.activeSubmenu.active = false;\n this.getChildren().forEach(child => {\n if (child !== this.activeSubmenu) {\n child.style.opacity = '';\n child.style.visibility = '';\n }\n });\n writeTask(() => {\n this.activeSubmenu = undefined;\n });\n }\n onWindowClick() {\n this.onCloseSubmenu();\n this.onClose();\n }\n onWindowKeyDown(event) {\n if (this.active && event.key === 'Escape') {\n this.onCloseSubmenu();\n this.onClose();\n this.focusController();\n }\n }\n getChildren() {\n var _a;\n const assignedElements = (_a = this.host\n .shadowRoot.querySelector('slot')) === null || _a === void 0 ? void 0 : _a.assignedElements({ flatten: true });\n return (assignedElements !== null && assignedElements !== void 0 ? assignedElements : []);\n }\n getMenuItems() {\n var _a;\n const assignedElements = (_a = this.host\n .shadowRoot.querySelector('slot')) === null || _a === void 0 ? void 0 : _a.assignedElements({ flatten: true });\n return menuItemHunter(assignedElements);\n }\n focusController() {\n var _a, _b, _c, _d, _e;\n if (!isUndefined((_a = this.controller) === null || _a === void 0 ? void 0 : _a.focusItem)) {\n (_b = this.controller) === null || _b === void 0 ? void 0 : _b.focusItem();\n }\n else if (!isUndefined((_c = this.controller) === null || _c === void 0 ? void 0 : _c.focusControl)) {\n (_d = this.controller) === null || _d === void 0 ? void 0 : _d.focusControl();\n }\n else {\n (_e = this.controller) === null || _e === void 0 ? void 0 : _e.focus();\n }\n }\n triggerMenuItem() {\n var _a;\n if (isUndefined(this.activeMenuItem))\n return;\n this.activeMenuItem.click();\n // If it controls a menu then focus it essentially opening it.\n (_a = this.activeMenuItem.menu) === null || _a === void 0 ? void 0 : _a.focusMenu();\n }\n onClose() {\n this.activeMenuItem = undefined;\n this.active = false;\n }\n onClick(event) {\n // Stop the event from propagating while playing with menu so that when it is clicked outside\n // the menu we can close it in the `onWindowClick` handler above.\n event.stopPropagation();\n }\n onFocus() {\n var _a;\n this.active = true;\n [this.activeMenuItem] = this.getMenuItems();\n (_a = this.activeMenuItem) === null || _a === void 0 ? void 0 : _a.focusItem();\n this.vmFocus.emit();\n }\n onBlur() {\n this.vmBlur.emit();\n }\n foucsMenuItem(items, index) {\n if (index < 0)\n index = items.length - 1;\n if (index > items.length - 1)\n index = 0;\n this.activeMenuItem = items[index];\n this.activeMenuItem.focusItem();\n }\n onKeyDown(event) {\n if (!this.active)\n return;\n event.preventDefault();\n event.stopPropagation();\n const items = this.getMenuItems();\n let index = items.findIndex(item => item === this.activeMenuItem);\n switch (event.key) {\n case 'Escape':\n this.onClose();\n this.focusController();\n break;\n case 'ArrowDown':\n case 'Tab':\n this.foucsMenuItem(items, (index += 1));\n break;\n case 'ArrowUp':\n this.foucsMenuItem(items, (index -= 1));\n break;\n case 'ArrowLeft':\n this.onClose();\n this.focusController();\n break;\n case 'ArrowRight':\n case 'Enter':\n case ' ':\n this.triggerMenuItem();\n break;\n case 'Home':\n case 'PageUp':\n this.foucsMenuItem(items, 0);\n break;\n case 'End':\n case 'PageDown':\n this.foucsMenuItem(items, items.length - 1);\n break;\n }\n }\n render() {\n var _a, _b, _c;\n return (h(\"div\", { id: this.identifier, class: {\n menu: true,\n slideIn: !isUndefined(this.slideInDirection),\n slideInFromLeft: this.slideInDirection === 'left',\n slideInFromRight: this.slideInDirection === 'right',\n }, role: \"menu\", tabindex: \"-1\", \"aria-labelledby\": (_b = (_a = this.controller) === null || _a === void 0 ? void 0 : _a.identifier) !== null && _b !== void 0 ? _b : (_c = this.controller) === null || _c === void 0 ? void 0 : _c.id, \"aria-hidden\": !this.active ? 'true' : 'false', onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this), onClick: this.onClick.bind(this), onKeyDown: this.onKeyDown.bind(this), ref: el => {\n this.menu = el;\n } }, h(\"div\", { class: \"container\", ref: el => {\n this.container = el;\n } }, h(\"slot\", null))));\n }\n get host() { return this; }\n static get watchers() { return {\n \"activeMenuItem\": [\"onActiveMenuitemChange\"],\n \"activeSubmenu\": [\"onActiveSubmenuChange\"],\n \"active\": [\"onActiveChange\"]\n }; }\n static get style() { return menuCss; }\n};\n\nconst menuItemCss = \":host{display:block}.menuItem{display:flex;position:relative;align-items:center;flex-direction:row;cursor:pointer;color:var(--vm-menu-color);background:var(--vm-menu-bg);font-size:var(--vm-menu-font-size);font-weight:var(--vm-menu-font-weight);padding:var(--vm-menu-item-padding);touch-action:manipulation;box-sizing:border-box}.menuItem:focus{outline:0}.menuItem.hidden{display:none}.menuItem.tapHighlight{background:var(--vm-menu-item-tap-highlight)}.menuItem.showDivider{border-bottom:0.5px solid var(--vm-menu-item-divider-color)}.menuItem.notTouch:hover,.menuItem.notTouch:focus{outline:0;color:var(--vm-menu-item-focus-color);background-color:var(--vm-menu-item-focus-bg)}.menuItem[aria-expanded='true']{position:absolute;z-index:2;top:0;width:100%}.menuItem[aria-hidden='true']{display:none}.menuItem[aria-checked='true'] vm-icon{opacity:1;visibility:visible}vm-icon{display:inline-block}vm-icon{fill:currentColor;pointer-events:none;font-size:var(--vm-menu-item-check-icon-size);margin-right:10px;opacity:0;visibility:hidden;transition:var(--vm-fade-transition)}.hint{display:inline-block;margin-left:auto;overflow:hidden;pointer-events:none;margin-right:6px;font-size:var(--vm-menu-item-hint-font-size);opacity:var(--vm-menu-item-hint-opacity);color:var(--vm-menu-item-hint-color)}.badge{display:inline-block;line-height:1;overflow:hidden;pointer-events:none;margin-left:6px;color:var(--vm-menu-item-badge-color);background:var(--vm-menu-item-badge-bg);font-size:var(--vm-menu-item-badge-font-size)}.spacer{flex:1}.arrow{color:var(--vm-menu-item-arrow-color);border:2px solid;padding:2px;display:inline-block;border-width:0 2px 2px 0}.arrow.left{margin-right:6px;transform:rotate(135deg)}.arrow.right{transform:rotate(-45deg);opacity:0.38}\";\n\nvar __awaiter$b = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst MenuItem = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmFocus = createEvent(this, \"vmFocus\", 7);\n this.vmBlur = createEvent(this, \"vmBlur\", 7);\n this.showTapHighlight = false;\n /**\n * Whether the item is displayed or not.\n */\n this.hidden = false;\n /**\n * The name of the checkmark icon to resolve from the icon library.\n */\n this.checkIcon = 'check';\n /** @internal */\n this.isTouch = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['isTouch']);\n }\n /**\n * Focuses the menu item.\n */\n focusItem() {\n var _a;\n return __awaiter$b(this, void 0, void 0, function* () {\n (_a = this.menuItem) === null || _a === void 0 ? void 0 : _a.focus();\n });\n }\n /**\n * Removes focus from the menu item.\n */\n blurItem() {\n var _a;\n return __awaiter$b(this, void 0, void 0, function* () {\n (_a = this.menuItem) === null || _a === void 0 ? void 0 : _a.blur();\n });\n }\n /**\n * Returns the height of the menu item.\n */\n getHeight() {\n return __awaiter$b(this, void 0, void 0, function* () {\n return parseFloat(this.menuItem ? window.getComputedStyle(this.menuItem).height : '0');\n });\n }\n onClick() {\n if (!isNil(this.menu))\n this.menu.active = !this.expanded;\n }\n onFocus() {\n this.vmFocus.emit();\n }\n onBlur() {\n this.vmBlur.emit();\n }\n onTouchStart() {\n this.showTapHighlight = true;\n }\n onTouchEnd() {\n setTimeout(() => {\n this.showTapHighlight = false;\n }, 100);\n }\n onMouseLeave() {\n var _a;\n (_a = this.menuItem) === null || _a === void 0 ? void 0 : _a.blur();\n }\n render() {\n var _a, _b, _c, _d;\n const isCheckedDefined = !isUndefined(this.checked);\n const isMenuDefined = !isUndefined(this.menu);\n const hasExpanded = this.expanded ? 'true' : 'false';\n const isChecked = this.checked ? 'true' : 'false';\n const showCheckedIcon = isCheckedDefined && !isUndefined(this.checkIcon);\n const showLeftNavArrow = isMenuDefined && this.expanded;\n const showRightNavArrow = isMenuDefined && !this.expanded;\n const showHint = !isUndefined(this.hint) &&\n !isCheckedDefined &&\n (!isMenuDefined || !this.expanded);\n const showBadge = !isUndefined(this.badge) && !showHint && !showRightNavArrow;\n const hasSpacer = showHint || showRightNavArrow;\n return (h(\"div\", { class: {\n menuItem: true,\n notTouch: !this.isTouch,\n tapHighlight: this.showTapHighlight,\n showDivider: isMenuDefined && ((_a = this.expanded) !== null && _a !== void 0 ? _a : false),\n }, id: this.identifier, role: isCheckedDefined ? 'menuitemradio' : 'menuitem', tabindex: \"0\", \"aria-label\": this.label, \"aria-hidden\": this.hidden ? 'true' : 'false', \"aria-haspopup\": isMenuDefined ? 'true' : undefined, \"aria-controls\": (_c = (_b = this.menu) === null || _b === void 0 ? void 0 : _b.identifier) !== null && _c !== void 0 ? _c : (_d = this.menu) === null || _d === void 0 ? void 0 : _d.id, \"aria-expanded\": isMenuDefined ? hasExpanded : undefined, \"aria-checked\": isCheckedDefined ? isChecked : undefined, onClick: this.onClick.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this), onTouchStart: this.onTouchStart.bind(this), onTouchEnd: this.onTouchEnd.bind(this), onMouseLeave: this.onMouseLeave.bind(this), ref: el => {\n this.menuItem = el;\n } }, showCheckedIcon && (h(\"vm-icon\", { name: this.checkIcon, library: this.icons })), showLeftNavArrow && h(\"span\", { class: \"arrow left\" }), this.label, hasSpacer && h(\"span\", { class: \"spacer\" }), showHint && h(\"span\", { class: \"hint\" }, this.hint), showBadge && h(\"span\", { class: \"badge\" }, this.badge), showRightNavArrow && h(\"span\", { class: \"arrow right\" })));\n }\n get host() { return this; }\n static get style() { return menuItemCss; }\n};\n\nconst MenuRadio = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmCheck = createEvent(this, \"vmCheck\", 7);\n /**\n * Whether the radio item is selected or not.\n */\n this.checked = false;\n /**\n * The URL to an SVG element or fragment to load.\n */\n this.checkIcon = 'check';\n withComponentRegistry(this);\n }\n onClick() {\n this.checked = true;\n this.vmCheck.emit();\n }\n render() {\n return (h(\"vm-menu-item\", { label: this.label, checked: this.checked, badge: this.badge, checkIcon: this.checkIcon, icons: this.icons, onClick: this.onClick.bind(this) }));\n }\n};\n\nconst MenuRadioGroup = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmCheck = createEvent(this, \"vmCheck\", 7);\n withComponentRegistry(this);\n }\n onValueChange() {\n var _a;\n (_a = this.findRadios()) === null || _a === void 0 ? void 0 : _a.forEach(radio => {\n radio.checked = radio.value === this.value;\n });\n }\n connectedCallback() {\n this.onValueChange();\n }\n componentDidLoad() {\n this.onValueChange();\n }\n onSelectionChange(event) {\n const radio = event.target;\n this.value = radio.value;\n }\n findRadios() {\n var _a;\n return (_a = this.host\n .shadowRoot.querySelector('slot')) === null || _a === void 0 ? void 0 : _a.assignedElements();\n }\n render() {\n return h(\"slot\", null);\n }\n get host() { return this; }\n static get watchers() { return {\n \"value\": [\"onValueChange\"]\n }; }\n};\n\nconst MuteControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmFocus = createEvent(this, \"vmFocus\", 7);\n this.vmBlur = createEvent(this, \"vmBlur\", 7);\n /**\n * The name of the low volume icon to resolve from the icon library.\n */\n this.lowVolumeIcon = 'volume-low';\n /**\n * The name of the high volume icon to resolve from the icon library.\n */\n this.highVolumeIcon = 'volume-high';\n /**\n * The name of the muted volume icon to resolve from the icon library.\n */\n this.mutedIcon = 'volume-mute';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n /** @inheritdoc */\n this.keys = 'm';\n /** @internal */\n this.volume = 50;\n /** @internal */\n this.muted = false;\n /** @internal */\n this.i18n = {};\n withComponentRegistry(this);\n withPlayerContext(this, ['muted', 'volume', 'i18n']);\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n }\n getIcon() {\n const volumeIcon = this.volume < 50 ? this.lowVolumeIcon : this.highVolumeIcon;\n return this.muted || this.volume === 0 ? this.mutedIcon : volumeIcon;\n }\n onClick() {\n this.dispatch('muted', !this.muted);\n }\n render() {\n const tooltip = this.muted ? this.i18n.unmute : this.i18n.mute;\n const tooltipWithHint = !isUndefined(this.keys)\n ? `${tooltip} (${this.keys})`\n : tooltip;\n return (h(\"vm-control\", { label: this.i18n.mute, pressed: this.muted, keys: this.keys, onClick: this.onClick.bind(this) }, h(\"vm-icon\", { name: this.getIcon(), library: this.icons }), h(\"vm-tooltip\", { hidden: this.hideTooltip, position: this.tooltipPosition, direction: this.tooltipDirection }, tooltipWithHint)));\n }\n};\n\nconst pipControlCss = \":host([hidden]){display:none}\";\n\nvar __awaiter$a = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst PiPControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.canSetPiP = false;\n /**\n * The name of the enter pip icon to resolve from the icon library.\n */\n this.enterIcon = 'pip-enter';\n /**\n * The name of the exit pip icon to resolve from the icon library.\n */\n this.exitIcon = 'pip-exit';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n /** @inheritdoc */\n this.keys = 'p';\n /** @internal */\n this.isPiPActive = false;\n /** @internal */\n this.i18n = {};\n /** @internal */\n this.playbackReady = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['isPiPActive', 'playbackReady', 'i18n']);\n }\n onPlaybackReadyChange() {\n var _a;\n return __awaiter$a(this, void 0, void 0, function* () {\n const player = getPlayerFromRegistry(this);\n this.canSetPiP = (_a = (yield (player === null || player === void 0 ? void 0 : player.canSetPiP()))) !== null && _a !== void 0 ? _a : false;\n });\n }\n componentDidLoad() {\n this.onPlaybackReadyChange();\n }\n onClick() {\n const player = getPlayerFromRegistry(this);\n !this.isPiPActive ? player === null || player === void 0 ? void 0 : player.enterPiP() : player === null || player === void 0 ? void 0 : player.exitPiP();\n }\n render() {\n const tooltip = this.isPiPActive ? this.i18n.exitPiP : this.i18n.enterPiP;\n const tooltipWithHint = !isUndefined(this.keys)\n ? `${tooltip} (${this.keys})`\n : tooltip;\n return (h(Host, { hidden: !this.canSetPiP }, h(\"vm-control\", { label: this.i18n.pip, keys: this.keys, pressed: this.isPiPActive, hidden: !this.canSetPiP, onClick: this.onClick.bind(this) }, h(\"vm-icon\", { name: this.isPiPActive ? this.exitIcon : this.enterIcon, library: this.icons }), h(\"vm-tooltip\", { hidden: this.hideTooltip, position: this.tooltipPosition, direction: this.tooltipDirection }, tooltipWithHint))));\n }\n static get watchers() { return {\n \"playbackReady\": [\"onPlaybackReadyChange\"]\n }; }\n static get style() { return pipControlCss; }\n};\n\nconst PlaybackControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * The name of the play icon to resolve from the icon library.\n */\n this.playIcon = 'play';\n /**\n * The name of the pause icon to resolve from the icon library.\n */\n this.pauseIcon = 'pause';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n /** @inheritdoc */\n this.keys = 'k';\n /** @internal */\n this.paused = true;\n /** @internal */\n this.i18n = {};\n withComponentRegistry(this);\n withPlayerContext(this, ['paused', 'i18n']);\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n }\n onClick() {\n this.dispatch('paused', !this.paused);\n }\n render() {\n const tooltip = this.paused ? this.i18n.play : this.i18n.pause;\n const tooltipWithHint = !isUndefined(this.keys)\n ? `${tooltip} (${this.keys})`\n : tooltip;\n return (h(\"vm-control\", { label: this.i18n.playback, keys: this.keys, pressed: !this.paused, onClick: this.onClick.bind(this) }, h(\"vm-icon\", { name: this.paused ? this.playIcon : this.pauseIcon, library: this.icons }), h(\"vm-tooltip\", { hidden: this.hideTooltip, position: this.tooltipPosition, direction: this.tooltipDirection }, tooltipWithHint)));\n }\n};\n\nclass Logger {\n constructor() {\n this.silent = false;\n }\n log(...args) {\n if (!this.silent && !isUndefined(console))\n console.log('[Vime tip]:', ...args);\n }\n warn(...args) {\n if (!this.silent && !isUndefined(console))\n console.error('[Vime warn]:', ...args);\n }\n}\n\nconst players = new Set();\nfunction withAutopause(player) {\n const el = getElement(player);\n createStencilHook(player, () => {\n players.add(el);\n }, () => {\n players.delete(el);\n });\n}\nfunction autopause(player) {\n const el = getElement(player);\n players.forEach(p => {\n if (p !== el && p.autopause)\n p.paused = true;\n });\n}\n\n/* eslint-disable func-names */\nfunction withPlayerEvents(player) {\n const el = getElement(player);\n const cache = new Map();\n function initCache() {\n Object.keys(initialState).forEach(prop => {\n cache.set(prop, player[prop]);\n });\n }\n createStencilHook(player, () => {\n initCache();\n }, () => {\n cache.clear();\n });\n const { componentDidRender } = player;\n player.componentDidRender = function () {\n componentDidRender === null || componentDidRender === void 0 ? void 0 : componentDidRender();\n const props = Array.from(cache.keys());\n for (let i = 0; i < props.length; i += 1) {\n const prop = props[i];\n const oldValue = cache.get(prop);\n const newValue = player[prop];\n if (oldValue !== newValue) {\n firePlayerEvent(el, prop, newValue, oldValue);\n cache.set(prop, newValue);\n }\n }\n };\n}\n\nvar __awaiter$9 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// These changes need to be called immediately to avoid the browser blocking the request.\nconst immediateAdapterCall = new Set(['currentTime', 'paused']);\nfunction withPlayerScheduler(player) {\n const el = getElement(player);\n const disposal = new Disposal();\n const cache = new Map();\n function initCache() {\n Object.keys(initialState).forEach(prop => {\n cache.set(prop, player[prop]);\n });\n }\n // Queue of adapter calls to be run when the media is ready for playback.\n let adapterCalls = [];\n function flushAdapterCalls() {\n return __awaiter$9(this, void 0, void 0, function* () {\n const adapter = yield player.adapter;\n if (isUndefined(adapter))\n return;\n for (let i = 0; i < adapterCalls.length; i += 1) {\n // eslint-disable-next-line no-await-in-loop\n yield adapterCalls[i](adapter);\n }\n adapterCalls = [];\n });\n }\n let hasMediaChanged = false;\n function onMediaChange(e) {\n e === null || e === void 0 ? void 0 : e.stopImmediatePropagation();\n // Don't reset first time otherwise props intialized by the user will be reset.\n if (!hasMediaChanged) {\n hasMediaChanged = true;\n return;\n }\n adapterCalls = [];\n writeTask(() => {\n Object.keys(initialState)\n .filter(shouldPropResetOnMediaChange)\n .forEach(prop => {\n player[prop] = initialState[prop];\n });\n });\n }\n function onStateChange(event) {\n var _a;\n return __awaiter$9(this, void 0, void 0, function* () {\n event.stopImmediatePropagation();\n const { by, prop, value } = event.detail;\n if (!isWritableProp(prop)) {\n (_a = player.logger) === null || _a === void 0 ? void 0 : _a.warn(`${by.nodeName} tried to change \\`${prop}\\` but it is readonly.`);\n return;\n }\n if (!player.playbackStarted && immediateAdapterCall.has(prop)) {\n const adapter = yield player.adapter;\n if (prop === 'paused' && !value) {\n adapter === null || adapter === void 0 ? void 0 : adapter.play();\n }\n if (prop === 'currentTime') {\n adapter === null || adapter === void 0 ? void 0 : adapter.play();\n adapter === null || adapter === void 0 ? void 0 : adapter.setCurrentTime(value);\n }\n }\n writeTask(() => {\n player[prop] = value;\n });\n });\n }\n // Called by ProviderConnect.\n const { onProviderDisconnect } = player;\n player.onProviderDisconnect = function () {\n onMediaChange();\n if (onProviderDisconnect)\n onProviderDisconnect.call(player);\n };\n createStencilHook(player, () => {\n initCache();\n disposal.add(listen(el, LOAD_START_EVENT, onMediaChange));\n disposal.add(listen(el, STATE_CHANGE_EVENT, onStateChange));\n }, () => {\n cache.clear();\n disposal.empty();\n });\n wrapStencilHook(player, 'componentWillRender', () => __awaiter$9(this, void 0, void 0, function* () {\n if (player.playbackReady && adapterCalls.length > 0)\n yield flushAdapterCalls();\n }));\n function isAdapterCallRequired(prop, value) {\n var _a;\n return value !== ((_a = player[PROVIDER_CACHE_KEY]) === null || _a === void 0 ? void 0 : _a.get(prop));\n }\n return function safeAdapterCall(prop, method) {\n return __awaiter$9(this, void 0, void 0, function* () {\n if (!isAdapterCallRequired(prop, player[prop]))\n return;\n const value = player[prop];\n const safeCall = (adapter) => __awaiter$9(this, void 0, void 0, function* () {\n var _a;\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n yield ((_a = adapter === null || adapter === void 0 ? void 0 : adapter[method]) === null || _a === void 0 ? void 0 : _a.call(adapter, value));\n }\n catch (e) {\n el.dispatchEvent(new CustomEvent('vmError', { detail: e }));\n }\n });\n if (player.playbackReady) {\n yield safeCall(yield player.adapter);\n }\n else {\n adapterCalls.push(safeCall);\n }\n });\n };\n}\n\nconst playerCss = \".player{box-sizing:border-box;direction:ltr;font-family:var(--vm-player-font-family);-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;-webkit-tap-highlight-color:transparent;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;width:100%;display:block;max-width:100%;min-width:275px;min-height:40px;position:relative;text-shadow:none;outline:0;transition:box-shadow 0.3s ease;box-shadow:var(--vm-player-box-shadow);border-radius:var(--vm-player-border-radius)}.player.idle{cursor:none}.player.audio{background-color:transparent !important}.player.video{height:0;overflow:hidden;background-color:var(--vm-player-bg, #000)}.player.fullscreen{margin:0;border-radius:0;width:100%;height:100%;padding-bottom:0 !important}.blocker{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;z-index:var(--vm-blocker-z-index)}\";\n\nvar __awaiter$8 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nlet idCount$3 = 0;\nconst Player = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmThemeChange = createEvent(this, \"vmThemeChange\", 7);\n this.vmPausedChange = createEvent(this, \"vmPausedChange\", 7);\n this.vmPlay = createEvent(this, \"vmPlay\", 7);\n this.vmPlayingChange = createEvent(this, \"vmPlayingChange\", 7);\n this.vmSeekingChange = createEvent(this, \"vmSeekingChange\", 7);\n this.vmSeeked = createEvent(this, \"vmSeeked\", 7);\n this.vmBufferingChange = createEvent(this, \"vmBufferingChange\", 7);\n this.vmDurationChange = createEvent(this, \"vmDurationChange\", 7);\n this.vmCurrentTimeChange = createEvent(this, \"vmCurrentTimeChange\", 7);\n this.vmReady = createEvent(this, \"vmReady\", 7);\n this.vmPlaybackReady = createEvent(this, \"vmPlaybackReady\", 7);\n this.vmPlaybackStarted = createEvent(this, \"vmPlaybackStarted\", 7);\n this.vmPlaybackEnded = createEvent(this, \"vmPlaybackEnded\", 7);\n this.vmBufferedChange = createEvent(this, \"vmBufferedChange\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.vmCurrentProviderChange = createEvent(this, \"vmCurrentProviderChange\", 7);\n this.vmCurrentSrcChange = createEvent(this, \"vmCurrentSrcChange\", 7);\n this.vmCurrentPosterChange = createEvent(this, \"vmCurrentPosterChange\", 7);\n this.vmMediaTitleChange = createEvent(this, \"vmMediaTitleChange\", 7);\n this.vmControlsChange = createEvent(this, \"vmControlsChange\", 7);\n this.vmPlaybackRateChange = createEvent(this, \"vmPlaybackRateChange\", 7);\n this.vmPlaybackRatesChange = createEvent(this, \"vmPlaybackRatesChange\", 7);\n this.vmPlaybackQualityChange = createEvent(this, \"vmPlaybackQualityChange\", 7);\n this.vmPlaybackQualitiesChange = createEvent(this, \"vmPlaybackQualitiesChange\", 7);\n this.vmMutedChange = createEvent(this, \"vmMutedChange\", 7);\n this.vmVolumeChange = createEvent(this, \"vmVolumeChange\", 7);\n this.vmViewTypeChange = createEvent(this, \"vmViewTypeChange\", 7);\n this.vmMediaTypeChange = createEvent(this, \"vmMediaTypeChange\", 7);\n this.vmLiveChange = createEvent(this, \"vmLiveChange\", 7);\n this.vmTouchChange = createEvent(this, \"vmTouchChange\", 7);\n this.vmLanguageChange = createEvent(this, \"vmLanguageChange\", 7);\n this.vmI18nChange = createEvent(this, \"vmI18nChange\", 7);\n this.vmTranslationsChange = createEvent(this, \"vmTranslationsChange\", 7);\n this.vmLanguagesChange = createEvent(this, \"vmLanguagesChange\", 7);\n this.vmFullscreenChange = createEvent(this, \"vmFullscreenChange\", 7);\n this.vmPiPChange = createEvent(this, \"vmPiPChange\", 7);\n this.vmTextTracksChange = createEvent(this, \"vmTextTracksChange\", 7);\n this.vmCurrentTextTrackChange = createEvent(this, \"vmCurrentTextTrackChange\", 7);\n this.vmTextTrackVisibleChange = createEvent(this, \"vmTextTrackVisibleChange\", 7);\n this.vmAudioTracksChange = createEvent(this, \"vmAudioTracksChange\", 7);\n this.vmCurrentAudioTrackChange = createEvent(this, \"vmCurrentAudioTrackChange\", 7);\n this.disposal = new Disposal();\n /**\n * ------------------------------------------------------\n * Props\n * ------------------------------------------------------\n */\n /** @internal @readonly */\n this.logger = new Logger();\n /** @inheritDoc */\n this.icons = 'vime';\n /** @inheritDoc */\n this.paused = true;\n /** @inheritDoc @readonly */\n this.playing = false;\n /** @inheritDoc @readonly */\n this.duration = -1;\n /** @inheritDoc */\n this.currentTime = 0;\n /** @inheritDoc */\n this.autoplay = false;\n /** @inheritDoc @readonly */\n this.ready = false;\n /** @inheritDoc @readonly */\n this.playbackReady = false;\n /** @inheritDoc */\n this.loop = false;\n /** @inheritDoc */\n this.muted = false;\n /** @inheritDoc @readonly */\n this.buffered = 0;\n /** @inheritDoc */\n this.playbackRate = 1;\n this.lastRateCheck = 1;\n /** @inheritDoc @readonly */\n this.playbackRates = [1];\n /** @inheritDoc @readonly */\n this.playbackQualities = [];\n /** @inheritDoc @readonly */\n this.seeking = false;\n /** @inheritDoc */\n this.debug = false;\n /** @inheritDoc @readonly */\n this.playbackStarted = false;\n /** @inheritDoc @readonly */\n this.playbackEnded = false;\n /** @inheritDoc @readonly */\n this.buffering = false;\n /** @inheritDoc */\n this.controls = false;\n /** @inheritDoc */\n this.isControlsActive = false;\n /** @inheritDoc @readonly */\n this.isSettingsActive = false;\n /** @inheritDoc */\n this.volume = 50;\n /** @inheritDoc @readonly */\n this.isFullscreenActive = false;\n /** @inheritDoc */\n this.aspectRatio = '16:9';\n /** @inheritDoc @readonly */\n this.isAudioView = false;\n /** @inheritDoc @readonly */\n this.isVideoView = false;\n /** @inheritDoc @readonly */\n this.isAudio = false;\n /** @inheritDoc @readonly */\n this.isVideo = false;\n /** @inheritDoc @readonly */\n this.isLive = false;\n /** @inheritDoc @readonly */\n this.isMobile = false;\n /** @inheritDoc @readonly */\n this.isTouch = false;\n /** @inheritDoc @readonly */\n this.isPiPActive = false;\n /** @inheritDoc @readonly */\n this.textTracks = [];\n /** @inheritDoc @readonly */\n this.currentTextTrack = -1;\n /** @inheritDoc @readonly */\n this.isTextTrackVisible = true;\n /** @inheritDoc */\n this.shouldRenderNativeTextTracks = true;\n /** @inheritDoc @readonly */\n this.audioTracks = [];\n /** @inheritDoc @readonly */\n this.currentAudioTrack = -1;\n /** @inheritDoc */\n this.autopause = true;\n /** @inheritDoc */\n this.playsinline = false;\n /** @inheritDoc */\n this.language = 'en';\n /** @inheritDoc */\n this.translations = { en };\n /** @inheritDoc @readonly */\n this.languages = ['en'];\n /** @inheritDoc @readonly */\n this.i18n = en;\n withFindPlayer(this);\n withComponentRegistrar(this);\n withAutopause(this);\n withProviderHost(this);\n withPlayerEvents(this);\n this.safeAdapterCall = withPlayerScheduler(this);\n }\n get adapter() {\n var _a;\n return (_a = this.provider) === null || _a === void 0 ? void 0 : _a.getAdapter();\n }\n onContainerChange() {\n var _a;\n (_a = this.fullscreenController) === null || _a === void 0 ? void 0 : _a.destroy();\n if (isUndefined(this.container))\n return;\n this.fullscreenController = new FullscreenController(this.container);\n this.fullscreenController.on('change', isActive => {\n this.isFullscreenActive = isActive;\n if (isActive)\n this.rotateDevice();\n });\n this.fullscreenController.on('error', error => {\n this.vmError.emit(error);\n });\n }\n onPausedChange() {\n if (this.paused) {\n this.playing = false;\n }\n else {\n autopause(this);\n }\n this.safeAdapterCall('paused', !this.paused ? 'play' : 'pause');\n }\n onDurationChange() {\n this.isLive = this.duration === Infinity;\n }\n onCurrentTimeChange() {\n const duration = this.playbackReady ? this.duration : Infinity;\n this.currentTime = Math.max(0, Math.min(this.currentTime, duration));\n this.safeAdapterCall('currentTime', 'setCurrentTime');\n }\n onPlaybackReadyChange() {\n if (!this.ready)\n this.ready = true;\n }\n onMutedChange() {\n this.safeAdapterCall('muted', 'setMuted');\n }\n onPlaybackRateChange(newRate, prevRate) {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n if (newRate === this.lastRateCheck)\n return;\n if (!(yield ((_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canSetPlaybackRate) === null || _b === void 0 ? void 0 : _b.call(_a)))) {\n this.logger.log('provider cannot change `playbackRate`.');\n this.lastRateCheck = prevRate;\n this.playbackRate = prevRate;\n return;\n }\n if (!this.playbackRates.includes(newRate)) {\n this.logger.log(`invalid \\`playbackRate\\` of ${newRate}, ` +\n `valid values are [${this.playbackRates.join(', ')}]`);\n this.lastRateCheck = prevRate;\n this.playbackRate = prevRate;\n return;\n }\n this.lastRateCheck = newRate;\n this.safeAdapterCall('playbackRate', 'setPlaybackRate');\n });\n }\n onPlaybackQualityChange(newQuality, prevQuality) {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n if (isUndefined(newQuality) || newQuality === this.lastQualityCheck)\n return;\n if (!(yield ((_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canSetPlaybackQuality) === null || _b === void 0 ? void 0 : _b.call(_a)))) {\n this.logger.log('provider cannot change `playbackQuality`.');\n this.lastQualityCheck = prevQuality;\n this.playbackQuality = prevQuality;\n return;\n }\n if (!this.playbackQualities.includes(newQuality)) {\n this.logger.log(`invalid \\`playbackQuality\\` of ${newQuality}, ` +\n `valid values are [${this.playbackQualities.join(', ')}]`);\n this.lastQualityCheck = prevQuality;\n this.playbackQuality = prevQuality;\n return;\n }\n this.lastQualityCheck = newQuality;\n this.safeAdapterCall('playbackQuality', 'setPlaybackQuality');\n });\n }\n onDebugChange() {\n this.logger.silent = !this.debug;\n }\n onVolumeChange() {\n return __awaiter$8(this, void 0, void 0, function* () {\n this.volume = Math.max(0, Math.min(this.volume, 100));\n this.safeAdapterCall('volume', 'setVolume');\n });\n }\n onViewTypeChange() {\n this.isAudioView = this.viewType === ViewType.Audio;\n this.isVideoView = this.viewType === ViewType.Video;\n }\n onMediaTypeChange() {\n this.isAudio = this.mediaType === MediaType.Audio;\n this.isVideo = this.mediaType === MediaType.Video;\n }\n onLanguageChange(_, prevLanguage) {\n if (!this.languages.includes(this.language)) {\n this.logger.log(`invalid \\`language\\` of ${this.language}, ` +\n `valid values are [${this.languages.join(', ')}]`);\n this.language = prevLanguage;\n return;\n }\n this.i18n = this.translations[this.language];\n }\n onTranslationsChange() {\n Object.assign(this.translations, { en });\n this.languages = Object.keys(this.translations);\n this.i18n = this.translations[this.language];\n }\n onError(event) {\n this.logger.warn(event.detail);\n }\n /**\n * ------------------------------------------------------\n * Methods\n * ------------------------------------------------------\n */\n /** @inheritDoc */\n getProvider() {\n return __awaiter$8(this, void 0, void 0, function* () {\n return this.provider;\n });\n }\n /** @internal */\n getAdapter() {\n return __awaiter$8(this, void 0, void 0, function* () {\n return this.adapter;\n });\n }\n /** @inheritDoc */\n play() {\n var _a;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.play();\n });\n }\n /** @inheritDoc */\n pause() {\n var _a;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.pause();\n });\n }\n /** @inheritDoc */\n canPlay(type) {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canPlay(type)) !== null && _b !== void 0 ? _b : false;\n });\n }\n /** @inheritDoc */\n canAutoplay() {\n return __awaiter$8(this, void 0, void 0, function* () {\n return canAutoplay();\n });\n }\n /** @inheritDoc */\n canMutedAutoplay() {\n return __awaiter$8(this, void 0, void 0, function* () {\n return canAutoplay(true);\n });\n }\n /** @inheritDoc */\n canSetPlaybackRate() {\n var _a, _b, _c;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_c = (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canSetPlaybackRate) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false;\n });\n }\n /** @inheritDoc */\n canSetPlaybackQuality() {\n var _a, _b, _c;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_c = (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canSetPlaybackQuality) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false;\n });\n }\n /** @inheritDoc */\n canSetFullscreen() {\n var _a, _b, _c;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (this.fullscreenController.isSupported ||\n ((_c = (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canSetFullscreen) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false));\n });\n }\n /** @inheritDoc */\n enterFullscreen(options) {\n var _a, _b, _c;\n return __awaiter$8(this, void 0, void 0, function* () {\n if (!this.isVideoView) {\n throw Error('Cannot enter fullscreen on an audio player view.');\n }\n if (this.fullscreenController.isSupported) {\n return this.fullscreenController.requestFullscreen();\n }\n const adapter = yield this.adapter;\n const canProviderSetFullscreen = (_b = (yield ((_a = adapter === null || adapter === void 0 ? void 0 : adapter.canSetFullscreen) === null || _a === void 0 ? void 0 : _a.call(adapter)))) !== null && _b !== void 0 ? _b : false;\n if (canProviderSetFullscreen) {\n return (_c = adapter === null || adapter === void 0 ? void 0 : adapter.enterFullscreen) === null || _c === void 0 ? void 0 : _c.call(adapter, options);\n }\n throw Error('Fullscreen API is not available.');\n });\n }\n /** @inheritDoc */\n exitFullscreen() {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n if (this.fullscreenController.isSupported) {\n return this.fullscreenController.exitFullscreen();\n }\n return (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.exitFullscreen) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n /** @inheritDoc */\n canSetPiP() {\n var _a, _b, _c;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_c = (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.canSetPiP) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false;\n });\n }\n /** @inheritDoc */\n enterPiP() {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n if (!this.isVideoView)\n throw Error('Cannot enter PiP mode on an audio player view.');\n if (!(yield this.canSetPiP()))\n throw Error('Picture-in-Picture API is not available.');\n return (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.enterPiP) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n /** @inheritDoc */\n exitPiP() {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n return (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.exitPiP) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n /** @inheritDoc */\n canSetAudioTrack() {\n var _a;\n return __awaiter$8(this, void 0, void 0, function* () {\n return !isUndefined((_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.setCurrentAudioTrack);\n });\n }\n /** @inheritDoc */\n setCurrentAudioTrack(trackId) {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.setCurrentAudioTrack) === null || _b === void 0 ? void 0 : _b.call(_a, trackId);\n });\n }\n /** @inheritDoc */\n canSetTextTrack() {\n var _a;\n return __awaiter$8(this, void 0, void 0, function* () {\n return !isUndefined((_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.setCurrentTextTrack);\n });\n }\n /** @inheritDoc */\n setCurrentTextTrack(trackId) {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.setCurrentTextTrack) === null || _b === void 0 ? void 0 : _b.call(_a, trackId);\n });\n }\n /** @inheritDoc */\n canSetTextTrackVisibility() {\n var _a;\n return __awaiter$8(this, void 0, void 0, function* () {\n return !isUndefined((_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.setTextTrackVisibility);\n });\n }\n /** @inheritDoc */\n setTextTrackVisibility(isVisible) {\n var _a, _b;\n return __awaiter$8(this, void 0, void 0, function* () {\n (_b = (_a = (yield this.adapter)) === null || _a === void 0 ? void 0 : _a.setTextTrackVisibility) === null || _b === void 0 ? void 0 : _b.call(_a, isVisible);\n });\n }\n /** @inheritDoc */\n extendLanguage(language, translation) {\n var _a;\n return __awaiter$8(this, void 0, void 0, function* () {\n const translations = Object.assign(Object.assign({}, this.translations), { [language]: Object.assign(Object.assign({}, ((_a = this.translations[language]) !== null && _a !== void 0 ? _a : {})), translation) });\n this.translations = translations;\n });\n }\n connectedCallback() {\n this.onPausedChange();\n this.onCurrentTimeChange();\n this.onVolumeChange();\n this.onMutedChange();\n this.onDebugChange();\n this.onContainerChange();\n this.onTranslationsChange();\n this.onLanguageChange(this.language, initialState.language);\n this.disposal.add(onMobileChange(isMobile => {\n this.isMobile = isMobile;\n }));\n this.disposal.add(onTouchInputChange(isTouch => {\n this.isTouch = isTouch;\n }));\n }\n componentWillLoad() {\n Universe.create(this, this.getPlayerState());\n }\n disconnectedCallback() {\n var _a;\n (_a = this.fullscreenController) === null || _a === void 0 ? void 0 : _a.destroy();\n this.disposal.empty();\n }\n rotateDevice() {\n return __awaiter$8(this, void 0, void 0, function* () {\n if (!this.isMobile || !canRotateScreen())\n return;\n try {\n if (this.isFullscreenActive) {\n yield window.screen.orientation.lock('landscape');\n }\n else {\n yield window.screen.orientation.unlock();\n }\n }\n catch (err) {\n this.vmError.emit(err);\n }\n });\n }\n getPlayerState() {\n const state = {};\n const props = Object.keys(initialState);\n for (let i = 0; i < props.length; i += 1) {\n state[props[i]] = this[props[i]];\n }\n return state;\n }\n calcAspectRatio() {\n const [width, height] = /\\d{1,2}:\\d{1,2}/.test(this.aspectRatio)\n ? this.aspectRatio.split(':')\n : [16, 9];\n return (100 / Number(width)) * Number(height);\n }\n /**\n * Returns the inner container.\n */\n getContainer() {\n return __awaiter$8(this, void 0, void 0, function* () {\n return this.container;\n });\n }\n /** @internal Exposed for E2E testing. */\n callAdapter(method, value) {\n return __awaiter$8(this, void 0, void 0, function* () {\n return (yield this.adapter)[method](value);\n });\n }\n hasCustomControls() {\n return isComponentRegistered(this, 'vm-controls');\n }\n genId() {\n var _a;\n const id = (_a = this.host) === null || _a === void 0 ? void 0 : _a.id;\n if (isString(id) && id.length > 0)\n return id;\n idCount$3 += 1;\n return `vm-player-${idCount$3}`;\n }\n render() {\n const label = `${this.isAudioView ? 'Audio Player' : 'Video Player'}` +\n `${!isUndefined(this.mediaTitle) ? ` - ${this.mediaTitle}` : ''}`;\n const canShowCustomUI = !IS_IOS ||\n !this.isVideoView ||\n (this.playsinline && !this.isFullscreenActive);\n if (!canShowCustomUI) {\n this.controls = true;\n }\n const isIdle = canShowCustomUI &&\n this.hasCustomControls() &&\n this.isVideoView &&\n !this.paused &&\n !this.isControlsActive;\n const isBlockerVisible = !this.controls && canShowCustomUI && this.isVideoView;\n return (h(Host, { id: this.genId(), idle: isIdle, mobile: this.isMobile, touch: this.isTouch, live: this.isLive, audio: this.isAudioView, video: this.isVideoView, pip: this.isPiPActive, fullscreen: this.isFullscreenActive }, h(\"div\", { \"aria-label\": label, \"aria-hidden\": !this.ready ? 'true' : 'false', \"aria-busy\": !this.playbackReady ? 'true' : 'false', class: {\n player: true,\n idle: isIdle,\n audio: this.isAudioView,\n video: this.isVideoView,\n fullscreen: this.isFullscreenActive,\n }, style: {\n paddingBottom: this.isVideoView\n ? `${this.calcAspectRatio()}%`\n : undefined,\n }, ref: el => {\n writeTask(() => {\n this.container = el;\n });\n } }, isBlockerVisible && h(\"div\", { class: \"blocker\" }), h(Universe.Provider, { state: this.getPlayerState() }, h(\"slot\", null)))));\n }\n get host() { return this; }\n static get watchers() { return {\n \"container\": [\"onContainerChange\"],\n \"paused\": [\"onPausedChange\"],\n \"duration\": [\"onDurationChange\"],\n \"currentTime\": [\"onCurrentTimeChange\"],\n \"playbackReady\": [\"onPlaybackReadyChange\"],\n \"muted\": [\"onMutedChange\"],\n \"playbackRate\": [\"onPlaybackRateChange\"],\n \"playbackQuality\": [\"onPlaybackQualityChange\"],\n \"debug\": [\"onDebugChange\"],\n \"volume\": [\"onVolumeChange\"],\n \"viewType\": [\"onViewTypeChange\"],\n \"isAudioView\": [\"onViewTypeChange\"],\n \"isVideoView\": [\"onViewTypeChange\"],\n \"mediaType\": [\"onMediaTypeChange\"],\n \"language\": [\"onLanguageChange\"],\n \"translations\": [\"onTranslationsChange\"]\n }; }\n static get style() { return playerCss; }\n};\n\nconst posterCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-poster-z-index)}.poster{width:100%;height:100%;background:#000;opacity:0;visibility:hidden;pointer-events:none;transition:var(--vm-fade-transition)}.poster.hidden{display:none}.poster.active{opacity:1;visibility:visible}img{width:100%;height:100%;pointer-events:none}\";\n\nconst Poster = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmLoaded = createEvent(this, \"vmLoaded\", 3);\n this.vmWillShow = createEvent(this, \"vmWillShow\", 3);\n this.vmWillHide = createEvent(this, \"vmWillHide\", 3);\n this.isHidden = true;\n this.isActive = false;\n this.hasLoaded = false;\n /**\n * How the poster image should be resized to fit the container (sets the `object-fit` property).\n */\n this.fit = 'cover';\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.playbackStarted = false;\n /** @internal */\n this.currentTime = 0;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'mediaTitle',\n 'currentPoster',\n 'playbackStarted',\n 'currentTime',\n 'isVideoView',\n ]);\n }\n onCurrentPosterChange() {\n var _a;\n this.hasLoaded = false;\n (_a = this.lazyLoader) === null || _a === void 0 ? void 0 : _a.onMutation();\n }\n connectedCallback() {\n this.lazyLoader = new LazyLoader(this.host, ['data-src', 'src'], el => {\n const src = el.getAttribute('data-src');\n el.removeAttribute('src');\n if (!isNull(src)) {\n el.setAttribute('src', src);\n }\n });\n this.onEnabledChange();\n this.onActiveChange();\n }\n disconnectedCallback() {\n this.lazyLoader.destroy();\n }\n onVisibilityChange() {\n !this.isHidden && this.isActive\n ? this.vmWillShow.emit()\n : this.vmWillHide.emit();\n }\n onEnabledChange() {\n this.isHidden = !this.isVideoView;\n this.onVisibilityChange();\n }\n onActiveChange() {\n this.isActive = !this.playbackStarted || this.currentTime <= 0.1;\n this.onVisibilityChange();\n }\n onPosterLoad() {\n this.vmLoaded.emit();\n this.hasLoaded = true;\n }\n render() {\n return (h(\"div\", { class: {\n poster: true,\n hidden: this.isHidden,\n active: this.isActive && this.hasLoaded,\n } }, h(\"img\", { class: \"lazy\", \"data-src\": this.currentPoster, alt: !isUndefined(this.mediaTitle)\n ? `${this.mediaTitle} Poster`\n : 'Media Poster', style: { objectFit: this.fit }, onLoad: this.onPosterLoad.bind(this) })));\n }\n get host() { return this; }\n static get watchers() { return {\n \"currentPoster\": [\"onCurrentPosterChange\"],\n \"isVideoView\": [\"onEnabledChange\"],\n \"currentTime\": [\"onActiveChange\"],\n \"playbackStarted\": [\"onActiveChange\"]\n }; }\n static get style() { return posterCss; }\n};\n\nconst scrimCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-scrim-z-index)}.scrim{position:absolute;width:100%;background:var(--vm-scrim-bg);display:inline-block;opacity:0;visibility:hidden;transition:var(--vm-fade-transition)}.scrim.gradient{height:258px;background:none;background-position:bottom;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAECCAYAAAA/9r2TAAABKklEQVQ4T2XI50cFABiF8dvee++67b33uM17b1MkkSSSSBJJJIkkkkQSSSKJ9Efmeb8cr86HH88JBP4thkfEkiKOFPGkSCCNRE8SKZJJkUIaqZ40UqSTIoMUmaSR5ckmRQ4pckkjz5NPigJSFJKiiDSKPSWkKCVFGWmUeypIUUmKKlJUk0aNJ0iKWlLUkUa9p4EUjaRoIkUzabR4WknRRop20ujwdJKiixTdpOghjV5PHyn6STFAGoOeIVIMk2KEFKOkMeYZJ8UEKUKkMemZIsU0KWZIMUsac54wKSKkiJLGvGeBFIukWCLFMrkCq7AG67ABm7AF27ADu7AH+3AAh3AEx3ACp3AG53ABl3AF13ADt3AH9/AAj/AEz/ACr/AG7/ABn/AF3/ADv39LujSyJPVJ0QAAAABJRU5ErkJggg==')}.scrim.gradientUp{top:unset;bottom:0}.scrim.gradientDown{transform:rotate(180deg)}.scrim.hidden{display:none}.scrim.active{opacity:1;visibility:visible}\";\n\nconst Scrim = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.isControlsActive = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['isVideoView', 'isControlsActive']);\n }\n render() {\n return (h(\"div\", { class: {\n scrim: true,\n gradient: !isUndefined(this.gradient),\n gradientUp: this.gradient === 'up',\n gradientDown: this.gradient === 'down',\n hidden: !this.isVideoView,\n active: this.isControlsActive,\n } }));\n }\n static get style() { return scrimCss; }\n};\n\nconst getHours = (value) => Math.trunc((value / 60 / 60) % 60);\nconst getMinutes = (value) => Math.trunc((value / 60) % 60);\nconst getSeconds = (value) => Math.trunc(value % 60);\nconst formatTime = (seconds = 0, alwaysShowHours = false) => {\n // Format time component to add leading zero.\n const format = (value) => `0${value}`.slice(-2);\n const hours = getHours(seconds);\n const mins = getMinutes(seconds);\n const secs = getSeconds(seconds);\n return `${alwaysShowHours || hours > 0 ? `${hours}:` : ''}${format(mins)}:${format(secs)}`;\n};\n\nconst scrubberControlCss = \":host{--vm-tooltip-spacing:var(--vm-scrubber-tooltip-spacing);flex:1;position:relative;cursor:pointer;pointer-events:auto;box-sizing:border-box;left:calc(var(--vm-slider-thumb-width) / 2);margin-right:var(--vm-slider-thumb-width);margin-bottom:var(--vm-slider-track-height)}@keyframes progress{to{background-position:var(--vm-scrubber-loading-stripe-size) 0}}.scrubber{position:relative;width:100%}vm-slider,progress{margin-left:calc(calc(var(--vm-slider-thumb-width) / 2) * -1);margin-right:calc(calc(var(--vm-slider-thumb-width) / 2) * -1);width:calc(100% + var(--vm-slider-thumb-width));height:var(--vm-slider-track-height)}vm-slider:hover,progress:hover{cursor:pointer}vm-slider{position:absolute;top:0;left:0;z-index:3}progress{-webkit-appearance:none;background:transparent;border:0;border-radius:100px;position:absolute;left:0;top:50%;padding:0;color:var(--vm-scrubber-buffered-bg);height:var(--vm-slider-track-height)}progress::-webkit-progress-bar{background:transparent}progress::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:var(--vm-slider-track-height);transition:width 0.2s ease}progress::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:var(--vm-slider-track-height);transition:width 0.2s ease}progress::-ms-fill{border-radius:100px;transition:width 0.2s ease}progress.loading{animation:progress 1s linear infinite;background-image:linear-gradient(\\n -45deg,\\n var(--vm-scrubber-loading-stripe-color) 25%,\\n transparent 25%,\\n transparent 50%,\\n var(--vm-scrubber-loading-stripe-color) 50%,\\n var(--vm-scrubber-loading-stripe-color) 75%,\\n transparent 75%,\\n transparent\\n );background-repeat:repeat-x;background-size:var(--vm-scrubber-loading-stripe-size)\\n var(--vm-scrubber-loading-stripe-size);color:transparent;background-color:transparent}\";\n\nvar __awaiter$7 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst ScrubberControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.keyboardDisposal = new Disposal();\n this.timestamp = '';\n this.endTime = 0;\n /**\n * Whether the timestamp in the tooltip should show the hours unit, even if the time is less than\n * 1 hour (eg: `20:35` -> `00:20:35`).\n */\n this.alwaysShowHours = false;\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n /** @internal */\n this.currentTime = 0;\n /** @internal */\n this.duration = -1;\n /**\n * Prevents seeking forward/backward by using the Left/Right arrow keys.\n */\n this.noKeyboard = false;\n /** @internal */\n this.buffering = false;\n /** @internal */\n this.buffered = 0;\n /** @internal */\n this.i18n = {};\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'i18n',\n 'currentTime',\n 'duration',\n 'buffering',\n 'buffered',\n ]);\n }\n onNoKeyboardChange() {\n return __awaiter$7(this, void 0, void 0, function* () {\n this.keyboardDisposal.empty();\n if (this.noKeyboard)\n return;\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n const onKeyDown = (event) => {\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')\n return;\n event.preventDefault();\n const isLeftArrow = event.key === 'ArrowLeft';\n const seekTo = isLeftArrow\n ? Math.max(0, this.currentTime - 5)\n : Math.min(this.duration, this.currentTime + 5);\n this.dispatch('currentTime', seekTo);\n };\n this.keyboardDisposal.add(listen(player, 'keydown', onKeyDown));\n });\n }\n onDurationChange() {\n // Avoid -1.\n this.endTime = Math.max(0, this.duration);\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n this.timestamp = formatTime(this.currentTime, this.alwaysShowHours);\n this.onNoKeyboardChange();\n }\n disconnectedCallback() {\n this.keyboardDisposal.empty();\n }\n setTooltipPosition(value) {\n var _a, _b;\n const tooltipRect = (_b = (_a = this.tooltip.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.tooltip')) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect();\n const bounds = this.slider.getBoundingClientRect();\n const thumbWidth = parseFloat(window\n .getComputedStyle(this.slider)\n .getPropertyValue('--vm-slider-thumb-width'));\n const leftLimit = tooltipRect.width / 2 - thumbWidth / 2;\n const rightLimit = bounds.width - tooltipRect.width / 2 - thumbWidth / 2;\n const xPos = Math.max(leftLimit, Math.min(value, rightLimit));\n this.tooltip.style = `--vm-tooltip-left: ${xPos}px`;\n }\n onSeek(event) {\n this.dispatch('currentTime', event.detail);\n }\n onSeeking(event) {\n if (this.duration < 0 || this.tooltip.hidden)\n return;\n if (event.type === 'mouseleave') {\n this.getSliderInput().blur();\n this.tooltip.active = false;\n return;\n }\n const rect = this.host.getBoundingClientRect();\n const percent = Math.max(0, Math.min(100, (100 / rect.width) * (event.pageX - rect.left)));\n this.timestamp = formatTime((this.duration / 100) * percent, this.alwaysShowHours);\n this.setTooltipPosition((percent / 100) * rect.width);\n if (!this.tooltip.active) {\n this.getSliderInput().focus();\n this.tooltip.active = true;\n }\n }\n getSliderInput() {\n var _a;\n return (_a = this.slider.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('input');\n }\n render() {\n const sliderValueText = this.i18n.scrubberLabel\n .replace(/{currentTime}/, formatTime(this.currentTime))\n .replace(/{duration}/, formatTime(this.endTime));\n return (h(\"div\", { class: \"scrubber\", onMouseEnter: this.onSeeking.bind(this), onMouseLeave: this.onSeeking.bind(this), onMouseMove: this.onSeeking.bind(this), onTouchMove: () => {\n this.getSliderInput().focus();\n }, onTouchEnd: () => {\n this.getSliderInput().blur();\n } }, h(\"vm-slider\", { step: 0.01, max: this.endTime, value: this.currentTime, label: this.i18n.scrubber, valueText: sliderValueText, onVmValueChange: this.onSeek.bind(this), ref: (el) => {\n this.slider = el;\n } }), h(\"progress\", { class: {\n loading: this.buffering,\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n min: 0, max: this.endTime, value: this.buffered, \"aria-label\": this.i18n.buffered, \"aria-valuemin\": \"0\", \"aria-valuemax\": this.endTime, \"aria-valuenow\": this.buffered, \"aria-valuetext\": `${(this.endTime > 0\n ? this.buffered / this.endTime\n : 0).toFixed(0)}%` }, \"% buffered\"), h(\"vm-tooltip\", { hidden: this.hideTooltip, ref: (el) => {\n this.tooltip = el;\n } }, this.timestamp)));\n }\n get host() { return this; }\n static get watchers() { return {\n \"noKeyboard\": [\"onNoKeyboardChange\"],\n \"duration\": [\"onDurationChange\"]\n }; }\n static get style() { return scrubberControlCss; }\n};\n\nconst settingsCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-menu-z-index)}.settings{position:absolute;opacity:0;pointer-events:none;overflow-x:hidden;overflow-y:auto;background-color:var(--vm-menu-bg);max-height:var(--vm-settings-max-height);border-radius:var(--vm-settings-border-radius);padding:var(--vm-settings-padding);box-shadow:var(--vm-settings-shadow);box-sizing:border-box;scrollbar-width:thin;scroll-behavior:smooth;scrollbar-color:var(--vm-settings-scroll-thumb-color)\\n var(--vm-settings-scroll-track-color);transform:translateY(8px);transition:var(--vm-settings-transition)}.container{display:block;width:var(--vm-settings-width);height:100%;position:relative;transition:width 0.25s ease-in, height 0.25s ease-in}.settings.hydrated{visibility:hidden !important}.settings::-webkit-scrollbar{width:var(--vm-settings-scroll-width)}.settings::-webkit-scrollbar-track{background:var(--vm-settings-scroll-track-color)}.settings::-webkit-scrollbar-thumb{border-radius:var(--vm-settings-scroll-width);background-color:var(--vm-settings-scroll-thumb-color);border:2px solid var(--vm-menu-bg)}.settings.active{transform:translateY(0);opacity:1;pointer-events:auto;visibility:visible !important}.settings.mobile{position:fixed;top:auto !important;left:0 !important;right:0 !important;bottom:0 !important;width:100%;min-height:56px;max-height:50%;border-radius:0;z-index:2147483647;transform:translateY(100%)}.settings.mobile.active{transform:translateY(0)}.settings.mobile>vm-menu{height:100% !important;overflow:auto !important}\";\n\nvar __awaiter$6 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nlet idCount$2 = 0;\nconst Settings = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.disposal = new Disposal();\n this.menuHeight = 0;\n /**\n * Pins the settings to the defined position inside the video player. This has no effect when\n * the view is of type `audio` (always `bottomRight`) and on mobile devices (always bottom sheet).\n */\n this.pin = 'bottomRight';\n /**\n * Whether the settings menu is opened/closed.\n */\n this.active = false;\n /** @internal */\n this.isMobile = false;\n /** @internal */\n this.isAudioView = false;\n withComponentRegistry(this);\n withControlsCollisionDetection(this);\n withPlayerContext(this, ['isMobile', 'isAudioView']);\n }\n onActiveChange() {\n this.dispatch('isSettingsActive', this.active);\n if (isUndefined(this.controller))\n return;\n this.controller.expanded = this.active;\n }\n connectedCallback() {\n this.dispatch = createDispatcher(this);\n idCount$2 += 1;\n this.id = `vm-settings-${idCount$2}`;\n }\n disconnectedCallback() {\n this.disposal.empty();\n }\n /**\n * Sets the controller responsible for opening/closing this settings menu.\n */\n setController(controller) {\n return __awaiter$6(this, void 0, void 0, function* () {\n this.controller = controller;\n this.controller.menu = this.id;\n this.disposal.empty();\n this.disposal.add(listen(this.controller, 'click', () => {\n this.active = !this.active;\n }));\n this.disposal.add(listen(this.controller, 'keydown', (event) => {\n if (event.key !== 'Enter')\n return;\n // We're looking for !active because the `click` event above will toggle it to active.\n if (!this.active)\n this.menu.focusMenu();\n }));\n });\n }\n getPosition() {\n if (this.isAudioView) {\n return {\n right: '0',\n bottom: 'calc(var(--vm-controls-height, 0) + 4px)',\n };\n }\n // topLeft => { top: 0, left: 0 }\n const pos = this.pin.split(/(?=[L|R])/).map(s => s.toLowerCase());\n return {\n [pos.includes('top') ? 'top' : 'bottom']: 'var(--vm-controls-height, 0)',\n [pos.includes('left') ? 'left' : 'right']: '8px',\n };\n }\n onOpen(event) {\n var _a;\n if (((_a = event.detail) === null || _a === void 0 ? void 0 : _a.identifier) !== this.id)\n return;\n this.active = true;\n }\n onClose(event) {\n var _a;\n if (((_a = event.detail) === null || _a === void 0 ? void 0 : _a.identifier) !== this.id)\n return;\n this.active = false;\n }\n onHeightChange(event) {\n this.menuHeight = event.detail;\n }\n render() {\n return (h(\"div\", { style: Object.assign({}, this.getPosition()), class: {\n settings: true,\n active: this.active,\n mobile: this.isMobile,\n } }, h(\"div\", { class: \"container\", style: { height: `${this.menuHeight}px` } }, h(\"vm-menu\", { identifier: this.id, active: this.active, controller: this.controller, onVmOpen: this.onOpen.bind(this), onVmClose: this.onClose.bind(this), onVmMenuHeightChange: this.onHeightChange.bind(this), ref: (el) => {\n this.menu = el;\n } }, h(\"slot\", null)))));\n }\n get host() { return this; }\n static get watchers() { return {\n \"active\": [\"onActiveChange\"]\n }; }\n static get style() { return settingsCss; }\n};\n\nconst settingsControlCss = \".settingsControl.hidden{display:none}.settingsControl{--vm-icon-transition:transform 0.3s ease}.settingsControl.active{--vm-icon-transform:rotate(90deg)}\";\n\nvar __awaiter$5 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nlet idCount$1 = 0;\nconst SettingsControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * The name of the settings icon to resolve from the icon library.\n */\n this.icon = 'settings';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the settings menu this control manages is open.\n */\n this.expanded = false;\n /** @internal */\n this.i18n = {};\n /**\n * Whether the tooltip should not be displayed.\n */\n this.hideTooltip = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['i18n']);\n }\n onComponentsChange() {\n if (!isUndefined(this.vmSettings)) {\n this.vmSettings.setController(this.host);\n }\n }\n connectedCallback() {\n idCount$1 += 1;\n this.id = `vm-settings-control-${idCount$1}`;\n watchComponentRegistry(this, 'vm-settings', regs => {\n [this.vmSettings] = regs;\n });\n }\n /**\n * Focuses the control.\n */\n focusControl() {\n var _a;\n return __awaiter$5(this, void 0, void 0, function* () {\n (_a = this.control) === null || _a === void 0 ? void 0 : _a.focusControl();\n });\n }\n /**\n * Removes focus from the control.\n */\n blurControl() {\n var _a;\n return __awaiter$5(this, void 0, void 0, function* () {\n (_a = this.control) === null || _a === void 0 ? void 0 : _a.blurControl();\n });\n }\n render() {\n const hasSettings = !isUndefined(this.menu);\n return (h(\"div\", { class: {\n settingsControl: true,\n hidden: !hasSettings,\n active: hasSettings && this.expanded,\n } }, h(\"vm-control\", { identifier: this.id, menu: this.menu, hidden: !hasSettings, expanded: this.expanded, label: this.i18n.settings, ref: control => {\n this.control = control;\n } }, h(\"vm-icon\", { name: this.icon, library: this.icons }), h(\"vm-tooltip\", { hidden: this.hideTooltip || this.expanded, position: this.tooltipPosition, direction: this.tooltipDirection }, this.i18n.settings))));\n }\n get host() { return this; }\n static get watchers() { return {\n \"vmSettings\": [\"onComponentsChange\"]\n }; }\n static get style() { return settingsControlCss; }\n};\n\nconst skeletonCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-skeleton-z-index)}@keyframes sheen{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton{width:100%;height:100%;display:flex;min-height:1rem;pointer-events:auto}.sheen.hidden{opacity:0;visibility:hidden;transition:var(--vm-fade-transition);pointer-events:none}.indicator{flex:1 1 auto;background:var(--vm-skeleton-color)}.skeleton.sheen .indicator{background:linear-gradient(\\n 270deg,\\n var(--vm-skeleton-sheen-color),\\n var(--vm-skeleton-color),\\n var(--vm-skeleton-color),\\n var(--vm-skeleton-sheen-color)\\n );background-size:400% 100%;background-size:400% 100%;animation:sheen 8s ease-in-out infinite}\";\n\nconst Skeleton = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.hidden = false;\n /**\n * Determines which animation effect the skeleton will use.\n * */\n this.effect = 'sheen';\n /** @internal */\n this.ready = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['ready']);\n }\n onReadyChange() {\n if (!this.ready) {\n this.hidden = false;\n }\n else {\n setTimeout(() => {\n this.hidden = true;\n }, 500);\n }\n }\n render() {\n return (h(\"div\", { class: {\n skeleton: true,\n hidden: this.hidden,\n sheen: this.effect === 'sheen',\n } }, h(\"div\", { class: \"indicator\" })));\n }\n static get watchers() { return {\n \"ready\": [\"onReadyChange\"]\n }; }\n static get style() { return skeletonCss; }\n};\n\nconst sliderCss = \":host{width:100%}.slider{width:100%}input{width:100%;-webkit-appearance:none;background:transparent;border:0;outline:0;cursor:pointer;box-sizing:border-box;border-radius:calc(var(--vm-slider-thumb-height) * 2);user-select:none;-webkit-user-select:none;touch-action:manipulation;color:var(--vm-slider-value-color);display:block;height:var(--vm-slider-track-height);margin:0;padding:0;transition:box-shadow 0.3s ease}input::-webkit-slider-runnable-track{background:transparent;border:0;border-radius:calc(var(--vm-slider-track-height) / 2);height:var(--vm-slider-track-height);transition:box-shadow 0.3s ease;user-select:none;background-image:linear-gradient(\\n to right,\\n currentColor var(--vm-value, 0%),\\n transparent var(--vm-value, 0%)\\n );background-color:var(--vm-slider-track-color)}input::-webkit-slider-thumb{opacity:0;background:var(--vm-slider-thumb-bg);border:0;border-radius:100%;position:relative;transition:all 0.2s ease;width:var(--vm-slider-thumb-width);height:var(--vm-slider-thumb-height);box-shadow:var(--vm-slider-thumb-shadow);-webkit-appearance:none;margin-top:calc(\\n 0px -\\n calc(\\n calc(var(--vm-slider-thumb-height) - var(--vm-slider-track-height)) / 2\\n )\\n )}input::-moz-range-track{background:transparent;border:0;border-radius:calc(var(--vm-slider-track-height) / 2);height:var(--vm-slider-track-height);transition:box-shadow 0.3s ease;user-select:none;background-color:var(--vm-slider-track-color)}input::-moz-range-thumb{opacity:0;background:var(--vm-slider-thumb-bg);border:0;border-radius:100%;position:relative;transition:all 0.2s ease;width:var(--vm-slider-thumb-width);height:var(--vm-slider-thumb-height);box-shadow:var(--vm-slider-thumb-shadow)}input::-moz-range-progress{background:currentColor;border-radius:calc(var(--vm-slider-track-height) / 2);height:var(--vm-slider-track-height)}input::-ms-track{border:0;border-radius:calc(var(--vm-slider-track-height) / 2);height:var(--vm-slider-track-height);transition:box-shadow 0.3s ease;user-select:none;color:transparent;background-color:var(--vm-slider-track-color)}input::-ms-fill-upper{background:transparent;border:0;border-radius:calc(var(--vm-slider-track-height) / 2);height:var(--vm-slider-track-height);transition:box-shadow 0.3s ease;user-select:none}input::-ms-fill-lower{border:0;border-radius:calc(var(--vm-slider-track-height) / 2);height:var(--vm-slider-track-height);transition:box-shadow 0.3s ease;user-select:none;background:currentColor}input::-ms-thumb{opacity:0;background:var(--vm-slider-thumb-bg);border:0;border-radius:100%;position:relative;transition:all 0.2s ease;width:var(--vm-slider-thumb-width);height:var(--vm-slider-thumb-height);box-shadow:var(--vm-slider-thumb-shadow);margin-top:0}input::-ms-tooltip{display:none}input:hover::-webkit-slider-runnable-track{height:var(--vm-slider-track-focused-height)}input:hover::-moz-range-track{height:var(--vm-slider-track-focused-height)}input:hover::-ms-track{height:var(--vm-slider-track-focused-height)}input:hover::-ms-fill-upper{height:var(--vm-slider-track-focused-height)}input:hover::-ms-fill-lower{height:var(--vm-slider-track-focused-height)}input:hover::-webkit-slider-thumb{opacity:1}input:hover::-moz-range-thumb{opacity:1}input:hover::-ms-thumb{opacity:1}input:focus{outline:0}input:focus::-webkit-slider-runnable-track{outline:0;height:var(--vm-slider-track-focused-height)}input:focus::-moz-range-track{outline:0;height:var(--vm-slider-track-focused-height)}input:focus::-ms-track{outline:0;height:var(--vm-slider-track-focused-height)}input::-moz-focus-outer{border:0}\";\n\nconst Slider = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmValueChange = createEvent(this, \"vmValueChange\", 7);\n this.vmFocus = createEvent(this, \"vmFocus\", 7);\n this.vmBlur = createEvent(this, \"vmBlur\", 7);\n /**\n * A number that specifies the granularity that the value must adhere to.\n */\n this.step = 1;\n /**\n * The lowest value in the range of permitted values.\n */\n this.min = 0;\n /**\n * The greatest permitted value.\n */\n this.max = 10;\n /**\n * The current value.\n */\n this.value = 5;\n withComponentRegistry(this);\n }\n getPercentage() {\n return `${(this.value / this.max) * 100}%`;\n }\n onValueChange(event) {\n var _a;\n const value = parseFloat((_a = event.target) === null || _a === void 0 ? void 0 : _a.value);\n this.vmValueChange.emit(value);\n }\n calcTouchedValue(event) {\n const input = event.target;\n const touch = event.changedTouches[0];\n const min = parseFloat(input.getAttribute('min'));\n const max = parseFloat(input.getAttribute('max'));\n const step = parseFloat(input.getAttribute('step'));\n const delta = max - min;\n // Calculate percentage.\n let percent;\n const clientRect = input.getBoundingClientRect();\n const sliderThumbWidth = parseFloat(window\n .getComputedStyle(this.host)\n .getPropertyValue('--vm-slider-thumb-width'));\n const thumbWidth = ((100 / clientRect.width) * (sliderThumbWidth / 2)) / 100;\n percent = (100 / clientRect.width) * (touch.clientX - clientRect.left);\n // Don't allow outside bounds.\n percent = Math.max(0, Math.min(percent, 100));\n // Factor in the thumb offset.\n if (percent < 50) {\n percent -= (100 - percent * 2) * thumbWidth;\n }\n else if (percent > 50) {\n percent += (percent - 50) * 2 * thumbWidth;\n }\n const position = delta * (percent / 100);\n if (step >= 1) {\n return min + Math.round(position / step) * step;\n }\n /**\n * This part differs from original implementation to save space. Only supports 2 decimal\n * places (0.01) as the step.\n */\n return min + parseFloat(position.toFixed(2));\n }\n /**\n * Basically input[range=\"type\"] on touch devices sucks (particularly iOS), so this helps make it\n * better.\n *\n * @see https://github.com/sampotts/rangetouch\n */\n onTouch(event) {\n const input = event.target;\n if (input.disabled)\n return;\n event.preventDefault();\n this.value = this.calcTouchedValue(event);\n this.vmValueChange.emit(this.value);\n input.dispatchEvent(new window.Event(event.type === 'touchend' ? 'change' : 'input', {\n bubbles: true,\n }));\n }\n render() {\n var _a;\n return (h(\"div\", { class: \"slider\", style: {\n '--vm-value': this.getPercentage(),\n } }, h(\"input\", { type: \"range\", step: this.step, min: this.min, max: this.max, value: this.value, autocomplete: \"off\", \"aria-label\": this.label, \"aria-valuemin\": this.min, \"aria-valuemax\": this.max, \"aria-valuenow\": this.value, \"aria-valuetext\": (_a = this.valueText) !== null && _a !== void 0 ? _a : this.getPercentage(), \"aria-orientation\": \"horizontal\", onInput: this.onValueChange.bind(this), onFocus: () => {\n this.vmFocus.emit();\n }, onBlur: () => {\n this.vmBlur.emit();\n }, onTouchStart: this.onTouch.bind(this), onTouchMove: this.onTouch.bind(this), onTouchEnd: this.onTouch.bind(this) })));\n }\n get host() { return this; }\n static get style() { return sliderCss; }\n};\n\nconst spinnerCss = \":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--vm-spinner-z-index)}.spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center;opacity:0;visibility:hidden;pointer-events:none;transition:var(--vm-fade-transition)}.spinner.hidden{display:none}.spinner.active{opacity:1;visibility:visible}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.spin{background:transparent;margin:60px auto;font-size:10px;position:relative;text-indent:-9999em;pointer-events:none;border-top:var(--vm-spinner-thickness) solid var(--vm-spinner-fill-color);border-left:var(--vm-spinner-thickness) solid var(--vm-spinner-fill-color);border-right:var(--vm-spinner-thickness) solid var(--vm-spinner-track-color);border-bottom:var(--vm-spinner-thickness) solid var(--vm-spinner-track-color);transform:translateZ(0)}.spin.active{animation:spin var(--vm-spinner-spin-duration) infinite\\n var(--vm-spinner-spin-timing-func)}.spin,.spin::after{border-radius:50%;width:var(--vm-spinner-width);height:var(--vm-spinner-height)}\";\n\nconst Spinner = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmWillShow = createEvent(this, \"vmWillShow\", 3);\n this.vmWillHide = createEvent(this, \"vmWillHide\", 3);\n this.blacklist = [Provider.YouTube];\n this.isHidden = true;\n this.isActive = false;\n /** @internal */\n this.isVideoView = false;\n /**\n * Whether the spinner should be active when the player is booting or media is loading.\n */\n this.showWhenMediaLoading = false;\n /** @internal */\n this.playbackReady = false;\n /** @internal */\n this.buffering = false;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'isVideoView',\n 'buffering',\n 'playbackReady',\n 'currentProvider',\n ]);\n }\n onVideoViewChange() {\n this.isHidden = !this.isVideoView;\n this.onVisiblityChange();\n }\n onActiveChange() {\n this.isActive =\n this.buffering || (this.showWhenMediaLoading && !this.playbackReady);\n this.onVisiblityChange();\n }\n onVisiblityChange() {\n !this.isHidden && this.isActive\n ? this.vmWillShow.emit()\n : this.vmWillHide.emit();\n }\n render() {\n return (h(\"div\", { class: {\n spinner: true,\n hidden: this.isHidden || this.blacklist.includes(this.currentProvider),\n active: this.isActive,\n } }, h(\"div\", { class: {\n spin: true,\n active: this.isActive,\n } }, \"Loading...\")));\n }\n static get watchers() { return {\n \"isVideoView\": [\"onVideoViewChange\"],\n \"buffering\": [\"onActiveChange\"],\n \"playbackReady\": [\"onActiveChange\"]\n }; }\n static get style() { return spinnerCss; }\n};\n\nvar __awaiter$4 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nlet idCount = 0;\nconst Submenu = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmOpenSubmenu = createEvent(this, \"vmOpenSubmenu\", 7);\n this.vmCloseSubmenu = createEvent(this, \"vmCloseSubmenu\", 7);\n /**\n * The direction the submenu should slide in from.\n */\n this.slideInDirection = 'right';\n /**\n * Whether the submenu is open/closed.\n */\n this.active = false;\n withComponentRegistry(this);\n }\n connectedCallback() {\n this.genId();\n }\n /**\n * Returns the controller (`vm-menu-item`) for this submenu.\n */\n getController() {\n return __awaiter$4(this, void 0, void 0, function* () {\n return this.controller;\n });\n }\n /**\n * Returns the menu (`vm-menu`) for this submenu.\n */\n getMenu() {\n return __awaiter$4(this, void 0, void 0, function* () {\n return this.menu;\n });\n }\n /**\n * Returns the height of the submenu controller.\n */\n getControllerHeight() {\n var _a, _b;\n return __awaiter$4(this, void 0, void 0, function* () {\n return (_b = (_a = this.controller) === null || _a === void 0 ? void 0 : _a.getHeight()) !== null && _b !== void 0 ? _b : 0;\n });\n }\n getControllerHeightSync() {\n var _a;\n const el = (_a = this.controller) === null || _a === void 0 ? void 0 : _a.shadowRoot.querySelector(\"[role='menuitem']\");\n return el ? parseFloat(window.getComputedStyle(el).height) : 0;\n }\n onMenuOpen() {\n this.active = true;\n this.vmOpenSubmenu.emit(this.host);\n }\n onMenuClose() {\n this.active = false;\n this.vmCloseSubmenu.emit(this.host);\n }\n genId() {\n idCount += 1;\n this.id = `vm-submenu-${idCount}`;\n }\n getControllerId() {\n return `${this.id}-controller`;\n }\n render() {\n return (h(\"div\", null, h(\"vm-menu-item\", { identifier: this.getControllerId(), menu: this.menu, label: this.label, hint: this.hint, expanded: this.active, ref: el => {\n writeTask(() => {\n this.controller = el;\n });\n } }), h(\"vm-menu\", { identifier: this.id, controller: this.controller, active: this.active, slideInDirection: this.slideInDirection, onVmOpen: this.onMenuOpen.bind(this), onVmClose: this.onMenuClose.bind(this), ref: el => {\n writeTask(() => {\n this.menu = el;\n });\n }, style: { top: `${this.getControllerHeightSync() + 1}px` } }, h(\"slot\", null))));\n }\n get host() { return this; }\n};\n\nconst timeCss = \".time{display:flex;align-items:center;color:var(--vm-time-color);font-size:var(--vm-time-font-size);font-weight:var(--vm-time-font-weight)}\";\n\nconst Time = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * The length of time in seconds.\n */\n this.seconds = 0;\n /**\n * Whether the time should always show the hours unit, even if the time is less than\n * 1 hour (eg: `20:35` -> `00:20:35`).\n */\n this.alwaysShowHours = false;\n withComponentRegistry(this);\n }\n render() {\n return (h(\"div\", { class: \"time\", \"aria-label\": this.label }, formatTime(Math.max(0, this.seconds), this.alwaysShowHours)));\n }\n static get style() { return timeCss; }\n};\n\nconst timeProgressCss = \".timeProgress{display:flex;width:100%;height:100%;align-items:center;color:var(--vm-time-color)}.separator{margin:0 4px}\";\n\nconst TimeProgress = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /**\n * The string used to separate the current time and end time.\n */\n this.separator = '/';\n /**\n * Whether the times should always show the hours unit, even if the time is less than\n * 1 hour (eg: `20:35` -> `00:20:35`).\n */\n this.alwaysShowHours = false;\n withComponentRegistry(this);\n }\n render() {\n return (h(\"div\", { class: \"timeProgress\" }, h(\"vm-current-time\", { alwaysShowHours: this.alwaysShowHours }), h(\"span\", { class: \"separator\" }, this.separator), h(\"vm-end-time\", { alwaysShowHours: this.alwaysShowHours })));\n }\n static get style() { return timeProgressCss; }\n};\n\nconst tooltipCss = \":host{display:contents;z-index:var(--vm-tooltip-z-index)}.tooltip{left:var(--vm-tooltip-left, 50%);transform:translateX(-50%);line-height:1.3;pointer-events:none;position:absolute;opacity:0;white-space:nowrap;visibility:hidden;background:var(--vm-tooltip-bg);border-radius:var(--vm-tooltip-border-radius);box-sizing:border-box;box-shadow:var(--vm-tooltip-box-shadow);color:var(--vm-tooltip-color);font-size:var(--vm-tooltip-font-size);padding:var(--vm-tooltip-padding);transition:opacity var(--vm-tooltip-fade-duration)\\n var(--vm-tooltip-fade-timing-func)}.tooltip[aria-hidden='false']{opacity:1;visibility:visible}.tooltip.hidden{display:none}.tooltip.onTop{bottom:100%;margin-bottom:var(--vm-tooltip-spacing)}.tooltip.onBottom{top:100%;margin-top:var(--vm-tooltip-spacing)}.tooltip.growLeft{left:auto;right:0;transform:none}.tooltip.growRight{left:0;transform:none}\";\n\nlet tooltipIdCount = 0;\nconst Tooltip = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n // Avoid tooltips flashing when player initializing.\n this.hasLoaded = false;\n /**\n * Whether the tooltip is displayed or not.\n */\n this.hidden = false;\n /**\n * Whether the tooltip is visible or not.\n */\n this.active = false;\n /**\n * Determines if the tooltip appears on top/bottom of it's parent.\n */\n this.position = 'top';\n /** @internal */\n this.isTouch = false;\n /** @internal */\n this.isMobile = false;\n withComponentRegistry(this);\n withPlayerContext(this, ['isTouch', 'isMobile']);\n }\n componentDidLoad() {\n this.hasLoaded = true;\n }\n getId() {\n // eslint-disable-next-line prefer-destructuring\n const id = this.host.id;\n if (isString(id) && id.length > 0)\n return id;\n tooltipIdCount += 1;\n return `vm-tooltip-${tooltipIdCount}`;\n }\n render() {\n return (h(\"div\", { id: this.getId(), role: \"tooltip\", \"aria-hidden\": !this.active || this.isTouch || this.isMobile ? 'true' : 'false', class: {\n tooltip: true,\n hidden: !this.hasLoaded || this.hidden,\n onTop: this.position === 'top',\n onBottom: this.position === 'bottom',\n growLeft: this.direction === 'left',\n growRight: this.direction === 'right',\n } }, h(\"slot\", null)));\n }\n get host() { return this; }\n static get style() { return tooltipCss; }\n};\n\nconst uiCss = \":host{z-index:var(--vm-ui-z-index)}.ui{width:100%;pointer-events:none}.ui.hidden{display:none}.ui.video{position:absolute;top:0;left:0;height:100%}\";\n\nconst UI = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n /** @internal */\n this.isVideoView = false;\n /** @internal */\n this.playsinline = false;\n /** @internal */\n this.isFullscreenActive = false;\n withComponentRegistry(this);\n withPlayerContext(this, [\n 'isVideoView',\n 'playsinline',\n 'isFullscreenActive',\n ]);\n }\n render() {\n const canShowCustomUI = !IS_IOS ||\n !this.isVideoView ||\n (this.playsinline && !this.isFullscreenActive);\n return (h(\"div\", { class: {\n ui: true,\n hidden: !canShowCustomUI,\n video: this.isVideoView,\n } }, canShowCustomUI && h(\"slot\", null)));\n }\n static get style() { return uiCss; }\n};\n\nvar __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst Video = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n /**\n * @internal Whether an external SDK will attach itself to the media player and control it.\n */\n this.willAttach = false;\n /**\n * @internal Whether an external SDK will manage the text tracks.\n */\n this.hasCustomTextManager = false;\n /** @inheritdoc */\n this.preload = 'metadata';\n withComponentRegistry(this);\n withProviderConnect(this);\n }\n onProviderConnect(event) {\n if (this.willAttach)\n event.stopImmediatePropagation();\n }\n onProviderDisconnect(event) {\n if (this.willAttach)\n event.stopImmediatePropagation();\n }\n /** @internal */\n getAdapter() {\n var _a;\n return __awaiter$3(this, void 0, void 0, function* () {\n return (_a = this.fileProvider) === null || _a === void 0 ? void 0 : _a.getAdapter();\n });\n }\n render() {\n return (h(\"vm-file\", { noConnect: true, willAttach: this.willAttach, crossOrigin: this.crossOrigin, poster: this.poster, preload: this.preload, controlsList: this.controlsList, autoPiP: this.autoPiP, disablePiP: this.disablePiP, disableRemotePlayback: this.disableRemotePlayback, hasCustomTextManager: this.hasCustomTextManager, mediaTitle: this.mediaTitle, viewType: ViewType.Video, ref: (el) => {\n this.fileProvider = el;\n } }, h(\"slot\", null)));\n }\n};\n\n/**\n * @see https://developer.vimeo.com/player/sdk/reference#events-for-playback-controls\n */\nvar VimeoEvent;\n(function (VimeoEvent) {\n VimeoEvent[\"Play\"] = \"play\";\n VimeoEvent[\"Pause\"] = \"pause\";\n VimeoEvent[\"Seeking\"] = \"seeking\";\n VimeoEvent[\"Seeked\"] = \"seeked\";\n VimeoEvent[\"TimeUpdate\"] = \"timeupdate\";\n VimeoEvent[\"VolumeChange\"] = \"volumechange\";\n VimeoEvent[\"DurationChange\"] = \"durationchange\";\n VimeoEvent[\"FullscreenChange\"] = \"fullscreenchange\";\n VimeoEvent[\"CueChange\"] = \"cuechange\";\n VimeoEvent[\"Progress\"] = \"progress\";\n VimeoEvent[\"Error\"] = \"error\";\n VimeoEvent[\"PlaybackRateChange\"] = \"playbackratechange\";\n VimeoEvent[\"Loaded\"] = \"loaded\";\n VimeoEvent[\"BufferStart\"] = \"bufferstart\";\n VimeoEvent[\"BufferEnd\"] = \"bufferend\";\n VimeoEvent[\"TextTrackChange\"] = \"texttrackchange\";\n VimeoEvent[\"Waiting\"] = \"waiting\";\n VimeoEvent[\"Ended\"] = \"ended\";\n})(VimeoEvent || (VimeoEvent = {}));\n\nconst vimeoCss = \":host{z-index:var(--vm-media-z-index)}vm-embed{position:absolute;top:0;left:0;width:100%;height:100%}vm-embed.hideControls{display:block;width:100%;height:auto;position:relative}\";\n\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst videoInfoCache = new Map();\nconst Vimeo = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.vmError = createEvent(this, \"vmError\", 7);\n this.defaultInternalState = {};\n this.volume = 50;\n this.hasLoaded = false;\n this.internalState = {\n paused: true,\n playing: false,\n seeking: false,\n currentTime: 0,\n buffered: 0,\n playbackStarted: false,\n playRequest: false,\n };\n this.embedSrc = '';\n this.mediaTitle = '';\n /**\n * Whether to display the video owner's name.\n */\n this.byline = true;\n /**\n * Whether to display the video owner's portrait.\n */\n this.portrait = true;\n /**\n * Turns off automatically determining the aspect ratio of the current video.\n */\n this.noAutoAspectRatio = false;\n /**\n * Whether cookies should be enabled on the embed.\n */\n this.cookies = true;\n /** @internal */\n this.language = 'en';\n /** @internal */\n this.aspectRatio = '16:9';\n /** @internal */\n this.autoplay = false;\n /** @internal */\n this.controls = false;\n /** @internal */\n this.loop = false;\n /** @internal */\n this.muted = false;\n /** @internal */\n this.playsinline = false;\n withComponentRegistry(this);\n withProviderConnect(this);\n withProviderContext(this);\n }\n onVideoIdChange() {\n this.cancelTimeUpdates();\n if (!this.videoId) {\n this.embedSrc = '';\n return;\n }\n this.embedSrc = `${this.getOrigin()}/video/${this.videoId}`;\n this.pendingDurationCall = deferredPromise();\n this.pendingMediaTitleCall = deferredPromise();\n this.fetchVideoInfo = this.getVideoInfo();\n }\n onCustomPosterChange() {\n this.dispatch('currentPoster', this.poster);\n }\n connectedCallback() {\n this.dispatch = createProviderDispatcher(this);\n this.dispatch('viewType', ViewType.Video);\n this.onVideoIdChange();\n this.defaultInternalState = Object.assign({}, this.internalState);\n }\n componentWillLoad() {\n this.initialMuted = this.muted;\n }\n disconnectedCallback() {\n this.cancelTimeUpdates();\n this.pendingPlayRequest = undefined;\n }\n getOrigin() {\n return 'https://player.vimeo.com';\n }\n getPreconnections() {\n return [\n this.getOrigin(),\n 'https://i.vimeocdn.com',\n 'https://f.vimeocdn.com',\n 'https://fresnel.vimeocdn.com',\n ];\n }\n remoteControl(command, arg) {\n return this.embed.postMessage({\n method: command,\n value: arg,\n });\n }\n buildParams() {\n return {\n byline: this.byline,\n color: this.color,\n portrait: this.portrait,\n autopause: false,\n transparent: false,\n autoplay: this.autoplay,\n muted: this.initialMuted,\n playsinline: this.playsinline,\n dnt: !this.cookies,\n };\n }\n getVideoInfo() {\n return __awaiter$2(this, void 0, void 0, function* () {\n if (videoInfoCache.has(this.videoId))\n return videoInfoCache.get(this.videoId);\n return window\n .fetch(`https://vimeo.com/api/oembed.json?url=${this.embedSrc}`)\n .then(response => response.json())\n .then(data => {\n var _a;\n const thumnailRegex = /vimeocdn.com\\/video\\/(.*)?_/;\n const thumbnailId = (_a = data === null || data === void 0 ? void 0 : data.thumbnail_url) === null || _a === void 0 ? void 0 : _a.match(thumnailRegex)[1];\n const poster = `https://i.vimeocdn.com/video/${thumbnailId}_1920x1080.jpg`;\n const info = { poster, width: data === null || data === void 0 ? void 0 : data.width, height: data === null || data === void 0 ? void 0 : data.height };\n videoInfoCache.set(this.videoId, info);\n return info;\n });\n });\n }\n onTimeChange(time) {\n if (this.internalState.currentTime === time)\n return;\n this.dispatch('currentTime', time);\n // This is how we detect `seeking` early.\n if (Math.abs(this.internalState.currentTime - time) > 1.5) {\n this.internalState.seeking = true;\n this.dispatch('seeking', true);\n if (this.internalState.playing && this.internalState.buffered < time) {\n this.dispatch('buffering', true);\n }\n // Player doesn't resume playback once seeked.\n window.clearTimeout(this.pendingPlayRequest);\n if (!this.internalState.paused) {\n this.internalState.playRequest = true;\n }\n this.remoteControl(this.internalState.playbackStarted\n ? \"pause\" /* Pause */\n : \"play\" /* Play */);\n }\n this.internalState.currentTime = time;\n }\n cancelTimeUpdates() {\n if (isNumber(this.timeRAF))\n window.cancelAnimationFrame(this.timeRAF);\n }\n requestTimeUpdates() {\n this.remoteControl(\"getCurrentTime\" /* GetCurrentTime */);\n this.timeRAF = window.requestAnimationFrame(() => {\n this.requestTimeUpdates();\n });\n }\n onSeeked() {\n if (!this.internalState.seeking)\n return;\n this.dispatch('seeking', false);\n this.internalState.seeking = false;\n if (this.internalState.playRequest) {\n window.setTimeout(() => {\n this.remoteControl(\"play\" /* Play */);\n }, 150);\n }\n }\n onVimeoMethod(method, arg) {\n var _a, _b;\n switch (method) {\n case \"getCurrentTime\" /* GetCurrentTime */:\n if (!this.internalState.seeking)\n this.onTimeChange(arg);\n break;\n case \"getDuration\" /* GetDuration */:\n (_a = this.pendingDurationCall) === null || _a === void 0 ? void 0 : _a.resolve(arg);\n break;\n case \"getVideoTitle\" /* GetVideoTitle */:\n (_b = this.pendingMediaTitleCall) === null || _b === void 0 ? void 0 : _b.resolve(arg);\n break;\n }\n }\n onLoaded() {\n var _a, _b;\n if (this.hasLoaded)\n return;\n this.pendingPlayRequest = undefined;\n this.internalState = Object.assign({}, this.defaultInternalState);\n this.dispatch('currentSrc', this.embedSrc);\n this.dispatch('mediaType', MediaType.Video);\n this.remoteControl(\"getDuration\" /* GetDuration */);\n this.remoteControl(\"getVideoTitle\" /* GetVideoTitle */);\n Promise.all([\n this.fetchVideoInfo,\n (_a = this.pendingDurationCall) === null || _a === void 0 ? void 0 : _a.promise,\n (_b = this.pendingMediaTitleCall) === null || _b === void 0 ? void 0 : _b.promise,\n ]).then(([info, duration, mediaTitle]) => {\n var _a, _b, _c;\n this.requestTimeUpdates();\n this.dispatch('aspectRatio', `${(_a = info === null || info === void 0 ? void 0 : info.width) !== null && _a !== void 0 ? _a : 16}:${(_b = info === null || info === void 0 ? void 0 : info.height) !== null && _b !== void 0 ? _b : 9}`);\n this.dispatch('currentPoster', (_c = this.poster) !== null && _c !== void 0 ? _c : info === null || info === void 0 ? void 0 : info.poster);\n this.dispatch('duration', duration !== null && duration !== void 0 ? duration : -1);\n this.dispatch('mediaTitle', mediaTitle);\n this.dispatch('playbackReady', true);\n });\n this.hasLoaded = true;\n }\n onVimeoEvent(event, payload) {\n switch (event) {\n case \"ready\" /* Ready */:\n Object.values(VimeoEvent).forEach(e => {\n this.remoteControl(\"addEventListener\" /* AddEventListener */, e);\n });\n break;\n case \"loaded\" /* Loaded */:\n this.onLoaded();\n break;\n case \"play\" /* Play */:\n // Incase of autoplay which might skip `Loaded` event.\n this.onLoaded();\n this.internalState.paused = false;\n this.dispatch('paused', false);\n break;\n case \"playProgress\" /* PlayProgress */:\n if (!this.internalState.playing) {\n this.dispatch('playing', true);\n this.internalState.playing = true;\n this.internalState.playbackStarted = true;\n this.pendingPlayRequest = window.setTimeout(() => {\n this.internalState.playRequest = false;\n this.pendingPlayRequest = undefined;\n }, 1000);\n }\n this.dispatch('buffering', false);\n this.onSeeked();\n break;\n case \"pause\" /* Pause */:\n this.internalState.paused = true;\n this.internalState.playing = false;\n this.dispatch('paused', true);\n this.dispatch('buffering', false);\n break;\n case \"loadProgress\" /* LoadProgress */:\n this.internalState.buffered = payload.seconds;\n this.dispatch('buffered', payload.seconds);\n break;\n case \"bufferstart\" /* BufferStart */:\n this.dispatch('buffering', true);\n // Attempt to detect `play` events early.\n if (this.internalState.paused) {\n this.internalState.paused = false;\n this.dispatch('paused', false);\n this.dispatch('playbackStarted', true);\n }\n break;\n case \"bufferend\" /* BufferEnd */:\n this.dispatch('buffering', false);\n if (this.internalState.paused)\n this.onSeeked();\n break;\n case \"volumechange\" /* VolumeChange */:\n if (payload.volume > 0) {\n const newVolume = Math.floor(payload.volume * 100);\n this.dispatch('muted', false);\n if (this.volume !== newVolume) {\n this.volume = newVolume;\n this.dispatch('volume', this.volume);\n }\n }\n else {\n this.dispatch('muted', true);\n }\n break;\n case \"durationchange\" /* DurationChange */:\n this.dispatch('duration', payload.duration);\n break;\n case \"playbackratechange\" /* PlaybackRateChange */:\n this.dispatch('playbackRate', payload.playbackRate);\n break;\n case \"fullscreenchange\" /* FullscreenChange */:\n this.dispatch('isFullscreenActive', payload.fullscreen);\n break;\n case \"finish\" /* Finish */:\n if (this.loop) {\n this.remoteControl(\"setCurrentTime\" /* SetCurrentTime */, 0);\n setTimeout(() => {\n this.remoteControl(\"play\" /* Play */);\n }, 200);\n }\n else {\n this.dispatch('playbackEnded', true);\n }\n break;\n case \"error\" /* Error */:\n this.vmError.emit(payload);\n break;\n }\n }\n onEmbedSrcChange() {\n this.hasLoaded = false;\n this.vmLoadStart.emit();\n this.dispatch('viewType', ViewType.Video);\n }\n onEmbedMessage(event) {\n const message = event.detail;\n if (!isUndefined(message.event))\n this.onVimeoEvent(message.event, message.data);\n if (!isUndefined(message.method))\n this.onVimeoMethod(message.method, message.value);\n }\n adjustPosition() {\n if (this.controls) {\n return {};\n }\n const [aw, ah] = this.aspectRatio.split(':').map(r => parseInt(r, 10));\n const height = 240;\n const padding = (100 / aw) * ah;\n const offset = (height - padding) / (height / 50);\n return {\n paddingBottom: `${height}%`,\n transform: `translateY(-${offset + 0.02}%)`,\n };\n }\n /** @internal */\n getAdapter() {\n return __awaiter$2(this, void 0, void 0, function* () {\n const canPlayRegex = /vimeo(?:\\.com|)\\/([0-9]{9,})/;\n const fileRegex = /vimeo\\.com\\/external\\/[0-9]+\\..+/;\n return {\n getInternalPlayer: () => __awaiter$2(this, void 0, void 0, function* () { return this.embed; }),\n play: () => __awaiter$2(this, void 0, void 0, function* () {\n this.remoteControl(\"play\" /* Play */);\n }),\n pause: () => __awaiter$2(this, void 0, void 0, function* () {\n this.remoteControl(\"pause\" /* Pause */);\n }),\n canPlay: (type) => __awaiter$2(this, void 0, void 0, function* () { return isString(type) && !fileRegex.test(type) && canPlayRegex.test(type); }),\n setCurrentTime: (time) => __awaiter$2(this, void 0, void 0, function* () {\n if (time !== this.internalState.currentTime) {\n this.remoteControl(\"setCurrentTime\" /* SetCurrentTime */, time);\n }\n }),\n setMuted: (muted) => __awaiter$2(this, void 0, void 0, function* () {\n if (!muted)\n this.volume = this.volume > 0 ? this.volume : 30;\n this.remoteControl(\"setVolume\" /* SetVolume */, muted ? 0 : this.volume / 100);\n }),\n setVolume: (volume) => __awaiter$2(this, void 0, void 0, function* () {\n if (!this.muted) {\n this.remoteControl(\"setVolume\" /* SetVolume */, volume / 100);\n }\n else {\n // Confirm volume was set.\n this.dispatch('volume', volume);\n }\n }),\n // @TODO how to check if Vimeo pro?\n canSetPlaybackRate: () => __awaiter$2(this, void 0, void 0, function* () { return false; }),\n setPlaybackRate: (rate) => __awaiter$2(this, void 0, void 0, function* () {\n this.remoteControl(\"setPlaybackRate\" /* SetPlaybackRate */, rate);\n }),\n };\n });\n }\n render() {\n return (h(\"vm-embed\", { class: { hideControls: !this.controls }, style: this.adjustPosition(), embedSrc: this.embedSrc, mediaTitle: this.mediaTitle, origin: this.getOrigin(), params: this.buildParams(), decoder: decodeJSON, preconnections: this.getPreconnections(), onVmEmbedMessage: this.onEmbedMessage.bind(this), onVmEmbedSrcChange: this.onEmbedSrcChange.bind(this), ref: (el) => {\n this.embed = el;\n } }));\n }\n static get watchers() { return {\n \"videoId\": [\"onVideoIdChange\"],\n \"poster\": [\"onCustomPosterChange\"]\n }; }\n static get style() { return vimeoCss; }\n};\n\nconst volumeControlCss = \".volumeControl{align-items:center;display:flex;position:relative;pointer-events:auto;box-sizing:border-box}vm-slider{width:75px;height:100%;margin:0;max-width:0;position:relative;z-index:3;transition:margin 0.2s cubic-bezier(0.4, 0, 1, 1),\\n max-width 0.2s cubic-bezier(0.4, 0, 1, 1);margin-left:calc(var(--vm-control-spacing) / 2) !important;visibility:hidden}vm-slider:hover{cursor:pointer}vm-slider.hidden{display:none}vm-slider.active{max-width:75px;visibility:visible;margin:0 calc(var(--vm-control-spacing) / 2)}\";\n\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst VolumeControl = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.keyboardDisposal = new Disposal();\n this.prevMuted = false;\n this.currentVolume = 50;\n this.isSliderActive = false;\n /**\n * The name of the low volume icon to resolve from the icon library.\n */\n this.lowVolumeIcon = 'volume-low';\n /**\n * The name of the high volume icon to resolve from the icon library.\n */\n this.highVolumeIcon = 'volume-high';\n /**\n * The name of the muted volume icon to resolve from the icon library.\n */\n this.mutedIcon = 'volume-mute';\n /**\n * Whether the tooltip is positioned above/below the control.\n */\n this.tooltipPosition = 'top';\n /**\n * Whether the tooltip should be hidden.\n */\n this.hideTooltip = false;\n /**\n * A pipe (`/`) separated string of JS keyboard keys, that when caught in a `keydown` event, will\n * toggle the muted state of the player.\n */\n this.muteKeys = 'm';\n /**\n * Prevents the volume being changed using the Up/Down arrow keys.\n */\n this.noKeyboard = false;\n /** @internal */\n this.muted = false;\n /** @internal */\n this.volume = 50;\n /** @internal */\n this.isMobile = false;\n /** @internal */\n this.i18n = {};\n withComponentRegistry(this);\n withPlayerContext(this, ['volume', 'muted', 'isMobile', 'i18n']);\n }\n onNoKeyboardChange() {\n return __awaiter$1(this, void 0, void 0, function* () {\n this.keyboardDisposal.empty();\n if (this.noKeyboard)\n return;\n const player = yield findPlayer(this);\n if (isUndefined(player))\n return;\n this.keyboardDisposal.add(listen(player, 'keydown', (event) => {\n if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown')\n return;\n const isUpArrow = event.key === 'ArrowUp';\n const newVolume = isUpArrow\n ? Math.min(100, this.volume + 5)\n : Math.max(0, this.volume - 5);\n this.dispatch('volume', parseInt(`${newVolume}`, 10));\n }));\n });\n }\n onPlayerVolumeChange() {\n this.currentVolume = this.muted ? 0 : this.volume;\n if (!this.muted && this.prevMuted && this.volume === 0) {\n this.dispatch('volume', 30);\n }\n this.prevMuted = this.muted;\n }\n connectedCallback() {\n this.prevMuted = this.muted;\n this.dispatch = createDispatcher(this);\n this.onNoKeyboardChange();\n }\n disconnectedCallback() {\n this.keyboardDisposal.empty();\n }\n onShowSlider() {\n clearTimeout(this.hideSliderTimeout);\n this.isSliderActive = true;\n }\n onHideSlider() {\n this.hideSliderTimeout = setTimeout(() => {\n this.isSliderActive = false;\n }, 100);\n }\n onVolumeChange(event) {\n const newVolume = event.detail;\n this.currentVolume = newVolume;\n this.dispatch('volume', newVolume);\n this.dispatch('muted', newVolume === 0);\n }\n onKeyDown(event) {\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')\n return;\n event.stopPropagation();\n }\n render() {\n return (h(\"div\", { class: \"volumeControl\", onMouseEnter: this.onShowSlider.bind(this), onMouseLeave: this.onHideSlider.bind(this) }, h(\"vm-mute-control\", { keys: this.muteKeys, lowVolumeIcon: this.lowVolumeIcon, highVolumeIcon: this.highVolumeIcon, mutedIcon: this.mutedIcon, icons: this.icons, tooltipPosition: this.tooltipPosition, tooltipDirection: this.tooltipDirection, hideTooltip: this.hideTooltip, onVmFocus: this.onShowSlider.bind(this), onVmBlur: this.onHideSlider.bind(this) }), h(\"vm-slider\", { class: {\n hidden: this.isMobile,\n active: this.isSliderActive,\n }, step: 5, max: 100, value: this.currentVolume, label: this.i18n.volume, onKeyDown: this.onKeyDown.bind(this), onVmFocus: this.onShowSlider.bind(this), onVmBlur: this.onHideSlider.bind(this), onVmValueChange: this.onVolumeChange.bind(this) })));\n }\n static get watchers() { return {\n \"noKeyboard\": [\"onNoKeyboardChange\"],\n \"muted\": [\"onPlayerVolumeChange\"],\n \"volume\": [\"onPlayerVolumeChange\"]\n }; }\n static get style() { return volumeControlCss; }\n};\n\nconst mapYouTubePlaybackQuality = (quality) => {\n switch (quality) {\n case \"unknown\" /* Unknown */:\n return undefined;\n case \"tiny\" /* Tiny */:\n return '144p';\n case \"small\" /* Small */:\n return '240p';\n case \"medium\" /* Medium */:\n return '360p';\n case \"large\" /* Large */:\n return '480p';\n case \"hd720\" /* Hd720 */:\n return '720p';\n case \"hd1080\" /* Hd1080 */:\n return '1080p';\n case \"highres\" /* Highres */:\n return '1440p';\n case \"max\" /* Max */:\n return '2160p';\n default:\n return undefined;\n }\n};\n\nconst youtubeCss = \":host{z-index:var(--vm-media-z-index)}\";\n\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try {\n step(generator.next(value));\n }\n catch (e) {\n reject(e);\n } }\n function rejected(value) { try {\n step(generator[\"throw\"](value));\n }\n catch (e) {\n reject(e);\n } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst posterCache = new Map();\nconst YouTube = class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n attachShadow(this);\n this.vmLoadStart = createEvent(this, \"vmLoadStart\", 7);\n this.defaultInternalState = {};\n this.internalState = {\n paused: true,\n duration: 0,\n seeking: false,\n playbackReady: false,\n playbackStarted: false,\n currentTime: 0,\n lastTimeUpdate: 0,\n playbackRate: 1,\n state: -1,\n };\n this.embedSrc = '';\n this.mediaTitle = '';\n /**\n * Whether cookies should be enabled on the embed.\n */\n this.cookies = false;\n /**\n * Whether the fullscreen control should be shown.\n */\n this.showFullscreenControl = true;\n /** @internal */\n this.language = 'en';\n /** @internal */\n this.autoplay = false;\n /** @internal */\n this.controls = false;\n /** @internal */\n this.loop = false;\n /** @internal */\n this.muted = false;\n /** @internal */\n this.playsinline = false;\n withComponentRegistry(this);\n withProviderConnect(this);\n withProviderContext(this);\n }\n onVideoIdChange() {\n if (!this.videoId) {\n this.embedSrc = '';\n return;\n }\n this.embedSrc = `${this.getOrigin()}/embed/${this.videoId}`;\n this.fetchPosterURL = this.findPosterURL();\n }\n onCustomPosterChange() {\n this.dispatch('currentPoster', this.poster);\n }\n connectedCallback() {\n this.dispatch = createProviderDispatcher(this);\n this.dispatch('viewType', ViewType.Video);\n this.onVideoIdChange();\n this.defaultInternalState = Object.assign({}, this.internalState);\n }\n componentWillLoad() {\n this.initialMuted = this.muted;\n }\n /** @internal */\n getAdapter() {\n return __awaiter(this, void 0, void 0, function* () {\n const canPlayRegex = /(?:youtu\\.be|youtube|youtube\\.com|youtube-nocookie\\.com)\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=|)((?:\\w|-){11})/;\n return {\n getInternalPlayer: () => __awaiter(this, void 0, void 0, function* () { return this.embed; }),\n play: () => __awaiter(this, void 0, void 0, function* () {\n this.remoteControl(\"playVideo\" /* Play */);\n }),\n pause: () => __awaiter(this, void 0, void 0, function* () {\n this.remoteControl(\"pauseVideo\" /* Pause */);\n }),\n canPlay: (type) => __awaiter(this, void 0, void 0, function* () { return isString(type) && canPlayRegex.test(type); }),\n setCurrentTime: (time) => __awaiter(this, void 0, void 0, function* () {\n if (time !== this.internalState.currentTime) {\n this.remoteControl(\"seekTo\" /* Seek */, time);\n }\n }),\n setMuted: (muted) => __awaiter(this, void 0, void 0, function* () {\n muted\n ? this.remoteControl(\"mute\" /* Mute */)\n : this.remoteControl(\"unMute\" /* Unmute */);\n }),\n setVolume: (volume) => __awaiter(this, void 0, void 0, function* () {\n this.remoteControl(\"setVolume\" /* SetVolume */, volume);\n }),\n canSetPlaybackRate: () => __awaiter(this, void 0, void 0, function* () { return true; }),\n setPlaybackRate: (rate) => __awaiter(this, void 0, void 0, function* () {\n this.remoteControl(\"setPlaybackRate\" /* SetPlaybackRate */, rate);\n }),\n };\n });\n }\n getOrigin() {\n return !this.cookies\n ? 'https://www.youtube-nocookie.com'\n : 'https://www.youtube.com';\n }\n getPreconnections() {\n return [\n this.getOrigin(),\n 'https://www.google.com',\n 'https://googleads.g.doubleclick.net',\n 'https://static.doubleclick.net',\n 'https://s.ytimg.com',\n 'https://i.ytimg.com',\n ];\n }\n remoteControl(command, arg) {\n return this.embed.postMessage({\n event: 'command',\n func: command,\n args: arg ? [arg] : undefined,\n });\n }\n buildParams() {\n return {\n enablejsapi: 1,\n cc_lang_pref: this.language,\n hl: this.language,\n fs: this.showFullscreenControl ? 1 : 0,\n controls: this.controls ? 1 : 0,\n disablekb: !this.controls ? 1 : 0,\n iv_load_policy: this.controls ? 1 : 3,\n mute: this.initialMuted ? 1 : 0,\n playsinline: this.playsinline ? 1 : 0,\n autoplay: this.autoplay ? 1 : 0,\n };\n }\n onEmbedSrcChange() {\n this.vmLoadStart.emit();\n this.dispatch('viewType', ViewType.Video);\n }\n onEmbedLoaded() {\n // Seems like we have to wait a random small delay or else YT player isn't ready.\n window.setTimeout(() => this.embed.postMessage({ event: 'listening' }), 100);\n }\n findPosterURL() {\n return __awaiter(this, void 0, void 0, function* () {\n if (posterCache.has(this.videoId))\n return posterCache.get(this.videoId);\n const posterURL = (quality) => `https://i.ytimg.com/vi/${this.videoId}/${quality}.jpg`;\n /**\n * We are testing a that the image has a min-width of 121px because if the thumbnail does not\n * exist YouTube returns a blank/error image that is 120px wide.\n */\n return loadImage(posterURL('maxresdefault'), 121) // 1080p (no padding)\n .catch(() => loadImage(posterURL('sddefault'), 121)) // 640p (padded 4:3)\n .catch(() => loadImage(posterURL('hqdefault'), 121)) // 480p (padded 4:3)\n .then(img => {\n const poster = img.src;\n posterCache.set(this.videoId, poster);\n return poster;\n });\n });\n }\n onCued() {\n if (this.internalState.playbackReady)\n return;\n this.internalState = Object.assign({}, this.defaultInternalState);\n this.dispatch('currentSrc', this.embedSrc);\n this.dispatch('mediaType', MediaType.Video);\n this.fetchPosterURL.then(poster => {\n var _a;\n this.dispatch('currentPoster', (_a = this.poster) !== null && _a !== void 0 ? _a : poster);\n this.dispatch('playbackReady', true);\n });\n this.internalState.playbackReady = true;\n }\n onPlayerStateChange(state) {\n // Sometimes the embed falls back to an unstarted state for some unknown reason, this will\n // make sure the player is configured to the right starting state.\n if (this.internalState.playbackReady &&\n state === -1 /* Unstarted */) {\n this.internalState.paused = true;\n this.internalState.playbackStarted = false;\n this.dispatch('buffering', false);\n this.dispatch('paused', true);\n this.dispatch('playbackStarted', false);\n return;\n }\n const isPlaying = state === 1 /* Playing */;\n const isBuffering = state === 3 /* Buffering */;\n this.dispatch('buffering', isBuffering);\n // Attempt to detect `play` events early.\n if (this.internalState.paused && (isBuffering || isPlaying)) {\n this.internalState.paused = false;\n this.dispatch('paused', false);\n if (!this.internalState.playbackStarted) {\n this.dispatch('playbackStarted', true);\n this.internalState.playbackStarted = true;\n }\n }\n switch (state) {\n case 5 /* Cued */:\n this.onCued();\n break;\n case 1 /* Playing */:\n // Incase of autoplay which might skip `Cued` event.\n this.onCued();\n this.dispatch('playing', true);\n break;\n case 2 /* Paused */:\n this.internalState.paused = true;\n this.dispatch('paused', true);\n break;\n case 0 /* Ended */:\n if (this.loop) {\n window.setTimeout(() => {\n this.remoteControl(\"playVideo\" /* Play */);\n }, 150);\n }\n else {\n this.dispatch('playbackEnded', true);\n this.internalState.paused = true;\n this.dispatch('paused', true);\n }\n break;\n }\n this.internalState.state = state;\n }\n calcCurrentTime(time) {\n let currentTime = time;\n if (this.internalState.state === 0 /* Ended */) {\n return this.internalState.duration;\n }\n if (this.internalState.state === 1 /* Playing */) {\n const elapsedTime = (Date.now() / 1e3 - this.defaultInternalState.lastTimeUpdate) *\n this.internalState.playbackRate;\n if (elapsedTime > 0)\n currentTime += Math.min(elapsedTime, 1);\n }\n return currentTime;\n }\n onTimeChange(time) {\n const currentTime = this.calcCurrentTime(time);\n this.dispatch('currentTime', currentTime);\n // This is the only way to detect `seeking`.\n if (Math.abs(this.internalState.currentTime - currentTime) > 1.5) {\n this.internalState.seeking = true;\n this.dispatch('seeking', true);\n }\n this.internalState.currentTime = currentTime;\n }\n onBufferedChange(buffered) {\n this.dispatch('buffered', buffered);\n /**\n * This is the only way to detect `seeked`. Unfortunately while the player is `paused` `seeking`\n * and `seeked` will fire at the same time, there are no updates inbetween -_-. We need an\n * artifical delay between the two events.\n */\n if (this.internalState.seeking &&\n buffered > this.internalState.currentTime) {\n window.setTimeout(() => {\n this.internalState.seeking = false;\n this.dispatch('seeking', false);\n }, this.internalState.paused ? 100 : 0);\n }\n }\n onEmbedMessage(event) {\n const message = event.detail;\n const { info } = message;\n if (!info)\n return;\n if (isObject(info.videoData))\n this.dispatch('mediaTitle', info.videoData.title);\n if (isNumber(info.duration)) {\n this.internalState.duration = info.duration;\n this.dispatch('duration', info.duration);\n }\n if (isArray(info.availablePlaybackRates)) {\n this.dispatch('playbackRates', info.availablePlaybackRates);\n }\n if (isNumber(info.playbackRate)) {\n this.internalState.playbackRate = info.playbackRate;\n this.dispatch('playbackRate', info.playbackRate);\n }\n if (isNumber(info.currentTime))\n this.onTimeChange(info.currentTime);\n if (isNumber(info.currentTimeLastUpdated)) {\n this.internalState.lastTimeUpdate = info.currentTimeLastUpdated;\n }\n if (isNumber(info.videoLoadedFraction)) {\n this.onBufferedChange(info.videoLoadedFraction * this.internalState.duration);\n }\n if (isNumber(info.volume))\n this.dispatch('volume', info.volume);\n if (isBoolean(info.muted))\n this.dispatch('muted', info.muted);\n if (isArray(info.availableQualityLevels)) {\n this.dispatch('playbackQualities', info.availableQualityLevels.map(q => mapYouTubePlaybackQuality(q)));\n }\n if (isString(info.playbackQuality)) {\n this.dispatch('playbackQuality', mapYouTubePlaybackQuality(info.playbackQuality));\n }\n if (isNumber(info.playerState))\n this.onPlayerStateChange(info.playerState);\n }\n render() {\n return (h(\"vm-embed\", { embedSrc: this.embedSrc, mediaTitle: this.mediaTitle, origin: this.getOrigin(), params: this.buildParams(), decoder: decodeJSON, preconnections: this.getPreconnections(), onVmEmbedLoaded: this.onEmbedLoaded.bind(this), onVmEmbedMessage: this.onEmbedMessage.bind(this), onVmEmbedSrcChange: this.onEmbedSrcChange.bind(this), ref: (el) => {\n this.embed = el;\n } }));\n }\n static get watchers() { return {\n \"cookies\": [\"onVideoIdChange\"],\n \"videoId\": [\"onVideoIdChange\"],\n \"poster\": [\"onCustomPosterChange\"]\n }; }\n static get style() { return youtubeCss; }\n};\n\nconst VmAudio = /*@__PURE__*/proxyCustomElement(Audio, [4,\"vm-audio\",{\"willAttach\":[4,\"will-attach\"],\"crossOrigin\":[1,\"cross-origin\"],\"preload\":[1],\"disableRemotePlayback\":[4,\"disable-remote-playback\"],\"mediaTitle\":[1,\"media-title\"]}]);\nconst VmCaptionControl = /*@__PURE__*/proxyCustomElement(CaptionControl, [1,\"vm-caption-control\",{\"showIcon\":[1,\"show-icon\"],\"hideIcon\":[1,\"hide-icon\"],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"icons\":[1],\"keys\":[1],\"i18n\":[16],\"playbackReady\":[4,\"playback-ready\"],\"textTracks\":[16],\"isTextTrackVisible\":[4,\"is-text-track-visible\"],\"canToggleCaptionVisibility\":[32]}]);\nconst VmCaptions = /*@__PURE__*/proxyCustomElement(Captions, [1,\"vm-captions\",{\"hidden\":[4],\"isControlsActive\":[4,\"is-controls-active\"],\"isVideoView\":[4,\"is-video-view\"],\"playbackStarted\":[4,\"playback-started\"],\"textTracks\":[16],\"currentTextTrack\":[2,\"current-text-track\"],\"isTextTrackVisible\":[4,\"is-text-track-visible\"],\"isEnabled\":[32],\"cue\":[32],\"fontSize\":[32]}]);\nconst VmClickToPlay = /*@__PURE__*/proxyCustomElement(ClickToPlay, [1,\"vm-click-to-play\",{\"useOnMobile\":[4,\"use-on-mobile\"],\"paused\":[4],\"isVideoView\":[4,\"is-video-view\"],\"isMobile\":[4,\"is-mobile\"]}]);\nconst VmControl = /*@__PURE__*/proxyCustomElement(Control, [1,\"vm-control\",{\"keys\":[1],\"identifier\":[1],\"hidden\":[4],\"label\":[1],\"menu\":[1],\"expanded\":[4],\"pressed\":[4],\"isTouch\":[4,\"is-touch\"],\"describedBy\":[32],\"showTapHighlight\":[32]}]);\nconst VmControlGroup = /*@__PURE__*/proxyCustomElement(ControlNewLine, [1,\"vm-control-group\",{\"space\":[1]}]);\nconst VmControlSpacer = /*@__PURE__*/proxyCustomElement(ControlSpacer, [1,\"vm-control-spacer\"]);\nconst VmControls = /*@__PURE__*/proxyCustomElement(Controls, [1,\"vm-controls\",{\"hidden\":[4],\"fullWidth\":[4,\"full-width\"],\"fullHeight\":[4,\"full-height\"],\"direction\":[1],\"align\":[1],\"justify\":[1],\"pin\":[513],\"activeDuration\":[2,\"active-duration\"],\"waitForPlaybackStart\":[4,\"wait-for-playback-start\"],\"hideWhenPaused\":[4,\"hide-when-paused\"],\"hideOnMouseLeave\":[4,\"hide-on-mouse-leave\"],\"isAudioView\":[4,\"is-audio-view\"],\"isSettingsActive\":[4,\"is-settings-active\"],\"playbackReady\":[4,\"playback-ready\"],\"isControlsActive\":[4,\"is-controls-active\"],\"paused\":[4],\"playbackStarted\":[4,\"playback-started\"],\"isInteracting\":[32]}]);\nconst VmCurrentTime = /*@__PURE__*/proxyCustomElement(CurrentTime, [1,\"vm-current-time\",{\"currentTime\":[2,\"current-time\"],\"i18n\":[16],\"alwaysShowHours\":[4,\"always-show-hours\"]}]);\nconst VmDailymotion = /*@__PURE__*/proxyCustomElement(Dailymotion, [1,\"vm-dailymotion\",{\"videoId\":[1,\"video-id\"],\"shouldAutoplayQueue\":[4,\"should-autoplay-queue\"],\"showUpNextQueue\":[4,\"show-up-next-queue\"],\"showShareButtons\":[4,\"show-share-buttons\"],\"color\":[1],\"syndication\":[1],\"showDailymotionLogo\":[4,\"show-dailymotion-logo\"],\"showVideoInfo\":[4,\"show-video-info\"],\"language\":[1],\"autoplay\":[4],\"controls\":[4],\"poster\":[1],\"logger\":[16],\"loop\":[4],\"muted\":[4],\"playsinline\":[4],\"embedSrc\":[32],\"mediaTitle\":[32]}]);\nconst VmDash = /*@__PURE__*/proxyCustomElement(Dash, [1,\"vm-dash\",{\"src\":[1],\"version\":[1],\"libSrc\":[1,\"lib-src\"],\"config\":[16],\"autoplay\":[4],\"crossOrigin\":[1,\"cross-origin\"],\"preload\":[1],\"poster\":[1],\"controlsList\":[1,\"controls-list\"],\"autoPiP\":[4,\"auto-pip\"],\"disablePiP\":[4,\"disable-pip\"],\"disableRemotePlayback\":[4,\"disable-remote-playback\"],\"mediaTitle\":[1,\"media-title\"],\"enableTextTracksByDefault\":[4,\"enable-text-tracks-by-default\"],\"shouldRenderNativeTextTracks\":[4,\"should-render-native-text-tracks\"],\"isTextTrackVisible\":[4,\"is-text-track-visible\"],\"currentTextTrack\":[2,\"current-text-track\"],\"hasAttached\":[32]},[[0,\"vmMediaElChange\",\"onMediaElChange\"]]]);\nconst VmDblClickFullscreen = /*@__PURE__*/proxyCustomElement(DblClickFullscreen, [1,\"vm-dbl-click-fullscreen\",{\"useOnMobile\":[4,\"use-on-mobile\"],\"isFullscreenActive\":[4,\"is-fullscreen-active\"],\"isVideoView\":[4,\"is-video-view\"],\"playbackReady\":[4,\"playback-ready\"],\"isMobile\":[4,\"is-mobile\"],\"canSetFullscreen\":[32]}]);\nconst VmDefaultControls = /*@__PURE__*/proxyCustomElement(DefaultControls, [1,\"vm-default-controls\",{\"activeDuration\":[2,\"active-duration\"],\"waitForPlaybackStart\":[4,\"wait-for-playback-start\"],\"hideWhenPaused\":[4,\"hide-when-paused\"],\"hideOnMouseLeave\":[4,\"hide-on-mouse-leave\"],\"theme\":[1],\"isMobile\":[4,\"is-mobile\"],\"isLive\":[4,\"is-live\"],\"isAudioView\":[4,\"is-audio-view\"],\"isVideoView\":[4,\"is-video-view\"]}]);\nconst VmDefaultSettings = /*@__PURE__*/proxyCustomElement(DefaultSettings, [1,\"vm-default-settings\",{\"pin\":[513],\"i18n\":[16],\"playbackReady\":[4,\"playback-ready\"],\"playbackRate\":[2,\"playback-rate\"],\"playbackRates\":[16],\"isVideoView\":[4,\"is-video-view\"],\"playbackQuality\":[1,\"playback-quality\"],\"playbackQualities\":[16],\"textTracks\":[16],\"currentTextTrack\":[2,\"current-text-track\"],\"audioTracks\":[16],\"currentAudioTrack\":[2,\"current-audio-track\"],\"isTextTrackVisible\":[4,\"is-text-track-visible\"],\"canSetPlaybackRate\":[32],\"canSetPlaybackQuality\":[32],\"canSetTextTrack\":[32],\"canSetAudioTrack\":[32]}]);\nconst VmDefaultUi = /*@__PURE__*/proxyCustomElement(DefaultUI, [1,\"vm-default-ui\",{\"noClickToPlay\":[4,\"no-click-to-play\"],\"noDblClickFullscreen\":[4,\"no-dbl-click-fullscreen\"],\"noCaptions\":[4,\"no-captions\"],\"noPoster\":[4,\"no-poster\"],\"noSpinner\":[4,\"no-spinner\"],\"noControls\":[4,\"no-controls\"],\"noSettings\":[4,\"no-settings\"],\"noLoadingScreen\":[4,\"no-loading-screen\"]}]);\nconst VmEmbed = /*@__PURE__*/proxyCustomElement(Embed, [1,\"vm-embed\",{\"embedSrc\":[1,\"embed-src\"],\"mediaTitle\":[1,\"media-title\"],\"params\":[1],\"origin\":[1],\"preconnections\":[16],\"decoder\":[16],\"srcWithParams\":[32],\"hasEnteredViewport\":[32]},[[8,\"message\",\"onWindowMessage\"]]]);\nconst VmEndTime = /*@__PURE__*/proxyCustomElement(EndTime, [1,\"vm-end-time\",{\"duration\":[2],\"i18n\":[16],\"alwaysShowHours\":[4,\"always-show-hours\"]}]);\nconst VmFile = /*@__PURE__*/proxyCustomElement(File, [6,\"vm-file\",{\"willAttach\":[4,\"will-attach\"],\"crossOrigin\":[1,\"cross-origin\"],\"preload\":[1],\"poster\":[1],\"mediaTitle\":[1,\"media-title\"],\"controlsList\":[1,\"controls-list\"],\"autoPiP\":[4,\"auto-pip\"],\"disablePiP\":[4,\"disable-pip\"],\"disableRemotePlayback\":[4,\"disable-remote-playback\"],\"viewType\":[1,\"view-type\"],\"playbackRates\":[16],\"language\":[1],\"autoplay\":[4],\"controls\":[4],\"logger\":[16],\"loop\":[4],\"muted\":[4],\"playsinline\":[4],\"noConnect\":[4,\"no-connect\"],\"paused\":[4],\"currentTime\":[2,\"current-time\"],\"volume\":[2],\"playbackReady\":[4,\"playback-ready\"],\"playbackStarted\":[4,\"playback-started\"],\"currentTextTrack\":[2,\"current-text-track\"],\"hasCustomTextManager\":[4,\"has-custom-text-manager\"],\"isTextTrackVisible\":[4,\"is-text-track-visible\"],\"shouldRenderNativeTextTracks\":[4,\"should-render-native-text-tracks\"],\"vmPoster\":[32]},[[0,\"vmMediaProviderConnect\",\"onProviderConnect\"],[0,\"vmMediaProviderDisconnect\",\"onProviderDisconnect\"]]]);\nconst VmFullscreenControl = /*@__PURE__*/proxyCustomElement(FullscreenControl, [1,\"vm-fullscreen-control\",{\"enterIcon\":[1,\"enter-icon\"],\"exitIcon\":[1,\"exit-icon\"],\"icons\":[1],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"keys\":[1],\"isFullscreenActive\":[4,\"is-fullscreen-active\"],\"i18n\":[16],\"playbackReady\":[4,\"playback-ready\"],\"canSetFullscreen\":[32]}]);\nconst VmHls = /*@__PURE__*/proxyCustomElement(HLS, [4,\"vm-hls\",{\"version\":[1],\"libSrc\":[1,\"lib-src\"],\"config\":[8],\"crossOrigin\":[1,\"cross-origin\"],\"preload\":[1],\"poster\":[1],\"controlsList\":[1,\"controls-list\"],\"autoPiP\":[4,\"auto-pip\"],\"disablePiP\":[4,\"disable-pip\"],\"disableRemotePlayback\":[4,\"disable-remote-playback\"],\"playbackReady\":[4,\"playback-ready\"],\"mediaTitle\":[1,\"media-title\"],\"hasAttached\":[32]},[[0,\"vmMediaElChange\",\"onMediaElChange\"],[0,\"vmSrcSetChange\",\"onSrcChange\"]]]);\nconst VmIcon = /*@__PURE__*/proxyCustomElement(Icon, [1,\"vm-icon\",{\"name\":[1],\"src\":[1],\"label\":[1],\"library\":[1],\"icons\":[1],\"svg\":[32]}]);\nconst VmIconLibrary = /*@__PURE__*/proxyCustomElement(IconLibrary, [1,\"vm-icon-library\",{\"name\":[1],\"resolver\":[16],\"icons\":[1]}]);\nconst VmLiveIndicator = /*@__PURE__*/proxyCustomElement(LiveIndicator, [1,\"vm-live-indicator\",{\"isLive\":[4,\"is-live\"],\"i18n\":[16]}]);\nconst VmLoadingScreen = /*@__PURE__*/proxyCustomElement(LoadingScreen, [1,\"vm-loading-screen\",{\"playbackReady\":[4,\"playback-ready\"],\"hideDots\":[4,\"hide-dots\"]}]);\nconst VmMenu = /*@__PURE__*/proxyCustomElement(Menu, [1,\"vm-menu\",{\"active\":[1540],\"identifier\":[1],\"controller\":[16],\"slideInDirection\":[1,\"slide-in-direction\"],\"activeMenuItem\":[32],\"activeSubmenu\":[32]},[[0,\"vmOpenSubmenu\",\"onOpenSubmenu\"],[0,\"vmCloseSubmenu\",\"onCloseSubmenu\"],[8,\"click\",\"onWindowClick\"],[8,\"keydown\",\"onWindowKeyDown\"]]]);\nconst VmMenuItem = /*@__PURE__*/proxyCustomElement(MenuItem, [1,\"vm-menu-item\",{\"identifier\":[1],\"hidden\":[4],\"label\":[1],\"menu\":[16],\"expanded\":[4],\"checked\":[4],\"hint\":[1],\"badge\":[1],\"checkIcon\":[1,\"check-icon\"],\"icons\":[1],\"isTouch\":[4,\"is-touch\"],\"showTapHighlight\":[32]}]);\nconst VmMenuRadio = /*@__PURE__*/proxyCustomElement(MenuRadio, [1,\"vm-menu-radio\",{\"label\":[1],\"value\":[1],\"checked\":[1028],\"badge\":[1],\"checkIcon\":[1,\"check-icon\"],\"icons\":[1]}]);\nconst VmMenuRadioGroup = /*@__PURE__*/proxyCustomElement(MenuRadioGroup, [1,\"vm-menu-radio-group\",{\"value\":[1025]},[[0,\"vmCheck\",\"onSelectionChange\"]]]);\nconst VmMuteControl = /*@__PURE__*/proxyCustomElement(MuteControl, [1,\"vm-mute-control\",{\"lowVolumeIcon\":[1,\"low-volume-icon\"],\"highVolumeIcon\":[1,\"high-volume-icon\"],\"mutedIcon\":[1,\"muted-icon\"],\"icons\":[1],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"keys\":[1],\"volume\":[2],\"muted\":[4],\"i18n\":[16]}]);\nconst VmPipControl = /*@__PURE__*/proxyCustomElement(PiPControl, [1,\"vm-pip-control\",{\"enterIcon\":[1,\"enter-icon\"],\"exitIcon\":[1,\"exit-icon\"],\"icons\":[1],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"keys\":[1],\"isPiPActive\":[4,\"is-pi-p-active\"],\"i18n\":[16],\"playbackReady\":[4,\"playback-ready\"],\"canSetPiP\":[32]}]);\nconst VmPlaybackControl = /*@__PURE__*/proxyCustomElement(PlaybackControl, [1,\"vm-playback-control\",{\"playIcon\":[1,\"play-icon\"],\"pauseIcon\":[1,\"pause-icon\"],\"icons\":[1],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"keys\":[1],\"paused\":[4],\"i18n\":[16]}]);\nconst VmPlayer = /*@__PURE__*/proxyCustomElement(Player, [1,\"vm-player\",{\"logger\":[16],\"theme\":[513],\"icons\":[513],\"paused\":[1028],\"playing\":[1028],\"duration\":[1026],\"mediaTitle\":[1025,\"media-title\"],\"currentProvider\":[1025,\"current-provider\"],\"currentSrc\":[1025,\"current-src\"],\"currentPoster\":[1025,\"current-poster\"],\"currentTime\":[1026,\"current-time\"],\"autoplay\":[4],\"ready\":[1540],\"playbackReady\":[1028,\"playback-ready\"],\"loop\":[4],\"muted\":[1028],\"buffered\":[1026],\"playbackRate\":[1026,\"playback-rate\"],\"playbackRates\":[1040],\"playbackQuality\":[1025,\"playback-quality\"],\"playbackQualities\":[1040],\"seeking\":[1028],\"debug\":[4],\"playbackStarted\":[1028,\"playback-started\"],\"playbackEnded\":[1028,\"playback-ended\"],\"buffering\":[1028],\"controls\":[4],\"isControlsActive\":[4,\"is-controls-active\"],\"isSettingsActive\":[1028,\"is-settings-active\"],\"volume\":[1026],\"isFullscreenActive\":[1028,\"is-fullscreen-active\"],\"aspectRatio\":[1025,\"aspect-ratio\"],\"viewType\":[1025,\"view-type\"],\"isAudioView\":[1028,\"is-audio-view\"],\"isVideoView\":[1028,\"is-video-view\"],\"mediaType\":[1025,\"media-type\"],\"isAudio\":[1028,\"is-audio\"],\"isVideo\":[1028,\"is-video\"],\"isLive\":[1028,\"is-live\"],\"isMobile\":[1028,\"is-mobile\"],\"isTouch\":[1028,\"is-touch\"],\"isPiPActive\":[1028,\"is-pi-p-active\"],\"textTracks\":[16],\"currentTextTrack\":[2,\"current-text-track\"],\"isTextTrackVisible\":[4,\"is-text-track-visible\"],\"shouldRenderNativeTextTracks\":[4,\"should-render-native-text-tracks\"],\"audioTracks\":[16],\"currentAudioTrack\":[2,\"current-audio-track\"],\"autopause\":[4],\"playsinline\":[4],\"language\":[1025],\"translations\":[1040],\"languages\":[1040],\"i18n\":[1040],\"container\":[32]},[[0,\"vmError\",\"onError\"]]]);\nconst VmPoster = /*@__PURE__*/proxyCustomElement(Poster, [1,\"vm-poster\",{\"fit\":[1],\"isVideoView\":[4,\"is-video-view\"],\"currentPoster\":[1,\"current-poster\"],\"mediaTitle\":[1,\"media-title\"],\"playbackStarted\":[4,\"playback-started\"],\"currentTime\":[2,\"current-time\"],\"isHidden\":[32],\"isActive\":[32],\"hasLoaded\":[32]}]);\nconst VmScrim = /*@__PURE__*/proxyCustomElement(Scrim, [1,\"vm-scrim\",{\"gradient\":[1],\"isVideoView\":[4,\"is-video-view\"],\"isControlsActive\":[4,\"is-controls-active\"]}]);\nconst VmScrubberControl = /*@__PURE__*/proxyCustomElement(ScrubberControl, [1,\"vm-scrubber-control\",{\"alwaysShowHours\":[4,\"always-show-hours\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"currentTime\":[2,\"current-time\"],\"duration\":[2],\"noKeyboard\":[4,\"no-keyboard\"],\"buffering\":[4],\"buffered\":[2],\"i18n\":[16],\"timestamp\":[32],\"endTime\":[32]}]);\nconst VmSettings = /*@__PURE__*/proxyCustomElement(Settings, [1,\"vm-settings\",{\"pin\":[513],\"active\":[1540],\"isMobile\":[4,\"is-mobile\"],\"isAudioView\":[4,\"is-audio-view\"],\"menuHeight\":[32]}]);\nconst VmSettingsControl = /*@__PURE__*/proxyCustomElement(SettingsControl, [1,\"vm-settings-control\",{\"icon\":[1],\"icons\":[1],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"menu\":[1],\"expanded\":[4],\"i18n\":[16],\"hideTooltip\":[4,\"hide-tooltip\"],\"vmSettings\":[32]}]);\nconst VmSkeleton = /*@__PURE__*/proxyCustomElement(Skeleton, [1,\"vm-skeleton\",{\"effect\":[1],\"ready\":[4],\"hidden\":[32]}]);\nconst VmSlider = /*@__PURE__*/proxyCustomElement(Slider, [1,\"vm-slider\",{\"step\":[2],\"min\":[2],\"max\":[2],\"value\":[2],\"valueText\":[1,\"value-text\"],\"label\":[1]}]);\nconst VmSpinner = /*@__PURE__*/proxyCustomElement(Spinner, [1,\"vm-spinner\",{\"isVideoView\":[4,\"is-video-view\"],\"currentProvider\":[1,\"current-provider\"],\"showWhenMediaLoading\":[4,\"show-when-media-loading\"],\"playbackReady\":[4,\"playback-ready\"],\"buffering\":[4],\"isHidden\":[32],\"isActive\":[32]}]);\nconst VmSubmenu = /*@__PURE__*/proxyCustomElement(Submenu, [1,\"vm-submenu\",{\"label\":[1],\"hint\":[1],\"slideInDirection\":[1,\"slide-in-direction\"],\"active\":[1540],\"menu\":[32],\"controller\":[32]}]);\nconst VmTime = /*@__PURE__*/proxyCustomElement(Time, [1,\"vm-time\",{\"label\":[1],\"seconds\":[2],\"alwaysShowHours\":[4,\"always-show-hours\"]}]);\nconst VmTimeProgress = /*@__PURE__*/proxyCustomElement(TimeProgress, [1,\"vm-time-progress\",{\"separator\":[1],\"alwaysShowHours\":[4,\"always-show-hours\"]}]);\nconst VmTooltip = /*@__PURE__*/proxyCustomElement(Tooltip, [1,\"vm-tooltip\",{\"hidden\":[4],\"active\":[4],\"position\":[1],\"direction\":[1],\"isTouch\":[4,\"is-touch\"],\"isMobile\":[4,\"is-mobile\"]}]);\nconst VmUi = /*@__PURE__*/proxyCustomElement(UI, [1,\"vm-ui\",{\"isVideoView\":[4,\"is-video-view\"],\"playsinline\":[4],\"isFullscreenActive\":[4,\"is-fullscreen-active\"]}]);\nconst VmVideo = /*@__PURE__*/proxyCustomElement(Video, [4,\"vm-video\",{\"willAttach\":[4,\"will-attach\"],\"hasCustomTextManager\":[4,\"has-custom-text-manager\"],\"crossOrigin\":[1,\"cross-origin\"],\"preload\":[1],\"poster\":[1],\"controlsList\":[1,\"controls-list\"],\"autoPiP\":[4,\"auto-pip\"],\"disablePiP\":[4,\"disable-pip\"],\"disableRemotePlayback\":[4,\"disable-remote-playback\"],\"mediaTitle\":[1,\"media-title\"]},[[0,\"vmMediaProviderConnect\",\"onProviderConnect\"],[0,\"vmMediaProviderDisconnect\",\"onProviderDisconnect\"]]]);\nconst VmVimeo = /*@__PURE__*/proxyCustomElement(Vimeo, [1,\"vm-vimeo\",{\"videoId\":[1,\"video-id\"],\"byline\":[4],\"color\":[1],\"portrait\":[4],\"noAutoAspectRatio\":[4,\"no-auto-aspect-ratio\"],\"poster\":[1],\"cookies\":[4],\"language\":[1],\"aspectRatio\":[1,\"aspect-ratio\"],\"autoplay\":[4],\"controls\":[4],\"logger\":[16],\"loop\":[4],\"muted\":[4],\"playsinline\":[4],\"embedSrc\":[32],\"mediaTitle\":[32]}]);\nconst VmVolumeControl = /*@__PURE__*/proxyCustomElement(VolumeControl, [1,\"vm-volume-control\",{\"lowVolumeIcon\":[1,\"low-volume-icon\"],\"highVolumeIcon\":[1,\"high-volume-icon\"],\"mutedIcon\":[1,\"muted-icon\"],\"icons\":[1],\"tooltipPosition\":[1,\"tooltip-position\"],\"tooltipDirection\":[1,\"tooltip-direction\"],\"hideTooltip\":[4,\"hide-tooltip\"],\"muteKeys\":[1,\"mute-keys\"],\"noKeyboard\":[4,\"no-keyboard\"],\"muted\":[4],\"volume\":[2],\"isMobile\":[4,\"is-mobile\"],\"i18n\":[16],\"currentVolume\":[32],\"isSliderActive\":[32]}]);\nconst VmYoutube = /*@__PURE__*/proxyCustomElement(YouTube, [1,\"vm-youtube\",{\"cookies\":[4],\"videoId\":[1,\"video-id\"],\"showFullscreenControl\":[4,\"show-fullscreen-control\"],\"poster\":[1],\"language\":[1],\"autoplay\":[4],\"controls\":[4],\"logger\":[16],\"loop\":[4],\"muted\":[4],\"playsinline\":[4],\"embedSrc\":[32],\"mediaTitle\":[32]}]);\nconst defineCustomElements = (opts) => {\n if (typeof customElements !== 'undefined') {\n [\n VmAudio,\n VmCaptionControl,\n VmCaptions,\n VmClickToPlay,\n VmControl,\n VmControlGroup,\n VmControlSpacer,\n VmControls,\n VmCurrentTime,\n VmDailymotion,\n VmDash,\n VmDblClickFullscreen,\n VmDefaultControls,\n VmDefaultSettings,\n VmDefaultUi,\n VmEmbed,\n VmEndTime,\n VmFile,\n VmFullscreenControl,\n VmHls,\n VmIcon,\n VmIconLibrary,\n VmLiveIndicator,\n VmLoadingScreen,\n VmMenu,\n VmMenuItem,\n VmMenuRadio,\n VmMenuRadioGroup,\n VmMuteControl,\n VmPipControl,\n VmPlaybackControl,\n VmPlayer,\n VmPoster,\n VmScrim,\n VmScrubberControl,\n VmSettings,\n VmSettingsControl,\n VmSkeleton,\n VmSlider,\n VmSpinner,\n VmSubmenu,\n VmTime,\n VmTimeProgress,\n VmTooltip,\n VmUi,\n VmVideo,\n VmVimeo,\n VmVolumeControl,\n VmYoutube\n ].forEach(cmp => {\n if (!customElements.get(cmp.is)) {\n customElements.define(cmp.is, cmp, opts);\n }\n });\n }\n};\n\nexport { COMPONENT_NAME_KEY, MediaType, PLAYER_KEY, Provider, REGISTRATION_KEY, REGISTRY_KEY, ViewType, VmAudio, VmCaptionControl, VmCaptions, VmClickToPlay, VmControl, VmControlGroup, VmControlSpacer, VmControls, VmCurrentTime, VmDailymotion, VmDash, VmDblClickFullscreen, VmDefaultControls, VmDefaultSettings, VmDefaultUi, VmEmbed, VmEndTime, VmFile, VmFullscreenControl, VmHls, VmIcon, VmIconLibrary, VmLiveIndicator, VmLoadingScreen, VmMenu, VmMenuItem, VmMenuRadio, VmMenuRadioGroup, VmMuteControl, VmPipControl, VmPlaybackControl, VmPlayer, VmPoster, VmScrim, VmScrubberControl, VmSettings, VmSettingsControl, VmSkeleton, VmSlider, VmSpinner, VmSubmenu, VmTime, VmTimeProgress, VmTooltip, VmUi, VmVideo, VmVimeo, VmVolumeControl, VmYoutube, createDispatcher, defineCustomElements, findPlayer, getComponentFromRegistry, getPlayerFromRegistry, initialState, isComponentRegistered, isWritableProp, usePlayerContext, watchComponentRegistry, withComponentRegistry, withPlayerContext };\n"],"names":["BUILD","scopeId","contentRef","hostTagName","useNativeShadowDom","checkSlotFallbackVisibility","checkSlotRelocate","isSvgMode","renderingRef","queuePending","win","doc","plt","h","el","eventName","listener","opts","supportsListenerOptions","promiseResolve","v","supportsConstructibleStylesheets","addHostEventListeners","elm","hostRef","listeners","attachParentListeners","flags","name","method","target","getHostListenerTarget","handler","hostListenerProxy","hostListenerOpts","methodName","ev","e","consoleError","XLINK_NS","createTime","fnName","tagName","rootAppliedStyles","registerStyle","cssText","allowCS","style","styles","addStyle","styleContainerNode","cmpMeta","mode","hostElm","getScopeId","appliedStyles","styleElm","attachStyles","endAttachStyles","cmp","computeMode","modeResolutionChain","m","EMPTY_OBJ","SVG_NS","HTML_NS","isDef","isComplexType","o","nodeName","vnodeData","children","child","key","slotName","simple","lastSimple","vNodeChildren","walk","c","i","newVNode","classData","k","vdomFnUtils","vnode","tag","text","Host","isHost","node","cb","convertToPublic","convertToPrivate","setAccessor","memberName","oldValue","newValue","isSvg","isProp","isMemberInElement","ln","classList","oldClasses","parseClassList","newClasses","prop","isComplex","n","xlink","parseClassListRegex","value","updateElement","oldVnode","newVnode","oldVnodeAttrs","newVnodeAttrs","createElm","oldParentVNode","newParentVNode","childIndex","parentElm","childNode","oldVNode","putBackInOriginalLocation","recursive","oldSlotChildNodes","parentReferenceNode","referenceNode","addVnodes","before","parentVNode","vnodes","startIdx","endIdx","containerElm","removeVnodes","callNodeRefs","updateChildren","oldCh","newCh","oldStartIdx","newStartIdx","idxInOld","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","elmToMove","isSameVnode","patch","vnode1","vnode2","oldChildren","newChildren","defaultHolder","updateFallbackSlotVisibility","childNodes","ilen","j","slotNameAttr","nodeType","relocateNodes","relocateSlotContent","hostContentNodes","relocateNodeData","isNodeLocatedInSlot","relocateNode","r","nodeToRelocate","vNode","renderVdom","renderFnResults","rootVnode","propName","attribute","relocateData","orgLocationNode","parentNodeRef","insertBeforeNode","refNode","getElement","ref","createEvent","detail","emitEvent","attachToAncestor","ancestorComponent","scheduleUpdate","isInitialLoad","writeTask","dispatchHooks","endSchedule","instance","promise","safeCall","then","updateComponent","endUpdate","endRender","callRender","postUpdateComponent","getRenderingRef","endPostUpdate","arg","thenFn","parsePropertyValue","propValue","propType","getValue","getHostRef","setValue","newVal","oldVal","watchMethods","watchMethodName","proxyComponent","Cstr","members","prototype","memberFlags","attrNameToPropName","attrName","_oldValue","_","initializeComponent","hmrVersionId","endRegisterStyles","fireConnectedCallback","connectedCallback","endConnected","setContentReference","contentRefElm","disconnectedCallback","rmListener","proxyCustomElement","compactMeta","originalConnectedCallback","originalDisconnectedCallback","registerHost","attachShadow","Fragment","hostRefs","queueDomReads","queueDomWrites","queueTask","queue","write","nextTick","flush","consume","listen","event","options","fireEventAndRetry","onFail","interval","maxRetries","timeout","attempt","found","retry","isColliding","a","b","translateAx","translateAy","translateBx","translateBy","aRect","bRect","noop","isNull","isUndefined","isNil","getConstructor","isNumber","isString","isFunction","isInstanceOf","constructor","deferredPromise","resolve","reject","res","rej","wrapStencilHook","component","lifecycle","hook","prevHook","createStencilHook","onConnect","onDisconnect","hasLoaded","FIND_PLAYER_EVENT","withFindPlayer","player","off","findPlayer","search","stopFiring","MediaType","STATE_CHANGE_EVENT","createDispatcher","en","initialState","writableProps","isWritableProp","resetableProps","shouldPropResetOnMediaChange","ViewType","Disposal","dispose","callback","fn","__awaiter$y","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","result","PLAYER_KEY","COMPONENT_NAME_KEY","REGISTRY_KEY","REGISTRATION_KEY","REGISTER_COMPONENT_EVENT","COMPONENT_REGISTERED_EVENT","COMPONENT_DEREGISTERED_EVENT","getRegistrant","withComponentRegistry","registryId","registrant","registerEvent","withComponentRegistrar","registry","disposal","onDeregister","onRegister","isComponentRegistered","_a","getPlayerFromRegistry","getComponentFromRegistry","_b","watchComponentRegistry","onChange","reg","createDeferredPromise","openWormhole","Component","props","isBlocking","isConstructor","Proto","componentWillLoad","_this","onOpen","willLoad","multiverse","updateConsumer","state","fields","updater","field","Universe","creator","wormholes","universe","consumer","connectedCallback_1","disconnectedCallback_1","opening","LOAD_START_EVENT","isToggleStateEvent","hasShortenedEventName","getEventName","firePlayerEvent","events","withPlayerContext","Provider","audioRegex","videoRegex","hlsRegex","PROVIDER_CHANGE_EVENT","createProviderDispatcher","providerWritableProps","isProviderWritableProp","__awaiter$w","PROVIDER_CACHE_KEY","PROVIDER_CONNECT_EVENT","PROVIDER_DISCONNECT_EVENT","buildProviderConnectEvent","host","withProviderHost","connector","cache","initCache","provider","by","withProviderConnect","connectEvent","__awaiter$v","Audio","adapter","type","watch$1","controls","collisions","update","controlsEl","controlsHeight","watchedEl","watchedElCollisions","hasCollided","willCollide","registerControlsForCollisionDetection","getInnerEl","innerEl","withControlsCollisionDetection","captionsCss","__awaiter$t","Captions","textTrack","renderCues","activeCues","container","entries","entry","width","cue","div","clickToPlayCss","__awaiter$s","ClickToPlay","controlCss","__awaiter$r","Control","codes","tooltip","isMenuExpanded","isPressed","debounce","func","wait","immediate","args","context","later","callNow","controlsCss","__awaiter$q","playerRef","hideControlsTimeout","Controls","pos","s","currentTimeCss","CurrentTime","IS_CLIENT","UA","IS_IOS","IS_ANDROID","IS_MOBILE","IS_IPHONE","onMobileChange","onResize","onTouchInputChange","lastTouchTime","offTouchListener","offMouseListener","canRotateScreen","canUsePiPInChrome","video","canUsePiPInSafari","canUsePiP","canAutoplay","muted","playsinline","withProviderContext","additionalProps","defaultControlsCss","DefaultControls","defaultSettingsCss","__awaiter$m","DefaultSettings","radio","formatRate","rate","getBadge","quality","verticalPixels","trackId","_c","track","defaultUiCss","DefaultUI","LazyLoader","attributes","onLoad","endTimeCss","EndTime","webkit","moz","ms","document$1","vendor","fscreen","element","val","mitt","t","__awaiter$k","FullscreenController","__awaiter$j","VideoFullscreenController","presentationController","__awaiter$i","VideoPresentationController","fileCss","__awaiter$h","File","regs","poster","src","srcSet","source","resource","currentSrc","buffered","duration","end","toggle","time","volume","isVisible","tracks","textTrackList","id","newTrackId","textTracks","oldTrack","nextTrack","mediaProps","audio","ICONS_BASE_CDN_URL","iconName","watch","withIconRegistry","getIconLibraryResolver","registerIconLibrary","resolver","iconEl","deregisterIconLibrary","__awaiter$e","iconFiles","requestIcon","url","request","response","svg","iconCss","__awaiter$d","parser","Icon","label","file","IconLibrary","loadingScreenCss","LoadingScreen","unwrapSubmenu","unwrapRadioGroup","slot","menuItemHunter","assignedElements","allowed","acc","menuCss","__awaiter$c","Menu","item","height","submenu","_d","_e","items","index","menuItemCss","__awaiter$b","MenuItem","isCheckedDefined","isMenuDefined","hasExpanded","isChecked","showCheckedIcon","showLeftNavArrow","showRightNavArrow","showHint","showBadge","hasSpacer","MenuRadio","MenuRadioGroup","MuteControl","volumeIcon","tooltipWithHint","PlaybackControl","Logger","players","withAutopause","autopause","p","withPlayerEvents","componentDidRender","__awaiter$9","immediateAdapterCall","withPlayerScheduler","adapterCalls","flushAdapterCalls","hasMediaChanged","onMediaChange","onStateChange","onProviderDisconnect","isAdapterCallRequired","playerCss","__awaiter$8","idCount$3","Player","isActive","error","newRate","prevRate","newQuality","prevQuality","prevLanguage","language","translation","translations","isMobile","isTouch","err","canShowCustomUI","isIdle","isBlockerVisible","getHours","getMinutes","getSeconds","formatTime","seconds","alwaysShowHours","format","hours","mins","secs","scrubberControlCss","__awaiter$7","ScrubberControl","onKeyDown","seekTo","tooltipRect","bounds","thumbWidth","leftLimit","rightLimit","xPos","rect","percent","sliderValueText","settingsCss","__awaiter$6","idCount$2","Settings","controller","settingsControlCss","__awaiter$5","idCount$1","SettingsControl","hasSettings","control","skeletonCss","Skeleton","sliderCss","Slider","input","touch","min","max","delta","clientRect","sliderThumbWidth","position","__awaiter$4","idCount","Submenu","timeCss","Time","timeProgressCss","TimeProgress","tooltipCss","tooltipIdCount","Tooltip","uiCss","UI","VimeoEvent","volumeControlCss","__awaiter$1","VolumeControl","newVolume","VmAudio","VmCaptions","VmClickToPlay","VmControl","VmControls","VmCurrentTime","VmDefaultControls","VmDefaultSettings","VmDefaultUi","VmEndTime","VmFile","VmIcon","VmIconLibrary","VmLoadingScreen","VmMenu","VmMenuItem","VmMenuRadio","VmMenuRadioGroup","VmMuteControl","VmPlaybackControl","VmPlayer","VmScrubberControl","VmSettings","VmSettingsControl","VmSkeleton","VmSlider","VmSubmenu","VmTime","VmTimeProgress","VmTooltip","VmUi","VmVolumeControl"],"mappings":"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","x_google_ignoreList":[0,1,2]}